Repository navigation
feat(slides): 排版质量批——场景字阶/颜色守门/值轴刻度/结构指标 + 布局说明书收敛 v2 单一语法 - #315
Merged
Merged
Conversation
2e5d22e 起当前 Room 检查器有意不渲染「打开 Room」按钮,页脚随之省略; 选中关系后的页脚断言保持不变。
- 图片卡图标位换成 everroom-material:// 封面缩略(140px cover), 加载失败回退图标布局;heic 排除(Chromium 不可渲染) - 点击图片改为应用内放大预览 dialog(Esc/点背景关闭),不再跳外部程序 - 标题补 white-space:nowrap 单行省略,悬停显示全名;删除占位空 span
- chevron:形状收窄 230px 垂直居中(尖深随 min(w,h) 收小);列距=(版心−尖深)÷段数、形状宽=列距+尖深,右尖伸至邻格凹底成相扣链;文字对身体区(凹底→右斜边起点)水平居中,不再骑棱线 - venn:圆心距按透镜宽反推(d=2r−lens),双圆 8% 主色透明填充令交集可见;标签各归月牙/透镜中心,不压弧线;双圆按版心对称居中 - pricingTiers:三档统一卡框(非 featured 白底+divider 发丝描边),卡距即视觉间距;featured 凭 tint+主色描边+内缩顶条+阴影+内容上浮强调;三档内容统一内缩 18px,删非 featured 冗余顶线 - elements.ts:ShapeElement 补 adj 类型(10-16 引入 roundRect adj 时遗漏,31 处预存 tsc 报错归零) - tree.test.ts:补相扣链/透镜/统一卡框三组几何断言(119 测绿,tsc 0 错)
…回 online,设置页设备列表永远显示离线 (#301)
- indexHeader/eraRail 组件从茶文化 deck fork 转正进组件库,timeline 年代一行硬约束 - 提交期校验:validate 过的好树在 submit 一步被模型抄坏过(根 direction 丢失静默兜底),坏树在 submit 处拒收让模型当场重交 - layout-tail 兜底结构化 + 减配重试,对付 16 调用上限烧满
- serve 进程级 unhandledRejection/uncaughtException 只记日志不退出,本地桌面服务宁可带病运行 - 调度器 tick、diary drain、perception tick、agent invoke/service、local-agents dispatch 及六处 worker 顶层收口,漏接异常不再杀进程 - runNow 失败不前移 nextRunAt,下轮 30s 重试且不阻塞同轮其他任务 - 网关 supervisor 补意外退出自动拉起:1s/5s/15s/60s 退避封顶,稳定满 5 分钟重置,迁移失败(exit 78)不重试
…来源页入口 - 桌面端 cherry-adapter/cherry-watcher/hermes-adapter:读取、导入、增量同步、导出回写;启动恢复 watcher - 网关 0081 迁移加 provider 档案与五态表,data-migrations 服务/路由扩展 - 来源页新入口与图标(Cherry Studio/Hermes),i18n 中英文案
- agent-runtime-pi 新增 context-budget:单条工具结果按 JSON 结构截断、run 内轮次历史裁剪, 防止长工具输出(版面树/清单 JSON)把子 Agent 上下文撑爆。 - agent-contract 的 StartAgentRunInput 增加 displayPrompt:卡片/产物库等确定性入口 用 prompt 传技术指令,用 displayPrompt 落库人话消息与会话标题,运行时语义不变。 - agent-runtime 的 StartRuntimeRunInput 增加 runtimeMetadata:仅供工具按阶段读取 (如 slides-planner 的 draft/arrange)收紧取数预算,不进入 prompt。
- 新增 tree/v2:slot 栅格 schema 与编译器(v1 flex 树不经过),输出沿用 CompileResult, measure/落页链路不分叉;含 bleed、组件展开与 richness 度量。 - 组件层抽出 kit/atoms:统一页面母题、暗色封面角色与样式批(style-batch-a/b)供给, 30+ 组件改为消费 kit,样式卡与组件样式体系打通。 - 新增 reference-style:参考稿(golden sample)风格提取与复用;theme 增加混色/透明度工具。 - 新增 page-preview-context:layouter 单次 invocation 内把当前树编成临时单页 PPTX+PNG, 拿确定性 defects 做设计审阅,不写当前 deck,多页并发不互踩。
- style-card/types 增加构图家族(composition)与样式批字段,validate 校验家族覆盖率与 色/字号档取值,避免风格卡选出的构图只落成一句提示。 - slides-visual-review 审页改用 v2 缺陷口径,缺陷描述与 measure/compile 的判定一致。
- 新增 slides-editor:用户确认草稿后把 draftPages 压成 storyboard/v2,网关侧做确定性预算 与构图家族保真检查;M1 只做影子(结果落库 + 进 tool details,不替换 arrange)。 - 新增配图质检两级:image-qc 用像素统计拦空白/纯色/过暗/过曝/低分辨率,image-vlm-qc 走现有 VLM 通道判是否适合该页,未配置时放行不阻塞生成。 - 新增配图预热:planner 编排期边排边生图,plan_ready 后按页对账(同提示词不重生成)。 - 新增 slides-reference:参考 deck PDF 抽页做 reference-style/v1,仅显式给参考时调用。 - 新增 slides_storyboards 表与存取(migration 0082),网关重启不丢 editor 产物。 - slides_progress_tracker 阶段模型重做,兼容 settling 阶段;子 Agent 增加并发/重试兜底。 - config/.env.example 补审页档独立预算(MAX_TOKENS/CONTEXT_WINDOW/REASONING)。
- slides-layouter/reviewer 新增 layout-tree-v2-skill(slot 栅格 + 组件 kit 词汇), input.schema 补 v2 树与组件参数校验;SYSTEM.md 明确 v2 优先、v1 兼容。 - slides-planner 输入契约补内容压缩与 storyboard 交接字段;slides-styler 输出补构图家族。 - 新增 agents/slides-editor:草稿 → storyboard/v2 压缩说明书(构图家族、字数预算、 保真约束),与网关 slides-editor 影子链路配套。
- office-bridge-client 增加 deferDone(骨架入库阶段不广播 done)与 /v1/office-complete (全部页落定后补发真完成),部分完成时带 appliedPages/totalPages/failedPages。 - knowledge service/routes 的目录项补 versionNo/updatedAt:取最新版本号与版本时间, legacy 无版本链时为 null 并回落元数据时间,不伪造成 v1。 - documents 查询插件补办公产物能力声明,document-capabilities 与 office 桥接补测试。
- office-bridge 主进程链路支持可编辑打开与逐页落定回执;PageCanvas 不再假装进度, 原生视图未就绪时给「回文稿页重开」出口,TopBar 标签不再硬标 [只读]。 - DocsPage / KnowledgeFileExternalCard / EmbeddedOfficePreview:文件服务或内嵌预览不可用时 明确降级为系统应用打开,并给「重试预览」;ArtifactLibraryPane 副标题展示 版本·更新时间·体积。 - shared/knowledge 与 office DTO 补 versionNo/updatedAt 与可编辑标记;App 完成 toast 区分 「部分完成」(带 applied/total 页数与 error 样式),不再把 1 页骨架说成已生成。 - 补 office-bridge-edit / office-agent-ask / office-agent-formats 测试与中英文案。
- SlidesProgressCard 改为阶段化卡片:草稿→风格挑选→配图过目→落页→完成,各阶段独立 状态(已完成/生成中/失败/已停止),时间线只留「制作演示文稿」,不再暴露内部参数。 - 新增 agent/slides:SlidesStylePicker(风格样张挑选)、SlidesPageImagesReview(配图 过目/打回/重生成)、slidesState(进度快照归一,与网关阶段集合对齐)。 - 卡片按钮统一走 hiddenPrompt + displayText:指令交给运行时,气泡/会话标题用人话 (AgentPanel 透传 displayPrompt,失败回填也不再塞内部指令)。 - agentChatScroll 改为按「用户是否贴底」自动跟随,长卡片渲染时不再打断输入; 补齐 SlidesProgressCard / AgentChatView 测试与中英文案。
- 新增 VeinGraphCanvas + veinGraphModel:把关系投影结果(节点/边)交给 Pixi 力导图渲染, 含聚焦、缩放与选中态映射。 - 新增 ThoughtsPane / EmergenceCard:按 emergent 投影展示思路演进与合并/分叉证据, 支持锁定视角、回退一步与「跟走」模式,缺口时给出可读的空态与告警。
- routes 增加可选 displayPrompt(≤20k,走同一套 redact),service 用它落库 user 消息 与会话默认标题,prompt 仍原样交给 runtime。 - 卡片按钮/产物库建文件等确定性入口因此可以传技术指令而不把指令渲染成用户气泡。
- slides-quality-upgrade-design:链路缺「编辑」+ 版式语法只表达盒子的双根因,给出 内容压缩 / 排版语法 v2 / storyboard 三步方案与 3 页黄金样张验收口径。 - slides-component-style-design / visual-system / style-card-handoff:组件样式批、 构图家族与风格卡的消费约定。 - slides-reference-input / nexwing-reference-gap / reference-component-gap-audit: 参考 deck 输入、参考风格抽取与组件缺口对照。 - slides-designer-merge-design:设计器与生成器合并的交互与数据模型;附 BP 数据汇编稿的 文字版 dossier 与 PPT 生成 UX 审计。
冲突解决(11 个文件): - gateway slides-layout(elements/compile/schema/components-index/tree.test):dev 侧是 本分支早期快照且为 CRLF 行尾,整体取本分支 v2 版本;已核对 dev 的 adj/radiusAdj、 caption/delta 可选赋值等修复在本分支已有等价实现。 - drizzle journal:按时间序排列 0081_cherry_hermes_provider(82) → 0081_agent_access(83) → 0082_slides_storyboards(84),两条 migration 都保留。 - i18n surface.json(en/zh):两侧新增键取并集,JSON 校验通过且两语言键数一致(2031)。 - DocsPage:保留本分支「打开失败行内原因」与 dev「+新建文档选 Room」两条功能。 - SlidesProgressCard / AgentChat.css:dev 的修复针对旧卡片结构,本分支已重写为新卡片 (agent-slides-card-*),故取本分支实现;另把 dev 两条与卡片无关的通用溢出修复 (.agent-conversation 子项 min-width:0、回到最新按钮限宽)移植到新样式。 - ArtifactLibraryPane:对齐 dev 的 agentFiles → artifactFiles 改名,保留版本/更新时间展示。 - SlidesProgressCard 结构回归测试:dev 断言的是旧类名,按其原意改写为新卡片的 head/body/actions 分层 + 页列表卡内滚动断言。 - 恢复 dev 提交 41dc0b9 误删的 tests/fixtures/vision-ocr-sample.jpg(引用它的 OCR 测试 因此被静默 skip);materials 下的 qwen-image-overview-001.png 无引用,保留删除。
子模块 `apps/desktop/vendor/genoffice`(分支 `feat/everroom-ai-tab`)新增: `SpecChart.axis.majorUnit`(`c:majorUnit`)与 `axis.hideValueAxis`(`c:tickLblPos="none"`), 以及 `PageSpec.notes` → notesSlide。引擎侧 `packages/pptx-engine` 77 文件 / 780 条全绿。 网关侧由 `slides-layout/chart-axis.ts` 决定这两个值:有数据标签且类目 ≤4 时整条值轴隐藏, 其余情况给 3~5 条刻度的「好读步长」。桌面端从 `apps/slides/out` 取运行时产物, 需要重新 build 才能看到刻度变化。
五个真实缺陷的引擎侧根治(计划与数据见 docs/slides-quality-batch1-plan.zh-CN.md、 docs/slides-quality-batch1-report.zh-CN.md)。 新增模块 - scene.ts:5 场景 = 观看距离(far/near)× 信息密度(airy/standard/dense), 字阶与字号硬下限由场景表唯一给源;风格卡不再提供字号(`typography.sizes/typeScale` 运行时忽略)。远档 display 由 96pt 降到 60pt、54pt——汉字满宽字在 720p 画布上 96pt 一行只放得下 9 个字,正常中文标题必然折行溢出。 - color-guard.ts:C1 正文对比 ≥4.5:1(大字 3:1)、C2 非文本 ≥3:1、C3 APCA 仅记录、 C4 同色相并置 ΔL* ≥0.15、C5 大面积饱和 ≤0.35、C6 数据标签禁系列色。 口径是「色相继承,L/S 由代码算」——风格图只决定色相。 - chart-axis.ts:值轴刻度从「引擎按绘图区自动推」改为确定性结果。有数据标签且类目 ≤4 时整条值轴隐藏,否则给 1/2/2.5/5/10×10^k 的好读步长(3~5 条刻度)。 - craft.ts:把「看着舒服」里能写死的部分固定成常量与断言(16px 间距网格、字阶 token、 measure 上限、主角面积区间、字号档跨度)。 - page-structure.ts:只测不改的结构指标——主角面积、留白率、对齐轴、行长度、字号档数。 - quality-report.ts:一册 deck 的六个可回归的数(最小字号、低字号块数、最低对比度、 同色相最小 ΔL*、超预算页数、组件种类数),既能当断言也能当验收报告。 改造 - theme.ts:字号改由 scene 派生(`resolveTheme(styleParams, scene)`)。 - layout-contract.ts:删掉写死的 FONT_FLOORS(含 9pt 下限),改取场景 floor。 - leaf-renderers.ts:删三处 `Math.max(9, caption)` 与瀑布图 `Math.min(caption, 11)`; 数据标签改正文色并加 C6 可读性门(与底色 <3:1 就不打标签);出标签时关网格线; 单系列/双类目不出图例;页脚与图注不再写死 10pt。 - tree/v2/compile.ts:CompileState 增加 backdrop(承载底色),`compileGroup` 遇面板 下沉一层,`push` 单点拦截 `guardElementText`——按「元素自身填充 > 当前面板 > 页面底色」 取承载面判对比度,只改文字色不动色相/饱和;出血大图与 alpha 纱罩不介入(算不准就不猜)。 - tree/v2/schema.ts + richness.ts + compile.ts:v2 语法收口(组件与角色词汇、组容器、 视觉锚点闸门)。 - slides-style/validate.ts:色板走 color-guard 的色相继承 + L/S 重算。 - tree/docs-sync.test.ts:文档漂移守卫——权威正文 `docs/slides-layout-tree-spec.zh-CN.md` 的组件清单/参数表必须与引擎 `COMPONENT_NAMES` 逐字一致。 验证:`apps/gateway` slides 相关 23 个测试文件 / 378 条全绿(含新增 scene 13、 color-guard 14、node-contrast 6、chart-axis 10、page-structure 33、quality-report 10、 page-form 9);引擎侧 `packages/pptx-engine` 77 文件 / 780 条全绿(见指针提交)。
- 删掉 `skills/layout-tree-v2-skill`(v1 语法的说明书):v2 已成为唯一写入路径, 双语法让布局代理每次都读两遍说明书、把工具轮次烧在"两种语法都对"的歧义上。 - 新增 `scripts/render-layout-skills.mjs`:`SKILL.md` = front-matter + 权威正文 (`docs/slides-layout-tree-spec.zh-CN.md`)+ 各 agent 的 `appendix.md` 增量章节。 说明书不再手写维护,`--check` 进 `test:ci`,漂移即红。 - `agents/slides-layouter`:SYSTEM.md 按 v2 语法与"一页一主角"的口径重写;input schema 同步;`policy.maxConcurrency` 8 → 16,与单册页级窗口(缺省 16)对齐——页窗口大于 单代理限额时,超出的页会被 `subagent_concurrency_limit` 秒拒并落兜底页。 - `tree/docs-sync.test.ts`(上一提交)已守卫权威正文与引擎组件名集合逐字一致。 验证:`node scripts/render-layout-skills.mjs --check` 通过。
落页按**完成顺序**发生(第 2 页可能先于第 1 页落定),但进度载荷只有 doneCount, 卡面按「前 doneCount 页已完成」推断,于是第 1 页还在排、卡片已经把第 1、2、3 页全打了勾。 - 网关 `SlidesProgressTracker.notify(runId, slideIndex, appliedPages?)`:新增页号集合, `doneCount` 取集合大小;快照与进度载荷带 `appliedPages`(0 起页序)。旧调用点不传第三参 时仍按 `max(appliedCount, slideIndex + 1)` 回落。 - 桌面 `slidesState.ts` 归一 `appliedPages`(只收有限数字); `SlidesProgressCard.tsx` 有页号集合就按集合打勾,没有才回落到旧的 doneCount 口径。 验证:`SlidesProgressCard.test.tsx` 28 条全绿(新增「落页按完成顺序」用例)。
- `slides-single-layout-path.zh-CN.md`:为什么只保留 v2 一条写入路径(v1 语法下线、 校验器/结果归一/预览入口四处统一),以及兜底页的语义。 - `slides-storyboard-form-plan.zh-CN.md`:9 类内容形态(form)的封闭词表、声明义务与 构图推导规则,取代「让模型挑版式名」。
21335464876
requested changes
Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
针对「过多无意义小字、色彩对比度爆炸、版式崩坏、压大纲慢几分钟」四类真实缺陷的确定性改造:能把观感写成算式的部分全部写死成常量与断言,模型只交内容。
slides-layout/scene.ts):5 场景 = 观看距离(far/near)× 信息密度(airy/standard/dense),字阶与字号硬下限由场景表唯一给源;风格卡不再提供字号(typography.sizes/typeScale运行时忽略)。远档 display 从 96pt 降到 60pt——汉字满宽字在 720p 画布上一行只放得下 9 个字,96pt 的正常中文标题必然折行溢出。color-guard.ts):C1 正文 ≥4.5:1(大字 3:1)、C2 非文本 ≥3:1、C3 APCA 仅记录、C4 同色相并置 ΔL* ≥0.15、C5 大面积饱和 ≤0.35、C6 数据标签禁系列色。口径是「色相继承,L/S 由代码算」。tree/v2/compile.ts):CompileState增加backdrop,面板下沉一层,单点拦截guardElementText——按「元素自身填充 > 当前面板 > 页面底色」取承载面判对比度,只改文字色。出血大图与 alpha 纱罩不介入。chart-axis.ts+ genoffice 指针):有数据标签且类目 ≤4 时整条值轴隐藏,否则给 1/2/2.5/5/10×10^k 的好读步长(3~5 条刻度)。引擎侧c:majorUnit/c:tickLblPos="none"见子模块提交。craft.ts/page-structure.ts/quality-report.ts):16px 间距网格、measure 上限、主角面积区间、对齐轴、留白率、字号档数全部变成可判定的数;quality-report.ts出一册 deck 的六个可回归指标(最小字号 / 低字号块数 / 最低对比度 / 同色相最小 ΔL* / 超预算页数 / 组件种类数),既能当断言也能当验收报告。leaf-renderers.ts):删掉三处Math.max(9, caption)与瀑布图Math.min(caption, 11);数据标签改正文色并加可读性门(与底色 <3:1 就不打标签);出标签时关网格线;单系列/双类目不出图例;页脚与图注不再写死 10pt。agents/slides-layouter):删掉layout-tree-v2-skill,v2 成为唯一写入语法;SKILL.md改由scripts/render-layout-skills.mjs从权威正文 +appendix.md生成,--check进test:ci;tree/docs-sync.test.ts守卫组件名集合与文档逐字一致。notify()新增页号集合appliedPages,卡面按集合打勾——不再把「还在排的前页」算成已完成。Evidence
leaf-renderers.ts三处Math.max(9, caption)、瀑布图Math.min(caption, 11)、页脚/图注写死 10pt;引擎按绘图区自动推值轴刻度(1280×720 上两根柱子长出十条刻度);色板只在角色层校验,落到具体承载面失控。After:
apps/gatewayslides 相关 23 个测试文件 / 378 条全绿(新增 scene 13、color-guard 14、node-contrast 6、chart-axis 10、page-structure 33、quality-report 10、page-form 9、v2 group 19、docs-sync 1);desktopSlidesProgressCard.test.tsx28 条全绿;genofficepackages/pptx-engine77 文件 / 780 条全绿(含新增值轴 4 条);render-layout-skills.mjs --check通过。待落库(同分支下一批,不在本 PR 内)
本 PR 只含引擎/说明书/桌面进度卡。以下改动仍在本机工作区,会以同一个分支的后续提交进入本 PR:
subagents/slides-condense.ts(零 LLM 确定性压缩,替代整册分批 editor 调用)与slides-page-form.ts的 form/units 接线;NXCORE_SLIDES_DECK_CONCURRENCY页级窗口、场景透传;slides-reviewer派发(含该 agent 目录移除)与tree/v3骨架库起步。Merge Danger
Door: two-way(回滚 = revert 本 PR;引擎侧回退把 genoffice 指针拨回
46a08e8)Blast Radius: slides 全链路生成质量与字号/配色口径;另需注意两点:
agents/slides-layouter/agent.yaml的policy.maxConcurrency已提到 16,与下一批的页级窗口缺省值(16)对齐。仅本 PR 落地时不会放大并行度(页窗口仍是旧值),但回退本 PR 前请先确认下一批是否已在同分支。apps/desktop/vendor/genoffice(feat/everroom-ai-tab,已推送fbc2d8e)。桌面端从apps/slides/out取运行时产物,需要重新 build 才能看到刻度/讲稿变化。