Files
dbtool-cli-v1/apps/tui/README.md
Paperclip CTO 19aeb7784b
Some checks failed
release-smoke / macos-13 / x86_64-apple-darwin (push) Has been cancelled
release-smoke / ubuntu-latest / x86_64-unknown-linux-gnu (push) Has been cancelled
release-smoke / windows-latest / x86_64-pc-windows-msvc (push) Has been cancelled
feat: add dbtool tui live query workspace
- add shared db-app layer for connect/inspect/query/export events
- add dbtool-tui workspace with sqlite-local live flow and QA docs
- include host-validated acceptance updates for CMP-36

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-27 17:17:20 +00:00

115 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# dbtool-tui Shell
`apps/tui` 提供 `dbtool-tui-v1` 的终端工作台实现。
## 当前范围
当前实现包含:
- 独立 `dbtool-tui` 应用入口
- 稳定的六区工作台布局
- 顶部视图切换与底部快捷键提示
- 连接管理列表、当前连接上下文和失败连接可视化区分
- 键盘驱动的连接切换工作流,以及连接 `loading / success / failure` 可视状态
- `sqlite-local` 的真实 connect / inspect 路径schema browser 可展示 live schema / table / column
- `sqlite-local` 的真实 query / results / export 工作流,直接复用 `crates/db-app`
- 查询草稿切换、基础键入编辑、执行触发与执行状态反馈
- 成功 / 空结果 / 错误三类查询结果展示,以及宽表列分页提示
- 当前结果集导出到 `/tmp` 的 CSV / JSON 反馈
- 面板焦点管理
- 列表选择与基础键盘导航
- `Ready` / `Loading` / `Error` 三种基础界面状态
- 终端尺寸过小的显式降级提示
当前不包含:
- 真实网络数据库连接激活
- 多连接并发会话
- 自定义新增 / 编辑连接表单
- 完整 SQL 编辑器能力
## 运行方式
在项目根目录执行:
```bash
cargo run -p dbtool-tui
```
当前默认 live 路径是 `sqlite-local`,底层使用 `examples/tmp/dbtool-demo.sqlite`
启动后会自动对 `sqlite-local` 执行 connect + inspect切换连接时会重新触发 live activation。
如果当前 runner 缺少 Rust 工具链,可先使用已有产物:
```bash
./target/debug/dbtool-tui
```
## 键盘交互
- `Tab` / `Shift+Tab`:切换焦点面板
- `←` / `→``1` / `2` / `3`:切换顶部视图
- `↑` / `↓`移动连接、schema/object 或结果行选择
- `Enter`:在 `Connections` 焦点下激活所选连接;在 `Schema Browser` 焦点下展开 / 折叠 schema 或确认对象;在 `Query Editor` 焦点下执行当前查询
- `i`:在 `Query Editor` 中进入基础插入模式
- `x`:将当前结果集导出为 CSV 到 `/tmp`
- `j`:将当前结果集导出为 JSON 到 `/tmp`
- `[` / `]`:在 `Query Editor` 中切换查询草稿;在 `Results` 中横向翻页宽表列
- `r`:清空当前 query / export 反馈,回到 `Ready`
- `Esc`:回到默认工作台
- `q`:退出
## 快速测试路径
如果你只是想快速走通一遍当前可见工作流,推荐按下面步骤操作:
1. 启动 `cargo run -p dbtool-tui`
2. 等待默认连接 `sqlite-local``Loading` 变成可用状态
3.`Tab` 把焦点切到 `Schema Browser`
4.`↑` / `↓` 选择 `main.accounts``main.tickets`
5.`Tab` 切到 `Query Editor`
6. 先不要按 `i`,直接按 `[` / `]` 切换草稿
7. 选中 `account_ticket_summary.sql` 后按 `Enter`,确认成功结果
8. 切到 `empty_recent_tickets.sql` 后按 `Enter`,确认空结果
9. 切到 `bad_syntax.sql` 后按 `Enter`,确认错误结果持续留在工作区
10. 切到 `ticket_export_preview.sql` 后按 `Enter`,成功后按 `x``j`,确认导出反馈和 `/tmp` 路径
## 常见困惑
- `Inserted a newline. Press Esc, then Enter to run.`:表示你已经按了 `i` 进入编辑模式,然后按了 `Enter`;这时 `Enter` 不会执行查询,而是插入换行。按 `Esc` 退出编辑模式后,再按 `Enter` 才是执行查询。
- 当前不能自定义输入数据库连接:这是当前范围外能力。当前 TUI 只提供内置的 `sqlite-local`、Postgres、MySQL 示例连接,用于验证工作台流程和状态反馈。
- 如果觉得界面文字偏多:本轮已先做一轮 Help / Status / Connections 文案收敛;当前版本仍偏向 QA / 契约验证界面,后续再继续收敛文案。
## 界面验收
QA 可按以下步骤复核:
1. 启动后能看到 `Connections``Schema Browser``Query Editor``Results``Inspector``Status & Activity` 六个区域
2. 默认活动连接应为 `sqlite-local`,且 `Connections` 列表中能区分当前连接、可选连接和失败连接
3. 使用 `2` 进入 `Connections` 视图后,可用 `↑` / `↓` 移动连接选择
4.`Connections` 焦点下按 `Enter` 激活失败连接时,`Status & Activity``Inspector` 会持续显示可读错误,而不是只给瞬时提示
5. 启动后或回到 `sqlite-local` 后,连接状态会先进入 `Loading`,随后在 `Schema Browser` 焦点下可浏览 `main.accounts``main.tickets`
6. 选中对象后,`Results` 会展示列定义,`Inspector` 会展示当前 schema / object / column 上下文
7.`Query Editor` 焦点下可用 `[` / `]` 切换查询草稿,`i` 进入基础输入模式,`Enter` 触发执行
8. `account_ticket_summary.sql` 应返回真实结果行,`empty_recent_tickets.sql` 应显示空结果,`bad_syntax.sql` 应显示结构化错误
9. `ticket_export_preview.sql` 执行成功后,按 `x``j` 应在工作区内看到导出成功反馈和 `/tmp` 输出路径
10. 成功结果在 `Results` 中以表格方式展示,宽表会给出列分页提示,长结果仍可用 `↑` / `↓` 浏览
11. 错误状态会保留可读错误信息,不退化成空白或瞬时提示
12. 使用 `Tab` / `Shift+Tab` 时,当前焦点区域边框高亮会移动
13. 使用 `←` / `→``1` / `2` / `3` 时,中间内容区会随视图切换
14. 使用 `r`query / export 反馈会清空并回到 `Ready`
15. 将终端缩小到低于 `100x28` 时,会出现尺寸不足提示而不是错乱布局
16. 使用 `Esc` 可恢复默认工作台,使用 `q` 可稳定退出
## 当前限制
- `sqlite-local` 是当前唯一可在本地 runner 直接完成 live connect / inspect / query / export 的路径
- Postgres / MySQL 连接仍以可读失败态保留,用于验证多目标上下文和错误持续可见性
- 当前 runner 若缺少 `cargo`,需要使用已有二进制做交互 smoke源码重建与测试需在具备 Rust 工具链的环境完成
共享 QA 文档:
- `TUI_ACCEPTANCE_CHECKLIST.md`
- `TUI_TEST_STRATEGY.md`
- `TUI_REGRESSION_CHECKLIST.md`