@bendyline/gilde 0.1.57 → 0.1.59

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.
Files changed (48) hide show
  1. package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/craftbook.json +0 -16
  2. package/data/craftbook-templates/bo/booking-automation/versions/1.0.3/craftbook.json +0 -16
  3. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.3/test.json +7 -10
  4. package/data/craftbook-templates/co/content-deck/versions/1.2.4/craftbook.json +4 -4
  5. package/data/craftbook-templates/co/content-deck/versions/1.2.4/test.json +3 -0
  6. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/craftbook.json +4 -4
  7. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/test.json +3 -0
  8. package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/craftbook.json +0 -16
  9. package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/craftbook.json +0 -16
  10. package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/craftbook.json +0 -16
  11. package/data/craftbook-templates/do/doc-rewrite/versions/1.0.3/test.json +3 -6
  12. package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/craftbook.json +0 -16
  13. package/data/craftbook-templates/ed/edit-notes/versions/1.0.3/test.json +5 -8
  14. package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/craftbook.json +0 -16
  15. package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.3/test.json +5 -8
  16. package/data/craftbook-templates/in/insurance-inventory/versions/1.0.3/test.json +6 -9
  17. package/data/craftbook-templates/index.json +1 -1
  18. package/data/craftbook-templates/it/item-intake/versions/1.0.3/test.json +7 -10
  19. package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.3/test.json +9 -11
  20. package/data/craftbook-templates/mo/monitor-and-alert/versions/1.0.3/craftbook.json +0 -16
  21. package/data/craftbook-templates/mo/morning-report/versions/1.0.3/test.json +14 -17
  22. package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.4/craftbook.json +314 -0
  23. package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.4/test.json +89 -0
  24. package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.3/test.json +12 -15
  25. package/data/craftbook-templates/pl/playtest-report/versions/1.0.3/test.json +9 -12
  26. package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.10/craftbook.json +581 -0
  27. package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.10/test.json +240 -0
  28. package/data/craftbook-templates/pr/practice-exam/versions/1.0.3/test.json +3 -6
  29. package/data/craftbook-templates/pr/practice-session/versions/1.0.3/test.json +6 -9
  30. package/data/craftbook-templates/pr/price-tracker/versions/1.0.3/craftbook.json +0 -8
  31. package/data/craftbook-templates/re/receipt-intake/versions/1.0.3/test.json +8 -11
  32. package/data/craftbook-templates/re/recipe-capture/versions/1.0.3/test.json +8 -11
  33. package/data/craftbook-templates/re/record-a-relative/versions/1.0.3/test.json +9 -11
  34. package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/craftbook.json +0 -16
  35. package/data/craftbook-templates/re/report-pdf/versions/1.1.4/craftbook.json +315 -0
  36. package/data/craftbook-templates/re/report-pdf/versions/1.1.4/test.json +101 -0
  37. package/data/craftbook-templates/re/research-to-document/versions/1.2.4/craftbook.json +386 -0
  38. package/data/craftbook-templates/re/research-to-document/versions/1.2.4/test.json +242 -0
  39. package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.4/test.json +9 -12
  40. package/data/craftbook-templates/so/source-quality-audit/versions/1.0.3/test.json +15 -18
  41. package/data/craftbook-templates/sq/sql-analysis/versions/1.0.3/craftbook.json +0 -8
  42. package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.3/test.json +5 -8
  43. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.3/test.json +5 -8
  44. package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.3/test.json +5 -8
  45. package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.3/test.json +13 -16
  46. package/data/toolsets/do/docblocks/versions/2.6.0/manifest.json +95 -0
  47. package/data/toolsets/index.json +1 -1
  48. package/package.json +1 -1
@@ -8,8 +8,8 @@
8
8
  "prompt": "three new records came in for the vinyl collection — photo notes are in inbox/. can you cataloge them?",
9
9
  "setup": {
10
10
  "projectName": "Collection Catalog — Vinyl Intake Eval",
11
- "about": "Self-contained eval project for item-intake. Arrival photos have already been pre-extracted into plain-text photo notes under inbox/. The catalog store lives at collection.json in the workspace; the intake write-up goes to tasks/eval/report.md.",
12
- "missionObjectives": "Use the Catalog an Item craftbook/template, identify each arrival only as far as the seeded photo notes support, and finish with an updated collection.json plus tasks/eval/report.md — no network calls, real credentials, or live services.",
11
+ "about": "Self-contained eval project for item-intake. Arrival photos have already been pre-extracted into plain-text photo notes under inbox/. The catalog store lives at collection.json in the workspace; the intake write-up goes to report.md in this task's own artifacts working folder.",
12
+ "missionObjectives": "Use the Catalog an Item craftbook/template, identify each arrival only as far as the seeded photo notes support, and finish with an updated collection.json plus report.md in this task's own artifacts working folder — no network calls, real credentials, or live services.",
13
13
  "files": [
14
14
  {
15
15
  "path": "inbox/item-1.txt",
@@ -31,9 +31,6 @@
31
31
  "worker": {
32
32
  "name": "Casper",
33
33
  "role": "Curator"
34
- },
35
- "craftbookParams": {
36
- "workPath": "tasks/eval"
37
34
  }
38
35
  },
39
36
  "mocks": [],
@@ -41,20 +38,20 @@
41
38
  "summary": "The catalog gains three complete records grounded in the photo notes, the unreadable pressing stays uncertain in the record, and the report lists the earned follow-ups.",
42
39
  "deliverables": [
43
40
  {
44
- "path": "tasks/eval/report.md",
41
+ "path": "{{task.dir}}/report.md",
45
42
  "kind": "markdown-report",
46
43
  "minBytes": 600,
47
44
  "checks": [
48
45
  {
49
46
  "kind": "contains",
50
- "file": "tasks/eval/report.md",
47
+ "file": "{{task.dir}}/report.md",
51
48
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
52
49
  "flags": "i",
53
50
  "artifact": true
54
51
  },
55
52
  {
56
53
  "kind": "contains",
57
- "file": "tasks/eval/report.md",
54
+ "file": "{{task.dir}}/report.md",
58
55
  "pattern": "confiden|uncertain|not sure|unclear|unverified|unread",
59
56
  "flags": "i",
60
57
  "label": "identification confidence stated honestly",
@@ -62,7 +59,7 @@
62
59
  },
63
60
  {
64
61
  "kind": "contains",
65
- "file": "tasks/eval/report.md",
62
+ "file": "{{task.dir}}/report.md",
66
63
  "pattern": "photo|expert",
67
64
  "flags": "i",
68
65
  "label": "follow-up buckets present",
@@ -122,7 +119,7 @@
122
119
  },
123
120
  "rubric": {
124
121
  "artifact": {
125
- "path": "tasks/eval/report.md",
122
+ "path": "{{task.dir}}/report.md",
126
123
  "kind": "markdown"
127
124
  },
128
125
  "axes": [
@@ -27,49 +27,47 @@
27
27
  "worker": {
28
28
  "name": "Milan",
29
29
  "role": "Archivist"
30
- },
31
- "craftbookParams": {
32
- "workPath": "tasks/eval"
33
30
  }
34
31
  },
35
32
  "mocks": [],
36
33
  "success": {
37
- "summary": "The session is banked under sessions/ in the teller's own words, and tasks/eval/report.md names the chapter-worthy moments with verbatim quotes plus at least three follow-up questions.",
34
+ "summary": "The session is banked under sessions/ in the teller's own words, and report.md in this task's own artifacts working folder names the chapter-worthy moments with verbatim quotes plus at least three follow-up questions.",
38
35
  "deliverables": [
39
36
  {
40
- "path": "tasks/eval/report.md",
37
+ "path": "{{task.dir}}/report.md",
41
38
  "kind": "markdown-report",
42
39
  "minBytes": 1000,
43
40
  "checks": [
44
41
  {
45
42
  "kind": "contains",
46
- "file": "tasks/eval/report.md",
43
+ "file": "{{task.dir}}/report.md",
47
44
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
48
45
  "flags": "i"
49
46
  },
50
47
  {
51
48
  "kind": "contains",
52
- "file": "tasks/eval/report.md",
49
+ "file": "{{task.dir}}/report.md",
53
50
  "pattern": "follow",
54
51
  "flags": "i",
55
52
  "label": "follow-up threads present"
56
53
  },
57
54
  {
58
55
  "kind": "contains",
59
- "file": "tasks/eval/report.md",
56
+ "file": "{{task.dir}}/report.md",
60
57
  "pattern": "\\?",
61
58
  "label": "real questions for next time"
62
59
  },
63
60
  {
64
61
  "kind": "valuesSubsetOf",
65
- "file": "tasks/eval/report.md",
62
+ "file": "{{task.dir}}/report.md",
66
63
  "sourceFiles": [
67
64
  "recordings/session3.txt"
68
65
  ],
69
66
  "pattern": "[\"“]([^\"”\\n]{15,120})[\"”]",
70
67
  "label": "quoted teller phrases are verbatim from the transcript"
71
68
  }
72
- ]
69
+ ],
70
+ "artifact": true
73
71
  }
74
72
  ],
75
73
  "checks": [
@@ -85,7 +83,7 @@
85
83
  },
86
84
  "rubric": {
87
85
  "artifact": {
88
- "path": "tasks/eval/report.md",
86
+ "path": "{{task.dir}}/report.md",
89
87
  "kind": "markdown"
90
88
  },
91
89
  "axes": [
@@ -104,14 +104,6 @@
104
104
  "kind": "sniff",
105
105
  "file": "monitor.py",
106
106
  "sniff": "nonempty"
107
- },
108
- {
109
- "kind": "esmImports",
110
- "file": "monitor.py"
111
- },
112
- {
113
- "kind": "sourceParses",
114
- "file": "monitor.py"
115
107
  }
116
108
  ],
117
109
  "onReject": "build",
@@ -167,14 +159,6 @@
167
159
  "kind": "sniff",
168
160
  "file": "monitor_test.py",
169
161
  "sniff": "nonempty"
170
- },
171
- {
172
- "kind": "esmImports",
173
- "file": "monitor_test.py"
174
- },
175
- {
176
- "kind": "sourceParses",
177
- "file": "monitor_test.py"
178
162
  }
179
163
  ],
180
164
  "scripts": [
@@ -8,15 +8,12 @@
8
8
  "prompt": "morning - whats the house looking like today? give me the unusal stuff first",
9
9
  "setup": {
10
10
  "projectName": "Smart Home — Morning Report Eval",
11
- "about": "Self-contained eval project for morning-report. The fake house's device tools are wired into the project's tool roster — the device inventory and the live state snapshot come from them, and they are the only source of truth for what the house is doing this morning. The polling evidence goes to tasks/eval/states.md and the morning report to tasks/eval/report.md.",
12
- "missionObjectives": "Use the Morning House Report craftbook/template, read every zone's state through the wired device tools, surface anything unusual first with one suggested action each, compress the nominal rest, and write tasks/eval/report.md. No real smart-home services, hubs, or credentials — only the wired fake house.",
11
+ "about": "Self-contained eval project for morning-report. The fake house's device tools are wired into the project's tool roster — the device inventory and the live state snapshot come from them, and they are the only source of truth for what the house is doing this morning. The polling evidence goes to states.md in this task's own artifacts working folder and the morning report to report.md in this task's own artifacts working folder.",
12
+ "missionObjectives": "Use the Morning House Report craftbook/template, read every zone's state through the wired device tools, surface anything unusual first with one suggested action each, compress the nominal rest, and write report.md in this task's own artifacts working folder. No real smart-home services, hubs, or credentials — only the wired fake house.",
13
13
  "files": [],
14
14
  "worker": {
15
15
  "name": "Roos",
16
16
  "role": "Huisautomaat"
17
- },
18
- "craftbookParams": {
19
- "workPath": "tasks/eval"
20
17
  }
21
18
  },
22
19
  "mocks": [
@@ -144,16 +141,16 @@
144
141
  }
145
142
  ],
146
143
  "success": {
147
- "summary": "tasks/eval/report.md leads with the garage door open since 23:41 and the backyard sensor at 9 percent battery — each with a suggested action — before any all-clear, the evidence in tasks/eval/states.md carries the real device ids from the tools (inventory and state snapshot actually read — request-log assertions), and the nominal rest is compressed rather than dumped.",
144
+ "summary": "report.md in this task's own artifacts working folder leads with the garage door open since 23:41 and the backyard sensor at 9 percent battery — each with a suggested action — before any all-clear, the evidence in states.md in this task's own artifacts working folder carries the real device ids from the tools (inventory and state snapshot actually read — request-log assertions), and the nominal rest is compressed rather than dumped.",
148
145
  "deliverables": [
149
146
  {
150
- "path": "tasks/eval/states.md",
147
+ "path": "{{task.dir}}/states.md",
151
148
  "kind": "markdown-notes",
152
149
  "minBytes": 200,
153
150
  "checks": [
154
151
  {
155
152
  "kind": "contains",
156
- "file": "tasks/eval/states.md",
153
+ "file": "{{task.dir}}/states.md",
157
154
  "pattern": "dev-\\d{2}",
158
155
  "label": "the state evidence carries real device ids from the tools",
159
156
  "artifact": true
@@ -162,20 +159,20 @@
162
159
  "artifact": true
163
160
  },
164
161
  {
165
- "path": "tasks/eval/report.md",
162
+ "path": "{{task.dir}}/report.md",
166
163
  "kind": "markdown-report",
167
164
  "minBytes": 400,
168
165
  "checks": [
169
166
  {
170
167
  "kind": "contains",
171
- "file": "tasks/eval/report.md",
168
+ "file": "{{task.dir}}/report.md",
172
169
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
173
170
  "flags": "i",
174
171
  "artifact": true
175
172
  },
176
173
  {
177
174
  "kind": "contains",
178
- "file": "tasks/eval/report.md",
175
+ "file": "{{task.dir}}/report.md",
179
176
  "pattern": "attention|unusual|anomal",
180
177
  "flags": "i",
181
178
  "label": "an anomalies-first section exists",
@@ -183,7 +180,7 @@
183
180
  },
184
181
  {
185
182
  "kind": "contains",
186
- "file": "tasks/eval/report.md",
183
+ "file": "{{task.dir}}/report.md",
187
184
  "pattern": "garage",
188
185
  "flags": "i",
189
186
  "label": "the garage door left open overnight is surfaced",
@@ -191,7 +188,7 @@
191
188
  },
192
189
  {
193
190
  "kind": "contains",
194
- "file": "tasks/eval/report.md",
191
+ "file": "{{task.dir}}/report.md",
195
192
  "pattern": "batter",
196
193
  "flags": "i",
197
194
  "label": "the low sensor battery is surfaced",
@@ -199,7 +196,7 @@
199
196
  },
200
197
  {
201
198
  "kind": "contains",
202
- "file": "tasks/eval/report.md",
199
+ "file": "{{task.dir}}/report.md",
203
200
  "pattern": "close|shut|charge|replace|check",
204
201
  "flags": "i",
205
202
  "label": "a suggested action is offered",
@@ -207,10 +204,10 @@
207
204
  },
208
205
  {
209
206
  "kind": "judge",
210
- "file": "tasks/eval/report.md",
207
+ "file": "{{task.dir}}/report.md",
211
208
  "rubric": "The two anomalies (the garage door open overnight and the backyard sensor's low battery) appear before anything normal and each carries one concrete suggested action, every device mentioned matches the recorded state evidence, the nominal rest of the house is compressed to a line or two rather than a device-by-device dump, and the whole report reads comfortably in under a minute.",
212
209
  "sourceFiles": [
213
- "tasks/eval/states.md"
210
+ "{{task.dir}}/states.md"
214
211
  ],
215
212
  "label": "anomalies-first and glanceable",
216
213
  "artifact": true
@@ -232,7 +229,7 @@
232
229
  },
233
230
  "rubric": {
234
231
  "artifact": {
235
- "path": "tasks/eval/report.md",
232
+ "path": "{{task.dir}}/report.md",
236
233
  "kind": "markdown"
237
234
  },
238
235
  "axes": [
@@ -0,0 +1,314 @@
1
+ {
2
+ "id": "narrated-slideshow",
3
+ "name": "Animated Content Slideshow",
4
+ "description": "Turn source content into a real MP4 slideshow video and animated GIF without recruiting a Developer to build an HTML player. A planner locks the story and one message per scene. A copywriter writes {{sourceOutputPath}} as ordinary Markdown with one H1 per scene. A video specialist uses the pre-authorized DocBlocks toolset to perform one atomic MP4+GIF conversion, preview representative frames, repair the Markdown when needed, and save {{workPath}}/slideshow.mp4 and {{workPath}}/slideshow.gif in the artifacts drawer.\n\nThe source of truth is Markdown. DocBlocks selects compatible templates automatically; get_authoring_context is optional when exact animation, theme, or target guidance is useful. The rendered targets require the DocBlocks media runtime (Chromium and FFmpeg); if unavailable, report that blocker instead of substituting HTML.\n\nWorking files under {{workPath}}/, reviews/, and reports/ live in the project artifacts drawer and must be read and written with the artifact tools. User-facing source files remain in the workspace.\n\nPreview review checks content and available rendered evidence. Reconstructed Office/PDF views do not prove native layout; a media thumbnail does not prove full playback. The final handoff states these review limits.",
5
+ "entryStepId": "outline",
6
+ "triggers": [
7
+ "animated slideshow",
8
+ "turn this content into a video",
9
+ "make an animated gif from this content",
10
+ "content to mp4",
11
+ "markdown to video",
12
+ "explainer slideshow",
13
+ "make a video from slides"
14
+ ],
15
+ "toolsets": [
16
+ {
17
+ "toolsetId": "docblocks",
18
+ "sourceId": "bundled",
19
+ "autoAllow": true,
20
+ "reason": "convert {{sourceOutputPath}} to MP4 and animated GIF, preview frames, and save both rendered files without a prompt per call"
21
+ }
22
+ ],
23
+ "paramSchema": {
24
+ "type": "object",
25
+ "properties": {
26
+ "workPath": {
27
+ "type": "string",
28
+ "title": "Working folder",
29
+ "description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
30
+ "default": "{{task.dir}}"
31
+ },
32
+ "sourceOutputPath": {
33
+ "type": "string",
34
+ "title": "Editable source path",
35
+ "description": "Workspace-relative Markdown source path. The default keeps each task separate; choose an existing path only when intentionally revising it.",
36
+ "default": "slideshows/task-{{task.num}}/slideshow.md"
37
+ }
38
+ }
39
+ },
40
+ "steps": [
41
+ {
42
+ "id": "outline",
43
+ "name": "Outline the scenes",
44
+ "description": "Lock the audience, story arc, one message per scene, and media acceptance criteria.",
45
+ "prompt": "Plan the animated slideshow before authoring it. 1. Identify the audience, viewing context, aspect/orientation, and one takeaway. 2. Draft 6-12 scenes unless the user requests another length: each scene needs a title, one message, 2-4 short on-screen points, and an optional caption line. 3. Mark where an existing image or small table genuinely helps; do not invent or download unapproved assets. 4. Choose landscape or portrait and a restrained motion style. 5. Write acceptance criteria: every outlined scene appears once and in order, text stays readable at video size, source facts remain grounded, frames show a consistent theme, the MP4 plays, the GIF loops, and both real files are saved in artifacts. Write {{workPath}}/outline.md and call write_task_note with scene count, orientation, and takeaway. Do not build HTML or media bytes.\n\nStore `{{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.\n\nRead an exact workspace DOCX, PPTX, PDF, or XLSX source with `read_doc_as_markdown`; use `read_file` for text or Markdown. Keep the original file path in citations. Never interpret binary bytes as text or substitute a similarly named file.",
46
+ "suggestedRole": "planner",
47
+ "advanceWhen": {
48
+ "file": "{{workPath}}/outline.md",
49
+ "minBytes": 1,
50
+ "sniff": "nonempty",
51
+ "artifact": true
52
+ },
53
+ "gate": {
54
+ "at": "completion",
55
+ "checks": [
56
+ {
57
+ "kind": "minBytes",
58
+ "file": "{{workPath}}/outline.md",
59
+ "bytes": 180,
60
+ "artifact": true
61
+ },
62
+ {
63
+ "kind": "sniff",
64
+ "file": "{{workPath}}/outline.md",
65
+ "sniff": "nonempty",
66
+ "artifact": true
67
+ }
68
+ ],
69
+ "onReject": "outline",
70
+ "maxAttempts": 3
71
+ },
72
+ "next": "write",
73
+ "toolPolicy": {
74
+ "disallowToolsets": [
75
+ "docblocks"
76
+ ],
77
+ "disallowBuiltinToolsets": [
78
+ "ai-apps",
79
+ "archives",
80
+ "audio",
81
+ "browser-automation",
82
+ "code-execution",
83
+ "craftbooks",
84
+ "data-tables",
85
+ "entity-intel",
86
+ "git",
87
+ "image-intel",
88
+ "images",
89
+ "role-delegation",
90
+ "role-delegation-escalation",
91
+ "security-intel",
92
+ "team-management",
93
+ "videos",
94
+ "web",
95
+ "workspace-fs-write"
96
+ ],
97
+ "outputMedium": "artifact",
98
+ "additionalOutputMedia": [
99
+ "task-note"
100
+ ]
101
+ }
102
+ },
103
+ {
104
+ "id": "write",
105
+ "name": "Write the Markdown slideshow",
106
+ "description": "Write {{sourceOutputPath}} with one H1 heading per scene.",
107
+ "prompt": "Write {{sourceOutputPath}} following {{workPath}}/outline.md. 1. Use exactly one `#` level-one heading per scene; each H1 is a deliberate scene boundary. Do not add `---` separators unless a visible horizontal rule is intended. 2. Under each H1, use 2-4 short bullet phrases, a compact table, or a brief caption—not paragraphs. 3. Bold the load-bearing fact or phrase. 4. Use only source-grounded facts and existing workspace assets with meaningful alt text. 5. Keep the first scene a title/setup and the final scene the takeaway or next action. 6. On loop-back, repair only the frames the reviewer names. Call write_task_note with the path and H1 scene count. Do not create HTML, JavaScript, MP4, GIF, or base64.\n\nOpen `{{workPath}}/outline.md` from the artifacts drawer with `read_artifact` before working. Use the explicit content layout on every scene that has body content: `# Scene title {[content]}`. This keeps lists and tables visible in the native video export; an unannotated metrics-table scene can become a title-only card even when its Markdown preview contains the table. Prefer short before/after bullets for small screens; use a compact table only when it remains readable. Do not remove source facts to make a layout fit.",
108
+ "suggestedRole": "copywriter",
109
+ "consumes": [
110
+ {
111
+ "file": "{{workPath}}/outline.md",
112
+ "artifact": true
113
+ }
114
+ ],
115
+ "advanceWhen": {
116
+ "file": "{{sourceOutputPath}}",
117
+ "minBytes": 1,
118
+ "sniff": "nonempty"
119
+ },
120
+ "gate": {
121
+ "at": "completion",
122
+ "checks": [
123
+ {
124
+ "kind": "minBytes",
125
+ "file": "{{sourceOutputPath}}",
126
+ "bytes": 650
127
+ },
128
+ {
129
+ "kind": "contains",
130
+ "file": "{{sourceOutputPath}}",
131
+ "pattern": "(?:^|\\n)#\\s+\\S",
132
+ "label": "at least one H1 scene heading"
133
+ }
134
+ ],
135
+ "onReject": "write",
136
+ "maxAttempts": 4
137
+ },
138
+ "next": "publish",
139
+ "toolPolicy": {
140
+ "disallowToolsets": [
141
+ "docblocks"
142
+ ],
143
+ "disallowBuiltinToolsets": [
144
+ "ai-apps",
145
+ "archives",
146
+ "audio",
147
+ "browser-automation",
148
+ "code-execution",
149
+ "craftbooks",
150
+ "data-tables",
151
+ "entity-intel",
152
+ "git",
153
+ "image-intel",
154
+ "images",
155
+ "role-delegation",
156
+ "role-delegation-escalation",
157
+ "security-intel",
158
+ "team-management",
159
+ "videos",
160
+ "web"
161
+ ],
162
+ "outputMedium": "workspace",
163
+ "additionalOutputMedia": [
164
+ "task-note"
165
+ ]
166
+ }
167
+ },
168
+ {
169
+ "id": "publish",
170
+ "name": "Publish the video and GIF",
171
+ "description": "Convert the approved source, inspect and preview it, and save the real binary deliverables with review evidence.",
172
+ "prompt": "Publish the approved Markdown as real GIF and MP4 files. First call `list_roots` and read the approved `{{sourceOutputPath}}` with `read_file`; read `{{workPath}}/outline.md` with `read_artifact`. Use the read-enabled workspace root for the source and write-enabled artifacts root for outputs. Inspect the Markdown source with `inspect_document` and preview its scenes in batches of at most four.\n\nRender the two formats in SEPARATE `convert_document` calls so each has its own operation budget. Use source { \"kind\": \"file\", \"rootId\": <workspace root id>, \"path\": \"{{sourceOutputPath}}\" } and autoTemplates: true. For a landscape slideshow, start with targets: [{ \"format\": \"gif\", \"width\": 640, \"height\": 360, \"fps\": 6, \"animationsEnabled\": true, \"loop\": 0 }] and then targets: [{ \"format\": \"mp4\", \"width\": 960, \"height\": 540, \"fps\": 8, \"animationsEnabled\": true }]. For portrait, swap width and height. These are useful delivery defaults for animated text slides; honor an explicit user resolution/fps request within the tool's stated limits. On a runtime timeout retry the affected format once at lower dimensions/fps, then record the exact blocker. Use only fields listed in the tool schema; orientation is not an aspectRatio string and captions are controlled by captionStyle when requested.\n\nFor EACH successful conversion, call `get_conversion_report` with its returned artifactUri, then `preview_document` with source { \"kind\": \"artifact\", \"uri\": <returned URI> } and maxItems: 1. MP4/GIF support native first-frame previews, not document-text import: do not call `inspect_document` on video or GIF bytes. Review scene content/order from the Markdown previews and report first-frame/native metadata separately. A first frame cannot prove full-video timing, motion, looping, or the final scene.\n\nSave the GIF to `{{workPath}}/slideshow.gif` and MP4 to `{{workPath}}/slideshow.mp4` with `save_artifact` in the artifacts root, initially using ifExists: \"error\". If replacing a previously saved output, use its previously returned saved hash as expectedSha256; if the hash is unavailable, record the blocker instead of guessing. Save each successful artifact before another step/process takes over. Use only current-session artifact URIs; reopen saved media with file sources for later preview. If source content fails, leave precise task notes and route to write; do not rewrite Markdown during publishing. Once BOTH files are saved, note the paths, hashes, diagnostics and playback-review limits, then advance to evaluate. Never substitute HTML, renamed Markdown or fabricated binary files. Before converting, confirm body-bearing scenes use the explicit `{[content]}` heading layout. If a table/list scene lacks it, route that precise authoring repair to write. Source previews and native exports can choose different default layouts, so a source-preview PASS alone does not establish native content survival.",
173
+ "suggestedRole": "designer",
174
+ "consumes": [
175
+ {
176
+ "file": "{{workPath}}/outline.md",
177
+ "artifact": true
178
+ },
179
+ {
180
+ "file": "{{sourceOutputPath}}"
181
+ }
182
+ ],
183
+ "advanceWhen": {
184
+ "file": "{{workPath}}/slideshow.mp4",
185
+ "minBytes": 1,
186
+ "artifact": true
187
+ },
188
+ "gate": {
189
+ "at": "completion",
190
+ "checks": [
191
+ {
192
+ "kind": "minBytes",
193
+ "file": "{{workPath}}/slideshow.mp4",
194
+ "bytes": 1000,
195
+ "artifact": true
196
+ },
197
+ {
198
+ "kind": "minBytes",
199
+ "file": "{{workPath}}/slideshow.gif",
200
+ "bytes": 1000,
201
+ "artifact": true
202
+ }
203
+ ],
204
+ "onReject": "publish",
205
+ "maxAttempts": 4
206
+ },
207
+ "next": "evaluate",
208
+ "toolPolicy": {
209
+ "disallowBuiltinToolsets": [
210
+ "ai-apps",
211
+ "archives",
212
+ "audio",
213
+ "browser-automation",
214
+ "craftbooks",
215
+ "data-tables",
216
+ "entity-intel",
217
+ "git",
218
+ "image-intel",
219
+ "images",
220
+ "role-delegation",
221
+ "role-delegation-escalation",
222
+ "security-intel",
223
+ "team-management",
224
+ "videos",
225
+ "web",
226
+ "workspace-fs-write"
227
+ ],
228
+ "outputMedium": "artifact",
229
+ "additionalOutputMedia": [
230
+ "task-note"
231
+ ]
232
+ }
233
+ },
234
+ {
235
+ "id": "evaluate",
236
+ "name": "Evaluate",
237
+ "description": "Review saved-file integrity and content fidelity; document the limits of reconstructed or first-frame previews.",
238
+ "prompt": "Read `{{workPath}}/outline.md` with `read_artifact`, read `{{sourceOutputPath}}` with `read_file`, and read publishing notes with `read_task_notes`. Confirm the outlined scene count and order, supplied facts, short on-screen copy, and final next actions. Use `list_roots` and `inspect_document` on the Markdown source, with source previews when helpful. Reopen the saved `{{workPath}}/slideshow.mp4` and `{{workPath}}/slideshow.gif` using file sources from the artifacts root and `preview_document`; do not import media bytes through `inspect_document`. These native-extracted images show the first frame only. Check the recorded conversion options and save hashes, and distinguish source scene coverage from actual full playback. First-frame-only verification is a disclosed limitation, not by itself a content failure. Use `write_task_note` for the review, with explicit PASS/FAIL criteria, evidence, and any unverified playback properties. Route content defects to write and missing/corrupt outputs to publish. Advance only when the requested files exist and the supported checks pass; do not claim full animation or loop playback was visually reviewed. On PASS, call `advance_task_step` with next: \"finish\". Use next: \"write\" only for an identified source-content failure, or next: \"publish\" for an identified conversion/save failure.",
239
+ "suggestedRole": "reviewer",
240
+ "consumes": [
241
+ {
242
+ "file": "{{workPath}}/outline.md",
243
+ "artifact": true
244
+ }
245
+ ],
246
+ "next": "finish",
247
+ "toolPolicy": {
248
+ "disallowBuiltinToolsets": [
249
+ "ai-apps",
250
+ "archives",
251
+ "audio",
252
+ "browser-automation",
253
+ "code-execution",
254
+ "craftbooks",
255
+ "data-tables",
256
+ "entity-intel",
257
+ "git",
258
+ "image-intel",
259
+ "images",
260
+ "role-delegation",
261
+ "role-delegation-escalation",
262
+ "security-intel",
263
+ "team-management",
264
+ "videos",
265
+ "web",
266
+ "workspace-fs-write"
267
+ ],
268
+ "outputMedium": "task-note"
269
+ }
270
+ },
271
+ {
272
+ "id": "finish",
273
+ "name": "Finish",
274
+ "description": "Deliver the saved files with the recorded review evidence and limits.",
275
+ "prompt": "Read the review evidence with `read_task_notes`. Write a concise DONE summary naming the editable Markdown source `{{sourceOutputPath}}` and the saved deliverables `{{workPath}}/slideshow.gif`, `{{workPath}}/slideshow.mp4`. Include available native counts and the preview basis, and carry forward any native-layout or playback properties that remain unverified. Do not open binary files with `read_artifact` or claim an unavailable check passed.",
276
+ "suggestedRole": "designer",
277
+ "consumes": [
278
+ {
279
+ "file": "{{sourceOutputPath}}"
280
+ }
281
+ ],
282
+ "terminal": true,
283
+ "toolPolicy": {
284
+ "disallowToolsets": [
285
+ "docblocks"
286
+ ],
287
+ "disallowBuiltinToolsets": [
288
+ "ai-apps",
289
+ "archives",
290
+ "audio",
291
+ "browser-automation",
292
+ "code-execution",
293
+ "craftbooks",
294
+ "data-tables",
295
+ "entity-intel",
296
+ "git",
297
+ "image-intel",
298
+ "images",
299
+ "role-delegation",
300
+ "role-delegation-escalation",
301
+ "security-intel",
302
+ "team-management",
303
+ "videos",
304
+ "web",
305
+ "workspace-fs-write"
306
+ ],
307
+ "outputMedium": "task-note"
308
+ }
309
+ }
310
+ ],
311
+ "version": "1.1.4",
312
+ "releasedAt": "2026-09-07T01:00:00Z",
313
+ "minGezelVersion": "1.26233"
314
+ }