@farmslot/recipe-harness 0.7.0 → 0.9.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.
- package/CHANGELOG.md +17 -0
- package/README.md +83 -182
- package/dist/adapters/app-lifecycle.d.ts.map +1 -1
- package/dist/adapters/app-lifecycle.js +5 -0
- package/dist/adapters/app-lifecycle.js.map +1 -1
- package/dist/adapters/core.d.ts.map +1 -1
- package/dist/adapters/core.js +25 -46
- package/dist/adapters/core.js.map +1 -1
- package/dist/adapters/ui.d.ts +0 -2
- package/dist/adapters/ui.d.ts.map +1 -1
- package/dist/adapters/ui.js +5 -2
- package/dist/adapters/ui.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/run-command.d.ts.map +1 -1
- package/dist/cli/run-command.js +197 -32
- package/dist/cli/run-command.js.map +1 -1
- package/dist/cli/support.d.ts +5 -2
- package/dist/cli/support.d.ts.map +1 -1
- package/dist/cli/support.js +131 -25
- package/dist/cli/support.js.map +1 -1
- package/dist/cli/validate-command.d.ts.map +1 -1
- package/dist/cli/validate-command.js +4 -1
- package/dist/cli/validate-command.js.map +1 -1
- package/dist/core/compose.d.ts +21 -31
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/compose.js +93 -125
- package/dist/core/compose.js.map +1 -1
- package/dist/core/execution.d.ts +40 -0
- package/dist/core/execution.d.ts.map +1 -0
- package/dist/core/execution.js +263 -0
- package/dist/core/execution.js.map +1 -0
- package/dist/core/graph.d.ts +4 -5
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +51 -103
- package/dist/core/graph.js.map +1 -1
- package/dist/core/hud.d.ts.map +1 -1
- package/dist/core/hud.js +2 -6
- package/dist/core/hud.js.map +1 -1
- package/dist/core/library.d.ts +17 -51
- package/dist/core/library.d.ts.map +1 -1
- package/dist/core/library.js +144 -155
- package/dist/core/library.js.map +1 -1
- package/dist/core/parameters.d.ts +5 -0
- package/dist/core/parameters.d.ts.map +1 -0
- package/dist/core/parameters.js +57 -0
- package/dist/core/parameters.js.map +1 -0
- package/dist/core/passive-observations.d.ts +2 -5
- package/dist/core/passive-observations.d.ts.map +1 -1
- package/dist/core/passive-observations.js +6 -40
- package/dist/core/passive-observations.js.map +1 -1
- package/dist/core/path.d.ts +6 -0
- package/dist/core/path.d.ts.map +1 -0
- package/dist/core/path.js +126 -0
- package/dist/core/path.js.map +1 -0
- package/dist/core/recording-cleanup.d.ts +1 -0
- package/dist/core/recording-cleanup.d.ts.map +1 -1
- package/dist/core/recording-cleanup.js +8 -0
- package/dist/core/recording-cleanup.js.map +1 -1
- package/dist/core/resolution-error.d.ts +7 -0
- package/dist/core/resolution-error.d.ts.map +1 -0
- package/dist/core/resolution-error.js +9 -0
- package/dist/core/resolution-error.js.map +1 -0
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +178 -373
- package/dist/core/runner.js.map +1 -1
- package/dist/core/trace.d.ts +3 -4
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js +3 -4
- package/dist/core/trace.js.map +1 -1
- package/dist/core/trust-error.d.ts +9 -0
- package/dist/core/trust-error.d.ts.map +1 -0
- package/dist/core/trust-error.js +18 -0
- package/dist/core/trust-error.js.map +1 -0
- package/dist/core/trust-input.d.ts +20 -0
- package/dist/core/trust-input.d.ts.map +1 -0
- package/dist/core/trust-input.js +68 -0
- package/dist/core/trust-input.js.map +1 -0
- package/dist/core/trust.d.ts +20 -0
- package/dist/core/trust.d.ts.map +1 -0
- package/dist/core/trust.js +231 -0
- package/dist/core/trust.js.map +1 -0
- package/dist/core/types.d.ts +41 -47
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/node/writers.d.ts +3 -8
- package/dist/node/writers.d.ts.map +1 -1
- package/dist/node/writers.js +27 -26
- package/dist/node/writers.js.map +1 -1
- package/dist/recording/cdp-video-recorder.js +2 -3
- package/dist/recording/cdp-video-recorder.js.map +1 -1
- package/dist/runtime/cdp.d.ts.map +1 -1
- package/dist/runtime/cdp.js +3 -7
- package/dist/runtime/cdp.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/flows-command.d.ts +0 -3
- package/dist/cli/flows-command.d.ts.map +0 -1
- package/dist/cli/flows-command.js +0 -313
- package/dist/cli/flows-command.js.map +0 -1
- package/dist/core/flows.d.ts +0 -45
- package/dist/core/flows.d.ts.map +0 -1
- package/dist/core/flows.js +0 -359
- package/dist/core/flows.js.map +0 -1
- package/dist/core/predicates.d.ts +0 -7
- package/dist/core/predicates.d.ts.map +0 -1
- package/dist/core/predicates.js +0 -102
- package/dist/core/predicates.js.map +0 -1
- package/dist/core/promote.d.ts +0 -41
- package/dist/core/promote.d.ts.map +0 -1
- package/dist/core/promote.js +0 -249
- package/dist/core/promote.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passive-observations.d.ts","sourceRoot":"","sources":["../../src/core/passive-observations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"passive-observations.d.ts","sourceRoot":"","sources":["../../src/core/passive-observations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGtF,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC;AAEhF,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,4BAA4B,GACrC,mBAAmB,CAUrB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,mBAAmB,GACvC,aAAa,EAAE,CAEjB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAC7C,IAAI,EAAE,SAAS,aAAa,EAAE,GAC7B,uBAAuB,CAAC,UAAU,CAAC,GAAG,SAAS,CAKjD;AAED,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,iBAAiB,EACjB,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;CACvC,GAAG;IACF,YAAY,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IACtD,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;CACjD,CAWA;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,uBAAuB,CAAC,cAAc,CAAC,EACrD,IAAI,EAAE,SAAS,aAAa,EAAE,GAC7B,uBAAuB,CAAC,cAAc,CAAC,GAAG,SAAS,CAOrD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,uBAAuB,CAAC,cAAc,CAAC,EAC9C,MAAM,EAAE,uBAAuB,CAAC,cAAc,CAAC,GAC9C,uBAAuB,CAAC,cAAc,CAAC,GAAG,SAAS,CAGrD;AAED,wBAAsB,mBAAmB,CAAC,EACxC,MAAM,EACN,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,IAAI,GACL,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;CAChC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAoBnC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { verifyExecutableSource } from './trust.js';
|
|
1
2
|
export function defaultObserverRefsFromManifest(manifest) {
|
|
2
3
|
const refsByAction = new Map();
|
|
3
4
|
for (const observer of manifest.observers ?? []) {
|
|
@@ -9,20 +10,7 @@ export function defaultObserverRefsFromManifest(manifest) {
|
|
|
9
10
|
}
|
|
10
11
|
return refsByAction;
|
|
11
12
|
}
|
|
12
|
-
export function
|
|
13
|
-
return (manifest.observers ?? []).map((observer) => observer.ref);
|
|
14
|
-
}
|
|
15
|
-
export function resolveObserveRefs(action, node, defaultObserverRefs, declaredObserverRefs) {
|
|
16
|
-
const policy = node.observe;
|
|
17
|
-
if (policy === false)
|
|
18
|
-
return [];
|
|
19
|
-
if (Array.isArray(policy)) {
|
|
20
|
-
return [
|
|
21
|
-
...new Set(policy.filter((ref) => typeof ref === 'string' && ref.trim() !== '')),
|
|
22
|
-
];
|
|
23
|
-
}
|
|
24
|
-
if (policy === true)
|
|
25
|
-
return [...declaredObserverRefs];
|
|
13
|
+
export function resolveObserveRefs(action, defaultObserverRefs) {
|
|
26
14
|
return [...(defaultObserverRefs.get(action) ?? [])];
|
|
27
15
|
}
|
|
28
16
|
export function filterObservationWarnings(warnings, refs) {
|
|
@@ -32,32 +20,9 @@ export function filterObservationWarnings(warnings, refs) {
|
|
|
32
20
|
const filtered = warnings.filter((warning) => allowed.has(warning.ref));
|
|
33
21
|
return filtered.length ? filtered : undefined;
|
|
34
22
|
}
|
|
35
|
-
function
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const expected = [...new Set(node.expect_observations.filter((ref) => typeof ref === 'string'))];
|
|
39
|
-
const actual = Object.keys(observations ?? {}).sort();
|
|
40
|
-
expected.sort();
|
|
41
|
-
if (warnings?.length) {
|
|
42
|
-
throw new Error(`Node ${nodeId} expected clean observations but observers warned: ${warnings.map((warning) => `${warning.ref}: ${warning.message}`).join('; ')}.`);
|
|
43
|
-
}
|
|
44
|
-
if (expected.length !== actual.length || expected.some((ref, index) => ref !== actual[index])) {
|
|
45
|
-
throw new Error(`Node ${nodeId} expected observations ${JSON.stringify(expected)}, received ${JSON.stringify(actual)}.`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export function finalizeNodeObservations({ nodeId, node, result, observationResult, observeRefs, }) {
|
|
49
|
-
const observationSucceeded = result.status == null || result.status === 'pass';
|
|
50
|
-
const observations = !observationSucceeded
|
|
51
|
-
? undefined
|
|
52
|
-
: filterObservations(mergeObservations(result.observations, observationResult.observations), observeRefs);
|
|
53
|
-
const observationWarnings = !observationSucceeded
|
|
54
|
-
? []
|
|
55
|
-
: (filterObservationWarnings([...(result.observationWarnings ?? []), ...(observationResult.warnings ?? [])], observeRefs) ?? []);
|
|
56
|
-
// Failed actions already fail the run with their own status/output; enforcing
|
|
57
|
-
// observation expectations on them would replace that signal with a misleading error.
|
|
58
|
-
if (observationSucceeded) {
|
|
59
|
-
assertExpectedObservations(nodeId, node, observations, observationWarnings);
|
|
60
|
-
}
|
|
23
|
+
export function finalizeNodeObservations({ result, observationResult, observeRefs, }) {
|
|
24
|
+
const observations = filterObservations(mergeObservations(result.observations, observationResult.observations), observeRefs);
|
|
25
|
+
const observationWarnings = filterObservationWarnings([...(result.observationWarnings ?? []), ...(observationResult.warnings ?? [])], observeRefs) ?? [];
|
|
61
26
|
return { observations, observationWarnings };
|
|
62
27
|
}
|
|
63
28
|
export function filterObservations(observations, refs) {
|
|
@@ -83,6 +48,7 @@ export async function runPassiveObservers({ action, node, adapter, context, logg
|
|
|
83
48
|
};
|
|
84
49
|
}
|
|
85
50
|
try {
|
|
51
|
+
await verifyExecutableSource(adapter, `Observer ${action}`);
|
|
86
52
|
return await adapter.observe(refs, node, context);
|
|
87
53
|
}
|
|
88
54
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passive-observations.js","sourceRoot":"","sources":["../../src/core/passive-observations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"passive-observations.js","sourceRoot":"","sources":["../../src/core/passive-observations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isPathWithin(root: string, candidate: string): boolean;
|
|
2
|
+
export declare function readFileWithinRoot(root: string, relativePath: string): Promise<Buffer>;
|
|
3
|
+
export declare function statFileWithinRoot(root: string, relativePath: string): Promise<import("fs").Stats>;
|
|
4
|
+
export declare function writeFileWithinRoot(root: string, relativePath: string, data: string | Uint8Array): Promise<string>;
|
|
5
|
+
export declare function copyFileWithinRoots(sourceRoot: string, sourceRelativePath: string, destinationRoot: string, destinationRelativePath: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"AAOA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAMrE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5F;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,+BAO1E;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GAAG,UAAU,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,MAAM,EACvB,uBAAuB,EAAE,MAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CAcjB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { lstat, mkdir, open, realpath } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { pipeline } from 'node:stream/promises';
|
|
5
|
+
import { normalizeRelativePath } from './json.js';
|
|
6
|
+
export function isPathWithin(root, candidate) {
|
|
7
|
+
const relative = path.relative(root, candidate);
|
|
8
|
+
return (relative === '' ||
|
|
9
|
+
(!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative)));
|
|
10
|
+
}
|
|
11
|
+
export async function readFileWithinRoot(root, relativePath) {
|
|
12
|
+
const handle = await openExistingFileWithinRoot(root, relativePath);
|
|
13
|
+
try {
|
|
14
|
+
return await handle.readFile();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
await handle.close();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function statFileWithinRoot(root, relativePath) {
|
|
21
|
+
const handle = await openExistingFileWithinRoot(root, relativePath);
|
|
22
|
+
try {
|
|
23
|
+
return await handle.stat();
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
await handle.close();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function writeFileWithinRoot(root, relativePath, data) {
|
|
30
|
+
const { handle, path: outputPath } = await openOutputFileWithinRoot(root, relativePath);
|
|
31
|
+
try {
|
|
32
|
+
await handle.writeFile(data);
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
await handle.close();
|
|
36
|
+
}
|
|
37
|
+
return outputPath;
|
|
38
|
+
}
|
|
39
|
+
export async function copyFileWithinRoots(sourceRoot, sourceRelativePath, destinationRoot, destinationRelativePath) {
|
|
40
|
+
let source;
|
|
41
|
+
let destination;
|
|
42
|
+
try {
|
|
43
|
+
source = await openExistingFileWithinRoot(sourceRoot, sourceRelativePath);
|
|
44
|
+
destination = await openOutputFileWithinRoot(destinationRoot, destinationRelativePath);
|
|
45
|
+
await pipeline(source.createReadStream(), destination.handle.createWriteStream());
|
|
46
|
+
return destination.path;
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
await Promise.allSettled([
|
|
50
|
+
...(source ? [source.close()] : []),
|
|
51
|
+
...(destination ? [destination.handle.close()] : []),
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function openExistingFileWithinRoot(root, relativePath) {
|
|
56
|
+
const rootReal = await realpath(root);
|
|
57
|
+
const candidateReal = await realpath(path.join(root, normalizeRelativePath(relativePath)));
|
|
58
|
+
assertContained(rootReal, candidateReal, relativePath);
|
|
59
|
+
return open(candidateReal, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
60
|
+
}
|
|
61
|
+
async function openOutputFileWithinRoot(root, relativePath) {
|
|
62
|
+
const normalized = normalizeRelativePath(relativePath);
|
|
63
|
+
const rootReal = await realpath(root);
|
|
64
|
+
const parentReal = await ensureContainedDirectory(rootReal, path.dirname(normalized), relativePath);
|
|
65
|
+
const outputPath = path.join(parentReal, path.basename(normalized));
|
|
66
|
+
// A hostile same-user process can still swap an already-checked parent; closing
|
|
67
|
+
// that race requires directory-fd/openat isolation beyond this accidental-use guard.
|
|
68
|
+
try {
|
|
69
|
+
const existing = await lstat(outputPath);
|
|
70
|
+
if (existing.isSymbolicLink()) {
|
|
71
|
+
throw new Error(`Path ${relativePath} must not resolve through a symbolic link.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (!isMissing(error))
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
path: outputPath,
|
|
80
|
+
handle: await open(outputPath, constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_NOFOLLOW, 0o600),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async function ensureContainedDirectory(rootReal, relativeDirectory, displayPath) {
|
|
84
|
+
let current = rootReal;
|
|
85
|
+
const components = relativeDirectory === '.' ? [] : relativeDirectory.split(path.sep);
|
|
86
|
+
for (const component of components) {
|
|
87
|
+
const candidate = path.join(current, component);
|
|
88
|
+
try {
|
|
89
|
+
const info = await lstat(candidate);
|
|
90
|
+
if (!info.isDirectory() && !info.isSymbolicLink()) {
|
|
91
|
+
throw new Error(`Path ${displayPath} has a non-directory parent component.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (!isMissing(error))
|
|
96
|
+
throw error;
|
|
97
|
+
try {
|
|
98
|
+
await mkdir(candidate, { mode: 0o700 });
|
|
99
|
+
}
|
|
100
|
+
catch (mkdirError) {
|
|
101
|
+
if (!isAlreadyExists(mkdirError))
|
|
102
|
+
throw mkdirError;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const resolved = await realpath(candidate);
|
|
106
|
+
assertContained(rootReal, resolved, displayPath);
|
|
107
|
+
const resolvedInfo = await lstat(resolved);
|
|
108
|
+
if (!resolvedInfo.isDirectory()) {
|
|
109
|
+
throw new Error(`Path ${displayPath} has a non-directory parent component.`);
|
|
110
|
+
}
|
|
111
|
+
current = resolved;
|
|
112
|
+
}
|
|
113
|
+
return current;
|
|
114
|
+
}
|
|
115
|
+
function assertContained(root, candidate, relativePath) {
|
|
116
|
+
if (!isPathWithin(root, candidate)) {
|
|
117
|
+
throw new Error(`Path ${relativePath} resolves outside its root.`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function isMissing(error) {
|
|
121
|
+
return Boolean(error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT');
|
|
122
|
+
}
|
|
123
|
+
function isAlreadyExists(error) {
|
|
124
|
+
return Boolean(error && typeof error === 'object' && 'code' in error && error.code === 'EEXIST');
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/core/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { ActiveVideoRecording, RecipeLogger } from './types.js';
|
|
|
2
2
|
interface AbortedRunVideoRecording {
|
|
3
3
|
recording: ActiveVideoRecording;
|
|
4
4
|
outputPath: string;
|
|
5
|
+
stagingRoot?: string;
|
|
5
6
|
}
|
|
6
7
|
export declare function cleanupAbortedRunVideoRecording(runRecording: AbortedRunVideoRecording, logger: RecipeLogger): Promise<void>;
|
|
7
8
|
export declare function removePartialRunVideoOutput(outputPath: string, logger: RecipeLogger): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-cleanup.d.ts","sourceRoot":"","sources":["../../src/core/recording-cleanup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,UAAU,wBAAwB;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"recording-cleanup.d.ts","sourceRoot":"","sources":["../../src/core/recording-cleanup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,UAAU,wBAAwB;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,wBAAwB,EACtC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -11,6 +11,14 @@ export async function cleanupAbortedRunVideoRecording(runRecording, logger) {
|
|
|
11
11
|
logger.error(`record.video cleanup failed after run abort: ${cleanupErrorMessage(error)}`);
|
|
12
12
|
}
|
|
13
13
|
await removePartialRunVideoOutput(runRecording.outputPath, logger);
|
|
14
|
+
if (runRecording.stagingRoot) {
|
|
15
|
+
try {
|
|
16
|
+
await rm(runRecording.stagingRoot, { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger.error(`record.video cleanup could not remove staging directory: ${cleanupErrorMessage(error)}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
14
22
|
}
|
|
15
23
|
export async function removePartialRunVideoOutput(outputPath, logger) {
|
|
16
24
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-cleanup.js","sourceRoot":"","sources":["../../src/core/recording-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"recording-cleanup.js","sourceRoot":"","sources":["../../src/core/recording-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAUtC,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,YAAsC,EACtC,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kFAAkF;QAClF,MAAM,CAAC,KAAK,CAAC,gDAAgD,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,2BAA2B,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,4DAA4D,mBAAmB,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAkB,EAClB,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kFAAkF;QAClF,MAAM,CAAC,KAAK,CACV,wDAAwD,mBAAmB,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type RecipeResolutionErrorCode = 'RECIPE_CALL_CYCLE' | 'RECIPE_CALL_DEPTH_EXCEEDED' | 'RECIPE_LIBRARY_DUPLICATE_RECIPE' | 'RECIPE_LIBRARY_DUPLICATE_SOURCE' | 'RECIPE_LIBRARY_RECIPE_INVALID' | 'RECIPE_PARAMS_INVALID' | 'RECIPE_PRECONDITION_NOT_FOUND' | 'RECIPE_REFERENCE_NOT_FOUND' | 'RECIPE_RESOLUTION_DIGEST_MISSING';
|
|
2
|
+
export declare class RecipeResolutionError extends Error {
|
|
3
|
+
readonly code: RecipeResolutionErrorCode;
|
|
4
|
+
readonly userAction: string;
|
|
5
|
+
constructor(code: RecipeResolutionErrorCode, message: string, userAction: string);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=resolution-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution-error.d.ts","sourceRoot":"","sources":["../../src/core/resolution-error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACjC,mBAAmB,GACnB,4BAA4B,GAC5B,iCAAiC,GACjC,iCAAiC,GACjC,+BAA+B,GAC/B,uBAAuB,GACvB,+BAA+B,GAC/B,4BAA4B,GAC5B,kCAAkC,CAAC;AAEvC,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution-error.js","sourceRoot":"","sources":["../../src/core/resolution-error.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAI9C,YAAY,IAA+B,EAAE,OAAe,EAAE,UAAkB;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EACV,aAAa,EAEb,yBAAyB,EAKzB,YAAY,EAOb,MAAM,YAAY,CAAC;AA2BpB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAGzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAiCnF"}
|