@liustack/pptwise 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -41
- package/README.zh-CN.md +72 -41
- package/dist/{chunk-M35M4QUC.js → chunk-2CA3JRFR.js} +460 -499
- package/dist/chunk-2CA3JRFR.js.map +1 -0
- package/dist/{chunk-WL5KWYKS.js → chunk-G7WQ7KSP.js} +34800 -30625
- package/dist/chunk-G7WQ7KSP.js.map +1 -0
- package/dist/{chunk-VUOLBHD7.js → chunk-RQUKZYSH.js} +1 -1
- package/dist/{chunk-VUOLBHD7.js.map → chunk-RQUKZYSH.js.map} +1 -1
- package/dist/{chunk-3ZUKISTY.js → chunk-VEZGVYJS.js} +2 -2
- package/dist/cli.js +911 -462
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +5320 -1534
- package/dist/index.js +15 -13
- package/dist/node.d.ts +1 -1
- package/dist/node.js +2 -2
- package/dist/{pixel-audit-H5K6JK3X.js → pixel-audit-M5Q5WCST.js} +4 -4
- package/dist/pixel-audit-M5Q5WCST.js.map +1 -0
- package/dist/{registry-C0GJH7ZT.d.ts → registry-D8bkC8ff.d.ts} +1 -1
- package/dsh/preview-tool.js +20 -17
- package/package.json +2 -1
- package/skills/pptwise/SKILL.md +133 -70
- package/skills/pptwise/SKILL.zh-CN.md +136 -73
- package/skills/pptwise/references/branding.md +34 -8
- package/skills/pptwise/references/branding.zh-CN.md +36 -8
- package/skills/pptwise/references/components.md +63 -33
- package/skills/pptwise/references/components.zh-CN.md +63 -33
- package/skills/pptwise/references/density.md +23 -9
- package/skills/pptwise/references/density.zh-CN.md +23 -9
- package/skills/pptwise/references/images.md +26 -13
- package/skills/pptwise/references/images.zh-CN.md +26 -13
- package/skills/pptwise/references/layouts.md +30 -26
- package/skills/pptwise/references/layouts.zh-CN.md +30 -26
- package/skills/pptwise/references/spec.md +143 -69
- package/skills/pptwise/references/spec.zh-CN.md +143 -69
- package/skills/pptwise/references/validate.md +33 -45
- package/skills/pptwise/references/validate.zh-CN.md +33 -45
- package/skills/pptwise/scripts/run.ps1 +1 -1
- package/skills/pptwise/scripts/run.sh +1 -1
- package/dist/chunk-M35M4QUC.js.map +0 -1
- package/dist/chunk-WL5KWYKS.js.map +0 -1
- package/dist/pixel-audit-H5K6JK3X.js.map +0 -1
- /package/dist/{chunk-3ZUKISTY.js.map → chunk-VEZGVYJS.js.map} +0 -0
|
@@ -1,107 +1,181 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Intent, narrative, theme binding, and spec
|
|
2
2
|
|
|
3
|
-
Read this
|
|
3
|
+
Read this before creating `deck.spec.json`, choosing a theme, or handling a menu mismatch.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The authoring chain is causal and one-way:
|
|
6
6
|
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
pptwise schema --spec # deck spec schema
|
|
10
|
-
pptwise narratives --json # named narrative presets (strategy/pacing/audience axes + theme recommendations)
|
|
11
|
-
pptwise themes --json # built-in themes (id + label)
|
|
7
|
+
```text
|
|
8
|
+
intent -> narrative -> theme binding -> spec with kind -> fill -> render
|
|
12
9
|
```
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Also scan the workspace before asking anyone anything. Facts the files can answer are not questions:
|
|
17
|
-
|
|
18
|
-
- An existing confirmed `deck.spec.json` already locks narrative, theme, and branding. Do not re-interview. Route follow-ups through phase 6.
|
|
19
|
-
- A `theme.json`, a pinned `pptwise.config.json` theme, a user-named theme id, or a supplied `.thmx` / `.potx` / branded `.pptx` is a brand signal. Extract or honor it. Do not ask whether a template exists.
|
|
20
|
-
- Request text that already names the audience, argument style, or density has derived that axis. Do not re-ask it.
|
|
21
|
-
|
|
22
|
-
A brand signal answers what the deck should look like, never how it should argue. The full rule lives in `references/branding.md`.
|
|
11
|
+
## Read live vocabularies
|
|
23
12
|
|
|
13
|
+
Run these at the start of every deck task:
|
|
24
14
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
```bash
|
|
16
|
+
pptwise schema
|
|
17
|
+
pptwise schema --spec
|
|
18
|
+
pptwise narratives --json
|
|
19
|
+
pptwise themes --json
|
|
30
20
|
```
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
// pages/wrap-up.json — spec type "content", inserted right before the ending page — CORRECT
|
|
34
|
-
{ "components": [{ "type": "bullets", "items": ["Thank you", "Questions? sales@example.com"] }] }
|
|
35
|
-
```
|
|
22
|
+
The command output and workspace files outrank this guide. Scan for an existing `deck.spec.json`, deck-local `theme.json`, workspace `themes/`, and supplied Office brand files before asking questions.
|
|
36
23
|
|
|
37
|
-
|
|
38
|
-
// pages/closing.json — spec type "ending" — stays bare, nothing to move here
|
|
39
|
-
{}
|
|
40
|
-
```
|
|
24
|
+
## Intent and narrative
|
|
41
25
|
|
|
42
|
-
|
|
26
|
+
Intent records who the deck is for, the result it should cause, whether it will be presented or circulated, and the available time. Narrative is the first decision made from that intent. It chooses argument strategy, pacing, and tone.
|
|
43
27
|
|
|
44
|
-
|
|
28
|
+
When essential facts are missing and a user is present, ask one compact round:
|
|
45
29
|
|
|
46
|
-
|
|
30
|
+
1. Who is the audience, and what should they decide, understand, or do afterward?
|
|
31
|
+
2. Will someone present it, or must it stand alone? How much time is available?
|
|
32
|
+
3. Should the argument lead with a conclusion, unfold as a story, teach a sequence, showcase an image or number, or read as a compact briefing?
|
|
33
|
+
4. Should pages be dense, balanced, or spacious?
|
|
47
34
|
|
|
48
|
-
|
|
49
|
-
- Density (leave air vs pack the page) is decided in that interview (or derived). Follow the Sparse-page contract in `references/layouts.md` when you pin climax, quote, and evidence layouts and write `notes`. `pacing` does not grow a fourth value for this.
|
|
50
|
-
- Theme id comes from the chosen narrative's `themeRecommendations` in `narratives --json` (or from `themes` output if none fit — a recommendation, never a constraint). If the interview's brand question returned a template, extract it first — see `references/branding.md`.
|
|
51
|
-
- Write the confirmed `narrative`, `theme`, and `branding` into `deck.spec.json` as soon as the user agrees, before drafting any page. Do not hold them in the conversation and reconstruct them once pages exist.
|
|
52
|
-
- Draft `deck.spec.json`: one entry per page (`id`, `type`, `heading`, optionally `beat`/`focus`/`summary`) — opens on `cover`, closes on `ending`, everything in between is `content` or `chapter`. Write `narrative` as a preset id string when the three axes match a preset exactly, otherwise as `{strategy, pacing, audience}`. Never write `{id, pacing}` mixed shapes. Omit `branding` by default. Write `branding: "full"` only when every content page needs the brand footer (and whenever `meta.confidentiality` is `confidential` or `restricted`). Do not invent a `typeScale` field on the spec — it does not exist. The band is a recommendation. Only a bare IR (spec skipped) may put `theme.style.shape.typeScale` on the IR itself.
|
|
53
|
-
- Run `pptwise spec validate deck.spec.json` and fix whatever it reports until it prints `OK` — the hard gates (boundary pages, heading length, beat rotation, page count vs. pacing) all fire here, before a single page is written
|
|
54
|
-
- Once `spec validate` prints `OK`, set a `seed` (any integer) in `deck.spec.json` for revision stability — write one now, or run `pptwise assemble` once in phase 3 and copy the `generated seed …` value it prints into the spec. Without a persisted seed, editing one page's heading later can reshuffle every other page's auto-picked layout
|
|
35
|
+
Use `pptwise narratives --json` to map the answer to a named preset or to explicit `strategy`, `pacing`, and `audience`. Do not infer the narrative from brand colors. Confirm this package before choosing a theme.
|
|
55
36
|
|
|
56
|
-
|
|
37
|
+
## Choose, create, and bind a theme
|
|
57
38
|
|
|
58
|
-
|
|
39
|
+
Theme is the second decision and must be settled before the spec. A theme is one complete file with style, a page menu, optional brand rules, `occasions`, and `identity`. The menu serves a deliberate subset of the 11 content kinds.
|
|
59
40
|
|
|
60
|
-
|
|
41
|
+
Shortlist by occasion first and identity strength second. Compare two to four candidates with the fixed fitting-room sample:
|
|
61
42
|
|
|
62
|
-
|
|
43
|
+
```bash
|
|
44
|
+
pptwise theme try consulting,swiss,memo
|
|
45
|
+
```
|
|
63
46
|
|
|
64
|
-
|
|
47
|
+
`theme try` renders the same fixed sample deck under every candidate. It is the only place to compare themes without binding a deck. Choose from the images, not from names alone.
|
|
65
48
|
|
|
66
|
-
|
|
49
|
+
Create means copy. Prefer a workspace-owned theme even when the starting point is a factory preset:
|
|
67
50
|
|
|
68
|
-
|
|
51
|
+
```bash
|
|
52
|
+
pptwise theme new --from consulting --id acme-report
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
With an Office theme or template, choose the donor menu by occasion, then extract colors and fonts into one complete v2 file:
|
|
69
56
|
|
|
70
|
-
|
|
57
|
+
```bash
|
|
58
|
+
pptwise brand extract corp.pptx -o themes/acme.theme.json --from consulting
|
|
59
|
+
```
|
|
71
60
|
|
|
72
|
-
|
|
61
|
+
With an existing theme and a requested color change, fork it. The fork keeps the menu byte-identical and rederives the full palette:
|
|
73
62
|
|
|
74
|
-
|
|
63
|
+
```bash
|
|
64
|
+
pptwise theme fork acme --primary '#0B5FFF' --id acme-blue
|
|
65
|
+
```
|
|
75
66
|
|
|
76
|
-
|
|
67
|
+
Theme names resolve in three levels:
|
|
68
|
+
|
|
69
|
+
1. The deck directory, including `theme.json` and named theme JSON files.
|
|
70
|
+
2. A workspace `themes/` directory while walking upward from the deck.
|
|
71
|
+
3. Factory presets.
|
|
72
|
+
|
|
73
|
+
Bind exactly one name by writing it to `deck.spec.json` as `theme`. To freeze a workspace theme for one deck, copy the complete file into the deck directory as `theme.json` without changing its id. Deck commands then load it automatically.
|
|
74
|
+
|
|
75
|
+
<!-- generated:begin themes -->
|
|
76
|
+
### Complete factory preset catalog
|
|
77
|
+
|
|
78
|
+
This section is generated from the preset library and each preset menu. `identity` is the strength of the visual voice. `menu words` and the final column count content kinds only.
|
|
79
|
+
|
|
80
|
+
| id | label | occasions | identity | menu words | offered kinds |
|
|
81
|
+
| --- | --- | --- | --- | ---: | --- |
|
|
82
|
+
| `consulting` | Business Consulting | business | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
83
|
+
| `enterprise` | Enterprise | business, institutional | low | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
84
|
+
| `academic` | Academic | education | medium | 11 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `evidence`, `hierarchy` |
|
|
85
|
+
| `insight` | Financial Insight | finance | medium | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
86
|
+
| `campaign` | Marketing Campaign | marketing, event | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
87
|
+
| `classroom` | Classroom | education | medium | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
88
|
+
| `ink` | Ink Wash | culture | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
89
|
+
| `tech` | Tech | tech | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
90
|
+
| `runway` | Fashion Runway | fashion | high | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement` |
|
|
91
|
+
| `journal` | Editorial Journal | editorial | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
92
|
+
| `luxe` | Luxe | luxury, event | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
93
|
+
| `heritage` | Heritage | culture, luxury | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
94
|
+
| `pulse` | Health & Life Science | health | medium | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
95
|
+
| `terra` | Sustainability & ESG | sustainability | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
96
|
+
| `ember` | Startup Pitch | startup | high | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
97
|
+
| `vermilion` | Official Report | government, institutional | low | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
98
|
+
| `crayon` | Kids Education | kids, education | high | 6 | `points`, `list`, `comparison`, `process`, `photo`, `statement` |
|
|
99
|
+
| `arena` | Esports & Entertainment | entertainment | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
100
|
+
| `museum` | Museum | museum, culture | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
101
|
+
| `stage` | Keynote Stage | keynote | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
102
|
+
| `lecture` | Lecture Hall | education | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
103
|
+
| `swiss` | Swiss Institutional | institutional | low | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
104
|
+
| `memo` | Decision Memo | business, institutional | low | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
105
|
+
| `playbill` | Playbill | event, entertainment | high | 9 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `hierarchy` |
|
|
106
|
+
<!-- generated:end themes -->
|
|
107
|
+
|
|
108
|
+
## The 11 content kinds
|
|
109
|
+
|
|
110
|
+
`kind` states how a content page makes its point. It is required on every content page and absent from cover, chapter, and ending pages.
|
|
111
|
+
|
|
112
|
+
| `kind` | Use it when | Do not confuse it with |
|
|
113
|
+
| --- | --- | --- |
|
|
114
|
+
| `points` | Ordered reasoning advances step by step | `list`, whose items may be reordered |
|
|
115
|
+
| `list` | Peer items are displayed together | `points`, whose order carries the argument |
|
|
116
|
+
| `comparison` | Alternatives or sides need direct contrast | `hierarchy` for containment, `process` for direction |
|
|
117
|
+
| `process` | Steps, time, movement, or a closed cycle matter | `points` for an argument with no process relation |
|
|
118
|
+
| `data` | A set of numbers, chart, or table is the subject | `fact` for one number only |
|
|
119
|
+
| `photo` | The image itself is the content | `evidence`, where an exhibit supports a claim |
|
|
120
|
+
| `statement` | The deck author's own proposition gets a full page | `quote` for another speaker's words |
|
|
121
|
+
| `quote` | Words are attributed to another speaker or source | `statement` for the deck author's own voice |
|
|
122
|
+
| `fact` | One number carries the whole message | `data` for numeric structure across a set |
|
|
123
|
+
| `evidence` | One assertion is paired with one supporting exhibit | `photo` when the image stands alone |
|
|
124
|
+
| `hierarchy` | The page explains containment, levels, or composition | `process` for sequence, `comparison` for two sides |
|
|
125
|
+
|
|
126
|
+
Four boundaries settle most ambiguous cases:
|
|
127
|
+
|
|
128
|
+
- `statement`, `quote`, `fact`, and `evidence` differ by the speaking subject: our proposition, another person's words, one number, or a claim with an exhibit.
|
|
129
|
+
- `data` exposes structure across several values. `fact` creates impact with one value.
|
|
130
|
+
- `points` has progression. `list` can be reordered.
|
|
131
|
+
- `photo` makes the image the message. `evidence` makes the image serve the assertion.
|
|
132
|
+
|
|
133
|
+
## Write the spec
|
|
134
|
+
|
|
135
|
+
A valid deck spec opens with `cover`, closes with `ending`, and uses `content` or `chapter` inside. Every page has `id`, `type`, and `heading`. Content pages additionally require `kind`. `focus` may name a preferred component type. `summary` is a short content anchor for the fill step.
|
|
77
136
|
|
|
78
|
-
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"version": "1",
|
|
140
|
+
"filename": "q3-review.pptx",
|
|
141
|
+
"narrative": "boardroom-report",
|
|
142
|
+
"theme": "acme-report",
|
|
143
|
+
"meta": { "organization": "Acme", "date": "2026 Q3" },
|
|
144
|
+
"pages": [
|
|
145
|
+
{ "id": "cover", "type": "cover", "heading": "Q3 operating review" },
|
|
146
|
+
{ "id": "decision", "type": "content", "kind": "points", "heading": "Two actions protect the annual target" },
|
|
147
|
+
{ "id": "options", "type": "content", "kind": "comparison", "heading": "The focused plan wins on payback" },
|
|
148
|
+
{ "id": "economics", "type": "content", "kind": "data", "heading": "Margin recovers before year end" },
|
|
149
|
+
{ "id": "delivery", "type": "content", "kind": "process", "heading": "Three releases close the gap" },
|
|
150
|
+
{ "id": "close", "type": "ending", "heading": "Approve the focused plan" }
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
```
|
|
79
154
|
|
|
80
|
-
|
|
155
|
+
The spec contains no page geometry or render selection state. Do not add retired author fields. Page files later contain only fillable content and never repeat `type`, `kind`, or `heading`.
|
|
81
156
|
|
|
82
|
-
|
|
157
|
+
Run:
|
|
83
158
|
|
|
159
|
+
```bash
|
|
160
|
+
pptwise spec validate deck.spec.json
|
|
84
161
|
```
|
|
85
|
-
NARRATIVE_INTERVIEW
|
|
86
|
-
audience: ?
|
|
87
|
-
tell: ?
|
|
88
|
-
pacing: ?
|
|
89
|
-
brand: ?
|
|
90
|
-
```
|
|
91
162
|
|
|
92
|
-
|
|
163
|
+
Fix hard errors until the command prints `OK`. Page count is checked against pacing. Three or more consecutive content pages with the same `kind` produce an editorial warning.
|
|
164
|
+
|
|
165
|
+
## Menu mismatch handling
|
|
93
166
|
|
|
94
|
-
|
|
167
|
+
If the spec requests a `kind` that the bound theme does not offer, validation fails and lists the available kinds. Handle it in this order:
|
|
95
168
|
|
|
96
|
-
`
|
|
97
|
-
|
|
169
|
+
1. Recheck the page's semantic posture. Change `kind` only when another offered word is genuinely correct.
|
|
170
|
+
2. If the page intent is fixed, choose or create a theme whose menu serves it.
|
|
171
|
+
3. If content was already filled, return to the theme layer. Keep useful facts, data, images, and copy fragments, then rewrite the spec and page files for the new menu.
|
|
98
172
|
|
|
99
|
-
|
|
173
|
+
Do not force a nearby word merely to pass validation. A menu gap is a theme decision, not missing geometry.
|
|
100
174
|
|
|
101
|
-
|
|
175
|
+
## Rebinding after work starts
|
|
102
176
|
|
|
103
|
-
|
|
177
|
+
A color fork with the same menu may replace the bound theme. Update the bound name and rerun spec validation, assemble, validate, audit, and render.
|
|
104
178
|
|
|
105
|
-
|
|
179
|
+
A theme with a different menu is not a repaint. It requires restarting at the theme layer and rewriting the spec. The CLI compares normalized menus directly and refuses an in-place different-menu rebind.
|
|
106
180
|
|
|
107
|
-
A very small deck may
|
|
181
|
+
A very small deck may use one IR file instead of a deck project. It still follows the same chain. Its top-level `theme.id` is the binding, and every content slide still requires explicit `kind`.
|
|
@@ -3,110 +3,184 @@ summary: 'skills/pptwise/references/spec.md 的中文阅读镜像'
|
|
|
3
3
|
mirror_of: skills/pptwise/references/spec.md
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# 意图、叙事、主题绑定与 spec
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
何时读:创建 `deck.spec.json`、选择主题、或处理菜单不匹配时。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
作者链条是因果单向的:
|
|
11
11
|
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
pptwise schema --spec # deck spec schema
|
|
15
|
-
pptwise narratives --json # named narrative presets (strategy/pacing/audience axes + theme recommendations)
|
|
16
|
-
pptwise themes --json # built-in themes (id + label)
|
|
12
|
+
```text
|
|
13
|
+
意图 -> 叙事 -> 主题绑定 -> 带 kind 的 spec -> 填充 -> 渲染
|
|
17
14
|
```
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
动手问人之前,先扫工作区。文件能回答的事实不要问人:
|
|
22
|
-
|
|
23
|
-
- 已有确认过的 `deck.spec.json` 已经锁死 narrative、theme、品牌框。不要重做访谈。后续请求走阶段六
|
|
24
|
-
- 已有 `theme.json`、项目 `pptwise.config.json` 钉死的 theme、用户点名的 theme id、或用户递来的 `.thmx` / `.potx` / 带品牌 `.pptx`,都是品牌信号。抽取或沿用。不要再问有没有模板
|
|
25
|
-
- 请求原文已经点名受众、论证方式或疏密,这一轴就算推导出来了。不要再问
|
|
26
|
-
|
|
27
|
-
品牌信号回答的是这份 deck 长什么样,从来不回答它该怎么论证。完整规则在 `references/branding.md`。
|
|
16
|
+
## 读取现场词汇
|
|
28
17
|
|
|
18
|
+
每个 deck 任务开始时运行:
|
|
29
19
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
20
|
+
```bash
|
|
21
|
+
pptwise schema
|
|
22
|
+
pptwise schema --spec
|
|
23
|
+
pptwise narratives --json
|
|
24
|
+
pptwise themes --json
|
|
35
25
|
```
|
|
36
26
|
|
|
37
|
-
|
|
38
|
-
// pages/wrap-up.json — spec type "content", inserted right before the ending page — CORRECT
|
|
39
|
-
{ "components": [{ "type": "bullets", "items": ["Thank you", "Questions? sales@example.com"] }] }
|
|
40
|
-
```
|
|
27
|
+
命令输出与工作区文件优先于本指南。提问前先找已有 `deck.spec.json`、deck 内 `theme.json`、工作区 `themes/`,以及用户递来的 Office 品牌文件。
|
|
41
28
|
|
|
42
|
-
|
|
43
|
-
// pages/closing.json — spec type "ending" — stays bare, nothing to move here
|
|
44
|
-
{}
|
|
45
|
-
```
|
|
29
|
+
## 意图与叙事
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
意图记录讲给谁、要促成什么结果、现场讲述还是传阅、可用时长。叙事是根据意图作出的第一个决定,确定论证方式、节奏与语气。
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
用户在场且仍缺关键事实时,只问一轮简洁问题:
|
|
50
34
|
|
|
51
|
-
|
|
35
|
+
1. 受众是谁,结束后应该决定、理解或做什么?
|
|
36
|
+
2. 会有人现场讲,还是文件必须独立读懂?有多少时间?
|
|
37
|
+
3. 论证应该结论先行、按故事展开、分步教学、突出一个画面或数字,还是写成紧凑简报?
|
|
38
|
+
4. 页面应该密、均衡,还是留白?
|
|
52
39
|
|
|
53
|
-
|
|
54
|
-
- 疏密(留白还是铺满)在访谈里判定(或从请求推导)。钉高潮页、金句页、证据页版式和写 `notes` 时走 `references/layouts.md` 的稀排页合同。`pacing` 不会为此多出第四档
|
|
55
|
-
- 再定 theme id:从 `narratives --json` 里该预设的 `themeRecommendations` 取(如果都不合适,就从 `themes` 输出里挑一个贴合这份 deck 调性的。这只是推荐,从不构成约束)。访谈的品牌问如果返回了模板,先抽成自定义 theme,见 `references/branding.md`
|
|
56
|
-
- 用户一点头,立刻把确认下来的 `narrative`、`theme`、`branding` 写进 `deck.spec.json`,再起草任何一页。不要把答案留在对话里,等页面写完再凭记忆补
|
|
57
|
-
- 起草 `deck.spec.json`:每页一条记录(`id`、`type`、`heading`,可选加 `beat`/`focus`/`summary`)——以 `cover` 开篇,以 `ending` 收尾,中间的每一页都是 `content` 或 `chapter`。三轴与某个预设完全相等时,`narrative` 写预设 id 字符串,否则写 `{strategy, pacing, audience}`。不要写 `{id, pacing}` 这种混形。默认省略 `branding`。只有每一页内容页都需要品牌页脚时才写 `branding: "full"`(`meta.confidentiality` 为 `confidential` 或 `restricted` 时同样写 `"full"`)。不要在 spec 上发明 `typeScale` 字段,那个字段不存在。档是推荐。只有跳过 spec、直接写 IR 时,才允许把 `theme.style.shape.typeScale` 写进 IR
|
|
58
|
-
- 跑 `pptwise spec validate deck.spec.json`,把它报出的问题都修掉,直到打印 `OK`——边界页、标题长度、beat 轮换、页数是否匹配 pacing 这些硬门都在这一步触发,早于任何一页正文的写作
|
|
59
|
-
- `spec validate` 打印 `OK` 之后,在 `deck.spec.json` 里设一个 `seed`(任意整数)以保证修订稳定——现在就写一个,或者在阶段三跑一次 `pptwise assemble`,把它打印出的 `generated seed …` 值抄进 spec。没有固化的 seed,之后改一页的标题就可能打乱其余每一页自动选出的 layout
|
|
40
|
+
用 `pptwise narratives --json` 把答案映射成具名预设,或显式的 `strategy`、`pacing`、`audience`。不要从品牌配色推导叙事。先确认这份叙事包,再选择主题。
|
|
60
41
|
|
|
61
|
-
|
|
42
|
+
## 选择、创建并绑定主题
|
|
62
43
|
|
|
63
|
-
|
|
44
|
+
主题是第二个决定,必须早于 spec。主题是一个完整文件,包含样式、页面菜单、可选品牌规则、`occasions` 与 `identity`。菜单只服务 11 种内容页讲法中的一个明确子集。
|
|
64
45
|
|
|
65
|
-
|
|
46
|
+
先按场合筛选,再按视觉个性强度筛选。用固定样张比较 2 到 4 个候选:
|
|
66
47
|
|
|
67
|
-
|
|
48
|
+
```bash
|
|
49
|
+
pptwise theme try consulting,swiss,memo
|
|
50
|
+
```
|
|
68
51
|
|
|
69
|
-
|
|
52
|
+
`theme try` 用每个候选渲染同一份固定样张 deck。只有这里会在不绑定 deck 的情况下比较主题。按图选,不要只看名字。
|
|
70
53
|
|
|
71
|
-
|
|
54
|
+
创建就是拷贝。即使从出厂预设开始,也优先创建工作区自有主题:
|
|
72
55
|
|
|
73
|
-
|
|
56
|
+
```bash
|
|
57
|
+
pptwise theme new --from consulting --id acme-report
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
有 Office 主题或模板时,先按场合选择菜单来源,再把配色与字体抽进一个完整的 v2 文件:
|
|
74
61
|
|
|
75
|
-
|
|
62
|
+
```bash
|
|
63
|
+
pptwise brand extract corp.pptx -o themes/acme.theme.json --from consulting
|
|
64
|
+
```
|
|
76
65
|
|
|
77
|
-
|
|
66
|
+
已有主题要改色时,fork 它。fork 保持菜单逐字节相同,并重新派生整套配色:
|
|
78
67
|
|
|
79
|
-
|
|
68
|
+
```bash
|
|
69
|
+
pptwise theme fork acme --primary '#0B5FFF' --id acme-blue
|
|
70
|
+
```
|
|
80
71
|
|
|
81
|
-
|
|
72
|
+
主题名按三级解析:
|
|
73
|
+
|
|
74
|
+
1. deck 目录,包括 `theme.json` 与具名主题 JSON。
|
|
75
|
+
2. 从 deck 向上查找的工作区 `themes/`。
|
|
76
|
+
3. 出厂预设。
|
|
77
|
+
|
|
78
|
+
在 `deck.spec.json` 的 `theme` 中写入唯一名称完成绑定。要把工作区主题冻结给单个 deck,保持 id 不变,把完整文件复制到 deck 目录并命名为 `theme.json`。之后 deck 命令会自动装载。
|
|
79
|
+
|
|
80
|
+
<!-- generated:begin themes -->
|
|
81
|
+
### 出厂预设全量表
|
|
82
|
+
|
|
83
|
+
本段由预设库及每个预设的菜单生成。`identity` 表示视觉个性强度。`菜单词数` 与最后一列都只计算内容页讲法。
|
|
84
|
+
|
|
85
|
+
| id | label | occasions | identity | 菜单词数 | 提供的 kind |
|
|
86
|
+
| --- | --- | --- | --- | ---: | --- |
|
|
87
|
+
| `consulting` | Business Consulting | business | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
88
|
+
| `enterprise` | Enterprise | business, institutional | low | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
89
|
+
| `academic` | Academic | education | medium | 11 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `evidence`, `hierarchy` |
|
|
90
|
+
| `insight` | Financial Insight | finance | medium | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
91
|
+
| `campaign` | Marketing Campaign | marketing, event | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
92
|
+
| `classroom` | Classroom | education | medium | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
93
|
+
| `ink` | Ink Wash | culture | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
94
|
+
| `tech` | Tech | tech | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
95
|
+
| `runway` | Fashion Runway | fashion | high | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement` |
|
|
96
|
+
| `journal` | Editorial Journal | editorial | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
97
|
+
| `luxe` | Luxe | luxury, event | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
98
|
+
| `heritage` | Heritage | culture, luxury | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
99
|
+
| `pulse` | Health & Life Science | health | medium | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
100
|
+
| `terra` | Sustainability & ESG | sustainability | medium | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
101
|
+
| `ember` | Startup Pitch | startup | high | 7 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `hierarchy` |
|
|
102
|
+
| `vermilion` | Official Report | government, institutional | low | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
103
|
+
| `crayon` | Kids Education | kids, education | high | 6 | `points`, `list`, `comparison`, `process`, `photo`, `statement` |
|
|
104
|
+
| `arena` | Esports & Entertainment | entertainment | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
105
|
+
| `museum` | Museum | museum, culture | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
106
|
+
| `stage` | Keynote Stage | keynote | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
107
|
+
| `lecture` | Lecture Hall | education | high | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
108
|
+
| `swiss` | Swiss Institutional | institutional | low | 10 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `evidence`, `hierarchy` |
|
|
109
|
+
| `memo` | Decision Memo | business, institutional | low | 9 | `points`, `list`, `comparison`, `process`, `data`, `statement`, `quote`, `fact`, `hierarchy` |
|
|
110
|
+
| `playbill` | Playbill | event, entertainment | high | 9 | `points`, `list`, `comparison`, `process`, `data`, `photo`, `statement`, `fact`, `hierarchy` |
|
|
111
|
+
<!-- generated:end themes -->
|
|
112
|
+
|
|
113
|
+
## 11 种内容页讲法
|
|
114
|
+
|
|
115
|
+
`kind` 说明内容页怎样表达观点。每张内容页必填。封面、章节与结尾不写。
|
|
116
|
+
|
|
117
|
+
| `kind` | 何时使用 | 不要混淆 |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| `points` | 论证按顺序逐步推进 | `list` 的条目可以换序 |
|
|
120
|
+
| `list` | 一组并列项一起陈列 | `points` 的顺序承载论证 |
|
|
121
|
+
| `comparison` | 方案或两边需要直接对照 | 包含关系用 `hierarchy`,方向关系用 `process` |
|
|
122
|
+
| `process` | 步骤、时间、运动或闭环很重要 | 没有流程关系的递进论证用 `points` |
|
|
123
|
+
| `data` | 一组数字、图表或表格是主角 | 只有一个数字时用 `fact` |
|
|
124
|
+
| `photo` | 画面本身就是内容 | 展品服务断言时用 `evidence` |
|
|
125
|
+
| `statement` | 作者自己的一句话立论占满一页 | 借别人之口用 `quote` |
|
|
126
|
+
| `quote` | 文字归属于另一位说话者或来源 | 作者自己的话用 `statement` |
|
|
127
|
+
| `fact` | 一个数字承担整页信息 | 多个数字之间的结构用 `data` |
|
|
128
|
+
| `evidence` | 一个断言配一件支持它的展品 | 图片独立成义时用 `photo` |
|
|
129
|
+
| `hierarchy` | 页面解释包含、层级或组成 | 先后关系用 `process`,两边对照用 `comparison` |
|
|
130
|
+
|
|
131
|
+
四条边界能解决大多数歧义:
|
|
132
|
+
|
|
133
|
+
- `statement`、`quote`、`fact`、`evidence` 的区别在说话主体,分别是自己的立论、别人的话、一个数字、断言加展品。
|
|
134
|
+
- `data` 展示多个值之间的结构。`fact` 用一个值制造冲击。
|
|
135
|
+
- `points` 有递进。`list` 可换序。
|
|
136
|
+
- `photo` 让画面成为信息。`evidence` 让画面服务断言。
|
|
137
|
+
|
|
138
|
+
## 编写 spec
|
|
139
|
+
|
|
140
|
+
合法 spec 以 `cover` 开头,以 `ending` 结束,中间使用 `content` 或 `chapter`。每页都有 `id`、`type`、`heading`。内容页还必须有 `kind`。`focus` 可以点名偏好的组件类型。`summary` 是填充步骤使用的简短内容锚点。
|
|
82
141
|
|
|
83
|
-
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"version": "1",
|
|
145
|
+
"filename": "q3-review.pptx",
|
|
146
|
+
"narrative": "boardroom-report",
|
|
147
|
+
"theme": "acme-report",
|
|
148
|
+
"meta": { "organization": "Acme", "date": "2026 Q3" },
|
|
149
|
+
"pages": [
|
|
150
|
+
{ "id": "cover", "type": "cover", "heading": "Q3 经营复盘" },
|
|
151
|
+
{ "id": "decision", "type": "content", "kind": "points", "heading": "两项动作守住全年目标" },
|
|
152
|
+
{ "id": "options", "type": "content", "kind": "comparison", "heading": "聚焦方案回报更快" },
|
|
153
|
+
{ "id": "economics", "type": "content", "kind": "data", "heading": "利润率在年末前恢复" },
|
|
154
|
+
{ "id": "delivery", "type": "content", "kind": "process", "heading": "三次发布补齐缺口" },
|
|
155
|
+
{ "id": "close", "type": "ending", "heading": "批准聚焦方案" }
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
```
|
|
84
159
|
|
|
85
|
-
|
|
160
|
+
spec 不含页面几何或渲染选择状态。不要加入已退役的作者字段。后续页面文件只装可填内容,不重复 `type`、`kind` 或 `heading`。
|
|
86
161
|
|
|
87
|
-
|
|
162
|
+
运行:
|
|
88
163
|
|
|
164
|
+
```bash
|
|
165
|
+
pptwise spec validate deck.spec.json
|
|
89
166
|
```
|
|
90
|
-
NARRATIVE_INTERVIEW
|
|
91
|
-
audience: ?
|
|
92
|
-
tell: ?
|
|
93
|
-
pacing: ?
|
|
94
|
-
brand: ?
|
|
95
|
-
```
|
|
96
167
|
|
|
97
|
-
|
|
168
|
+
修完硬错误,直到命令打印 `OK`。页数会按 `pacing` 检查。连续三张或更多内容页使用同一个 `kind` 时,会产生编辑提示。
|
|
169
|
+
|
|
170
|
+
## 菜单不匹配怎么处理
|
|
98
171
|
|
|
99
|
-
|
|
172
|
+
spec 请求了绑定主题没有提供的 `kind` 时,校验会失败并列出可用词。按这个顺序处理:
|
|
100
173
|
|
|
101
|
-
|
|
102
|
-
|
|
174
|
+
1. 重查页面的语义姿势。只有另一个可用词确实正确时才改 `kind`。
|
|
175
|
+
2. 页面意图不能变时,选择或创建菜单能服务它的主题。
|
|
176
|
+
3. 已经填过内容时,回到主题层。保留有用的事实、数据、图片与文案片段,再按新菜单重写 spec 与页面文件。
|
|
103
177
|
|
|
104
|
-
|
|
178
|
+
不要为了通过校验硬套一个相近词。菜单缺口是主题决策,不是几何缺口。
|
|
105
179
|
|
|
106
|
-
|
|
180
|
+
## 开工后的换绑
|
|
107
181
|
|
|
108
|
-
|
|
182
|
+
菜单相同的配色 fork 可以替换绑定主题。更新绑定名称,再重跑 spec validate、assemble、validate、audit 与 render。
|
|
109
183
|
|
|
110
|
-
|
|
184
|
+
菜单不同的主题不是换色,必须回到主题层重写 spec。CLI 会直接比较规范化后的菜单,并拒绝流程内换绑到不同菜单。
|
|
111
185
|
|
|
112
|
-
很小的 deck
|
|
186
|
+
很小的 deck 可以使用单个 IR 文件而不是 deck 项目。它仍遵循同一条链。顶层 `theme.id` 是绑定,每张内容页仍必须显式写 `kind`。
|