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/
|
||||
│ └── tasks/<task_id>/
|
||||
│ ├── 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)
|
||||
└── 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
|
||||
2. `ModelCapabilities.load("deepseek_v4.flash", config/models/)` 拿能力档案
|
||||
3. `LLM(caps)` 构造,从 env 读 API key
|
||||
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)
|
||||
7. 写初始 `state.json` + `messages.json`,启动 REPL
|
||||
|
||||
|
|
@ -77,7 +85,9 @@ zcbot/
|
|||
### 3.1 主循环(`core/loop.py`)
|
||||
ReAct 风格:LLM → 若有 tool_calls 就执行 → 把结果塞回消息列表 → 再调 LLM。无 tool_call 即返回。
|
||||
- 工具结果对模型截断到 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 读,不同模型不同
|
||||
|
||||
### 3.2 Model Profile(`core/capabilities.py` + `config/models/*.yaml`)
|
||||
|
|
|
|||
20
PROGRESS.md
20
PROGRESS.md
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
> 配合 `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` 选项
|
||||
- 移除 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 双层记忆 |
|
||||
| Eval Suite | 不做 | 设计为团队场景;个人工具 dogfooding 替代 |
|
||||
| 版本化 prompt | 直接 `general_v1.md`,无 active.md 软链接 | Windows 软链接麻烦,真要切版本时再做 |
|
||||
|
|
@ -53,20 +59,20 @@
|
|||
```
|
||||
core/capabilities.py 71
|
||||
core/llm.py 89
|
||||
core/loop.py 99
|
||||
core/loop.py 157 ← +markdown 渲染 / spinner 显时长+token
|
||||
core/probe.py 243 ← Phase 4
|
||||
core/session.py 77
|
||||
core/skills.py 81
|
||||
core/task.py 63 ← Phase 6
|
||||
tools/base.py 34
|
||||
tools/fs.py 182
|
||||
tools/shell.py 63
|
||||
tools/shell.py 94
|
||||
tools/run_python.py 84
|
||||
tools/skill_tool.py 45
|
||||
main.py 175 ← Phase 6 task 装配
|
||||
cli.py 265 ← +probe / +tasks 子命令
|
||||
main.py 185 ← Phase 6 task 装配 / +task_dir 注入
|
||||
cli.py 264 ← +probe / +tasks 子命令
|
||||
─────────────────────────────────
|
||||
Python 合计 ~1571 行
|
||||
Python 合计 ~1669 行
|
||||
```
|
||||
|
||||
加上 skills/ppt 下的脚本(~600 行)、SKILL.md / references / config / prompts,总仓库约 2500 行可读源码。
|
||||
|
|
|
|||
Loading…
Reference in New Issue