docs(workspace): whitelist ratatui/crossterm for focus-tui
Terminal interaction (raw mode, incremental redraw, scrolling, mouse, keys) is a genuine need that pure std cannot reasonably solve, so AGENTS.md §2.1 now exempts ratatui + crossterm for focus-tui only (transitives follow). Workspace gains the focus-tui member and the 7-crate layout is documented.
This commit is contained in:
parent
159f1ca815
commit
792f2fae4c
|
|
@ -2,3 +2,5 @@
|
|||
|
||||
/pi-main
|
||||
/pi_agent_rust-main
|
||||
|
||||
.VSCodeCounter
|
||||
26
AGENTS.md
26
AGENTS.md
|
|
@ -77,6 +77,7 @@ let b = self.buf.pop_front();
|
|||
|---|---|---|
|
||||
| 异步运行时 | `tokio` | `tokio`(features 按需,见下) |
|
||||
| TLS | rustls 生态 | `rustls`、`tokio-rustls`、`rustls-native-certs`(或 `webpki-roots`) |
|
||||
| TUI 渲染 | `ratatui` + `crossterm` | 仅 `focus-tui` 可用。终端交互(原始模式、增量重绘、滚动、鼠标、键盘事件)属于纯 std 无法合理解决的**真实需求**,故特批;`ratatui` 的传递依赖(`crossterm`、`unicode-width` 等)随其引入。其余 crate 一律禁止引用 |
|
||||
|
||||
**这就是全部。** 以下 crate **明确禁止**:
|
||||
- ❌ `serde` / `serde_json` — JSON 用自研 `focus-json` crate
|
||||
|
|
@ -110,8 +111,8 @@ let b = self.buf.pop_front();
|
|||
|
||||
## 3. Workspace 结构
|
||||
|
||||
细粒度 6-crate 拆分,每个 crate 职责单一、边界清晰、可独立测试。
|
||||
(`focus-cli` 已删除;TUI 交互层将在后续里程碑以新 crate 加入,届时再更新本图。)
|
||||
细粒度 7-crate 拆分,每个 crate 职责单一、边界清晰、可独立测试。
|
||||
(`focus-cli` 已删除,由 `focus-tui` 替代。)
|
||||
|
||||
```text
|
||||
focus/
|
||||
|
|
@ -123,8 +124,9 @@ focus/
|
|||
│ ├── focus-core/ # agent 层:类型 + 循环 + Tool trait
|
||||
│ ├── focus-transport/ # Transport trait + HTTP/1.1 + TLS + SSE 解析
|
||||
│ ├── focus-providers/ # provider 实现(Anthropic / OpenAI)
|
||||
│ ├── focus-tools/ # 文件工具(read / write / bash)
|
||||
│ └── focus-harness/ # 会话持久化 + 上下文压缩 + 系统提示模板
|
||||
│ ├── focus-tools/ # 文件工具(read / write / edit / shell)
|
||||
│ ├── focus-harness/ # 会话持久化 + 上下文压缩 + 系统提示模板
|
||||
│ └── focus-tui/ # 终端交互层(ratatui + crossterm)
|
||||
├── docs/
|
||||
│ └── architecture/ # 架构解读文档(已存在)
|
||||
└── tests/ # workspace 级集成测试(可选)
|
||||
|
|
@ -137,8 +139,9 @@ focus-json ← (零外部依赖,纯 std)
|
|||
focus-core ← focus-json, tokio
|
||||
focus-transport ← focus-json, tokio, rustls, tokio-rustls, rustls-native-certs
|
||||
focus-providers ← focus-core, focus-transport
|
||||
focus-tools ← focus-core, tokio
|
||||
focus-tools ← focus-core
|
||||
focus-harness ← focus-core, focus-json
|
||||
focus-tui ← focus-core, focus-providers, focus-tools, focus-harness, focus-json, ratatui, crossterm
|
||||
```
|
||||
|
||||
**规则**:
|
||||
|
|
@ -181,11 +184,14 @@ focus-harness ← focus-core, focus-json
|
|||
- **会话存储**:参考 pi 的设计——树结构(每条 entry 有 `id` + `parentId`),JSONL 追加写。
|
||||
- **测试**:会话树的构建/查询/分支、压缩的 token 估算与切点算法。
|
||||
|
||||
#### `focus-cli` — 已删除(由 TUI 替代)
|
||||
- `focus-cli` 已彻底删除(不再作为 workspace 成员)。后续里程碑将新增 TUI crate
|
||||
(届时命名,如 `focus-tui`),承担**组装**职责:provider + tools + harness 的装配、
|
||||
base_url / api_key / model 等配置(provider 构造时传入)、动态系统提示注入、
|
||||
自动上下文压缩的执行(harness 产出方案 → 调 provider 摘要 → `Agent::replace_messages` 写回)。
|
||||
#### `focus-tui` — 终端交互层(组装职责)
|
||||
- **内容**:provider + tools + harness 的装配、base_url / api_key / model 等配置
|
||||
(`~/.focus/config.json`,TUI 内 `/config` 编辑;provider 构造时传入)、动态系统
|
||||
提示注入(方案 E 的 Usage/上下文占用)、自动上下文压缩的执行(harness 产出方案 →
|
||||
调 provider 摘要 → `Agent::replace_messages` 写回)、会话持久化(`~/.focus/sessions/`)。
|
||||
- **交互**:多行输入、流式显示、Esc 中止、折叠的思考/工具块(显示耗时与内容摘要,
|
||||
点击或 Tab 展开)、命令(`/new` `/sessions` `/config` `/compact`)。
|
||||
- **禁止**:把业务逻辑放这里。这里只做**组装与呈现**。
|
||||
|
||||
## 4. 代码规范
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -13,6 +13,7 @@ members = [
|
|||
"crates/focus-providers",
|
||||
"crates/focus-tools",
|
||||
"crates/focus-harness",
|
||||
"crates/focus-tui",
|
||||
]
|
||||
|
||||
# Shared dependency versions. Member crates reference these with
|
||||
|
|
@ -37,6 +38,7 @@ focus-transport = { path = "crates/focus-transport" }
|
|||
focus-providers = { path = "crates/focus-providers" }
|
||||
focus-tools = { path = "crates/focus-tools" }
|
||||
focus-harness = { path = "crates/focus-harness" }
|
||||
focus-tui = { path = "crates/focus-tui" }
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
|
|
|
|||
Loading…
Reference in New Issue