@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.ru.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
+ Этот репозиторий — **community-редакция** (`edition=community`). См. [docs/edition.md](docs/edition.md). Коммерческая редакция живёт в отдельном репозитории `deckuse-commercial`.
19
+
20
+ ## Agent Skill (установите сначала)
21
+
22
+ Deckuse рассчитан на агентов. **Перед использованием CLI установите skill Deckuse** — в нём зафиксированы workspace-first цикл, пакетный `apply`, семантические адреса, единицы измерения и полезные рецепты.
23
+
24
+ - Skill: [`skills/deckuse/SKILL.md`](skills/deckuse/SKILL.md)
25
+ - Cursor (проект): скопируйте или сделайте symlink в `.cursor/skills/deckuse/`
26
+ - Cursor (личный): скопируйте или сделайте symlink в `~/.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
+ Эта команда глобально устанавливает CLI `deckuse`.
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` с буквальным значением. Для вариантов с иной пунктуацией или пробелами применяйте замену по регулярному выражению только после проверки вывода `query`.
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
+ Координаты transform — это EMU стандарта OOXML. При изменении только вертикального положения сохраняйте `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. Дать coding-агенту управлять существующей презентацией
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).