gooseworks 0.3.7 → 0.3.8

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,CAoOhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAiPlD"}
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,CA2QhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CA6OlD"}
@@ -393,10 +393,49 @@ Then poll with \`get_remix_batch\` and hand back the links, same as above.
393
393
 
394
394
  ## Brand research
395
395
 
396
- Research normally runs in the GooseWorks backend (on onboarding). Just read the result with
397
- \`get_brand_kit\`. If a brand doesn't exist yet, you may \`create_ad_brand\` and let backend
398
- research run; you don't need to research locally. (A standalone local recipe still exists via
399
- \`gooseworks fetch brand-research\` if the user explicitly wants the agent to do it.)
396
+ Prefer the backend's result: \`get_brand_kit { brand_id }\`. If \`researchStatus\` is
397
+ \`complete\`, REUSE it never re-research.
398
+
399
+ **The split backend owns visuals, you own the qualitative depth:**
400
+
401
+ - **Backend LIGHT pass (automatic).** \`create_ad_brand\` with a \`website_url\` kicks off the same
402
+ backend research the web app uses, in \`mode: "light"\`: it resolves the **authoritative logo,
403
+ colors, and fonts** (Brandfetch + context.dev) plus a baseline kit, then flips
404
+ \`research_status\` to \`complete\` — usually under a minute. You can't reproduce those visual
405
+ signals locally, so **never re-derive logo/colors/fonts.** (Web onboarding via \`/api/ads/onboard\`
406
+ runs the full thing; nothing to do but read it.)
407
+ - **Your DEEP pass (local, agentic).** You add the qualitative depth the light pass leaves thin —
408
+ positioning, audience segments, voice, brandType, value props, proof points, products — grounded
409
+ on the actual site.
410
+
411
+ **CLI brand-research flow:**
412
+
413
+ 1. \`create_ad_brand { name, website_url }\` → keep \`brand_id\` + \`slug\`. The brand comes back with
414
+ \`research_status: "pending"\` (light pass in flight).
415
+ 2. **Wait for the backend light pass:** poll \`get_brand_kit { brand_id }\` until \`researchStatus\`
416
+ is \`complete\` (usually <60s). Now the kit has authoritative logo/colors/fonts + a baseline.
417
+ At this point generation is already unblocked — but do the deep pass to make it good.
418
+ 3. **Deep research locally:** \`gooseworks fetch brand-research\` and follow its phases. **Ground
419
+ every fact on the fetched site** — if the site can't be read, say so and ask the user; never
420
+ guess a category from the brand name alone.
421
+ 4. **Write the pack** with \`write_file\` under \`agent-config/brands/<slug>/\`:
422
+ - the \`brand-research/*.md\` docs + \`brand-assets/manifest.json\` (human-readable pack), AND
423
+ - \`brand-research/kit-patch.json\` — the STRUCTURED fields the web UI renders. Field-for-field
424
+ contract; only what you put here reaches the kit. Shape:
425
+ \`{ positioning?: string, audience?: string, voice?: string, brandType?: string, tagline?: string, valueProps?: string[], proofPoints?: string[], products?: [{ name, description?, link?, pricing?, imageUrls?: string[] }] }\`
426
+ (\`brandType\` ∈ product | saas | service | agency | restaurant | fashion | beauty | fitness |
427
+ finance | education | health). Only URLs already in our storage for product images.
428
+ - **Do NOT set logo / colors / fonts here** — the backend light pass already owns those.
429
+ 5. **Persist it:** \`finalize_brand_research { brand_id }\` merges \`kit-patch.json\` into the kit
430
+ NON-CLOBBERINGLY (it will NOT overwrite the backend's visuals or any user edit), then re-confirms
431
+ \`research_status: complete\`.
432
+ 6. **Verify:** \`get_brand_kit { brand_id }\` — confirm the qualitative fields you wrote are present
433
+ before generating.
434
+
435
+ **If the brand has NO website**, the backend light pass can't run (nothing to fetch) — do the whole
436
+ thing locally (steps 3–6) and finalize; an un-finalized brand has no kit for generation and leaves
437
+ no artifact to debug a wrong run (this is how a bad local classification, e.g. mislabelling a SaaS
438
+ as a "drink company", used to vanish without a trace).
400
439
 
401
440
  ## Analyze / intelligence (fetched recipes — NOT generation)
402
441
 
@@ -528,38 +567,34 @@ id). The app NEVER runs you — it is the viewer + review surface; you are the r
528
567
  never re-research. If not, run brand research first (\`gooseworks fetch brand-research\`,
529
568
  follow it, then \`finalize_brand_research { brand_id }\`) before continuing.
530
569
 
531
- ## Step 2 — fetch the recipe + its pack skills for the format
532
-
533
- The video-ad format skills live in two goose-skills packs **\`video-ad-formats\`** (phone-surface
534
- HTML-mockup renders) and **\`ugc-video-formats\`** (GPT-image-2 + Seedance 2.0 reference-to-video).
535
- Map the project's \`format\` to its recipe slug:
536
-
537
- | format | recipe slug | renderer + atoms it drives |
538
- | --- | --- | --- |
539
- | \`imessage\` | \`remix-imessage-ad-from-sample\` | create-imessage-video-ad, create-imessage-mockup, stitch-videos-ffmpeg, mix-master, watch |
540
- | \`chatgpt\` | \`remix-chatgpt-ad-from-sample\` | create-chatgpt-video-ad, create-chatgpt-mockup, render-ios-keyboard, stitch-videos-ffmpeg, watch |
541
- | \`apple-notes\` | \`remix-apple-notes-ad-from-sample\` | create-apple-notes-video-ad, create-apple-notes-mockup, stitch-videos-ffmpeg, watch |
542
- | \`ugc-product\` | \`remix-ugc-product-from-sample\` | create-ugc-product-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
543
- | \`ugc-grwm\` | \`remix-ugc-grwm-from-sample\` | create-ugc-grwm-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
544
- | \`ugc-skincare\` | \`remix-ugc-skincare-from-sample\` | create-ugc-skincare-demo-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
545
- | \`ugc-car-confessional\` | \`remix-ugc-car-confessional-from-sample\` | create-ugc-car-confessional-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
546
- | \`ugc-walk-and-talk\` | \`remix-ugc-walk-and-talk-from-sample\` | create-ugc-walk-and-talk-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
547
- | \`ugc-street-testimonial\` | \`remix-ugc-street-testimonial-from-sample\` | create-ugc-street-testimonial-video-from-refs, create-video-seedance-2-fal, create-image-gpt-image-fal, watch |
548
-
549
- (photo-grid + music-video coming.) Pack skills are fetchable individually by slug but do NOT
550
- auto-resolve dependencies (no \`dependencySkills\`), so \`gooseworks fetch\` the recipe **and** each
551
- skill in its row — e.g. for iMessage:
552
-
553
- \`\`\`bash
554
- for s in remix-imessage-ad-from-sample create-imessage-video-ad create-imessage-mockup \\
555
- stitch-videos-ffmpeg mix-master watch; do gooseworks fetch "$s"; done
556
- \`\`\`
557
-
558
- Each prints \`{ content, scripts, files }\`. Save each skill's scripts + files under
559
- \`/tmp/gooseworks-scripts/<slug>/\` and FOLLOW the recipe's SKILL.md — it orchestrates the others.
560
- The renderer (the \`create-*-mockup\` atom for the format) is a Node package —
561
- \`npm install\` in its folder so its \`generate.js\` + Playwright resolve, and point the recorder's
562
- \`NODE_PATH\` at it.
570
+ ## Step 2 — read the template's recipe (it carries everything; NO hardcoded format map)
571
+
572
+ The ad format is a **template (data) in the ad_sample DB**, not a per-format skill.
573
+ \`get_ad_template(source_sample_id)\` returns the template's \`recipe\` a self-contained brief you
574
+ read and execute. **Do NOT map \`format\` to a hardcoded recipe slug** (there is no such table):
575
+
576
+ - \`recipe.format\` the format label (e.g. \`vignette\`), for display only.
577
+ - \`recipe.atoms\` the **capabilities** this template composes (e.g. \`create-video-seedance-2-fal\`,
578
+ \`create-image-gpt-image-fal\`, \`review-ugc-render\`, \`watch\`). \`gooseworks fetch <name>\` each — they
579
+ live in \`skills/ads/capabilities/\` and are reused across templates (so they cache).
580
+ - \`recipe.instructions\` the **playbook** to follow: \`instructions.inline\` prose, or
581
+ \`instructions.doc_url\` (an S3 markdown doc fetch it).
582
+ - \`recipe.config\` every param (prompts, layout, timings, palette, model choices).
583
+ - \`recipe.inputs\` the brand-asset contract (which product / logo / offer this template needs).
584
+ - \`recipe.assets\` reference material as S3 links (reference render, style guide, example frames) —
585
+ fetch as needed.
586
+
587
+ Runtime: **read the recipe → \`gooseworks fetch\` each capability in \`recipe.atoms\` → follow
588
+ \`recipe.instructions\` with \`recipe.config\` + the brand's bound \`inputs\`.** The template IS the recipe;
589
+ there is no \`format recipe-slug\` table and no per-format skill to fetch.
590
+
591
+ Save each fetched capability's scripts + files under \`/tmp/gooseworks-scripts/<name>/\`. If a capability
592
+ is a Node package (a phone-mockup renderer), \`npm install\` in its folder so its \`generate.js\` +
593
+ Playwright resolve, and point the recorder's \`NODE_PATH\` at it.
594
+
595
+ > **Migration note:** older phone-mockup formats (\`imessage\` / \`chatgpt\` / \`apple-notes\`) whose DB
596
+ > recipe does not yet carry \`atoms\` / \`instructions\` still hold the legacy \`recipe.thread\` payload;
597
+ > migrate them to this shape (capabilities + instructions in the DB) do not reintroduce a CLI map.
563
598
 
564
599
  ## Step 3 — prepare ALL the ingredients, then review ONCE (always, before any paid render)
565
600
 
@@ -1 +1 @@
1
- {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA4BA,wCAMC;AAWD,sDA8KC;AAiBD,0DAoOC;AAcD,8DAiPC;AAprBD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+OR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA4BA,wCAMC;AAWD,sDA8KC;AAiBD,0DA2QC;AAcD,8DA6OC;AAvtBD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyQR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gooseworks",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "GooseWorks CLI — give your coding agent real data tools",
5
5
  "bin": {
6
6
  "gooseworks": "./dist/index.js"