konpeki 0.2.0 → 0.3.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/AGENTS.md +1 -1
- package/CONTRIBUTING.md +36 -0
- package/README.md +54 -18
- package/SECURITY.md +22 -0
- package/SETUP.md +112 -51
- package/composition/README.md +16 -3
- package/composition/compile.ts +1 -1
- package/composition/schema.json +9 -0
- package/composition/schema.ts +3 -1
- package/composition/types.ts +3 -1
- package/design/themes/README.md +25 -7
- package/design/themes/index.ts +15 -4
- package/docs/development.md +71 -11
- package/docs/workflow.md +11 -4
- package/index.html +17 -1
- package/package.json +8 -2
- package/plugin.json +22 -0
- package/public/og.png +0 -0
- package/runtime/konpeki.mjs +41 -13
- package/skills/konpeki/SKILL.md +186 -0
- package/skills/konpeki/assets/blank.json +23 -0
- package/skills/konpeki/scripts/ensure-runtime.mjs +69 -0
- package/skills/konpeki/scripts/prepare-document.mjs +40 -0
- package/slides/introducing-konpeki/PROMPT.md +21 -0
- package/slides/introducing-konpeki/README.md +52 -30
- package/slides/introducing-konpeki/SOURCE.md +16 -10
- package/slides/introducing-konpeki/author.ts +44 -42
- package/slides/introducing-konpeki/composition.json +135 -135
- package/src/app/App.tsx +87 -19
- package/src/components/Canvas.tsx +1 -1
- package/src/components/InspectorPanel.tsx +93 -40
- package/src/components/WorkspaceChrome.tsx +92 -5
- package/src/lib/storage.ts +38 -10
- package/src/main.tsx +3 -0
- package/src/styles/chrome.css +97 -25
- package/src/styles/feedback.css +20 -3
- package/src/styles/right-panel.css +28 -27
- package/src/styles/shell.css +60 -29
- package/.agents/skills/authoring-visuals/SKILL.md +0 -93
|
@@ -17,3 +17,24 @@ is not the complete conversation record.
|
|
|
17
17
|
- Sources: the repository's documented capabilities;
|
|
18
18
|
see SOURCE.md for concrete references and qualifications.
|
|
19
19
|
- Deliverable: composition JSON, browser presentation, reviewed captures.
|
|
20
|
+
|
|
21
|
+
## Public revision request
|
|
22
|
+
|
|
23
|
+
> review the example composition and revise if needed
|
|
24
|
+
|
|
25
|
+
### Adaptation record
|
|
26
|
+
|
|
27
|
+
- Requested mode: unspecified. Resolved mode: retain default.
|
|
28
|
+
- Scope: review the introduction against the current skill-led creation,
|
|
29
|
+
file-backed revision and browser-only playground workflows.
|
|
30
|
+
- Position Konpeki as a creator of editable visuals, not primarily a slide
|
|
31
|
+
explainer. Show a creation brief without a mandatory init or canvas-drafting step;
|
|
32
|
+
keep the canvas-first intent / Build it workflow as an alternative.
|
|
33
|
+
- Distinguish browser-local playground storage from an agent-opened file session.
|
|
34
|
+
Notes and Build it need the latter; Copy prompt resumes an idle agent.
|
|
35
|
+
- Replace contributor setup commands with skill installation and current user
|
|
36
|
+
prerequisites. Do not imply that every agent uses the same slash command.
|
|
37
|
+
- Preserve the six pages, existing Precision/Paper appearance, stable IDs and
|
|
38
|
+
unrelated geometry. Precision uses Noto Sans; the IBM Plex direction above
|
|
39
|
+
records the original creation, not the current theme.
|
|
40
|
+
- Refresh the editable JSON, authoring source, source notes and reviewed captures.
|
|
@@ -1,54 +1,76 @@
|
|
|
1
1
|
# Introducing Konpeki
|
|
2
2
|
|
|
3
|
-
A six-
|
|
3
|
+
A six-page English introduction for first-time users. Defaults to Precision on paper
|
|
4
4
|
with theme-linked colors and fonts; deck appearance can switch palettes and
|
|
5
5
|
Paper/Night without repainting vector elements. Uses the default authoring mode.
|
|
6
6
|
|
|
7
|
-
1. **Meet Konpeki** —
|
|
8
|
-
2. **
|
|
7
|
+
1. **Meet Konpeki** — create editable visuals with your coding agent.
|
|
8
|
+
2. **Create and revise together** — brief, generate, edit and revise the same file.
|
|
9
9
|
3. **Five semantic components** — Text block, Diagram, Chart, Image and Table.
|
|
10
|
-
4. **Keep the detail editable** —
|
|
11
|
-
5. **
|
|
12
|
-
6. **Try a real brief** —
|
|
10
|
+
4. **Keep the detail editable** — direct editing and targeted agent revision notes.
|
|
11
|
+
5. **Browser or agent editor** — local playground versus file-backed editing.
|
|
12
|
+
6. **Try a real brief** — install the skill and give a one-sentence creation request.
|
|
13
13
|
|
|
14
14
|
## Open and revise
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
`?example=introducing-konpeki` in the application.
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
For repository development, run `mise exec -- pnpm dev` from the root and open
|
|
17
|
+
`?example=introducing-konpeki` in the application. A static build serves the same
|
|
18
|
+
example after `mise exec -- pnpm build`. Select **Present** for viewing.
|
|
19
|
+
|
|
20
|
+
Edits autosave to this example's separate browser-local working copy when storage
|
|
21
|
+
is available. **Browser → Download JSON** keeps a portable copy; **Import JSON**
|
|
22
|
+
and **Start blank** replace only this working copy. **Reset example** restores
|
|
23
|
+
the bundled version. Download existing work before resetting, including when
|
|
24
|
+
loading an updated example. Browser storage is not a backup and does not sync
|
|
25
|
+
with an agent's file. The playground has no connected agent, Notes or Build it.
|
|
26
|
+
|
|
27
|
+
For agent-backed editing, follow [SETUP.md](../../SETUP.md) to install the complete
|
|
28
|
+
skill, then ask your agent to open a downloaded or copied composition file.
|
|
29
|
+
Browser and agent revisions use that same file in its preview. Continue feedback
|
|
30
|
+
in agent chat, or use Notes / Build it and Copy prompt as described in the
|
|
31
|
+
[canvas workflow](../../docs/workflow.md). A creation brief selects generate;
|
|
32
|
+
init is optional, not a required first step.
|
|
20
33
|
|
|
21
34
|
[composition.json](composition.json) is the authoritative editable deck. Each
|
|
22
|
-
|
|
35
|
+
page contains semantic components. Ordinary text uses native content and typography
|
|
23
36
|
fields; diagrams and custom specimens keep editable vector elements. Double-click
|
|
24
37
|
ordinary text to edit it directly; Content intent remains separate agent guidance.
|
|
25
38
|
This is not a second React deck runtime or a collection of page images.
|
|
26
39
|
|
|
27
|
-
[author.ts](author.ts) records the
|
|
28
|
-
`node slides/introducing-konpeki/author.ts` validates and regenerates the JSON;
|
|
40
|
+
[author.ts](author.ts) records the reviewed drawing instructions. Running
|
|
41
|
+
`mise exec -- node slides/introducing-konpeki/author.ts` validates and regenerates the JSON;
|
|
29
42
|
it **replaces manual canvas revisions**, so do not rerun it over revised work.
|
|
30
43
|
See [the public brief excerpt](PROMPT.md) and [source facts / provenance](SOURCE.md).
|
|
31
44
|
|
|
32
45
|
## Review
|
|
33
46
|
|
|
34
|
-
- `pnpm check`, `pnpm test` (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
and `agent-browser`
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
- `mise exec -- pnpm check`, `mise exec -- pnpm test` (106 tests),
|
|
48
|
+
`mise exec -- pnpm build`, composition validation and `git diff --check`: passed.
|
|
49
|
+
The build retains its existing large-chunk advisory.
|
|
50
|
+
- Inspected all six canvas pages in Precision Paper, Precision Night and Editorial
|
|
51
|
+
Paper at 1920×1080 and 1024×768, DPR2 (36 states). No clipped text or overlapping
|
|
52
|
+
labels. Revised the file/playground wording and kept the revision arrow returning
|
|
53
|
+
from Revise to Edit, not to a new brief.
|
|
54
|
+
- `review.mjs` checked text bounds after font loading and each authored vector
|
|
55
|
+
viewport against its component rectangle within 0.5 screen pixels at both sizes.
|
|
56
|
+
With a dev or preview server and `agent-browser` available, run:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
mise exec -- node slides/introducing-konpeki/review.mjs http://localhost:4318 /tmp/konpeki-intro Precision paper
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Repeat with `Precision night` and `Editorial paper`; inspect captures after
|
|
63
|
+
the assertions pass. The script defaults to Plex if no palette is supplied and
|
|
64
|
+
explicitly selects its legacy font pairing. An optional final typography ID
|
|
65
|
+
tests independent combinations, such as `Green paper plex-serif` or
|
|
66
|
+
`Plex night noto-sans`; both passed all six pages at both sizes after separation.
|
|
67
|
+
- Precision Paper's accessibility tree exposes page copy, visual descriptions
|
|
68
|
+
and the chart's illustrative values. Home / ArrowRight navigation reached all
|
|
69
|
+
six pages; Noto Sans weights 400, 500 and 600 loaded. Text on the white canvas
|
|
70
|
+
measures 15.59:1 (ink), 6.91:1 (muted) and 9.54:1 (accent).
|
|
50
71
|
- Final reviewed presentation captures: [screenshots](screenshots/).
|
|
51
72
|
- Chart values are illustrative; diagrams are explanatory artwork, not screenshots.
|
|
52
|
-
-
|
|
73
|
+
- Native agent-client installation, PDF/PPTX, mobile, reduced motion, focus styling
|
|
74
|
+
and cross-application fidelity were not verified by this content review.
|
|
53
75
|
|
|
54
76
|

|
|
@@ -4,17 +4,23 @@ This is a factual introduction to Konpeki, not a fictional customer case study.
|
|
|
4
4
|
|
|
5
5
|
| Claim | Repository evidence |
|
|
6
6
|
| --- | --- |
|
|
7
|
-
|
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
7
|
+
| Covers, social graphics, charts, diagrams and presentations share an editable canvas | [Product introduction](../../README.md); [authoring guidance](../../AUTHORING.md) |
|
|
8
|
+
| Install the complete skill; a creation brief selects generate, with init optional | [Setup](../../SETUP.md); [canvas workflow](../../docs/workflow.md) |
|
|
9
|
+
| In a file-backed preview, valid browser and agent changes update the same composition JSON | [File-backed workflow](../../docs/workflow.md#file-backed-editing-with-an-agent) |
|
|
10
|
+
| Five top-level kinds: Text block, Diagram, Chart, Image, Table; stable editable vector IDs | [Composition contract](../../composition/README.md); [types](../../composition/types.ts) |
|
|
11
|
+
| Direct text, shape and layout editing with undo/redo | [Product capabilities](../../README.md); [composition operations](../../composition/document.ts) |
|
|
12
|
+
| Diagram, Chart and Table previews are structural drafts; real source data is needed for finished artwork | [Canvas workflow](../../docs/workflow.md#documents-and-exports); [factual-fidelity rules](../../AUTHORING.md#requirements) |
|
|
13
|
+
| Revision notes and Build it belong to file-backed sessions; Copy prompt resumes an idle agent | [Review handoff](../../docs/workflow.md#file-backed-editing-with-an-agent) |
|
|
14
|
+
| Playground examples save independent browser-local copies; import/download JSON, start blank, reset, PNG and Present are available | [Demo hosting](../../docs/development.md#development-server-and-demo-hosting); [storage implementation](../../src/lib/storage.ts); [browser controls](../../src/components/WorkspaceChrome.tsx) |
|
|
15
|
+
| Playground files do not sync with an agent session; there is no connected AI or cloud storage | [Demo hosting](../../docs/development.md#development-server-and-demo-hosting) |
|
|
16
|
+
| Agent workflow requires Node.js 24+, npm, file/command access and a browser; contributor pnpm setup is separate | [User setup](../../SETUP.md); [development setup](../../docs/development.md) |
|
|
14
17
|
|
|
15
18
|
The architecture drawings, vector selection example and component specimens are
|
|
16
19
|
original explanatory artwork for this deck, not product screenshots. The tiny
|
|
17
20
|
chart uses explicitly labeled illustrative values, not measured product data.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
The product-announcement prompt is an example brief, not a customer result.
|
|
22
|
+
No third-party image assets or customer claims are used. The retained Precision
|
|
23
|
+
theme uses Noto Sans from the repository's Fontsource dependency; theme-linked
|
|
24
|
+
text follows the selected palette's font roles. No PDF/PPTX or cross-application
|
|
25
|
+
fidelity is claimed. This deck does not establish native agent-client installation
|
|
26
|
+
compatibility or an official hosted playground URL.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Authoring source. composition.json is the editable deck of record.
|
|
2
2
|
// Re-running this script replaces it; preserve canvas revisions before rebuilding.
|
|
3
3
|
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { canonicalJSON } from "../../composition/compile.ts";
|
|
4
5
|
import { createComponent } from "../../composition/document.ts";
|
|
5
6
|
import { validateComposition } from "../../composition/validate.ts";
|
|
6
7
|
import {
|
|
@@ -24,6 +25,7 @@ function arrow(id: string, x: number, y: number, end: number) {
|
|
|
24
25
|
}
|
|
25
26
|
function component(id: string, kind: CompositionComponent["kind"], x: number, y: number, width: number, height: number, description: string, elements: VectorElement[]): CompositionComponent {
|
|
26
27
|
const base = createComponent(kind, 1);
|
|
28
|
+
if (base.kind === "diagram" || base.kind === "chart") base.appearance.selection = "explicit";
|
|
27
29
|
return { ...base, id, slotIds: [`${id}-content`], preferredRect: { x, y, width, height }, intent: description,
|
|
28
30
|
customVisual: { format: "vector", viewBox: { x: 0, y: 0, width, height }, fit: "contain", description, elements } };
|
|
29
31
|
}
|
|
@@ -52,40 +54,40 @@ function heading(id: string, title: string, subtitle: string) {
|
|
|
52
54
|
const slides: CompositionSlide[] = [];
|
|
53
55
|
slides.push(slide("introduction", "Meet Konpeki", "What is Konpeki?", [
|
|
54
56
|
copy("brand", 112, 140, 820, ["Konpeki"], 112, blue, 600),
|
|
55
|
-
copy("promise", 112, 328, 960, ["
|
|
56
|
-
copy("summary", 112, 548, 870, ["
|
|
57
|
+
copy("promise", 112, 328, 960, ["Create clear visuals", "with your coding agent."], 56, ink, 500),
|
|
58
|
+
copy("summary", 112, 548, 870, ["Bring a brief. Get an editable result.", "Keep revising the same document."], 36, muted),
|
|
57
59
|
component("shared-canvas", "diagram", 1090, 185, 700, 590, "A single editable composition contains a headline, diagram and supporting text; people and agents revise it.", [
|
|
58
60
|
rect("canvas-frame", 8, 25, 670, 395),
|
|
59
|
-
text("canvas-title", "
|
|
61
|
+
text("canvas-title", "From brief to visual", 45, 93, 36, ink, 500),
|
|
60
62
|
path("headline-rule", "M45 120H640", line, 2),
|
|
61
63
|
rect("source-node", 50, 183, 160, 90, blue), rect("result-node", 310, 183, 320, 90, blue),
|
|
62
|
-
text("source-label", "
|
|
64
|
+
text("source-label", "Brief", 98, 239, 28), text("result-label", "Editable visual", 374, 239, 28),
|
|
63
65
|
arrow("connection", 228, 228, 292),
|
|
64
66
|
path("body-lines", "M50 323H395M50 351H525", line, 8),
|
|
65
67
|
text("document-label", "composition.json", 178, 484, 32, blue, 500),
|
|
66
68
|
text("participants", "Human edits + agent revisions", 116, 548, 28, muted),
|
|
67
69
|
]),
|
|
68
|
-
copy("intro-note", 112, 870, 1696, ["
|
|
70
|
+
copy("intro-note", 112, 870, 1696, ["Covers, social graphics, charts, diagrams and presentations."], 34),
|
|
69
71
|
]));
|
|
70
72
|
|
|
71
|
-
slides.push(slide("workflow", "
|
|
72
|
-
...heading("workflow", "
|
|
73
|
-
component("roundtrip", "diagram", 112, 342, 1696, 470, "
|
|
73
|
+
slides.push(slide("workflow", "Create and revise together", "How do a person and an agent work together?", [
|
|
74
|
+
...heading("workflow", "Start with a brief. Keep editing the result.", "In the agent-opened editor, you and your agent edit the same file."),
|
|
75
|
+
component("roundtrip", "diagram", 112, 342, 1696, 470, "Share a brief and materials. The agent creates a visual and opens its file-backed preview. Edit that canvas, then ask for revisions in the same conversation. The agent updates the same file; the loop returns to editing, not a new brief.", [
|
|
74
76
|
...[0, 1, 2, 3].flatMap((index) => {
|
|
75
77
|
const x = index * 438;
|
|
76
78
|
return [text(`number-${index}`, `0${index + 1}`, x, 48, 26, blue, 500),
|
|
77
|
-
text(`step-${index}`, ["
|
|
78
|
-
text(`detail-a-${index}`, ["
|
|
79
|
-
text(`detail-b-${index}`, ["Describe the
|
|
79
|
+
text(`step-${index}`, ["Brief", "Generate", "Edit", "Revise"][index], x, 122, 42, ink, 500),
|
|
80
|
+
text(`detail-a-${index}`, ["Share your materials.", "Agent creates a visual.", "Edit the open canvas.", "Ask in the same chat."][index], x, 190, 29, muted),
|
|
81
|
+
text(`detail-b-${index}`, ["Describe the result.", "Opens its file preview.", "Review the details.", "Agent updates that file."][index], x, 234, 29, muted),
|
|
80
82
|
...(index < 3 ? [arrow(`handoff-${index}`, x + 338, 109, x + 398)] : [])];
|
|
81
83
|
}),
|
|
82
|
-
path("revision-loop", "M1510
|
|
83
|
-
text("loop-label", "
|
|
84
|
+
path("revision-loop", "M1510 285V365H991V285M979 299L991 285L1003 299", blue),
|
|
85
|
+
text("loop-label", "Both edit the same composition.json", 490, 431, 32, blue),
|
|
84
86
|
]),
|
|
85
|
-
copy("workflow-note", 112, 870, 1696, ["
|
|
87
|
+
copy("workflow-note", 112, 870, 1696, ["Prefer to sketch first? Add a component, describe its intent, then choose Build it."], 34, ink),
|
|
86
88
|
]));
|
|
87
89
|
|
|
88
|
-
slides.push(slide("components", "Five semantic components", "What can a
|
|
90
|
+
slides.push(slide("components", "Five semantic components", "What can a page contain?", [
|
|
89
91
|
...heading("components", "Five components. One composition.", "Each component keeps its meaning, outer geometry and editable interior."),
|
|
90
92
|
component("text-specimen", "text-block", 112, 360, 296, 360, "Text block: headlines, body text, captions and footnotes.", [
|
|
91
93
|
text("label", "Text block", 0, 40, 38, ink, 500), text("sample", "Aa", 0, 166, 96, blue),
|
|
@@ -111,14 +113,14 @@ slides.push(slide("components", "Five semantic components", "What can a slide co
|
|
|
111
113
|
text("label", "Table", 0, 40, 38, ink, 500),
|
|
112
114
|
text("col-a", "Stage", 0, 120, 26, ink, 500), text("col-b", "Owner", 157, 120, 26, ink, 500),
|
|
113
115
|
path("rules", "M0 136H285M0 190H285M0 244H285", line, 2),
|
|
114
|
-
text("row-a", "
|
|
116
|
+
text("row-a", "Create", 0, 174, 25), text("row-a-owner", "Agent", 157, 174, 25), text("row-b", "Review", 0, 228, 25), text("row-b-owner", "You", 157, 228, 25),
|
|
115
117
|
text("detail", "Structured detail", 0, 317, 28, muted),
|
|
116
118
|
]),
|
|
117
|
-
copy("component-note", 112,
|
|
119
|
+
copy("component-note", 112, 848, 1696, ["Diagram, Chart and Table previews are structural drafts.", "Give the agent real data and sources for finished artwork."], 32, ink),
|
|
118
120
|
]));
|
|
119
121
|
|
|
120
122
|
slides.push(slide("editing", "Keep the detail editable", "What remains editable after an agent finishes?", [
|
|
121
|
-
...heading("editing", "
|
|
123
|
+
...heading("editing", "Keep editing—or ask your agent", "Change text, shapes and layout directly. Undo and redo stay available."),
|
|
122
124
|
component("editable-diagram", "diagram", 112, 340, 980, 475, "Explanatory illustration: a selected Review node inside its owning Diagram component. The shape keeps stable ID review-node.", [
|
|
123
125
|
rect("owner", 5, 5, 965, 390), text("owner-label", "Diagram · review-flow", 35, 53, 27, muted),
|
|
124
126
|
rect("draft", 55, 158, 220, 120), rect("review-node", 385, 158, 220, 120, blue), rect("present", 715, 158, 220, 120),
|
|
@@ -127,37 +129,37 @@ slides.push(slide("editing", "Keep the detail editable", "What remains editable
|
|
|
127
129
|
...[[380,153],[600,153],[380,273],[600,273]].map(([x,y], i) => rect(`handle-${i}`,x,y,10,10,blue)),
|
|
128
130
|
text("stable-id", "Selected element: review-node", 36, 450, 32, blue),
|
|
129
131
|
]),
|
|
130
|
-
copy("editing-actions-title", 1210, 343, 580, ["
|
|
131
|
-
copy("editing-actions", 1210, 440, 580, ["
|
|
132
|
-
copy("editing-note", 112,
|
|
132
|
+
copy("editing-actions-title", 1210, 343, 580, ["Ask for a targeted revision"], 35, ink, 500),
|
|
133
|
+
copy("editing-actions", 1210, 440, 580, ["Select a component or element.", "Add a Revision note in Notes.", "Choose Build it to submit.", "Agent revises the same file."], 31, muted),
|
|
134
|
+
copy("editing-note", 112, 852, 1696, ["Notes and Build it are available in the agent-opened editor, not the browser playground.", "Build it cannot wake an idle agent. Use Copy prompt to resume it."], 32, ink),
|
|
133
135
|
]));
|
|
134
136
|
|
|
135
|
-
slides.push(slide("today", "
|
|
136
|
-
...heading("today", "
|
|
137
|
-
copy("available-heading", 112, 350, 790, ["
|
|
138
|
-
copy("available-1", 112, 451, 790, ["
|
|
139
|
-
copy("available-2", 112, 605, 790, ["
|
|
140
|
-
copy("available-3", 112, 790, 790, ["
|
|
141
|
-
copy("limits-heading", 1020, 350, 788, ["
|
|
142
|
-
copy("limits-1", 1020, 451, 788, ["
|
|
143
|
-
copy("limits-2", 1020, 605, 788, ["
|
|
144
|
-
copy("limits-3", 1020, 790, 788, ["
|
|
137
|
+
slides.push(slide("today", "Browser or agent editor", "What can I do here, and what needs a coding agent?", [
|
|
138
|
+
...heading("today", "Try the browser. Continue with your agent.", "The same editable format, with different saving and generation paths."),
|
|
139
|
+
copy("available-heading", 112, 350, 790, ["Browser playground"], 42, blue, 500),
|
|
140
|
+
copy("available-1", 112, 451, 790, ["Edit an example or start blank.", "Import editable composition JSON."], 33),
|
|
141
|
+
copy("available-2", 112, 605, 790, ["Saved only in this browser.", "No connected agent or cloud sync."], 33),
|
|
142
|
+
copy("available-3", 112, 790, 790, ["Download JSON to keep your work.", "Export PNG or use Present."], 32, ink),
|
|
143
|
+
copy("limits-heading", 1020, 350, 788, ["With your coding agent"], 42, ink, 500),
|
|
144
|
+
copy("limits-1", 1020, 451, 788, ["The agent creates and revises visuals.", "Its preview saves to a local JSON file."], 33),
|
|
145
|
+
copy("limits-2", 1020, 605, 788, ["Bring downloaded JSON to your agent.", "Continue in its file-backed editor."], 33),
|
|
146
|
+
copy("limits-3", 1020, 790, 788, ["Playground and file copies do not sync.", "Review generated facts and visuals."], 32, ink),
|
|
145
147
|
]));
|
|
146
148
|
|
|
147
149
|
slides.push(slide("start", "Try a real brief", "How do I start?", [
|
|
148
|
-
...heading("start", "
|
|
149
|
-
copy("setup-heading", 112, 350, 710, ["
|
|
150
|
+
...heading("start", "Install the skill. Bring a real brief.", "Ask for a cover, social graphic, chart, diagram or presentation."),
|
|
151
|
+
copy("setup-heading", 112, 350, 710, ["Install the Konpeki skill"], 40, ink, 500),
|
|
150
152
|
copy("repository", 112, 435, 850, ["github.com/vcfgdev/konpeki"], 38, blue, 500),
|
|
151
|
-
copy("commands", 112, 543, 840, ["
|
|
152
|
-
copy("requirements", 112, 696, 780, ["Node.js 24+ ·
|
|
153
|
-
copy("brief-heading", 1020, 350, 788, ["
|
|
154
|
-
copy("brief", 1020, 450, 788, ["“
|
|
155
|
-
copy("next-step", 1020,
|
|
156
|
-
copy("closing", 112, 906, 1696, ["
|
|
153
|
+
copy("commands", 112, 543, 840, ["Use your agent’s skill installer.", "Choose skills/konpeki in the repo."], 34),
|
|
154
|
+
copy("requirements", 112, 696, 780, ["Node.js 24+ · npm", "An agent with file + command access", "A browser for the editable preview"], 32, ink),
|
|
155
|
+
copy("brief-heading", 1020, 350, 788, ["Then give it one sentence"], 40, ink, 500),
|
|
156
|
+
copy("brief", 1020, 450, 788, ["“Use Konpeki to turn these launch", "notes into a product announcement.”"], 35),
|
|
157
|
+
copy("next-step", 1020, 696, 788, ["Need an empty canvas? Ask for init.", "A creation brief selects generate."], 32, blue, 500),
|
|
158
|
+
copy("closing", 112, 906, 1696, ["Attach your materials; the agent opens and checks the editable result. No separate init needed."], 30, muted),
|
|
157
159
|
]));
|
|
158
160
|
|
|
159
|
-
const document: CompositionDocument = { schema: compositionSchema, title: "Introducing Konpeki", authoringMode: "default", theme: { id: "
|
|
161
|
+
const document: CompositionDocument = { schema: compositionSchema, title: "Introducing Konpeki", authoringMode: "default", theme: { id: "precision", mode: "paper" }, slides };
|
|
160
162
|
const result = validateComposition(document);
|
|
161
163
|
if (!result.ok) throw new Error(JSON.stringify(result.issues, null, 2));
|
|
162
|
-
await writeFile(new URL("./composition.json", import.meta.url),
|
|
164
|
+
await writeFile(new URL("./composition.json", import.meta.url), canonicalJSON(result.document) + "\n");
|
|
163
165
|
console.log(`Authored ${slides.length} editable slides.`);
|