gooseworks 0.5.0-dev.9.d3e7757f → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/README.md +17 -26
  2. package/dist/auth/device-flow.d.ts +10 -0
  3. package/dist/auth/device-flow.d.ts.map +1 -1
  4. package/dist/auth/device-flow.js +39 -1
  5. package/dist/auth/device-flow.js.map +1 -1
  6. package/dist/commands/doctor.d.ts.map +1 -1
  7. package/dist/commands/doctor.js +3 -1
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/video.d.ts +5 -0
  10. package/dist/commands/video.d.ts.map +1 -0
  11. package/dist/commands/video.js +117 -0
  12. package/dist/commands/video.js.map +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +5 -2
  15. package/dist/config.js.map +1 -1
  16. package/dist/environment.d.ts.map +1 -1
  17. package/dist/environment.js +4 -2
  18. package/dist/environment.js.map +1 -1
  19. package/dist/kit/core/bind.d.ts +12 -0
  20. package/dist/kit/core/bind.d.ts.map +1 -0
  21. package/dist/kit/core/bind.js +77 -0
  22. package/dist/kit/core/bind.js.map +1 -0
  23. package/dist/kit/core/canonical.d.ts +30 -0
  24. package/dist/kit/core/canonical.d.ts.map +1 -0
  25. package/dist/kit/core/canonical.js +67 -0
  26. package/dist/kit/core/canonical.js.map +1 -0
  27. package/dist/kit/core/check.d.ts +22 -0
  28. package/dist/kit/core/check.d.ts.map +1 -0
  29. package/dist/kit/core/check.js +53 -0
  30. package/dist/kit/core/check.js.map +1 -0
  31. package/dist/kit/core/device.d.ts +17 -0
  32. package/dist/kit/core/device.d.ts.map +1 -0
  33. package/dist/kit/core/device.js +153 -0
  34. package/dist/kit/core/device.js.map +1 -0
  35. package/dist/kit/core/errors.d.ts +22 -0
  36. package/dist/kit/core/errors.d.ts.map +1 -0
  37. package/dist/kit/core/errors.js +49 -0
  38. package/dist/kit/core/errors.js.map +1 -0
  39. package/dist/kit/core/files.d.ts +49 -0
  40. package/dist/kit/core/files.d.ts.map +1 -0
  41. package/dist/kit/core/files.js +213 -0
  42. package/dist/kit/core/files.js.map +1 -0
  43. package/dist/kit/core/host.d.ts +26 -0
  44. package/dist/kit/core/host.d.ts.map +1 -0
  45. package/dist/kit/core/host.js +10 -0
  46. package/dist/kit/core/host.js.map +1 -0
  47. package/dist/kit/core/log.d.ts +17 -0
  48. package/dist/kit/core/log.d.ts.map +1 -0
  49. package/dist/kit/core/log.js +82 -0
  50. package/dist/kit/core/log.js.map +1 -0
  51. package/dist/kit/core/paths.d.ts +27 -0
  52. package/dist/kit/core/paths.d.ts.map +1 -0
  53. package/dist/kit/core/paths.js +103 -0
  54. package/dist/kit/core/paths.js.map +1 -0
  55. package/dist/kit/core/pieces.d.ts +84 -0
  56. package/dist/kit/core/pieces.d.ts.map +1 -0
  57. package/dist/kit/core/pieces.js +374 -0
  58. package/dist/kit/core/pieces.js.map +1 -0
  59. package/dist/kit/core/progress-reporter.d.ts +30 -0
  60. package/dist/kit/core/progress-reporter.d.ts.map +1 -0
  61. package/dist/kit/core/progress-reporter.js +106 -0
  62. package/dist/kit/core/progress-reporter.js.map +1 -0
  63. package/dist/kit/core/progress.d.ts +22 -0
  64. package/dist/kit/core/progress.d.ts.map +1 -0
  65. package/dist/kit/core/progress.js +90 -0
  66. package/dist/kit/core/progress.js.map +1 -0
  67. package/dist/kit/core/run.d.ts +35 -0
  68. package/dist/kit/core/run.d.ts.map +1 -0
  69. package/dist/kit/core/run.js +850 -0
  70. package/dist/kit/core/run.js.map +1 -0
  71. package/dist/kit/core/save.d.ts +43 -0
  72. package/dist/kit/core/save.d.ts.map +1 -0
  73. package/dist/kit/core/save.js +265 -0
  74. package/dist/kit/core/save.js.map +1 -0
  75. package/dist/kit/core/schema.d.ts +5 -0
  76. package/dist/kit/core/schema.d.ts.map +1 -0
  77. package/dist/kit/core/schema.js +183 -0
  78. package/dist/kit/core/schema.js.map +1 -0
  79. package/dist/kit/core/secrets.d.ts +9 -0
  80. package/dist/kit/core/secrets.d.ts.map +1 -0
  81. package/dist/kit/core/secrets.js +60 -0
  82. package/dist/kit/core/secrets.js.map +1 -0
  83. package/dist/kit/core/style.d.ts +59 -0
  84. package/dist/kit/core/style.d.ts.map +1 -0
  85. package/dist/kit/core/style.js +179 -0
  86. package/dist/kit/core/style.js.map +1 -0
  87. package/dist/kit/core/toolchain.d.ts +52 -0
  88. package/dist/kit/core/toolchain.d.ts.map +1 -0
  89. package/dist/kit/core/toolchain.js +321 -0
  90. package/dist/kit/core/toolchain.js.map +1 -0
  91. package/dist/kit/core/version.d.ts +18 -0
  92. package/dist/kit/core/version.d.ts.map +1 -0
  93. package/dist/kit/core/version.js +33 -0
  94. package/dist/kit/core/version.js.map +1 -0
  95. package/dist/kit/env.d.ts +42 -0
  96. package/dist/kit/env.d.ts.map +1 -0
  97. package/dist/kit/env.js +76 -0
  98. package/dist/kit/env.js.map +1 -0
  99. package/dist/kit/line/client.d.ts +82 -0
  100. package/dist/kit/line/client.d.ts.map +1 -0
  101. package/dist/kit/line/client.js +325 -0
  102. package/dist/kit/line/client.js.map +1 -0
  103. package/dist/kit/line/types.d.ts +178 -0
  104. package/dist/kit/line/types.d.ts.map +1 -0
  105. package/dist/kit/line/types.js +18 -0
  106. package/dist/kit/line/types.js.map +1 -0
  107. package/dist/kit/maker/browser.d.ts +114 -0
  108. package/dist/kit/maker/browser.d.ts.map +1 -0
  109. package/dist/kit/maker/browser.js +547 -0
  110. package/dist/kit/maker/browser.js.map +1 -0
  111. package/dist/kit/maker/encode.d.ts +27 -0
  112. package/dist/kit/maker/encode.d.ts.map +1 -0
  113. package/dist/kit/maker/encode.js +58 -0
  114. package/dist/kit/maker/encode.js.map +1 -0
  115. package/dist/kit/maker/images.d.ts +14 -0
  116. package/dist/kit/maker/images.d.ts.map +1 -0
  117. package/dist/kit/maker/images.js +174 -0
  118. package/dist/kit/maker/images.js.map +1 -0
  119. package/dist/kit/maker/inputs.d.ts +81 -0
  120. package/dist/kit/maker/inputs.d.ts.map +1 -0
  121. package/dist/kit/maker/inputs.js +235 -0
  122. package/dist/kit/maker/inputs.js.map +1 -0
  123. package/dist/kit/maker/make.d.ts +19 -0
  124. package/dist/kit/maker/make.d.ts.map +1 -0
  125. package/dist/kit/maker/make.js +272 -0
  126. package/dist/kit/maker/make.js.map +1 -0
  127. package/dist/kit/maker/page.d.ts +19 -0
  128. package/dist/kit/maker/page.d.ts.map +1 -0
  129. package/dist/kit/maker/page.js +276 -0
  130. package/dist/kit/maker/page.js.map +1 -0
  131. package/dist/kit/maker/parts/html-frames/1.0.0/part.json +183 -0
  132. package/dist/kit/maker/parts/html-frames/src/part.d.ts +3 -0
  133. package/dist/kit/maker/parts/html-frames/src/part.d.ts.map +1 -0
  134. package/dist/kit/maker/parts/html-frames/src/part.js +10 -0
  135. package/dist/kit/maker/parts/html-frames/src/part.js.map +1 -0
  136. package/dist/kit/maker/runtime.d.ts +7 -0
  137. package/dist/kit/maker/runtime.d.ts.map +1 -0
  138. package/dist/kit/maker/runtime.js +571 -0
  139. package/dist/kit/maker/runtime.js.map +1 -0
  140. package/dist/kit/maker/unzip.d.ts +3 -0
  141. package/dist/kit/maker/unzip.d.ts.map +1 -0
  142. package/dist/kit/maker/unzip.js +133 -0
  143. package/dist/kit/maker/unzip.js.map +1 -0
  144. package/dist/kit/parts/catalog.d.ts +47 -0
  145. package/dist/kit/parts/catalog.d.ts.map +1 -0
  146. package/dist/kit/parts/catalog.js +198 -0
  147. package/dist/kit/parts/catalog.js.map +1 -0
  148. package/dist/kit/parts/fs-safe.d.ts +32 -0
  149. package/dist/kit/parts/fs-safe.d.ts.map +1 -0
  150. package/dist/kit/parts/fs-safe.js +185 -0
  151. package/dist/kit/parts/fs-safe.js.map +1 -0
  152. package/dist/kit/parts/loader.d.ts +50 -0
  153. package/dist/kit/parts/loader.d.ts.map +1 -0
  154. package/dist/kit/parts/loader.js +395 -0
  155. package/dist/kit/parts/loader.js.map +1 -0
  156. package/dist/kit/parts/semver.d.ts +6 -0
  157. package/dist/kit/parts/semver.d.ts.map +1 -0
  158. package/dist/kit/parts/semver.js +44 -0
  159. package/dist/kit/parts/semver.js.map +1 -0
  160. package/dist/program.d.ts.map +1 -1
  161. package/dist/program.js +6 -6
  162. package/dist/program.js.map +1 -1
  163. package/dist/skills/installer.d.ts +22 -0
  164. package/dist/skills/installer.d.ts.map +1 -1
  165. package/dist/skills/installer.js +56 -8
  166. package/dist/skills/installer.js.map +1 -1
  167. package/dist/skills/master-skill.d.ts +11 -70
  168. package/dist/skills/master-skill.d.ts.map +1 -1
  169. package/dist/skills/master-skill.js +120 -2900
  170. package/dist/skills/master-skill.js.map +1 -1
  171. package/dist/skills/package-freshness.d.ts +19 -0
  172. package/dist/skills/package-freshness.d.ts.map +1 -1
  173. package/dist/skills/package-freshness.js +37 -2
  174. package/dist/skills/package-freshness.js.map +1 -1
  175. package/dist/skills/routes.d.ts +7 -2
  176. package/dist/skills/routes.d.ts.map +1 -1
  177. package/dist/skills/routes.js +21 -25
  178. package/dist/skills/routes.js.map +1 -1
  179. package/dist/skills/server-entry-skills.d.ts +14 -0
  180. package/dist/skills/server-entry-skills.d.ts.map +1 -0
  181. package/dist/skills/server-entry-skills.js +119 -0
  182. package/dist/skills/server-entry-skills.js.map +1 -0
  183. package/dist/skills/staging-content.js +1 -1
  184. package/package.json +10 -6
  185. package/skills/goose-ads/SKILL.md +27 -605
  186. package/skills/goose-product-photos/SKILL.md +24 -217
  187. package/skills/goose-video/SKILL.md +23 -610
  188. package/skills/goose-video-local/SKILL.md +3 -1609
  189. package/skills/gooseworks/SKILL.md +58 -529
  190. package/skills/make-custom-video/SKILL.md +23 -725
  191. package/skills/manifest.json +7 -7
  192. package/skills/routes.json +10 -24
  193. package/dist/commands/video-local.d.ts +0 -9
  194. package/dist/commands/video-local.d.ts.map +0 -1
  195. package/dist/commands/video-local.js +0 -83
  196. package/dist/commands/video-local.js.map +0 -1
  197. package/dist/commands/video-save.d.ts +0 -3
  198. package/dist/commands/video-save.d.ts.map +0 -1
  199. package/dist/commands/video-save.js +0 -83
  200. package/dist/commands/video-save.js.map +0 -1
  201. package/dist/lib/video-local-captions.d.ts +0 -83
  202. package/dist/lib/video-local-captions.d.ts.map +0 -1
  203. package/dist/lib/video-local-captions.js +0 -261
  204. package/dist/lib/video-local-captions.js.map +0 -1
  205. package/dist/lib/video-local-runtime.d.ts +0 -8
  206. package/dist/lib/video-local-runtime.d.ts.map +0 -1
  207. package/dist/lib/video-local-runtime.js +0 -201
  208. package/dist/lib/video-local-runtime.js.map +0 -1
  209. package/dist/lib/video-save-mcp.d.ts +0 -9
  210. package/dist/lib/video-save-mcp.d.ts.map +0 -1
  211. package/dist/lib/video-save-mcp.js +0 -162
  212. package/dist/lib/video-save-mcp.js.map +0 -1
  213. package/dist/lib/video-save.d.ts +0 -77
  214. package/dist/lib/video-save.d.ts.map +0 -1
  215. package/dist/lib/video-save.js +0 -440
  216. package/dist/lib/video-save.js.map +0 -1
  217. package/dist/skills/custom-video-skill.d.ts +0 -3
  218. package/dist/skills/custom-video-skill.d.ts.map +0 -1
  219. package/dist/skills/custom-video-skill.js +0 -6
  220. package/dist/skills/custom-video-skill.js.map +0 -1
@@ -1,440 +0,0 @@
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.digest = digest;
37
- exports.writeCheckpoint = writeCheckpoint;
38
- exports.loadCheckpoint = loadCheckpoint;
39
- exports.prepareSave = prepareSave;
40
- exports.resumeSave = resumeSave;
41
- /** Finished-video recovery. No render-open, provider, or authentication operations. */
42
- const crypto_1 = require("crypto");
43
- const promises_1 = require("fs/promises");
44
- const path = __importStar(require("path"));
45
- const video_save_mcp_1 = require("./video-save-mcp");
46
- const HASH = /^[a-f0-9]{64}$/;
47
- const ID = /^[A-Za-z0-9_-]{1,160}$/;
48
- const MAX_BYTES = 200 * 1024 * 1024;
49
- const CHECKS = ['source', 'brand', 'product', 'hook_and_scene_order', 'voice_and_script',
50
- 'captions', 'endcard_and_cta', 'duration_and_ratio', 'visual_artifacts'];
51
- function fail(message) { throw new Error(message); }
52
- function object(value) { return !!value && typeof value === 'object' && !Array.isArray(value); }
53
- function keys(value, allowed) {
54
- if (Object.keys(value).some(key => !allowed.includes(key)))
55
- fail('Unexpected checkpoint or quality field');
56
- }
57
- function stable(value) {
58
- if (Array.isArray(value))
59
- return `[${value.map(stable).join(',')}]`;
60
- if (object(value))
61
- return `{${Object.keys(value).sort().map(k => `${JSON.stringify(k)}:${stable(value[k])}`).join(',')}}`;
62
- return JSON.stringify(value);
63
- }
64
- function digest(value) { return (0, crypto_1.createHash)('sha256').update(stable(value)).digest('hex'); }
65
- function sha(bytes) { return (0, crypto_1.createHash)('sha256').update(bytes).digest('hex'); }
66
- function origin(value) {
67
- if (typeof value !== 'string')
68
- fail('Missing environment origin');
69
- const url = new URL(value);
70
- if (url.username || url.password || url.search || url.hash || url.pathname !== '/' ||
71
- !['https:', 'http:'].includes(url.protocol))
72
- fail('Invalid public environment origin');
73
- if (url.protocol === 'http:' && !['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname))
74
- fail('Environment requires HTTPS');
75
- return url.origin;
76
- }
77
- function identity(account) {
78
- if (!object(account.environment) || !['production', 'staging', 'local'].includes(account.environment.name) ||
79
- typeof account.user?.id !== 'string' || typeof account.organization?.id !== 'string' ||
80
- !ID.test(account.user.id) || !ID.test(account.organization.id))
81
- fail('Unknown account/environment; reconnect on the original connection');
82
- return { environment: { name: account.environment.name, api_origin: origin(account.environment.api_origin) },
83
- user_id: account.user.id, organization_id: account.organization.id };
84
- }
85
- function quality(report) {
86
- if (!object(report))
87
- fail('Missing quality report');
88
- keys(report, ['version', 'summary', 'checks', 'detected_issues', 'repair_actions', 'checked_at']);
89
- if (report.version !== 1 || typeof report.summary !== 'string' || !report.summary.trim() || report.summary.length > 2000 ||
90
- !object(report.checks) || Object.keys(report.checks).length !== CHECKS.length)
91
- fail('Invalid structured quality report');
92
- for (const name of CHECKS) {
93
- const check = report.checks[name];
94
- if (!object(check))
95
- fail(`Missing quality check: ${name}`);
96
- keys(check, ['status', 'note']);
97
- if (!['pass', 'not_applicable'].includes(check.status) ||
98
- (check.note !== undefined && (typeof check.note !== 'string' || check.note.length > 1000)) ||
99
- (check.status === 'not_applicable' && !check.note?.trim()))
100
- fail(`Quality check has not passed: ${name}`);
101
- }
102
- for (const name of ['source', 'brand', 'hook_and_scene_order', 'endcard_and_cta', 'duration_and_ratio', 'visual_artifacts']) {
103
- if (report.checks[name].status !== 'pass')
104
- fail(`Always-required quality check has not passed: ${name}`);
105
- }
106
- for (const [key, limit] of [['detected_issues', 25], ['repair_actions', 10]]) {
107
- if (report[key] !== undefined && (!Array.isArray(report[key]) || report[key].length > limit ||
108
- report[key].some((v) => typeof v !== 'string' || v.length > 1000)))
109
- fail('Invalid quality issue/action list');
110
- }
111
- if (report.checked_at !== undefined && (typeof report.checked_at !== 'string' ||
112
- !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/.test(report.checked_at) ||
113
- !Number.isFinite(Date.parse(report.checked_at))))
114
- fail('Invalid quality timestamp');
115
- if (JSON.stringify(report).length > 32 * 1024)
116
- fail('Quality report is too large');
117
- return { ...report, detected_issues: report.detected_issues ?? [], repair_actions: report.repair_actions ?? [] };
118
- }
119
- async function file(filePath) {
120
- if (typeof filePath !== 'string' || !path.isAbsolute(filePath))
121
- fail('Use absolute local file paths');
122
- const info = await (0, promises_1.stat)(filePath);
123
- if (!info.isFile() || info.size < 1 || info.size > MAX_BYTES)
124
- fail('Missing/empty/oversized finished file or quality evidence');
125
- const bytes = await (0, promises_1.readFile)(filePath);
126
- return { path: filePath, sha256: sha(bytes), bytes: bytes.length };
127
- }
128
- function validFile(value, saved = false) {
129
- if (!object(value))
130
- fail('Invalid file binding');
131
- keys(value, ['path', 'sha256', 'bytes', ...(saved ? ['upload_path', 'ingredient_key', 'kind', 'mime'] : [])]);
132
- if (typeof value.path !== 'string' || !path.isAbsolute(value.path) || !HASH.test(value.sha256) ||
133
- !Number.isInteger(value.bytes) || value.bytes < 1 || value.bytes > MAX_BYTES)
134
- fail('Invalid file fingerprint');
135
- }
136
- function validate(checkpoint) {
137
- if (!object(checkpoint))
138
- fail('Malformed save checkpoint');
139
- // Report notes are free text. Do not let a copied auth error turn the otherwise
140
- // credential-free checkpoint into a token or reusable signed-URL store.
141
- if (/\bBearer\s+\S+|\bcal_[A-Za-z0-9_-]{16,}\b|[?&](?:X-Amz-(?:Signature|Credential|Security-Token)|token|api_key)=/i.test(JSON.stringify(checkpoint))) {
142
- fail('Remove authorization or signed-URL material from checkpoint inputs; no credentials may be saved');
143
- }
144
- keys(checkpoint, ['version', 'binding', 'binding_sha256', 'progress']);
145
- const b = checkpoint.binding;
146
- if (checkpoint.version !== 1 || !object(b) || !object(checkpoint.progress) || digest(b) !== checkpoint.binding_sha256)
147
- fail('Malformed or changed save checkpoint');
148
- keys(b, ['environment', 'user_id', 'organization_id', 'brand_id', 'project_id', 'project_organization_id', 'render_id', 'input_digest',
149
- 'final', 'poster', 'report', 'evidence', 'quality_report', 'review_digest', 'initial_final_render_id']);
150
- identity({ environment: b.environment, user: { id: b.user_id }, organization: { id: b.organization_id } });
151
- keys(b.environment, ['name', 'api_origin']);
152
- if (![b.brand_id, b.project_id, b.project_organization_id, b.render_id].every(id => typeof id === 'string' && ID.test(id)) ||
153
- !/^[a-f0-9]{8,128}$/.test(b.input_digest) || !HASH.test(b.review_digest) ||
154
- !(b.initial_final_render_id === null || (typeof b.initial_final_render_id === 'string' && ID.test(b.initial_final_render_id))))
155
- fail('Invalid render binding');
156
- validFile(b.final, true);
157
- validFile(b.poster, true);
158
- validFile(b.report);
159
- if (!Array.isArray(b.evidence) || b.evidence.length < 1 || b.evidence.length > 25)
160
- fail('Missing quality evidence');
161
- b.evidence.forEach((v) => validFile(v));
162
- quality(b.quality_report);
163
- for (const role of ['final', 'poster']) {
164
- const f = b[role];
165
- if (f.upload_path !== `working/final-${b.render_id}${role === 'final' ? '.mp4' : '-thumb.jpg'}` ||
166
- f.ingredient_key !== (role === 'final' ? 'final' : 'final-thumb') ||
167
- f.kind !== (role === 'final' ? 'render' : 'thumbnail') || f.mime !== (role === 'final' ? 'video/mp4' : 'image/jpeg'))
168
- fail('Changed upload destination');
169
- const receipt = checkpoint.progress[role];
170
- if (receipt !== undefined) {
171
- if (!object(receipt))
172
- fail('Invalid stage receipt');
173
- keys(receipt, ['media_id', 'stage']);
174
- if (typeof receipt.media_id !== 'string' || !ID.test(receipt.media_id) || !['requested', 'put', 'confirmed'].includes(receipt.stage))
175
- fail('Invalid stage receipt');
176
- }
177
- }
178
- keys(checkpoint.progress, ['final', 'poster', 'completion', 'selection']);
179
- if (!['pending', 'unknown', 'complete'].includes(checkpoint.progress.completion) ||
180
- !['pending', 'unknown', 'selected'].includes(checkpoint.progress.selection))
181
- fail('Invalid saving stage');
182
- }
183
- /** Same-directory rename + fsync: a process interruption leaves either full old or full new JSON. */
184
- async function writeCheckpoint(target, checkpoint) {
185
- validate(checkpoint);
186
- await (0, promises_1.mkdir)(path.dirname(target), { recursive: true, mode: 0o700 });
187
- const temp = `${target}.${(0, crypto_1.randomUUID)()}.pending`;
188
- const handle = await (0, promises_1.open)(temp, 'wx', 0o600);
189
- try {
190
- await handle.writeFile(JSON.stringify(checkpoint, null, 2) + '\n');
191
- await handle.sync();
192
- }
193
- finally {
194
- await handle.close();
195
- }
196
- try {
197
- await (0, promises_1.rename)(temp, target);
198
- const directory = await (0, promises_1.open)(path.dirname(target), 'r');
199
- try {
200
- await directory.sync();
201
- }
202
- finally {
203
- await directory.close();
204
- }
205
- }
206
- finally {
207
- await (0, promises_1.unlink)(temp).catch(() => undefined);
208
- }
209
- }
210
- async function loadCheckpoint(target) {
211
- const info = await (0, promises_1.stat)(target);
212
- if (!info.isFile() || info.size > 1024 * 1024)
213
- fail('Malformed save checkpoint');
214
- const checkpoint = JSON.parse(await (0, promises_1.readFile)(target, 'utf8'));
215
- validate(checkpoint);
216
- return checkpoint;
217
- }
218
- function reviewDigest(p) { return digest({ script: p.script ?? null, script_drafts: p.script_drafts ?? null }); }
219
- function inspectProject(state, ids) {
220
- const project = state.project;
221
- const render = Array.isArray(state.renders) && state.renders.find((r) => r.id === ids.render_id);
222
- if (!object(project) || project.id !== ids.project_id || project.brand_id !== ids.brand_id ||
223
- !object(render) || render.project_id !== ids.project_id)
224
- fail('Project/render identity mismatch or missing render; no new render was opened');
225
- if (state.order || state.creative_plan || project.custom_video_state?.mode === 'generate')
226
- fail('This is not a client-side recipe render; use its existing order workflow');
227
- if (!['queued', 'running', 'complete'].includes(render.status) || render.stop_requested_at ||
228
- project.stop_requested_at || project.plan_status === 'stopped' || ['stopped', 'capped'].includes(project.status) ||
229
- render.workflow_stage === 'blocked' || render.quality_status === 'blocked')
230
- fail('Render is stopped, capped, failed or blocked; save-only recovery cannot reopen it');
231
- return { project, render };
232
- }
233
- async function projectRead(transport, ids) {
234
- return inspectProject(await transport.call('video_project_read', {
235
- brand_id: ids.brand_id, project_id: ids.project_id, include: ['renders'],
236
- }), ids);
237
- }
238
- async function prepareSave(target, manifest, transport) {
239
- await (0, promises_1.mkdir)(path.dirname(target), { recursive: true, mode: 0o700 });
240
- const lock = await (0, promises_1.open)(`${target}.lock`, 'wx', 0o600).catch(() => fail('Save checkpoint is locked by another process'));
241
- try {
242
- if (await (0, promises_1.stat)(target).catch(() => null))
243
- fail('Checkpoint already exists; resume it instead of replacing finished-video evidence');
244
- if (!manifest || ![manifest.brand_id, manifest.project_id, manifest.render_id].every(v => typeof v === 'string' && ID.test(v)) ||
245
- !/^[a-f0-9]{8,128}$/.test(manifest.input_digest) || !object(manifest.qc) ||
246
- !Array.isArray(manifest.qc.evidence_paths) || manifest.qc.evidence_paths.length < 1 || manifest.qc.evidence_paths.length > 25)
247
- fail('Invalid finished-video manifest');
248
- const owner = identity(await transport.call('account_whoami', {}));
249
- const { project } = await projectRead(transport, manifest);
250
- if (typeof project.organization_id !== 'string' || !ID.test(project.organization_id))
251
- fail('Unknown project ownership');
252
- const final = await file(manifest.final_path);
253
- const poster = await file(manifest.poster_path);
254
- if (final.sha256 !== manifest.qc.final_sha256 || poster.sha256 !== manifest.qc.poster_sha256)
255
- fail('Finished bytes differ from the quality check; review these exact files first');
256
- const report = await file(manifest.qc.report_path);
257
- const qualityReport = quality(JSON.parse(await (0, promises_1.readFile)(report.path, 'utf8')));
258
- const checkpoint = {
259
- version: 1, binding: { ...owner, brand_id: manifest.brand_id, project_id: manifest.project_id, project_organization_id: project.organization_id,
260
- render_id: manifest.render_id, input_digest: manifest.input_digest,
261
- final: { ...final, upload_path: `working/final-${manifest.render_id}.mp4`, ingredient_key: 'final', kind: 'render', mime: 'video/mp4' },
262
- poster: { ...poster, upload_path: `working/final-${manifest.render_id}-thumb.jpg`, ingredient_key: 'final-thumb', kind: 'thumbnail', mime: 'image/jpeg' },
263
- report, evidence: await Promise.all(manifest.qc.evidence_paths.map(file)), quality_report: qualityReport,
264
- review_digest: reviewDigest(project), initial_final_render_id: project.final_render_id ?? null,
265
- }, binding_sha256: '', progress: { completion: 'pending', selection: 'pending' },
266
- };
267
- checkpoint.binding_sha256 = digest(checkpoint.binding);
268
- await writeCheckpoint(target, checkpoint);
269
- return checkpoint;
270
- }
271
- finally {
272
- await lock.close();
273
- await (0, promises_1.unlink)(`${target}.lock`);
274
- }
275
- }
276
- function durableUrl(b, f) {
277
- return `/api/ads/projects/${b.project_id}/render-file?path=${encodeURIComponent(f.upload_path)}`;
278
- }
279
- function sameUrl(actual, expected) {
280
- if (typeof actual !== 'string' || !actual.startsWith('/'))
281
- return false;
282
- const a = new URL(actual, 'https://local.invalid');
283
- const e = new URL(expected, 'https://local.invalid');
284
- return a.origin === e.origin && !a.hash && a.pathname === e.pathname && a.searchParams.getAll('path').length === 1 && a.searchParams.get('path') === e.searchParams.get('path') &&
285
- [...a.searchParams.keys()].every(k => k === 'path');
286
- }
287
- async function resumeSave(target, transport) {
288
- // Exclusive local writer. A stale lock is reported, never silently stolen.
289
- const lock = await (0, promises_1.open)(`${target}.lock`, 'wx', 0o600).catch(() => fail('Save checkpoint is locked; verify the prior process exited before removing its .lock file'));
290
- try {
291
- const checkpoint = await loadCheckpoint(target);
292
- const b = checkpoint.binding;
293
- const owner = identity(await transport.call('account_whoami', {}));
294
- if (stable(owner) !== stable({ environment: b.environment, user_id: b.user_id, organization_id: b.organization_id }))
295
- fail('Account/environment mismatch; reconnect to the original connection');
296
- for (const expected of [b.final, b.poster, b.report, ...b.evidence]) {
297
- const actual = await file(expected.path);
298
- if (actual.sha256 !== expected.sha256 || actual.bytes !== expected.bytes)
299
- fail('Finished file or quality evidence changed; saving stopped without generation');
300
- }
301
- if (digest(quality(JSON.parse(await (0, promises_1.readFile)(b.report.path, 'utf8')))) !== digest(b.quality_report))
302
- fail('Quality report mismatch');
303
- const read = async () => {
304
- const state = await projectRead(transport, b);
305
- if (state.project.organization_id !== b.project_organization_id)
306
- fail('Project ownership changed');
307
- if (reviewDigest(state.project) !== b.review_digest)
308
- fail('The saved review set changed; diagnose before selecting this video');
309
- const pin = state.project.final_render_id ?? null;
310
- if (pin !== b.initial_final_render_id && pin !== b.render_id)
311
- fail('Another version was selected; recovery will not overwrite that choice');
312
- return state;
313
- };
314
- await read();
315
- for (const role of ['final', 'poster']) {
316
- const f = b[role];
317
- const listed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
318
- ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
319
- if (!Array.isArray(listed.items) || listed.next_cursor)
320
- fail('Uncertain media lookup; no upload was attempted');
321
- let media = listed.items.find((m) => m.path === f.upload_path && m.input_digest === b.input_digest && m.ingredient_key === f.ingredient_key);
322
- const receipt = checkpoint.progress[role];
323
- if (receipt && (!media || media.id !== receipt.media_id))
324
- fail('Saved media identity changed or disappeared; no upload was attempted');
325
- if (media && (!ID.test(media.id) || !['pending', 'approved'].includes(media.status) || media.kind !== f.kind))
326
- fail('Unexpected saved-media state');
327
- if (media?.status === 'pending') {
328
- // A PUT/confirm reply may have been lost. Inspect stored bytes first; a missing object
329
- // is the only reason to request a fresh PUT. Never infer success from a local receipt.
330
- const pendingId = media.id;
331
- await read();
332
- try {
333
- const result = await transport.call('media_confirm', { brand_id: b.brand_id, media_id: pendingId });
334
- if (result.media?.id !== pendingId || result.media?.status !== 'approved')
335
- fail('Upload confirmation is incomplete');
336
- }
337
- catch (error) {
338
- if (!(error instanceof video_save_mcp_1.SaveToolError) || error.code !== 'not_found')
339
- throw error;
340
- const again = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
341
- ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
342
- if (again.next_cursor || !again.items?.some((m) => m.id === pendingId && m.path === f.upload_path && m.status === 'pending'))
343
- fail('Pending media disappeared; diagnose before refreshing its upload');
344
- // The scoped pending row still exists and storage has no object. A fresh URL/row
345
- // at the identical render path is safe; this does not generate a replacement.
346
- media = undefined;
347
- delete checkpoint.progress[role];
348
- await writeCheckpoint(target, checkpoint);
349
- }
350
- if (media) {
351
- const refreshed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
352
- ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
353
- if (refreshed.next_cursor)
354
- fail('Uncertain confirmed-media lookup');
355
- media = refreshed.items?.find((m) => m.id === pendingId);
356
- if (!media)
357
- fail('Confirmed media disappeared');
358
- }
359
- }
360
- if (!media) {
361
- const state = await read();
362
- if (state.render.status === 'complete')
363
- fail('Completed render has missing media; diagnose without replacing its files');
364
- const result = await transport.call('media_upload', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
365
- kind: f.kind, path: f.upload_path, ingredient_key: f.ingredient_key, input_digest: b.input_digest,
366
- source: { type: 'file', filename: path.basename(f.upload_path), content_type: f.mime } });
367
- if (typeof result.media?.id !== 'string' || !ID.test(result.media.id) || result.upload?.method !== 'PUT' ||
368
- !sameUrl(result.upload.render_file_url, durableUrl(b, f)) || !object(result.upload.required_headers))
369
- fail('Invalid upload receipt');
370
- checkpoint.progress[role] = { media_id: result.media.id, stage: 'requested' };
371
- await writeCheckpoint(target, checkpoint);
372
- const bytes = await (0, promises_1.readFile)(f.path);
373
- if (bytes.length !== f.bytes || sha(bytes) !== f.sha256)
374
- fail('Finished file changed before upload');
375
- await read();
376
- await transport.put(result.upload.url, result.upload.required_headers, bytes);
377
- checkpoint.progress[role].stage = 'put';
378
- await writeCheckpoint(target, checkpoint);
379
- await read();
380
- const confirmed = await transport.call('media_confirm', { brand_id: b.brand_id, media_id: result.media.id });
381
- if (confirmed.media?.id !== result.media.id || confirmed.media?.status !== 'approved')
382
- fail('Upload confirmation is incomplete');
383
- const refreshed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
384
- ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
385
- if (refreshed.next_cursor)
386
- fail('Uncertain confirmed-media lookup');
387
- media = refreshed.items?.find((m) => m.id === result.media.id);
388
- }
389
- if (!media || media.status !== 'approved' || media.path !== f.upload_path || media.kind !== f.kind ||
390
- media.input_digest !== b.input_digest || media.ingredient_key !== f.ingredient_key ||
391
- media.bytes !== f.bytes || sha(await transport.download(media.url, MAX_BYTES)) !== f.sha256)
392
- fail('Stored bytes do not match the quality-checked final/poster');
393
- checkpoint.progress[role] = { media_id: media.id, stage: 'confirmed' };
394
- await writeCheckpoint(target, checkpoint);
395
- }
396
- let state = await read();
397
- if (state.render.status !== 'complete') {
398
- checkpoint.progress.completion = 'unknown';
399
- await writeCheckpoint(target, checkpoint);
400
- await transport.call('video_render_run', { brand_id: b.brand_id, project_id: b.project_id,
401
- render: { render_id: b.render_id, status: 'complete', workflow_stage: 'ready', quality_status: 'passed',
402
- quality_report: b.quality_report, output_url: durableUrl(b, b.final), thumbnail_url: durableUrl(b, b.poster) } });
403
- state = await read();
404
- }
405
- if (state.render.status !== 'complete' || state.render.quality_status !== 'passed' ||
406
- digest(quality(state.render.quality_report)) !== digest(b.quality_report) ||
407
- !sameUrl(state.render.render_file_path ?? state.render.output_url, durableUrl(b, b.final)) ||
408
- !sameUrl(state.render.thumbnail_file_path ?? state.render.thumbnail_url, durableUrl(b, b.poster)))
409
- fail('Completed render does not match this checkpoint');
410
- checkpoint.progress.completion = 'complete';
411
- await writeCheckpoint(target, checkpoint);
412
- if (state.project.final_render_id !== b.render_id) {
413
- checkpoint.progress.selection = 'unknown';
414
- await writeCheckpoint(target, checkpoint);
415
- try {
416
- await transport.call('video_project_upsert', { brand_id: b.brand_id, project_id: b.project_id,
417
- patch: { final_render_id: b.render_id, final_selection_guard: {
418
- expected_final_render_id: state.project.final_render_id ?? null, expected_review_digest: b.review_digest,
419
- } } });
420
- }
421
- catch (error) {
422
- if (error instanceof video_save_mcp_1.SaveToolError && error.code === 'final_selection_conflict') {
423
- fail('Another version was selected or the saved review changed; recovery stopped without overwriting that choice. Read the current project before continuing.');
424
- }
425
- throw error;
426
- }
427
- state = await read();
428
- }
429
- if (state.project.final_render_id !== b.render_id)
430
- fail('Final selection was not saved; reconnect and resume the same checkpoint');
431
- checkpoint.progress.selection = 'selected';
432
- await writeCheckpoint(target, checkpoint);
433
- return checkpoint;
434
- }
435
- finally {
436
- await lock.close();
437
- await (0, promises_1.unlink)(`${target}.lock`);
438
- }
439
- }
440
- //# sourceMappingURL=video-save.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-save.js","sourceRoot":"","sources":["../../src/lib/video-save.ts"],"names":[],"mappings":"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"}