From 3869089a44ba2166bf8628a649d545369d4aa7b1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 7 May 2026 14:20:59 +0800 Subject: [PATCH] =?UTF-8?q?DESIGN/PROGRESS:=20=E5=90=8C=E6=AD=A5=20TUI=20?= =?UTF-8?q?=E6=89=93=E7=A3=A8=20+=20task=5Fdir=20=E8=90=BD=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- DESIGN.md | 16 +++++++++++++--- PROGRESS.md | 20 +++++++++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/DESIGN.md b/DESIGN.md index 9ebbd63..15ecea3 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -56,17 +56,25 @@ zcbot/ ├── workspace/ │ └── tasks// │ ├── 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) +│ └── .docx / .pptx # 最终产物 ├── main.py # 装配 (build_agent) └── cli.py # CLI: chat / tasks / probe ``` +**task_dir = `workspace/tasks//`,所有 skill 产物都写到这里**。task_dir 绝对路径在 system prompt 里显式给 agent,SKILL.md 的 `` 占位符指向它。如果 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`) diff --git a/PROGRESS.md b/PROGRESS.md index 686f51f..078400b 100644 --- a/PROGRESS.md +++ b/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 里 `` 占位符**真正落地**;`spec_lock.md` / `sections/` / `slides/` / 最终 docx/pptx 全收敛到 `workspace/tasks//` +- `.gitignore` 删 `sections/` `slides/` `spec_lock.md` 三条无锚 bandaid —— 现在写错位置 git status 立刻报红,不再靠 ignore 兜底 + --- ## 关键决策与偏差 | 项 | 决策 | 与设计差异 | |---|------|-----------| -| 工具基目录 | 用户当前 cwd | 设计未明说;agent 该操作用户项目 | +| 工具基目录 | 用户当前 cwd(读)+ task_dir(写) | system prompt 同时给 cwd 与 task_dir 绝对路径,SKILL.md `` 占位符指向 task_dir | | Workspace 用途 | `tasks//{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 行可读源码。