gooseworks 0.4.2 → 0.4.4

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 (84) hide show
  1. package/README.md +42 -11
  2. package/dist/commands/doctor.d.ts +29 -5
  3. package/dist/commands/doctor.d.ts.map +1 -1
  4. package/dist/commands/doctor.js +107 -63
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/fetch.d.ts +1 -0
  7. package/dist/commands/fetch.d.ts.map +1 -1
  8. package/dist/commands/fetch.js +64 -29
  9. package/dist/commands/fetch.js.map +1 -1
  10. package/dist/commands/install.d.ts.map +1 -1
  11. package/dist/commands/install.js +37 -4
  12. package/dist/commands/install.js.map +1 -1
  13. package/dist/commands/login.d.ts.map +1 -1
  14. package/dist/commands/login.js +8 -3
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/skills.d.ts +34 -0
  17. package/dist/commands/skills.d.ts.map +1 -0
  18. package/dist/commands/skills.js +109 -0
  19. package/dist/commands/skills.js.map +1 -0
  20. package/dist/commands/update.d.ts.map +1 -1
  21. package/dist/commands/update.js +17 -6
  22. package/dist/commands/update.js.map +1 -1
  23. package/dist/commands/video-local.d.ts +9 -0
  24. package/dist/commands/video-local.d.ts.map +1 -0
  25. package/dist/commands/video-local.js +83 -0
  26. package/dist/commands/video-local.js.map +1 -0
  27. package/dist/commands/video-save.d.ts +3 -0
  28. package/dist/commands/video-save.d.ts.map +1 -0
  29. package/dist/commands/video-save.js +83 -0
  30. package/dist/commands/video-save.js.map +1 -0
  31. package/dist/index.js +7 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/video-local-captions.d.ts +83 -0
  34. package/dist/lib/video-local-captions.d.ts.map +1 -0
  35. package/dist/lib/video-local-captions.js +261 -0
  36. package/dist/lib/video-local-captions.js.map +1 -0
  37. package/dist/lib/video-local-runtime.d.ts +8 -0
  38. package/dist/lib/video-local-runtime.d.ts.map +1 -0
  39. package/dist/lib/video-local-runtime.js +201 -0
  40. package/dist/lib/video-local-runtime.js.map +1 -0
  41. package/dist/lib/video-save-mcp.d.ts +9 -0
  42. package/dist/lib/video-save-mcp.d.ts.map +1 -0
  43. package/dist/lib/video-save-mcp.js +162 -0
  44. package/dist/lib/video-save-mcp.js.map +1 -0
  45. package/dist/lib/video-save.d.ts +77 -0
  46. package/dist/lib/video-save.d.ts.map +1 -0
  47. package/dist/lib/video-save.js +440 -0
  48. package/dist/lib/video-save.js.map +1 -0
  49. package/dist/skills/custom-video-skill.d.ts +3 -0
  50. package/dist/skills/custom-video-skill.d.ts.map +1 -0
  51. package/dist/skills/custom-video-skill.js +6 -0
  52. package/dist/skills/custom-video-skill.js.map +1 -0
  53. package/dist/skills/installer.d.ts +12 -6
  54. package/dist/skills/installer.d.ts.map +1 -1
  55. package/dist/skills/installer.js +41 -15
  56. package/dist/skills/installer.js.map +1 -1
  57. package/dist/skills/master-skill.d.ts +22 -19
  58. package/dist/skills/master-skill.d.ts.map +1 -1
  59. package/dist/skills/master-skill.js +1472 -551
  60. package/dist/skills/master-skill.js.map +1 -1
  61. package/dist/skills/package-freshness.d.ts +16 -0
  62. package/dist/skills/package-freshness.d.ts.map +1 -0
  63. package/dist/skills/package-freshness.js +36 -0
  64. package/dist/skills/package-freshness.js.map +1 -0
  65. package/dist/skills/releases.d.ts +12 -0
  66. package/dist/skills/releases.d.ts.map +1 -0
  67. package/dist/skills/releases.js +152 -0
  68. package/dist/skills/releases.js.map +1 -0
  69. package/dist/skills/routes.d.ts.map +1 -1
  70. package/dist/skills/routes.js +7 -1
  71. package/dist/skills/routes.js.map +1 -1
  72. package/dist/utils/browser-preflight.d.ts +29 -0
  73. package/dist/utils/browser-preflight.d.ts.map +1 -0
  74. package/dist/utils/browser-preflight.js +338 -0
  75. package/dist/utils/browser-preflight.js.map +1 -0
  76. package/package.json +2 -2
  77. package/skills/goose-ads/SKILL.md +124 -16
  78. package/skills/goose-product-photos/SKILL.md +55 -3
  79. package/skills/goose-video/SKILL.md +322 -253
  80. package/skills/goose-video-local/SKILL.md +1199 -234
  81. package/skills/gooseworks/SKILL.md +199 -13
  82. package/skills/make-custom-video/SKILL.md +490 -0
  83. package/skills/manifest.json +12 -0
  84. package/skills/routes.json +8 -1
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaveToolError = void 0;
4
+ exports.createSaveTransport = createSaveTransport;
5
+ class SaveToolError extends Error {
6
+ code;
7
+ constructor(code) {
8
+ super(`GooseWorks save tool failed (${code}); reconnect or diagnose on the original connection`);
9
+ this.code = code;
10
+ }
11
+ }
12
+ exports.SaveToolError = SaveToolError;
13
+ const ALLOWED = new Set(['account_whoami', 'video_project_read', 'media_list', 'media_upload',
14
+ 'media_confirm', 'video_render_run', 'video_project_upsert']);
15
+ function safeUrl(value) {
16
+ const url = new URL(value);
17
+ if (url.username || url.password || url.hash ||
18
+ (url.protocol !== 'https:' && !(url.protocol === 'http:' && ['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname)))) {
19
+ throw new Error('Save connection and storage must use HTTPS (or local fixture HTTP)');
20
+ }
21
+ return url;
22
+ }
23
+ async function bounded(response, max) {
24
+ if (!response.ok || !response.body)
25
+ throw new Error(`Save storage returned HTTP ${response.status}`);
26
+ const length = Number(response.headers.get('content-length'));
27
+ if (length > max)
28
+ throw new Error('Save response is too large');
29
+ const reader = response.body.getReader();
30
+ const chunks = [];
31
+ let size = 0;
32
+ try {
33
+ for (;;) {
34
+ const { value, done } = await reader.read();
35
+ if (done)
36
+ break;
37
+ size += value.length;
38
+ if (size > max)
39
+ throw new Error('Save response is too large');
40
+ chunks.push(Buffer.from(value));
41
+ }
42
+ return Buffer.concat(chunks);
43
+ }
44
+ finally {
45
+ await reader.cancel().catch(() => undefined);
46
+ }
47
+ }
48
+ async function createSaveTransport(creds) {
49
+ if (!creds.mcp_server_url)
50
+ throw new Error('Connect GooseWorks MCP with the normal login/install flow before saving');
51
+ const endpoint = safeUrl(creds.mcp_server_url);
52
+ if (endpoint.search)
53
+ throw new Error('MCP credentials belong in the normal Authorization header');
54
+ const endpointPath = endpoint.pathname.replace(/\/$/, '');
55
+ endpoint.pathname = endpointPath.endsWith('/mcp') ? endpointPath : `${endpointPath}/mcp`;
56
+ const apiOrigin = safeUrl(creds.api_base).origin;
57
+ let session;
58
+ let sequence = 0;
59
+ let protocol = '2025-03-26';
60
+ const rpc = async (method, params, notification = false) => {
61
+ const id = ++sequence;
62
+ let response;
63
+ try {
64
+ response = await fetch(endpoint, { method: 'POST', redirect: 'error', signal: AbortSignal.timeout(60_000),
65
+ headers: { Authorization: `Bearer ${creds.api_key}`, 'Content-Type': 'application/json',
66
+ Accept: 'application/json, text/event-stream', 'MCP-Protocol-Version': protocol,
67
+ ...(session ? { 'Mcp-Session-Id': session } : {}) },
68
+ body: JSON.stringify({ jsonrpc: '2.0', ...(notification ? {} : { id }), method, params }) });
69
+ }
70
+ catch {
71
+ throw new Error('GooseWorks connection interrupted; retain the checkpoint and reconnect normally before resuming');
72
+ }
73
+ if (response.status === 401 || response.status === 403)
74
+ throw new Error('GooseWorks authorization needs the normal login/reconnect flow; finished files remain local');
75
+ if (response.status === 404)
76
+ throw new Error('GooseWorks session/tools unavailable; reconnect normally and resume this checkpoint');
77
+ if (notification && response.ok) {
78
+ await response.body?.cancel();
79
+ return;
80
+ }
81
+ const body = (await bounded(response, 8 * 1024 * 1024)).toString('utf8');
82
+ session = response.headers.get('mcp-session-id') ?? session;
83
+ let message;
84
+ if (response.headers.get('content-type')?.includes('text/event-stream')) {
85
+ for (const event of body.split(/\r?\n\r?\n/)) {
86
+ const data = event.split(/\r?\n/).filter(line => line.startsWith('data:')).map(line => line.slice(5).trimStart()).join('\n');
87
+ if (!data)
88
+ continue;
89
+ const parsed = JSON.parse(data);
90
+ if (parsed.id === id)
91
+ message = parsed;
92
+ }
93
+ }
94
+ else
95
+ message = JSON.parse(body);
96
+ if (!message || message.id !== id || message.error || !message.result)
97
+ throw new Error('Uncertain MCP reply; read remote state on the next resume');
98
+ return message.result;
99
+ };
100
+ const initialized = await rpc('initialize', { protocolVersion: protocol, capabilities: {},
101
+ clientInfo: { name: 'gooseworks-video-save', version: '1' } });
102
+ if (typeof initialized.protocolVersion === 'string')
103
+ protocol = initialized.protocolVersion;
104
+ await rpc('notifications/initialized', {}, true);
105
+ // Old servers can strip unknown optional patch fields. Never send a guarded
106
+ // write until the selected server advertises the atomic contract itself.
107
+ let cursor;
108
+ let guardedSelection = false;
109
+ const seen = new Set();
110
+ do {
111
+ const listed = await rpc('tools/list', cursor ? { cursor } : {});
112
+ const tool = listed.tools?.find((tool) => tool.name === 'video_project_upsert');
113
+ const guard = tool?.inputSchema?.properties?.patch?.properties?.final_selection_guard;
114
+ if (guard?.properties?.expected_final_render_id && guard?.properties?.expected_review_digest &&
115
+ ['expected_final_render_id', 'expected_review_digest'].every(key => guard.required?.includes(key)))
116
+ guardedSelection = true;
117
+ const next = listed.nextCursor;
118
+ if (next !== undefined && (typeof next !== 'string' || seen.has(next) || seen.size >= 100))
119
+ throw new Error('Uncertain save tool contracts; reconnect normally');
120
+ if (next)
121
+ seen.add(next);
122
+ cursor = next;
123
+ } while (cursor && !guardedSelection);
124
+ if (!guardedSelection)
125
+ throw new Error('This GooseWorks connection does not advertise atomic final selection. Update/reconnect the server before saving; retain finished files and the checkpoint.');
126
+ return {
127
+ async call(name, args) {
128
+ if (!ALLOWED.has(name) || (name === 'video_render_run' &&
129
+ (!args.render?.render_id || args.render.status !== 'complete' || Object.keys(args).some(k => !['brand_id', 'project_id', 'render'].includes(k)))) ||
130
+ (name === 'video_project_upsert' && (Object.keys(args).some(k => !['brand_id', 'project_id', 'patch'].includes(k)) ||
131
+ Object.keys(args.patch ?? {}).some(k => !['final_render_id', 'final_selection_guard'].includes(k)) ||
132
+ !args.patch.final_render_id || !args.patch.final_selection_guard ||
133
+ Object.keys(args.patch.final_selection_guard).sort().join(',') !== 'expected_final_render_id,expected_review_digest' ||
134
+ !(args.patch.final_selection_guard.expected_final_render_id === null ||
135
+ typeof args.patch.final_selection_guard.expected_final_render_id === 'string') ||
136
+ !/^[a-f0-9]{64}$/.test(args.patch.final_selection_guard.expected_review_digest))))
137
+ throw new Error('Save-only transport refused a generation or unrelated write');
138
+ const result = await rpc('tools/call', { name, arguments: args });
139
+ const text = result.content?.find((block) => block.type === 'text')?.text;
140
+ if (typeof text !== 'string')
141
+ throw new Error('Incomplete MCP save reply');
142
+ const data = JSON.parse(text);
143
+ if (result.isError || data.error)
144
+ throw new SaveToolError(typeof data.error?.code === 'string' ? data.error.code : 'unknown');
145
+ if (name === 'account_whoami' && data.environment?.api_origin !== apiOrigin)
146
+ throw new Error('CLI and project environment origins differ; use the selected host MCP connection without switching credentials');
147
+ return data;
148
+ },
149
+ async put(url, headers, bytes) {
150
+ if (Object.entries(headers).some(([key, value]) => key.toLowerCase() !== 'content-type' || typeof value !== 'string'))
151
+ throw new Error('Unexpected upload headers');
152
+ const response = await fetch(safeUrl(url), { method: 'PUT', headers, body: bytes, redirect: 'error', signal: AbortSignal.timeout(10 * 60_000) });
153
+ await response.body?.cancel();
154
+ if (!response.ok)
155
+ throw new Error(`Upload was interrupted (HTTP ${response.status}); resume the same checkpoint`);
156
+ },
157
+ async download(url, maxBytes) {
158
+ return bounded(await fetch(safeUrl(url), { redirect: 'error', signal: AbortSignal.timeout(180_000) }), maxBytes);
159
+ },
160
+ };
161
+ }
162
+ //# sourceMappingURL=video-save-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-save-mcp.js","sourceRoot":"","sources":["../../src/lib/video-save-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ type Obj = Record<string, any>;
2
+ export interface SaveTransport {
3
+ call(name: 'account_whoami' | 'video_project_read' | 'media_list' | 'media_upload' | 'media_confirm' | 'video_render_run' | 'video_project_upsert', args: Obj): Promise<Obj>;
4
+ put(url: string, headers: Record<string, string>, bytes: Buffer): Promise<void>;
5
+ download(url: string, maxBytes: number): Promise<Buffer>;
6
+ }
7
+ export interface SaveManifest {
8
+ brand_id: string;
9
+ project_id: string;
10
+ render_id: string;
11
+ input_digest: string;
12
+ final_path: string;
13
+ poster_path: string;
14
+ qc: {
15
+ final_sha256: string;
16
+ poster_sha256: string;
17
+ report_path: string;
18
+ evidence_paths: string[];
19
+ };
20
+ }
21
+ interface Fingerprint {
22
+ path: string;
23
+ sha256: string;
24
+ bytes: number;
25
+ }
26
+ interface Identity {
27
+ environment: {
28
+ name: string;
29
+ api_origin: string;
30
+ };
31
+ user_id: string;
32
+ organization_id: string;
33
+ }
34
+ interface SavedFile extends Fingerprint {
35
+ upload_path: string;
36
+ ingredient_key: string;
37
+ kind: string;
38
+ mime: string;
39
+ }
40
+ export interface SaveCheckpoint {
41
+ version: 1;
42
+ binding: Identity & {
43
+ brand_id: string;
44
+ project_id: string;
45
+ project_organization_id: string;
46
+ render_id: string;
47
+ input_digest: string;
48
+ final: SavedFile;
49
+ poster: SavedFile;
50
+ report: Fingerprint;
51
+ evidence: Fingerprint[];
52
+ quality_report: Obj;
53
+ review_digest: string;
54
+ initial_final_render_id: string | null;
55
+ };
56
+ binding_sha256: string;
57
+ progress: {
58
+ final?: {
59
+ media_id: string;
60
+ stage: 'requested' | 'put' | 'confirmed';
61
+ };
62
+ poster?: {
63
+ media_id: string;
64
+ stage: 'requested' | 'put' | 'confirmed';
65
+ };
66
+ completion: 'pending' | 'unknown' | 'complete';
67
+ selection: 'pending' | 'unknown' | 'selected';
68
+ };
69
+ }
70
+ export declare function digest(value: unknown): string;
71
+ /** Same-directory rename + fsync: a process interruption leaves either full old or full new JSON. */
72
+ export declare function writeCheckpoint(target: string, checkpoint: SaveCheckpoint): Promise<void>;
73
+ export declare function loadCheckpoint(target: string): Promise<SaveCheckpoint>;
74
+ export declare function prepareSave(target: string, manifest: SaveManifest, transport: SaveTransport): Promise<SaveCheckpoint>;
75
+ export declare function resumeSave(target: string, transport: SaveTransport): Promise<SaveCheckpoint>;
76
+ export {};
77
+ //# sourceMappingURL=video-save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-save.d.ts","sourceRoot":"","sources":["../../src/lib/video-save.ts"],"names":[],"mappings":"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"}