gooseworks 0.3.5 → 0.3.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"master-skill.d.ts","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAM7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA8K9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAsLhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA+MlD"}
1
+ {"version":3,"file":"master-skill.d.ts","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAM7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA8K9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAoOhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA+MlD"}
@@ -226,7 +226,7 @@ description: >
226
226
  app uses) — credits are reserved and billed server-side. Analytics recipes are fetched from
227
227
  goose-skills on demand.
228
228
  category: ads
229
- version: 2.0.0
229
+ version: 2.1.0
230
230
  author: GooseWorks
231
231
  tags: [gooseworks, ads, remix, static-ad, brand, creative, image, analytics, meta-ads, performance]
232
232
  ---
@@ -269,8 +269,10 @@ what they'd get in the UI. **Pass these explicitly:**
269
269
  - \`ratios\`: **["4:5"]** (Meta feed vertical)
270
270
  - \`engine\`: **"gpt_image_2"**
271
271
  - \`quality\`: **"medium"**
272
- - \`preserve_source_styling\`: **true** (keep the template's own colours/fonts; only restyle to
273
- the brand palette if the user explicitly asks to "match my brand colours")
272
+ - \`preserve_source_styling\`: **ASK the user** — "Keep original" (the template's own
273
+ colours/fonts \`preserve_source_styling: true\`) vs "Match brand" (restyle to the brand
274
+ palette/fonts → \`preserve_source_styling: false\`). This mirrors the app's Styling control.
275
+ **The default is "Keep original"** — if the user doesn't answer or doesn't care, send \`true\`.
274
276
 
275
277
  If the user asks for something the app exposes (more variants, a different ratio like 1:1 or
276
278
  9:16, a faster engine, higher quality), pass that instead. Omitting a field lets backend policy
@@ -296,6 +298,12 @@ decide — fine, but prefer sending the app defaults for predictable parity.
296
298
  \`status\` is \`"failed"\` — never assume a stall and re-submit, that double-bills.
297
299
  - \`list_brand_creatives { brand_id, limit?, offset? }\` — the brand's gallery feed (newest
298
300
  first) + \`brand_url\`. Alternative poll target; also use to show everything made for a brand.
301
+ - \`surprise_me_templates { brand_id, count? }\` — the **"Surprise me" recommender**. Picks
302
+ brand-relevant templates (SAME logic as the web /create "Surprise me" button — templates
303
+ whose category overlaps the brand float to the top, bucketed + shuffled so picks stay fresh).
304
+ Returns the picked templates (id, slug, title, image, ratio) AND a ready-to-open \`create_url\`
305
+ (the /create page with \`cli=true\` and the picks pre-selected). This is how you recommend
306
+ templates — do NOT hand-pick from the raw catalog yourself (see "Picking templates" below).
299
307
  - \`regenerate_creative { project_id, mode?, prompt?, source_render_id?, ... }\` — **edit / re-roll
300
308
  one existing creative** through the same pipeline. \`mode: "variation"\` (default) re-rolls from
301
309
  the template; \`"edit"\` makes a targeted change to a specific render (\`prompt\` + \`source_render_id\`
@@ -319,21 +327,53 @@ decide — fine, but prefer sending the app defaults for predictable parity.
319
327
  image as a private template, then remix it like any other.
320
328
  - \`get_ad_project\` / \`append_project_message\` — inspect a creative / leave a note on its thread.
321
329
 
330
+ ## Picking templates — ASK the user; don't freelance from the catalog
331
+
332
+ When the user wants to make ads but has NOT named a specific template (id/slug/Community
333
+ ad/upload), do NOT silently browse the raw catalog and hand-pick for them. Instead run this
334
+ short ask flow — it mirrors the web app and keeps the human in the loop:
335
+
336
+ 1. **Ask what kind of ads they want** — the angle/offer/theme/season, the vibe, and which
337
+ product from the brand kit to feature. This shapes both the template choice and your steering
338
+ \`prompt\`. Keep it to one or two quick questions.
339
+ 2. **Ask how to pick templates: "Choose explicitly" or "Surprise me".**
340
+ - **Surprise me** (they want you/the app to pick) → call
341
+ \`surprise_me_templates { brand_id, count }\` and hand the user the returned \`create_url\`.
342
+ It opens /create in **CLI mode** with the picks pre-selected, a preview modal, and the
343
+ **copyable remix prompt at the bottom** (in place of the Generate input). They can swap
344
+ picks and copy that prompt. If they'd rather you "just make them" without reviewing in the
345
+ app, you MAY submit the \`surprise_me_templates\` picks directly (skip to submit).
346
+ - **Choose explicitly** (they want to browse and select) → hand the user this URL, with the
347
+ active brand's slug filled in:
348
+ \`https://make.gooseworks.ai/create?brand=<brand-slug>&cli=true\`
349
+ In CLI mode the app shows the copyable remix prompt at the bottom (dismissable / switchable
350
+ back to the UI composer). They browse, select templates, and copy the prompt.
351
+ 3. **Ask the styling** — "Keep original" (default) vs "Match brand" — per the Defaults section.
352
+ 4. **Close the loop.** When the user **pastes back the copyable remix prompt** from the app
353
+ (it names the brand + the templates they chose), THAT is your cue to generate: resolve the
354
+ named template(s), then \`submit_remix_batch\` with the app defaults + the styling they chose.
355
+
356
+ If the user already named a template (id/slug), a Community ad, or an upload, skip the ask flow
357
+ for template choice — they've chosen — but still confirm the styling default and steer the prompt.
358
+
322
359
  ## Workflow — make ads from a template
323
360
 
324
361
  1. **Resolve the brand.** \`list_ad_brands\` by name/site → \`get_brand_kit { brand_id }\`. If the
325
362
  kit's \`researchStatus\` isn't \`complete\`, you can still submit (the batch queues and runs when
326
363
  research finishes) — just tell the user. Use the kit to pick \`product_name\` (a real entry from
327
364
  \`products[]\`, not a guess) and, if the user supplied product photos, \`reference_image_urls\`.
328
- 2. **Resolve the template(s).** \`get_static_ad_template { template_id }\` for each. For a Community
329
- ad, \`remix_community_ad\` first; for an uploaded image, \`create_user_ad_template\` first.
365
+ 2. **Pick the template(s) via the ask flow above** (kind of ads → Choose explicitly vs Surprise
366
+ me styling). Once you have concrete ids: \`get_static_ad_template { template_id }\` for each.
367
+ For a Community ad, \`remix_community_ad\` first; for an uploaded image, \`create_user_ad_template\`
368
+ first.
330
369
  3. **(Optional) Craft the steering prompt.** The \`prompt\` is OPTIONAL — this is where the skill
331
- adds value: turn the user's intent into a concise steering note (e.g. tone, season, emphasis).
332
- Don't over-specify; the backend pipeline + brand kit handle palette, fonts, product swap.
370
+ adds value: turn the user's intent (from step 1) into a concise steering note (e.g. tone,
371
+ season, emphasis). Don't over-specify; the backend pipeline + brand kit handle palette, fonts,
372
+ product swap.
333
373
  4. **(Optional) Quote the cost.** \`estimate_remix_batch { items, engine, quality }\` → tell the user.
334
374
  5. **Submit ONE batch.** \`submit_remix_batch { brand_id, items, prompt?, product_name?, engine,
335
- quality, preserve_source_styling }\` using the app defaults above. Keep the returned \`batch_id\`
336
- and \`links\`.
375
+ quality, preserve_source_styling }\` using the app defaults above and the styling the user chose.
376
+ Keep the returned \`batch_id\` and \`links\`.
337
377
  6. **Poll until done.** \`get_remix_batch { batch_id }\` (or \`list_brand_creatives\`) every ~20-30s
338
378
  until every creative's \`pending\` is 0. Most images finish in a few minutes; text-heavy templates
339
379
  and \`quality: high\` take longer. Read each render's \`elapsed_seconds\` rather than guessing — a
@@ -390,6 +430,12 @@ run through the \`gooseworks\` CLI (\`gooseworks fetch\` / \`gooseworks call\`),
390
430
  each creative's \`app_url\`), copied verbatim. Never end on just "done" or a file path.
391
431
  - **Quote cost before generating** when it's non-trivial (use \`estimate_remix_batch\`), and
392
432
  relay \`insufficient_credits\` plainly if the submit is rejected — don't retry blindly.
433
+ - **Don't hand-pick templates silently.** If the user didn't name a template, run the ask flow
434
+ (kind of ads → Choose explicitly vs Surprise me → styling). "Surprise me" goes through
435
+ \`surprise_me_templates\`; "Choose explicitly" sends them to \`/create?brand=<slug>&cli=true\`.
436
+ Generate when they paste the app's copyable remix prompt back (or submit the surprise picks
437
+ directly if they'd rather not review).
438
+ - **Ask the styling** — Keep original (default) vs Match brand — before you submit.
393
439
  - **Don't busy-loop** — poll \`get_remix_batch\` on a sensible interval (~20-30s); a \`queued\`
394
440
  batch is waiting on research and will start on its own.
395
441
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA4BA,wCAMC;AAWD,sDA8KC;AAiBD,0DAsLC;AAcD,8DA+MC;AApmBD,oDAAoD;AACpD,SAAgB,cAAc;IAC5B,OAAO;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;QACxD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE;QACzD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4KR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoLR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6MR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA4BA,wCAMC;AAWD,sDA8KC;AAiBD,0DAoOC;AAcD,8DA+MC;AAlpBD,oDAAoD;AACpD,SAAgB,cAAc;IAC5B,OAAO;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;QACxD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE;QACzD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4KR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkOR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6MR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gooseworks",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "GooseWorks CLI — give your coding agent real data tools",
5
5
  "bin": {
6
6
  "gooseworks": "./dist/index.js"