Commit Graph

28 Commits

Author SHA1 Message Date
caoqianming eec7eb156f feat(paths): 对外路径统一全形式 <wd_name>/<rel> + UI 一次性兼容历史简写
system prompt 加硬约束: 助手 echo 产物文件路径必须用 user_root 相对全形式
<wd_name>/<rel> (<wd_name> = task_dir 末段, 如 生图测试/videos/xxx.mp4),
不简写为 videos/xxx.mp4 这种 task 内裸形式 -- Web UI 按 <wd_name>/ 前缀挂
chip, 简写 → chip 失效用户点不开。媒体 tool (seedream/seedance) 的 saved:
行已是规范形式可直接照抄, ppt/proposal/coding 等 run_python/write 写文件时
自己拼。跨所有产物 skill 统一生效。

imagegen/videogen SKILL 把"把 saved: xxx 告诉用户"重复教学改成"照抄
saved 行, 详见 system「路径」段" (避免协议漂移, 新产物 skill 不用重复教育)。
ppt/proposal 等 SKILL 不动 -- system 协议自动管。

dev.html extractArtifactRels 加一次性兼容兜底: 产物目录裸路径
videos/xxx.<ext> / figures/xxx.<ext> (协议刚性前历史简写) prepend
<wdName>/ 拼成 user_root rel。**白名单显式枚举两项不扩展**, 长期老消息
归档后整段可删。

术语校准: 前缀叫 <wd_name> (working_dir 末段) 而非 <task_name> -- 用户允许
wd_name ≠ task_name, _display 锚 user_root 出来的是 <wd_name>。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 12:45:54 +08:00
caoqianming 5faff8a127 feat(seedance): 加 seedance_2_pro variant + smoke 支持 --variant 参数
- yaml 加 seedance_2_pro (model_id=doubao-seedance-2-0-260128, ¥46/Mtok 文生,
  支持 480p/720p/1080p);放在 fast 后面,fast 仍是默认 (yaml 首位 = agent fallback)
- Pro 出片慢,poll_timeout_s 拉到 900s (实测 480p 4s 等了 177s)
- smoke_seedance.py 加 sys.argv[1] 选 variant:`smoke_seedance.py seedance_2_pro`
- SKILL 把 "30-90s" 校准到 "Fast 30-90s / Pro 2-3min" (实测)

smoke Pro 跑通:body schema 完全对,响应带真 usage.total_tokens (40594),tool
_extract_tokens 命中走真值不估算;480p 4s 实测 ¥1.87,与官方源数据线性外推吻合。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 10:11:31 +08:00
caoqianming da71daa789 feat(seedance): 加 generate_audio 参数对齐官方 API
火山方舟官方 curl 例子 (CreateContentsGenerationsTasks) body 里有 generate_audio 字段
— Seedance 2.0 旗舰特性,原生 AI 生成背景音 / 角色对白 / 音效。我之前没接,补上。

- yaml 加 default_generate_audio: false (控成本默认关)
- tool execute 加 generate_audio kw + 进 body / meta / usage_events extra_units
- tool banner 加 audio=<bool> 字段
- SKILL 加参数段说明 + prompt 写法变化 (开音轨时要写背景音/对白具体内容)
  + 贴 prompt 模板 + 反模式各加一条

resolution / watermark 官方例子里没发但其他文档源确认 fast 必传 + 有效,保留。
参考媒体 (image_url/video_url/audio_url + role:reference_*) 是 i2v/v2v/r2v 路径,
phase 1 不接,延后。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 09:44:15 +08:00
caoqianming 7ff58c488e feat: 接入豆包 Seedance 2.0 Fast 视频生成 (文生视频) + videogen skill
- tools/seedance.py: 异步 submit /contents/generations/tasks → 5s 轮询 → succeeded
  后 download mp4 + meta.json 落 <wd>/videos/;失败/cancel 不计费;cancel_check 在
  轮询间检查,响应用户停止按钮
- config/media/doubao.yaml: 展开 video.seedance_2_fast (¥37/Mtok 文生 / ¥22/Mtok
  图生,token 公式校验 720p 5s = ¥4.00 完全对上源数据)
- core/storage/usage.py: record_video_usage,kind=video,units jsonb snapshot
  resolution/duration/ratio/fps/tokens/单价
- core/agent_builder.py: build_agent 加 video_variant + cancel_check 形参,
  cancel_check 必须 build 阶段传 (SeedanceTool ctor 持有用于轮询)
- web/app.py: GET /v1/video_models + MessageRequest.video_model + 透传
- web/static/dev.html: 顶栏第三下拉 (image 旁边) + state.videoModels/videoModel
- skills/videogen/SKILL.md: 六维诊断 (运动+镜头 替代 imagegen 的光线);BLOCKING
  门槛比 imagegen 更严 (¥4 vs ¥0.22) + 等 30-90s 出片
- prompts/system/general_v1.md: 加 seedance 触发指引 (平行 seedream)

phase 1 仅 t2v 文生视频,fast 上限 720p。API 端到端 smoke 跑过:路径/auth/错误解析
全通,body schema 待用户在火山方舟控制台开通模型后真出片才能验。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 09:30:54 +08:00
caoqianming 468cef5fcc feat: system prompt 注入 task 预选 skill 提示 + imagegen 加 BLOCKING 等 prompt 确认硬约束
1) core/agent_builder.py::_build_system_prompt 加 task_skill 参数,非空时在
   「工作目录与 task 上下文」段加一行 "- **task 预选 skill**: `<name>`",空
   字符串走老路径 prompt 字节级一致。LLM 拿到事实 + general_v1.md 已有
   "对应 skill 领域先 load_skill" 规则自然组合 → 主动 load。否决"完整
   SKILL.md 预注入 prompt"方案(会把 tasks.skill 升格成 binding,投入产出
   比不划算)。

2) imagegen SKILL.md 加  调 seedream tool 前必须把最终 prompt 贴给用户看
   + BLOCKING 等明确确认硬约束:① 顶部流程加确认步骤;② 新增「调 tool 前
   的强制门(铁律)」段定义回复分类(可以/OK/画吧/嗯 算确认;改 X → 重贴
   重等;沉默 → 继续等;模棱两可 → 追问到明确);③ 新增「调 tool 前再过
   一道」段给具体贴 prompt 的对话格式;④ 调用范式段加"前置条件已确认才调";
   ⑤ 反模式加两条(没贴就调 / 模棱两可当确认)。本质是把模型脑内装配摊
   到对话层,装配 ≠ 授权调用。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 19:59:06 +08:00
caoqianming 02307a08d1 docs(skill): imagegen 补「比例」维度 + 修掉臆造的"只能正方形"
用户反馈生图 skill 缺比例引导。原 size 表写"比例只能正方形"是基于
doubao.yaml + tool 参数描述只列三个正方形例子的间接推断,无验证。

改:
- 诊断五维 → 六维,加「比例/尺寸」(ppt 16:9 / 海报 9:16 / 头像 1:1 /
  公众号 2.35:1 / 书籍 3:4)
- 追问范式加比例项,上下文推断给 ppt/海报/公众号/学术示意四种用途的默认比例
- size 参数表重写成「按用途选比例 → 再选分辨率」二级表
  (1920x1080 / 1080x1920 / 2560x1088 等参考值)
- 删掉臆造的"豆包 5.0 只能正方形"
- 失败解药表加 2 条:比例错改 size 不动 prompt;非方形 API 报错回退默认
- 反模式加 1 条:不问比例就默认走 yaml 1:1 大概率不对

承认 unknown:豆包 5.0 实际支持哪些非方形 size 没验证,首次用错就回退默认 +
让用户协商,不臆造支持列表。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 19:51:13 +08:00
caoqianming bfcc231f1e fix(skill): imagegen 触发修 — system prompt 强制 load_skill + 扩 description 触发词
实测"绘制一张办公室的艺术图"没 load skill,两根因:① general_v1.md 「媒体生
成工具」段把 seedream 写成一级直觉(列了"画/出/来张"等关键词 + 直接调 tool 的
how-to),压过 skill discovery block 的微弱声音;② imagegen description 关键
词覆盖窄(没有"画/绘制/艺术图/图片"等朴素词)。

修法:system prompt 那段改成"调 seedream 前必须先 load_skill('imagegen')",
细节判断全移到 skill,只留 ¥0.22 计费 + 不装饰生成 + 不连发三条兜底硬约束;
imagegen description 扩 17 个触发词(画 / 绘制 / 出图 / 来张 / 艺术图 / 写实
图 / 场景图 / 插图 / 封皮 / 头图 ...)。两层联动:一级 prompt 指引到 skill,
二级 description 提匹配概率。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 16:56:29 +08:00
caoqianming f2b1ad085b feat(skill): 新增 imagegen skill 引导用户说清楚生图需求(seedream tool)
五步法:诊断模糊度 → 一次性给推断 + 待确认项 → 用户拍板 → 装配 prompt → 调
seedream tool。五维清单(主体/场景/风格/构图/光线)缺 2 维以上就先问;mermaid
vs seedream 选型给"默认倾向 mermaid + 反向选 seedream 信号 + 模糊时主动问用
户"三段式(没在 system prompt 那条流程图优先 mermaid 上一刀切,留 skill 层细
化判断)。size/watermark/search 默认值取舍 + 失败不复发的解药表 + 8 条反模式。

skills/imagegen/SKILL.md 单文件(参考 coding skill 范式);seedream tool 本身
不动,本 skill 仅是流程引导层。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 16:49:51 +08:00
caoqianming 7bdb6ca5eb feat(skill): documents skill 接内部材料学科知识库(document_search API)
- skills/documents/{SKILL.md, client.py} 4 函数 list_kb / search / download / health
- 走 https://ai.ctc-zc.com:8100/api Bearer 认证;env DOCUMENT_SEARCH_API_KEY + DOCUMENT_SEARCH_URL(可覆盖)
- search 默认返 md_content(整篇 Markdown 50K-200K 字符级),反模式段约束"只 print 前 300 字"防爆上下文
- smoke 实测后校准 SKILL.md:库实质是 7 个材料学科(胶凝/陶瓷/玻璃/晶体/复合/耐火/检验检测,21W+ 文件)预收的英文学术论文 + 跨语言语义检索(原猜"主语料中文"错了)
- 与 research(OpenAlex 全网)互补:documents 已 Markdown 化对 LLM 友好,但仅覆盖材料领域

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 15:31:21 +08:00
caoqianming f197b06cb4 fix(skill): research fetch_pdf 改走静态直链跟 fetch_xml 对齐(绕开 paper_pdf_view 路径 bug)
二次迭代 redeploy + nginx 修 Host 透传后,fetch_xml 5/5 PASS 但 fetch_pdf 仍 5/5 404 —— 同批 paper 同目录 XML 能下 PDF 不能,说明 paper_pdf_view 的 init_paper_path 路径计算 bug(非数据问题)。fetch_pdf 改成读 paper.pdf_url 静态直链 + _stream_to,跟 fetch_xml 同范式;删常量 _PDF。smoke 跑通 5.4MB / 3843ms + 152ms 复用,5/5 候选 100% 成功。

paper_pdf_view 端点本身的 bug 不修(浏览器用户可能还在用),由 paper_server 后续处理;zcbot 不再走它。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 14:30:25 +08:00
caoqianming a1c0e71703 feat(skill): research list 加 pdf_url / xml_url 直链 + 新增 fetch_xml + smoke 扩 trgm/xml 步
paper.py: _LIST_FIELDS 扩到 16(加 publication_date / has_fulltext_xml / pdf_url / xml_url),新加 fetch_xml(id_or_doi, working_dir) helper 走 paper_server media 静态直链(从 paper.xml_url 读,paper_pdf_view 不支持 XML),抽出 _stream_to 共用;fetch_pdf 行为不变。
SKILL.md: 工作流加 "XML 优先 PDF" 原则(已结构化标签 vs OCR 抽取),四函数清单 + 错误处理表更新 fetch_xml / xml_url 空场景。
smoke: 加 step 0 验 pg_trgm 索引速度(>5s 警告 migration 没生效)+ step 4 fetch_xml 多候选轮询 + 复用,step 1 字段集 expected 同步扩到 16。

paper_server 侧改动(serializers pdf_url/xml_url + migration 0006 pg_trgm)见 paper_server 仓库 6a5a5d7b。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 13:49:34 +08:00
caoqianming 97bcd5ae1e feat(skill): paper_server → research skill (search / get_paper / fetch_pdf)
skills/research/{SKILL.md, paper.py}: 接内部部署 paper_server 的 3 个 helper,LLM 经 load_skill("research") + run_python 调用。范式选 skill 而非 tool/MCP/裸 httpx/lib —— 频次低且 helper 范式让 API 漂移时改一处。tools/run_python.py 注入 PYTHONPATH=base_dir,让子进程能 `from skills.research.paper import ...` 不必折腾 sys.path。base_url 默 http://paper.xxhhcty.xyz:8080,可 PAPER_SERVER_URL env 覆盖。遗留:paper_server 侧 PaperDetailSerializer 加 abstract 字段由用户重新部署。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 13:00:37 +08:00
caoqianming c4fac2428b skills+core(命名约定): task 级宪法文件 <date>-<short_id>-<name>.spec.md + spec_lock → spec 简化
同 working_dir 多 task 共享中间产物是设计意图(素材跨本子复用),
但 spec 这种 task 1:1 宪法文件必须隔离 — 否则两本子 spec 直接撞。
文件名三段式:
- task_short_id (task_id.hex[:8],永不变) 主锚 → glob *-<short_id>-*.spec.md 字典序最大 = current
- date 让"重定调"写新文件而非 edit 覆盖,旧版自然成历史快照
- task_name 作建时元数据,改 task.name 不 cascade(由 short_id 兜底定位)

约定由 core/agent_builder.py::_build_system_prompt 单点注入
(task_id / today 实际值嵌入,所有 skill SKILL.md 引用同一份)。
proposal / ppt SKILL.md 阶段一加"glob 检测已有 spec → 询问沿用/重定调"分支。
模板 templates/spec_lock.md → spec.md (git mv 保历史),_lock 后缀无信息量去掉。

未动:DB schema / PATCH /v1/tasks/{id} 改 name 入口 / 其他中间产物扁平共享
/ quality_check.py (--spec 接路径)。反方案(cascade rename / spec 入 PG /
物理 task 子目录)及"何时升级到 DB 化"信号见 DESIGN §7.9。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:03:21 +08:00
caoqianming fafcb14d86 skill(proposal): mermaid 文件名 hash→caption + quality_check 加图相关 4 拦截 + SKILL.md 精简; web cache fix
用户报"图没渲染到 docx",诊断后修三件事(同一根因链):
- web/app.py /v1/files/download 加 Cache-Control: no-cache
  Starlette FileResponse 只发 ETag/Last-Modified, 浏览器走启发式缓存,
  workspace 文件改了 SPA 预览看不到新版
- quality_check 新 check_figures(): 4 条规则
  1) figures/ 有 png 但 sections 0 个 ![]() 引用
  2) fenced 代码块出现 box-drawing 字符 (┌─┐│└─┘ 等)
  3) mermaid 块必须有首行 %% caption: <题>
  4) 同 task 内 mermaid caption 不能撞名
- render_diagrams.py: hash → caption 命名
  pass-1 验证 caption 完整 + 全 task 唯一, 缺/撞 退 2
  pass-2 渲染落 fig_<sanitized>.png, 总是覆盖
- render_docx.py: mermaid 块按 caption 查 fig_<caption>.png
  无 caption / 清洗空 / png 缺 → ASCII fallback
- SKILL.md ~193 → ~160 行:
  插图段 49→22 行(压 matplotlib 细节 + 删类型选择展开)
  反模式合并 ASCII/占位/手写图编号/缺 caption/撞名
  删"为什么两段式"长说理段

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 10:19:09 +08:00
caoqianming d6fc004367 skill(proposal): mermaid 管线 + render_docx 图片插入 + 图题自动编号
新增 render_diagrams.py 把 ```mermaid``` 块预渲染到 figures/fig_<sha1>.png
(优先本地 mmdc, 回退 mermaid.ink 公网 API, 都失败留 WARN 不阻塞);
render_docx.py 加 ![](path) 识别 + mermaid 缓存查找, 缺缓存自动 ASCII fallback,
图题"图 N <caption>"全局自增, 替换原模板里的 [图 2-2 ...] 裸占位写法。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 21:37:16 +08:00
caoqianming 4a6aaaf34d core(0003): name + working_dir + skill schema 重构 + per-user .memory
- alembic 0003: TRUNCATE tasks CASCADE + task_dir→working_dir + mode→skill + 加 name TEXT NOT NULL
- name(必填,任务显示名,UI / docx 用)与 working_dir(可选,留空 fallback 用 name 作目录)解耦;
  同 working_dir 多 task 共享物理目录(§7.1)
- skill 字段对齐 skills/ 注册表语义,后续可下拉强校验
- POST /v1/tasks {name(req), working_dir?, description?, skill?};
  PATCH 支持改 name/skill;新增 GET /v1/folders(FS 列表 + n_tasks + last_used)
- DELETE /v1/tasks/{id} 硬删 DB(messages CASCADE)+ FS working_dir 保留;
  dev SPA 加 task delete 按钮 + file per-row 删按钮
- 工作目录改 eager mkdir(取代懒创建):用户给 name 即声明项目,目录立刻存在
- dev SPA modal 拆"任务名" + "工作目录"(<datalist> autocomplete 走 /v1/folders +
  输入实时提示"复用 / 新建 / fallback");renderTaskList 主行 = t.name,副行 = 📁 + skill + desc
- files 面板 UX:pane-head 显示项目名 + crumbs root 用项目名 + 修 root 处多渲 "." crumb 的 bug
- 顺手:memory 搬 workspace/users/<uid>/.memory/(per-user dotfile 隔离);
  CLI --mode → --skill,--name + --working-dir 分开
- DESIGN §3.1 / §3.6 / §7.2 / §7.4 + PROGRESS + RUN 全量同步

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 19:15:37 +08:00
caoqianming 263cdb974a proposal: 阶段二每段卡点附"下一段要点预告"
让用户在下一段动笔前就能改方向, 比读完正文再返工便宜一个量级。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:11:18 +08:00
caoqianming 56e414e046 proposal: 阶段二两段式 + render_docx 透传 fenced 代码块
- SKILL.md 阶段二改两段式: 先列 3-6 条要点 → 用户确认 → 再起草 → 用户确认。关键章节 (立项依据/研究方案/技术路线/考核指标) 一段一卡。一次性出全文容易把错方向推到底,要点阶段拦得早
- render_docx.py 支持 ```...``` 围栏: 中文新宋体 + 西文 Consolas + 行距 1.0 + 不缩进 + xml:space=preserve。原先 ASCII 流程图被当散文段落合并,框完全错位
- PROGRESS.md backlog 加 mermaid 预渲染 (mmdc → PNG → add_picture),等 ASCII 透传不够用再做

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 08:58:18 +08:00
caoqianming a32cb049bc ppt+proposal: 素材摄取改用 markitdown, 删自研 source_to_md
ppt/proposal 的"素材 → Markdown"逻辑此前各写一份 (source_to_md.py
内联 pypdf/python-docx/openpyxl), 改用微软 markitdown CLI 统一替换:
表格/标题/列表保留更好, 同时多覆盖 xlsx/url/html/csv 等格式。

- requirements.txt: 加 markitdown[pdf,docx,pptx,xlsx]
- skills/ppt/SKILL.md: 资源行改成 markitdown 说明
- skills/proposal/SKILL.md: 阶段零 32 行 Python 代码 → 4 行 CLI
- skills/ppt/scripts/source_to_md.py: 删除 (157 行)
- PROGRESS.md: scripts 列表同步

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 08:03:07 +08:00
caoqianming 647d92f532 proposal+ppt: 路径用 <skill_dir>, 补 spec_lock 模板与 --spec 覆盖度检查
按代码评审建议改的 5 项:

1. 所有脚本/资源路径改成相对 <skill_dir> (load_skill 头里的绝对路径),
   不再假设 cwd 是 zcbot 仓库根。proposal+ppt 的 SKILL.md / icons.md /
   INDEX.md 都改了。

2. quality_check.py REQUIRED_SECTIONS 给 key_rd 补上 11_team /
   12_budget / 13_appendix —— 之前模板有但检查没到, 缺团队/预算/附件
   也会显示结构完整。

3. 新增 templates/spec_lock.md, 把"八条对齐"固化成可复制字段
   (含考核指标矩阵表 + TODO 列表 + 引文清单), 阶段二/三都从这里读。

4. quality_check.py 加 --spec <spec_lock.md> 选项, 解析 spec 中的
   考核指标矩阵, 关键词模糊匹配 sections, 提示哪些指南指标在正文
   未充分覆盖。SKILL.md 阶段三命令同步。

5. SKILL.md 新增"阶段零: 摄取素材", 用 run_python + pypdf/python-docx/
   openpyxl 把 PDF/DOCX/XLSX 转成 source/*.md, 不再要新脚本。同时
   把 spec_lock 字段引用改写到模板。

顺带:
- proposal SKILL.md 明确 7 类基金里只有 3 类 (key_rd/major_project/
  nsfc_joint_fund) 有完整章节模板, 其它 4 类复用骨架, 差异查 fund_types.md
- ppt SKILL.md 阶段三命令路径错误 (python scripts/quality_check.py)
  顺带修了
2026-05-07 16:05:44 +08:00
caoqianming d1f39f05f5 proposal skill 精简: 2888 -> 1712 行 (-41%)
- 删 references/typography.md (90% 已被 render_docx.py 吸收, 剩下进 SKILL 硬规则)
- 删 references/section_templates.md (与 templates/ 大量重叠, 4 个核心 pattern 折进 SKILL "章节骨架速查")
- fund_types.md / review_redlines.md / citation_gbt7714.md / budget_rules.md
  全部去散文留骨架: 表格 / 清单 / 示例 优先, 解释性段落只留必要的
- templates/{key_rd,major_project,nsfc_joint_fund}.md 删冗长写作提示, 只留章节骨架 + 字数预算 + 必填字段
- 脚本逻辑不动, render_docx.py 仅去 docstring 中的 typography.md 引用
2026-05-07 15:32:07 +08:00
caoqianming bb9e92bb84 让 <task_dir> 真正落地: 产物收敛到 workspace/tasks/<id>/
之前 SKILL.md 反复说 <task_dir>/spec_lock.md / <task_dir>/sections/,但代码里没把
task_dir 暴露给 agent,只给了 cwd——导致 spec_lock.md 落到 skills/proposal/、
sections/ 落到 repo 根。两者被 .gitignore 通配规则盖住,问题被掩盖。

- main.py system prompt 里显式注入 task_dir 绝对路径 + 强约束(只写 task_dir,不写
  cwd / skills/ / repo 根)。SKILL 里的 <task_dir> 占位符明确指向这个值。
- skills/proposal/SKILL.md + skills/ppt/SKILL.md 的「工作目录约定」前面加一句解释
  <task_dir> 来自 system prompt。
- .gitignore 删掉 sections/ slides/ spec_lock.md 这三条无锚 bandaid——workspace/
  已经覆盖正确路径下的产物;repo 根再写错了要靠 git status 立刻报红,不再靠 ignore
  兜底。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 14:18:35 +08:00
caoqianming 8995a898ba proposal/render_docx: 加目录 + 内联 md 解析 + 列表分行
修复实测三个问题:
1. 加目录页 (Word TOC 域 + 改用 builtin Heading 1/2/3 样式才能被索引)
2. 内联解析 **加粗** / *斜体* / `等宽`,不再以字面量进入正文与表格
3. [N] 引文 / 1./2. / 一、 / (一) 等列表项各自独立成段,
   不再被散文合并器吃掉换行

顺带:
- 直接修改 Normal/Heading style 的 rFonts 让样式继承字体
- 标题 Heading 1/2 强制黑体, 字色覆盖 builtin 蓝色
- 表格 cells 也走内联解析, 解决单元格 ** 残留
2026-05-07 13:41:47 +08:00
caoqianming 2b1e2143f1 proposal skill v2: 6 类基金分型 + 3 套章节模板 + 渐进披露
参考重大专项任务书 / NSFC 联合基金 2026 / 重点研发"区块链"申报书
3 份真实 docx,从 80 行 SKILL.md 拆成 13 文件 (~2.6k 行):
- references/{fund_types,section_templates,review_redlines,citation_gbt7714,budget_rules,typography}.md
- templates/{key_rd,major_project,nsfc_joint_fund}.md
- scripts/{render_docx,word_count,quality_check}.py

核心补强:任务书/申报书/申请书结构差异、字数预算硬约束、考核指标
量化要求、间接费用台阶比例、GB/T 7714 文献规范、字体行距等排版硬规则。
2026-05-07 08:50:19 +08:00
caoqianming 235d43bc1d 入库商务红 tabler 图标种子集 (9 PNG + 4 SVG)
种子集覆盖商务汇报常用概念: target / brain / chart-bar / users / trophy /
alert-triangle / cpu / building-factory / cloud-network / database。
所有文件按 <set>_<name>_<colorhex>[_<sizepx>] 规约命名 (4 个原裸名 SVG 已规整)。
累计 < 40KB, 协作者克隆即用, 离线/CDN 异常时仍可用; 新场景再 fetch_icon.py 拉。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 13:19:43 +08:00
caoqianming 38fbee9d9e 修三处 v3 遗留: Iconify 不触发 / mkdir -p 误创目录 / 平台无知
- skills/ppt/SKILL.md: 八条对齐第 7 项默认值从 "MSO_SHAPE 几何形状 (无外部图片资源)"
  改成 "Iconify tabler 集 (描边商务图标, 主色染色, fetch_icon.py 缓存到 assets/icons/)"。
  阶段二每页流程加一步"图标先于版式": 先 glob 本地, 没就 fetch, 再做页。
  根因: v3 砍了 icons.md 里 MSO_SHAPE 当业务图标的部分, 但 SKILL.md 默认值没同步,
  模型把它写进 spec_lock 后阶段二永远不会触发 Iconify 拉取
- tools/shell.py: Windows 下拦截 `mkdir -p X [Y...]`, 走 os.makedirs(exist_ok=True)。
  根因: cmd.exe 的 mkdir 不识别 -p flag, 把 -p 当字面目录名创建
- prompts/system/general_v1.md: 加 "## 平台" 段, 提醒 Windows + cmd 环境下用
  run_python os.makedirs 而非 shell mkdir -p。行为前置防御 + shell.py 工具层后置兜底

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 13:12:17 +08:00
caoqianming 0971a500e7 PPT skill v3: 红色硬约束 + 品牌条 + 强制尾页 + Iconify 图标库
修复上一轮生成的实际问题: 模型擅自把红色换成蓝色 / 内页全裸白 / 缺 Q&A 尾页;
并补齐"个性化图标"能力 (此前只有 MSO_SHAPE + unicode 字形,业务概念图标缺位)。

- SKILL.md: 红色主题改硬约束 +  BLOCKING 八条对齐 (bundled 推荐, 等用户拍板),
  封面/尾页改强制项, 不算在 5-8 页正文预算内
- layouts.md: 加 apply_brand(slide, kind) 4 模式品牌条 (cover/inner/section/end),
  9 个版式起手必调, 消灭裸白页
- 图标库: 新增 fetch_icon.py 走 Iconify CDN (tabler/lucide/heroicons 等 150+ 集),
  主题色染色, 缓存到 assets/icons/, 配 INDEX.md 推荐清单
- icons.md: 移除 MSO_SHAPE 当业务图标的部分 (PENTAGON/LIGHTNING_BOLT 等视觉陈旧),
  三层降级 → 两层 (Iconify / unicode 兜底); MSO_SHAPE 退为 layouts.md helper 内部原语
- canvas_presets.md 并入 design_principles.md §0 (减少零碎文件)
- .gitignore: spec_lock.md 与根目录 *.pptx 不入库 (PPT skill 工作产物)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 12:23:06 +08:00
caoqianming 3a66849953 Initial import: zcbot personal task agent
DESIGN.md / PROGRESS.md 落地 Phase 1-3:
- core/: LiteLLM 封装 + ReAct loop + 会话持久化 + Anthropic skill registry
- tools/: read/write/edit/glob/grep/shell/run_python/load_skill (Hybrid 范式)
- skills/coding | proposal: WHY+WHAT 风格 SKILL.md
- skills/ppt: 完整渐进披露 (SKILL + 4 references + 3 scripts)
  · 借鉴 hugohe3/ppt-master 的两阶段 + spec lock 思路
  · MSO_SHAPE 图标体系 + 安全区 + 越界检测
  · 默认商务红主题 (#C00000 / #E15554 / #FFC107)
- config/models/: DeepSeek V4 flash/pro 档案

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 11:02:59 +08:00