@ztffn/presentation-generator-plugin 1.2.0 → 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/.claude-plugin/plugin.json +1 -1
- package/README.md +15 -17
- package/agents/presentation-design.md +55 -8
- package/package.json +1 -1
- package/skills/graph-json-spec/SKILL.md +812 -0
- package/skills/presentation-generator/SKILL.md +1 -1
- package/skills/slide-content/SKILL.md +45 -0
- package/.github/workflows/publish.yml +0 -61
- package/skills/edge-conventions/SKILL.md +0 -97
- package/skills/layout-templates/SKILL.md +0 -315
- package/skills/node-schema/SKILL.md +0 -135
- package/skills/pitch-reference/SKILL.md +0 -164
- package/skills/positioning/SKILL.md +0 -89
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "presentation-generator",
|
|
3
3
|
"description": "Generate complete graph-based presentations from natural language briefs and project documents. Includes a three-agent pipeline: content extraction, narrative design, and graph JSON compilation.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Huma"
|
|
7
7
|
},
|
package/README.md
CHANGED
|
@@ -133,27 +133,25 @@ Pushing the tag triggers the publish workflow. Team members get the update with
|
|
|
133
133
|
## Plugin structure
|
|
134
134
|
|
|
135
135
|
```
|
|
136
|
-
presentation-generator/
|
|
136
|
+
presentation-generator-plugin/
|
|
137
137
|
├── .claude-plugin/
|
|
138
138
|
│ └── plugin.json
|
|
139
|
+
├── package.json
|
|
140
|
+
├── bin/
|
|
141
|
+
│ └── index.js
|
|
139
142
|
├── agents/
|
|
140
143
|
│ ├── presentation-content.md
|
|
141
144
|
│ ├── presentation-narrative.md
|
|
142
145
|
│ └── presentation-design.md
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
│ ├── layout-templates.md
|
|
155
|
-
│ └── positioning.md
|
|
156
|
-
└── examples/
|
|
157
|
-
├── pitch-reference.json
|
|
158
|
-
└── presentation-guide.md
|
|
146
|
+
├── skills/
|
|
147
|
+
│ ├── presentation-generator/
|
|
148
|
+
│ │ ├── SKILL.md # Orchestrator skill
|
|
149
|
+
│ │ └── presentation-guide.md
|
|
150
|
+
│ ├── content-signals/SKILL.md # Content extraction patterns
|
|
151
|
+
│ ├── frameworks/SKILL.md # Narrative frameworks
|
|
152
|
+
│ ├── slide-content/SKILL.md # Slide writing quality
|
|
153
|
+
│ ├── graph-topology/SKILL.md # Spine/drill-down structure
|
|
154
|
+
│ └── graph-json-spec/SKILL.md # Complete graph JSON spec (design agent)
|
|
155
|
+
└── scripts/
|
|
156
|
+
└── validate_draft.py
|
|
159
157
|
```
|
|
@@ -3,11 +3,7 @@ name: presentation-design
|
|
|
3
3
|
description: Translates approved slide outlines into complete graph JSON with nodes, edges, positions, and visual treatments. Pure translation — never alters content or structure from the outline.
|
|
4
4
|
tools: Read, Write, Bash
|
|
5
5
|
skills:
|
|
6
|
-
- presentation-generator:
|
|
7
|
-
- presentation-generator:edge-conventions
|
|
8
|
-
- presentation-generator:layout-templates
|
|
9
|
-
- presentation-generator:positioning
|
|
10
|
-
- presentation-generator:pitch-reference
|
|
6
|
+
- presentation-generator:graph-json-spec
|
|
11
7
|
---
|
|
12
8
|
|
|
13
9
|
# Design & JSON Generation Agent
|
|
@@ -18,11 +14,11 @@ You are a design and JSON generation specialist. Your job is to translate an app
|
|
|
18
14
|
|
|
19
15
|
1. Read the approved outline from `_temp/presentation-outline.md`
|
|
20
16
|
2. For each slide in the outline, make three categories of decision:
|
|
21
|
-
a. **Slide type and layout**: Based on content signals, select `type`, `layout`, `centered`, and related fields
|
|
17
|
+
a. **Slide type and layout**: Based on content signals, select `type`, `layout`, `centered`, and related fields per the graph-json-spec skill
|
|
22
18
|
b. **Visual treatment**: Set background media, `lightText`, branding flags, and chart configuration
|
|
23
|
-
c. **Positioning**: Place each node on the grid
|
|
19
|
+
c. **Positioning**: Place each node on the 240px/150px grid
|
|
24
20
|
3. Build all nodes with complete `data`, `style`, and `measured` objects
|
|
25
|
-
4. Wire all edges with bidirectional pairs
|
|
21
|
+
4. Wire all edges with bidirectional pairs per the edge wiring rules
|
|
26
22
|
5. Run the edge validation checklist before finalizing
|
|
27
23
|
6. Write the complete JSON to `_temp/presentation-draft.json`
|
|
28
24
|
|
|
@@ -39,6 +35,57 @@ When translating from the outline to `data` fields, use **exactly** these SlideN
|
|
|
39
35
|
**DO NOT use these field names** — they are not part of the schema and will be silently ignored by the renderer:
|
|
40
36
|
`headline`, `subheadline`, `bullets`, `speakerNote`, `speakerNotes`, `visualHint`, `theme`, `title`, `body`, `text`, `background`, `showLogo`, `keyMessage`, `claim`, `hook`, `description`, `summary`
|
|
41
37
|
|
|
38
|
+
## Valid Enum Values
|
|
39
|
+
|
|
40
|
+
- `data.type`: `"content"` (default) | `"r3f"` | `"chart"` | `"custom"`
|
|
41
|
+
- `data.layout`: `"single"` (default) | `"two-column"` (splits content on `---`)
|
|
42
|
+
- `data.centered`: `true` (default) | `false`
|
|
43
|
+
- `data.backgroundImageFit`: `"cover"` (default) | `"contain"`
|
|
44
|
+
- `data.backgroundVideoFit`: `"cover"` (default) | `"contain"`
|
|
45
|
+
|
|
46
|
+
## Positioning Grid
|
|
47
|
+
|
|
48
|
+
- Horizontal spacing: 240px between nodes
|
|
49
|
+
- Vertical spacing: 150px between levels
|
|
50
|
+
- Node size: always `{ width: 180, height: 70 }` in both `style` and `measured`
|
|
51
|
+
- Spine: all at y:0, x increments by 240 (0, 240, 480, 720...)
|
|
52
|
+
- Drill-down level 1: y:150, same x as parent
|
|
53
|
+
- Drill-down level 2: y:300
|
|
54
|
+
- Siblings at same depth: increment x by 240
|
|
55
|
+
|
|
56
|
+
## Chart Config
|
|
57
|
+
|
|
58
|
+
Charts use a `config` wrapper for axis and display settings:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{ "chartType": "bar", "data": [...], "config": { "xKey": "quarter", "yKeys": ["revenue", "cost"], "showGrid": true, "showLegend": true } }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- Inline: put in `charts` record, reference with `[chart:name]` in content
|
|
65
|
+
- Full-viewport: put in `chart` field, set `type: "chart"`
|
|
66
|
+
- Chart types: `"bar"` | `"line"` | `"area"` | `"pie"` | `"radar"`
|
|
67
|
+
|
|
68
|
+
## Reference Node
|
|
69
|
+
|
|
70
|
+
A complete correct node for pattern-matching:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"id": "problem",
|
|
75
|
+
"type": "huma",
|
|
76
|
+
"position": { "x": 240, "y": 0 },
|
|
77
|
+
"data": {
|
|
78
|
+
"label": "The Problem",
|
|
79
|
+
"topic": "01 / Problem",
|
|
80
|
+
"content": "## Linear tools break complex stories\n\n- Point one\n- Point two",
|
|
81
|
+
"notes": "Speaker notes here",
|
|
82
|
+
"centered": false
|
|
83
|
+
},
|
|
84
|
+
"style": { "width": 180, "height": 70 },
|
|
85
|
+
"measured": { "width": 180, "height": 70 }
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
42
89
|
## Edge Handle Rules
|
|
43
90
|
|
|
44
91
|
**WRONG** — these handle values will break navigation:
|