@bendyline/gilde 0.1.44 → 0.1.45
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/authoring/chat-models/deepseek-r1-8b-q4.json +1 -1
- package/authoring/chat-models/gemma4-31b-q4.json +1 -1
- package/authoring/chat-models/gpt-oss-120b-q4.json +1 -1
- package/authoring/chat-models/gpt-oss-20b-q4.json +1 -1
- package/authoring/chat-models/lfm2.5-2.6b-q4.json +1 -1
- package/authoring/chat-models/llama3.2-3b-q4.json +1 -1
- package/authoring/chat-models/mistral-7b-q4.json +1 -1
- package/authoring/chat-models/mistral-medium-3.5-128b-q4.json +1 -1
- package/authoring/chat-models/nemotron3-nano-30b-q4.json +1 -1
- package/authoring/chat-models/nemotron3-super-120b-q4.json +1 -1
- package/authoring/chat-models/ornith1.5-35b-a3b-q4.json +150 -0
- package/authoring/chat-models/qwen3.5-2b-q4.json +1 -1
- package/authoring/chat-models/qwen3.5-4b-q4.json +1 -1
- package/authoring/chat-models/qwen3.5-9b-q4.json +1 -1
- package/authoring/chat-models/talkie-1930-13b-q4.json +1 -1
- package/data/chat-models/de/deepseek-r1-8b-q4/manifest.json +1 -1
- package/data/chat-models/ge/gemma4-31b-q4/manifest.json +1 -1
- package/data/chat-models/gp/gpt-oss-120b-q4/manifest.json +1 -1
- package/data/chat-models/gp/gpt-oss-20b-q4/manifest.json +1 -1
- package/data/chat-models/index.json +1 -1
- package/data/chat-models/lf/lfm2.5-2.6b-q4/manifest.json +1 -1
- package/data/chat-models/ll/llama3.2-3b-q4/manifest.json +1 -1
- package/data/chat-models/mi/mistral-7b-q4/manifest.json +1 -1
- package/data/chat-models/mi/mistral-medium-3.5-128b-q4/manifest.json +1 -1
- package/data/chat-models/ne/nemotron3-nano-30b-q4/manifest.json +1 -1
- package/data/chat-models/ne/nemotron3-super-120b-q4/manifest.json +1 -1
- package/data/chat-models/or/ornith1.5-35b-a3b-q4/manifest.json +208 -0
- package/data/chat-models/or/ornith1.5-35b-a3b-q4/versions/1.0.0/manifest.json +74 -0
- package/data/chat-models/qw/qwen3.5-2b-q4/manifest.json +1 -1
- package/data/chat-models/qw/qwen3.5-4b-q4/manifest.json +1 -1
- package/data/chat-models/qw/qwen3.5-9b-q4/manifest.json +1 -1
- package/data/chat-models/ta/talkie-1930-13b-q4/manifest.json +1 -1
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.7/craftbook.json +404 -0
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.7/test.json +241 -0
- package/package.json +1 -1
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "powerpoint-deck",
|
|
3
|
+
"name": "PowerPoint from Content",
|
|
4
|
+
"description": "Turn supplied content or a factual topic into a real, editable PowerPoint. Supplied sources remain authoritative, and internet research is strongly recommended for factual grounding; topic-only runs may proceed without it when access is unavailable or the deck is explicitly exploratory, provided unsupported facts are not invented. A researcher records the source boundary and fact ledger before a planner locks a numbered slide outline. A copywriter writes a task-specific Markdown deck with exactly one H1 per outline slide, while deterministic gates keep the slide count, titles, and order aligned. A reviewer checks factual traceability before a designer converts the Markdown to PPTX, previews every slide, and saves the requested PPTX in artifacts.\n\nEvery run's working files default to the task's own artifact folder (tasks/<num>/) and its deck to a task-specific workspace folder, so source packets, outlines, Markdown, and reviews cannot collide with an earlier PowerPoint task. Artifact working files must be read and written with the artifact tools; the Markdown deck source and user-facing PowerPoint remain in the workspace.",
|
|
5
|
+
"entryStepId": "research",
|
|
6
|
+
"triggers": [
|
|
7
|
+
"make a powerpoint",
|
|
8
|
+
"create a pptx",
|
|
9
|
+
"powerpoint from this content",
|
|
10
|
+
"turn this into a presentation",
|
|
11
|
+
"build a slide deck file",
|
|
12
|
+
"export these slides to powerpoint"
|
|
13
|
+
],
|
|
14
|
+
"recommends": [
|
|
15
|
+
{
|
|
16
|
+
"kind": "external-services",
|
|
17
|
+
"reason": "the research step verifies sources with live web search"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"toolsets": [
|
|
21
|
+
{
|
|
22
|
+
"toolsetId": "docblocks",
|
|
23
|
+
"sourceId": "bundled",
|
|
24
|
+
"autoAllow": true,
|
|
25
|
+
"reason": "convert the task-specific Markdown deck directly to PPTX, preview slides, and save the finished PowerPoint without a prompt per call"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"paramSchema": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"workPath": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"title": "Working folder",
|
|
34
|
+
"description": "Per-task working folder in the artifacts drawer for the source packet, outline, review, and retained PPTX. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
|
|
35
|
+
"default": "{{task.dir}}"
|
|
36
|
+
},
|
|
37
|
+
"outputDir": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"title": "Deck folder",
|
|
40
|
+
"description": "Project-workspace-relative folder for the Markdown deck source and the finished PowerPoint. Defaults to a task-specific path; override it with a stable name such as powerpoint/india when useful.",
|
|
41
|
+
"default": "powerpoint/task-{{task.num}}"
|
|
42
|
+
},
|
|
43
|
+
"outputPath": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"title": "Workspace output path",
|
|
46
|
+
"description": "Project-workspace-relative path for the finished PowerPoint.",
|
|
47
|
+
"default": "{{outputDir}}/deck.pptx"
|
|
48
|
+
},
|
|
49
|
+
"sourcePath": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"title": "Source file",
|
|
52
|
+
"description": "Optional exact workspace-relative path to authoritative source content. Leave blank when the deck starts from a topic that needs web research.",
|
|
53
|
+
"default": ""
|
|
54
|
+
},
|
|
55
|
+
"topic": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"title": "Topic",
|
|
58
|
+
"description": "The factual topic or question the deck should address.",
|
|
59
|
+
"default": ""
|
|
60
|
+
},
|
|
61
|
+
"content": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"title": "Inline source brief",
|
|
64
|
+
"description": "Optional inline source material or factual brief for the deck.",
|
|
65
|
+
"default": ""
|
|
66
|
+
},
|
|
67
|
+
"audience": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"title": "Audience",
|
|
70
|
+
"description": "The people who will view the deck and the decision they need to make.",
|
|
71
|
+
"default": "general audience"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"anyOf": [
|
|
75
|
+
{
|
|
76
|
+
"required": [
|
|
77
|
+
"sourcePath"
|
|
78
|
+
],
|
|
79
|
+
"properties": {
|
|
80
|
+
"sourcePath": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"minLength": 1
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"required": [
|
|
88
|
+
"topic"
|
|
89
|
+
],
|
|
90
|
+
"properties": {
|
|
91
|
+
"topic": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"minLength": 1
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"required": [
|
|
99
|
+
"content"
|
|
100
|
+
],
|
|
101
|
+
"properties": {
|
|
102
|
+
"content": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"minLength": 1
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"steps": [
|
|
111
|
+
{
|
|
112
|
+
"id": "research",
|
|
113
|
+
"name": "Acquire and verify sources",
|
|
114
|
+
"description": "Read the exact supplied source and strongly prefer authoritative research before outlining, while allowing an honest no-research path.",
|
|
115
|
+
"prompt": "Build the source packet before planning any slides. This run's artifact working folder is `{{workPath}}` and its workspace deck folder is `{{outputDir}}`. Files outside it—including an earlier `notes/outline.md`, root `deck.md`, or another PowerPoint task directory—are not inputs and must not be read or reused unless `{{sourcePath}}` names one exactly. Exact source path: `{{sourcePath}}`. Topic: `{{topic}}`. Inline source brief: `{{content}}`. Audience: `{{audience}}`. 0. If source path, topic, and inline content are all empty, call `ask_user_question` for the missing subject or exact source and stop. Do not call `read_task_notes`, inspect the workspace, or reuse an earlier deck while the source boundary is missing. 1. When `{{sourcePath}}` is non-empty, your FIRST source action is `read_file` on that exact path. Never replace a named source with a similarly named file, and never skip a supplied source. 2. Otherwise treat non-empty `{{content}}` as supplied source material and `{{topic}}` as the research question. FIRST call `search` for `{{topic}}` to check what the user already has — the shared document library, project and gezel memories, artifacts, and installed knowledge catalogs are all covered by that one call. Open a shared-library hit with `read_document`, a workspace hit with `read_file`, an artifact hit with `read_artifact`. Anything you find there is a citable source: record it in the table by its exact path, and prefer it over an external page when the two disagree, because it is the user’s own material. Then add external grounding: use `web_search` when registered, otherwise `wikipedia_search`. Wikipedia search results already carry each top article’s lead text, so read and cite them straight from the search result. Call `wikipedia_read` with a result’s exact title only when you need more of that one article. Use `fetch_url` or browser automation for non-Wikipedia pages only — passing a wikipedia.org URL to `fetch_url` returns the rendered page (scripts and navigation chrome) and is cut off before the article text begins. Prefer primary sources, official statistics, standards bodies, peer-reviewed work, or reputable institutional summaries. You may proceed without external research when external tools are unavailable or when the topic is explicitly exploratory, generative, or proposal-oriented. If you skip it, say so plainly, record why, frame unsourced content as original concepts or reasoning rather than established fact, and do not invent a source, URL, research result, or tool-verification workaround. Do not treat model memory, the task prompt, an earlier deck, or an invented URL as research. 3. Write `{{workPath}}/sources.md` with: the invocation inputs and their boundary; research status (`completed` or `skipped`, with reason); a source table with title, resolvable URL or exact file path, authority/date, and intended use (the table may be empty when research was honestly skipped); a fact ledger where every number, quotation, and externally checkable claim carries `(source: URL-or-path)`; a separate ledger of original proposals or reasoning that makes no factual-source claim; conflicts and uncertainties; and facts that must not be invented. Do not silently overwrite supplied facts with external claims—record conflicts explicitly. 4. When any source was used, include at least one resolvable citation. When none was used, include no citation rather than fabricating one. Call `write_task_note` with the sources used—or that research was skipped—and any uncertainty. Do not draft the outline or deck yet.\n\nStore `{{workPath}}/sources.md` in the artifacts drawer with `write_artifact`, then verify it with `read_artifact`; do not write this working file to the workspace.",
|
|
116
|
+
"suggestedRole": "researcher",
|
|
117
|
+
"advanceWhen": {
|
|
118
|
+
"file": "{{workPath}}/sources.md",
|
|
119
|
+
"minBytes": 1,
|
|
120
|
+
"sniff": "nonempty",
|
|
121
|
+
"artifact": true
|
|
122
|
+
},
|
|
123
|
+
"gate": {
|
|
124
|
+
"at": "completion",
|
|
125
|
+
"checks": [
|
|
126
|
+
{
|
|
127
|
+
"kind": "minBytes",
|
|
128
|
+
"file": "{{workPath}}/sources.md",
|
|
129
|
+
"bytes": 500,
|
|
130
|
+
"artifact": true
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"kind": "citationsResolve",
|
|
134
|
+
"file": "{{workPath}}/sources.md",
|
|
135
|
+
"minCitations": 0,
|
|
136
|
+
"artifact": true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"kind": "researchEvidence",
|
|
140
|
+
"sourcePath": "{{sourcePath}}",
|
|
141
|
+
"tools": [
|
|
142
|
+
"web_search",
|
|
143
|
+
"wikipedia_search",
|
|
144
|
+
"wikipedia_read",
|
|
145
|
+
"fetch_url",
|
|
146
|
+
"browser_navigate",
|
|
147
|
+
"run_playwright_script"
|
|
148
|
+
],
|
|
149
|
+
"minSuccessful": 1,
|
|
150
|
+
"externalOptional": true
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"onReject": "research",
|
|
154
|
+
"maxAttempts": 3
|
|
155
|
+
},
|
|
156
|
+
"next": "outline"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "outline",
|
|
160
|
+
"name": "Lock the slide outline",
|
|
161
|
+
"description": "Lock the audience, purpose, sequence, evidence, and one message per slide.",
|
|
162
|
+
"prompt": "Read `{{workPath}}/sources.md` and plan the deck from its verified fact ledger and original-proposal ledger. If `{{sourcePath}}` is non-empty, also read that exact source. Do not borrow facts, titles, or slide content from an earlier outline or deck outside `{{workPath}}`; a requested similarity is a structural constraint, not permission to mix source packets. 1. State the audience, occasion, and ONE takeaway. 2. Use exactly the slide count the user asked for; only when they gave none, draft 8-15 slides. Format every slide heading exactly as `## Slide N — Title`, numbered consecutively from 1. Under each heading write `Message:`, `Evidence:`, and `Visual:`. Every sourced factual evidence line must point to a citation already recorded in `{{workPath}}/sources.md`. When research was skipped, original concepts and reasoned recommendations may be labeled `PROPOSAL` and need no citation; mark any unsupported externally checkable claim `UNVERIFIED` rather than filling gaps from memory. 3. Open with context, make the middle a coherent argument, and close with the ask or next step. Include a Sources slide in this locked outline when the audience needs visible references and sources actually exist. 4. Write acceptance criteria: every numbered outline slide must become exactly one H1 in {{outputDir}}/deck.md, with the same title and order; one idea per slide; no wall of text; factual claims remain traceable; proposals remain clearly framed as proposals; visual preview passes; an artifact copy is retained; and the exact workspace file `{{outputPath}}` is delivered. Write only `{{workPath}}/outline.md`, then call `write_task_note` with the exact slide count, takeaway, and requested output path. Do not write slide content or presentation code.\n\nOpen `{{workPath}}/sources.md` from the artifacts drawer with `read_artifact` before working. Store `{{workPath}}/outline.md` in the artifacts drawer with `write_artifact`, then verify it with `read_artifact`; do not write this working file to the workspace.",
|
|
163
|
+
"suggestedRole": "planner",
|
|
164
|
+
"advanceWhen": {
|
|
165
|
+
"file": "{{workPath}}/outline.md",
|
|
166
|
+
"minBytes": 1,
|
|
167
|
+
"sniff": "nonempty",
|
|
168
|
+
"artifact": true
|
|
169
|
+
},
|
|
170
|
+
"gate": {
|
|
171
|
+
"at": "completion",
|
|
172
|
+
"checks": [
|
|
173
|
+
{
|
|
174
|
+
"kind": "minBytes",
|
|
175
|
+
"file": "{{workPath}}/outline.md",
|
|
176
|
+
"bytes": 500,
|
|
177
|
+
"artifact": true
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"kind": "contains",
|
|
181
|
+
"file": "{{workPath}}/outline.md",
|
|
182
|
+
"pattern": "(?:^|\\n)#{2,6}\\s+(?:Slide\\s+)?1(?:\\s*[.:\\-–—]\\s*|\\s+)\\S",
|
|
183
|
+
"flags": "i",
|
|
184
|
+
"label": "a numbered Slide 1 heading",
|
|
185
|
+
"artifact": true
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"kind": "citationsResolve",
|
|
189
|
+
"file": "{{workPath}}/outline.md",
|
|
190
|
+
"minCitations": 0,
|
|
191
|
+
"artifact": true
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"onReject": "outline",
|
|
195
|
+
"maxAttempts": 3
|
|
196
|
+
},
|
|
197
|
+
"next": "write",
|
|
198
|
+
"consumes": [
|
|
199
|
+
{
|
|
200
|
+
"file": "{{workPath}}/sources.md",
|
|
201
|
+
"artifact": true
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "write",
|
|
207
|
+
"name": "Write the Markdown deck",
|
|
208
|
+
"description": "Write {{outputDir}}/deck.md with exactly one matching H1 per locked outline slide.",
|
|
209
|
+
"prompt": "Read `{{workPath}}/sources.md` and `{{workPath}}/outline.md`, then write `{{outputDir}}/deck.md` to the locked sequence. 1. For every `## Slide N — Title` in the outline, create exactly one `# Title` H1 in {{outputDir}}/deck.md, preserving the title and order verbatim. Do not add, merge, drop, or reorder slides. Do not add `---` separators unless a visible horizontal rule is intended. Slides are split on H1: a deck whose slides are `##` converts to ONE slide, so never use `##` for a slide and never add a `# ` document title. 2. Under each H1, land that slide's one message with 3-6 short bullet phrases, a compact Markdown table, or a short quotation; never use paragraph walls. 3. Keep every factual claim traceable to `{{workPath}}/sources.md`. Put concise `(source: URL-or-path)` citations next to load-bearing figures/claims. Use a Sources slide only when it is already in the locked outline; never add an unoutlined slide. Never invent a number, quotation, organization, or URL. 4. Bold the load-bearing figure or claim. 5. The final H1 must be the outline's ask or next-step slide. 6. On loop-back, repair only the mismatch or claim the gate/reviewer names. Call `write_task_note` with the path and H1 count. Do not create HTML, JavaScript, OOXML, or PPTX bytes.\n\nOpen `{{workPath}}/sources.md`, `{{workPath}}/outline.md` from the artifacts drawer with `read_artifact` before working.",
|
|
210
|
+
"suggestedRole": "copywriter",
|
|
211
|
+
"advanceWhen": {
|
|
212
|
+
"file": "{{outputDir}}/deck.md",
|
|
213
|
+
"minBytes": 1,
|
|
214
|
+
"sniff": "nonempty"
|
|
215
|
+
},
|
|
216
|
+
"gate": {
|
|
217
|
+
"at": "completion",
|
|
218
|
+
"checks": [
|
|
219
|
+
{
|
|
220
|
+
"kind": "minBytes",
|
|
221
|
+
"file": "{{outputDir}}/deck.md",
|
|
222
|
+
"bytes": 700
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"kind": "contains",
|
|
226
|
+
"file": "{{outputDir}}/deck.md",
|
|
227
|
+
"pattern": "(?:^|\\n)#\\s+\\S",
|
|
228
|
+
"label": "at least one H1 slide heading"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"kind": "markdownHeadingsMatch",
|
|
232
|
+
"file": "{{outputDir}}/deck.md",
|
|
233
|
+
"outlineFile": "{{workPath}}/outline.md",
|
|
234
|
+
"outlineArtifact": true
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"kind": "citationsResolve",
|
|
238
|
+
"file": "{{outputDir}}/deck.md",
|
|
239
|
+
"minCitations": 0
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"onReject": "write",
|
|
243
|
+
"maxAttempts": 4
|
|
244
|
+
},
|
|
245
|
+
"next": "review",
|
|
246
|
+
"consumes": [
|
|
247
|
+
{
|
|
248
|
+
"file": "{{workPath}}/sources.md",
|
|
249
|
+
"artifact": true
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"file": "{{workPath}}/outline.md",
|
|
253
|
+
"artifact": true
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"id": "review",
|
|
259
|
+
"name": "Review narrative and grounding",
|
|
260
|
+
"description": "Verify slide parity, factual traceability, and presentation readiness before conversion.",
|
|
261
|
+
"prompt": "Read `{{workPath}}/sources.md`, `{{workPath}}/outline.md`, and `{{outputDir}}/deck.md`. Write `{{workPath}}/review.md` with PASS/FAIL for every criterion: (1) each numbered outline slide appears exactly once as an H1 with the same title and order; (2) the deck opens with context and closes with the locked ask; (3) each slide has one message and concise content; (4) every number, quote, and externally checkable claim maps to a real `(source: URL-or-path)` entry in the source packet; (5) no `UNVERIFIED` claim is presented as fact; (6) tables and visuals are purposeful and likely to fit. Cite `{{workPath}}/sources.md`, `{{workPath}}/outline.md`, and `{{outputDir}}/deck.md` as `(source: path)` when recording evidence. Any failure must name the slide and exact repair. If every criterion passes, call `advance_task_step({ ref, stepId: \"review\", next: \"publish\" })`. If any criterion fails, call `advance_task_step({ ref, stepId: \"review\", next: \"write\" })`. Never publish a failed or ungrounded deck.\n\nOpen `{{workPath}}/sources.md`, `{{workPath}}/outline.md` from the artifacts drawer with `read_artifact` before working. Store `{{workPath}}/review.md` in the artifacts drawer with `write_artifact`, then verify it with `read_artifact`; do not write this working file to the workspace.",
|
|
262
|
+
"suggestedRole": "reviewer",
|
|
263
|
+
"gate": {
|
|
264
|
+
"at": "completion",
|
|
265
|
+
"checks": [
|
|
266
|
+
{
|
|
267
|
+
"kind": "minBytes",
|
|
268
|
+
"file": "{{workPath}}/review.md",
|
|
269
|
+
"bytes": 400,
|
|
270
|
+
"artifact": true
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"kind": "contains",
|
|
274
|
+
"file": "{{workPath}}/review.md",
|
|
275
|
+
"pattern": "PASS|FAIL",
|
|
276
|
+
"flags": "i",
|
|
277
|
+
"label": "explicit PASS/FAIL verdicts",
|
|
278
|
+
"artifact": true
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"kind": "markdownHeadingsMatch",
|
|
282
|
+
"file": "{{outputDir}}/deck.md",
|
|
283
|
+
"outlineFile": "{{workPath}}/outline.md",
|
|
284
|
+
"outlineArtifact": true
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"kind": "citationsResolve",
|
|
288
|
+
"file": "{{workPath}}/review.md",
|
|
289
|
+
"minCitations": 3,
|
|
290
|
+
"artifact": true
|
|
291
|
+
}
|
|
292
|
+
],
|
|
293
|
+
"onReject": "review",
|
|
294
|
+
"maxAttempts": 3
|
|
295
|
+
},
|
|
296
|
+
"next": "write",
|
|
297
|
+
"consumes": [
|
|
298
|
+
{
|
|
299
|
+
"file": "{{workPath}}/sources.md",
|
|
300
|
+
"artifact": true
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"file": "{{workPath}}/outline.md",
|
|
304
|
+
"artifact": true
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"file": "{{outputDir}}/deck.md"
|
|
308
|
+
}
|
|
309
|
+
]
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"id": "publish",
|
|
313
|
+
"name": "Publish the PowerPoint",
|
|
314
|
+
"description": "Convert {{outputDir}}/deck.md with DocBlocks, preview every slide, retain an artifact, and deliver {{outputPath}}.",
|
|
315
|
+
"prompt": "Publish the reviewed `{{outputDir}}/deck.md` as a real editable PowerPoint with the pre-authorized DocBlocks tools. 1. Call `list_roots` and identify the read-enabled workspace root and write-enabled artifacts root. If there is no write root, report the blocker rather than substituting HTML. 2. Call `convert_document` ONCE for this approved revision with source `{ \"kind\": \"file\", \"rootId\": <workspace root id>, \"path\": \"{{outputDir}}/deck.md\" }`, target `[{ \"format\": \"pptx\", \"fidelity\": \"editable-native\", \"slideBreak\": \"h1\", \"title\": <deck title> }]`, an audience-appropriate theme, and `autoTemplates: true`. 3. Call `preview_document` with source `{ \"kind\": \"artifact\", \"uri\": <the artifact uri returned by convert_document> }`. `source` is an OBJECT, never the bare URI string, and the artifact form takes exactly the two keys `kind` and `uri` — any other key is rejected. Paginate with `startIndex` plus `maxItems` (20 maximum per call). Inspect every slide: the preview slide count must equal the H1 count in {{outputDir}}/deck.md; no overflow or tiny text; tables legible; hierarchy consistent. If QA fails, do not save a known-bad PPTX or silently remove content—record the exact slide and route back to write. 4. When preview passes, call `save_artifact` with destination `{ \"rootId\": <artifacts root id>, \"path\": \"{{workPath}}/deck.pptx\", \"ifExists\": \"error\" }`; on a loop-back, replace only with the current expectedSha256. 5. DocBlocks can write only to the artifacts root, so land the workspace copy with `copy_artifact_to_workspace` using source `\"{{workPath}}/deck.pptx\"` and dest `\"{{outputPath}}\"` — one call, no text/binary round-trip. Never rebuild the PPTX with `write_file`; it corrupts the binary. If `copy_artifact_to_workspace` is not in your tool list this turn, stop and report that exact blocker with `write_task_note`, naming the retained artifact path — do not substitute an HTML deck, a renamed text file, or a second `save_artifact` aimed at the workspace root. 6. Call `write_task_note` with the artifact path, workspace path, slide count, theme, and preview result. Do not hand-build an HTML deck or presentation XML.",
|
|
316
|
+
"suggestedRole": "designer",
|
|
317
|
+
"advanceWhen": {
|
|
318
|
+
"file": "{{outputPath}}",
|
|
319
|
+
"minBytes": 1
|
|
320
|
+
},
|
|
321
|
+
"gate": {
|
|
322
|
+
"at": "completion",
|
|
323
|
+
"checks": [
|
|
324
|
+
{
|
|
325
|
+
"kind": "minBytes",
|
|
326
|
+
"file": "{{outputPath}}",
|
|
327
|
+
"bytes": 1000
|
|
328
|
+
}
|
|
329
|
+
],
|
|
330
|
+
"onReject": "publish",
|
|
331
|
+
"maxAttempts": 4
|
|
332
|
+
},
|
|
333
|
+
"next": "evaluate",
|
|
334
|
+
"consumes": [
|
|
335
|
+
{
|
|
336
|
+
"file": "{{outputDir}}/deck.md"
|
|
337
|
+
}
|
|
338
|
+
]
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "evaluate",
|
|
342
|
+
"name": "Evaluate the saved deck",
|
|
343
|
+
"description": "Review the PPTX against the locked source, outline, and visual criteria.",
|
|
344
|
+
"prompt": "Review the retained artifact `{{workPath}}/deck.pptx` against `{{workPath}}/sources.md`, `{{workPath}}/outline.md`, and `{{workPath}}/review.md`. Use `list_roots` to identify the artifacts root and `preview_document` with source `{ \"kind\": \"file\", \"rootId\": <artifacts root id>, \"path\": \"{{workPath}}/deck.pptx\" }`; inspect all slides. Confirm: it is a real PPTX; `workspace/{{outputPath}}` exists; the preview slide count equals the locked outline/H1 count; every outlined slide appears once and in order; source facts and citations remain visible or are represented by the outlined Sources slide; each slide has one message; text/tables fit; theme is consistent; the closing ask is present; and the retained `{{workPath}}/deck.pptx` and `workspace/{{outputPath}}` represent the same approved revision. Write PASS/FAIL for every criterion. Every pass routes to `finish`; a content, grounding, density, or slide-structure failure routes to `write`; a conversion, theme, save, or copy failure with {{outputDir}}/deck.md still approved routes to `publish`. Never route to finish while a criterion is unmet. After about three unproductive loops, stop with DONE_WITH_CONCERNS.\n\nOpen `{{workPath}}/sources.md`, `{{workPath}}/outline.md`, `{{workPath}}/review.md` from the artifacts drawer with `read_artifact` before working.\n\nOpen the retained `{{workPath}}/deck.pptx` from the artifacts drawer with `read_artifact`.",
|
|
345
|
+
"suggestedRole": "reviewer",
|
|
346
|
+
"next": "write",
|
|
347
|
+
"consumes": [
|
|
348
|
+
{
|
|
349
|
+
"file": "{{workPath}}/sources.md",
|
|
350
|
+
"artifact": true
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"file": "{{workPath}}/outline.md",
|
|
354
|
+
"artifact": true
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"file": "{{outputDir}}/deck.md"
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"file": "{{workPath}}/review.md",
|
|
361
|
+
"artifact": true
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"file": "{{outputPath}}"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"file": "{{workPath}}/deck.pptx",
|
|
368
|
+
"artifact": true
|
|
369
|
+
}
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"id": "finish",
|
|
374
|
+
"name": "Finish",
|
|
375
|
+
"description": "All research, narrative, slide, and file checks passed.",
|
|
376
|
+
"prompt": "Every acceptance criterion passed. Call `write_task_note` with a short DONE summary naming `{{workPath}}/sources.md`, `{{workPath}}/outline.md`, and `{{outputDir}}/deck.md` as the grounded source chain, `{{workPath}}/deck.pptx` as the retained artifact, and `workspace/{{outputPath}}` as the user-facing deliverable, plus the slide count and confirmation that visual preview passed. Then report DONE.\n\nOpen `{{workPath}}/sources.md`, `{{workPath}}/outline.md` from the artifacts drawer with `read_artifact` before working.\n\nOpen the retained `{{workPath}}/deck.pptx` from the artifacts drawer with `read_artifact`.",
|
|
377
|
+
"suggestedRole": "designer",
|
|
378
|
+
"terminal": true,
|
|
379
|
+
"consumes": [
|
|
380
|
+
{
|
|
381
|
+
"file": "{{workPath}}/sources.md",
|
|
382
|
+
"artifact": true
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"file": "{{workPath}}/outline.md",
|
|
386
|
+
"artifact": true
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"file": "{{outputDir}}/deck.md"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"file": "{{outputPath}}"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"file": "{{workPath}}/deck.pptx",
|
|
396
|
+
"artifact": true
|
|
397
|
+
}
|
|
398
|
+
]
|
|
399
|
+
}
|
|
400
|
+
],
|
|
401
|
+
"version": "1.7.7",
|
|
402
|
+
"releasedAt": "2026-08-26T14:00:00Z",
|
|
403
|
+
"minGezelVersion": "1.26233"
|
|
404
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "PowerPoint source-acquisition, outline parity, and DocBlocks production",
|
|
4
|
+
"objective": "Measure the whole PowerPoint route in one eval: acquire and cite sources, hold the deck to its own outline, and then actually PRODUCE the binary — 1.5.0 graded only the Markdown and 1.4.0 graded only the production, so each on its own let half the recipe pass unverified.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"corpus",
|
|
7
|
+
"research",
|
|
8
|
+
"grounding",
|
|
9
|
+
"external",
|
|
10
|
+
"documents"
|
|
11
|
+
],
|
|
12
|
+
"prompt": "Create a PowerPoint from source/brief.md for operations leads. Use 6-8 slides, preserve the supplied facts exactly, and close with next actions. Do not create HTML.\n\nProduce the finished file through the DocBlocks tools on your roster: `list_roots`, then `convert_document` on the approved `powerpoint/eval/deck.md`, `preview_document` to confirm it rendered, and `save_artifact` to write the deck to `deliverables/d-day.pptx`. Markdown or hand-built OOXML written to that path is not a substitute for the real file.",
|
|
13
|
+
"setup": {
|
|
14
|
+
"projectName": "PowerPoint Grounding Eval",
|
|
15
|
+
"about": "The exact source file is authoritative; the deck must keep the locked outline and its facts.",
|
|
16
|
+
"missionObjectives": "Read source/brief.md, cite it, lock a numbered outline, and create matching slide-structured Markdown ready for editable PPTX conversion.",
|
|
17
|
+
"craftbookParams": {
|
|
18
|
+
"workPath": "tasks/eval",
|
|
19
|
+
"outputPath": "deliverables/d-day.pptx",
|
|
20
|
+
"sourcePath": "source/brief.md",
|
|
21
|
+
"topic": "Boreal Desk Returns Pilot",
|
|
22
|
+
"content": "",
|
|
23
|
+
"audience": "operations leads",
|
|
24
|
+
"outputDir": "powerpoint/eval"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
{
|
|
28
|
+
"path": "source/brief.md",
|
|
29
|
+
"content": "# Boreal Desk Returns Pilot\n\nAudience: operations leads.\n\nFacts:\n- Pilot coverage: 18 SKUs.\n- Median first response: 18 hours to 6 hours.\n- Preventable refund leakage: 14.2% to 8.9%.\n- Top unresolved complaint: status silence after photo submission.\n- Next actions: automated status emails, barcode-exception training, weekly Finance exception export.\n\nDo not invent other metrics."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"worker": {
|
|
33
|
+
"name": "Mara",
|
|
34
|
+
"role": "Researcher"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"mocks": [
|
|
38
|
+
{
|
|
39
|
+
"kind": "mcp",
|
|
40
|
+
"id": "docblocks",
|
|
41
|
+
"toolsetId": "docblocks",
|
|
42
|
+
"description": "Deterministic fake DocBlocks MCP for final presentation conversion, preview, and saving.",
|
|
43
|
+
"tools": [
|
|
44
|
+
{
|
|
45
|
+
"name": "list_roots",
|
|
46
|
+
"description": "List the workspace read root and artifacts write root.",
|
|
47
|
+
"resultTemplate": {
|
|
48
|
+
"roots": [
|
|
49
|
+
{
|
|
50
|
+
"id": "workspace",
|
|
51
|
+
"name": "workspace",
|
|
52
|
+
"capabilities": [
|
|
53
|
+
"read"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "artifacts",
|
|
58
|
+
"name": "artifacts",
|
|
59
|
+
"capabilities": [
|
|
60
|
+
"read",
|
|
61
|
+
"write"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "get_authoring_context",
|
|
69
|
+
"description": "Return optional PPTX authoring guidance.",
|
|
70
|
+
"resultTemplate": {
|
|
71
|
+
"targetFormat": "pptx",
|
|
72
|
+
"guidance": "Use one H1 per slide and editable-native fidelity."
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "convert_document",
|
|
77
|
+
"description": "Convert approved Markdown to a deterministic PPTX artifact URI.",
|
|
78
|
+
"resultTemplate": {
|
|
79
|
+
"artifacts": [
|
|
80
|
+
{
|
|
81
|
+
"format": "pptx",
|
|
82
|
+
"uri": "mock://docblocks/deck.pptx",
|
|
83
|
+
"sha256": "1111111111111111111111111111111111111111111111111111111111111111"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"diagnostics": []
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "preview_document",
|
|
91
|
+
"description": "Return deterministic slide-preview evidence.",
|
|
92
|
+
"resultTemplate": {
|
|
93
|
+
"slides": 7,
|
|
94
|
+
"overflow": false,
|
|
95
|
+
"tinyText": false,
|
|
96
|
+
"previewed": true
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "save_artifact",
|
|
101
|
+
"description": "Save the converted PPTX into the project artifacts drawer.",
|
|
102
|
+
"resultTemplate": {
|
|
103
|
+
"ok": true,
|
|
104
|
+
"bytes": 2400,
|
|
105
|
+
"sha256": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
106
|
+
},
|
|
107
|
+
"writeFixture": {
|
|
108
|
+
"surface": "artifact",
|
|
109
|
+
"pathArgument": "destination.path",
|
|
110
|
+
"fixture": "minimal-pptx"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"success": {
|
|
117
|
+
"summary": "The source packet cites the exact brief, the outline is numbered, powerpoint/eval/deck.md matches every outline slide while preserving the supplied facts, and a real ZIP-shaped PPTX — not the Markdown source — lands at the requested workspace path via DocBlocks.",
|
|
118
|
+
"deliverables": [
|
|
119
|
+
{
|
|
120
|
+
"path": "tasks/eval/sources.md",
|
|
121
|
+
"kind": "markdown-doc",
|
|
122
|
+
"minBytes": 500,
|
|
123
|
+
"artifact": true,
|
|
124
|
+
"checks": [
|
|
125
|
+
{
|
|
126
|
+
"kind": "citationsResolve",
|
|
127
|
+
"file": "tasks/eval/sources.md",
|
|
128
|
+
"artifact": true,
|
|
129
|
+
"minCitations": 1
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"path": "tasks/eval/outline.md",
|
|
135
|
+
"kind": "markdown-doc",
|
|
136
|
+
"minBytes": 500,
|
|
137
|
+
"artifact": true,
|
|
138
|
+
"checks": [
|
|
139
|
+
{
|
|
140
|
+
"kind": "contains",
|
|
141
|
+
"file": "tasks/eval/outline.md",
|
|
142
|
+
"pattern": "(?:^|\\n)#{2,6}\\s+(?:Slide\\s+)?1(?:\\s*[.:\\-–—]\\s*|\\s+)\\S",
|
|
143
|
+
"flags": "i",
|
|
144
|
+
"label": "a numbered Slide 1 heading",
|
|
145
|
+
"artifact": true
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"path": "powerpoint/eval/deck.md",
|
|
151
|
+
"kind": "markdown-doc",
|
|
152
|
+
"minBytes": 700,
|
|
153
|
+
"checks": [
|
|
154
|
+
{
|
|
155
|
+
"kind": "markdownHeadingsMatch",
|
|
156
|
+
"file": "powerpoint/eval/deck.md",
|
|
157
|
+
"outlineFile": "tasks/eval/outline.md",
|
|
158
|
+
"outlineArtifact": true
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"kind": "citationsResolve",
|
|
162
|
+
"file": "powerpoint/eval/deck.md",
|
|
163
|
+
"minCitations": 1
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"kind": "contains",
|
|
167
|
+
"file": "powerpoint/eval/deck.md",
|
|
168
|
+
"pattern": "18\\s+SKUs|18\\s+hours|6\\s+hours|14\\.2%|8\\.9%",
|
|
169
|
+
"flags": "i",
|
|
170
|
+
"label": "the supplied figures, verbatim"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"kind": "contains",
|
|
174
|
+
"file": "powerpoint/eval/deck.md",
|
|
175
|
+
"pattern": "automated status emails|barcode-exception training|weekly Finance exception export",
|
|
176
|
+
"flags": "i",
|
|
177
|
+
"label": "the supplied next actions"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"kind": "notContains",
|
|
181
|
+
"file": "powerpoint/eval/deck.md",
|
|
182
|
+
"pattern": "<html|<script|<style",
|
|
183
|
+
"flags": "i"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"path": "deliverables/d-day.pptx",
|
|
189
|
+
"kind": "slide-deck",
|
|
190
|
+
"minBytes": 1000,
|
|
191
|
+
"checks": [
|
|
192
|
+
{
|
|
193
|
+
"kind": "binaryDocument",
|
|
194
|
+
"file": "deliverables/d-day.pptx",
|
|
195
|
+
"minBytes": 1000
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
"mocks": [
|
|
201
|
+
{
|
|
202
|
+
"service": "docblocks",
|
|
203
|
+
"requiredTools": [
|
|
204
|
+
"convert_document",
|
|
205
|
+
"preview_document",
|
|
206
|
+
"save_artifact"
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
"rubric": {
|
|
212
|
+
"artifact": {
|
|
213
|
+
"path": "powerpoint/eval/deck.md",
|
|
214
|
+
"kind": "markdown"
|
|
215
|
+
},
|
|
216
|
+
"axes": [
|
|
217
|
+
{
|
|
218
|
+
"name": "source-acquisition",
|
|
219
|
+
"description": "The workflow read and cited the exact supplied source before outlining."
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "outline-parity",
|
|
223
|
+
"description": "Every numbered outline slide appears exactly once as a same-title H1 in powerpoint/eval/deck.md, in order."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "grounding",
|
|
227
|
+
"description": "Every metric and action comes from source/brief.md and no extra metric was invented."
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"name": "convertibility",
|
|
231
|
+
"description": "One H1 per slide and concise block content make the source ready for DocBlocks PPTX conversion."
|
|
232
|
+
}
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
"qualityFocus": [
|
|
236
|
+
"successful exact-source retrieval",
|
|
237
|
+
"resolvable citations",
|
|
238
|
+
"exact outline-to-deck slide parity",
|
|
239
|
+
"no HTML intermediary"
|
|
240
|
+
]
|
|
241
|
+
}
|