gooseworks 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/auth/oauth-server.d.ts.map +1 -1
  2. package/dist/auth/oauth-server.js +27 -19
  3. package/dist/auth/oauth-server.js.map +1 -1
  4. package/dist/commands/formats.d.ts +3 -0
  5. package/dist/commands/formats.d.ts.map +1 -0
  6. package/dist/commands/formats.js +157 -0
  7. package/dist/commands/formats.js.map +1 -0
  8. package/dist/commands/graphics/get-flow.d.ts +30 -0
  9. package/dist/commands/graphics/get-flow.d.ts.map +1 -0
  10. package/dist/commands/graphics/get-flow.js +212 -0
  11. package/dist/commands/graphics/get-flow.js.map +1 -0
  12. package/dist/commands/graphics/publish-flow.d.ts +33 -0
  13. package/dist/commands/graphics/publish-flow.d.ts.map +1 -0
  14. package/dist/commands/graphics/publish-flow.js +180 -0
  15. package/dist/commands/graphics/publish-flow.js.map +1 -0
  16. package/dist/commands/graphics/shared.d.ts +48 -0
  17. package/dist/commands/graphics/shared.d.ts.map +1 -0
  18. package/dist/commands/graphics/shared.js +190 -0
  19. package/dist/commands/graphics/shared.js.map +1 -0
  20. package/dist/commands/styles.d.ts +3 -0
  21. package/dist/commands/styles.d.ts.map +1 -0
  22. package/dist/commands/styles.js +159 -0
  23. package/dist/commands/styles.js.map +1 -0
  24. package/dist/config.d.ts +2 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +5 -1
  27. package/dist/config.js.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/graphics-api.d.ts +106 -0
  31. package/dist/lib/graphics-api.d.ts.map +1 -0
  32. package/dist/lib/graphics-api.js +310 -0
  33. package/dist/lib/graphics-api.js.map +1 -0
  34. package/dist/lib/graphics-cache.d.ts +31 -0
  35. package/dist/lib/graphics-cache.d.ts.map +1 -0
  36. package/dist/lib/graphics-cache.js +126 -0
  37. package/dist/lib/graphics-cache.js.map +1 -0
  38. package/dist/lib/graphics-manifest.d.ts +96 -0
  39. package/dist/lib/graphics-manifest.d.ts.map +1 -0
  40. package/dist/lib/graphics-manifest.js +289 -0
  41. package/dist/lib/graphics-manifest.js.map +1 -0
  42. package/dist/skills/fetcher.d.ts +18 -0
  43. package/dist/skills/fetcher.d.ts.map +1 -0
  44. package/dist/skills/fetcher.js +118 -0
  45. package/dist/skills/fetcher.js.map +1 -0
  46. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Client-side validators for gooseworks-style.json and gooseworks-format.json.
3
+ *
4
+ * Mirrors the server-side Zod schema in gooseworks-app:
5
+ * backend/src/schemas/graphics-manifest.ts
6
+ *
7
+ * If the server schema changes, update this file to match. The CLI runs
8
+ * pre-flight validation here for fast feedback before uploading bytes.
9
+ */
10
+ export interface StyleExample {
11
+ format: string;
12
+ isHero?: boolean;
13
+ file: string;
14
+ caption?: string;
15
+ }
16
+ export interface PaletteEntry {
17
+ hex: string;
18
+ role?: string;
19
+ }
20
+ export interface StyleManifest {
21
+ name: string;
22
+ slug?: string;
23
+ description: string;
24
+ designMd: string;
25
+ moodGroup?: string;
26
+ tags?: string[];
27
+ palette?: PaletteEntry[];
28
+ examples: StyleExample[];
29
+ }
30
+ export interface FormatExample {
31
+ file: string;
32
+ styleSlug?: string;
33
+ }
34
+ export interface FormatManifest {
35
+ name: string;
36
+ slug?: string;
37
+ description: string;
38
+ width: number;
39
+ height: number;
40
+ contentRulesMd: string;
41
+ tags?: string[];
42
+ examples: FormatExample[];
43
+ }
44
+ export declare const VALID_MOOD_GROUPS: readonly ["Dark & Moody", "Light & Editorial", "Organic & Warm", "Bold & Energetic", "Retro & Cinematic", "Structural & Technical", "Friendly Corporate"];
45
+ export declare const STYLE_MANIFEST_FILENAME = "gooseworks-style.json";
46
+ export declare const FORMAT_MANIFEST_FILENAME = "gooseworks-format.json";
47
+ export interface ValidationResult {
48
+ ok: boolean;
49
+ errors: string[];
50
+ }
51
+ export declare const SLUG_RE: RegExp;
52
+ /**
53
+ * Throws if the string does not match the public slug grammar. Use before
54
+ * interpolating any externally-sourced slug (CLI arg, server response) into
55
+ * a filesystem path.
56
+ */
57
+ export declare function assertSafeSlug(slug: string, source?: string): void;
58
+ export declare function validateStyleManifest(m: unknown): ValidationResult;
59
+ export declare function validateFormatManifest(m: unknown): ValidationResult;
60
+ /**
61
+ * Read a manifest file from disk. Returns the parsed object or throws a
62
+ * ManifestParseError with a clear message.
63
+ */
64
+ export declare class ManifestParseError extends Error {
65
+ constructor(message: string);
66
+ }
67
+ export declare class ManifestMissingFileError extends Error {
68
+ readonly missing: string;
69
+ constructor(missing: string);
70
+ }
71
+ export declare class ManifestEscapingPathError extends Error {
72
+ readonly ref: string;
73
+ constructor(ref: string);
74
+ }
75
+ export declare function readManifestFile(filePath: string): unknown;
76
+ export interface ResolvedExampleFile {
77
+ /** The relative path as referenced in the manifest, e.g. "./poster.png". */
78
+ manifestRef: string;
79
+ /**
80
+ * Field name to use in multipart upload. Always a forward-slash relative
81
+ * path within the manifest directory — no `..`, no leading slash, no
82
+ * absolute paths. Safe to send to the server as a multipart field name.
83
+ */
84
+ fieldName: string;
85
+ /** Absolute path on disk. */
86
+ absolutePath: string;
87
+ }
88
+ /**
89
+ * Resolve example file references against the publish directory. Throws
90
+ * ManifestMissingFileError if a referenced file doesn't exist, and
91
+ * ManifestEscapingPathError if it resolves outside `manifestDir`.
92
+ */
93
+ export declare function resolveExampleFiles(manifestDir: string, examples: ReadonlyArray<{
94
+ file: string;
95
+ }>): ResolvedExampleFile[];
96
+ //# sourceMappingURL=graphics-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphics-manifest.d.ts","sourceRoot":"","sources":["../../src/lib/graphics-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,2JAQpB,CAAC;AAEX,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAC/D,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,OAAO,QAAiB,CAAC;AAGtC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,IAAI,CAIlE;AAUD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,gBAAgB,CA+FlE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAmEnE;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;aACrB,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAI5C;AAED,qBAAa,yBAA0B,SAAQ,KAAK;aACtB,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;CAIxC;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB1D;AAED,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACxC,mBAAmB,EAAE,CAkBvB"}
@@ -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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"}
@@ -0,0 +1,18 @@
1
+ export interface SkillCatalogEntry {
2
+ slug: string;
3
+ name: string;
4
+ description: string;
5
+ category: string;
6
+ skill_md: string;
7
+ scripts?: Array<{
8
+ filename: string;
9
+ content: string;
10
+ }>;
11
+ }
12
+ export interface SkillCatalog {
13
+ skills: SkillCatalogEntry[];
14
+ master_skill_md: string;
15
+ }
16
+ export declare function fetchSkillCatalog(apiBase: string, apiKey: string): Promise<SkillCatalog>;
17
+ export declare function fetchSkillCatalogFromGithub(): Promise<SkillCatalog>;
18
+ //# sourceMappingURL=fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/skills/fetcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAuBD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAa9F;AAeD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,YAAY,CAAC,CAkDzE"}
@@ -0,0 +1,118 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.fetchSkillCatalog = fetchSkillCatalog;
37
+ exports.fetchSkillCatalogFromGithub = fetchSkillCatalogFromGithub;
38
+ const https = __importStar(require("https"));
39
+ const http = __importStar(require("http"));
40
+ function httpGet(url, headers) {
41
+ return new Promise((resolve, reject) => {
42
+ const client = url.startsWith('https') ? https : http;
43
+ const req = client.get(url, { headers }, (res) => {
44
+ if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
45
+ httpGet(res.headers.location, headers).then(resolve, reject);
46
+ return;
47
+ }
48
+ if (res.statusCode && res.statusCode >= 400) {
49
+ reject(new Error(`HTTP ${res.statusCode} from ${url}`));
50
+ return;
51
+ }
52
+ const chunks = [];
53
+ res.on('data', (chunk) => chunks.push(chunk));
54
+ res.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
55
+ res.on('error', reject);
56
+ });
57
+ req.on('error', reject);
58
+ });
59
+ }
60
+ async function fetchSkillCatalog(apiBase, apiKey) {
61
+ const url = `${apiBase}/v1/skills/catalog`;
62
+ const body = await httpGet(url, {
63
+ 'Authorization': `Bearer ${apiKey}`,
64
+ 'Accept': 'application/json',
65
+ });
66
+ const response = JSON.parse(body);
67
+ if (response.status === 'error') {
68
+ throw new Error(response.message || 'Failed to fetch skill catalog');
69
+ }
70
+ return response.data;
71
+ }
72
+ const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main';
73
+ async function fetchSkillCatalogFromGithub() {
74
+ const indexUrl = `${GITHUB_RAW_BASE}/skills-index.json`;
75
+ const indexBody = await httpGet(indexUrl, { 'Accept': 'application/json' });
76
+ const index = JSON.parse(indexBody);
77
+ const skills = [];
78
+ for (const entry of index.skills) {
79
+ try {
80
+ const skillMdUrl = `${GITHUB_RAW_BASE}/${entry.path}/SKILL.md`;
81
+ const skillMd = await httpGet(skillMdUrl, {});
82
+ const scripts = [];
83
+ if (entry.scripts) {
84
+ for (const scriptPath of entry.scripts) {
85
+ try {
86
+ const scriptUrl = `${GITHUB_RAW_BASE}/${entry.path}/scripts/${scriptPath}`;
87
+ const content = await httpGet(scriptUrl, {});
88
+ scripts.push({ filename: scriptPath, content });
89
+ }
90
+ catch {
91
+ // Skip scripts that fail to download
92
+ }
93
+ }
94
+ }
95
+ skills.push({
96
+ slug: entry.slug,
97
+ name: entry.name,
98
+ description: entry.description,
99
+ category: entry.category,
100
+ skill_md: skillMd,
101
+ scripts: scripts.length > 0 ? scripts : undefined,
102
+ });
103
+ }
104
+ catch {
105
+ // Skip skills that fail to download
106
+ }
107
+ }
108
+ // Fetch master skill
109
+ let masterSkillMd = '';
110
+ try {
111
+ masterSkillMd = await httpGet(`${GITHUB_RAW_BASE}/skills/gooseworks-master/SKILL.md`, {});
112
+ }
113
+ catch {
114
+ // Will use embedded fallback
115
+ }
116
+ return { skills, master_skill_md: masterSkillMd };
117
+ }
118
+ //# sourceMappingURL=fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/skills/fetcher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gooseworks",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "GooseWorks CLI — give your coding agent real data tools",
5
5
  "bin": {
6
6
  "gooseworks": "./dist/index.js"