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