caoqianming
|
eb45e771fa
|
fix(rendering+chip): 修 task d9c74a5a 三处独立缺陷——chip 粗体路径 404 / docx emoji 缺字 / 单文件被迫建 sections(bump 0.58.37)
一次"今日新闻 md→word"暴露三个不相干的坑,逐个定层修:
1) 前端文件 chip 点开弹框 404 —— media.js::extractArtifactRels 的 tail
字符集 _TAIL_CLS 没排除 `*`,助手把路径写成 markdown 粗体
`**<wd>/x.md**` 时前导 `**` 被 lead 边界吃掉、尾部 `**` 被贪婪吞进
rel(星号既不在 tail 集也不在尾部 strip 集),生成 `x.md**` →
/v1/files/download 404。修:`*` 加进 _TAIL_CLS 排除集,同反引号一样
在 emphasis 处干净截断;文件名含 `*` 在 Windows 非法、误伤≈0。
2) 导出 word 图标(emoji)缺失 —— docx_manuscript 正文/标题字体是宋体/
黑体/Times New Roman,无 emoji 字形,📰🔥🇨🇳📊 写进宋体 run →
Word 渲染成豆腐块。修:common.py 加 EMOJI_RE + add_fonted_runs
(按 emoji 边界拆 run,emoji 段走 Segoe UI Emoji、其余走原中西文字体),
接进 _emit_plain_with_chem(不破坏化学式下标)与 add_inline
(bold/italic/code);标题走 add_inline 自动覆盖。
3) 过程中冒出 sections/ 文件夹 —— render.py docstring 承诺 src 可为
"目录或单个 .md",但 docx 三 profile 的 render_sections 全是 is_dir()+
glob 只认目录(只有 pdf 支持单文件),模型传单 .md 撞
`sections dir not found` → 被迫 mkdir sections && cp 兜底。修:
common.py 抽 collect_md_files(文件→[src],目录→glob),docx_manuscript
+ docx_brief 共用,figures 基准取 src.parent;兑现 docstring 承诺。
验证(实跑非仅单测):emoji 满满的今日新闻 md 跑单文件 --profile report
退出 0(不再报 sections 缺失),解包 docx 校 run 字体——emoji 全
Segoe UI Emoji、中文仍宋体、SiO2/CaCO3 下标未被破坏;正则修复 4 组样本
(粗体/反引号+间隔号/裸路径+中文句号/斜体)全绿;目录多文件+brief+
不存在输入三路回归无破坏。三处互不相干可独立修,均 additive,不碰对外
API/DB 契约。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-17 22:15:34 +08:00 |
caoqianming
|
5cf92ec71a
|
feat(rendering): 通用报告走平台渲染器 report profile + 基座引导,少让模型手撸 python-docx(bump 0.58.35)
接 0.58.34(语法预检=止血),这条根治那一头。关键发现:平台早有成熟 md→docx(+pdf)
渲染器 rendering/(bind-mount /sandbox/rendering:ro,任何 run_python 可达,与 skill
无关),标题/正文/列表/表格/图片图题/mermaid/化学式下标/目录/house 字体全有,
paper/proposal/brief 三 profile 在用。烧 token 的验收报告没走它、在裸手撸 python-docx,
唯一原因是没引导把"随手写 Word 报告"指向它。故不造轮子,只两件小事:
1. rendering/docx_manuscript.py 加 report profile(复用全套渲染;差异=报告不是申报书:
目录默认无[--toc 才带]/章节不强制分页/页边距 2.5-2.5/列表含"第X章节"不含"条"),
render.py --profile 加 report 选项 + 路由。
2. core/agent_builder.py 基座 prompt 加软引导:出 Word 报告→正文写成 sections/*.md
调 render.py --profile report,别手撸 python-docx 内联中文。
取舍红线(与用户对齐):渲染器是首选加法不是替代——绝不硬拦 run_python 生成文档,
确需精细定制版式/改写已有 docx/处理 xlsx 等渲染器覆盖不了的照样自由写代码;软引导
让位于更具体的 skill render 指引(proposal/paper)。刻意不把渲染器指路塞进语法预检
hint(会 overload 只该管语法的检查、误导合法手撸),预检保持只诊断语法。三层叠加:
渲染器(根治)> 预检(0.58.34)> RepeatGuard err-streak(0.58.33),run_python 能力不削。
测试 tests/test_rendering.py(四 profile 端到端 + report 目录可选)+ CLI e2e
(render.py --profile report 出 37KB docx)全绿;py_compile 校三文件无语法错。
DESIGN §8.6 记该 profile + 并存红线。additive,不碰对外 API/DB 契约。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-17 09:32:02 +08:00 |
caoqianming
|
336db63a01
|
feat(rendering): 平台渲染层 rendering/ 统一三 skill docx + chromium md→pdf + bump 0.21.0
渲染从「各 skill 自带 render_docx.py」抽成平台能力:新建顶层 rendering/ 包,
bind-mount 进 /sandbox/rendering,各 skill 调 render.py 不再 bundle 渲染脚本
(符合 Skills 自包含/可 fork 标准,跨 skill import 会破坏 fork 故不走 skills/_shared)。
- common.py 叶子原语单一事实源(化学式白名单 CHEM_RE 原先三份逐字重复→收敛一处)
- docx_manuscript.py paper/proposal 配置化双 profile;docx_brief.py brief 富渲染复用 common
- pdf.py md→HTML→沙盒 chromium --print-to-pdf(不用 weasyprint:要 pango/cairo 原生库且不在镜像)
- render.py 统一 CLI --profile {brief,paper,proposal} --format {docx,pdf}
零回归:三 profile 重构前后 docx 解包 diff word/document.xml 字节完全一致。
守护测试 tests/test_rendering.py 5 项全过。chromium 冒烟 deploy/sandbox/probe_chromium_pdf.sh。
删 3 份 render_docx.py + 短命 skills/_shared/render_pdf.py;改 5 个 SKILL.md 调用到
render.py + 补反模式"渲染一律调 render.py、禁止手搓 weasyprint/pip 装包";brief 另删
research 索引滞后描述。requirements 加 markdown,pool.py 加 rendering 挂载。
部署须一次原子激活:/sandbox/rendering 挂载靠 pool.py(restart 重建容器生效)+
markdown 进镜像靠 requirements 触发整体重建——update.sh build→restart 顺序覆盖,
旧 render_docx 路径已删,勿只推代码不重建。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-23 13:07:19 +08:00 |