gooseworks 0.5.9-dev.53.c1bd6be2 → 0.5.9-dev.57.78646da5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/claude-mcp.d.ts +7 -1
- package/dist/agents/claude-mcp.d.ts.map +1 -1
- package/dist/agents/claude-mcp.js +43 -10
- package/dist/agents/claude-mcp.js.map +1 -1
- package/dist/auth/credentials.d.ts +8 -0
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/auth/credentials.js +35 -1
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/device-flow.d.ts +4 -1
- package/dist/auth/device-flow.d.ts.map +1 -1
- package/dist/auth/device-flow.js +8 -3
- package/dist/auth/device-flow.js.map +1 -1
- package/dist/auth/oauth-server.d.ts +9 -1
- package/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +19 -11
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/auth/revoke.d.ts +10 -0
- package/dist/auth/revoke.d.ts.map +1 -0
- package/dist/auth/revoke.js +31 -0
- package/dist/auth/revoke.js.map +1 -0
- package/dist/commands/login.d.ts +15 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +34 -10
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +29 -11
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/video.d.ts +35 -0
- package/dist/commands/video.d.ts.map +1 -1
- package/dist/commands/video.js +475 -39
- package/dist/commands/video.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kit/core/canonical.d.ts +3 -1
- package/dist/kit/core/canonical.d.ts.map +1 -1
- package/dist/kit/core/canonical.js +1 -1
- package/dist/kit/core/canonical.js.map +1 -1
- package/dist/kit/core/check.d.ts +2 -0
- package/dist/kit/core/check.d.ts.map +1 -1
- package/dist/kit/core/check.js +12 -2
- package/dist/kit/core/check.js.map +1 -1
- package/dist/kit/core/detach.d.ts +11 -0
- package/dist/kit/core/detach.d.ts.map +1 -0
- package/dist/kit/core/detach.js +72 -0
- package/dist/kit/core/detach.js.map +1 -0
- package/dist/kit/core/diff.d.ts +5 -0
- package/dist/kit/core/diff.d.ts.map +1 -0
- package/dist/kit/core/diff.js +132 -0
- package/dist/kit/core/diff.js.map +1 -0
- package/dist/kit/core/errors.d.ts +13 -1
- package/dist/kit/core/errors.d.ts.map +1 -1
- package/dist/kit/core/errors.js +14 -1
- package/dist/kit/core/errors.js.map +1 -1
- package/dist/kit/core/eyes.d.ts +80 -0
- package/dist/kit/core/eyes.d.ts.map +1 -0
- package/dist/kit/core/eyes.js +366 -0
- package/dist/kit/core/eyes.js.map +1 -0
- package/dist/kit/core/files.js +2 -2
- package/dist/kit/core/files.js.map +1 -1
- package/dist/kit/core/lock.d.ts +4 -0
- package/dist/kit/core/lock.d.ts.map +1 -0
- package/dist/kit/core/lock.js +13 -0
- package/dist/kit/core/lock.js.map +1 -0
- package/dist/kit/core/log.d.ts +38 -2
- package/dist/kit/core/log.d.ts.map +1 -1
- package/dist/kit/core/log.js +38 -5
- package/dist/kit/core/log.js.map +1 -1
- package/dist/kit/core/outcome.d.ts +114 -0
- package/dist/kit/core/outcome.d.ts.map +1 -0
- package/dist/kit/core/outcome.js +246 -0
- package/dist/kit/core/outcome.js.map +1 -0
- package/dist/kit/core/patch.d.ts +64 -0
- package/dist/kit/core/patch.d.ts.map +1 -0
- package/dist/kit/core/patch.js +289 -0
- package/dist/kit/core/patch.js.map +1 -0
- package/dist/kit/core/paths.d.ts +17 -0
- package/dist/kit/core/paths.d.ts.map +1 -1
- package/dist/kit/core/paths.js +21 -0
- package/dist/kit/core/paths.js.map +1 -1
- package/dist/kit/core/pieces.d.ts +16 -4
- package/dist/kit/core/pieces.d.ts.map +1 -1
- package/dist/kit/core/pieces.js +84 -27
- package/dist/kit/core/pieces.js.map +1 -1
- package/dist/kit/core/progress-reporter.d.ts +21 -4
- package/dist/kit/core/progress-reporter.d.ts.map +1 -1
- package/dist/kit/core/progress-reporter.js +74 -12
- package/dist/kit/core/progress-reporter.js.map +1 -1
- package/dist/kit/core/progress.d.ts +18 -1
- package/dist/kit/core/progress.d.ts.map +1 -1
- package/dist/kit/core/progress.js +44 -1
- package/dist/kit/core/progress.js.map +1 -1
- package/dist/kit/core/refusal-log.d.ts +7 -0
- package/dist/kit/core/refusal-log.d.ts.map +1 -0
- package/dist/kit/core/refusal-log.js +54 -0
- package/dist/kit/core/refusal-log.js.map +1 -0
- package/dist/kit/core/run.d.ts +43 -5
- package/dist/kit/core/run.d.ts.map +1 -1
- package/dist/kit/core/run.js +520 -84
- package/dist/kit/core/run.js.map +1 -1
- package/dist/kit/core/save.d.ts +7 -3
- package/dist/kit/core/save.d.ts.map +1 -1
- package/dist/kit/core/save.js +57 -20
- package/dist/kit/core/save.js.map +1 -1
- package/dist/kit/core/style.js +1 -1
- package/dist/kit/core/style.js.map +1 -1
- package/dist/kit/line/client.d.ts +14 -2
- package/dist/kit/line/client.d.ts.map +1 -1
- package/dist/kit/line/client.js +40 -20
- package/dist/kit/line/client.js.map +1 -1
- package/dist/kit/line/types.d.ts +33 -1
- package/dist/kit/line/types.d.ts.map +1 -1
- package/dist/kit/maker/inputs.js +1 -1
- package/dist/kit/maker/make.d.ts.map +1 -1
- package/dist/kit/maker/make.js +4 -2
- package/dist/kit/maker/make.js.map +1 -1
- package/dist/kit/maker/parts/html-frames/{1.2.0 → 1.2.1}/part.json +1 -1
- package/dist/kit/parts/catalog.d.ts +3 -20
- package/dist/kit/parts/catalog.d.ts.map +1 -1
- package/dist/kit/parts/catalog.js +6 -41
- package/dist/kit/parts/catalog.js.map +1 -1
- package/dist/kit/parts/loader.d.ts +7 -2
- package/dist/kit/parts/loader.d.ts.map +1 -1
- package/dist/kit/parts/loader.js +88 -23
- package/dist/kit/parts/loader.js.map +1 -1
- package/dist/skills/master-skill.d.ts +1 -3
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +12 -14
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/routes.js +4 -4
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/server-entry-skills.d.ts +6 -6
- package/dist/skills/server-entry-skills.js +15 -15
- package/dist/skills/server-entry-skills.js.map +1 -1
- package/dist/utils/browser-preflight.d.ts +3 -0
- package/dist/utils/browser-preflight.d.ts.map +1 -1
- package/dist/utils/browser-preflight.js +27 -6
- package/dist/utils/browser-preflight.js.map +1 -1
- package/dist/utils/exit.d.ts +6 -0
- package/dist/utils/exit.d.ts.map +1 -0
- package/dist/utils/exit.js +37 -0
- package/dist/utils/exit.js.map +1 -0
- package/package.json +13 -2
- package/skills/goose-ads/SKILL.md +3 -3
- package/skills/goose-product-photos/SKILL.md +3 -3
- package/skills/goose-video/SKILL.md +5 -5
- package/skills/goose-video-local/SKILL.md +3 -3
- package/skills/gooseworks/SKILL.md +6 -8
- package/skills/make-custom-video/SKILL.md +2 -2
- package/skills/manifest.json +7 -7
- package/skills/routes.json +3 -3
|
@@ -0,0 +1,289 @@
|
|
|
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.MAX_PATCHED_FILES = exports.MAX_PATCHED_STEPS = exports.MAX_PATCH_DIFF_CHARS = void 0;
|
|
37
|
+
exports.patchSha256 = patchSha256;
|
|
38
|
+
exports.stepPatchHash = stepPatchHash;
|
|
39
|
+
exports.patchFolders = patchFolders;
|
|
40
|
+
exports.takeOutStep = takeOutStep;
|
|
41
|
+
exports.readPatch = readPatch;
|
|
42
|
+
exports.patchLockProblem = patchLockProblem;
|
|
43
|
+
exports.patchedFiles = patchedFiles;
|
|
44
|
+
// An edited step (gooseworks-app video-line/patch.ts holds the server's side).
|
|
45
|
+
//
|
|
46
|
+
// When a step's own code is wrong, `video step <id> <step> --edit` takes the exact part version the
|
|
47
|
+
// video's lock gives that step out into <run>/patches/<step>/, next to an untouched copy and a record
|
|
48
|
+
// of every file's locked hash. `video make <id> --patched <step>` then sends the edit with the
|
|
49
|
+
// hand-over (which files changed, from which hash to which, and a bounded unified diff), loads the
|
|
50
|
+
// edited copy for that step only, and names the edit in the upload. Everything else is checked
|
|
51
|
+
// against the lock as always. The server keeps the edit on the run, refuses any paid piece an edited
|
|
52
|
+
// part did not already order for this video, and keeps the edit on the finished version.
|
|
53
|
+
const crypto_1 = require("crypto");
|
|
54
|
+
const fs_1 = require("fs");
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const canonical_1 = require("./canonical");
|
|
57
|
+
const diff_1 = require("./diff");
|
|
58
|
+
const errors_1 = require("./errors");
|
|
59
|
+
const lock_1 = require("./lock");
|
|
60
|
+
const paths_1 = require("./paths");
|
|
61
|
+
const save_1 = require("./save");
|
|
62
|
+
/** The server's step id rule. */
|
|
63
|
+
const STEP_ID = /^[a-z0-9][a-z0-9_-]{0,59}$/;
|
|
64
|
+
/** The paths an edit may change: the server's FILE_PATH (gooseworks-app video-line/patch.ts). */
|
|
65
|
+
const PATCH_FILE_PATH = /^[A-Za-z0-9_][A-Za-z0-9._-]{0,99}(\/[A-Za-z0-9_][A-Za-z0-9._-]{0,99}){0,7}$/;
|
|
66
|
+
/** All steps' diffs together (the server's MAX_PATCH_DIFF_CHARS). */
|
|
67
|
+
exports.MAX_PATCH_DIFF_CHARS = 48 * 1024;
|
|
68
|
+
exports.MAX_PATCHED_STEPS = 4;
|
|
69
|
+
exports.MAX_PATCHED_FILES = 20;
|
|
70
|
+
const sha256 = (bytes) => (0, crypto_1.createHash)('sha256').update(bytes).digest('hex');
|
|
71
|
+
function patchSha256(steps) {
|
|
72
|
+
return (0, canonical_1.canonicalHash)(steps.map(({ diff: _diff, ...rest }) => rest));
|
|
73
|
+
}
|
|
74
|
+
/** One step's own fingerprint in its step hash, so an edited step and every step after it run again. */
|
|
75
|
+
function stepPatchHash(step) {
|
|
76
|
+
return (0, canonical_1.canonicalHash)({ part: step.part, files: step.files });
|
|
77
|
+
}
|
|
78
|
+
/** Where a step's edit lives. */
|
|
79
|
+
function patchFolders(layout, step) {
|
|
80
|
+
if (!STEP_ID.test(step))
|
|
81
|
+
throw new errors_1.KitStop(`"${step}" is not a step name.`, 'refused');
|
|
82
|
+
return {
|
|
83
|
+
code: path.join(layout.patches, step),
|
|
84
|
+
original: path.join(layout.patches, `${step}.original`),
|
|
85
|
+
record: path.join(layout.patches, `${step}.json`),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** The part a step runs, from the lock (layers) or the style kept from the last run (timeline steps). */
|
|
89
|
+
async function stepPart(layout, lock, step) {
|
|
90
|
+
let ref;
|
|
91
|
+
let names = Object.keys(lock.layers ?? {}).map((slot) => `layer-${slot}`);
|
|
92
|
+
if (step.startsWith('layer-')) {
|
|
93
|
+
ref = lock.layers[step.slice('layer-'.length)];
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const style = await (0, save_1.readJson)(path.join(layout.style, 'style.json')).catch(() => null);
|
|
97
|
+
const timeline = Array.isArray(style?.timeline) ? style.timeline : [];
|
|
98
|
+
names = [...timeline.map((s) => s.id), ...names];
|
|
99
|
+
const pin = timeline.find((s) => s.id === step)?.part;
|
|
100
|
+
ref = pin && (0, lock_1.lockedRef)(pin, lock);
|
|
101
|
+
}
|
|
102
|
+
if (!ref || typeof ref.id !== 'string' || typeof ref.version !== 'string') {
|
|
103
|
+
throw new errors_1.KitStop(`This video has no step "${step}". Its steps: ${names.join(', ')}.`, 'refused');
|
|
104
|
+
}
|
|
105
|
+
if (lock.parts[ref.id]?.version !== ref.version) {
|
|
106
|
+
throw new errors_1.KitStop(`Step "${step}" runs ${ref.id} ${ref.version}, which is not in this video’s parts list. Make the video once, then take the step out again.`, 'refused');
|
|
107
|
+
}
|
|
108
|
+
return { id: ref.id, version: ref.version };
|
|
109
|
+
}
|
|
110
|
+
/** Every file below `dir` by its path with `/`, refusing links. */
|
|
111
|
+
async function filesIn(dir) {
|
|
112
|
+
const found = new Map();
|
|
113
|
+
const walk = async (rel) => {
|
|
114
|
+
for (const entry of await fs_1.promises.readdir(path.join(dir, rel), { withFileTypes: true })) {
|
|
115
|
+
const child = rel ? `${rel}/${entry.name}` : entry.name;
|
|
116
|
+
if (entry.isDirectory())
|
|
117
|
+
await walk(child);
|
|
118
|
+
else if (entry.isFile())
|
|
119
|
+
found.set(child, await fs_1.promises.readFile(path.join(dir, ...child.split('/'))));
|
|
120
|
+
else
|
|
121
|
+
throw new errors_1.KitStop(`${path.join(dir, child)} is a link or a special file; a part’s copy may hold plain files only.`, 'refused');
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
await walk('');
|
|
125
|
+
return found;
|
|
126
|
+
}
|
|
127
|
+
async function copyFiles(files, dir, mode) {
|
|
128
|
+
for (const [file, bytes] of files) {
|
|
129
|
+
const target = path.join(dir, ...file.split('/'));
|
|
130
|
+
await fs_1.promises.mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
131
|
+
await fs_1.promises.writeFile(target, bytes, { mode, flag: 'wx' });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Whether the untouched copy holds exactly the locked files. */
|
|
135
|
+
async function originalIntact(dir, locked) {
|
|
136
|
+
const original = await filesIn(dir).catch(() => null);
|
|
137
|
+
if (!original || original.size !== Object.keys(locked).length)
|
|
138
|
+
return false;
|
|
139
|
+
return Object.entries(locked).every(([file, hash]) => original.has(file) && sha256(original.get(file)) === hash);
|
|
140
|
+
}
|
|
141
|
+
/** The longest start of `text` whose JSON string form fits in `maxBytes` of UTF-8, cut on a character edge. */
|
|
142
|
+
function fitDiff(text, maxBytes) {
|
|
143
|
+
const fits = (t) => Buffer.byteLength(JSON.stringify(t), 'utf8') <= maxBytes;
|
|
144
|
+
if (fits(text))
|
|
145
|
+
return text;
|
|
146
|
+
let lo = 0;
|
|
147
|
+
let hi = text.length;
|
|
148
|
+
while (lo < hi) {
|
|
149
|
+
const mid = Math.ceil((lo + hi) / 2);
|
|
150
|
+
if (fits(text.slice(0, mid)))
|
|
151
|
+
lo = mid;
|
|
152
|
+
else
|
|
153
|
+
hi = mid - 1;
|
|
154
|
+
}
|
|
155
|
+
let end = lo;
|
|
156
|
+
// Never end on the first half of a surrogate pair.
|
|
157
|
+
if (end > 0 && /[\uD800-\uDBFF]/.test(text[end - 1]))
|
|
158
|
+
end--;
|
|
159
|
+
return text.slice(0, end);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* `video step <id> <step> --edit`: the step's locked part, checked against the lock like any load,
|
|
163
|
+
* copied into <run>/patches/<step>/ to edit. A copy of the same part version is kept as it is.
|
|
164
|
+
*/
|
|
165
|
+
async function takeOutStep(input) {
|
|
166
|
+
const layout = (0, paths_1.runLayout)(input.home, input.videoId);
|
|
167
|
+
const folders = patchFolders(layout, input.step);
|
|
168
|
+
const lock = await (0, save_1.readJson)(layout.partsLock).catch(() => null);
|
|
169
|
+
if (!lock?.parts)
|
|
170
|
+
throw new errors_1.KitStop('This video has not been made on this computer yet. Run video make for it first, then take the step out.', 'refused');
|
|
171
|
+
const part = await stepPart(layout, lock, input.step);
|
|
172
|
+
const locked = lock.parts[part.id].files;
|
|
173
|
+
const record = await (0, save_1.readJson)(folders.record).catch(() => null);
|
|
174
|
+
const same = record?.part.id === part.id && record.part.version === part.version && (0, canonical_1.canonicalHash)(record.files) === (0, canonical_1.canonicalHash)(locked);
|
|
175
|
+
const lockedFiles = async () => {
|
|
176
|
+
const loaded = await input.loader.load({ ref: part, lock, dev: false, home: input.home, env: input.env, signal: new AbortController().signal });
|
|
177
|
+
const files = new Map();
|
|
178
|
+
for (const file of Object.keys(locked)) {
|
|
179
|
+
const bytes = await fs_1.promises.readFile(path.join(loaded.dir, ...file.split('/')));
|
|
180
|
+
if (sha256(bytes) !== locked[file])
|
|
181
|
+
throw new errors_1.KitStop(`${part.id} ${part.version} changed on this computer while it was copied. Run the same command again.`, 'stop');
|
|
182
|
+
files.set(file, bytes);
|
|
183
|
+
}
|
|
184
|
+
return files;
|
|
185
|
+
};
|
|
186
|
+
if (same && (await fs_1.promises.stat(folders.code).catch(() => null))) {
|
|
187
|
+
// The edits stay; a damaged untouched copy is made again from the locked part, so the edit can be read.
|
|
188
|
+
if (!(await originalIntact(folders.original, locked))) {
|
|
189
|
+
await fs_1.promises.rm(folders.original, { recursive: true, force: true });
|
|
190
|
+
await copyFiles(await lockedFiles(), folders.original, 0o444);
|
|
191
|
+
}
|
|
192
|
+
return { dir: folders.code, part, kept: true, movedAside: null };
|
|
193
|
+
}
|
|
194
|
+
let movedAside = null;
|
|
195
|
+
if (await fs_1.promises.lstat(folders.code).catch(() => null)) {
|
|
196
|
+
// An edit of another version is never deleted: it moves aside for the agent to compare.
|
|
197
|
+
movedAside = `${folders.code}.replaced-${(input.now?.() ?? new Date()).toISOString().replace(/[-:.]/g, '')}`;
|
|
198
|
+
await fs_1.promises.rename(folders.code, movedAside);
|
|
199
|
+
}
|
|
200
|
+
await fs_1.promises.rm(folders.original, { recursive: true, force: true });
|
|
201
|
+
await fs_1.promises.rm(folders.record, { force: true });
|
|
202
|
+
const files = await lockedFiles();
|
|
203
|
+
await copyFiles(files, folders.original, 0o444);
|
|
204
|
+
await copyFiles(files, folders.code, 0o600);
|
|
205
|
+
await (0, save_1.writeJson)(folders.record, { take_out: 1, step: input.step, part, files: locked, taken_at: (input.now?.() ?? new Date()).toISOString() });
|
|
206
|
+
return { dir: folders.code, part, kept: false, movedAside };
|
|
207
|
+
}
|
|
208
|
+
/** The edit of each named step, read from its folder and checked against its untouched copy. */
|
|
209
|
+
async function readPatch(layout, steps) {
|
|
210
|
+
const unique = [...new Set(steps)];
|
|
211
|
+
if (!unique.length)
|
|
212
|
+
throw new errors_1.KitStop('Name the steps to make the video with, e.g. --patched cut.', 'refused');
|
|
213
|
+
if (unique.length > exports.MAX_PATCHED_STEPS)
|
|
214
|
+
throw new errors_1.KitStop(`A video can be made with at most ${exports.MAX_PATCHED_STEPS} edited steps.`, 'refused');
|
|
215
|
+
const read = [];
|
|
216
|
+
for (const step of unique) {
|
|
217
|
+
const folders = patchFolders(layout, step);
|
|
218
|
+
const record = await (0, save_1.readJson)(folders.record).catch(() => null);
|
|
219
|
+
if (!record || record.step !== step || !record.files) {
|
|
220
|
+
throw new errors_1.KitStop(`Step "${step}" has not been taken out. Run video step ${path.basename(layout.root)} ${step} --edit first.`, 'refused');
|
|
221
|
+
}
|
|
222
|
+
const original = await filesIn(folders.original).catch((error) => {
|
|
223
|
+
if (error instanceof errors_1.KitStop)
|
|
224
|
+
throw error;
|
|
225
|
+
return new Map();
|
|
226
|
+
});
|
|
227
|
+
const code = await filesIn(folders.code).catch((error) => {
|
|
228
|
+
if (error instanceof errors_1.KitStop)
|
|
229
|
+
throw error;
|
|
230
|
+
throw new errors_1.KitStop(`The copy of step "${step}" is missing. Take it out again with video step --edit.`, 'refused');
|
|
231
|
+
});
|
|
232
|
+
const locked = Object.keys(record.files);
|
|
233
|
+
if (original.size !== locked.length || locked.some((file) => !original.has(file) || sha256(original.get(file)) !== record.files[file])) {
|
|
234
|
+
throw new errors_1.KitStop(`The untouched copy of step "${step}" changed. Take it out again with video step --edit.`, 'refused');
|
|
235
|
+
}
|
|
236
|
+
const extra = [...code.keys()].filter((file) => !(file in record.files));
|
|
237
|
+
if (extra.length)
|
|
238
|
+
throw new errors_1.KitStop(`Step "${step}" may only change the part’s own files; remove ${extra.join(', ')}.`, 'refused');
|
|
239
|
+
const missing = locked.filter((file) => !code.has(file));
|
|
240
|
+
if (missing.length)
|
|
241
|
+
throw new errors_1.KitStop(`Step "${step}" is missing ${missing.join(', ')}; put the files back.`, 'refused');
|
|
242
|
+
const files = [];
|
|
243
|
+
const diffs = [];
|
|
244
|
+
for (const file of locked.sort()) {
|
|
245
|
+
const patched = sha256(code.get(file));
|
|
246
|
+
if (patched === record.files[file])
|
|
247
|
+
continue;
|
|
248
|
+
// part.json holds the models and limits the customer's price was made from.
|
|
249
|
+
if (file === 'part.json')
|
|
250
|
+
throw new errors_1.KitStop(`Step "${step}" changed part.json, which can’t change; edit the code only.`, 'refused');
|
|
251
|
+
if (!PATCH_FILE_PATH.test(file))
|
|
252
|
+
throw new errors_1.KitStop(`Step "${step}" changed ${file}, a file the line takes no edit of (its path is too long or starts with "." or "-"); edit the code in another file.`, 'refused');
|
|
253
|
+
files.push({ path: file, original_sha256: record.files[file], patched_sha256: patched });
|
|
254
|
+
diffs.push((0, diff_1.unifiedDiff)(file, original.get(file), code.get(file)));
|
|
255
|
+
}
|
|
256
|
+
if (!files.length)
|
|
257
|
+
throw new errors_1.KitStop(`Nothing changed in step "${step}".`, 'refused');
|
|
258
|
+
if (files.length > exports.MAX_PATCHED_FILES)
|
|
259
|
+
throw new errors_1.KitStop(`Step "${step}" changed ${files.length} files; an edit may change at most ${exports.MAX_PATCHED_FILES}.`, 'refused');
|
|
260
|
+
read.push({ step, part: record.part, files, fullDiff: diffs.join('') });
|
|
261
|
+
}
|
|
262
|
+
// Each step's diff is cut to its share, so every edit is on the record.
|
|
263
|
+
const share = Math.floor(exports.MAX_PATCH_DIFF_CHARS / read.length);
|
|
264
|
+
// The share is in bytes as the request carries them (UTF-8, JSON-escaped), which the server's body limit counts.
|
|
265
|
+
const out = read.map(({ fullDiff, ...step }) => {
|
|
266
|
+
const diff = fitDiff(fullDiff, share);
|
|
267
|
+
return { ...step, diff, diff_sha256: sha256(Buffer.from(fullDiff, 'utf8')), diff_truncated: diff.length < fullDiff.length };
|
|
268
|
+
});
|
|
269
|
+
return { patch: 1, sha256: patchSha256(out), steps: out };
|
|
270
|
+
}
|
|
271
|
+
/** Why the lock this hand-over gave can't take the edit (the server checks the same), or null. */
|
|
272
|
+
function patchLockProblem(patch, lock) {
|
|
273
|
+
for (const step of patch.steps) {
|
|
274
|
+
const locked = lock.parts[step.part.id];
|
|
275
|
+
if (!locked || locked.version !== step.part.version)
|
|
276
|
+
return `Step "${step.step}" now runs another version of its part. Take it out again with video step --edit and redo the edit.`;
|
|
277
|
+
if (step.files.some((file) => locked.files[file.path] !== file.original_sha256))
|
|
278
|
+
return `Step "${step.step}" was taken out from other files than this video now uses. Take it out again with video step --edit and redo the edit.`;
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
/** Every file hash the edited copy of a step must have: the lock's, with the edited files' new hashes. */
|
|
283
|
+
function patchedFiles(step, lock) {
|
|
284
|
+
const files = { ...lock.parts[step.part.id].files };
|
|
285
|
+
for (const file of step.files)
|
|
286
|
+
files[file.path] = file.patched_sha256;
|
|
287
|
+
return files;
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/kit/core/patch.ts"],"names":[],"mappings":"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"}
|
package/dist/kit/core/paths.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export declare function kitDir(home: string): string;
|
|
|
3
3
|
export declare function devicePath(home: string): string;
|
|
4
4
|
export declare function partsCacheDir(home: string): string;
|
|
5
5
|
export declare function kitBinDir(home: string): string;
|
|
6
|
+
/** Detached makes take turns on this lock, so a batch is made one video after another, as in the foreground. */
|
|
7
|
+
export declare function detachedTurnLock(home: string): string;
|
|
6
8
|
/** Every path inside one video's run folder. */
|
|
7
9
|
export interface RunLayout {
|
|
8
10
|
root: string;
|
|
@@ -19,9 +21,24 @@ export interface RunLayout {
|
|
|
19
21
|
upload: string;
|
|
20
22
|
/** A failure report the line never took, sent again by the next run. */
|
|
21
23
|
pendingReport: string;
|
|
24
|
+
/** One line per run: when it started and which file under runs/ holds its log. */
|
|
22
25
|
log: string;
|
|
26
|
+
/** Each run's own log, named by runName. */
|
|
27
|
+
runs: string;
|
|
28
|
+
/** How the last `video make` of this video ended: its outcome, exit code and words. */
|
|
29
|
+
result: string;
|
|
30
|
+
/** The `video make --detach` process making this video, while it lives. */
|
|
31
|
+
detached: string;
|
|
32
|
+
/** What detached runs printed (with --json), one event per line. */
|
|
33
|
+
output: string;
|
|
34
|
+
/** The card's rows as the run last showed them, for `video status`. */
|
|
35
|
+
progress: string;
|
|
36
|
+
/** Steps' parts taken out to edit, one folder per step. */
|
|
37
|
+
patches: string;
|
|
23
38
|
}
|
|
24
39
|
export declare function runLayout(home: string, videoId: string): RunLayout;
|
|
40
|
+
/** A run's name: when it started (UTC, safe in a file name) and its quote, e.g. "20261013T192657.123Z-q_1". */
|
|
41
|
+
export declare function runName(started: Date, quoteId: string): string;
|
|
25
42
|
/** A timeline step's folder, or a layer's ("layer-<slot>" lives under layers/<slot>). */
|
|
26
43
|
export declare function stepFolder(layout: RunLayout, stepId: string): string;
|
|
27
44
|
/** True when `child` is `parent` or inside it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/kit/core/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/kit/core/paths.ts"],"names":[],"mappings":"AAiBA,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIpE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,gHAAgH;AAChH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAyBlE;AAED,+GAA+G;AAC/G,wBAAgB,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG/D"}
|
package/dist/kit/core/paths.js
CHANGED
|
@@ -38,7 +38,9 @@ exports.kitDir = kitDir;
|
|
|
38
38
|
exports.devicePath = devicePath;
|
|
39
39
|
exports.partsCacheDir = partsCacheDir;
|
|
40
40
|
exports.kitBinDir = kitBinDir;
|
|
41
|
+
exports.detachedTurnLock = detachedTurnLock;
|
|
41
42
|
exports.runLayout = runLayout;
|
|
43
|
+
exports.runName = runName;
|
|
42
44
|
exports.stepFolder = stepFolder;
|
|
43
45
|
exports.isInside = isInside;
|
|
44
46
|
// The kit's save folder layout (part-interface.md section 8).
|
|
@@ -47,6 +49,9 @@ exports.isInside = isInside;
|
|
|
47
49
|
// ~/.gooseworks/kit/parts/<id>/<ver>/ part cache, hash-checked on every load
|
|
48
50
|
// ~/.gooseworks/kit/bin/ the kit's own ffmpeg and ffprobe
|
|
49
51
|
// ~/.gooseworks/videos/<video_id>/ one run folder per video
|
|
52
|
+
// ~/.gooseworks/videos/<video_id>/runs/ one log per run of `video make`
|
|
53
|
+
// ~/.gooseworks/kit/detached.lock one detached make at a time on this computer
|
|
54
|
+
// ~/.gooseworks/videos/<video_id>/patches/<step>/ a step's part taken out to edit (`video step --edit`)
|
|
50
55
|
//
|
|
51
56
|
// GOOSE_KIT_HOME replaces ~/.gooseworks.
|
|
52
57
|
const os = __importStar(require("os"));
|
|
@@ -71,6 +76,10 @@ function partsCacheDir(home) {
|
|
|
71
76
|
function kitBinDir(home) {
|
|
72
77
|
return path.join(kitDir(home), 'bin');
|
|
73
78
|
}
|
|
79
|
+
/** Detached makes take turns on this lock, so a batch is made one video after another, as in the foreground. */
|
|
80
|
+
function detachedTurnLock(home) {
|
|
81
|
+
return path.join(kitDir(home), 'detached.lock');
|
|
82
|
+
}
|
|
74
83
|
function runLayout(home, videoId) {
|
|
75
84
|
if (!SAFE_ID.test(videoId))
|
|
76
85
|
throw new Error('That video id is not valid.');
|
|
@@ -90,8 +99,20 @@ function runLayout(home, videoId) {
|
|
|
90
99
|
upload: path.join(root, 'upload.json'),
|
|
91
100
|
pendingReport: path.join(root, 'pending-report.json'),
|
|
92
101
|
log: path.join(root, 'log.ndjson'),
|
|
102
|
+
runs: path.join(root, 'runs'),
|
|
103
|
+
result: path.join(root, 'last-result.json'),
|
|
104
|
+
detached: path.join(root, 'detached.json'),
|
|
105
|
+
output: path.join(root, 'output.ndjson'),
|
|
106
|
+
progress: path.join(root, 'progress.json'),
|
|
107
|
+
patches: path.join(root, 'patches'),
|
|
93
108
|
};
|
|
94
109
|
}
|
|
110
|
+
/** A run's name: when it started (UTC, safe in a file name) and its quote, e.g. "20261013T192657.123Z-q_1". */
|
|
111
|
+
function runName(started, quoteId) {
|
|
112
|
+
const at = started.toISOString().replace(/[-:]/g, '');
|
|
113
|
+
const quote = quoteId.replace(/[^A-Za-z0-9_-]/g, '').slice(0, 8) || 'quote';
|
|
114
|
+
return `${at}-${quote}`;
|
|
115
|
+
}
|
|
95
116
|
/** A timeline step's folder, or a layer's ("layer-<slot>" lives under layers/<slot>). */
|
|
96
117
|
function stepFolder(layout, stepId) {
|
|
97
118
|
return stepId.startsWith('layer-') ? path.join(layout.layers, stepId.slice('layer-'.length)) : path.join(layout.steps, stepId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/kit/core/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/kit/core/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,25 +8,31 @@ export declare class PieceFailure extends PartError {
|
|
|
8
8
|
readonly line: LineErrorBody;
|
|
9
9
|
readonly attempt: number;
|
|
10
10
|
constructor(code: 'provider_rejected' | 'provider_failed', line: LineErrorBody, attempt?: number);
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* A charged provider failure whose piece has used both its attempts: no later run may order it
|
|
13
|
+
* again. A failure the line says was free never spends the piece; the next run tries it anew.
|
|
14
|
+
*/
|
|
12
15
|
get spent(): boolean;
|
|
13
16
|
}
|
|
14
17
|
/** A piece the maker failed twice: the journal never lets a later run order it again. */
|
|
15
|
-
export declare const FAILED_TWICE = "One part of this video failed at its maker twice, so the video stopped there.
|
|
18
|
+
export declare const FAILED_TWICE = "One part of this video failed at its maker twice, so the video stopped there. Ask for a fix to make it again.";
|
|
16
19
|
/**
|
|
17
20
|
* Every key this video sent for one piece, and how it ended, saved before the
|
|
18
21
|
* call goes out. A key whose piece is running or done is asked again, never
|
|
19
22
|
* replaced, so a finished paid piece is never ordered under a new key; only a
|
|
20
|
-
* provider failure earns
|
|
23
|
+
* provider failure earns a new attempt. A charged failure earns one in all;
|
|
24
|
+
* a free one earns one again on every run, up to NEW_ATTEMPTS_PER_RUN.
|
|
21
25
|
*/
|
|
22
26
|
interface OrderState {
|
|
23
27
|
inputs_hash: string;
|
|
24
28
|
piece_key: string;
|
|
29
|
+
/** `run` names the run that made the key (keys from kits before it have none). */
|
|
25
30
|
attempts: Array<{
|
|
26
31
|
attempt: number;
|
|
27
32
|
key: string;
|
|
28
33
|
outcome: 'sent' | 'done' | 'failed';
|
|
29
34
|
failure?: LineErrorBody;
|
|
35
|
+
run?: string;
|
|
30
36
|
}>;
|
|
31
37
|
}
|
|
32
38
|
interface CachedPiece {
|
|
@@ -60,6 +66,8 @@ export interface PieceLine {
|
|
|
60
66
|
part: PartRef;
|
|
61
67
|
/** The models this part may order: the lock's entry (or the manifest's, for dev parts). */
|
|
62
68
|
models: ModelNeed[];
|
|
69
|
+
/** This run's name in the order journal: a free failure's new attempts are counted per run. */
|
|
70
|
+
runId: string;
|
|
63
71
|
workDir: string;
|
|
64
72
|
runRoot: string;
|
|
65
73
|
cache: PieceCache;
|
|
@@ -76,12 +84,16 @@ export interface PieceLine {
|
|
|
76
84
|
piece_key: string;
|
|
77
85
|
inputs_hash: string;
|
|
78
86
|
idempotency_key: string;
|
|
79
|
-
attempt:
|
|
87
|
+
attempt: number;
|
|
80
88
|
reused: boolean;
|
|
81
89
|
credits?: number;
|
|
82
90
|
}) => Promise<void>;
|
|
83
91
|
/** Called while a piece is still running at the provider. */
|
|
84
92
|
onWait: () => void;
|
|
93
|
+
/** The pieces this step is waiting on at the line right now, by inputs hash: left in place when the step is cut short. */
|
|
94
|
+
waiting?: Set<string>;
|
|
95
|
+
/** Pieces the customer had remade as they were (the plan's takes), by piece key: each is ordered under its take. */
|
|
96
|
+
takes?: Record<string, number>;
|
|
85
97
|
}
|
|
86
98
|
/** ctx.line.order for one step run. */
|
|
87
99
|
export declare function pieceOrderer(ctx: PieceLine): (order: PieceOrder) => Promise<PieceResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pieces.d.ts","sourceRoot":"","sources":["../../../src/kit/core/pieces.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,SAAS,EAAE,SAAS,EAAE,OAAO,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClI,OAAO,EAAa,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAqC,KAAK,aAAa,EAAuC,MAAM,eAAe,CAAC;AAE3H,OAAO,
|
|
1
|
+
{"version":3,"file":"pieces.d.ts","sourceRoot":"","sources":["../../../src/kit/core/pieces.ts"],"names":[],"mappings":"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"}
|