@deckflow/deckuse 1.2.1 → 1.3.1

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 (282) 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 +60 -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 +188 -21
  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 +3065 -0
  38. package/dist/core/schema.d.ts.map +1 -0
  39. package/dist/core/schema.js +799 -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.d.ts.map +1 -1
  129. package/dist/monitor.js +2 -12
  130. package/dist/monitor.js.map +1 -1
  131. package/dist/numbers/index.d.ts +2 -0
  132. package/dist/numbers/index.d.ts.map +1 -0
  133. package/dist/numbers/index.js +3 -0
  134. package/dist/numbers/index.js.map +1 -0
  135. package/dist/opc/index.d.ts +96 -0
  136. package/dist/opc/index.d.ts.map +1 -0
  137. package/dist/opc/index.js +596 -0
  138. package/dist/opc/index.js.map +1 -0
  139. package/dist/pptx/adapter.d.ts +167 -0
  140. package/dist/pptx/adapter.d.ts.map +1 -0
  141. package/dist/pptx/adapter.js +841 -0
  142. package/dist/pptx/adapter.js.map +1 -0
  143. package/dist/pptx/addressing.d.ts +47 -0
  144. package/dist/pptx/addressing.d.ts.map +1 -0
  145. package/dist/pptx/addressing.js +481 -0
  146. package/dist/pptx/addressing.js.map +1 -0
  147. package/dist/pptx/align.d.ts +24 -0
  148. package/dist/pptx/align.d.ts.map +1 -0
  149. package/dist/pptx/align.js +112 -0
  150. package/dist/pptx/align.js.map +1 -0
  151. package/dist/pptx/chart-classify.d.ts +10 -0
  152. package/dist/pptx/chart-classify.d.ts.map +1 -0
  153. package/dist/pptx/chart-classify.js +58 -0
  154. package/dist/pptx/chart-classify.js.map +1 -0
  155. package/dist/pptx/chart.d.ts +42 -0
  156. package/dist/pptx/chart.d.ts.map +1 -0
  157. package/dist/pptx/chart.js +614 -0
  158. package/dist/pptx/chart.js.map +1 -0
  159. package/dist/pptx/edition-extension.d.ts +25 -0
  160. package/dist/pptx/edition-extension.d.ts.map +1 -0
  161. package/dist/pptx/edition-extension.js +10 -0
  162. package/dist/pptx/edition-extension.js.map +1 -0
  163. package/dist/pptx/edition.d.ts +20 -0
  164. package/dist/pptx/edition.d.ts.map +1 -0
  165. package/dist/pptx/edition.js +69 -0
  166. package/dist/pptx/edition.js.map +1 -0
  167. package/dist/pptx/elements.d.ts +12 -0
  168. package/dist/pptx/elements.d.ts.map +1 -0
  169. package/dist/pptx/elements.js +224 -0
  170. package/dist/pptx/elements.js.map +1 -0
  171. package/dist/pptx/hyperlink.d.ts +7 -0
  172. package/dist/pptx/hyperlink.d.ts.map +1 -0
  173. package/dist/pptx/hyperlink.js +81 -0
  174. package/dist/pptx/hyperlink.js.map +1 -0
  175. package/dist/pptx/index-sync.d.ts +7 -0
  176. package/dist/pptx/index-sync.d.ts.map +1 -0
  177. package/dist/pptx/index-sync.js +24 -0
  178. package/dist/pptx/index-sync.js.map +1 -0
  179. package/dist/pptx/index.d.ts +10 -0
  180. package/dist/pptx/index.d.ts.map +1 -0
  181. package/dist/pptx/index.js +7 -0
  182. package/dist/pptx/index.js.map +1 -0
  183. package/dist/pptx/indexer.d.ts +19 -0
  184. package/dist/pptx/indexer.d.ts.map +1 -0
  185. package/dist/pptx/indexer.js +320 -0
  186. package/dist/pptx/indexer.js.map +1 -0
  187. package/dist/pptx/layout-ref.d.ts +41 -0
  188. package/dist/pptx/layout-ref.d.ts.map +1 -0
  189. package/dist/pptx/layout-ref.js +145 -0
  190. package/dist/pptx/layout-ref.js.map +1 -0
  191. package/dist/pptx/media.d.ts +15 -0
  192. package/dist/pptx/media.d.ts.map +1 -0
  193. package/dist/pptx/media.js +145 -0
  194. package/dist/pptx/media.js.map +1 -0
  195. package/dist/pptx/mutations.d.ts +11 -0
  196. package/dist/pptx/mutations.d.ts.map +1 -0
  197. package/dist/pptx/mutations.js +1114 -0
  198. package/dist/pptx/mutations.js.map +1 -0
  199. package/dist/pptx/picture.d.ts +25 -0
  200. package/dist/pptx/picture.d.ts.map +1 -0
  201. package/dist/pptx/picture.js +118 -0
  202. package/dist/pptx/picture.js.map +1 -0
  203. package/dist/pptx/placeholder-role.d.ts +19 -0
  204. package/dist/pptx/placeholder-role.d.ts.map +1 -0
  205. package/dist/pptx/placeholder-role.js +71 -0
  206. package/dist/pptx/placeholder-role.js.map +1 -0
  207. package/dist/pptx/properties.d.ts +13 -0
  208. package/dist/pptx/properties.d.ts.map +1 -0
  209. package/dist/pptx/properties.js +587 -0
  210. package/dist/pptx/properties.js.map +1 -0
  211. package/dist/pptx/resolve-properties.d.ts +17 -0
  212. package/dist/pptx/resolve-properties.d.ts.map +1 -0
  213. package/dist/pptx/resolve-properties.js +623 -0
  214. package/dist/pptx/resolve-properties.js.map +1 -0
  215. package/dist/pptx/slide-size.d.ts +9 -0
  216. package/dist/pptx/slide-size.d.ts.map +1 -0
  217. package/dist/pptx/slide-size.js +29 -0
  218. package/dist/pptx/slide-size.js.map +1 -0
  219. package/dist/pptx/slides.d.ts +15 -0
  220. package/dist/pptx/slides.d.ts.map +1 -0
  221. package/dist/pptx/slides.js +247 -0
  222. package/dist/pptx/slides.js.map +1 -0
  223. package/dist/pptx/table-measure.d.ts +43 -0
  224. package/dist/pptx/table-measure.d.ts.map +1 -0
  225. package/dist/pptx/table-measure.js +70 -0
  226. package/dist/pptx/table-measure.js.map +1 -0
  227. package/dist/pptx/table.d.ts +26 -0
  228. package/dist/pptx/table.d.ts.map +1 -0
  229. package/dist/pptx/table.js +638 -0
  230. package/dist/pptx/table.js.map +1 -0
  231. package/dist/pptx/types.d.ts +27 -0
  232. package/dist/pptx/types.d.ts.map +1 -0
  233. package/dist/pptx/types.js +2 -0
  234. package/dist/pptx/types.js.map +1 -0
  235. package/dist/pptx/workspace.d.ts +23 -0
  236. package/dist/pptx/workspace.d.ts.map +1 -0
  237. package/dist/pptx/workspace.js +148 -0
  238. package/dist/pptx/workspace.js.map +1 -0
  239. package/dist/pptx/xml.d.ts +75 -0
  240. package/dist/pptx/xml.d.ts.map +1 -0
  241. package/dist/pptx/xml.js +390 -0
  242. package/dist/pptx/xml.js.map +1 -0
  243. package/dist/render.d.ts.map +1 -1
  244. package/dist/render.js +14 -2
  245. package/dist/render.js.map +1 -1
  246. package/dist/version.d.ts +1 -1
  247. package/dist/version.js +1 -1
  248. package/dist/workspace/git.d.ts +7 -0
  249. package/dist/workspace/git.d.ts.map +1 -0
  250. package/dist/workspace/git.js +119 -0
  251. package/dist/workspace/git.js.map +1 -0
  252. package/dist/workspace/index.d.ts +7 -0
  253. package/dist/workspace/index.d.ts.map +1 -0
  254. package/dist/workspace/index.js +7 -0
  255. package/dist/workspace/index.js.map +1 -0
  256. package/dist/workspace/lock.d.ts +5 -0
  257. package/dist/workspace/lock.d.ts.map +1 -0
  258. package/dist/workspace/lock.js +104 -0
  259. package/dist/workspace/lock.js.map +1 -0
  260. package/dist/workspace/metadata.d.ts +4 -0
  261. package/dist/workspace/metadata.d.ts.map +1 -0
  262. package/dist/workspace/metadata.js +21 -0
  263. package/dist/workspace/metadata.js.map +1 -0
  264. package/dist/workspace/operations.d.ts +14 -0
  265. package/dist/workspace/operations.d.ts.map +1 -0
  266. package/dist/workspace/operations.js +35 -0
  267. package/dist/workspace/operations.js.map +1 -0
  268. package/dist/workspace/paths.d.ts +11 -0
  269. package/dist/workspace/paths.d.ts.map +1 -0
  270. package/dist/workspace/paths.js +12 -0
  271. package/dist/workspace/paths.js.map +1 -0
  272. package/dist/workspace/revision.d.ts +6 -0
  273. package/dist/workspace/revision.d.ts.map +1 -0
  274. package/dist/workspace/revision.js +15 -0
  275. package/dist/workspace/revision.js.map +1 -0
  276. package/dist/xlsx/index.d.ts +2 -0
  277. package/dist/xlsx/index.d.ts.map +1 -0
  278. package/dist/xlsx/index.js +3 -0
  279. package/dist/xlsx/index.js.map +1 -0
  280. package/package.json +51 -27
  281. package/schema/command.schema.json +2405 -0
  282. package/dist/.tsbuildinfo +0 -1
package/README.ko.md ADDED
@@ -0,0 +1,342 @@
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 문서 자동화 엔진입니다. 문서를 버전 관리되는 작업 공간으로 열고, 에이전트가 구조를 검사하고 대상 요소를 지정하여 명시적인 JSON 명령을 적용·검증한 뒤 새 문서로 내보낼 수 있게 합니다.
15
+
16
+ 현재 구현된 형식은 PPTX와 DOCX입니다. XLSX, Keynote 및 Numbers 어댑터는 의도적으로 `FORMAT_NOT_IMPLEMENTED`를 반환하며, 아직 지원되는 편집 대상이 아닙니다.
17
+
18
+ 이 저장소는 **커뮤니티 에디션**(`edition=community`)입니다. 자세한 내용은 [docs/edition.md](docs/edition.md)를 참고하세요. 상용 에디션은 별도 저장소 `deckuse-commercial`에 있습니다.
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는 프레젠테이션을 처음부터 다시 만들지 않고 기존 파일을 수정합니다. 소스 파일이 없으면 `deckuse new`로 번들된 빈 템플릿에서 작업 공간을 만들 수 있습니다. 이 워크플로는 시각적 판단보다 구조를 우선하도록 설계되었습니다.
33
+
34
+ ```text
35
+ existing.pptx → init ─┐
36
+ ├→ list / get → set / add → validate → export
37
+ blank template → new ─┘
38
+ ```
39
+
40
+ Every successful write automatically commits a Git revision, updates `operations.jsonl`, and rebuilds `package.pptx`. Use `undo` to revert writes and `history` to inspect the operation log.
41
+
42
+ 가능한 경우 변경하지 않은 XML과 알려지지 않은 패키지 파트를 보존합니다. 완전한 PowerPoint 렌더링/레이아웃 엔진은 아닙니다. `monitor`로 라이브 HTML 미리보기, `render`로 한 장을 PNG로 캡처할 수 있습니다. 의미적 `diff` / `branch`는 이후 제공됩니다.
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
+ # 프레젠테이션에서 영구 작업 공간을 만듭니다.
56
+ deckuse init input.pptx ./workspace --json
57
+
58
+ # 또는 번들된 빈 16:9 템플릿으로 시작 (input.pptx 불필요).
59
+ deckuse new ./workspace --json
60
+
61
+ # 인덱싱된 문서를 검사하고 대상 요소를 조회합니다.
62
+ deckuse inspect ./workspace --json
63
+ deckuse query ./workspace 'kind=textbox text=Quarter' --json
64
+ deckuse query ./workspace '*' --limit 500 --json
65
+
66
+ # JSON 명령 하나, JSON 배열 또는 JSONL을 적용합니다.
67
+ deckuse apply ./workspace --input operations.jsonl --json
68
+
69
+ # 패키지를 검증하고 내보냅니다.
70
+ deckuse validate ./workspace --json
71
+ deckuse history ./workspace --json
72
+ deckuse undo ./workspace --steps 1 --json
73
+ ```
74
+
75
+ ## CLI 워크플로
76
+
77
+ `apply` accepts a transaction file (`{ "operations": [...] }`), a single JSON mutation, a JSON array, or JSON Lines. One invocation can apply many write commands; multiple commands run as one atomic batch. Use `--input -` (the default) to read from standard input. Legacy ElementRef mutations remain supported. Commands passed to `apply` do not need `version`, `workspaceId`, or `transactionId`: the CLI supplies them.
78
+
79
+ 명령 결과는 JSON으로 표준 출력에 기록됩니다. 잘못된 인수 또는 입력 오류는 표준 오류로 기록됩니다. 종료 상태 `0`은 성공, `1`은 명령 실패, `2`는 CLI 사용법 또는 파싱 실패를 뜻합니다.
80
+
81
+ ### 선택자
82
+
83
+ Prefer `search text` / `search shape` and `list` for Phase 1a inventory. `query` remains available for back-compat and accepts either a selector string or a structured selector in a command. Space-separated terms are combined with AND.
84
+
85
+ | Syntax | Meaning |
86
+ | -------------------------------------- | ---------------------------------------------------- |
87
+ | `*` or `all` | Match every indexed element. |
88
+ | `kind=textbox` | Match an element kind by case-insensitive substring. |
89
+ | `text=Quarter` | Match text that contains the literal value. |
90
+ | `text~=pattern` | Match text with a Unicode regular expression. |
91
+ | `hasText=true` | Match elements that contain text. |
92
+ | `slide=256`, `id=256:10`, `name=Title` | Filter by slide ID, element ID, or name. |
93
+
94
+ Query results provide stable element references. A reference includes a document ID and an element ID or structural path; array positions are not stable identifiers.
95
+
96
+ ## 일반적인 에이전트 워크플로
97
+
98
+ 이 예시는 현재 PPTX 기능만 사용합니다. Deckuse가 추론, 카피라이팅 또는 시각적 검토를 독립적으로 수행한다고 주장하는 것이 아니라, 에이전트가 Deckuse 프리미티브를 조합하여 구성할 수 있는 워크플로를 설명합니다.
99
+
100
+ ### 1. 프레젠테이션 전체에서 오래된 연도 업데이트
101
+
102
+ **요청:** “모든 `FY2025` 참조를 `FY2026`으로 바꾸고, 그 외에는 아무것도 변경하지 마세요.”
103
+
104
+ 먼저 `query`로 영향을 받는 요소를 검토한 다음, 리터럴 `replaceText`를 수행하고 내보내기 전에 검증합니다.
105
+
106
+ ```sh
107
+ deckuse init master.pptx ./year-update --json
108
+ deckuse query ./year-update 'text=FY2025' --limit 1000 --json
109
+ cat > year-update.json <<'EOF'
110
+ {
111
+ "type": "replaceText",
112
+ "find": "FY2025",
113
+ "replace": "FY2026"
114
+ }
115
+ EOF
116
+ deckuse apply ./year-update --input year-update.json --json
117
+ deckuse validate ./year-update --json
118
+ ```
119
+
120
+ After the write completes, `./year-update/package.pptx` is rebuilt automatically as the latest snapshot.
121
+
122
+ 검토 쿼리는 변경 범위를 확인된 항목으로 제한합니다. `replaceText`는 승인된 일괄 변경을 수행하면서 관련 없는 객체는 그대로 유지합니다. selector가 없으면 하위 텍스트를 집계하는 조상 컨테이너 대신 가장 구체적인 인덱스된 텍스트 노드를 업데이트합니다.
123
+
124
+ ### 2. 회사 또는 제품 이름 변경
125
+
126
+ **요청:** “기존 제품 이름을 새 제품 이름으로 모든 곳에서 바꾸세요.”
127
+
128
+ 이는 동일한 안전한 검토 후 교체 패턴입니다. 먼저 정확한 기존 이름을 검색한 뒤, 리터럴 값으로 `replaceText`를 사용합니다. 구두점이나 공백처럼 변형이 있는 경우에는 쿼리 출력을 확인한 후에만 정규식 교체를 사용하세요.
129
+
130
+ ```json
131
+ {
132
+ "type": "replaceText",
133
+ "find": "Legacy Platform",
134
+ "replace": "Unified Platform"
135
+ }
136
+ ```
137
+
138
+ 더 제한적인 변경을 위해서는 명령에 예를 들어 `"selector": "slide=256"` 같은 선택자를 포함하여 하나의 슬라이드만 대상이 되게 하세요.
139
+
140
+ ### 3. 에이전트용 프레젠테이션 개요 추출
141
+
142
+ **요청:** “슬라이드 제목을 나열하고 이 덱이 다루는 내용을 요약하세요.”
143
+
144
+ `inspect`를 실행하여 인덱싱된 프레젠테이션 구조를 가져온 다음 텍스트가 있는 객체를 쿼리합니다. 호출하는 에이전트는 반환된 객체를 슬라이드 ID별로 그룹화하고, 이름·위치·텍스트를 기준으로 제목처럼 보이는 객체를 식별하며, 추출된 텍스트에서 요약을 생성할 수 있습니다.
145
+
146
+ ```sh
147
+ deckuse init briefing.pptx ./outline --json
148
+ deckuse inspect ./outline --depth 2 --json
149
+ deckuse query ./outline 'hasText=true' --limit 10000 --json
150
+ ```
151
+
152
+ Deckuse는 구조화된 원본 데이터를 제공합니다. 어떤 텍스트가 제목인지 결정하고 요약을 작성하는 일은 Deckuse가 아니라 에이전트의 책임입니다.
153
+
154
+ ### 4. 발송 전 콘텐츠 QA 실행
155
+
156
+ **요청:** “이 덱을 보내기 전에 이전 고객명, 날짜, 제품명, URL 및 필수 면책 문구를 찾으세요.”
157
+
158
+ 알려진 각 위험 항목을 쿼리하고 반환된 참조를 검사합니다. 부재 확인도 같은 방식으로 동작합니다. 필수 텍스트를 쿼리하고 결과가 비어 있으면 표시합니다. 에이전트는 프레젠테이션을 수정하지 않고 QA 보고서를 만들거나, 승인된 수정 사항에 대해 범위를 좁힌 `setText` / `replaceText` 명령을 준비할 수 있습니다.
159
+
160
+ ```sh
161
+ deckuse query ./workspace 'text=Customer A' --limit 1000 --json
162
+ deckuse query ./workspace 'text~=https?://' --limit 1000 --json
163
+ deckuse query ./workspace 'text=Required disclaimer' --limit 1000 --json
164
+ ```
165
+
166
+ 이는 콘텐츠 및 구조 QA이지 시각 QA가 아닙니다. `render` / `monitor`는 검토 보조로만 사용하세요. Deckuse는 겹침을 감지하거나 레이아웃 품질을 판단하지 않습니다.
167
+
168
+ ### 5. 한 슬라이드에서 정확히 하나의 항목 변경
169
+
170
+ **요청:** “슬라이드 7에서 제목을 `Enterprise Strategy`로 바꾸고, 그 외에는 아무것도 변경하지 마세요.”
171
+
172
+ 먼저 해당 슬라이드와 제목 텍스트를 쿼리한 뒤, 반환된 `ref`를 가져와 `setText` 명령을 보냅니다. `ref`는 모호한 전역 교체를 방지합니다.
173
+
174
+ ```json
175
+ {
176
+ "type": "setText",
177
+ "ref": {
178
+ "documentId": "./workspace",
179
+ "elementId": "256:10"
180
+ },
181
+ "text": "Enterprise Strategy"
182
+ }
183
+ ```
184
+
185
+ 요소 ID는 프레젠테이션별 예시입니다. 이 값을 복사하지 말고 항상 현재 작업 공간에서 반환된 ID를 사용하세요.
186
+
187
+ ### 6. 제목 타이포그래피 표준화
188
+
189
+ **요청:** “승인된 모든 제목을 28 pt로 만들고 승인된 서체를 사용하세요.”
190
+
191
+ 쿼리로 제목 객체를 식별하고, 에이전트가 반환된 참조를 검토하거나 필터링한 다음 승인된 각 참조에 대해 `setProperties`를 한 번씩 적용합니다. `setProperties`는 한 번에 하나의 참조만 대상으로 하며, 자체적으로 선택자를 받지 않습니다.
192
+
193
+ ```json
194
+ {
195
+ "type": "setProperties",
196
+ "ref": {
197
+ "documentId": "./workspace",
198
+ "elementId": "256:8"
199
+ },
200
+ "properties": {
201
+ "fontSize": 28,
202
+ "fontFamily": "Approved Sans",
203
+ "bold": true
204
+ }
205
+ }
206
+ ```
207
+
208
+ 같은 명령으로 `fill`, `stroke`(`border`, `outline`, `line`도 가능), `textColor`, `italic`, `underline`, `name`, `hidden`을 설정할 수 있습니다. 알 수 없는 속성 키는 `INVALID_COMMAND`로 실패합니다.
209
+
210
+ ### 7. 객체의 기하를 정밀하게 조정
211
+
212
+ **요청:** “승인된 모든 제목을 약간 아래로 이동하세요.”
213
+
214
+ 의도한 제목 참조를 쿼리하고 선택한 다음 현재 기하 정보를 검사하고, 명시적 좌표를 포함하여 객체마다 하나의 `setTransform` 명령을 실행합니다. 이는 구조적 기하 작업이므로, 시각적 검증 없이 자동 레이아웃 보정으로 홍보해서는 안 됩니다.
215
+
216
+ ```json
217
+ {
218
+ "type": "setTransform",
219
+ "ref": {
220
+ "documentId": "./workspace",
221
+ "elementId": "256:8"
222
+ },
223
+ "transform": {
224
+ "x": 914400,
225
+ "y": 731520,
226
+ "width": 8229600,
227
+ "height": 685800
228
+ }
229
+ }
230
+ ```
231
+
232
+ 변환 좌표는 OOXML EMU입니다. 세로 위치만 변경할 때는 검사한 객체의 `x`, `width`, `height`를 유지하세요.
233
+
234
+ ### 8. 승인된 영업 덱 개인화
235
+
236
+ **요청:** “잠재 고객용 버전을 만드세요. 고객 이름과 승인된 계정별 문구는 업데이트하되 디자인은 유지하세요.”
237
+
238
+ 승인된 마스터에서 각 출력물마다 별도의 작업 공간을 만듭니다. 플레이스홀더 또는 기존 고객 텍스트를 쿼리하고, 검토된 교체만 적용한 뒤 검증하고 자동으로 갱신되는 `package.pptx`를 사용합니다.
239
+
240
+ ```sh
241
+ deckuse init approved-master.pptx ./customer-a --json
242
+ deckuse query ./customer-a 'text=Customer Name' --json
243
+ # Apply reviewed replacements for this customer only.
244
+ deckuse apply ./customer-a --input customer-a.jsonl --json
245
+ deckuse validate ./customer-a --json
246
+ ```
247
+
248
+ 별도 작업 공간은 한 고객의 편집 내용이 다른 출력물로 새어 나가는 것을 방지합니다. 승인 절차가 에이전트의 수정을 허용한 객체만 교체하세요.
249
+
250
+ ### 9. 하나의 마스터에서 지역 또는 대상별 변형 생성
251
+
252
+ **요청:** “승인된 프레젠테이션에서 지역별 및 엔터프라이즈 변형을 생성하세요.”
253
+
254
+ 각 변형마다 동일한 마스터에서 새 작업 공간을 초기화합니다. 각 변형은 고유한 명령 파일과 출력 경로를 가집니다.
255
+
256
+ Prefer `apply` with a JSON array, JSONL, or `{ "operations": [...] }`: multiple write commands in one invocation run as one atomic batch (if one fails, none persist). The protocol `batch` command form remains supported.
257
+
258
+ ```json
259
+ [
260
+ {
261
+ "type": "replaceText",
262
+ "find": "Default Message",
263
+ "replace": "Regional Message"
264
+ },
265
+ {
266
+ "type": "replaceText",
267
+ "find": "Default Offer",
268
+ "replace": "Enterprise Offer"
269
+ }
270
+ ]
271
+ ```
272
+
273
+ ```sh
274
+ deckuse apply ./regional --input regional.json --json
275
+ ```
276
+
277
+ 이 방식은 하나의 승인된 원본 덱을 보존하면서, 명시적인 변경 집합으로 모든 변형을 재현할 수 있게 합니다.
278
+
279
+ ### 10. 코딩 에이전트가 기존 프레젠테이션을 조작하도록 하기
280
+
281
+ **요청:** “이 덱을 검사하고, 요청된 편집을 식별하여 적용한 뒤 수정된 PPTX를 내보내세요.”
282
+
283
+ 에이전트에 다음 루프를 제공합니다. 작업 공간을 초기화하고, 대상 변경 전마다 inspect 또는 query를 실행하며, 명시적인 JSON 명령을 생성하고 적용한 뒤 패키지를 검증하고 재구성된 `package.pptx`를 내보내기로 사용합니다. 감사 가능성이 중요한 경우 명령 파일과 명령 결과를 작업과 함께 저장하세요.
284
+
285
+ Deckuse는 에이전트에 안정적인 참조, 선택자, 트랜잭션, 검증 및 결정론적인 내보내기 경로를 제공합니다. 작업을 해석하고 어떤 작업이 적절한지 결정하는 것은 에이전트입니다.
286
+
287
+ ### `setProperties` 예시
288
+
289
+ ```json
290
+ {
291
+ "type": "setProperties",
292
+ "ref": { "documentId": "./workspace", "elementId": "256:8" },
293
+ "properties": {
294
+ "stroke": { "color": "0000FF", "width": 1.5 },
295
+ "fill": "none",
296
+ "textColor": "111111",
297
+ "fontSize": 18,
298
+ "fontFamily": "Approved Sans",
299
+ "bold": true
300
+ }
301
+ }
302
+ ```
303
+
304
+ `stroke` and `fill` accept a hexadecimal color string. Use `none`, `false`, or `null` for no stroke or fill. `stroke.width` is in points and defaults to `1`.
305
+
306
+ ## PPTX 기능
307
+
308
+ - Persistent workspaces, revision-conflict detection, dry runs, atomic batches, and an operation log.
309
+ - `inspect`, `list`, `get`, `search`, and back-compat `query` / `getText`; stable references include slide ID, part URI, cNvPr ID, and ancestor path when available.
310
+ - `setText` and `replaceText`, including literal or regular-expression replacement in an optional selector scope. Without a selector, `replaceText` prefers leaf text nodes over ancestor containers that aggregate descendant text. Newlines in `setText` become separate paragraphs.
311
+ - `setTransform` for explicit object position, size, rotation, and flip changes.
312
+ - `setProperties` for common shape and text properties, including `paragraph.align`, `paragraph.level`, `bullet`, `fill` transparency, and `hyperlink`.
313
+ - Add, duplicate, remove, and rebind slides to another layout (`setSlideLayout` / `deckuse set slide-layout`); layout refs accept index, `layout:N`, `slide:N`, display name, or basename. Rebind updates the relationship only (does not edit layout parts). Duplicated slides clone mutable notes and chart parts while layouts and media can be shared safely.
314
+ - Add shapes/text boxes (optional `role` writes a `p:ph` placeholder), connectors, groups, pictures (from a file path or base64), tables, charts (cache-only), and embedded video/audio; duplicate or remove elements.
315
+ - `role` must be an OOXML placeholder type (`title`, `body`, `subTitle`, `ctrTitle`, …). Common aliases like `subtitle`→`subTitle` are normalized; non-OOXML labels (for example `card`) are rejected so PowerPoint does not prompt to repair.
316
+ - Address placeholders with `slide:N/placeholder:<type>` (for example `title`, `body`, `subTitle`, `ctrTitle`).
317
+ - `replacePicture` replaces a picture’s embedded media in place while retaining its element reference and layer order.
318
+ - Table-cell addressing by table ID, row, and column; table row/column insert and delete via `setProperties`; cell `fill`; speaker-note reading and text editing (notes parts are created automatically when writing `slide:N/notes` if missing).
319
+ - Create charts (`bar` / `column` / `line` / `pie`) and edit chart title, series-name, and cached values. When an embedded workbook exists, Deckuse emits `EMBEDDED_WORKBOOK_NOT_SYNCHRONIZED` rather than claiming that workbook data was updated. Advanced charts (other families, combo, ChartEx) are preserve-only in the community edition.
320
+ - List and resolve master, layout, and theme parts; community edition rejects writes to those parts (`UNSUPPORTED_CAPABILITY`). Master/layout editing is available in the commercial edition repository.
321
+ - `monitor` for live HTML preview and `render` for single-slide PNG screenshots (office2html + Playwright).
322
+ - Preservation of unknown parts and untouched nodes. ZIP files are recompressed, so fidelity is defined by uncompressed data for untouched entries rather than ZIP byte identity.
323
+
324
+ ## 제한 사항
325
+
326
+ - Deckuse does not implement the full PowerPoint DrawingML surface, animation editing, SmartArt editing, OLE editing, or macro editing.
327
+ - It is not a full PowerPoint rendering or layout engine. `monitor` and `render` provide HTML/PNG review aids only; do not rely on them to assess visual quality, detect overlap, or automatically improve slide design.
328
+ - Chart edits update OOXML chart caches only; embedded Excel workbooks are not rewritten.
329
+ - Duplicated slides clone notes and chart parts and reuse layouts, themes, and media. Complex custom XML extensions are retained but not edited semantically.
330
+ - `setText` and `replaceText` collapse multi-run text in the targeted node into one run while retaining the first run’s style.
331
+
332
+ ## 개발 검사
333
+
334
+ ```sh
335
+ pnpm format:check
336
+ pnpm lint
337
+ pnpm typecheck
338
+ pnpm test
339
+ pnpm build
340
+ ```
341
+
342
+ For the complete canonical English documentation and command wording, see [README.md](README.md).
package/README.md CHANGED
@@ -11,11 +11,14 @@
11
11
 
12
12
  </div>
13
13
 
14
+ Deckuse is a local-first, schema-driven Office document automation engine for coding agents. It turns document editing into an explicit, reviewable workflow: open a versioned workspace, inspect and target its structure, apply JSON commands, validate the result, and export a new document.
15
+
16
+ The engine is built around format adapters. PPTX and DOCX are implemented. XLSX, Keynote, and Numbers adapters return `FORMAT_NOT_IMPLEMENTED` today, so agents fail clearly instead of silently producing unsafe edits.
14
17
  Deckuse is a local-first, schema-driven Office document automation engine for coding agents. It opens a document into a versioned workspace, lets an agent inspect and target its structure with semantic addresses (`slide:1/shape:2`), applies explicit mutations, validates the result, and exports a new document.
15
18
 
16
- This repository is the **community edition** (`edition=community`). See [docs/edition.md](https://github.com/deckflow/deckuse/blob/main/docs/edition.md). Shared packages here are the source of truth; the commercial edition is a private thin overlay (`deckuse-commercial`) that swaps `@deckflow/deckuse-edition-config`, registers a `PptxEditionExtension` for gated writes, and may add proprietary packages.
19
+ This repository is the **community edition** (`edition=community`). See [docs/edition.md](https://github.com/deckflow/deckuse/blob/main/docs/edition.md). Shared source here is the source of truth, published as `@deckflow/deckuse`; the commercial edition is a private thin overlay (`deckuse-commercial`) that registers a `PptxEditionExtension` for gated writes and may add proprietary packages.
17
20
 
18
- PPTX is the currently implemented format (**protocol 2.0 / Phase 1a**). DOCX, XLSX, Keynote, and Numbers adapters deliberately return `FORMAT_NOT_IMPLEMENTED`; they are not supported editing targets yet.
21
+ PPTX and DOCX are implemented (**protocol 2.0**). XLSX, Keynote, and Numbers adapters deliberately return `FORMAT_NOT_IMPLEMENTED`; they are not supported editing targets yet.
19
22
 
20
23
  ## Agent Skill (install first)
21
24
 
@@ -29,16 +32,32 @@ Requires **CLI `deckuse >= 1.2.0`**. Quick reference: [docs/agent-cookbook.md](h
29
32
 
30
33
  ## Why Deckuse
31
34
 
32
- Deckuse lets an agent modify an existing presentation without recreating it from scratch. Its workflow is deliberately structural rather than visual:
35
+ Deckuse lets an agent modify an existing presentation without recreating it from scratch. When you have no source file, `deckuse new` bootstraps a workspace from the bundled blank template. Its workflow is deliberately structural rather than visual:
33
36
 
34
37
  ```text
35
- existing.pptx → init → list / get → set / add → validate → export
38
+ existing.pptx → init ─┐
39
+ ├→ list / get → set / add → validate → export
40
+ blank template → new ─┘
36
41
  ```
37
42
 
38
43
  Every successful write automatically commits a Git revision, updates `operations.jsonl`, rebuilds `package.pptx`, and refreshes `.deckuse/index.json`. Use `undo` to revert writes and `history` to inspect the operation log.
39
44
 
40
45
  It preserves untouched XML and unknown package parts where possible. It is not a full PowerPoint rendering or layout engine and cannot reliably judge whether a slide is visually attractive or whether a layout is visually correct. Use `monitor` for live HTML preview and `render` to screenshot one slide to PNG for agent visual review. Semantic `diff` / `branch` remain deferred past Phase 1a.
41
46
 
47
+ ## Where it creates value
48
+
49
+ Deckuse is designed for document changes that need to be precise, repeatable,
50
+ and auditable:
51
+
52
+ - **Recurring content updates** — refresh dates, metrics, names, pricing, and
53
+ disclaimers without rebuilding a presentation.
54
+ - **Customer and market variants** — create controlled versions with explicit
55
+ selectors and reviewable operations.
56
+ - **Content governance** — query sensitive or outdated content, inspect every
57
+ match, and validate before export.
58
+ - **Agent-driven automation** — use structured JSON, revision checks, dry runs,
59
+ atomic batches, and operation logs in larger workflows.
60
+
42
61
  ## Installation
43
62
 
44
63
  Requirements: Node.js 18 or later.
@@ -52,9 +71,12 @@ This installs the `deckuse` CLI globally.
52
71
  ## CLI workflow
53
72
 
54
73
  ```sh
55
- # Create a persistent workspace from a presentation (revision starts at 1).
74
+ # Create a workspace from an existing presentation (revision starts at 1).
56
75
  deckuse init input.pptx ./workspace --json
57
76
 
77
+ # Or start from the bundled blank 16:9 template (no input.pptx needed).
78
+ deckuse new ./workspace --json
79
+
58
80
  # Inventory and read live properties with provenance.
59
81
  deckuse status --workspace ./workspace --json
60
82
  deckuse list slides --workspace ./workspace --json
@@ -75,6 +97,10 @@ deckuse export ./out.pptx --workspace ./workspace --json
75
97
 
76
98
  # Live HTML preview; conversion starts when a browser subscribes.
77
99
  deckuse monitor --workspace ./workspace --port 4173
100
+ # Background daemon: start / status (lists all when --workspace omitted) / stop [--all]
101
+ deckuse monitor start --workspace ./workspace --port 0
102
+ deckuse monitor status --json
103
+ deckuse monitor stop --workspace ./workspace
78
104
 
79
105
  # Screenshot one slide to PNG for visual review (requires Chrome / Chromium / Edge).
80
106
  deckuse render --page 1 --workspace ./workspace --json
@@ -309,7 +335,7 @@ Deckuse gives the agent stable references, selectors, transactions, validation,
309
335
  - Geometry accepts **EMU numbers or unit strings** (`px` @ 96 DPI, `pt`, `cm`, `mm`, `in`, `%` of slide). `alignElements` / `deckuse align` distributes or aligns targets into absolute EMU writes. Same-batch forward refs by shape `name` work after `addShape` inside one `apply`.
310
336
  - `setTransform` for explicit object position, size, rotation, and flip changes.
311
337
  - `setProperties` for common shape and text properties, including `paragraph.align` (aliases `center`/`left`/…), `paragraph.level`, `bullet`, `fill` transparency, `hyperlink`, `wrap`, `anchor`/`valign`, and `cornerRadius`.
312
- - Add, duplicate, and remove slides; duplicated slides clone mutable notes and chart parts while layouts and media can be shared safely.
338
+ - Add, duplicate, remove, and rebind slides to another layout (`setSlideLayout` / `deckuse set slide-layout`); layout refs accept index, `layout:N`, `slide:N`, display name, or basename. Rebind updates the relationship only (does not edit layout parts). Duplicated slides clone mutable notes and chart parts while layouts and media can be shared safely.
313
339
  - Add shapes/text boxes (optional `role` writes a `p:ph` placeholder), straight connectors (`line`/`connector`), elbow/curved connectors, arrow presets, groups, pictures (from a file path or base64), tables, charts (cache-only), and embedded video/audio; duplicate or remove elements.
314
340
  - `role` must be an OOXML placeholder type (`title`, `body`, `subTitle`, `ctrTitle`, …). Common aliases like `subtitle`→`subTitle` are normalized; non-OOXML labels (for example `card`) are rejected so PowerPoint does not prompt to repair.
315
341
  - Address placeholders with `slide:N/placeholder:<type>` (for example `title`, `body`, `subTitle`, `ctrTitle`). Target `slide:N/shape:X/run:K` to style a single run.
@@ -322,7 +348,19 @@ Deckuse gives the agent stable references, selectors, transactions, validation,
322
348
 
323
349
  Agent quick reference: [docs/agent-cookbook.md](https://github.com/deckflow/deckuse/blob/main/docs/agent-cookbook.md). Requires **CLI >= 1.2.0**.
324
350
 
325
- ### `setProperties` example
351
+ ## DOCX capabilities
352
+
353
+ Word uses the same workspace loop as PPTX (`new` / `init`, `list`, `apply`, `validate`, `export`, `undo`) but not the slide canvas. `deckuse new ./workspace --format docx` starts from a blank document. `init report.docx` unpacks an existing file. Snapshot file is `package.docx`.
354
+
355
+ - Addresses: `body/p:3` (1-based; tables are not paragraphs), `body/p:3/run:0` (0-based run), `para:<w14:paraId>`, `bookmark:<name>`, `body/table:1/row:2/cell:1/p:1`. `style:Heading1` is readable; applying a style uses `paragraph.style` and does not edit `styles.xml`.
356
+ - `setText`, `replaceText` (matches across runs inside one paragraph, including text split by `w:proofErr`), `setProperties` (`fontSize`, `bold`, `italic`, `underline`, `textColor`, `fontFamily`, `paragraph.align`, `paragraph.style`).
357
+ - `addParagraph` (`name` writes a bookmark for same-batch `bookmark:` refs), `addTable`, `insertBreak` (`page`). CLI: `deckuse add paragraph|table|break`.
358
+ - Slide commands (`addShape`, `xfrmSet`, `alignElements`, …) return `UNSUPPORTED_CAPABILITY`.
359
+ - Tracked changes, fields, comments, content controls, and equations are preserved. A command that would have to rewrite them fails instead of stripping them.
360
+ - Community edition does not write style definitions, numbering definitions, theme, or settings parts.
361
+ - `render --page` is PPTX-only. `@deckflow/office2html` does not paginate Word; export and open the `.docx` to check layout.
362
+
363
+ ## PPTX `setProperties` example
326
364
 
327
365
  ```json
328
366
  {
@@ -341,7 +379,7 @@ Agent quick reference: [docs/agent-cookbook.md](https://github.com/deckflow/deck
341
379
 
342
380
  `stroke` and `fill` accept a hexadecimal color string. Use `none`, `false`, or `null` for no stroke or fill. `stroke.width` is in points and defaults to `1`.
343
381
 
344
- The complete command schema is at [`packages/core/schema/command.schema.json`](https://github.com/deckflow/deckuse/blob/main/packages/core/schema/command.schema.json). The TypeScript package entry points are `@deckflow/deckuse-core`, `@deckflow/deckuse-opc`, and `@deckflow/deckuse-pptx`.
382
+ The complete command schema is at [`schema/command.schema.json`](https://github.com/deckflow/deckuse/blob/main/schema/command.schema.json). The TypeScript package entry point is `@deckflow/deckuse`.
345
383
 
346
384
  ## Limitations
347
385
 
@@ -361,3 +399,17 @@ pnpm typecheck
361
399
  pnpm test
362
400
  pnpm build
363
401
  ```
402
+
403
+ Integration write smoke (curated fixtures, default `--batch`, semantic gate):
404
+
405
+ ```sh
406
+ pnpm build
407
+ pnpm test:integration-writes:smoke
408
+ ```
409
+
410
+ Large corpus scans (optional / nightly):
411
+
412
+ ```sh
413
+ pnpm test:integration-writes:corpus -- /path/to/pptx-docx-dir
414
+ pnpm test:openability -- ./path/to/package.pptx # LibreOffice; or --osascript on macOS
415
+ ```