DESIGN/PROGRESS: 同步 TUI 打磨 + task_dir 落地
DESIGN: 目录树补全 task_dir 内的 skill 产物;启动顺序 #5 加 task_dir 注入; 3.1 主循环增补 markdown 渲染、spinner 实时耗时/token、每轮成本行。 PROGRESS: 加 2026-05-07 条目;工具基目录决策更新;loop/main 行数刷新。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
bb9e92bb84
commit
3869089a44
16
DESIGN.md
16
DESIGN.md
|
|
@ -56,17 +56,25 @@ zcbot/
|
||||||
├── workspace/
|
├── workspace/
|
||||||
│ └── tasks/<task_id>/
|
│ └── tasks/<task_id>/
|
||||||
│ ├── state.json # TaskState
|
│ ├── state.json # TaskState
|
||||||
│ └── messages.json # Session
|
│ ├── messages.json # Session
|
||||||
|
│ ├── spec_lock.md # skill 阶段一产物 (proposal/ppt)
|
||||||
|
│ ├── source/ # proposal 用户素材 (PDF / 团队介绍)
|
||||||
|
│ ├── source.md # ppt 转过的素材
|
||||||
|
│ ├── sections/ # proposal 逐章 md (01_summary.md ... 12_appendix.md)
|
||||||
|
│ ├── slides/ # ppt 中间素材 (chart_p?.png)
|
||||||
|
│ └── <topic>.docx / .pptx # 最终产物
|
||||||
├── main.py # 装配 (build_agent)
|
├── main.py # 装配 (build_agent)
|
||||||
└── cli.py # CLI: chat / tasks / probe
|
└── cli.py # CLI: chat / tasks / probe
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**task_dir = `workspace/tasks/<task_id>/`,所有 skill 产物都写到这里**。task_dir 绝对路径在 system prompt 里显式给 agent,SKILL.md 的 `<task_dir>` 占位符指向它。如果 agent 写错位置(写到 cwd / `skills/` / repo 根),git status 会立刻报红 —— `.gitignore` 不再用无锚通配规则盖住污染。
|
||||||
|
|
||||||
### 启动时拼装顺序
|
### 启动时拼装顺序
|
||||||
1. 读 `config/agent.yaml` 拿 default_model
|
1. 读 `config/agent.yaml` 拿 default_model
|
||||||
2. `ModelCapabilities.load("deepseek_v4.flash", config/models/)` 拿能力档案
|
2. `ModelCapabilities.load("deepseek_v4.flash", config/models/)` 拿能力档案
|
||||||
3. `LLM(caps)` 构造,从 env 读 API key
|
3. `LLM(caps)` 构造,从 env 读 API key
|
||||||
4. 解析 task_dir(新建 or resume)
|
4. 解析 task_dir(新建 or resume)
|
||||||
5. 拼 system prompt:`prompts/system/general_v1.md` + `SkillRegistry.discovery_block()`(skill 列表)+ 当前 cwd
|
5. 拼 system prompt:`prompts/system/general_v1.md` + `SkillRegistry.discovery_block()`(skill 列表)+ cwd + **task_dir 绝对路径**(产物根)
|
||||||
6. 装配工具集(fs / shell / load_skill / run_python)
|
6. 装配工具集(fs / shell / load_skill / run_python)
|
||||||
7. 写初始 `state.json` + `messages.json`,启动 REPL
|
7. 写初始 `state.json` + `messages.json`,启动 REPL
|
||||||
|
|
||||||
|
|
@ -77,7 +85,9 @@ zcbot/
|
||||||
### 3.1 主循环(`core/loop.py`)
|
### 3.1 主循环(`core/loop.py`)
|
||||||
ReAct 风格:LLM → 若有 tool_calls 就执行 → 把结果塞回消息列表 → 再调 LLM。无 tool_call 即返回。
|
ReAct 风格:LLM → 若有 tool_calls 就执行 → 把结果塞回消息列表 → 再调 LLM。无 tool_call 即返回。
|
||||||
- 工具结果对模型截断到 16K 字符,对用户预览 400 字符
|
- 工具结果对模型截断到 16K 字符,对用户预览 400 字符
|
||||||
- 用 `console.status("thinking...")` 转圈点,所有日志走 `rich`
|
- thinking spinner 由后台 daemon 线程每 100ms 刷新文本:`thinking... 1.3s ctx 12,345 tok`(累计 token 反映上下文大小)
|
||||||
|
- 每轮 LLM 返回追加 dim 一行 `[in N out N t Xs]` —— 留痕本轮成本
|
||||||
|
- assistant 文字走 `rich.markdown.Markdown` 渲染,粗体/列表/表格/代码块正常展示(非流式,整段渲染)
|
||||||
- `max_iterations` 从 capabilities 读,不同模型不同
|
- `max_iterations` 从 capabilities 读,不同模型不同
|
||||||
|
|
||||||
### 3.2 Model Profile(`core/capabilities.py` + `config/models/*.yaml`)
|
### 3.2 Model Profile(`core/capabilities.py` + `config/models/*.yaml`)
|
||||||
|
|
|
||||||
20
PROGRESS.md
20
PROGRESS.md
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
> 配合 `DESIGN.md` 阅读。本文件只记录 phase 状态、决策偏差、文件量、下一步。
|
> 配合 `DESIGN.md` 阅读。本文件只记录 phase 状态、决策偏差、文件量、下一步。
|
||||||
|
|
||||||
最后更新:2026-05-06(Phase 4 + Phase 6 task/state.json 落地;Phase 5 evals 决定不做)
|
最后更新:2026-05-07(TUI 打磨 + task_dir 概念真正落地)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -34,13 +34,19 @@
|
||||||
- CLI 新增 `tasks` 子命令 + REPL `/status /done /abandon /desc`;`chat` 加 `--mode --desc` 选项
|
- CLI 新增 `tasks` 子命令 + REPL `/status /done /abandon /desc`;`chat` 加 `--mode --desc` 选项
|
||||||
- 移除 legacy `workspace/sessions/` 兼容(单一布局)
|
- 移除 legacy `workspace/sessions/` 兼容(单一布局)
|
||||||
|
|
||||||
|
**TUI 打磨 + task_dir 落地**(2026-05-07):
|
||||||
|
- assistant 文字走 `rich.markdown.Markdown`,粗体/列表/表格/代码块正常渲染(非流式)
|
||||||
|
- thinking spinner 由 daemon 线程每 100ms 刷文案,显示实时耗时 + 累计 token;每轮 LLM 返回追加 dim 一行 `[in N out N t Xs]` 留痕
|
||||||
|
- system prompt 显式注入 `task_dir` 绝对路径,SKILL.md 里 `<task_dir>` 占位符**真正落地**;`spec_lock.md` / `sections/` / `slides/` / 最终 docx/pptx 全收敛到 `workspace/tasks/<id>/`
|
||||||
|
- `.gitignore` 删 `sections/` `slides/` `spec_lock.md` 三条无锚 bandaid —— 现在写错位置 git status 立刻报红,不再靠 ignore 兜底
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 关键决策与偏差
|
## 关键决策与偏差
|
||||||
|
|
||||||
| 项 | 决策 | 与设计差异 |
|
| 项 | 决策 | 与设计差异 |
|
||||||
|---|------|-----------|
|
|---|------|-----------|
|
||||||
| 工具基目录 | 用户当前 cwd | 设计未明说;agent 该操作用户项目 |
|
| 工具基目录 | 用户当前 cwd(读)+ task_dir(写) | system prompt 同时给 cwd 与 task_dir 绝对路径,SKILL.md `<task_dir>` 占位符指向 task_dir |
|
||||||
| Workspace 用途 | `tasks/<id>/{state.json, messages.json}` | memory/ 待 Phase 6 双层记忆 |
|
| Workspace 用途 | `tasks/<id>/{state.json, messages.json}` | memory/ 待 Phase 6 双层记忆 |
|
||||||
| Eval Suite | 不做 | 设计为团队场景;个人工具 dogfooding 替代 |
|
| Eval Suite | 不做 | 设计为团队场景;个人工具 dogfooding 替代 |
|
||||||
| 版本化 prompt | 直接 `general_v1.md`,无 active.md 软链接 | Windows 软链接麻烦,真要切版本时再做 |
|
| 版本化 prompt | 直接 `general_v1.md`,无 active.md 软链接 | Windows 软链接麻烦,真要切版本时再做 |
|
||||||
|
|
@ -53,20 +59,20 @@
|
||||||
```
|
```
|
||||||
core/capabilities.py 71
|
core/capabilities.py 71
|
||||||
core/llm.py 89
|
core/llm.py 89
|
||||||
core/loop.py 99
|
core/loop.py 157 ← +markdown 渲染 / spinner 显时长+token
|
||||||
core/probe.py 243 ← Phase 4
|
core/probe.py 243 ← Phase 4
|
||||||
core/session.py 77
|
core/session.py 77
|
||||||
core/skills.py 81
|
core/skills.py 81
|
||||||
core/task.py 63 ← Phase 6
|
core/task.py 63 ← Phase 6
|
||||||
tools/base.py 34
|
tools/base.py 34
|
||||||
tools/fs.py 182
|
tools/fs.py 182
|
||||||
tools/shell.py 63
|
tools/shell.py 94
|
||||||
tools/run_python.py 84
|
tools/run_python.py 84
|
||||||
tools/skill_tool.py 45
|
tools/skill_tool.py 45
|
||||||
main.py 175 ← Phase 6 task 装配
|
main.py 185 ← Phase 6 task 装配 / +task_dir 注入
|
||||||
cli.py 265 ← +probe / +tasks 子命令
|
cli.py 264 ← +probe / +tasks 子命令
|
||||||
─────────────────────────────────
|
─────────────────────────────────
|
||||||
Python 合计 ~1571 行
|
Python 合计 ~1669 行
|
||||||
```
|
```
|
||||||
|
|
||||||
加上 skills/ppt 下的脚本(~600 行)、SKILL.md / references / config / prompts,总仓库约 2500 行可读源码。
|
加上 skills/ppt 下的脚本(~600 行)、SKILL.md / references / config / prompts,总仓库约 2500 行可读源码。
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue