--- name: resume-canvas description: 指导与驱动 resume-canvas (本地 HTML 简历可视化微调编辑器) 的运行、编辑协议验证、文本与排版微调以及保存后的事实重验闭环。当用户需要预览视觉简历、进行文字小修小补、排版微调(字号/间距/颜色/页边距)、启动本地编辑器或排查编辑协议时使用。 --- # 简历 Canvas 微调器 (resume-canvas) 专职负责已生成的独立视觉 HTML 简历的本地可视化微调、编辑协议检验与保存重验闭环。 ## 定位与协作入口 - **角色定位**:AI 生成视觉简历后的“最后小修小补”工具。提供所见即所得的本地 Web 界面,供用户快速修正错别字、微调字号、字重、颜色、对齐、行高、段后距与页边距。 - **职责边界**: - **允许**:编辑已有字段的纯文本,调整受限排版样式。 - **禁止**:不用于经历采访与生成、无中生有编造事实、JD 匹配分析、结构重排、插入任意 HTML 或图片编辑。 - **模式限制**:仅适用于 6 套内置视觉模板(`modern-minimal`、`classic-business`、`creative-bold`、`japanese-minimal`、`minimal-blue-business`、`tech-dark`)。**ATS-safe 模式不使用 Canvas**(单栏纯文本结构无需也未接入编辑协议)。 - **上游来源**: - `resume-builder`:生成母版视觉 HTML 且完成初始 PDF 渲染验证后,若用户需要微调排版或文字,路由至本技能。 - `jd-tailorer`:生成岗位定制版视觉 HTML 且完成初始 PDF 渲染验证后,若用户需要微调,路由至本技能。 - `resume-workflow`:完整编排工作流在交付阶段按需调用本技能。 --- ## 核心工作流 首次执行校验或保存后重验前,读取 [渲染环境与命令路径](../resume-builder/references/runtime-setup.md)。Canvas CLI 可独立启动,保存后的 PDF/截图重验则需要完整运行时;使用实际脚本和私有产物的绝对路径。 ### 第一步:验收编辑协议契约 在启动 Canvas 或交付视觉 HTML 之前,必须确保目标 HTML 符合编辑字段协议: 1. **协议根标记**: `` 根节点必须声明: - `data-resume-editor-template="<模板标识>"`(如 `modern-minimal` 等) - `data-resume-editor-version="1"` - `data-resume-layout="full-page"` 2. **字段独立性要求**: - 字段总数必须大于 0; - 必须使用唯一、小写、语义化的 `data-resume-editor-id`(例如 `profile-name`、`experience-1-title`、`experience-1-bullet-1`、`skill-1` 等); - **可独立编辑原则**:`data-resume-editor-id` 只能标在具体的叶子文本元素上; - **禁止把编辑 ID 放在容器上**:禁止把 ID 放在 ``、``、`
`、`.page`、`.resume`、`header`、`footer`、`section`、`ul`、`ol`、`figure` 或包含多个板块/复合内容的容器上,严禁使用整页兜底 ID。带链接的复合联系方式需将文本拆分为独立字段。 3. **执行静态校验(门禁命令)**: ```bash npx -p @chasen-liao/resume-skills@latest resume-skills validate "<最终_visual.html路径>" ``` - 重复执行直到输出“校验通过”; - 若出现错误(缺少协议版本、缺少模板名、存在容器 ID、重复 ID 等),必须对照报错节点在 HTML 中修复,严禁在校验未通过时启动 Canvas。 --- ### 第二步:启动本地编辑器 校验通过后,调用 CLI 启动本地服务: ```bash npx -p @chasen-liao/resume-skills@latest resume-skills editor "<最终_visual.html路径>" --manifest "<交付目录/自定义文件名.resume-manifest.json>" ``` #### CLI 参数与运行模式说明 - `--manifest `:显式关联验证清单文件。当用户在 Canvas 中保存时,该 manifest 会被自动置为失效,保障产物真实性。 - `--json`:NDJSON 流式输出机器可读事件(`server_started`、`error`、`update_available`、`validation_passed`)。适合 Agent 后台集成或自动化流水线,脚本逐行 `JSON.parse`。 - `--no-open`:禁止自动拉起系统默认浏览器。适合无 GUI 环境、远程 SSH 容器或开发者自行手动打开网页。 - `--port `:显式指定服务端口(严格模式,若端口被占用直接报错;未指定时默认从 8848 尝试顺延至 8853,仍被占用则使用随机端口)。 #### 环境降级与异常处理 若当前执行环境缺少 Node.js(`< 20`)或无法执行 `npx` 命令: - **必须明确报告未启动**:严禁向用户虚假声称“已在后台打开编辑器”; - **提供完整命令**:向用户输出包含其实际 HTML 路径的完整命令,提示用户在其本机终端中手动执行启动: ```bash npx -p @chasen-liao/resume-skills@latest resume-skills editor "<实际生成的_visual.html绝对路径>" ``` --- ### 第三步:交互协同与 Live Preview 1. **界面交互指引**: - **中间画布**:单选选中字段可直接打字编辑(纯文本),双击同样可编辑;支持 `Tab`/方向键切换字段焦点,`Ctrl/Cmd+Enter` 确认,`Esc` 撤销。 - **右侧面板**:选中具体字段后可调整字号、字重、颜色、行高、段后间距;可调整页面边距与全局主题色。 - **左侧状态**:实时显示 A4 页面垂直溢出与高度占用指示。 2. **Live Preview 热重载**: - 编辑器通过 SSE 与本地服务保持长连接; - 当 Agent 在后台根据用户反馈修改并重新保存该 HTML 时,前端画布会自动触发热重载刷新最新内容,用户无需手动刷新页面。 --- ### 第四步:保存与重验闭环(强制关键防线) 当用户在编辑器中完成修改并点击“**保存修改**”后: 1. **状态变化**: - 编辑器将修改原子写回源 HTML,并自动将关联的 `*.resume-manifest.json` 状态置为失效(`invalidated`); - 旧的 PDF 不再匹配当前最新的 HTML 内容。 2. **必须回到 Agent 工作流执行重验闭环**: - **事实核验**:检查 HTML 中的修改内容是否涉及关键经历、时间、职位、数据或技能。若发现未经确认的新事实,必须向用户核实,不可直接交付; - **重新渲染与验证 PDF**: 必须重新执行渲染与验证脚本,生成有效的新 PDF 与 manifest: ```bash powershell -NoProfile -ExecutionPolicy Bypass -File skills/resume-builder/scripts/render_resume.ps1 -HTML "<最终_visual.html路径>" -OutputPdf "<交付目录/自定义文件名.pdf>" ``` - **整页截图视觉复核**:AI 必须打开重新渲染生成的整页截图,按 [整页截图视觉复核](../resume-builder/SKILL.md#整页截图视觉复核视觉模式强制执行) 检查底部留白、上下平衡、板块间空隙和双栏各栏分布。明显底部空缺或留白失衡时,即使自动校验通过也不得交付;在 Canvas 支持的排版项内调整后重新渲染、校验并查看新截图。若需要结构重排,回到 `resume-builder` 或 `jd-tailorer` 处理,不扩展 Canvas 的编辑边界。 - 确认 PDF 页数恰好为 1 页,有效利用率 ≥ 98%,manifest 为有效状态,且 AI 已实际看图确认留白均匀后,微调闭环才算完成。无法查看截图时必须说明视觉复核未完成。 --- ## 协作出口与下游路由 - **微调完成并重新验证后**:交付最终的视觉 HTML、PDF 及 manifest。 - **区分母版与定制版后续流转**: - **若微调的是母版简历**:微调并重验通过后作为最新母版;后续若需针对新目标岗位投递,以母版事实为基准**路由至 `jd-tailorer`**。 - **若微调的是岗位定制版简历**:仅作为当前特定公司/岗位的独立交付物(保存在 `tailored/<公司名>-<岗位>/` 目录下),**严禁将已定制版直接作为新母版去派生其他岗位**;投递其他岗位必须回到唯一母版事实。 - **版本归档**:无论母版还是定制版,微调定稿并重验通过后,更新对应版本的 `version-notes.md` 并建议用户在本地私有 Git 仓库完成语义化提交,不自动执行 Git 提交。