@deckflow/deckuse 1.2.1 → 1.3.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 (281) hide show
  1. package/README.es.md +342 -0
  2. package/README.fr.md +342 -0
  3. package/README.ja.md +342 -0
  4. package/README.ko.md +342 -0
  5. package/README.md +46 -8
  6. package/README.pt-BR.md +342 -0
  7. package/README.ru.md +342 -0
  8. package/README.zh-CN.md +367 -0
  9. package/assets/default.docx +0 -0
  10. package/assets/default.pptx +0 -0
  11. package/dist/bin.js +183 -19
  12. package/dist/bin.js.map +1 -1
  13. package/dist/core/adapter.d.ts +24 -0
  14. package/dist/core/adapter.d.ts.map +1 -0
  15. package/dist/core/adapter.js +20 -0
  16. package/dist/core/adapter.js.map +1 -0
  17. package/dist/core/executor.d.ts +24 -0
  18. package/dist/core/executor.d.ts.map +1 -0
  19. package/dist/core/executor.js +65 -0
  20. package/dist/core/executor.js.map +1 -0
  21. package/dist/core/index.d.ts +7 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/index.js +7 -0
  24. package/dist/core/index.js.map +1 -0
  25. package/dist/core/length.d.ts +27 -0
  26. package/dist/core/length.d.ts.map +1 -0
  27. package/dist/core/length.js +63 -0
  28. package/dist/core/length.js.map +1 -0
  29. package/dist/core/measure.d.ts +24 -0
  30. package/dist/core/measure.d.ts.map +1 -0
  31. package/dist/core/measure.js +79 -0
  32. package/dist/core/measure.js.map +1 -0
  33. package/dist/core/not-implemented.d.ts +3 -0
  34. package/dist/core/not-implemented.d.ts.map +1 -0
  35. package/dist/core/not-implemented.js +12 -0
  36. package/dist/core/not-implemented.js.map +1 -0
  37. package/dist/core/schema.d.ts +3035 -0
  38. package/dist/core/schema.d.ts.map +1 -0
  39. package/dist/core/schema.js +798 -0
  40. package/dist/core/schema.js.map +1 -0
  41. package/dist/default-template.d.ts +8 -0
  42. package/dist/default-template.d.ts.map +1 -0
  43. package/dist/default-template.js +29 -0
  44. package/dist/default-template.js.map +1 -0
  45. package/dist/docx/adapter.d.ts +29 -0
  46. package/dist/docx/adapter.d.ts.map +1 -0
  47. package/dist/docx/adapter.js +442 -0
  48. package/dist/docx/adapter.js.map +1 -0
  49. package/dist/docx/addressing.d.ts +18 -0
  50. package/dist/docx/addressing.d.ts.map +1 -0
  51. package/dist/docx/addressing.js +111 -0
  52. package/dist/docx/addressing.js.map +1 -0
  53. package/dist/docx/blank.d.ts +4 -0
  54. package/dist/docx/blank.d.ts.map +1 -0
  55. package/dist/docx/blank.js +75 -0
  56. package/dist/docx/blank.js.map +1 -0
  57. package/dist/docx/index-sync.d.ts +7 -0
  58. package/dist/docx/index-sync.d.ts.map +1 -0
  59. package/dist/docx/index-sync.js +24 -0
  60. package/dist/docx/index-sync.js.map +1 -0
  61. package/dist/docx/index.d.ts +5 -0
  62. package/dist/docx/index.d.ts.map +1 -0
  63. package/dist/docx/index.js +4 -0
  64. package/dist/docx/index.js.map +1 -0
  65. package/dist/docx/indexer.d.ts +41 -0
  66. package/dist/docx/indexer.d.ts.map +1 -0
  67. package/dist/docx/indexer.js +353 -0
  68. package/dist/docx/indexer.js.map +1 -0
  69. package/dist/docx/mutations.d.ts +5 -0
  70. package/dist/docx/mutations.d.ts.map +1 -0
  71. package/dist/docx/mutations.js +311 -0
  72. package/dist/docx/mutations.js.map +1 -0
  73. package/dist/docx/paragraphs.d.ts +26 -0
  74. package/dist/docx/paragraphs.d.ts.map +1 -0
  75. package/dist/docx/paragraphs.js +314 -0
  76. package/dist/docx/paragraphs.js.map +1 -0
  77. package/dist/docx/properties.d.ts +23 -0
  78. package/dist/docx/properties.d.ts.map +1 -0
  79. package/dist/docx/properties.js +414 -0
  80. package/dist/docx/properties.js.map +1 -0
  81. package/dist/docx/tables.d.ts +4 -0
  82. package/dist/docx/tables.d.ts.map +1 -0
  83. package/dist/docx/tables.js +64 -0
  84. package/dist/docx/tables.js.map +1 -0
  85. package/dist/docx/text-spans.d.ts +25 -0
  86. package/dist/docx/text-spans.d.ts.map +1 -0
  87. package/dist/docx/text-spans.js +142 -0
  88. package/dist/docx/text-spans.js.map +1 -0
  89. package/dist/docx/types.d.ts +27 -0
  90. package/dist/docx/types.d.ts.map +1 -0
  91. package/dist/docx/types.js +2 -0
  92. package/dist/docx/types.js.map +1 -0
  93. package/dist/docx/workspace.d.ts +20 -0
  94. package/dist/docx/workspace.d.ts.map +1 -0
  95. package/dist/docx/workspace.js +145 -0
  96. package/dist/docx/workspace.js.map +1 -0
  97. package/dist/docx/xml.d.ts +18 -0
  98. package/dist/docx/xml.d.ts.map +1 -0
  99. package/dist/docx/xml.js +87 -0
  100. package/dist/docx/xml.js.map +1 -0
  101. package/dist/edition-config/index.d.ts +25 -0
  102. package/dist/edition-config/index.d.ts.map +1 -0
  103. package/dist/edition-config/index.js +22 -0
  104. package/dist/edition-config/index.js.map +1 -0
  105. package/dist/edition.d.ts +2 -2
  106. package/dist/edition.d.ts.map +1 -1
  107. package/dist/edition.js +1 -1
  108. package/dist/edition.js.map +1 -1
  109. package/dist/help.d.ts.map +1 -1
  110. package/dist/help.js +124 -32
  111. package/dist/help.js.map +1 -1
  112. package/dist/index.d.ts +1 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +6 -6
  115. package/dist/index.js.map +1 -1
  116. package/dist/key/index.d.ts +2 -0
  117. package/dist/key/index.d.ts.map +1 -0
  118. package/dist/key/index.js +3 -0
  119. package/dist/key/index.js.map +1 -0
  120. package/dist/monitor-daemon.d.ts +21 -8
  121. package/dist/monitor-daemon.d.ts.map +1 -1
  122. package/dist/monitor-daemon.js +189 -51
  123. package/dist/monitor-daemon.js.map +1 -1
  124. package/dist/monitor-registry.d.ts +34 -0
  125. package/dist/monitor-registry.d.ts.map +1 -0
  126. package/dist/monitor-registry.js +191 -0
  127. package/dist/monitor-registry.js.map +1 -0
  128. package/dist/monitor.js +1 -1
  129. package/dist/monitor.js.map +1 -1
  130. package/dist/numbers/index.d.ts +2 -0
  131. package/dist/numbers/index.d.ts.map +1 -0
  132. package/dist/numbers/index.js +3 -0
  133. package/dist/numbers/index.js.map +1 -0
  134. package/dist/opc/index.d.ts +90 -0
  135. package/dist/opc/index.d.ts.map +1 -0
  136. package/dist/opc/index.js +569 -0
  137. package/dist/opc/index.js.map +1 -0
  138. package/dist/pptx/adapter.d.ts +167 -0
  139. package/dist/pptx/adapter.d.ts.map +1 -0
  140. package/dist/pptx/adapter.js +807 -0
  141. package/dist/pptx/adapter.js.map +1 -0
  142. package/dist/pptx/addressing.d.ts +45 -0
  143. package/dist/pptx/addressing.d.ts.map +1 -0
  144. package/dist/pptx/addressing.js +428 -0
  145. package/dist/pptx/addressing.js.map +1 -0
  146. package/dist/pptx/align.d.ts +24 -0
  147. package/dist/pptx/align.d.ts.map +1 -0
  148. package/dist/pptx/align.js +112 -0
  149. package/dist/pptx/align.js.map +1 -0
  150. package/dist/pptx/chart-classify.d.ts +10 -0
  151. package/dist/pptx/chart-classify.d.ts.map +1 -0
  152. package/dist/pptx/chart-classify.js +58 -0
  153. package/dist/pptx/chart-classify.js.map +1 -0
  154. package/dist/pptx/chart.d.ts +42 -0
  155. package/dist/pptx/chart.d.ts.map +1 -0
  156. package/dist/pptx/chart.js +614 -0
  157. package/dist/pptx/chart.js.map +1 -0
  158. package/dist/pptx/edition-extension.d.ts +25 -0
  159. package/dist/pptx/edition-extension.d.ts.map +1 -0
  160. package/dist/pptx/edition-extension.js +10 -0
  161. package/dist/pptx/edition-extension.js.map +1 -0
  162. package/dist/pptx/edition.d.ts +20 -0
  163. package/dist/pptx/edition.d.ts.map +1 -0
  164. package/dist/pptx/edition.js +69 -0
  165. package/dist/pptx/edition.js.map +1 -0
  166. package/dist/pptx/elements.d.ts +12 -0
  167. package/dist/pptx/elements.d.ts.map +1 -0
  168. package/dist/pptx/elements.js +224 -0
  169. package/dist/pptx/elements.js.map +1 -0
  170. package/dist/pptx/hyperlink.d.ts +7 -0
  171. package/dist/pptx/hyperlink.d.ts.map +1 -0
  172. package/dist/pptx/hyperlink.js +81 -0
  173. package/dist/pptx/hyperlink.js.map +1 -0
  174. package/dist/pptx/index-sync.d.ts +7 -0
  175. package/dist/pptx/index-sync.d.ts.map +1 -0
  176. package/dist/pptx/index-sync.js +24 -0
  177. package/dist/pptx/index-sync.js.map +1 -0
  178. package/dist/pptx/index.d.ts +10 -0
  179. package/dist/pptx/index.d.ts.map +1 -0
  180. package/dist/pptx/index.js +7 -0
  181. package/dist/pptx/index.js.map +1 -0
  182. package/dist/pptx/indexer.d.ts +19 -0
  183. package/dist/pptx/indexer.d.ts.map +1 -0
  184. package/dist/pptx/indexer.js +319 -0
  185. package/dist/pptx/indexer.js.map +1 -0
  186. package/dist/pptx/layout-ref.d.ts +41 -0
  187. package/dist/pptx/layout-ref.d.ts.map +1 -0
  188. package/dist/pptx/layout-ref.js +145 -0
  189. package/dist/pptx/layout-ref.js.map +1 -0
  190. package/dist/pptx/media.d.ts +15 -0
  191. package/dist/pptx/media.d.ts.map +1 -0
  192. package/dist/pptx/media.js +145 -0
  193. package/dist/pptx/media.js.map +1 -0
  194. package/dist/pptx/mutations.d.ts +11 -0
  195. package/dist/pptx/mutations.d.ts.map +1 -0
  196. package/dist/pptx/mutations.js +1111 -0
  197. package/dist/pptx/mutations.js.map +1 -0
  198. package/dist/pptx/picture.d.ts +25 -0
  199. package/dist/pptx/picture.d.ts.map +1 -0
  200. package/dist/pptx/picture.js +118 -0
  201. package/dist/pptx/picture.js.map +1 -0
  202. package/dist/pptx/placeholder-role.d.ts +19 -0
  203. package/dist/pptx/placeholder-role.d.ts.map +1 -0
  204. package/dist/pptx/placeholder-role.js +71 -0
  205. package/dist/pptx/placeholder-role.js.map +1 -0
  206. package/dist/pptx/properties.d.ts +13 -0
  207. package/dist/pptx/properties.d.ts.map +1 -0
  208. package/dist/pptx/properties.js +587 -0
  209. package/dist/pptx/properties.js.map +1 -0
  210. package/dist/pptx/resolve-properties.d.ts +17 -0
  211. package/dist/pptx/resolve-properties.d.ts.map +1 -0
  212. package/dist/pptx/resolve-properties.js +571 -0
  213. package/dist/pptx/resolve-properties.js.map +1 -0
  214. package/dist/pptx/slide-size.d.ts +9 -0
  215. package/dist/pptx/slide-size.d.ts.map +1 -0
  216. package/dist/pptx/slide-size.js +29 -0
  217. package/dist/pptx/slide-size.js.map +1 -0
  218. package/dist/pptx/slides.d.ts +15 -0
  219. package/dist/pptx/slides.d.ts.map +1 -0
  220. package/dist/pptx/slides.js +236 -0
  221. package/dist/pptx/slides.js.map +1 -0
  222. package/dist/pptx/table-measure.d.ts +43 -0
  223. package/dist/pptx/table-measure.d.ts.map +1 -0
  224. package/dist/pptx/table-measure.js +70 -0
  225. package/dist/pptx/table-measure.js.map +1 -0
  226. package/dist/pptx/table.d.ts +23 -0
  227. package/dist/pptx/table.d.ts.map +1 -0
  228. package/dist/pptx/table.js +529 -0
  229. package/dist/pptx/table.js.map +1 -0
  230. package/dist/pptx/types.d.ts +27 -0
  231. package/dist/pptx/types.d.ts.map +1 -0
  232. package/dist/pptx/types.js +2 -0
  233. package/dist/pptx/types.js.map +1 -0
  234. package/dist/pptx/workspace.d.ts +23 -0
  235. package/dist/pptx/workspace.d.ts.map +1 -0
  236. package/dist/pptx/workspace.js +148 -0
  237. package/dist/pptx/workspace.js.map +1 -0
  238. package/dist/pptx/xml.d.ts +67 -0
  239. package/dist/pptx/xml.d.ts.map +1 -0
  240. package/dist/pptx/xml.js +355 -0
  241. package/dist/pptx/xml.js.map +1 -0
  242. package/dist/render.d.ts.map +1 -1
  243. package/dist/render.js +14 -2
  244. package/dist/render.js.map +1 -1
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.js +1 -1
  247. package/dist/workspace/git.d.ts +7 -0
  248. package/dist/workspace/git.d.ts.map +1 -0
  249. package/dist/workspace/git.js +82 -0
  250. package/dist/workspace/git.js.map +1 -0
  251. package/dist/workspace/index.d.ts +7 -0
  252. package/dist/workspace/index.d.ts.map +1 -0
  253. package/dist/workspace/index.js +7 -0
  254. package/dist/workspace/index.js.map +1 -0
  255. package/dist/workspace/lock.d.ts +3 -0
  256. package/dist/workspace/lock.d.ts.map +1 -0
  257. package/dist/workspace/lock.js +35 -0
  258. package/dist/workspace/lock.js.map +1 -0
  259. package/dist/workspace/metadata.d.ts +4 -0
  260. package/dist/workspace/metadata.d.ts.map +1 -0
  261. package/dist/workspace/metadata.js +21 -0
  262. package/dist/workspace/metadata.js.map +1 -0
  263. package/dist/workspace/operations.d.ts +14 -0
  264. package/dist/workspace/operations.d.ts.map +1 -0
  265. package/dist/workspace/operations.js +35 -0
  266. package/dist/workspace/operations.js.map +1 -0
  267. package/dist/workspace/paths.d.ts +11 -0
  268. package/dist/workspace/paths.d.ts.map +1 -0
  269. package/dist/workspace/paths.js +12 -0
  270. package/dist/workspace/paths.js.map +1 -0
  271. package/dist/workspace/revision.d.ts +6 -0
  272. package/dist/workspace/revision.d.ts.map +1 -0
  273. package/dist/workspace/revision.js +15 -0
  274. package/dist/workspace/revision.js.map +1 -0
  275. package/dist/xlsx/index.d.ts +2 -0
  276. package/dist/xlsx/index.d.ts.map +1 -0
  277. package/dist/xlsx/index.js +3 -0
  278. package/dist/xlsx/index.js.map +1 -0
  279. package/package.json +48 -27
  280. package/schema/command.schema.json +2399 -0
  281. package/dist/.tsbuildinfo +0 -1
@@ -0,0 +1,367 @@
1
+ <div align="center">
2
+
3
+ # Deckuse
4
+
5
+ [![Node.js 18+](https://img.shields.io/badge/Node.js-18%2B-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
6
+ [![pnpm 10](https://img.shields.io/badge/pnpm-10-F69220?logo=pnpm&logoColor=white)](https://pnpm.io/)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
8
+ [![PPTX](https://img.shields.io/badge/Format-PPTX-B7472A?logo=microsoftpowerpoint&logoColor=white)](#pptx-capabilities)
9
+
10
+ [English](README.md) · [简体中文](README.zh-CN.md) · [Français](README.fr.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Русский](README.ru.md) · [Español](README.es.md) · [Português](README.pt-BR.md)
11
+
12
+ </div>
13
+
14
+ Deckuse 是一款面向编程智能体的本地优先、模式驱动的 Office 文档自动化引擎。它将文档打开为带版本的工作区,让智能体用语义地址(如 `slide:1/shape:2`)检查并精确定位结构,执行显式变更、验证结果,再导出新文档。
15
+
16
+ 本仓库为**社区版**(`edition=community`),说明见 [docs/edition.md](docs/edition.md)。共享源码以此仓为唯一源,发布为 `@deckflow/deckuse`;商业版是私有薄覆盖层仓库 `deckuse-commercial`(注册 `PptxEditionExtension`,并可增加专有包)。
17
+
18
+ 目前已实现 PPTX 与 DOCX(**协议 2.0**)。XLSX、Keynote 和 Numbers 适配器会明确返回 `FORMAT_NOT_IMPLEMENTED`;它们尚不是受支持的编辑目标。Word 与 PPTX 共用工作区循环(`new --format docx`、`init`、`apply`、`validate`、`export`),寻址用 `body/p:N`、`bookmark:名称`、`para:<paraId>`,而不是幻灯片形状。`render --page` 仍只支持 PPTX。完整说明见 [README.md](README.md) 的 DOCX capabilities。
19
+
20
+ ## Agent Skill(请优先安装)
21
+
22
+ Deckuse 面向编程智能体。**使用 CLI 前,请先安装 Deckuse skill**——其中固化了 workspace 优先、批量 `apply`、语义寻址、单位制与常用配方;仅靠 README 很容易用错。
23
+
24
+ - Skill 文件:[`skills/deckuse/SKILL.md`](skills/deckuse/SKILL.md)
25
+ - Cursor(项目级):复制或软链到 `.cursor/skills/deckuse/`
26
+ - Cursor(个人级):复制或软链到 `~/.cursor/skills/deckuse/`
27
+
28
+ 需要 **CLI `deckuse >= 1.2.0`**。速查:[docs/agent-cookbook.md](docs/agent-cookbook.md)。
29
+
30
+ ## 为何选择 Deckuse
31
+
32
+ Deckuse 可在不从零重建演示文稿的情况下修改现有 PPT。若没有源文件,可用 `deckuse new` 基于内置空白模板创建工作区。其工作流刻意以结构为中心,而非视觉为中心:
33
+
34
+ ```text
35
+ existing.pptx → init ─┐
36
+ ├→ list / get → set / add → validate → export
37
+ blank template → new ─┘
38
+ ```
39
+
40
+ 每次成功的写操作会自动提交 Git 版本、更新 `operations.jsonl`、重建 `package.pptx`,并刷新 `.deckuse/index.json`。可使用 `undo` 撤销、`history` 查看操作历史。
41
+
42
+ Deckuse 会尽可能保留未修改的 XML 和未知的包部件。它不是完整的 PowerPoint 渲染或版式引擎,无法可靠判断幻灯片是否美观或版式是否正确。可用 `monitor` 做实时 HTML 预览,用 `render` 将单页截成 PNG 供智能体视觉复查。语义 `diff` / `branch` 仍在 Phase 1a 之后交付。
43
+
44
+ ## 安装
45
+
46
+ 要求:Node.js 18 或更高版本。
47
+
48
+ ```sh
49
+ npm install -g @deckflow/deckuse
50
+ ```
51
+
52
+ 该命令会全局安装 `deckuse` CLI。
53
+
54
+ ```sh
55
+ # 从演示文稿创建持久工作空间(revision 从 1 开始)。
56
+ deckuse init input.pptx ./workspace --json
57
+
58
+ # 或从内置空白 16:9 模板起步(无需 input.pptx)。
59
+ deckuse new ./workspace --json
60
+
61
+ # 清单与带 provenance 的实时属性读取。
62
+ deckuse status --workspace ./workspace --json
63
+ deckuse list slides --workspace ./workspace --json
64
+ deckuse list shapes --workspace ./workspace --slide 1 --json
65
+ deckuse get slide:1/shape:2 --workspace ./workspace --resolve both --json
66
+
67
+ # 语义目标写入(一次写 = 一次 revision)。
68
+ deckuse set text slide:1/shape:2 --workspace ./workspace --value 'Hello' --json
69
+ deckuse set slide:1/shape:2 --workspace ./workspace --font.size 42 --fill.color '#0A2930' --json
70
+ deckuse add shape --workspace ./workspace --slide 1 --type text --name Title --x 0 --y 0 --width 914400 --height 457200 --json
71
+
72
+ # 验证、历史、撤销、导出。
73
+ deckuse validate --workspace ./workspace --json
74
+ deckuse history --workspace ./workspace --json
75
+ deckuse undo --workspace ./workspace --steps 1 --json
76
+ deckuse export ./out.pptx --workspace ./workspace --json
77
+
78
+ # 实时 HTML 预览;浏览器订阅后才开始转换。
79
+ deckuse monitor --workspace ./workspace --port 4173
80
+
81
+ # 将单页截成 PNG 供视觉复查(需要 Chrome / Chromium / Edge)。
82
+ deckuse render --page 1 --workspace ./workspace --json
83
+ ```
84
+
85
+ 全局选项包括 `--workspace`、`--json`、`--dry-run`、`--expect-revision`、`--reason`。完整 CLI 契约见 `deckuse --help` 或 `deckuse <command> --help`。
86
+
87
+ 工作区布局:
88
+
89
+ ```text
90
+ workspace/
91
+ source/ # 解压后的 OPC 包,写操作直接修改此处
92
+ package.pptx # 由 source 即时打包的 Office 快照(不在 Git 中)
93
+ .deckuse/ # manifest、index、operations.jsonl、被忽略的监控输出
94
+ .git/ # 工作区版本历史
95
+ .gitignore # 忽略 package.* 等生成文件
96
+ ```
97
+
98
+ ## CLI 工作流
99
+
100
+ `apply` 可接受 transaction 文件(`{ "operations": [...] }`)、单个 JSON mutation、JSON 数组或 JSONL。一次调用可应用多条写命令;多条命令作为一次原子 batch 执行。使用 `--input -`(默认)从标准输入读取。仍支持旧版 ElementRef mutation。无子命令时,CLI 从标准输入读取一条完整的协议 `2.0` JSON 命令。
101
+
102
+ 命令结果使用 JSON envelope(`ok`、`command`、`revision`、`data` / `error`)。退出状态 `0` 表示成功,`1` 表示命令失败,`2` 表示 CLI 用法或解析失败。
103
+
104
+ ### 选择器
105
+
106
+ Phase 1a 优先使用 `search text` / `search shape` 与 `list`。`query` 仍可用作兼容入口,接受选择器字符串或命令中的结构化选择器。空格分隔的条件以 AND 组合。
107
+
108
+ | 语法 | 含义 |
109
+ | -------------------------------------- | ----------------------------------- |
110
+ | `*` 或 `all` | 匹配所有已索引元素。 |
111
+ | `kind=textbox` | 按不区分大小写的子串匹配元素 kind。 |
112
+ | `text=Quarter` | 匹配包含字面量的文本。 |
113
+ | `text~=pattern` | 用 Unicode 正则匹配文本。 |
114
+ | `hasText=true` | 匹配含文本的元素。 |
115
+ | `slide=256`、`id=256:10`、`name=Title` | 按幻灯片 ID、元素 ID 或名称过滤。 |
116
+
117
+ 查询结果提供稳定的元素引用。引用包含文档 ID 以及元素 ID 或结构路径;数组下标不是稳定标识符。
118
+
119
+ ## 通用智能体工作流
120
+
121
+ 这些示例仅使用当前 PPTX 功能。它们描述了智能体如何从 Deckuse 基元组合出工作流,而非声称 Deckuse 可独立进行推理、文案撰写或视觉审查。
122
+
123
+ ### 1. 跨整个演示文稿更新过期年份
124
+
125
+ **Request:**“将每处 `FY2025` 引用改为 `FY2026`,不要改动其他内容。”
126
+
127
+ 先使用 `query` 审查受影响的元素,然后执行字面量 `replaceText`,并在导出前验证。
128
+
129
+ ```sh
130
+ deckuse init master.pptx ./year-update --json
131
+ deckuse query ./year-update 'text=FY2025' --limit 1000 --json
132
+ cat > year-update.json <<'EOF'
133
+ {
134
+ "type": "replaceText",
135
+ "find": "FY2025",
136
+ "replace": "FY2026"
137
+ }
138
+ EOF
139
+ deckuse apply ./year-update --input year-update.json --json
140
+ deckuse validate ./year-update --json
141
+ ```
142
+
143
+ 写操作完成后,`./year-update/package.pptx` 会自动更新为最新快照。
144
+
145
+ 审查查询将变更限定在已知出现位置;`replaceText` 执行经批准的批量修改,同时保持无关对象不变。无 selector 时,它会更新最具体的索引文本节点,而不是聚合了子节点文本的祖先容器。
146
+
147
+ ### 2. 重命名公司或产品
148
+
149
+ **Request:**“将旧产品名称在所有位置替换为新产品名称。”
150
+
151
+ 这沿用同一套安全的“审查后替换”模式。先搜索准确的旧名称,再用字面量值执行 `replaceText`。对于标点或空格等变体,只有在检查查询输出后才使用正则表达式替换。
152
+
153
+ ```json
154
+ {
155
+ "type": "replaceText",
156
+ "find": "Legacy Platform",
157
+ "replace": "Unified Platform"
158
+ }
159
+ ```
160
+
161
+ 若要进一步收窄变更范围,请在命令中加入选择器,例如 `"selector": "slide=256"`,使其仅对一张幻灯片生效。
162
+
163
+ ### 3. 为智能体提取演示文稿大纲
164
+
165
+ **Request:**“列出各页幻灯片标题并总结此演示文稿涵盖的内容。”
166
+
167
+ 运行 `inspect` 获取已索引的演示文稿结构,然后查询含有文本的对象。调用方智能体可按幻灯片 ID 对返回对象分组,根据其名称、位置或文本识别标题类对象,并基于提取出的文本生成摘要。
168
+
169
+ ```sh
170
+ deckuse init briefing.pptx ./outline --json
171
+ deckuse inspect ./outline --depth 2 --json
172
+ deckuse query ./outline 'hasText=true' --limit 10000 --json
173
+ ```
174
+
175
+ Deckuse 提供结构化源数据。由智能体而非 Deckuse 决定哪些文本是标题,并撰写摘要。
176
+
177
+ ### 4. 执行交付前内容 QA
178
+
179
+ **Request:**“在发送此演示文稿前,找出旧客户名称、日期、产品名称、URL 和必需的免责声明文本。”
180
+
181
+ 查询每项已知风险并检查返回的引用。缺失检查的工作方式相同:查询所需文本,并标记空结果。智能体可以在不修改演示文稿的前提下生成 QA 报告,也可以为经批准的修复准备精确定位的 `setText` / `replaceText` 命令。
182
+
183
+ ```sh
184
+ deckuse query ./workspace 'text=Customer A' --limit 1000 --json
185
+ deckuse query ./workspace 'text~=https?://' --limit 1000 --json
186
+ deckuse query ./workspace 'text=Required disclaimer' --limit 1000 --json
187
+ ```
188
+
189
+ 这是内容和结构 QA,不是视觉 QA。`render` / `monitor` 仅作人或智能体复查辅助;Deckuse 不会检测重叠,也不会评判版式质量。
190
+
191
+ ### 5. 仅修改一张幻灯片上的一个项目
192
+
193
+ **Request:**“在第 7 张幻灯片上,将标题改为 `Enterprise Strategy`;不要改动其他内容。”
194
+
195
+ 先查询该幻灯片及标题文本,然后取返回的 `ref` 发送 `setText` 命令。`ref` 可避免含义不明确的全局替换。
196
+
197
+ ```json
198
+ {
199
+ "type": "setText",
200
+ "ref": {
201
+ "documentId": "./workspace",
202
+ "elementId": "256:10"
203
+ },
204
+ "text": "Enterprise Strategy"
205
+ }
206
+ ```
207
+
208
+ 元素 ID 是特定于演示文稿的示例。务必使用当前工作区返回的 ID,而不要复制此值。
209
+
210
+ ### 6. 统一标题排版
211
+
212
+ **Request:**“将每个经批准的标题设为 28 pt,并使用已批准的字体。”
213
+
214
+ 使用查询识别标题对象,让智能体审查或筛选返回的引用,然后对每个已批准的引用分别应用一次 `setProperties`。`setProperties` 一次只针对一个引用;它本身不接受选择器。
215
+
216
+ ```json
217
+ {
218
+ "type": "setProperties",
219
+ "ref": {
220
+ "documentId": "./workspace",
221
+ "elementId": "256:8"
222
+ },
223
+ "properties": {
224
+ "fontSize": 28,
225
+ "fontFamily": "Approved Sans",
226
+ "bold": true
227
+ }
228
+ }
229
+ ```
230
+
231
+ 同一命令还可设置 `fill`、`stroke`(也可写作 `border`、`outline` 或 `line`)、`textColor`、`italic`、`underline`、`name` 和 `hidden`。未知属性键会以 `INVALID_COMMAND` 失败。
232
+
233
+ ### 7. 精确调整对象几何属性
234
+
235
+ **Request:**“将每个经批准的标题稍微向下移动。”
236
+
237
+ 查询并选择目标标题引用,检查它们当前的几何属性,然后为每个对象发出一条带有明确坐标的 `setTransform` 命令。这是结构化的几何操作;未经视觉验证,不应将其表述为自动版式修复。
238
+
239
+ ```json
240
+ {
241
+ "type": "setTransform",
242
+ "ref": {
243
+ "documentId": "./workspace",
244
+ "elementId": "256:8"
245
+ },
246
+ "transform": {
247
+ "x": 914400,
248
+ "y": 731520,
249
+ "width": 8229600,
250
+ "height": 685800
251
+ }
252
+ }
253
+ ```
254
+
255
+ 变换坐标使用 OOXML EMU。若仅更改其垂直位置,请保留检查所得对象的 `x`、`width` 和 `height`。
256
+
257
+ ### 8. 将已批准的销售演示文稿个性化
258
+
259
+ **Request:**“为潜在客户创建一个版本。更新客户名称和已批准的特定客户文案,但保留设计。”
260
+
261
+ 从已批准的母版为每份输出创建独立工作区。查询占位符或现有客户文本,仅应用经审查的替换,验证后使用自动更新的 `package.pptx`。
262
+
263
+ ```sh
264
+ deckuse init approved-master.pptx ./customer-a --json
265
+ deckuse query ./customer-a 'text=Customer Name' --json
266
+ # 仅应用针对此客户的经审查替换。
267
+ deckuse apply ./customer-a --input customer-a.jsonl --json
268
+ deckuse validate ./customer-a --json
269
+ ```
270
+
271
+ 独立工作区可防止某一客户的编辑泄漏到另一份输出中。仅替换审批流程允许智能体修改的对象。
272
+
273
+ ### 9. 从同一母版生成区域或受众变体
274
+
275
+ **Request:**“从已批准的演示文稿生成区域版和企业版变体。”
276
+
277
+ 从同一母版为每个变体初始化新的工作区。每个变体都有自己的命令文件和输出路径。优先使用 `apply` 配合 JSON 数组、JSONL 或 `{ "operations": [...] }`:一次调用中的多条写命令作为一次原子 batch 执行(任一失败则全部不落盘)。协议层的 `batch` 命令形式仍然支持。
278
+
279
+ ```json
280
+ [
281
+ {
282
+ "type": "replaceText",
283
+ "find": "Default Message",
284
+ "replace": "Regional Message"
285
+ },
286
+ {
287
+ "type": "replaceText",
288
+ "find": "Default Offer",
289
+ "replace": "Enterprise Offer"
290
+ }
291
+ ]
292
+ ```
293
+
294
+ ```sh
295
+ deckuse apply ./regional --input regional.json --json
296
+ ```
297
+
298
+ 这既保留了一份已批准的源演示文稿,也使每个变体都能从显式变更集复现。
299
+
300
+ ### 10. 让编程智能体操作现有演示文稿
301
+
302
+ **Request:**“检查此演示文稿,识别所需编辑,完成编辑并导出修订后的 PPTX。”
303
+
304
+ 向智能体提供以下循环:初始化工作区;在每次针对性变更前执行检查或查询;生成显式 JSON 命令;应用命令;验证包;使用自动重建的 `package.pptx` 作为导出结果。当可审计性很重要时,将命令文件和命令结果与任务一同保存。
305
+
306
+ Deckuse 为智能体提供稳定引用、选择器、事务、验证和确定性的导出路径。智能体负责理解任务,并决定哪些操作适用。
307
+
308
+ ### `setProperties` 示例
309
+
310
+ ```json
311
+ {
312
+ "type": "setProperties",
313
+ "ref": { "documentId": "./workspace", "elementId": "256:8" },
314
+ "properties": {
315
+ "stroke": { "color": "0000FF", "width": 1.5 },
316
+ "fill": "none",
317
+ "textColor": "111111",
318
+ "fontSize": 18,
319
+ "fontFamily": "Approved Sans",
320
+ "bold": true
321
+ }
322
+ }
323
+ ```
324
+
325
+ `stroke` 与 `fill` 可接受十六进制颜色字符串。使用 `none`、`false` 或 `null` 表示无描边/无填充。`stroke.width` 单位为磅,默认 `1`。
326
+
327
+ ## PPTX 功能
328
+
329
+ - 持久工作区、修订冲突检测、dry-run、原子 batch 与操作日志。
330
+ - `inspect`、`list`、`get`、`search`,以及兼容用的 `query` / `getText`;稳定引用在可用时包含幻灯片 ID、部件 URI、cNvPr ID 与祖先路径。
331
+ - `setText` 与 `replaceText`,包括可选 selector 范围内的字面量或正则替换。无 selector 时,`replaceText` 优先更新最具体的文本节点,而非聚合了子节点文本的祖先容器。`setText` 中的换行会拆成多个段落。CLI `--value` 会解析 `\n`/`\t`(可用 `--text-raw` 关闭);多行多样式可用 `--blocks` / 协议 `blocks`(块内可选 `runs[]` 做段内多 run)。`addShape` 支持一次写入内联 `blocks` / `fill` / `stroke`。
332
+ - 几何支持 **EMU 数字或单位字符串**(`px`@96DPI、`pt`、`cm`、`mm`、`in`、相对幻灯片的 `%`)。`alignElements` / `deckuse align` 将对齐结果写回绝对 EMU。同一次 `apply` 内可按形状 `name` 前向引用刚 `addShape` 的对象。
333
+ - `setTransform` 用于显式设置对象位置、尺寸、旋转与翻转。
334
+ - `setProperties` 用于常见形状与文本属性,包括 `paragraph.align`(可用 `center`/`left` 等别名)、`paragraph.level`、`bullet`、填充透明度、`hyperlink`、`wrap`、`anchor`/`valign`、`cornerRadius`。
335
+ - 可添加、复制、删除幻灯片,以及将已有页切换到另一版式(`setSlideLayout` / `deckuse set slide-layout`);layout 引用支持序号、`layout:N`、`slide:N`、显示名或 basename。切换只改 slide→layout 关系,不编辑 layout 部件本身。复制幻灯片时会克隆可变的备注与图表部件,版式与媒体可安全共享。
336
+ - 可添加形状/文本框(可选 `role` 写出 `p:ph` 占位符)、直线连接线(`line`/`connector`)、折线/曲线连接线、箭头预设、组合、图片(文件路径或 base64)、表格、图表(仅缓存)以及嵌入的视频/音频;可复制或删除元素。
337
+ - `role` 须为 OOXML 占位符类型(`title`、`body`、`subTitle`、`ctrTitle` 等)。常见别名会规范化(如 `subtitle`→`subTitle`);非 OOXML 标签(如 `card`)会被拒绝,以免 PowerPoint 提示修复。
338
+ - 可用 `slide:N/placeholder:<type>` 寻址占位符;可用 `slide:N/shape:X/run:K` 对单个 run 做 `setProperties`。
339
+ - `replacePicture` 就地替换图片嵌入媒体,并保留元素引用与图层顺序。
340
+ - 表格单元格寻址;表格行列增删与单元格 `fill`;演讲者备注读写(对 `slide:N/notes` 写入时若无备注页会自动创建)。表格支持 `height: "auto"`、主题 `minimal`/`zebra` 与 `alignColumns`。
341
+ - 可创建图表(`bar` / `column` / `line` / `pie` / 受限 `combo` 双轴)并编辑标题、系列名、缓存值、数据标签、系列颜色与数值格式。存在嵌入工作簿时返回 `EMBEDDED_WORKBOOK_NOT_SYNCHRONIZED`,不会声称已更新工作簿。社区版对高级图表(其它 family、ChartEx)仅保留、不可编辑。社区版 `render` **可能无法忠实显示**自定义系列色——请核对 chart XML 或用 PowerPoint 打开。
342
+ - 可 list / resolve master、layout、theme;社区版拒绝写入这些部件(`UNSUPPORTED_CAPABILITY`)。Master/Layout 编辑见商业版仓库。
343
+ - `monitor` 提供实时 HTML 预览(`monitor start|status|stop`;可用 `--port 0` 自动选端口),`render` 可将单页截成 PNG(支持 `--scale`)。`deckuse schema` 输出命令 JSON Schema;`deckuse measure` 启发式估算文本尺寸。
344
+ - 尽可能保留未知部件与未改动节点。ZIP 会重新压缩,保真度针对未改动条目的未压缩数据,而非 ZIP 字节级一致。
345
+
346
+ Agent 速查:[docs/agent-cookbook.md](docs/agent-cookbook.md)。需要 **CLI >= 1.2.0**。
347
+
348
+ ## 限制
349
+
350
+ - Deckuse 未实现完整的 PowerPoint DrawingML、动画编辑、SmartArt 编辑、OLE 编辑或宏编辑。
351
+ - 它不是完整的 PowerPoint 渲染或版式引擎。`monitor` 与 `render` 仅提供 HTML/PNG 复查辅助;不要依赖它们评判视觉质量、检测重叠或自动改善版式。
352
+ - 图表创建与编辑仅更新 OOXML 图表缓存;不会重写嵌入的 Excel 工作簿。
353
+ - 嵌入的视频/音频使用生成的海报帧;播放时序与高级媒体选项不可编辑。
354
+ - 复制幻灯片会克隆备注与图表部件,并复用版式、主题与媒体。复杂自定义 XML 扩展会保留,但不做语义编辑。
355
+ - `setText` 与 `replaceText` 会将每个段落内的多 run 文本折叠为单个 run,并保留首个 run 的样式;`setText` 中的换行会创建新段落。
356
+
357
+ ## 开发检查
358
+
359
+ ```sh
360
+ pnpm format:check
361
+ pnpm lint
362
+ pnpm typecheck
363
+ pnpm test
364
+ pnpm build
365
+ ```
366
+
367
+ 完整英文文档与命令措辞见 [README.md](README.md)。
Binary file
Binary file