gooseworks 0.5.7 → 0.5.9-dev.53.c1bd6be2

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 (65) hide show
  1. package/dist/kit/core/progress.d.ts +23 -3
  2. package/dist/kit/core/progress.d.ts.map +1 -1
  3. package/dist/kit/core/progress.js +62 -18
  4. package/dist/kit/core/progress.js.map +1 -1
  5. package/dist/kit/core/run.d.ts +5 -1
  6. package/dist/kit/core/run.d.ts.map +1 -1
  7. package/dist/kit/core/run.js +17 -4
  8. package/dist/kit/core/run.js.map +1 -1
  9. package/dist/kit/core/style.d.ts +1 -0
  10. package/dist/kit/core/style.d.ts.map +1 -1
  11. package/dist/kit/maker/cues.d.ts +67 -0
  12. package/dist/kit/maker/cues.d.ts.map +1 -0
  13. package/dist/kit/maker/cues.js +204 -0
  14. package/dist/kit/maker/cues.js.map +1 -0
  15. package/dist/kit/maker/encode.d.ts +5 -0
  16. package/dist/kit/maker/encode.d.ts.map +1 -1
  17. package/dist/kit/maker/encode.js +7 -1
  18. package/dist/kit/maker/encode.js.map +1 -1
  19. package/dist/kit/maker/facts.d.ts +46 -0
  20. package/dist/kit/maker/facts.d.ts.map +1 -0
  21. package/dist/kit/maker/facts.js +159 -0
  22. package/dist/kit/maker/facts.js.map +1 -0
  23. package/dist/kit/maker/inputs.d.ts +48 -3
  24. package/dist/kit/maker/inputs.d.ts.map +1 -1
  25. package/dist/kit/maker/inputs.js +151 -22
  26. package/dist/kit/maker/inputs.js.map +1 -1
  27. package/dist/kit/maker/make.d.ts +20 -1
  28. package/dist/kit/maker/make.d.ts.map +1 -1
  29. package/dist/kit/maker/make.js +125 -19
  30. package/dist/kit/maker/make.js.map +1 -1
  31. package/dist/kit/maker/page.d.ts.map +1 -1
  32. package/dist/kit/maker/page.js +49 -1
  33. package/dist/kit/maker/page.js.map +1 -1
  34. package/dist/kit/maker/parts/html-frames/1.2.0/part.json +1083 -0
  35. package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -1
  36. package/dist/kit/maker/parts/html-frames/src/part.js +4 -1
  37. package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -1
  38. package/dist/kit/maker/runtime.d.ts.map +1 -1
  39. package/dist/kit/maker/runtime.js +54 -7
  40. package/dist/kit/maker/runtime.js.map +1 -1
  41. package/dist/kit/maker/timing.d.ts +74 -0
  42. package/dist/kit/maker/timing.d.ts.map +1 -0
  43. package/dist/kit/maker/timing.js +152 -0
  44. package/dist/kit/maker/timing.js.map +1 -0
  45. package/dist/kit/maker/under.d.ts +126 -0
  46. package/dist/kit/maker/under.d.ts.map +1 -0
  47. package/dist/kit/maker/under.js +299 -0
  48. package/dist/kit/maker/under.js.map +1 -0
  49. package/dist/skills/master-skill.js +1 -1
  50. package/dist/skills/routes.js +2 -2
  51. package/dist/skills/routes.js.map +1 -1
  52. package/dist/skills/server-entry-skills.d.ts +6 -6
  53. package/dist/skills/server-entry-skills.d.ts.map +1 -1
  54. package/dist/skills/server-entry-skills.js +84 -55
  55. package/dist/skills/server-entry-skills.js.map +1 -1
  56. package/package.json +3 -3
  57. package/skills/goose-ads/SKILL.md +6 -6
  58. package/skills/goose-product-photos/SKILL.md +6 -6
  59. package/skills/goose-video/SKILL.md +23 -13
  60. package/skills/goose-video-local/SKILL.md +1 -1
  61. package/skills/gooseworks/SKILL.md +6 -6
  62. package/skills/make-custom-video/SKILL.md +42 -23
  63. package/skills/manifest.json +7 -7
  64. package/skills/routes.json +1 -1
  65. package/dist/kit/maker/parts/html-frames/1.1.0/part.json +0 -199
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.QUIET_SAFE = void 0;
37
+ exports.probeUnder = probeUnder;
38
+ exports.coverFit = coverFit;
39
+ exports.coverFilter = coverFilter;
40
+ exports.quietBandOf = quietBandOf;
41
+ exports.quietBands = quietBands;
42
+ exports.underIsShared = underIsShared;
43
+ exports.underSceneFrames = underSceneFrames;
44
+ exports.alphaSegmentArgs = alphaSegmentArgs;
45
+ exports.compositeArgs = compositeArgs;
46
+ exports.passThroughTimeline = passThroughTimeline;
47
+ // Drawing a frame page over another step's video (html-frames 1.2.0 `under`).
48
+ // The page is captured transparent, its frames are kept with their alpha in
49
+ // short PNG-in-MOV segments, and one last ffmpeg pass lays them over the video,
50
+ // keeping its sound. Before the page runs, each scene's quiet band (the
51
+ // emptiest horizontal band of its middle frame) is measured here in Node, since
52
+ // a file:// page may not read a video's pixels. Bundled into the part.
53
+ const promises_1 = require("node:fs/promises");
54
+ const path = __importStar(require("node:path"));
55
+ const encode_1 = require("./encode");
56
+ /** The band a quiet band is looked for in, and its height, as fractions of the height. */
57
+ exports.QUIET_SAFE = { top: 0.15, bottom: 0.85, height: 0.15 };
58
+ /** The size the middle frame is measured at: a few pixels a row is plenty for "busy or not". */
59
+ const MEASURE_WIDTH = 96;
60
+ function numberOf(value) {
61
+ const n = typeof value === 'string' ? Number(value) : value;
62
+ return typeof n === 'number' && Number.isFinite(n) ? n : undefined;
63
+ }
64
+ function rateOf(value) {
65
+ if (typeof value !== 'string')
66
+ return null;
67
+ const [a, b] = value.split('/').map(Number);
68
+ const rate = b ? a / b : a;
69
+ return Number.isFinite(rate) && rate > 0 ? rate : null;
70
+ }
71
+ /** Reads the video's picture length, size, frame rate and whether it has sound, with ffprobe. */
72
+ async function probeUnder(tools, file) {
73
+ let parsed;
74
+ try {
75
+ const { stdout } = await tools.exec('ffprobe', [
76
+ '-v', 'error',
77
+ '-show_entries', 'stream=codec_type,width,height,duration,avg_frame_rate,r_frame_rate:format=duration',
78
+ '-of', 'json', file,
79
+ ]);
80
+ parsed = JSON.parse(stdout);
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ const streams = parsed.streams ?? [];
86
+ const video = streams.find((s) => s.codec_type === 'video');
87
+ if (!video)
88
+ return null;
89
+ const width = numberOf(video.width);
90
+ const height = numberOf(video.height);
91
+ const seconds = numberOf(video.duration) ?? numberOf(parsed.format?.duration);
92
+ if (!width || !height || !seconds || seconds <= 0)
93
+ return null;
94
+ return {
95
+ seconds,
96
+ width,
97
+ height,
98
+ fps: rateOf(video.avg_frame_rate) ?? rateOf(video.r_frame_rate),
99
+ hasAudio: streams.some((s) => s.codec_type === 'audio'),
100
+ };
101
+ }
102
+ function coverFit(from, to) {
103
+ const scale = Math.max(to.width / from.width, to.height / from.height);
104
+ return { scale, offsetX: (from.width * scale - to.width) / 2, offsetY: (from.height * scale - to.height) / 2 };
105
+ }
106
+ /** The ffmpeg filter that fits the video to the page: cover, centre crop, square pixels. */
107
+ function coverFilter(size) {
108
+ return `scale=${size.width}:${size.height}:force_original_aspect_ratio=increase:flags=bicubic,crop=${size.width}:${size.height},setsar=1`;
109
+ }
110
+ /**
111
+ * The emptiest band of a grey picture: rows are scored by how much the picture
112
+ * changes along and down them (the per-row gradient), and the band of
113
+ * QUIET_SAFE.height whose rows change least, inside QUIET_SAFE, wins. Ties go
114
+ * to the band nearer the bottom, where captions usually sit.
115
+ */
116
+ function quietBandOf(gray, width, height) {
117
+ const rows = new Float64Array(height);
118
+ for (let y = 0; y < height; y++) {
119
+ let sum = 0;
120
+ const row = y * width;
121
+ for (let x = 0; x < width; x++) {
122
+ const v = gray[row + x];
123
+ if (x + 1 < width)
124
+ sum += Math.abs(gray[row + x + 1] - v);
125
+ if (y + 1 < height)
126
+ sum += Math.abs(gray[row + width + x] - v);
127
+ }
128
+ rows[y] = sum / width;
129
+ }
130
+ const band = Math.max(1, Math.round(exports.QUIET_SAFE.height * height));
131
+ const first = Math.ceil(exports.QUIET_SAFE.top * height);
132
+ const last = Math.max(first, Math.floor(exports.QUIET_SAFE.bottom * height) - band);
133
+ let best = first;
134
+ let bestScore = Infinity;
135
+ for (let y0 = first; y0 <= last; y0++) {
136
+ let score = 0;
137
+ for (let y = y0; y < y0 + band && y < height; y++)
138
+ score += rows[y];
139
+ // A band must be clearly quieter to win over one further down.
140
+ if (score <= bestScore + 1e-9) {
141
+ best = y0;
142
+ bestScore = score;
143
+ }
144
+ }
145
+ const round = (n) => Math.round(n * 10000) / 10000;
146
+ return { y0: round(best / height), y1: round(Math.min(height, best + band) / height) };
147
+ }
148
+ /**
149
+ * Each scene's quiet band, from the video's frame at the middle of the scene,
150
+ * fitted to the page the way the last pass fits it (cover, centre crop), so the
151
+ * band describes what shows. Frames are read one at a time as raw grey pixels into `dir`.
152
+ */
153
+ async function quietBands(tools, file, info, times, dir, page) {
154
+ const width = MEASURE_WIDTH;
155
+ const height = Math.max(2, Math.round((page.height / page.width) * width));
156
+ const bands = [];
157
+ for (let i = 0; i < times.length; i++) {
158
+ const middle = Math.min(Math.max(0, (times[i].start_s + times[i].end_s) / 2), Math.max(0, info.seconds - 0.05));
159
+ const out = path.join(dir, `quiet-${i}.gray`);
160
+ await tools.exec('ffmpeg', [
161
+ '-hide_banner', '-nostdin', '-loglevel', 'error', '-y',
162
+ '-ss', middle.toFixed(3), '-i', file,
163
+ '-frames:v', '1', '-an',
164
+ '-vf', `${coverFilter({ width, height })},format=gray`,
165
+ '-f', 'rawvideo', '-pix_fmt', 'gray', out,
166
+ ]);
167
+ const gray = await (0, promises_1.readFile)(out);
168
+ await (0, promises_1.rm)(out, { force: true });
169
+ bands.push(gray.length >= width * height ? quietBandOf(gray, width, height) : { y0: 0.7, y1: 0.85 });
170
+ }
171
+ return bands;
172
+ }
173
+ /**
174
+ * True when the plan's scenes share the video drawn over evenly: that video is
175
+ * one scene (one clip, say) and the plan has several.
176
+ */
177
+ function underIsShared(ids, timeline) {
178
+ return timeline.scenes.length === 1 && ids.length > 1;
179
+ }
180
+ /**
181
+ * Scene start frames from the timeline of the video drawn over. Each plan scene
182
+ * takes the time of the timeline scene with its id; when ids do not match and
183
+ * both list the same number of scenes, they pair in order. When that video is
184
+ * one scene and the plan has several, the plan's scenes share it evenly on
185
+ * whole frames, as they share a video of a given length. Returns null when the
186
+ * scenes cannot be paired.
187
+ */
188
+ function underSceneFrames(ids, timeline, fps, frameCount) {
189
+ if (underIsShared(ids, timeline)) {
190
+ if (frameCount < ids.length)
191
+ return null;
192
+ const shared = ids.map((_, i) => Math.round((i * frameCount) / ids.length));
193
+ shared.push(frameCount);
194
+ return shared;
195
+ }
196
+ const byId = new Map(timeline.scenes.map((s) => [s.id, s]));
197
+ const matched = ids.map((id) => byId.get(id) ?? null);
198
+ let spans;
199
+ if (matched.every((s) => s))
200
+ spans = matched;
201
+ else if (timeline.scenes.length === ids.length)
202
+ spans = ids.map((id, i) => byId.get(id) ?? timeline.scenes[i]);
203
+ else
204
+ return null;
205
+ const frames = spans.map((s) => Math.min(frameCount, Math.max(0, Math.round(s.start_s * fps))));
206
+ for (let i = 1; i < frames.length; i++)
207
+ if (frames[i] < frames[i - 1])
208
+ return null;
209
+ frames.push(frameCount);
210
+ return frames;
211
+ }
212
+ /** One segment of transparent page frames, kept with their alpha (PNG in MOV), to be laid over the video later. */
213
+ function alphaSegmentArgs(opts) {
214
+ return [
215
+ '-hide_banner', '-nostdin', '-loglevel', 'error', '-y',
216
+ '-framerate', String(opts.fps),
217
+ '-start_number', String(opts.start),
218
+ '-i', `${opts.framesDir}/${opts.framePattern}`,
219
+ '-frames:v', String(opts.count),
220
+ '-c:v', 'png', '-pix_fmt', 'rgba',
221
+ '-fflags', '+bitexact', '-flags', '+bitexact', '-map_metadata', '-1',
222
+ '-an', '-r', String(opts.fps),
223
+ opts.out,
224
+ ];
225
+ }
226
+ /**
227
+ * The last pass: the video fitted to the page, the page's frames laid over it,
228
+ * encoded like every html-frames video, with the video's sound kept as AAC.
229
+ */
230
+ function compositeArgs(opts) {
231
+ const seconds = (opts.frames / opts.fps).toFixed(6);
232
+ const graph = [
233
+ `[0:v]setpts=PTS-STARTPTS,fps=${opts.fps},${coverFilter(opts.size)}[base]`,
234
+ `[1:v]setpts=PTS-STARTPTS,format=rgba[page]`,
235
+ `[base][page]overlay=0:0:format=auto:eof_action=pass:shortest=0,scale=out_color_matrix=bt709:out_range=tv,format=yuv420p[v]`,
236
+ ].join(';');
237
+ return [
238
+ '-hide_banner', '-nostdin', '-loglevel', 'error', '-y',
239
+ '-i', opts.under,
240
+ '-f', 'concat', '-safe', '0', '-i', opts.list,
241
+ '-filter_complex', graph,
242
+ '-map', '[v]',
243
+ ...(opts.hasAudio ? ['-map', '0:a:0'] : []),
244
+ '-frames:v', String(opts.frames),
245
+ ...opts.tools.encodeArgs('h264-master'),
246
+ ...encode_1.MASTER_RATE_CAP,
247
+ '-c:v', 'libx264',
248
+ '-pix_fmt', 'yuv420p',
249
+ '-colorspace', 'bt709', '-color_primaries', 'bt709', '-color_trc', 'bt709', '-color_range', 'tv',
250
+ ...(opts.hasAudio ? [...opts.tools.encodeArgs('aac'), '-t', seconds] : ['-an']),
251
+ '-r', String(opts.fps),
252
+ opts.out,
253
+ ];
254
+ }
255
+ /** A zone of the video drawn over, moved onto the page's picture (scaled to cover, cropped to the middle). */
256
+ function fitZone(zone, fit, size) {
257
+ const x0 = Math.max(0, zone.x * fit.scale - fit.offsetX);
258
+ const y0 = Math.max(0, zone.y * fit.scale - fit.offsetY);
259
+ const x1 = Math.min(size.width, (zone.x + zone.w) * fit.scale - fit.offsetX);
260
+ const y1 = Math.min(size.height, (zone.y + zone.h) * fit.scale - fit.offsetY);
261
+ if (x1 - x0 < 1 || y1 - y0 < 1)
262
+ return null;
263
+ return { ...zone, x: Math.round(x0), y: Math.round(y0), w: Math.round(x1 - x0), h: Math.round(y1 - y0) };
264
+ }
265
+ /**
266
+ * The timeline of a video drawn over: the video's own scenes, speech, end card
267
+ * and safe zones carried through (cut to the new length, zones moved to the
268
+ * new picture), with this video's length, size and frame rate. When the plan's
269
+ * scenes shared a one-scene video (`scenes` given), they are the scenes, and a
270
+ * speech entry that names a scene names the one it starts in.
271
+ */
272
+ function passThroughTimeline(under, out, scenes) {
273
+ const end = out.duration_s;
274
+ const cut = (items) => items.filter((item) => item.start_s < end).map((item) => (item.end_s > end ? { ...item, end_s: end } : item));
275
+ let speech = cut(under.speech);
276
+ if (scenes?.length) {
277
+ const sceneAt = (t) => scenes.find((s) => t < s.end_s) ?? scenes[scenes.length - 1];
278
+ speech = speech.map((entry) => (typeof entry.scene_id === 'string' ? { ...entry, scene_id: sceneAt(entry.start_s).id } : entry));
279
+ }
280
+ const timeline = {
281
+ duration_s: out.duration_s,
282
+ width: out.width,
283
+ height: out.height,
284
+ fps: out.fps,
285
+ scenes: cut((scenes ?? under.scenes).map((s) => ({ id: s.id, start_s: s.start_s, end_s: s.end_s }))),
286
+ speech,
287
+ };
288
+ if (under.end_card && under.end_card.start_s < end)
289
+ timeline.end_card = { start_s: under.end_card.start_s, end_s: Math.min(end, under.end_card.end_s) };
290
+ const fit = coverFit({ width: under.width, height: under.height }, out);
291
+ const zones = (under.safe_zones ?? [])
292
+ .map((z) => fitZone(z, fit, out))
293
+ .filter((z) => !!z)
294
+ .slice(0, 8);
295
+ if (zones.length)
296
+ timeline.safe_zones = zones;
297
+ return timeline;
298
+ }
299
+ //# sourceMappingURL=under.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"under.js","sourceRoot":"","sources":["../../../src/kit/maker/under.ts"],"names":[],"mappings":"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"}
@@ -214,7 +214,7 @@ function getGooseVideoLocalSkillContent() {
214
214
  return `---
215
215
  name: goose-video-local
216
216
  description: Make an approved GooseWorks video on this computer when the server's next_step says to.
217
- version: 1.0.0
217
+ version: 1.0.2
218
218
  ---
219
219
 
220
220
  Run \`${exports.KIT_MAKE_COMMAND}\` when the server's next_step says so.
@@ -45,7 +45,7 @@ exports.DOMAIN_ROUTES = [
45
45
  {
46
46
  skill: 'goose-video',
47
47
  when: 'Any **video**: a video ad from a style, an original video from a brief or a reference video, or a video already started',
48
- how: 'Use goose-video: ask which product first, read the brand, then video_formats; follow the next_step in every answer.',
48
+ how: 'Use goose-video: explicit custom skips the picker; otherwise watch the reference, read the brand and compare style constraints.',
49
49
  delivery: 'entry',
50
50
  },
51
51
  {
@@ -66,7 +66,7 @@ exports.DOMAIN_ROUTES = [
66
66
  * by name, so the CLI keeps installing them.
67
67
  */
68
68
  exports.UNROUTED_ENTRY_SKILLS = {
69
- 'make-custom-video': 'Starts like goose-video; the server tells an original video from a styled one.',
69
+ 'make-custom-video': 'Keeps an explicit custom choice without a picker, studies its reference and checks custom support; fetching this entry alone does not enable production.',
70
70
  'goose-video-local': 'One line: run the kit when a next_step says so.',
71
71
  };
72
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/skills/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/skills/routes.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  /** The rulebook version this text was built from. */
2
- export declare const SERVER_RULEBOOK_VERSION = "1.0.2";
2
+ export declare const SERVER_RULEBOOK_VERSION = "1.3.1";
3
3
  export declare const SERVER_VIDEO_ENTRY_SKILLS: {
4
- readonly 'goose-video': "---\nname: goose-video\ndescription: \"Make a video ad with GooseWorks in this chat: the product first, then the brand read, then video_formats; follow the next_step in every answer.\"\nversion: 4.1.0\n---\n\n# GooseWorks video\n\nUse GooseWorks to make the customer's video, here in this chat. For a video already started (named, or sent by a card), call video_read and follow its next_step.\n\nFor a new video, in this order. Suggest nothing before step 5 and write no plan before they pick a style.\n\n1. The request. If they haven't said what the video is about, ask in one short question.\n2. The brand. Ask which brand only when brand_read lists several; with one, use it.\n3. The product. Unless they named one or want none, ask which product, offering the brand's products by name from brand_read (sections: products). Use the only one if there is one; with none, go on without.\n4. Research. Read the brand kit, learnings and the chosen products with brand_read (sections kit and learnings, plus the products' ids): photos, specs, creative notes. Then knowledge_search for them. Keep a few plain lines of what to say and avoid.\n5. The styles. Call video_formats with the request and the products' ids: [] for none or a style without products. The customer picks; never recommend one. A style they named that the answer lists as available is their pick. Otherwise, with the style card on screen, say one short line and wait; without one, list the fitting styles, each with its name, one line and price as written, and ask which one.\n6. The plan. Call video_create with the picked style and the products; its next_step says how to write the scenes with video_change and what follows.\n\n## Rules\n\n- Talk to marketers: what they get and what they decide, never how it is made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.\n- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.\n- Follow the next_step in every answer; it says what to do now.\n- With a card on screen (display_hint \"widget\"), add at most one short line; never re-list it or its links.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- A yes counts only for the price the customer was shown: their press on the plan card, or their yes in chat sent with that price.\n- Where the app shows no card, print the plan and its price and ask for the customer's yes here; never send them to a website to approve.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.\n";
5
- readonly 'make-custom-video': "---\nname: make-custom-video\ndescription: \"Make an original video from a brief or a reference video with GooseWorks in this chat: the product first, then the brand read, then video_formats; follow the next_step in every answer.\"\nversion: 3.1.0\n---\n\n# GooseWorks video\n\nUse GooseWorks to make the customer's video, here in this chat. For a video already started (named, or sent by a card), call video_read and follow its next_step.\n\nFor a new video, in this order. Suggest nothing before step 5 and write no plan before they pick a style.\n\n1. The request. If they haven't said what the video is about, ask in one short question.\n2. The brand. Ask which brand only when brand_read lists several; with one, use it.\n3. The product. Unless they named one or want none, ask which product, offering the brand's products by name from brand_read (sections: products). Use the only one if there is one; with none, go on without.\n4. Research. Read the brand kit, learnings and the chosen products with brand_read (sections kit and learnings, plus the products' ids): photos, specs, creative notes. Then knowledge_search for them. Keep a few plain lines of what to say and avoid.\n5. The styles. Call video_formats with the request and the products' ids: [] for none or a style without products. The customer picks; never recommend one. A style they named that the answer lists as available is their pick. Otherwise, with the style card on screen, say one short line and wait; without one, list the fitting styles, each with its name, one line and price as written, and ask which one.\n6. The plan. Call video_create with the picked style and the products; its next_step says how to write the scenes with video_change and what follows.\n\n## Rules\n\n- Talk to marketers: what they get and what they decide, never how it is made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.\n- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.\n- Follow the next_step in every answer; it says what to do now.\n- With a card on screen (display_hint \"widget\"), add at most one short line; never re-list it or its links.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- A yes counts only for the price the customer was shown: their press on the plan card, or their yes in chat sent with that price.\n- Where the app shows no card, print the plan and its price and ask for the customer's yes here; never send them to a website to approve.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.\n";
4
+ readonly 'goose-video': "---\nname: goose-video\ndescription: \"Make a video ad in this chat. Study a supplied video reference before comparing styles; follow the next_step in every answer.\"\nversion: 4.4.3\n---\n\n# GooseWorks video\n\nFrom an installed entry, first catalog_fetch type skill goose-video on this same connection and follow that body. An entry already fetched in this run needs no repeat fetch.\n\nFor a video already started, call video_read and follow its next_step.\n\nExplicit custom: skip video_formats and steps 5–6. Keep their mechanics and assets; research the brand/product and study the reference for its custom plan. Check current custom support before any write.\n\nFor other new videos start with get_started (wants video, request). A card is not a style choice or proof of viewing. Follow the reference rule before style selection or a plan.\n\n1. The request. If they haven't said what the video is about, ask in one short question.\n2. The brand. Ask which brand only when brand_read lists several; with one, use it.\n3. The product. Named or none wanted: find its id with brand_read (sections: products), or use []. Otherwise the product card asks: say one line and wait. Without cards, ask which product by name; use the only one, or go on with none. Never ask again after a pick.\n4. Research. Read the brand kit, learnings and the chosen products with brand_read (sections kit and learnings, plus the products' ids), then knowledge_search for them. Note what to say and avoid.\n5. The styles. Call video_formats with the request and the products' ids ([] for none). The customer picks; never recommend one. A style they named that the answer lists as available is their pick. Otherwise, with the style card on screen, say one short line and wait; without one, print the style table from the answer as it is and ask nothing else.\n6. The plan. Call video_create with the picked style and the products; its next_step says what follows.\n\n## A supplied video reference comes first\n\nWatch the actual video before choosing a style or writing a custom plan. Play through it, or inspect timestamped frames spanning it plus its audio/transcript. A URL, title, caption or thumbnail is not a viewing. Record the hook, scene order, pacing, narration/dialogue, framing, product interactions, text and ending, with timestamps and gaps. If access or sampling cannot answer an essential detail, ask for an accessible video or their choice to continue from the brief; never claim it was watched.\nWhen they have not chosen custom, call video_formats after brand research. For plausible matches, catalog_fetch type template returns the style's plan_note, scenes, duration, cast, sound and assets. Compare these against the observed reference and their essential choices. A similar title or high brand ranking does not prove a match. Explain fit or mismatch before they choose. Keep an explicit style choice; do not quietly change constraints or over-adapt it. Reassess a later reference before creating or rewriting a plan.\nIf no available style fits, or they explicitly want custom, catalog_fetch type skill make-custom-video on this connection before a project write. Require its complete production-harness dependency and current custom schemas. Follow its separate authenticated script and ingredient approvals, cumulative budgets and verified execution capability. If anything is unavailable, say so and keep the brief; do not substitute a template, import the reference as a finished video, use retired actions or switch environments. Fetching a skill alone proves no execution capability.\n\n## Rules\n\n- Talk to marketers: what they get and decide, never how it's made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens here: never ask the customer to install anything or use a CLI, slash command or other app, except npx -y gooseworks@0.5.7 video check and npx -y gooseworks@0.5.7 video make <id> when a next_step gives them.\n- Money is a credit number exactly as an answer gives it: never dollars or your own math.\n- Follow the next_step in every answer.\n- Card on screen (display_hint \"widget\"): one short line at most, then the wait in its next_step or end your turn; never re-list it or open a question box.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- A yes counts only for the price the customer was shown: their press on the plan card, or their yes in chat sent with that price.\n- Where the app shows no card, print the plan and its price and ask for the customer's yes here; never send them to a website to approve.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.\n";
5
+ readonly 'make-custom-video': "---\nname: make-custom-video\ndescription: \"Make a custom video from its brief and studied reference, with authenticated script and ingredient reviews.\"\nversion: 3.5.0\nrequires_skills: [video-production-harness]\nharness_binding: gooseworks/video-actions/v1\n---\n\n# Human version\n\nThe owner approves the script, then actual storyboard/ingredients and budget. Both authenticated reviews must pass before production.\n\n---\n\n# Agent version\n\nInstalled entry: catalog_fetch type skill make-custom-video here once. Check live custom schemas before writes. Keep this environment; no retired actions, template fallback or reference-as-final import.\n\n## Load the production harness\n\nRequire complete video-production-harness content/scripts/files/version/contentHash. Read its orchestrator, phases and editorial/specialist guides. Save safe paths separately with hashes/dependencies. Incomplete/mixed packages block work. Resume recorded packages, inputs and jobs.\n\n## Keep the brief and study the reference\n\nExplicit custom skips video_formats and the picker. Keep requested mechanics/assets; animated text and product photos must not become a creator montage. Implicit references use goose-video to watch and compare template constraints; custom follows no match or their choice.\nRead brand_read (kit, products, rules), then knowledge_search. Use supported claims, real photos/logo. Watch playback, or timed frames spanning the video plus audio/transcript. Record hook, scene order, pace, framing, dialogue, text, product interactions and ending with times/gaps. URLs/thumbnails are not viewing. Missing access needs an accessible source or explicit brief-only choice.\n\n## Create or resume\n\nNew: video_create with brand_id, style custom, request and a required agent-generated UUID idempotency_key; retain products, name, reference_url and campaign. Reuse that key on retries. Resume with video_read the same project: retain plan_revision, custom_review, brand_context, production_manifest and execution; never create a replacement.\nReference resolve accepts direct files; social links cause no automatic paid lookup. If GooseWorks can't download it, upload the file you watched into this project (media_upload scope video_project, media_confirm), wait for media_analyze read to show its duration, then video_change custom reference attach with asset_id and its current_revision as analysis_revision; each refusal names the condition to fix. Skip needs explicit brief-only user_quote. Pending/failed reference blocks approval; a URL is not viewing.\nA resolved reference also needs draft.reference_observation: the project's reference source_url, real duration_s, evidence_mode playback or frames_and_audio, observed_through_s covering 95%, and summary: what happens with times and gaps, as text or a list of {t, what}. Its data binds the script token. Resolve/attach is not watching.\n\n## Save script and ingredients\n\nFollow the harness phases. Discover specialists for the actual scenes; check inputs, outputs, dependencies and managed execution. Reuse suitable product photos and deterministic text animation. Never substitute a template driver. Bind operations to this project and approved scene/script revisions.\nvideo_change needs expected_revision (plan_revision), custom draft and optional script. Bind brand_context_digest to the returned bundle; never author server context. Keep packages outside the review payload. Quote paid operations through the live managed estimate path with real inputs/project. Save preview_estimate/render_estimate for the work still to buy; the server adds committed_credits. Never edit a field the owner approved: the save sets their approval aside until the approved text is back. Missing price/unsupported inputs blocks production; no guessed rates/direct keys.\n\n## Two authenticated owner reviews\n\nShow the complete saved script and exact cumulative budget on the authenticated review card. Only the owner's actual signed button press approves. Chat yes, OAuth, user_quote, widget origin or a copied token is not proof; never manufacture a click or self-approve. Text-only/large reviews use returned authenticated Studio phase buttons and approval_surface URL.\nReread video_read after owner actions. Script approval permits quoted previews only. Save the actual storyboard, playable ingredients and render budget; ingredient approval permits clips. Require current script_approved/ingredients_approved, matching tokens/revision and budget. Changed reviews need renewed approval. A prior yes does not authorize changed work.\n\n## Execute, check and deliver\n\nRequire execution.local from a verified customer shell. No cloud, style-only kit, API host, worker or coworker sandbox. Otherwise report the gap.\nvideo_make needs expected_revision and custom render state. Resume the same render with approved tokens; report running/failed/complete honestly and honor Stop. Save actual prompts, settings, every scene and clip checks through video_change custom production. Watch the full output against the approved script, product and brand; save its full quality report. Completion needs a confirmed upload and rebuild recipe here; pin only the checked complete render. Read back manifest/final before delivery. Repairs need affected assets only and renewed approvals/budget.\n\nRebuild recipe: every input the build reads, uploaded here or a linked Library original, plus recipe/source.json; prove a clean-folder rebuild, then save it as custom production source. The next step gives the format.\n\nUse plain words and returned credits. No invented claims, approvals, assets or passing checks.\n";
6
6
  };
7
7
  export type ServerVideoEntrySlug = keyof typeof SERVER_VIDEO_ENTRY_SKILLS;
8
8
  /** renderEntrySkillRules(product) for the products the CLI's own entry skills cover. */
9
9
  export declare const SERVER_ENTRY_SKILL_RULES: {
10
- readonly all: "- Talk to marketers: what they get and what they decide, never how it is made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.\n- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.\n- Follow the next_step in every answer; it says what to do now.\n- With a card on screen (display_hint \"widget\"), add at most one short line; never re-list it or its links.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
11
- readonly ads: "- Talk to marketers: what they get and what they decide, never how it is made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.\n- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.\n- Follow the next_step in every answer; it says what to do now.\n- With a card on screen (display_hint \"widget\"), add at most one short line; never re-list it or its links.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Before choosing an angle, claim, product or source, or asking a brand fact: brand_read, then knowledge_search for the task.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
12
- readonly photos: "- Talk to marketers: what they get and what they decide, never how it is made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens in this chat: never ask the customer to install anything or use a CLI, slash command or other app; the only commands are gooseworks video check and gooseworks video make <id>, when a next_step gives them.\n- Money is a credit number, exactly as an answer gives it: never dollars, never your own math.\n- Follow the next_step in every answer; it says what to do now.\n- With a card on screen (display_hint \"widget\"), add at most one short line; never re-list it or its links.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Before choosing an angle, claim, product or source, or asking a brand fact: brand_read, then knowledge_search for the task.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
10
+ readonly all: "- Talk to marketers: what they get and decide, never how it's made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens here: never ask the customer to install anything or use a CLI, slash command or other app, except npx -y gooseworks@0.5.7 video check and npx -y gooseworks@0.5.7 video make <id> when a next_step gives them.\n- Money is a credit number exactly as an answer gives it: never dollars or your own math.\n- Follow the next_step in every answer.\n- Card on screen (display_hint \"widget\"): one short line at most, then the wait in its next_step or end your turn; never re-list it or open a question box.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
11
+ readonly ads: "- Talk to marketers: what they get and decide, never how it's made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens here: never ask the customer to install anything or use a CLI, slash command or other app, except npx -y gooseworks@0.5.7 video check and npx -y gooseworks@0.5.7 video make <id> when a next_step gives them.\n- Money is a credit number exactly as an answer gives it: never dollars or your own math.\n- Follow the next_step in every answer.\n- Card on screen (display_hint \"widget\"): one short line at most, then the wait in its next_step or end your turn; never re-list it or open a question box.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Before choosing an angle, claim, product or source, or asking a brand fact, brand_read then knowledge_search for the task.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
12
+ readonly photos: "- Talk to marketers: what they get and decide, never how it's made.\n- Never mention tools, ids, JSON, commands, software, vendors, models, timings, retries or your checks.\n- Everything happens here: never ask the customer to install anything or use a CLI, slash command or other app, except npx -y gooseworks@0.5.7 video check and npx -y gooseworks@0.5.7 video make <id> when a next_step gives them.\n- Money is a credit number exactly as an answer gives it: never dollars or your own math.\n- Follow the next_step in every answer.\n- Card on screen (display_hint \"widget\"): one short line at most, then the wait in its next_step or end your turn; never re-list it or open a question box.\n- Paid work needs the customer's yes to the credit total first, on the card or in chat at the price shown; you never approve.\n- Before choosing an angle, claim, product or source, or asking a brand fact, brand_read then knowledge_search for the task.\n- Never invent an offer, a claim or proof.\n- GooseWorks holds every provider key and bills the work: never ask for a key, token, password or ad account id, and never call a vendor yourself.";
13
13
  };
14
14
  //# sourceMappingURL=server-entry-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-entry-skills.d.ts","sourceRoot":"","sources":["../../src/skills/server-entry-skills.ts"],"names":[],"mappings":"AAcA,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAE/C,eAAO,MAAM,yBAAyB;;;CAmE5B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE1E,wFAAwF;AACxF,eAAO,MAAM,wBAAwB;;;;CA8B3B,CAAC"}
1
+ {"version":3,"file":"server-entry-skills.d.ts","sourceRoot":"","sources":["../../src/skills/server-entry-skills.ts"],"names":[],"mappings":"AAcA,qDAAqD;AACrD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAE/C,eAAO,MAAM,yBAAyB;;;CAgG5B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE1E,wFAAwF;AACxF,eAAO,MAAM,wBAAwB;;;;CA8B3B,CAAC"}