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.
- package/README.md +58 -8
- package/dist/agents/claude.js +1 -1
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/codex.js +1 -1
- package/dist/agents/codex.js.map +1 -1
- package/dist/agents/skill-links.d.ts +7 -2
- package/dist/agents/skill-links.d.ts.map +1 -1
- package/dist/agents/skill-links.js +10 -5
- package/dist/agents/skill-links.js.map +1 -1
- package/dist/auth/attribution.d.ts +14 -0
- package/dist/auth/attribution.d.ts.map +1 -0
- package/dist/auth/attribution.js +37 -0
- package/dist/auth/attribution.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +4 -4
- package/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +8 -8
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -1
- package/dist/commands/call.js +6 -5
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +11 -7
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +13 -27
- package/dist/commands/login.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -2
- package/dist/config.js.map +1 -1
- package/dist/skills/installer.d.ts +9 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +20 -6
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/master-skill.d.ts +24 -22
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +392 -149
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/names.d.ts +53 -1
- package/dist/skills/names.d.ts.map +1 -1
- package/dist/skills/names.js +107 -7
- package/dist/skills/names.js.map +1 -1
- package/dist/skills/routes.d.ts +68 -0
- package/dist/skills/routes.d.ts.map +1 -0
- package/dist/skills/routes.js +124 -0
- package/dist/skills/routes.js.map +1 -0
- package/package.json +1 -1
- package/skills/goose-ads/SKILL.md +124 -104
- package/skills/goose-product-photos/SKILL.md +129 -0
- package/skills/gooseworks/SKILL.md +100 -41
- package/skills/routes.json +157 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/names.d.ts
CHANGED
|
@@ -1,2 +1,54 @@
|
|
|
1
|
-
|
|
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":"
|
|
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"}
|
package/dist/skills/names.js
CHANGED
|
@@ -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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
package/dist/skills/names.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"
|
|
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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"}
|