gooseworks 0.2.2 → 0.2.5

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 (57) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/README.md +31 -4
  3. package/dist/agents/claude.d.ts.map +1 -1
  4. package/dist/agents/claude.js +4 -3
  5. package/dist/agents/claude.js.map +1 -1
  6. package/dist/agents/codex.d.ts.map +1 -1
  7. package/dist/agents/codex.js +4 -3
  8. package/dist/agents/codex.js.map +1 -1
  9. package/dist/auth/oauth-server.d.ts.map +1 -1
  10. package/dist/auth/oauth-server.js +27 -19
  11. package/dist/auth/oauth-server.js.map +1 -1
  12. package/dist/commands/formats.d.ts +3 -0
  13. package/dist/commands/formats.d.ts.map +1 -0
  14. package/dist/commands/formats.js +155 -0
  15. package/dist/commands/formats.js.map +1 -0
  16. package/dist/commands/graphics/get-flow.d.ts +30 -0
  17. package/dist/commands/graphics/get-flow.d.ts.map +1 -0
  18. package/dist/commands/graphics/get-flow.js +212 -0
  19. package/dist/commands/graphics/get-flow.js.map +1 -0
  20. package/dist/commands/graphics/publish-flow.d.ts +28 -0
  21. package/dist/commands/graphics/publish-flow.d.ts.map +1 -0
  22. package/dist/commands/graphics/publish-flow.js +178 -0
  23. package/dist/commands/graphics/publish-flow.js.map +1 -0
  24. package/dist/commands/graphics/shared.d.ts +48 -0
  25. package/dist/commands/graphics/shared.d.ts.map +1 -0
  26. package/dist/commands/graphics/shared.js +181 -0
  27. package/dist/commands/graphics/shared.js.map +1 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +29 -1
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/styles.d.ts +3 -0
  32. package/dist/commands/styles.d.ts.map +1 -0
  33. package/dist/commands/styles.js +157 -0
  34. package/dist/commands/styles.js.map +1 -0
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/graphics-api.d.ts +106 -0
  38. package/dist/lib/graphics-api.d.ts.map +1 -0
  39. package/dist/lib/graphics-api.js +289 -0
  40. package/dist/lib/graphics-api.js.map +1 -0
  41. package/dist/lib/graphics-cache.d.ts +31 -0
  42. package/dist/lib/graphics-cache.d.ts.map +1 -0
  43. package/dist/lib/graphics-cache.js +126 -0
  44. package/dist/lib/graphics-cache.js.map +1 -0
  45. package/dist/lib/graphics-manifest.d.ts +96 -0
  46. package/dist/lib/graphics-manifest.d.ts.map +1 -0
  47. package/dist/lib/graphics-manifest.js +289 -0
  48. package/dist/lib/graphics-manifest.js.map +1 -0
  49. package/dist/skills/installer.d.ts +7 -0
  50. package/dist/skills/installer.d.ts.map +1 -1
  51. package/dist/skills/installer.js +114 -2
  52. package/dist/skills/installer.js.map +1 -1
  53. package/dist/skills/names.d.ts +2 -0
  54. package/dist/skills/names.d.ts.map +1 -0
  55. package/dist/skills/names.js +7 -0
  56. package/dist/skills/names.js.map +1 -0
  57. package/package.json +1 -1
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ /**
3
+ * Client-side validators for gooseworks-style.json and gooseworks-format.json.
4
+ *
5
+ * Mirrors the server-side Zod schema in gooseworks-app:
6
+ * backend/src/schemas/graphics-manifest.ts
7
+ *
8
+ * If the server schema changes, update this file to match. The CLI runs
9
+ * pre-flight validation here for fast feedback before uploading bytes.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.ManifestEscapingPathError = exports.ManifestMissingFileError = exports.ManifestParseError = exports.SLUG_RE = exports.FORMAT_MANIFEST_FILENAME = exports.STYLE_MANIFEST_FILENAME = exports.VALID_MOOD_GROUPS = void 0;
46
+ exports.assertSafeSlug = assertSafeSlug;
47
+ exports.validateStyleManifest = validateStyleManifest;
48
+ exports.validateFormatManifest = validateFormatManifest;
49
+ exports.readManifestFile = readManifestFile;
50
+ exports.resolveExampleFiles = resolveExampleFiles;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ exports.VALID_MOOD_GROUPS = [
54
+ 'Dark & Moody',
55
+ 'Light & Editorial',
56
+ 'Organic & Warm',
57
+ 'Bold & Energetic',
58
+ 'Retro & Cinematic',
59
+ 'Structural & Technical',
60
+ 'Friendly Corporate',
61
+ ];
62
+ exports.STYLE_MANIFEST_FILENAME = 'gooseworks-style.json';
63
+ exports.FORMAT_MANIFEST_FILENAME = 'gooseworks-format.json';
64
+ exports.SLUG_RE = /^[a-z0-9-]+$/;
65
+ const HEX_RE = /^#[0-9a-fA-F]{6}$/;
66
+ /**
67
+ * Throws if the string does not match the public slug grammar. Use before
68
+ * interpolating any externally-sourced slug (CLI arg, server response) into
69
+ * a filesystem path.
70
+ */
71
+ function assertSafeSlug(slug, source = 'slug') {
72
+ if (typeof slug !== 'string' || !exports.SLUG_RE.test(slug)) {
73
+ throw new Error(`${source} '${slug}' is not a valid slug (must match /^[a-z0-9-]+$/)`);
74
+ }
75
+ }
76
+ function isObject(v) {
77
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
78
+ }
79
+ function isStringArray(v) {
80
+ return Array.isArray(v) && v.every((x) => typeof x === 'string');
81
+ }
82
+ function validateStyleManifest(m) {
83
+ const errors = [];
84
+ if (!isObject(m)) {
85
+ return { ok: false, errors: ['manifest must be a JSON object'] };
86
+ }
87
+ if (typeof m.name !== 'string' || m.name.length < 1 || m.name.length > 120) {
88
+ errors.push('name: required, 1-120 characters');
89
+ }
90
+ if (m.slug !== undefined) {
91
+ if (typeof m.slug !== 'string' || !exports.SLUG_RE.test(m.slug)) {
92
+ errors.push('slug: must match /^[a-z0-9-]+$/');
93
+ }
94
+ }
95
+ if (typeof m.description !== 'string' ||
96
+ m.description.length < 20 ||
97
+ m.description.length > 1000) {
98
+ errors.push('description: required, 20-1000 characters');
99
+ }
100
+ if (typeof m.designMd !== 'string' || m.designMd.length < 50) {
101
+ errors.push('designMd: required, at least 50 characters');
102
+ }
103
+ if (m.moodGroup !== undefined) {
104
+ if (typeof m.moodGroup !== 'string' ||
105
+ !exports.VALID_MOOD_GROUPS.includes(m.moodGroup)) {
106
+ errors.push(`moodGroup: must be one of: ${exports.VALID_MOOD_GROUPS.join(', ')}`);
107
+ }
108
+ }
109
+ if (m.tags !== undefined && !isStringArray(m.tags)) {
110
+ errors.push('tags: must be an array of strings');
111
+ }
112
+ if (m.palette !== undefined) {
113
+ if (!Array.isArray(m.palette)) {
114
+ errors.push('palette: must be an array');
115
+ }
116
+ else {
117
+ m.palette.forEach((entry, i) => {
118
+ if (!isObject(entry)) {
119
+ errors.push(`palette[${i}]: must be an object`);
120
+ return;
121
+ }
122
+ if (typeof entry.hex !== 'string' || !HEX_RE.test(entry.hex)) {
123
+ errors.push(`palette[${i}].hex: must be 6-digit hex like "#RRGGBB"`);
124
+ }
125
+ if (entry.role !== undefined && typeof entry.role !== 'string') {
126
+ errors.push(`palette[${i}].role: must be a string`);
127
+ }
128
+ });
129
+ }
130
+ }
131
+ if (!Array.isArray(m.examples) || m.examples.length < 1) {
132
+ errors.push('examples: required, at least one entry');
133
+ }
134
+ else {
135
+ let heroCount = 0;
136
+ m.examples.forEach((ex, i) => {
137
+ if (!isObject(ex)) {
138
+ errors.push(`examples[${i}]: must be an object`);
139
+ return;
140
+ }
141
+ if (typeof ex.format !== 'string' || ex.format.length === 0) {
142
+ errors.push(`examples[${i}].format: required, non-empty string`);
143
+ }
144
+ if (typeof ex.file !== 'string' || ex.file.length === 0) {
145
+ errors.push(`examples[${i}].file: required, non-empty string`);
146
+ }
147
+ if (ex.caption !== undefined &&
148
+ (typeof ex.caption !== 'string' || ex.caption.length > 280)) {
149
+ errors.push(`examples[${i}].caption: must be a string, ≤280 chars`);
150
+ }
151
+ if (ex.isHero === true)
152
+ heroCount++;
153
+ else if (ex.isHero !== undefined && typeof ex.isHero !== 'boolean') {
154
+ errors.push(`examples[${i}].isHero: must be boolean`);
155
+ }
156
+ });
157
+ if (heroCount !== 1) {
158
+ errors.push('examples: exactly one entry must have isHero: true');
159
+ }
160
+ }
161
+ return { ok: errors.length === 0, errors };
162
+ }
163
+ function validateFormatManifest(m) {
164
+ const errors = [];
165
+ if (!isObject(m)) {
166
+ return { ok: false, errors: ['manifest must be a JSON object'] };
167
+ }
168
+ if (typeof m.name !== 'string' || m.name.length < 1 || m.name.length > 120) {
169
+ errors.push('name: required, 1-120 characters');
170
+ }
171
+ if (m.slug !== undefined) {
172
+ if (typeof m.slug !== 'string' || !exports.SLUG_RE.test(m.slug)) {
173
+ errors.push('slug: must match /^[a-z0-9-]+$/');
174
+ }
175
+ }
176
+ if (typeof m.description !== 'string' ||
177
+ m.description.length < 20 ||
178
+ m.description.length > 1000) {
179
+ errors.push('description: required, 20-1000 characters');
180
+ }
181
+ if (!Number.isInteger(m.width) ||
182
+ m.width < 64 ||
183
+ m.width > 8192) {
184
+ errors.push('width: integer between 64 and 8192');
185
+ }
186
+ if (!Number.isInteger(m.height) ||
187
+ m.height < 64 ||
188
+ m.height > 8192) {
189
+ errors.push('height: integer between 64 and 8192');
190
+ }
191
+ if (typeof m.contentRulesMd !== 'string' || m.contentRulesMd.length < 50) {
192
+ errors.push('contentRulesMd: required, at least 50 characters');
193
+ }
194
+ if (m.tags !== undefined && !isStringArray(m.tags)) {
195
+ errors.push('tags: must be an array of strings');
196
+ }
197
+ if (!Array.isArray(m.examples) || m.examples.length < 1) {
198
+ errors.push('examples: required, at least one entry');
199
+ }
200
+ else {
201
+ m.examples.forEach((ex, i) => {
202
+ if (!isObject(ex)) {
203
+ errors.push(`examples[${i}]: must be an object`);
204
+ return;
205
+ }
206
+ if (typeof ex.file !== 'string' || ex.file.length === 0) {
207
+ errors.push(`examples[${i}].file: required, non-empty string`);
208
+ }
209
+ if (ex.styleSlug !== undefined && typeof ex.styleSlug !== 'string') {
210
+ errors.push(`examples[${i}].styleSlug: must be a string`);
211
+ }
212
+ });
213
+ }
214
+ return { ok: errors.length === 0, errors };
215
+ }
216
+ /**
217
+ * Read a manifest file from disk. Returns the parsed object or throws a
218
+ * ManifestParseError with a clear message.
219
+ */
220
+ class ManifestParseError extends Error {
221
+ constructor(message) {
222
+ super(message);
223
+ this.name = 'ManifestParseError';
224
+ }
225
+ }
226
+ exports.ManifestParseError = ManifestParseError;
227
+ class ManifestMissingFileError extends Error {
228
+ missing;
229
+ constructor(missing) {
230
+ super(`manifest references file '${missing}' but it doesn't exist`);
231
+ this.missing = missing;
232
+ this.name = 'ManifestMissingFileError';
233
+ }
234
+ }
235
+ exports.ManifestMissingFileError = ManifestMissingFileError;
236
+ class ManifestEscapingPathError extends Error {
237
+ ref;
238
+ constructor(ref) {
239
+ super(`manifest references file '${ref}' which resolves outside the manifest directory`);
240
+ this.ref = ref;
241
+ this.name = 'ManifestEscapingPathError';
242
+ }
243
+ }
244
+ exports.ManifestEscapingPathError = ManifestEscapingPathError;
245
+ function readManifestFile(filePath) {
246
+ let raw;
247
+ try {
248
+ raw = fs.readFileSync(filePath, 'utf-8');
249
+ }
250
+ catch (err) {
251
+ const code = err.code;
252
+ if (code === 'ENOENT') {
253
+ throw new ManifestParseError(`manifest not found at ${filePath}. Make sure the directory contains ${path.basename(filePath)}.`);
254
+ }
255
+ throw err;
256
+ }
257
+ try {
258
+ return JSON.parse(raw);
259
+ }
260
+ catch (err) {
261
+ const message = err instanceof Error ? err.message : String(err);
262
+ throw new ManifestParseError(`could not parse ${filePath}: ${message}`);
263
+ }
264
+ }
265
+ /**
266
+ * Resolve example file references against the publish directory. Throws
267
+ * ManifestMissingFileError if a referenced file doesn't exist, and
268
+ * ManifestEscapingPathError if it resolves outside `manifestDir`.
269
+ */
270
+ function resolveExampleFiles(manifestDir, examples) {
271
+ const root = path.resolve(manifestDir);
272
+ return examples.map((ex) => {
273
+ const ref = ex.file;
274
+ const absolutePath = path.resolve(root, ref);
275
+ const rel = path.relative(root, absolutePath);
276
+ if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) {
277
+ throw new ManifestEscapingPathError(ref);
278
+ }
279
+ if (!fs.existsSync(absolutePath)) {
280
+ throw new ManifestMissingFileError(ref);
281
+ }
282
+ // Normalize to forward slashes for the multipart field name so the
283
+ // wire format is stable across platforms. `rel` is already constrained
284
+ // to live under `manifestDir`, so it cannot contain `..`.
285
+ const fieldName = rel.split(path.sep).join('/');
286
+ return { manifestRef: ref, fieldName, absolutePath };
287
+ });
288
+ }
289
+ //# sourceMappingURL=graphics-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphics-manifest.js","sourceRoot":"","sources":["../../src/lib/graphics-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
+ export interface InstallStandaloneSkillOptions {
2
+ onProgress?: (progress: {
3
+ downloaded: number;
4
+ total: number;
5
+ }) => void;
6
+ }
1
7
  export declare function getSkillsBasePath(): string;
2
8
  export declare function installMasterSkill(masterSkillMd: string): void;
9
+ export declare function installStandaloneSkill(slug: string, options?: InstallStandaloneSkillOptions): Promise<void>;
3
10
  export declare function getInstalledSkills(): string[];
4
11
  export declare function removeAllSkills(): void;
5
12
  //# sourceMappingURL=installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAQtC"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAoCf;AA0CD,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAQtC"}
@@ -35,12 +35,17 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.getSkillsBasePath = getSkillsBasePath;
37
37
  exports.installMasterSkill = installMasterSkill;
38
+ exports.installStandaloneSkill = installStandaloneSkill;
38
39
  exports.getInstalledSkills = getInstalledSkills;
39
40
  exports.removeAllSkills = removeAllSkills;
40
41
  const fs = __importStar(require("fs"));
41
42
  const path = __importStar(require("path"));
42
43
  const os = __importStar(require("os"));
44
+ const names_1 = require("./names");
43
45
  const SKILLS_BASE = path.join(os.homedir(), '.agents', 'skills');
46
+ const GOOSE_SKILLS_TREE_URL = 'https://api.github.com/repos/gooseworks-ai/goose-skills/git/trees/main?recursive=1';
47
+ const GOOSE_SKILLS_RAW_BASE = 'https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main';
48
+ const DOWNLOAD_CONCURRENCY = 6;
44
49
  function getSkillsBasePath() {
45
50
  return SKILLS_BASE;
46
51
  }
@@ -49,11 +54,77 @@ function installMasterSkill(masterSkillMd) {
49
54
  fs.mkdirSync(masterDir, { recursive: true });
50
55
  fs.writeFileSync(path.join(masterDir, 'SKILL.md'), masterSkillMd, 'utf-8');
51
56
  }
57
+ async function installStandaloneSkill(slug, options = {}) {
58
+ if (!/^[a-z0-9][a-z0-9-]*$/.test(slug)) {
59
+ throw new Error(`invalid skill slug '${slug}'. Use a slug like goose-graphics.`);
60
+ }
61
+ const tree = await fetchGooseSkillsTree();
62
+ const { prefix, files } = findSkillFiles(tree, slug);
63
+ if (files.length === 0) {
64
+ const available = getAvailableSkillSlugs(tree);
65
+ const suffix = available.length > 0 ? ` Available: ${available.join(', ')}` : '';
66
+ throw new Error(`skill '${slug}' not found.${suffix}`);
67
+ }
68
+ const targetDir = path.join(SKILLS_BASE, slug);
69
+ const stagingDir = path.join(SKILLS_BASE, `.${slug}.installing`);
70
+ fs.rmSync(stagingDir, { recursive: true, force: true });
71
+ let completed = 0;
72
+ try {
73
+ await withConcurrency(files, DOWNLOAD_CONCURRENCY, async (filePath) => {
74
+ const relativePath = filePath.slice(prefix.length);
75
+ const targetPath = path.join(stagingDir, relativePath);
76
+ const buffer = await fetchRawSkillFile(filePath);
77
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
78
+ fs.writeFileSync(targetPath, buffer);
79
+ completed++;
80
+ options.onProgress?.({ downloaded: completed, total: files.length });
81
+ });
82
+ fs.rmSync(targetDir, { recursive: true, force: true });
83
+ fs.renameSync(stagingDir, targetDir);
84
+ }
85
+ catch (error) {
86
+ fs.rmSync(stagingDir, { recursive: true, force: true });
87
+ throw error;
88
+ }
89
+ }
90
+ async function withConcurrency(items, concurrency, worker) {
91
+ let cursor = 0;
92
+ let failure;
93
+ const runners = Array.from({ length: Math.max(1, Math.min(concurrency, items.length)) }, async () => {
94
+ while (cursor < items.length && failure === undefined) {
95
+ const idx = cursor++;
96
+ try {
97
+ await worker(items[idx]);
98
+ }
99
+ catch (err) {
100
+ if (failure === undefined)
101
+ failure = err;
102
+ }
103
+ }
104
+ });
105
+ await Promise.all(runners);
106
+ if (failure !== undefined)
107
+ throw failure;
108
+ }
109
+ function findSkillFiles(tree, slug) {
110
+ const skillMarker = `${slug}/SKILL.md`;
111
+ const skillEntry = tree.find((entry) => entry.type === 'blob' && (entry.path === skillMarker || entry.path.endsWith(`/${skillMarker}`)));
112
+ if (skillEntry) {
113
+ const prefix = skillEntry.path.slice(0, -'SKILL.md'.length);
114
+ return {
115
+ prefix,
116
+ files: tree
117
+ .filter((entry) => entry.type === 'blob' && entry.path.startsWith(prefix))
118
+ .map((entry) => entry.path),
119
+ };
120
+ }
121
+ return { prefix: `${slug}/`, files: [] };
122
+ }
52
123
  function getInstalledSkills() {
53
124
  if (!fs.existsSync(SKILLS_BASE))
54
125
  return [];
55
126
  return fs.readdirSync(SKILLS_BASE)
56
- .filter((entry) => entry === 'gooseworks' || entry.startsWith('gooseworks-'))
127
+ .filter(names_1.isManagedGooseworksSkill)
57
128
  .filter((entry) => {
58
129
  const skillMd = path.join(SKILLS_BASE, entry, 'SKILL.md');
59
130
  return fs.existsSync(skillMd);
@@ -64,9 +135,50 @@ function removeAllSkills() {
64
135
  return;
65
136
  const entries = fs.readdirSync(SKILLS_BASE);
66
137
  for (const entry of entries) {
67
- if (entry !== 'gooseworks' && !entry.startsWith('gooseworks-'))
138
+ if (!(0, names_1.isManagedGooseworksSkill)(entry))
68
139
  continue;
69
140
  fs.rmSync(path.join(SKILLS_BASE, entry), { recursive: true, force: true });
70
141
  }
71
142
  }
143
+ async function fetchGooseSkillsTree() {
144
+ const response = await fetch(GOOSE_SKILLS_TREE_URL);
145
+ if (!response.ok) {
146
+ if (response.status === 403 && response.headers.get('x-ratelimit-remaining') === '0') {
147
+ throw new Error(`GitHub API rate-limited this IP.${formatRateLimitWait(response.headers.get('x-ratelimit-reset'))} Set GITHUB_TOKEN to raise the limit.`);
148
+ }
149
+ throw new Error(`could not list standalone skills from goose-skills (${response.status})`);
150
+ }
151
+ const data = await response.json();
152
+ return data.tree || [];
153
+ }
154
+ function formatRateLimitWait(resetHeader) {
155
+ if (!resetHeader)
156
+ return '';
157
+ const resetMs = Number(resetHeader) * 1000;
158
+ if (!Number.isFinite(resetMs))
159
+ return '';
160
+ const minutes = Math.max(1, Math.ceil((resetMs - Date.now()) / 60_000));
161
+ return ` Try again in about ${minutes} minute${minutes === 1 ? '' : 's'}.`;
162
+ }
163
+ async function fetchRawSkillFile(filePath) {
164
+ const url = `${GOOSE_SKILLS_RAW_BASE}/${filePath.split('/').map(encodeURIComponent).join('/')}`;
165
+ const response = await fetch(url);
166
+ if (!response.ok) {
167
+ throw new Error(`could not download ${filePath} from goose-skills (${response.status})`);
168
+ }
169
+ return Buffer.from(await response.arrayBuffer());
170
+ }
171
+ function getAvailableSkillSlugs(tree) {
172
+ const slugs = new Set();
173
+ for (const entry of tree) {
174
+ if (entry.type !== 'blob' || !entry.path.endsWith('/SKILL.md'))
175
+ continue;
176
+ const parts = entry.path.split('/');
177
+ const slug = parts[parts.length - 2];
178
+ if (slug) {
179
+ slugs.add(slug);
180
+ }
181
+ }
182
+ return [...slugs].sort();
183
+ }
72
184
  //# sourceMappingURL=installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,8CAEC;AAED,gDAQC;AAED,gDASC;AAED,0CAQC;AAvCD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEjE,SAAgB,iBAAiB;IAC/B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,kBAAkB,CAAC,aAAqB;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACvD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAChC,aAAa,EACb,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,OAAO,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAC5E,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO;IAExC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,SAAS;QACzE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function isManagedGooseworksSkill(name: string): boolean;
2
+ //# sourceMappingURL=names.d.ts.map
@@ -0,0 +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,CAE9D"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isManagedGooseworksSkill = isManagedGooseworksSkill;
4
+ function isManagedGooseworksSkill(name) {
5
+ return name === 'gooseworks' || name.startsWith('gooseworks-') || name.startsWith('goose-');
6
+ }
7
+ //# sourceMappingURL=names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;AAAA,4DAEC;AAFD,SAAgB,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gooseworks",
3
- "version": "0.2.2",
3
+ "version": "0.2.5",
4
4
  "description": "GooseWorks CLI — give your coding agent real data tools",
5
5
  "bin": {
6
6
  "gooseworks": "./dist/index.js"