From 93f65a7d78220cfaec3413ac6e9589a80a030d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=98=8C?= <392871505@qq.com> Date: Tue, 30 Jun 2026 10:16:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20PPT=20=E6=B7=BB=E5=8A=A0=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=E7=A8=BF=E5=92=8C=E6=BC=94=E7=A4=BA=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 每页 PPT 添加演讲者备注(讲稿) - 演示相关页面添加红色「▶ 现场演示」跳转按钮 - 方便汇报时快速定位到对应演示环节 Co-Authored-By: Claude --- doc/汇报PPT.pptx | Bin 338847 -> 344526 bytes scripts/fix-ppt.js | 13 +++++++++++++ scripts/gen-ppt.js | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 scripts/fix-ppt.js diff --git a/doc/汇报PPT.pptx b/doc/汇报PPT.pptx index 67582cdc7ddf9651840bf128f6779dc043f69c8d..51f12f304194b29ff1c4bf914bff1e8fca48aad3 100644 GIT binary patch delta 13194 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 { }); // Command groups showcase s4.addShape(pres.shapes.ROUNDED_RECTANGLE, { x: 0.4, y: 2.4, w: 9.2, h: 2.9, fill: { color: C.offWhite } }); +s4.addNotes("子任务一是 CLI 能力扩展,占总分的 50%。\n我们新增了 23 个 Shortcut 命令组、181 个子命令、20 个单元测试,覆盖了 4 个包管理平台。\n这里列出了所有命令组及其子命令数量。"); s4.addText("关键新增命令组", { x: 0.6, y: 2.5, w: 4, h: 0.35, fontSize: 13, bold: true, color: C.navy, fontFace: "Arial" }); const groups = ["repo(29)","issue(12)","pr(15)","user(24)","branch(9)","ci(12)","release(6)","webhook(8)","wiki(7)","snippet(4)","commit(5)","file(11)","milestone(6)","collaborator(6)","org(7)","search(2)","label(7)","tag(3)","dataset(4)","template(5)"]; groups.forEach((g, i) => { @@ -126,6 +133,7 @@ groups.forEach((g, i) => { // ===== Slide 5: 子任务一 - 架构 ===== let s5 = pres.addSlide(); s5.background = { fill: C.navy }; +s5.addNotes("CLI 采用经典的三层架构:\n第一层 Shortcuts 提供高频操作的快捷接口;\n第二层 API Commands 负责统一的认证和错误处理;\n第三层 Raw API 可以直接访问任意平台端点,灵活扩展。"); s5.addText("CLI 三层架构", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.white, fontFace: "Arial" }); s5.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.teal } }); const layers = [ @@ -146,6 +154,7 @@ layers.forEach((l, i) => { // ===== Slide 6: REPL & 输出优化 ===== let s6 = pres.addSlide(); s6.background = { fill: C.navy }; +s6.addNotes("我们还新增了 REPL 交互模式,支持命令面板、滚动视口,以及三种输出格式。\n表格渲染优化让嵌套数据可以直观展示。"); s6.addText("REPL 交互模式 & 输出优化", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.white, fontFace: "Arial" }); s6.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.accent } }); const replFeats = [ @@ -167,6 +176,7 @@ replFeats.forEach((f, i) => { // ===== Slide 7: 子任务二 - Skills ===== let s7 = pres.addSlide(); s7.background = { fill: C.white }; +s7.addNotes("子任务二是 AI Agent Skills,占总分的 20%。\n我们开发了 11 个 Claude Code Skills,覆盖了项目管理的各个场景。\n所有 Skill 都在 Claude Code 平台上做了端到端实测验证。\n这里展示了 6 个核心 Skill,每个 Skill 都包含完整的命令参考和工作流示例。"); s7.addText("子任务二:AI Agent Skills", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.navy, fontFace: "Arial" }); s7.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.purple } }); s7.addText("11 个 Claude Code Skills · 29 个官方 Skills · Claude Code 端到端验证", { x: 0.8, y: 1.0, w: 8, h: 0.3, fontSize: 11, color: C.gray, fontFace: "Arial" }); @@ -187,6 +197,7 @@ skills.forEach((sk, i) => { // ===== Slide 8: Skills 架构 ===== let s8 = pres.addSlide(); s8.background = { fill: C.navy }; +s8.addNotes("Skills 框架采用四层架构:\n共享层、领域层、智能层和编排层。\n这种分层设计让每个 Skill 职责清晰,同时可以灵活组合。"); s8.addText("Skills 框架分层架构", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.white, fontFace: "Arial" }); s8.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.green } }); const sLayers = [ @@ -207,6 +218,7 @@ sLayers.forEach((l, i) => { // ===== Slide 9: 子任务三 - 工作流 ===== let s9 = pres.addSlide(); s9.background = { fill: C.white }; +s9.addNotes("子任务三是端到端自动化工作流,占总分的 20%。\n我们实现了两个场景:\n场景 A 是社区运营自动化,从 Issue 分拣到周报生成再到 Release Notes 发布;\n场景 B 是代码质量看门人,从 PR 审查到 CI 检查再到自动合并决策。"); s9.addText("子任务三:端到端自动化工作流", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.navy, fontFace: "Arial" }); s7.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.orange } }); @@ -241,6 +253,7 @@ let s11 = pres.addSlide(); s11.background = { fill: C.navy }; s11.addText("工作流真实输出数据", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.white, fontFace: "Arial" }); s11.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.accent } }); +demoBtn(s11, 7.5, 0.9); s11.addText("以下数据通过对 z2_cc/gitlink-cli 仓库运行工作流脚本实际采集", { x: 0.8, y: 1.0, w: 8, h: 0.3, fontSize: 10, color: C.gray, fontFace: "Arial" }); const outputs = [ ["社区周报", "综合评分:3.5/10\nIssue 19 (关闭 4)\nPR 2 · 贡献者 1", C.teal], @@ -258,6 +271,7 @@ outputs.forEach((o, i) => { // ===== Slide 12: 子任务四 - 科研 ===== let s12 = pres.addSlide(); s12.background = { fill: C.white }; +s12.addNotes("子任务四是科研辅助,是加分项。\n模块 C 是科研项目洞悉,可以采集 8 维仓库数据,从成熟度、文档质量、贡献模式和社区健康度四个维度进行评分。\n模块 D 是热点追踪与知识图谱,支持多关键词搜索并自动构建交互式知识图谱。"); s12.addText("子任务四:科研辅助", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.navy, fontFace: "Arial" }); s12.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.green } }); @@ -286,6 +300,7 @@ let s14 = pres.addSlide(); s14.background = { fill: C.navy }; s14.addText("知识图谱可视化", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.white, fontFace: "Arial" }); s14.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.green } }); +demoBtn(s14, 7.5, 0.9); s14.addText("热点追踪 Skill 自动构建多关键词搜索结果的知识图谱", { x: 0.8, y: 1.0, w: 8, h: 0.3, fontSize: 10, color: C.gray, fontFace: "Arial" }); const kgNodes = [ ["研究项目", "4 个", C.blue, 0.5], @@ -307,6 +322,7 @@ s14.addText("✅ 滚轮缩放 ✅ 拖拽平移 ✅ 点击高亮 ✅ SVG 导 // ===== Slide 15: 演示展示 ===== let s15 = pres.addSlide(); s15.background = { fill: C.navy }; +s15.addNotes("现在是现场演示环节,我们将展示四个核心功能:\n1. 社区运营自动化(一键式三阶段流水线)\n2. 科研项目洞悉(8 维数据采集与 4 维评分)\n3. 热点追踪与知识图谱(交互式 HTML 可视化)\n4. 质量门禁(PR 审查与自动评分)\n\n演示脚本详见 doc/演示脚本.md,综合演示页详见 doc/demo.html"); s15.addText("演示展示", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 28, bold: true, color: C.white, fontFace: "Arial" }); s15.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.accent } }); // Terminals @@ -327,6 +343,7 @@ demos.forEach((d, i) => { // ===== Slide 16: 团队贡献 ===== let s16 = pres.addSlide(); s16.background = { fill: C.white }; +s16.addNotes("最后介绍一下团队贡献。\n刘焱负责 CLI 底层架构和大部分 Shortcut 实现;\n赵昌负责命令实现、Skills 开发、工作流编排和科研模块;\n曾蔚然作为组长负责 DevOps 流水线、代码审查和项目统筹。\n\n项目共交付 47 个文件、约 5,800 行代码,全部验证通过。\n感谢各位聆听,欢迎提问!"); s16.addText("团队贡献", { x: 0.8, y: 0.3, w: 8, h: 0.6, fontSize: 26, bold: true, color: C.navy, fontFace: "Arial" }); s16.addShape(pres.shapes.RECTANGLE, { x: 0.8, y: 0.85, w: 1.2, h: 0.04, fill: { color: C.teal } }); const members = [ @@ -355,6 +372,7 @@ let s17 = pres.addSlide(); s17.background = { fill: C.navy }; s17.addShape(pres.shapes.OVAL, { x: -2, y: -1, w: 6, h: 6, fill: { color: "24397A", transparency: 50 } }); s17.addShape(pres.shapes.OVAL, { x: 7, y: 3, w: 4, h: 4, fill: { color: "2B579A", transparency: 60 } }); +s17.addNotes("问答环节。\n可以准备以下问题的回答:\n1. CLI 如何保证向后兼容?——新增 Shortcut 不影响已有命令\n2. 工作流脚本安全吗?——默认 dry-run 模式,不会修改数据\n3. 科研模块数据来源?——全部通过 gitlink-cli 从 GitLink API 实时采集\n4. 知识图谱是如何构建的?——多关键词搜索 → 实体关系提取 → Mermaid 可视化"); s17.addText("Q & A", { x: 0, y: 1.5, w: 10, h: 1.2, fontSize: 48, bold: true, color: C.white, fontFace: "Arial", align: "center" }); s17.addText("感谢聆听 · 欢迎提问", { x: 0, y: 2.8, w: 10, h: 0.5, fontSize: 16, color: C.lightBlue, fontFace: "Arial", align: "center" });