gooseworks 0.3.15 → 0.4.0

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 (52) hide show
  1. package/README.md +58 -8
  2. package/dist/agents/claude.js +1 -1
  3. package/dist/agents/claude.js.map +1 -1
  4. package/dist/agents/codex.js +1 -1
  5. package/dist/agents/codex.js.map +1 -1
  6. package/dist/agents/skill-links.d.ts +7 -2
  7. package/dist/agents/skill-links.d.ts.map +1 -1
  8. package/dist/agents/skill-links.js +10 -5
  9. package/dist/agents/skill-links.js.map +1 -1
  10. package/dist/auth/attribution.d.ts +14 -0
  11. package/dist/auth/attribution.d.ts.map +1 -0
  12. package/dist/auth/attribution.js +37 -0
  13. package/dist/auth/attribution.js.map +1 -0
  14. package/dist/auth/oauth-server.d.ts +4 -4
  15. package/dist/auth/oauth-server.d.ts.map +1 -1
  16. package/dist/auth/oauth-server.js +8 -8
  17. package/dist/auth/oauth-server.js.map +1 -1
  18. package/dist/commands/call.d.ts.map +1 -1
  19. package/dist/commands/call.js +6 -5
  20. package/dist/commands/call.js.map +1 -1
  21. package/dist/commands/install.d.ts.map +1 -1
  22. package/dist/commands/install.js +11 -7
  23. package/dist/commands/install.js.map +1 -1
  24. package/dist/commands/login.d.ts +1 -1
  25. package/dist/commands/login.d.ts.map +1 -1
  26. package/dist/commands/login.js +13 -27
  27. package/dist/commands/login.js.map +1 -1
  28. package/dist/config.d.ts +1 -1
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +6 -2
  31. package/dist/config.js.map +1 -1
  32. package/dist/skills/installer.d.ts +9 -0
  33. package/dist/skills/installer.d.ts.map +1 -1
  34. package/dist/skills/installer.js +20 -6
  35. package/dist/skills/installer.js.map +1 -1
  36. package/dist/skills/master-skill.d.ts +24 -22
  37. package/dist/skills/master-skill.d.ts.map +1 -1
  38. package/dist/skills/master-skill.js +392 -149
  39. package/dist/skills/master-skill.js.map +1 -1
  40. package/dist/skills/names.d.ts +53 -1
  41. package/dist/skills/names.d.ts.map +1 -1
  42. package/dist/skills/names.js +107 -7
  43. package/dist/skills/names.js.map +1 -1
  44. package/dist/skills/routes.d.ts +68 -0
  45. package/dist/skills/routes.d.ts.map +1 -0
  46. package/dist/skills/routes.js +124 -0
  47. package/dist/skills/routes.js.map +1 -0
  48. package/package.json +1 -1
  49. package/skills/goose-ads/SKILL.md +124 -104
  50. package/skills/goose-product-photos/SKILL.md +129 -0
  51. package/skills/gooseworks/SKILL.md +100 -41
  52. package/skills/routes.json +157 -0
@@ -1 +1 @@
1
- {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA4BA,wCAMC;AAWD,sDA8NC;AAiBD,0DA0UC;AAcD,8DA2bC;AAphCD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4NR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwUR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAybR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,54 @@
1
- export declare function isManagedGooseworksSkill(name: string): boolean;
1
+ /**
2
+ * Which directories under ~/.agents/skills/ the CLI is allowed to DELETE.
3
+ *
4
+ * GOOSE-3191 (data loss): this predicate used to match ANY directory whose name
5
+ * started with `goose-` or `gooseworks-`. `gooseworks install` calls
6
+ * `removeAllSkills()` on every install / update / login-refresh, so a user's own
7
+ * unrelated third-party skill — `goose-notes`, `goose-jira`, anything they wrote
8
+ * themselves — was silently destroyed. A name prefix is NOT ownership.
9
+ *
10
+ * The rule now, in order of authority:
11
+ *
12
+ * 1. **Known entry-skill slugs** (`gooseworks`, `goose-ads`, `goose-video`,
13
+ * `goose-product-photos`, plus the legacy `ads-remix` name) are ours by
14
+ * definition — they are the dirs the CLI itself writes on every install, so
15
+ * we delete them regardless of whether they carry a stamp. This is what
16
+ * keeps upgrades from an old CLI working.
17
+ * 2. **A `.gooseworks-version` stamp** marks a directory the installer wrote.
18
+ * It is a SECONDARY signal, used to recognise standalone skills installed
19
+ * with `--with <slug>` (whose slugs we can't enumerate ahead of time).
20
+ * 3. **Anything else is the user's.** An unstamped directory that is not a
21
+ * known entry slug is NEVER deleted, no matter what it's called.
22
+ *
23
+ * Deliberate, documented trade-off: a standalone skill installed by an OLDER CLI
24
+ * (before `installStandaloneSkill` wrote a stamp) is unstamped and therefore no
25
+ * longer removed by `removeAllSkills()`. That is the safe direction to be wrong —
26
+ * it leaves a stale-but-working copy on disk instead of deleting a stranger's
27
+ * work — and it self-heals: re-running `gooseworks install --with <slug>`
28
+ * replaces the directory in place and stamps it.
29
+ */
30
+ /** The stamp file `installEntrySkill` / `installStandaloneSkill` write. */
31
+ export declare const STAMP_FILE = ".gooseworks-version";
32
+ /**
33
+ * Entry-skill dir names the CLI no longer writes but must still clean up.
34
+ * `ads-remix` was renamed to `goose-ads`.
35
+ */
36
+ export declare const LEGACY_ENTRY_SKILL_NAMES: readonly ["ads-remix"];
37
+ /**
38
+ * Every skill directory name the CLI itself owns and writes. Derived from
39
+ * `getEntrySkills()` so the registry stays the single source (GOOSE-3190).
40
+ */
41
+ export declare function getManagedEntrySkillNames(): string[];
42
+ /** True when `name` is a skill directory the CLI itself installs. */
43
+ export declare function isManagedEntrySkillName(name: string): boolean;
44
+ /** True when `<skillsBase>/<name>/.gooseworks-version` exists. */
45
+ export declare function hasGooseworksStamp(skillsBase: string, name: string): boolean;
46
+ /**
47
+ * True when the CLI may manage (link, list, and DELETE) `<skillsBase>/<name>/`.
48
+ *
49
+ * `skillsBase` is required: ownership is a property of what's ON DISK, not of
50
+ * the name. Callers that only have a name (e.g. pruning symlinks in
51
+ * ~/.claude/skills) pass the skills base the links point into.
52
+ */
53
+ export declare function isManagedGooseworksSkill(name: string, skillsBase: string): boolean;
2
54
  //# sourceMappingURL=names.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAS9D"}
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,UAAU,wBAAwB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wBAAyB,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM5E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGlF"}
@@ -1,12 +1,112 @@
1
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LEGACY_ENTRY_SKILL_NAMES = exports.STAMP_FILE = void 0;
37
+ exports.getManagedEntrySkillNames = getManagedEntrySkillNames;
38
+ exports.isManagedEntrySkillName = isManagedEntrySkillName;
39
+ exports.hasGooseworksStamp = hasGooseworksStamp;
3
40
  exports.isManagedGooseworksSkill = isManagedGooseworksSkill;
4
- function isManagedGooseworksSkill(name) {
5
- return (name === 'gooseworks' ||
6
- // `ads-remix` was renamed to `goose-ads`; keep it managed so a stale
7
- // ads-remix dir from an older install is cleaned up on the next install.
8
- name === 'ads-remix' ||
9
- name.startsWith('gooseworks-') ||
10
- name.startsWith('goose-'));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const master_skill_1 = require("./master-skill");
44
+ /**
45
+ * Which directories under ~/.agents/skills/ the CLI is allowed to DELETE.
46
+ *
47
+ * GOOSE-3191 (data loss): this predicate used to match ANY directory whose name
48
+ * started with `goose-` or `gooseworks-`. `gooseworks install` calls
49
+ * `removeAllSkills()` on every install / update / login-refresh, so a user's own
50
+ * unrelated third-party skill — `goose-notes`, `goose-jira`, anything they wrote
51
+ * themselves — was silently destroyed. A name prefix is NOT ownership.
52
+ *
53
+ * The rule now, in order of authority:
54
+ *
55
+ * 1. **Known entry-skill slugs** (`gooseworks`, `goose-ads`, `goose-video`,
56
+ * `goose-product-photos`, plus the legacy `ads-remix` name) are ours by
57
+ * definition — they are the dirs the CLI itself writes on every install, so
58
+ * we delete them regardless of whether they carry a stamp. This is what
59
+ * keeps upgrades from an old CLI working.
60
+ * 2. **A `.gooseworks-version` stamp** marks a directory the installer wrote.
61
+ * It is a SECONDARY signal, used to recognise standalone skills installed
62
+ * with `--with <slug>` (whose slugs we can't enumerate ahead of time).
63
+ * 3. **Anything else is the user's.** An unstamped directory that is not a
64
+ * known entry slug is NEVER deleted, no matter what it's called.
65
+ *
66
+ * Deliberate, documented trade-off: a standalone skill installed by an OLDER CLI
67
+ * (before `installStandaloneSkill` wrote a stamp) is unstamped and therefore no
68
+ * longer removed by `removeAllSkills()`. That is the safe direction to be wrong —
69
+ * it leaves a stale-but-working copy on disk instead of deleting a stranger's
70
+ * work — and it self-heals: re-running `gooseworks install --with <slug>`
71
+ * replaces the directory in place and stamps it.
72
+ */
73
+ /** The stamp file `installEntrySkill` / `installStandaloneSkill` write. */
74
+ exports.STAMP_FILE = '.gooseworks-version';
75
+ /**
76
+ * Entry-skill dir names the CLI no longer writes but must still clean up.
77
+ * `ads-remix` was renamed to `goose-ads`.
78
+ */
79
+ exports.LEGACY_ENTRY_SKILL_NAMES = ['ads-remix'];
80
+ /**
81
+ * Every skill directory name the CLI itself owns and writes. Derived from
82
+ * `getEntrySkills()` so the registry stays the single source (GOOSE-3190).
83
+ */
84
+ function getManagedEntrySkillNames() {
85
+ return [...(0, master_skill_1.getEntrySkillNames)(), ...exports.LEGACY_ENTRY_SKILL_NAMES];
86
+ }
87
+ /** True when `name` is a skill directory the CLI itself installs. */
88
+ function isManagedEntrySkillName(name) {
89
+ return getManagedEntrySkillNames().includes(name);
90
+ }
91
+ /** True when `<skillsBase>/<name>/.gooseworks-version` exists. */
92
+ function hasGooseworksStamp(skillsBase, name) {
93
+ try {
94
+ return fs.existsSync(path.join(skillsBase, name, exports.STAMP_FILE));
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * True when the CLI may manage (link, list, and DELETE) `<skillsBase>/<name>/`.
102
+ *
103
+ * `skillsBase` is required: ownership is a property of what's ON DISK, not of
104
+ * the name. Callers that only have a name (e.g. pruning symlinks in
105
+ * ~/.claude/skills) pass the skills base the links point into.
106
+ */
107
+ function isManagedGooseworksSkill(name, skillsBase) {
108
+ if (isManagedEntrySkillName(name))
109
+ return true;
110
+ return hasGooseworksStamp(skillsBase, name);
11
111
  }
12
112
  //# sourceMappingURL=names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;AAAA,4DASC;AATD,SAAgB,wBAAwB,CAAC,IAAY;IACnD,OAAO,CACL,IAAI,KAAK,YAAY;QACrB,qEAAqE;QACrE,yEAAyE;QACzE,IAAI,KAAK,WAAW;QACpB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC1B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,8DAEC;AAGD,0DAEC;AAGD,gDAMC;AASD,4DAGC;AA3ED,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAoD;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,2EAA2E;AAC9D,QAAA,UAAU,GAAG,qBAAqB,CAAC;AAEhD;;;GAGG;AACU,QAAA,wBAAwB,GAAG,CAAC,WAAW,CAAU,CAAC;AAE/D;;;GAGG;AACH,SAAgB,yBAAyB;IACvC,OAAO,CAAC,GAAG,IAAA,iCAAkB,GAAE,EAAE,GAAG,gCAAwB,CAAC,CAAC;AAChE,CAAC;AAED,qEAAqE;AACrE,SAAgB,uBAAuB,CAAC,IAAY;IAClD,OAAO,yBAAyB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,kEAAkE;AAClE,SAAgB,kBAAkB,CAAC,UAAkB,EAAE,IAAY;IACjE,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,kBAAU,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,IAAY,EAAE,UAAkB;IACvE,IAAI,uBAAuB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * THE routing table for the GooseWorks skill family (GOOSE-3190).
3
+ *
4
+ * Routing used to be written out by hand in THREE places that drifted apart:
5
+ * 1. this CLI's `gooseworks` router SKILL.md (`master-skill.ts`),
6
+ * 2. the backend's hosted-connector pointer
7
+ * (`gooseworks-app/backend/src/app-mcp-server/lib/ads-skill.ts`),
8
+ * 3. the public skills repo's `collections/brand-growth`.
9
+ *
10
+ * This file is now the SINGLE SOURCE. `master-skill.ts` renders its markdown
11
+ * tables from here (no hand-written route rows), `npm run generate:skills`
12
+ * emits the machine-readable copy to `skills/routes.json` for the other two
13
+ * repos to derive from, and `tests/skills/route-drift.test.ts` fails when any
14
+ * of the three names a skill the others don't.
15
+ *
16
+ * The two consumers we cannot edit from this repo are represented by checked-in
17
+ * snapshots under `tests/fixtures/`; each snapshot names the file to update when
18
+ * the drift test fires.
19
+ */
20
+ /** How a routed skill reaches the agent. */
21
+ export type RouteDelivery =
22
+ /** Vendored by this CLI and installed to ~/.agents/skills/. */
23
+ 'entry'
24
+ /** Lives in goose-skills; fetched on demand with `gooseworks fetch <slug>`. */
25
+ | 'fetch';
26
+ export interface DomainRoute {
27
+ /** The skill slug to route to. */
28
+ skill: string;
29
+ /** When this route applies — the left column of the router table. */
30
+ when: string;
31
+ /** How the agent gets the skill — the right column of the router table. */
32
+ how: string;
33
+ delivery: RouteDelivery;
34
+ }
35
+ export interface BrandGrowthRoute {
36
+ /** The job to be done. */
37
+ job: string;
38
+ /** The skill slug(s) that do it, in order. */
39
+ skills: string[];
40
+ }
41
+ /**
42
+ * Domain routes — the "Route to the right skill FIRST" table. These are the
43
+ * specialist skills the `gooseworks` router hands whole tasks to.
44
+ */
45
+ export declare const DOMAIN_ROUTES: DomainRoute[];
46
+ /**
47
+ * Brand Growth routes — the outcome skills in the `brand-growth` collection.
48
+ * Must stay in sync with `goose-skills/collections/brand-growth/routes.json`,
49
+ * which is derived from this list.
50
+ */
51
+ export declare const BRAND_GROWTH_ROUTES: BrandGrowthRoute[];
52
+ /** Every skill slug named by any route, deduped and sorted. */
53
+ export declare function getRoutedSkillSlugs(): string[];
54
+ /** Brand Growth slugs only (the ones the goose-skills collection must contain). */
55
+ export declare function getBrandGrowthSkillSlugs(): string[];
56
+ /** The machine-readable route table emitted to `skills/routes.json`. */
57
+ export declare function getRouteManifest(): {
58
+ $comment: string;
59
+ version: number;
60
+ domain_routes: DomainRoute[];
61
+ brand_growth_routes: BrandGrowthRoute[];
62
+ skills: string[];
63
+ };
64
+ /** Render the domain route table as the router SKILL.md markdown table body. */
65
+ export declare function renderDomainRouteTable(): string;
66
+ /** Render the Brand Growth job→skill table body. */
67
+ export declare function renderBrandGrowthTable(): string;
68
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/skills/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,aAAa;AACvB,+DAA+D;AAC7D,OAAO;AACT,+EAA+E;GAC7E,OAAO,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EA+BtC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAkBjD,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAK9C;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAInD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,IAAI;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CASA;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED,oDAAoD;AACpD,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * THE routing table for the GooseWorks skill family (GOOSE-3190).
4
+ *
5
+ * Routing used to be written out by hand in THREE places that drifted apart:
6
+ * 1. this CLI's `gooseworks` router SKILL.md (`master-skill.ts`),
7
+ * 2. the backend's hosted-connector pointer
8
+ * (`gooseworks-app/backend/src/app-mcp-server/lib/ads-skill.ts`),
9
+ * 3. the public skills repo's `collections/brand-growth`.
10
+ *
11
+ * This file is now the SINGLE SOURCE. `master-skill.ts` renders its markdown
12
+ * tables from here (no hand-written route rows), `npm run generate:skills`
13
+ * emits the machine-readable copy to `skills/routes.json` for the other two
14
+ * repos to derive from, and `tests/skills/route-drift.test.ts` fails when any
15
+ * of the three names a skill the others don't.
16
+ *
17
+ * The two consumers we cannot edit from this repo are represented by checked-in
18
+ * snapshots under `tests/fixtures/`; each snapshot names the file to update when
19
+ * the drift test fires.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.BRAND_GROWTH_ROUTES = exports.DOMAIN_ROUTES = void 0;
23
+ exports.getRoutedSkillSlugs = getRoutedSkillSlugs;
24
+ exports.getBrandGrowthSkillSlugs = getBrandGrowthSkillSlugs;
25
+ exports.getRouteManifest = getRouteManifest;
26
+ exports.renderDomainRouteTable = renderDomainRouteTable;
27
+ exports.renderBrandGrowthTable = renderBrandGrowthTable;
28
+ /**
29
+ * Domain routes — the "Route to the right skill FIRST" table. These are the
30
+ * specialist skills the `gooseworks` router hands whole tasks to.
31
+ */
32
+ exports.DOMAIN_ROUTES = [
33
+ {
34
+ skill: 'goose-ads',
35
+ when: 'Remix/make an ad, research a brand for ads, OR analyze ad performance — Meta/Google ad campaigns, creative fatigue, CAC/lead quality, competitor ad intel, ad angles & hooks',
36
+ how: 'Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`.',
37
+ delivery: 'entry',
38
+ },
39
+ {
40
+ skill: 'goose-graphics',
41
+ when: 'Charts, infographics, slides, social graphics, branded visual designs from a style/format',
42
+ how: 'If installed locally, use it. Otherwise `gooseworks fetch goose-graphics` (or `gooseworks install --claude --with goose-graphics`).',
43
+ delivery: 'fetch',
44
+ },
45
+ {
46
+ skill: 'goose-video',
47
+ when: 'Make a **video** ad — remix a video ad template (e.g. iMessage chat-reveal), or "make the video for project <id>"',
48
+ how: 'Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`.',
49
+ delivery: 'entry',
50
+ },
51
+ {
52
+ skill: 'goose-product-photos',
53
+ when: 'Make **product photos** — studio, lifestyle, marketplace, social, or on-model product photography',
54
+ how: 'Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`.',
55
+ delivery: 'entry',
56
+ },
57
+ {
58
+ skill: 'animate-image',
59
+ when: 'Animate an approved static ad or product image',
60
+ how: 'Fetch with `gooseworks fetch animate-image` and follow its GooseWorks MCP workflow.',
61
+ delivery: 'fetch',
62
+ },
63
+ ];
64
+ /**
65
+ * Brand Growth routes — the outcome skills in the `brand-growth` collection.
66
+ * Must stay in sync with `goose-skills/collections/brand-growth/routes.json`,
67
+ * which is derived from this list.
68
+ */
69
+ exports.BRAND_GROWTH_ROUTES = [
70
+ { job: 'Brand foundation', skills: ['brand-research'] },
71
+ { job: 'Competitor ads', skills: ['competitor-ad-intelligence'] },
72
+ { job: 'Customer language and angles', skills: ['comment-mining', 'ad-angle-miner'] },
73
+ { job: 'Competitor social content', skills: ['competitor-social-research'] },
74
+ { job: 'Audience definition', skills: ['audience-research'] },
75
+ { job: 'Creator discovery and evaluation', skills: ['influencer-prospecting', 'creator-profile-teardown'] },
76
+ { job: 'Trends and outlier posts', skills: ['trend-discovery', 'outlier-post-finder'] },
77
+ { job: 'Social listening and product demand', skills: ['social-listening-brief', 'product-demand-research'] },
78
+ { job: 'Long-form source material (calls, podcasts, videos)', skills: ['transcript-intelligence'] },
79
+ {
80
+ job: 'Meta performance, policy, and landing-page match',
81
+ skills: ['meta-ads-analyzer', 'meta-ad-policy-checker', 'ad-to-landing-page-auditor'],
82
+ },
83
+ { job: 'Static ads', skills: ['goose-ads', 'remix-graphic-ad-from-reference'] },
84
+ { job: 'Product photos', skills: ['goose-product-photos', 'product-photoshoot'] },
85
+ { job: 'Written content and repurposing', skills: ['content-repurposing'] },
86
+ { job: 'Graphics and animation', skills: ['goose-graphics', 'animate-image'] },
87
+ ];
88
+ /** Every skill slug named by any route, deduped and sorted. */
89
+ function getRoutedSkillSlugs() {
90
+ const slugs = new Set();
91
+ for (const r of exports.DOMAIN_ROUTES)
92
+ slugs.add(r.skill);
93
+ for (const r of exports.BRAND_GROWTH_ROUTES)
94
+ for (const s of r.skills)
95
+ slugs.add(s);
96
+ return [...slugs].sort();
97
+ }
98
+ /** Brand Growth slugs only (the ones the goose-skills collection must contain). */
99
+ function getBrandGrowthSkillSlugs() {
100
+ const slugs = new Set();
101
+ for (const r of exports.BRAND_GROWTH_ROUTES)
102
+ for (const s of r.skills)
103
+ slugs.add(s);
104
+ return [...slugs].sort();
105
+ }
106
+ /** The machine-readable route table emitted to `skills/routes.json`. */
107
+ function getRouteManifest() {
108
+ return {
109
+ $comment: 'Generated by `npm run generate:skills` from gooseworks/src/skills/routes.ts — the single source for GooseWorks skill routing (GOOSE-3190). Do not hand-edit. Consumers: goose-skills/collections/brand-growth/routes.json and gooseworks-app/backend/src/app-mcp-server/lib/ads-skill.ts.',
110
+ version: 1,
111
+ domain_routes: exports.DOMAIN_ROUTES,
112
+ brand_growth_routes: exports.BRAND_GROWTH_ROUTES,
113
+ skills: getRoutedSkillSlugs(),
114
+ };
115
+ }
116
+ /** Render the domain route table as the router SKILL.md markdown table body. */
117
+ function renderDomainRouteTable() {
118
+ return exports.DOMAIN_ROUTES.map((r) => `| ${r.when} | **\`${r.skill}\`** | ${r.how} |`).join('\n');
119
+ }
120
+ /** Render the Brand Growth job→skill table body. */
121
+ function renderBrandGrowthTable() {
122
+ return exports.BRAND_GROWTH_ROUTES.map((r) => `| ${r.job} | ${r.skills.map((s) => `\`${s}\``).join(', ')} |`).join('\n');
123
+ }
124
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/skills/routes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gooseworks",
3
- "version": "0.3.15",
3
+ "version": "0.4.0",
4
4
  "description": "GooseWorks CLI — give your coding agent real data tools",
5
5
  "bin": {
6
6
  "gooseworks": "./dist/index.js"