@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.
- package/README.es.md +342 -0
- package/README.fr.md +342 -0
- package/README.ja.md +342 -0
- package/README.ko.md +342 -0
- package/README.md +60 -8
- package/README.pt-BR.md +342 -0
- package/README.ru.md +342 -0
- package/README.zh-CN.md +367 -0
- package/assets/default.docx +0 -0
- package/assets/default.pptx +0 -0
- package/dist/bin.js +188 -21
- package/dist/bin.js.map +1 -1
- package/dist/core/adapter.d.ts +24 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +20 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/executor.d.ts +24 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +65 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/length.d.ts +27 -0
- package/dist/core/length.d.ts.map +1 -0
- package/dist/core/length.js +63 -0
- package/dist/core/length.js.map +1 -0
- package/dist/core/measure.d.ts +24 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +79 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/not-implemented.d.ts +3 -0
- package/dist/core/not-implemented.d.ts.map +1 -0
- package/dist/core/not-implemented.js +12 -0
- package/dist/core/not-implemented.js.map +1 -0
- package/dist/core/schema.d.ts +3065 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +799 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/default-template.d.ts +8 -0
- package/dist/default-template.d.ts.map +1 -0
- package/dist/default-template.js +29 -0
- package/dist/default-template.js.map +1 -0
- package/dist/docx/adapter.d.ts +29 -0
- package/dist/docx/adapter.d.ts.map +1 -0
- package/dist/docx/adapter.js +442 -0
- package/dist/docx/adapter.js.map +1 -0
- package/dist/docx/addressing.d.ts +18 -0
- package/dist/docx/addressing.d.ts.map +1 -0
- package/dist/docx/addressing.js +111 -0
- package/dist/docx/addressing.js.map +1 -0
- package/dist/docx/blank.d.ts +4 -0
- package/dist/docx/blank.d.ts.map +1 -0
- package/dist/docx/blank.js +75 -0
- package/dist/docx/blank.js.map +1 -0
- package/dist/docx/index-sync.d.ts +7 -0
- package/dist/docx/index-sync.d.ts.map +1 -0
- package/dist/docx/index-sync.js +24 -0
- package/dist/docx/index-sync.js.map +1 -0
- package/dist/docx/index.d.ts +5 -0
- package/dist/docx/index.d.ts.map +1 -0
- package/dist/docx/index.js +4 -0
- package/dist/docx/index.js.map +1 -0
- package/dist/docx/indexer.d.ts +41 -0
- package/dist/docx/indexer.d.ts.map +1 -0
- package/dist/docx/indexer.js +353 -0
- package/dist/docx/indexer.js.map +1 -0
- package/dist/docx/mutations.d.ts +5 -0
- package/dist/docx/mutations.d.ts.map +1 -0
- package/dist/docx/mutations.js +311 -0
- package/dist/docx/mutations.js.map +1 -0
- package/dist/docx/paragraphs.d.ts +26 -0
- package/dist/docx/paragraphs.d.ts.map +1 -0
- package/dist/docx/paragraphs.js +314 -0
- package/dist/docx/paragraphs.js.map +1 -0
- package/dist/docx/properties.d.ts +23 -0
- package/dist/docx/properties.d.ts.map +1 -0
- package/dist/docx/properties.js +414 -0
- package/dist/docx/properties.js.map +1 -0
- package/dist/docx/tables.d.ts +4 -0
- package/dist/docx/tables.d.ts.map +1 -0
- package/dist/docx/tables.js +64 -0
- package/dist/docx/tables.js.map +1 -0
- package/dist/docx/text-spans.d.ts +25 -0
- package/dist/docx/text-spans.d.ts.map +1 -0
- package/dist/docx/text-spans.js +142 -0
- package/dist/docx/text-spans.js.map +1 -0
- package/dist/docx/types.d.ts +27 -0
- package/dist/docx/types.d.ts.map +1 -0
- package/dist/docx/types.js +2 -0
- package/dist/docx/types.js.map +1 -0
- package/dist/docx/workspace.d.ts +20 -0
- package/dist/docx/workspace.d.ts.map +1 -0
- package/dist/docx/workspace.js +145 -0
- package/dist/docx/workspace.js.map +1 -0
- package/dist/docx/xml.d.ts +18 -0
- package/dist/docx/xml.d.ts.map +1 -0
- package/dist/docx/xml.js +87 -0
- package/dist/docx/xml.js.map +1 -0
- package/dist/edition-config/index.d.ts +25 -0
- package/dist/edition-config/index.d.ts.map +1 -0
- package/dist/edition-config/index.js +22 -0
- package/dist/edition-config/index.js.map +1 -0
- package/dist/edition.d.ts +2 -2
- package/dist/edition.d.ts.map +1 -1
- package/dist/edition.js +1 -1
- package/dist/edition.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +124 -32
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/key/index.d.ts +2 -0
- package/dist/key/index.d.ts.map +1 -0
- package/dist/key/index.js +3 -0
- package/dist/key/index.js.map +1 -0
- package/dist/monitor-daemon.d.ts +21 -8
- package/dist/monitor-daemon.d.ts.map +1 -1
- package/dist/monitor-daemon.js +189 -51
- package/dist/monitor-daemon.js.map +1 -1
- package/dist/monitor-registry.d.ts +34 -0
- package/dist/monitor-registry.d.ts.map +1 -0
- package/dist/monitor-registry.js +191 -0
- package/dist/monitor-registry.js.map +1 -0
- package/dist/monitor.d.ts.map +1 -1
- package/dist/monitor.js +2 -12
- package/dist/monitor.js.map +1 -1
- package/dist/numbers/index.d.ts +2 -0
- package/dist/numbers/index.d.ts.map +1 -0
- package/dist/numbers/index.js +3 -0
- package/dist/numbers/index.js.map +1 -0
- package/dist/opc/index.d.ts +96 -0
- package/dist/opc/index.d.ts.map +1 -0
- package/dist/opc/index.js +596 -0
- package/dist/opc/index.js.map +1 -0
- package/dist/pptx/adapter.d.ts +167 -0
- package/dist/pptx/adapter.d.ts.map +1 -0
- package/dist/pptx/adapter.js +841 -0
- package/dist/pptx/adapter.js.map +1 -0
- package/dist/pptx/addressing.d.ts +47 -0
- package/dist/pptx/addressing.d.ts.map +1 -0
- package/dist/pptx/addressing.js +481 -0
- package/dist/pptx/addressing.js.map +1 -0
- package/dist/pptx/align.d.ts +24 -0
- package/dist/pptx/align.d.ts.map +1 -0
- package/dist/pptx/align.js +112 -0
- package/dist/pptx/align.js.map +1 -0
- package/dist/pptx/chart-classify.d.ts +10 -0
- package/dist/pptx/chart-classify.d.ts.map +1 -0
- package/dist/pptx/chart-classify.js +58 -0
- package/dist/pptx/chart-classify.js.map +1 -0
- package/dist/pptx/chart.d.ts +42 -0
- package/dist/pptx/chart.d.ts.map +1 -0
- package/dist/pptx/chart.js +614 -0
- package/dist/pptx/chart.js.map +1 -0
- package/dist/pptx/edition-extension.d.ts +25 -0
- package/dist/pptx/edition-extension.d.ts.map +1 -0
- package/dist/pptx/edition-extension.js +10 -0
- package/dist/pptx/edition-extension.js.map +1 -0
- package/dist/pptx/edition.d.ts +20 -0
- package/dist/pptx/edition.d.ts.map +1 -0
- package/dist/pptx/edition.js +69 -0
- package/dist/pptx/edition.js.map +1 -0
- package/dist/pptx/elements.d.ts +12 -0
- package/dist/pptx/elements.d.ts.map +1 -0
- package/dist/pptx/elements.js +224 -0
- package/dist/pptx/elements.js.map +1 -0
- package/dist/pptx/hyperlink.d.ts +7 -0
- package/dist/pptx/hyperlink.d.ts.map +1 -0
- package/dist/pptx/hyperlink.js +81 -0
- package/dist/pptx/hyperlink.js.map +1 -0
- package/dist/pptx/index-sync.d.ts +7 -0
- package/dist/pptx/index-sync.d.ts.map +1 -0
- package/dist/pptx/index-sync.js +24 -0
- package/dist/pptx/index-sync.js.map +1 -0
- package/dist/pptx/index.d.ts +10 -0
- package/dist/pptx/index.d.ts.map +1 -0
- package/dist/pptx/index.js +7 -0
- package/dist/pptx/index.js.map +1 -0
- package/dist/pptx/indexer.d.ts +19 -0
- package/dist/pptx/indexer.d.ts.map +1 -0
- package/dist/pptx/indexer.js +320 -0
- package/dist/pptx/indexer.js.map +1 -0
- package/dist/pptx/layout-ref.d.ts +41 -0
- package/dist/pptx/layout-ref.d.ts.map +1 -0
- package/dist/pptx/layout-ref.js +145 -0
- package/dist/pptx/layout-ref.js.map +1 -0
- package/dist/pptx/media.d.ts +15 -0
- package/dist/pptx/media.d.ts.map +1 -0
- package/dist/pptx/media.js +145 -0
- package/dist/pptx/media.js.map +1 -0
- package/dist/pptx/mutations.d.ts +11 -0
- package/dist/pptx/mutations.d.ts.map +1 -0
- package/dist/pptx/mutations.js +1114 -0
- package/dist/pptx/mutations.js.map +1 -0
- package/dist/pptx/picture.d.ts +25 -0
- package/dist/pptx/picture.d.ts.map +1 -0
- package/dist/pptx/picture.js +118 -0
- package/dist/pptx/picture.js.map +1 -0
- package/dist/pptx/placeholder-role.d.ts +19 -0
- package/dist/pptx/placeholder-role.d.ts.map +1 -0
- package/dist/pptx/placeholder-role.js +71 -0
- package/dist/pptx/placeholder-role.js.map +1 -0
- package/dist/pptx/properties.d.ts +13 -0
- package/dist/pptx/properties.d.ts.map +1 -0
- package/dist/pptx/properties.js +587 -0
- package/dist/pptx/properties.js.map +1 -0
- package/dist/pptx/resolve-properties.d.ts +17 -0
- package/dist/pptx/resolve-properties.d.ts.map +1 -0
- package/dist/pptx/resolve-properties.js +623 -0
- package/dist/pptx/resolve-properties.js.map +1 -0
- package/dist/pptx/slide-size.d.ts +9 -0
- package/dist/pptx/slide-size.d.ts.map +1 -0
- package/dist/pptx/slide-size.js +29 -0
- package/dist/pptx/slide-size.js.map +1 -0
- package/dist/pptx/slides.d.ts +15 -0
- package/dist/pptx/slides.d.ts.map +1 -0
- package/dist/pptx/slides.js +247 -0
- package/dist/pptx/slides.js.map +1 -0
- package/dist/pptx/table-measure.d.ts +43 -0
- package/dist/pptx/table-measure.d.ts.map +1 -0
- package/dist/pptx/table-measure.js +70 -0
- package/dist/pptx/table-measure.js.map +1 -0
- package/dist/pptx/table.d.ts +26 -0
- package/dist/pptx/table.d.ts.map +1 -0
- package/dist/pptx/table.js +638 -0
- package/dist/pptx/table.js.map +1 -0
- package/dist/pptx/types.d.ts +27 -0
- package/dist/pptx/types.d.ts.map +1 -0
- package/dist/pptx/types.js +2 -0
- package/dist/pptx/types.js.map +1 -0
- package/dist/pptx/workspace.d.ts +23 -0
- package/dist/pptx/workspace.d.ts.map +1 -0
- package/dist/pptx/workspace.js +148 -0
- package/dist/pptx/workspace.js.map +1 -0
- package/dist/pptx/xml.d.ts +75 -0
- package/dist/pptx/xml.d.ts.map +1 -0
- package/dist/pptx/xml.js +390 -0
- package/dist/pptx/xml.js.map +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +14 -2
- package/dist/render.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace/git.d.ts +7 -0
- package/dist/workspace/git.d.ts.map +1 -0
- package/dist/workspace/git.js +119 -0
- package/dist/workspace/git.js.map +1 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +7 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/lock.d.ts +5 -0
- package/dist/workspace/lock.d.ts.map +1 -0
- package/dist/workspace/lock.js +104 -0
- package/dist/workspace/lock.js.map +1 -0
- package/dist/workspace/metadata.d.ts +4 -0
- package/dist/workspace/metadata.d.ts.map +1 -0
- package/dist/workspace/metadata.js +21 -0
- package/dist/workspace/metadata.js.map +1 -0
- package/dist/workspace/operations.d.ts +14 -0
- package/dist/workspace/operations.d.ts.map +1 -0
- package/dist/workspace/operations.js +35 -0
- package/dist/workspace/operations.js.map +1 -0
- package/dist/workspace/paths.d.ts +11 -0
- package/dist/workspace/paths.d.ts.map +1 -0
- package/dist/workspace/paths.js +12 -0
- package/dist/workspace/paths.js.map +1 -0
- package/dist/workspace/revision.d.ts +6 -0
- package/dist/workspace/revision.d.ts.map +1 -0
- package/dist/workspace/revision.js +15 -0
- package/dist/workspace/revision.js.map +1 -0
- package/dist/xlsx/index.d.ts +2 -0
- package/dist/xlsx/index.d.ts.map +1 -0
- package/dist/xlsx/index.js +3 -0
- package/dist/xlsx/index.js.map +1 -0
- package/package.json +51 -27
- package/schema/command.schema.json +2405 -0
- package/dist/.tsbuildinfo +0 -1
package/README.ru.md
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Deckuse
|
|
4
|
+
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://pnpm.io/)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](#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).
|