@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.fr.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 est un moteur local-first et piloté par schéma pour automatiser les documents Office avec des agents de code. Il ouvre un document dans un espace de travail versionné, permet à un agent d’inspecter et de cibler sa structure, applique des commandes JSON explicites, valide le résultat, puis exporte un nouveau document.
15
+
16
+ PPTX et DOCX sont implémentés. Les adaptateurs XLSX, Keynote et Numbers renvoient volontairement `FORMAT_NOT_IMPLEMENTED` : ils ne sont pas encore des cibles d’édition prises en charge.
17
+
18
+ Ce dépôt est l’**édition community** (`edition=community`). Voir [docs/edition.md](docs/edition.md). L’édition commerciale vit dans le dépôt séparé `deckuse-commercial`.
19
+
20
+ ## Agent Skill (à installer en premier)
21
+
22
+ Deckuse est conçu pour les agents. **Installez le skill Deckuse avant d’utiliser le CLI** — il encode la boucle workspace-first, le `apply` par lot, les adresses sémantiques, les unités et les recettes à haute valeur.
23
+
24
+ - Skill : [`skills/deckuse/SKILL.md`](skills/deckuse/SKILL.md)
25
+ - Cursor (projet) : copier ou lier vers `.cursor/skills/deckuse/`
26
+ - Cursor (personnel) : copier ou lier vers `~/.cursor/skills/deckuse/`
27
+
28
+ Nécessite **CLI `deckuse >= 1.2.0`**. Référence rapide : [docs/agent-cookbook.md](docs/agent-cookbook.md).
29
+
30
+ ## Pourquoi Deckuse
31
+
32
+ Deckuse permet de modifier une présentation existante sans la recréer. Sans fichier source, `deckuse new` initialise un espace de travail à partir du modèle vide fourni. Son flux de travail privilégie volontairement la structure plutôt que le rendu visuel :
33
+
34
+ ```text
35
+ existing.pptx → init ─┐
36
+ ├→ list / get → set / add → validate → export
37
+ blank template → new ─┘
38
+ ```
39
+
40
+ Chaque écriture réussie commit automatiquement une révision Git, met à jour `operations.jsonl` et reconstruit `package.pptx`. Utilisez `undo` pour annuler des écritures et `history` pour consulter le journal des opérations.
41
+
42
+ Il préserve autant que possible le XML intact et les parties inconnues du package. Ce n’est pas un moteur de rendu PowerPoint complet : utilisez `monitor` pour un aperçu HTML en direct et `render` pour capturer une diapositive en PNG. Les `diff` / `branch` sémantiques restent différés.
43
+
44
+ ## Installation
45
+
46
+ Prérequis : Node.js 18 ou ultérieur.
47
+
48
+ ```sh
49
+ npm install -g @deckflow/deckuse
50
+ ```
51
+
52
+ Cette commande installe globalement le CLI `deckuse`.
53
+
54
+ ```sh
55
+ # Créer un espace de travail persistant depuis une présentation.
56
+ deckuse init input.pptx ./workspace --json
57
+
58
+ # Ou démarrer depuis le modèle vide fourni (pas besoin de input.pptx).
59
+ deckuse new ./workspace --json
60
+
61
+ # Inspecter le document indexé et interroger les éléments ciblés.
62
+ deckuse inspect ./workspace --json
63
+ deckuse query ./workspace 'kind=textbox text=Quarter' --json
64
+ deckuse query ./workspace '*' --limit 500 --json
65
+
66
+ # Appliquer une commande JSON, un tableau JSON ou du JSONL.
67
+ deckuse apply ./workspace --input operations.jsonl --json
68
+
69
+ # Valider l'espace de travail, consulter l'historique et annuler des écritures.
70
+ deckuse validate ./workspace --json
71
+ deckuse history ./workspace --json
72
+ deckuse undo ./workspace --steps 1 --json
73
+ ```
74
+
75
+ ## Flux de travail 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
+ Les résultats sont écrits en JSON sur la sortie standard ; les erreurs d’arguments ou d’entrée sont écrites sur la sortie d’erreur. Le code `0` indique la réussite, `1` l’échec d’une commande et `2` une erreur d’usage ou d’analyse CLI.
80
+
81
+ ### Sélecteurs
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
+ ## Flux de travail courants pour les agents
97
+
98
+ Ces exemples utilisent uniquement les fonctionnalités PPTX actuelles. Ils décrivent des flux de travail qu’un agent peut composer à partir des primitives de Deckuse, sans prétendre que Deckuse effectue lui-même du raisonnement, de la rédaction ou une révision visuelle.
99
+
100
+ ### 1. Mettre à jour une année obsolète dans une présentation
101
+
102
+ **Demande :** « Remplacez chaque référence à `FY2025` par `FY2026`, sans rien modifier d’autre. »
103
+
104
+ Utilisez d’abord `query` pour examiner les éléments concernés, puis exécutez un `replaceText` littéral et validez avant l’exportation.
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
+ Une fois l'écriture terminée, `./year-update/package.pptx` est reconstruit automatiquement comme dernier instantané.
121
+
122
+ La requête de revue limite la modification aux occurrences connues ; `replaceText` effectue la mutation groupée approuvée tout en laissant les objets sans rapport intacts. Sans selector, il met à jour les nœuds texte indexés les plus spécifiques plutôt que les conteneurs ancêtres qui agrègent le texte descendant.
123
+
124
+ ### 2. Renommer une entreprise ou un produit
125
+
126
+ **Demande :** « Remplacez partout l’ancien nom du produit par le nouveau. »
127
+
128
+ Il s’agit du même modèle sûr de revue puis remplacement. Recherchez d’abord le nom exact à remplacer, puis utilisez `replaceText` avec une valeur littérale. Pour les variantes telles que la ponctuation ou les espaces, n’utilisez un remplacement par expression régulière qu’après avoir vérifié la sortie de la requête.
129
+
130
+ ```json
131
+ {
132
+ "type": "replaceText",
133
+ "find": "Legacy Platform",
134
+ "replace": "Unified Platform"
135
+ }
136
+ ```
137
+
138
+ Pour une modification plus restreinte, ajoutez un sélecteur dans la commande, par exemple `"selector": "slide=256"`, afin qu’une seule diapositive soit éligible.
139
+
140
+ ### 3. Extraire le plan d’une présentation pour un agent
141
+
142
+ **Demande :** « Listez les titres des diapositives et résumez le contenu de cette présentation. »
143
+
144
+ Exécutez `inspect` pour récupérer la structure indexée de la présentation, puis interrogez les objets contenant du texte. L’agent appelant peut regrouper les objets retournés par ID de diapositive, identifier les objets qui ressemblent à des titres d’après leur nom, leur position ou leur texte, puis générer un résumé à partir du texte extrait.
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 fournit les données sources structurées. C’est l’agent, et non Deckuse, qui détermine quel texte est un titre et qui rédige le résumé.
153
+
154
+ ### 4. Effectuer un contrôle qualité du contenu avant livraison
155
+
156
+ **Demande :** « Avant l’envoi de cette présentation, trouvez les anciens noms de clients, dates, noms de produits, URL et le texte de clause de non-responsabilité requis. »
157
+
158
+ Interrogez chaque risque connu et examinez les références retournées. Les vérifications d’absence fonctionnent de la même façon : recherchez le texte requis et signalez un résultat vide. Un agent peut produire un rapport de QA sans modifier la présentation, ou préparer des commandes `setText` / `replaceText` étroitement ciblées pour des corrections approuvées.
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
+ Il s’agit d’une QA de contenu et de structure, non d’une QA visuelle. Utilisez `render` / `monitor` uniquement comme aide à la revue ; Deckuse ne détecte pas les chevauchements et ne juge pas la qualité de mise en page.
167
+
168
+ ### 5. Modifier exactement un élément sur une diapositive
169
+
170
+ **Demande :** « Sur la diapositive 7, remplacez le titre par `Enterprise Strategy` ; ne modifiez rien d’autre. »
171
+
172
+ Interrogez d’abord cette diapositive et le texte du titre, puis prenez le `ref` retourné et envoyez une commande `setText`. Le `ref` évite un remplacement global ambigu.
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
+ Les ID d’élément sont des exemples propres à une présentation. Utilisez toujours un ID retourné par l’espace de travail actuel au lieu de recopier cette valeur.
186
+
187
+ ### 6. Uniformiser la typographie des titres
188
+
189
+ **Demande :** « Réglez tous les titres approuvés sur 28 pt et utilisez la police approuvée. »
190
+
191
+ Utilisez une requête pour identifier les objets de titre, faites examiner ou filtrer par l’agent les références retournées, puis appliquez `setProperties` une fois pour chaque référence approuvée. `setProperties` cible une référence à la fois ; il n’accepte pas lui-même de sélecteur.
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
+ La même commande peut définir `fill`, `stroke` (ainsi que `border`, `outline` ou `line`), `textColor`, `italic`, `underline`, `name` et `hidden`. Les clés de propriété inconnues échouent avec `INVALID_COMMAND`.
209
+
210
+ ### 7. Ajuster précisément la géométrie d’un objet
211
+
212
+ **Demande :** « Déplacez légèrement vers le bas chaque titre approuvé. »
213
+
214
+ Interrogez et sélectionnez les références de titre visées, inspectez leur géométrie actuelle et émettez une commande `setTransform` par objet avec des coordonnées explicites. Il s’agit d’une opération structurelle de géométrie ; ne la présentez pas comme une correction automatique de mise en page sans validation visuelle.
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
+ Les coordonnées de transformation sont des EMU OOXML. Conservez `x`, `width` et `height` de l’objet inspecté lorsque vous ne modifiez que sa position verticale.
233
+
234
+ ### 8. Personnaliser une présentation commerciale approuvée
235
+
236
+ **Demande :** « Créez une version pour un prospect. Mettez à jour le nom du client et le texte approuvé propre au compte, tout en préservant le design. »
237
+
238
+ Créez un espace de travail distinct pour chaque résultat à partir du modèle maître approuvé. Interrogez les espaces réservés ou le texte client existant, appliquez uniquement les remplacements examinés, validez, puis utilisez le `package.pptx` mis à jour automatiquement.
239
+
240
+ ```sh
241
+ deckuse init approved-master.pptx ./customer-a --json
242
+ deckuse query ./customer-a 'text=Customer Name' --json
243
+ # Appliquez uniquement les remplacements examinés pour ce client.
244
+ deckuse apply ./customer-a --input customer-a.jsonl --json
245
+ deckuse validate ./customer-a --json
246
+ ```
247
+
248
+ Des espaces de travail séparés empêchent les modifications d’un client de se retrouver dans la sortie d’un autre. Ne remplacez que les objets que le processus d’approbation autorise l’agent à modifier.
249
+
250
+ ### 9. Produire des variantes régionales ou par audience depuis un même modèle maître
251
+
252
+ **Demande :** « Générez des variantes régionales et enterprise à partir de la présentation approuvée. »
253
+
254
+ Initialisez un nouvel espace de travail depuis le même modèle maître pour chaque variante. Chaque variante reçoit son propre fichier de commandes et son propre chemin de sortie.
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
+ Cela préserve une source unique approuvée tout en rendant chaque variante reproductible à partir d’un ensemble explicite de modifications.
278
+
279
+ ### 10. Permettre à un agent de code d’opérer une présentation existante
280
+
281
+ **Demande :** « Inspectez cette présentation, identifiez les modifications demandées, effectuez-les et exportez un PPTX révisé. »
282
+
283
+ Donnez à l’agent cette boucle : initialiser un espace de travail, inspecter ou interroger avant chaque modification ciblée, générer des commandes JSON explicites, les appliquer, valider le package et utiliser le `package.pptx` reconstruit comme export. Lorsque l’auditabilité importe, conservez le fichier de commandes et les résultats des commandes avec la tâche.
284
+
285
+ Deckuse fournit à l’agent des références stables, des sélecteurs, des transactions, une validation et un chemin d’exportation déterministe. L’agent interprète la tâche et décide quelles opérations sont appropriées.
286
+
287
+ ### Exemple de `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
+ ## Fonctionnalités 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
+ ## Limites
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
+ ## Vérifications de développement
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).