dsh-courseware 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/cordis.patch.yml +9 -0
  4. package/engine/pptxgen/__init__.py +8 -0
  5. package/engine/pptxgen/__main__.py +4 -0
  6. package/engine/pptxgen/builtin_template.py +218 -0
  7. package/engine/pptxgen/cli.py +575 -0
  8. package/engine/pptxgen/examples.py +290 -0
  9. package/engine/pptxgen/imagegen.py +564 -0
  10. package/engine/pptxgen/layoutmap.py +211 -0
  11. package/engine/pptxgen/patterns.py +106 -0
  12. package/engine/pptxgen/preview.py +126 -0
  13. package/engine/pptxgen/profile.py +456 -0
  14. package/engine/pptxgen/render.py +1673 -0
  15. package/engine/pptxgen/review.py +184 -0
  16. package/engine/pptxgen/schemacheck.py +122 -0
  17. package/engine/pptxgen/schemas/XAdES.xsd +466 -0
  18. package/engine/pptxgen/schemas/XAdESv141.xsd +15 -0
  19. package/engine/pptxgen/schemas/chartEx.xsd +838 -0
  20. package/engine/pptxgen/schemas/dml-chart.xsd +1499 -0
  21. package/engine/pptxgen/schemas/dml-chartDrawing.xsd +146 -0
  22. package/engine/pptxgen/schemas/dml-diagram.xsd +1085 -0
  23. package/engine/pptxgen/schemas/dml-drawing.xsd +63 -0
  24. package/engine/pptxgen/schemas/dml-lockedCanvas.xsd +11 -0
  25. package/engine/pptxgen/schemas/dml-main.xsd +3081 -0
  26. package/engine/pptxgen/schemas/dml-picture.xsd +23 -0
  27. package/engine/pptxgen/schemas/dml-spreadsheetDrawing.xsd +185 -0
  28. package/engine/pptxgen/schemas/dml-wordprocessingDrawing.xsd +287 -0
  29. package/engine/pptxgen/schemas/drawing-chart2012.xsd +129 -0
  30. package/engine/pptxgen/schemas/markup-compatibility.xsd +95 -0
  31. package/engine/pptxgen/schemas/opc-digSig.xsd +49 -0
  32. package/engine/pptxgen/schemas/opc-relationships.xsd +33 -0
  33. package/engine/pptxgen/schemas/pml.xsd +1676 -0
  34. package/engine/pptxgen/schemas/shared-additionalCharacteristics.xsd +28 -0
  35. package/engine/pptxgen/schemas/shared-bibliography.xsd +144 -0
  36. package/engine/pptxgen/schemas/shared-commonSimpleTypes.xsd +172 -0
  37. package/engine/pptxgen/schemas/shared-customXmlDataProperties.xsd +25 -0
  38. package/engine/pptxgen/schemas/shared-customXmlSchemaProperties.xsd +18 -0
  39. package/engine/pptxgen/schemas/shared-documentPropertiesCustom.xsd +59 -0
  40. package/engine/pptxgen/schemas/shared-documentPropertiesExtended.xsd +56 -0
  41. package/engine/pptxgen/schemas/shared-documentPropertiesVariantTypes.xsd +195 -0
  42. package/engine/pptxgen/schemas/shared-math.xsd +582 -0
  43. package/engine/pptxgen/schemas/shared-relationshipReference.xsd +25 -0
  44. package/engine/pptxgen/schemas/signatureInfo.xsd +103 -0
  45. package/engine/pptxgen/schemas/sml.xsd +4439 -0
  46. package/engine/pptxgen/schemas/visio.xsd +829 -0
  47. package/engine/pptxgen/schemas/vml-main.xsd +570 -0
  48. package/engine/pptxgen/schemas/vml-officeDrawing.xsd +509 -0
  49. package/engine/pptxgen/schemas/vml-presentationDrawing.xsd +12 -0
  50. package/engine/pptxgen/schemas/vml-spreadsheetDrawing.xsd +108 -0
  51. package/engine/pptxgen/schemas/vml-wordprocessingDrawing.xsd +96 -0
  52. package/engine/pptxgen/schemas/vmlDrawing.xsd +36 -0
  53. package/engine/pptxgen/schemas/wml.xsd +3643 -0
  54. package/engine/pptxgen/schemas/word12.xsd +66 -0
  55. package/engine/pptxgen/schemas/xlThreadedComments.xsd +59 -0
  56. package/engine/pptxgen/schemas/xlThreadedComments2.xsd +22 -0
  57. package/engine/pptxgen/schemas/xmldsig-core-schema.xsd +318 -0
  58. package/engine/pptxgen/shapes.py +417 -0
  59. package/engine/pptxgen/spec.py +529 -0
  60. package/engine/pptxgen/template.py +834 -0
  61. package/engine/pptxgen/util.py +218 -0
  62. package/engine/pptxgen/xmlutil.py +298 -0
  63. package/engine/pptxgen.sh +7 -0
  64. package/engine/requirements.txt +9 -0
  65. package/lib/index.js +186 -0
  66. package/package.json +34 -0
  67. package/skills/courseware/SKILL.md +130 -0
  68. package/skills/courseware/references/content-polish.md +121 -0
  69. package/skills/courseware/references/deck-spec.md +155 -0
  70. package/skills/courseware/references/design-review.md +121 -0
  71. package/skills/courseware/references/image-backends.md +94 -0
  72. package/skills/courseware/references/quality-gates.md +71 -0
  73. package/skills/courseware/references/roadmap.md +55 -0
  74. package/skills/courseware/references/template-fidelity.md +100 -0
  75. package/skills/courseware/workflows/generate.md +172 -0
  76. package/skills/courseware/workflows/quick.md +41 -0
  77. package/skills/courseware/workflows/revise.md +40 -0
  78. package/skills/courseware/workflows/routing.md +49 -0
  79. package/skills/courseware/workflows/stages/generate-images.md +74 -0
  80. package/skills/courseware/workflows/template-intake.md +112 -0
@@ -0,0 +1,40 @@
1
+ # Revise —— 改已有课件
2
+
3
+ 已有规格 YAML 或已生成的 pptx,要改内容 / 加配图 / 换模板。
4
+
5
+ ## 判定改哪里
6
+
7
+ | 用户要求 | 改什么 | 重跑到哪一步 |
8
+ |---|---|---|
9
+ | 改某页文字 / 加减要点 | `decks/xxx.yaml` 对应页 | 步骤 5(build)起 |
10
+ | 加/换配图 | `image_prompt` | 步骤 4(images)起 |
11
+ | 换模板 | `template:` 字段 | **步骤 1(inspect)重跑** |
12
+ | 调页序 / 拆页 / 并页 | `slides:` 列表 | 步骤 3 起,需要重新过闸门 |
13
+ | 改答案位置 | `options.answer_mode` | 步骤 5 起 |
14
+ | 改页码 / 装饰层开关 | `options` | 步骤 5 起 |
15
+
16
+ **换模板必须从步骤 1 重走** —— 新模板的母版数、骨架、字体都可能不同,
17
+ 旧的内容编排可能不再合适。
18
+
19
+ ## 步骤
20
+
21
+ 1. **读现有 YAML**,确认结构完整(`deck` / `template` / `options` / `slides`)
22
+ 2. **只改需要改的字段**,不要顺手重排其它页
23
+ 3. **如果改了页序或页数** → 回到 [`generate.md`](generate.md) 的 `⛔ 闸门 1` 确认
24
+ 4. 重跑 `build`
25
+ 5. **重跑质量闭闸**(`check --render`)—— 改动可能引入新的重叠
26
+
27
+ ## 纪律
28
+
29
+ - **不要重新生成整份 YAML**。增量修改,保留用户已经确认过的内容。
30
+ - **改动前后各留一个副本**到 `out/_backup/`,便于对比和回滚。
31
+ - **报告改了什么**:逐条列出,不要只说"已修改"。
32
+
33
+ ## 常见陷阱
34
+
35
+ | 陷阱 | 后果 | 避免 |
36
+ |---|---|---|
37
+ | 换了模板没重跑 inspect | 套错母版,背景字体全不对 | 强制重跑步骤 1 |
38
+ | 加了要点没重跑 check | 文字溢出/重叠 | 强制重跑闭闸 |
39
+ | 改了 `image_prompt` 没重跑 images | 用的是旧图(prompt 哈希缓存) | 重跑 `images`,必要时 `--force` |
40
+ | 直接编辑生成的 pptx | 下次 build 会被覆盖 | 只改 YAML,改 pptx 的改动要么回写 YAML 要么明确告知会被覆盖 |
@@ -0,0 +1,49 @@
1
+ # 路由规则
2
+
3
+ **权威**:本文件是路线选择的唯一权威。与 `SKILL.md` 或任何其它文档冲突时,以本文件为准。
4
+
5
+ ## 路线矩阵
6
+
7
+ | 路线 | 请求形态 | 前置条件 | 权威流程 |
8
+ |---|---|---|---|
9
+ | **Generate** | 用模板 + 大纲生成新课件 | 有模板 pptx;有大纲;已跑 `inspect` | [`generate.md`](generate.md) |
10
+ | **Quick** | 同上,且用户明确说"快一点/不用确认/直接出" | 同 Generate | [`quick.md`](quick.md) |
11
+ | **Template Intake** | 只诊断模板、检查可用性、解决模板问题 | 有模板 pptx | [`template-intake.md`](template-intake.md) |
12
+ | **Revise** | 已有课件要改内容/加配图/换模板 | 有规格 yaml 或已有 pptx | [`revise.md`](revise.md) |
13
+
14
+ ## 纪律
15
+
16
+ - **选一条路线**,然后只加载该路线拥有的流程文件。
17
+ - **不给用户列路线菜单**。请求已匹配上表某一行时直接进入。
18
+ - **前置条件缺失时报告并停止**,不要发明替代路径。
19
+ - 没模板 → 问用户要,不要用内置模板冒充
20
+ - 没大纲 → 问用户要,不要编造课程内容
21
+ - **支持文档不是顶层路线**。`stages/` 与 `references/` 只精化已选路线。
22
+
23
+ ## 判定辅助
24
+
25
+ | 用户话术 | 判定 |
26
+ |---|---|
27
+ | "用这个模板做第 2 课" | Generate |
28
+ | "快一点,别问我了" / "直接出" | Quick |
29
+ | "先看看这个模板能不能用" | Template Intake |
30
+ | "这份 PPT 帮我改一下第 5 页" | Revise |
31
+ | "把教案做成 PPT"(未给模板) | 先问模板;给不出则 Template Intake 报告缺模板 |
32
+ | "帮我做个 PPT"(无模板无大纲) | 追问两者;两者都无 → 报告无法执行 |
33
+
34
+ ## Quick 与 Generate 的差别
35
+
36
+ | | Generate | Quick |
37
+ |---|---|---|
38
+ | 大纲确认闸门 | ⛔ 必须 | 跳过,agent 自行决定 |
39
+ | 交付确认闸门 | ⛔ 必须 | 报告结果即可 |
40
+ | 输出 | 完整流程 | 同样完整,只是少了两次交互 |
41
+ | **不省略** | — | `inspect`、质量闭闸、结果报告 |
42
+
43
+ **Quick 不是"低质量模式"**,只是"少问两次"。质量闭闸在任何模式下都不能跳过。
44
+
45
+ ## 与 ppt-master 的一个关键差异
46
+
47
+ ppt-master 的 Quick 会丢掉 spec/lock 规划与部分质量门禁,靠"current agent
48
+ 自行决定"填补 —— 这在长对话里容易失控。本 skill 的 Quick **只砍交互,不砍检查**:
49
+ `inspect` 与 `check --render` 在两条路线里都是强制的。
@@ -0,0 +1,74 @@
1
+ # Stage:配图生成
2
+
3
+ 课件里写了 `image_prompt` 的页面需要这一步。没有 `image_prompt` 就跳过。
4
+
5
+ ## 三步走(顺序不能变)
6
+
7
+ ```bash
8
+ # 1) 先看会生成几张、什么 prompt —— 不发任何请求,不花钱
9
+ "$ENGINE_HOME/pptxgen.sh" images "decks/xxx.yaml" --dry-run
10
+
11
+ # 2) 只试 2 张,确认画风对不对 —— 别一次出 14 张才发现风格不合
12
+ "$ENGINE_HOME/pptxgen.sh" images "decks/xxx.yaml" --limit 2
13
+
14
+ # 3) 满意后全量
15
+ "$ENGINE_HOME/pptxgen.sh" images "decks/xxx.yaml"
16
+ ```
17
+
18
+ **`--limit 2` 是强制习惯**,不是可选项。生图按张计费,风格错了就是纯浪费。
19
+
20
+ ## 用占位图先验证版面
21
+
22
+ 用户还没配图像模型 key 时,**不要让流程卡住**:
23
+
24
+ ```bash
25
+ "$ENGINE_HOME/pptxgen.sh" images "decks/xxx.yaml" --backend mock
26
+ "$ENGINE_HOME/pptxgen.sh" build "decks/xxx.yaml"
27
+ ```
28
+
29
+ `mock` 出的是本地生成的渐变色块,**不联网不花钱**,用来判断
30
+ "图片放右侧、正文缩到 24pt" 这个版面合不合适。
31
+
32
+ 交付时**必须明确告诉用户这是占位图**,并给出配 key 的方法:
33
+
34
+ ```
35
+ 这批图是本地占位图,不是真实配图。换成真图:
36
+ 1. 编辑 .pptxgen.yaml,填 base_url / model / api_key
37
+ 2. "$ENGINE_HOME/pptxgen.sh" images "decks/xxx.yaml"
38
+ 3. "$ENGINE_HOME/pptxgen.sh" build "decks/xxx.yaml"
39
+ ```
40
+
41
+ **禁止**把占位图当成品交付而不说明。
42
+
43
+ ## 写 image_prompt 的方法
44
+
45
+ | 要素 | 例子 |
46
+ |---|---|
47
+ | 主体 | 一间电视天气预报演播室 |
48
+ | 细节 | 主持人站在大幅天气图前,屏幕上有云朵和太阳图案 |
49
+ | 风格 | 交给全局 `style` 统一控制,**不要每页重复写** |
50
+
51
+ 好 prompt 的特征:
52
+ - **具体可画**:"孩子们的小手在剪纸、涂色、粘贴" 优于 "动手实践"
53
+ - **一个画面一件事**:不要在一张图里塞三个场景
54
+ - **不要求画面出文字**(全局 style 已声明"不要出现文字",因为模型写的字通常是错的)
55
+
56
+ ## 缓存与成本
57
+
58
+ - 按 `(后端, 模型, 尺寸, prompt, 风格)` 的哈希缓存到 `out/images/`
59
+ - **同样的 prompt 重跑不重复计费**
60
+ - 改了 prompt 会生成新图,旧图仍在缓存里(不浪费,可回退)
61
+ - `--force` 强制重生成
62
+
63
+ 渲染阶段只读 `out/images/manifest.json`,**不需要 key** —— 换机器生成课件也能复用已出的图。
64
+
65
+ ## 失败处理
66
+
67
+ | 症状 | 处理 |
68
+ |---|---|
69
+ | 缺 API key | 明确告知配置方法;不要静默跳过 |
70
+ | 单张生成失败 | 报告是第几页、什么错;其余页继续 |
71
+ | 全部失败 | 停下来查后端配置,不要重试到死 |
72
+ | 配额/限流 | 报告并建议稍后重试;不要无限重试 |
73
+
74
+ 后端清单见 [`references/image-backends.md`](../../references/image-backends.md)。
@@ -0,0 +1,112 @@
1
+ # Template Intake —— 模板诊断与修复
2
+
3
+ 只诊断模板,不产出课件。用户拿来一个新模板、或课件效果不对时走这条路线。
4
+
5
+ ## 步骤 1 —— 基础诊断
6
+
7
+ ```bash
8
+ "$ENGINE_HOME/pptxgen.sh" inspect "templates/xxx.pptx"
9
+ ```
10
+
11
+ 必读四段,判断模板是否可用:
12
+
13
+ | 段落 | 看什么 | 不可用的表现 |
14
+ |---|---|---|
15
+ | 画布尺寸 | 4:3 还是 16:9 | — |
16
+ | **母版** | 几个母版、主母版是哪个 | 全部示例页挂在同一个母版上 → 只有一个真正可用 |
17
+ | **样式档案** | 模块标签 / 标题条 / 内容区 / 正文排版 | 整个「样式档案:未学到」→ 模板不靠骨架,只靠版式 |
18
+ | **版式列表** | 有没有「标题=有 正文=有」的版式 | 全部版式都没有占位符 → 需要手工定版式 |
19
+
20
+ 再跑一次看映射:
21
+
22
+ ```bash
23
+ "$ENGINE_HOME/pptxgen.sh" inspect "templates/xxx.pptx" --map
24
+ ```
25
+
26
+ ## 步骤 2 —— 判定模板类型
27
+
28
+ | 类型 | 特征 | 后续 |
29
+ |---|---|---|
30
+ | **骨架型** | 样式档案学到了模块标签/标题条 | 最理想,`generate.md` 直接可用 |
31
+ | **版式型** | 样式档案未学到,但版式齐全(标题+正文) | 可用,靠版式渲染 |
32
+ | **图片型** | 每页是一整张设计图,无版式无骨架 | 需人工指定内容区,见步骤 4 |
33
+ | **空壳型** | 没有任何示例页 | `inspect` 的装饰层与骨架全空,只能继承母版背景 |
34
+
35
+ ## 步骤 3 —— 视觉验证(推荐)
36
+
37
+ ```bash
38
+ "$ENGINE_HOME/pptxgen.sh" build "decks/<示例>.yaml" -t "templates/xxx.pptx" -o out/_tpltest.pptx
39
+ "$ENGINE_HOME/pptxgen.sh" preview out/_tpltest.pptx -o out/_tplcheck
40
+ ```
41
+
42
+ 用内置示例课件 `examples/示例课件_分数的初步认识.yaml` 当探针,渲染出来看:
43
+ 背景、配色、页面骨架是否和模板自己的页面一致。
44
+
45
+ **不做这一步就下结论是危险的** —— XML 层面一致不代表渲染一致
46
+ (多母版问题就是这样漏掉的)。详见 [`template-fidelity.md`](../references/template-fidelity.md)。
47
+
48
+ ## 步骤 4 —— 修复分支
49
+
50
+ ### 4a. 版式选错了
51
+
52
+ 在课件 YAML 里覆盖:
53
+
54
+ ```yaml
55
+ layout_map:
56
+ cover: "封面页" # 版式名,支持部分匹配
57
+ content: 13 # 或全局版式序号
58
+ ```
59
+
60
+ 或单页指定:
61
+
62
+ ```yaml
63
+ - type: content
64
+ layout: "两栏内容"
65
+ title: …
66
+ ```
67
+
68
+ 全局版式序号从 `inspect` 的版式列表读(多母版时序号跨母版连续)。
69
+
70
+ ### 4b. 装饰层没识别到
71
+
72
+ ```bash
73
+ "$ENGINE_HOME/pptxgen.sh" inspect "templates/xxx.pptx" --json | python -c "
74
+ import json,sys; d=json.load(sys.stdin)
75
+ print('装饰层:', [c['name'] for c in d['global_chrome']])
76
+ print('幻灯片级背景覆盖:', d['slide_background_override'])
77
+ "
78
+ ```
79
+
80
+ 识别不到的原因通常是「每页装饰都不一样」—— 那不是模板的一部分,正常。
81
+
82
+ ### 4c. 骨架学错了位置
83
+
84
+ 编辑 `workflows/` 之外的参数:在课件 YAML 里关掉骨架,回到纯版式渲染:
85
+
86
+ ```yaml
87
+ options:
88
+ style_profile: off
89
+ ```
90
+
91
+ ### 4d. 图片型模板
92
+
93
+ 每页一整张设计图、没有版式时,只能:
94
+ 1. 在 `inspect` 里确认内容区(白区)范围
95
+ 2. 用 `image_side: right` 等字段手工排版
96
+ 3. 明确告诉用户:这类模板的排版自由度受限
97
+
98
+ ## 步骤 5 —— 报告
99
+
100
+ 给用户:
101
+
102
+ ```
103
+ 模板:<路径>
104
+ 类型:骨架型 / 版式型 / 图片型 / 空壳型
105
+ 母版:2 个,主母版 master2(24/25 页在用)
106
+ 骨架:模块标签 23 页重复 / 标题条 10 页重复
107
+ 正文:微软雅黑 28pt(从样张学到)
108
+ 映射:封面→master1,内容→master2,结束页→自定义版式
109
+ 可用性:✅ 可直接生成
110
+ ```
111
+
112
+ 若不可用,明确说明**缺什么**、**能不能绕过**、**绕过后的代价**。