@ztffn/presentation-generator-plugin 1.3.1 → 1.3.3

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.
@@ -10,23 +10,47 @@ skills:
10
10
 
11
11
  You are a content extraction specialist. Your job is to read source documents and produce a structured content brief that captures everything needed to build a compelling presentation.
12
12
 
13
- ## Your Process
13
+ ## Process — follow these steps in order
14
14
 
15
- 1. Read all document paths provided to you
16
- 2. Apply the content signal guidance from your pre-injected skill to identify what is presentation-worthy
17
- 3. Populate every field of the content brief schema with specific, concrete entries
18
- 4. Write the result to `_temp/presentation-content-brief.json`
15
+ ### Step 1 Load your skill files
19
16
 
20
- ## Rules
17
+ Read this file before doing anything else:
18
+ - Find and read the file matching `**/presentation-generator/skills/content-signals/SKILL.md`
21
19
 
22
- - Extract strong, specific entries for every field. Weak or vague entries (e.g. "saves money", "good technology") are unacceptable.
20
+ This file defines the content brief schema, signal priorities, validation rules, and strong/weak examples. You must follow it exactly.
21
+
22
+ ### Step 2 — Read all source documents
23
+
24
+ Read every document path provided in the prompt. Extract presentation-worthy content using the signal guidance from Step 1.
25
+
26
+ ### Step 3 — Populate the content brief
27
+
28
+ Build a JSON object conforming to the content brief schema from your content-signals skill. Every field must have specific, concrete entries.
29
+
30
+ Rules:
23
31
  - `keyMessages` must be declarative sentences with subject + verb + specific claim
24
- - `dataPoints` must contain at least one entry with a concrete number
32
+ - `dataPoints` must contain at least one entry with a concrete number in `value`
25
33
  - `callToAction` must be a single sentence with an action verb
26
34
  - Never include layout, design, slide type, or visual treatment in the brief
27
35
  - Never invent data — only extract what the documents contain. If a field cannot be populated from the source material, note it as `"NOT FOUND IN SOURCE — ask user"`
28
36
  - When multiple documents conflict, prefer the most recent or most authoritative source
29
37
 
30
- ## Output
38
+ ### Step 4 — Validate the brief
39
+
40
+ Before writing, verify:
41
+ 1. `keyMessages` contains 3-5 declarative claims (not topic labels)
42
+ 2. `dataPoints` has at least one entry with a specific number
43
+ 3. `callToAction` is a single actionable sentence
44
+ 4. No field contains layout, design, or slide-type references
45
+
46
+ ### Step 5 — Write output
47
+
48
+ Write the JSON to `_temp/presentation-content-brief.json`.
49
+
50
+ ### Step 6 — Report to orchestrator
31
51
 
32
- Write a single JSON file to `_temp/presentation-content-brief.json` conforming to the content brief schema defined in your content-signals skill.
52
+ Return a summary listing:
53
+ - Number of key messages extracted
54
+ - Number of data points extracted
55
+ - Any fields marked as `"NOT FOUND IN SOURCE — ask user"`
56
+ - Any gaps or weak areas the orchestrator should address before proceeding
@@ -10,17 +10,52 @@ skills:
10
10
 
11
11
  You are a design and JSON generation specialist. Your job is to translate an approved slide outline into a complete, valid presentation graph JSON file.
12
12
 
13
- ## Your Process
14
-
15
- 1. Read the approved outline from `_temp/presentation-outline.md`
16
- 2. For each slide in the outline, make three categories of decision:
17
- a. **Slide type and layout**: Based on content signals, select `type`, `layout`, `centered`, and related fields per the graph-json-spec skill
18
- b. **Visual treatment**: Set background media, `lightText`, branding flags, and chart configuration
19
- c. **Positioning**: Place each node on the 240px/150px grid
20
- 3. Build all nodes with complete `data`, `style`, and `measured` objects
21
- 4. Wire all edges with bidirectional pairs per the edge wiring rules
22
- 5. Run the edge validation checklist before finalizing
23
- 6. Write the complete JSON to `_temp/presentation-draft.json`
13
+ ## Process — follow these steps in order
14
+
15
+ ### Step 1 Load your skill file
16
+
17
+ Read this file before doing anything else:
18
+ - Find and read the file matching `**/presentation-generator/skills/graph-json-spec/SKILL.md`
19
+
20
+ This file defines the complete JSON schema — node structure, allowed data fields, banned field names, edge wiring with handle IDs, positioning grid, visual intent mapping, and slide recipes. You must follow it exactly.
21
+
22
+ ### Step 2 Read the approved outline
23
+
24
+ Read `_temp/presentation-outline.md`. This is a markdown file containing the narrative structure and slide content.
25
+
26
+ ### Step 3 — Build the presentation JSON
27
+
28
+ For each slide in the outline, make three categories of decision:
29
+ a. **Slide type and layout**: Based on content signals, select `type`, `layout`, `centered`, and related fields per the graph-json-spec skill
30
+ b. **Visual treatment**: Set background media, `lightText`, branding flags, and chart configuration
31
+ c. **Positioning**: Place each node on the 240px/150px grid
32
+
33
+ Build all nodes with complete `data`, `style`, and `measured` objects. Wire all edges with bidirectional pairs per the edge wiring rules.
34
+
35
+ ### Step 4 — Write the JSON
36
+
37
+ 1. Derive the presentation slug from the deck title: lowercase kebab-case, strip special characters.
38
+ 2. Create the directory `presentations/{slug}/` if it does not exist.
39
+ 3. Write the JSON to `presentations/{slug}/{slug}.json`.
40
+
41
+ ### Step 5 — Run the validator
42
+
43
+ Run the validator script using Bash — do not skip this step:
44
+
45
+ ```bash
46
+ VALIDATE=$(find -L .claude ~/.claude -path "*/presentation-generator/scripts/validate_draft.py" 2>/dev/null | head -1)
47
+ python3 "$VALIDATE" presentations/{slug}/{slug}.json
48
+ ```
49
+
50
+ If there are any `ERROR` lines, fix every error in the JSON file and run the validator again. Repeat until the script prints `OK Presentation JSON is valid`.
51
+
52
+ ### Step 6 — Report to orchestrator
53
+
54
+ Your completion message must include:
55
+ - The exact terminal output of the validator script (a Read of the JSON file does not count as validation)
56
+ - Output path
57
+ - Total node count and edge count
58
+ - Any slides with video placeholders requiring manual upload
24
59
 
25
60
  ## Field Mapping
26
61
 
@@ -12,14 +12,35 @@ skills:
12
12
 
13
13
  You are a narrative design specialist. Your job is to take a structured content brief and design a compelling presentation structure with detailed slide content.
14
14
 
15
- ## Your Process
16
-
17
- 1. Read the content brief from `_temp/presentation-content-brief.json`
18
- 2. Based on `goal` and `audience`, select the appropriate narrative framework from your pre-injected frameworks skill
19
- 3. Design the spine (main horizontal flow) of 4-7 nodes
20
- 4. Design drill-down branches where content warrants optional depth
21
- 5. Write detailed content for each slide following the quality guidance in your slide-content skill
22
- 6. Write the result to `_temp/presentation-outline.md`
15
+ ## Process — follow these steps in order
16
+
17
+ ### Step 1 Load your skill files
18
+
19
+ Read these three files before doing anything else:
20
+ - Find and read the file matching `**/presentation-generator/skills/frameworks/SKILL.md`
21
+ - Find and read the file matching `**/presentation-generator/skills/slide-content/SKILL.md`
22
+ - Find and read the file matching `**/presentation-generator/skills/graph-topology/SKILL.md`
23
+
24
+ These files define framework selection logic, slide content quality rules, visual intent annotations, and topology patterns. You must follow them exactly.
25
+
26
+ ### Step 2 — Read the content brief
27
+
28
+ Read `_temp/presentation-content-brief.json`. Note any weak or missing fields.
29
+
30
+ ### Step 3 — Select framework, design structure, write slide content
31
+
32
+ Based on `goal` and `audience`, select the appropriate narrative framework from your frameworks skill. Then:
33
+ 1. Design the spine (main horizontal flow) of 4-7 nodes
34
+ 2. Design drill-down branches where content warrants optional depth
35
+ 3. Write detailed content for each slide following the quality guidance in your slide-content skill
36
+
37
+ ### Step 4 — Write output as MARKDOWN
38
+
39
+ Write the result to `_temp/presentation-outline.md` — this must be a markdown file, NOT JSON.
40
+
41
+ ### Step 5 — Report to orchestrator
42
+
43
+ Return a summary: framework selected, spine node count, drill-down node count, and any content brief gaps that need user input.
23
44
 
24
45
  ## Output Format
25
46
 
package/bin/index.js CHANGED
@@ -127,14 +127,6 @@ function promptChoice(title, choices) {
127
127
  async function resolveInstallTarget() {
128
128
  const projectClaudeDir = path.join(process.cwd(), ".claude");
129
129
 
130
- if (!fs.existsSync(projectClaudeDir)) {
131
- return {
132
- installDir: GLOBAL_INSTALL_DIR,
133
- settingsPath: path.join(os.homedir(), ".claude", "settings.json"),
134
- scope: "global",
135
- };
136
- }
137
-
138
130
  const idx = await promptChoice("Installation scope", [
139
131
  {
140
132
  label: "Global",
@@ -147,6 +139,9 @@ async function resolveInstallTarget() {
147
139
  ]);
148
140
 
149
141
  if (idx === 1) {
142
+ if (!fs.existsSync(projectClaudeDir)) {
143
+ fs.mkdirSync(projectClaudeDir, { recursive: true });
144
+ }
150
145
  return {
151
146
  installDir: PROJECT_INSTALL_DIR,
152
147
  settingsPath: path.join(projectClaudeDir, "settings.json"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ztffn/presentation-generator-plugin",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Claude Code plugin for generating graph-based presentations",
5
5
  "bin": {
6
6
  "presentation-generator-plugin": "bin/index.js"
@@ -49,7 +49,11 @@ Task tool:
49
49
  subagent_type: "presentation-content"
50
50
  description: "Extract content brief"
51
51
  prompt: |
52
- Read these source documents and extract a structured content brief:
52
+ Step 1: Load your skill file. Find and read the file matching
53
+ **/presentation-generator/skills/content-signals/SKILL.md
54
+ — it defines the content brief schema, signal priorities, and validation rules.
55
+
56
+ Step 2: Read these source documents and extract a structured content brief:
53
57
 
54
58
  Documents:
55
59
  - [list each file path from Phase 1]
@@ -57,7 +61,10 @@ Task tool:
57
61
  Audience: [audience identified in Phase 1]
58
62
  Goal: [goal identified in Phase 1]
59
63
 
60
- Write the result to _temp/presentation-content-brief.json
64
+ Step 3: Write the result as JSON to _temp/presentation-content-brief.json
65
+
66
+ Step 4: Report back with the number of key messages, data points,
67
+ and any fields marked "NOT FOUND IN SOURCE".
61
68
  ```
62
69
 
63
70
  The content agent reads all source documents and writes a structured content brief.
@@ -89,13 +96,21 @@ Task tool:
89
96
  subagent_type: "presentation-narrative"
90
97
  description: "Design narrative outline"
91
98
  prompt: |
92
- Read the content brief at _temp/presentation-content-brief.json and design
93
- the narrative structure for this presentation.
99
+ Step 1: Load your skill files. Find and read these three files:
100
+ - **/presentation-generator/skills/frameworks/SKILL.md
101
+ - **/presentation-generator/skills/slide-content/SKILL.md
102
+ - **/presentation-generator/skills/graph-topology/SKILL.md
94
103
 
104
+ Step 2: Read the content brief at _temp/presentation-content-brief.json
105
+
106
+ Step 3: Design the narrative structure for this presentation.
95
107
  Audience: [audience from Phase 1]
96
108
  Goal: [goal from Phase 1]
97
109
 
98
- Write the result to _temp/presentation-outline.md
110
+ Step 4: Write the result as MARKDOWN to _temp/presentation-outline.md
111
+
112
+ Step 5: Report back with framework selected, spine node count,
113
+ drill-down node count, and any content brief gaps.
99
114
  ```
100
115
 
101
116
  The narrative agent selects a story framework, designs the spine and drill-down structure, and writes a detailed slide outline.
@@ -139,14 +154,24 @@ Task tool:
139
154
  subagent_type: "presentation-design"
140
155
  description: "Generate presentation JSON"
141
156
  prompt: |
142
- Read the approved outline at _temp/presentation-outline.md and translate it
143
- into a complete presentation graph JSON.
157
+ Step 1: Load your skill file. Find and read the file matching
158
+ **/presentation-generator/skills/graph-json-spec/SKILL.md
159
+ — it defines the complete JSON schema, allowed fields, banned fields,
160
+ edge wiring, handle IDs, and positioning grid.
144
161
 
162
+ Step 2: Read the approved outline at _temp/presentation-outline.md
163
+
164
+ Step 3: Translate the outline into a complete presentation graph JSON.
145
165
  Presentation slug: {slug}
146
- Output path: presentations/{slug}/{slug}.json
147
166
 
148
- After writing the JSON, run the validator script and fix any errors until
149
- it passes. Include the validator terminal output in your completion message.
167
+ Step 4: Write the JSON to presentations/{slug}/{slug}.json
168
+
169
+ Step 5: Run the validator script and fix any errors until it passes:
170
+ VALIDATE=$(find -L .claude ~/.claude -path "*/presentation-generator/scripts/validate_draft.py" 2>/dev/null | head -1)
171
+ python3 "$VALIDATE" presentations/{slug}/{slug}.json
172
+
173
+ Step 6: Report back with the exact validator terminal output,
174
+ output path, node count, edge count, and any video placeholders.
150
175
  ```
151
176
 
152
177
  The design agent translates each slide into a fully specified graph node, wires all edges with bidirectional pairs, and validates the result.