@overkill-dev/run 0.0.64 → 0.0.65
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/attachments/attachment-context.js +31 -0
- package/attachments/attachment-context.js.map +1 -0
- package/engine/run-artifact.d.ts +1 -1
- package/engine/run-artifact.d.ts.map +1 -1
- package/engine/run-result.d.ts +5 -1
- package/engine/run-result.d.ts.map +1 -1
- package/engine/run-result.js.map +1 -1
- package/engine/runtime-attachment.d.ts +62 -0
- package/engine/runtime-attachment.d.ts.map +1 -0
- package/engine/runtime-attachment.js +7 -0
- package/engine/runtime-attachment.js.map +1 -0
- package/package.json +9 -1
- package/packages/resources/attachment-context.entry-point.js +2 -0
- package/packages/resources/attachment-context.entry-point.js.map +1 -0
- package/packages/run/config.entry-point.d.ts +1 -1
- package/packages/run/config.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.d.ts +1 -1
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/readme.md +23 -1
- package/reporters/human-reporter-rendering.js +14 -0
- package/reporters/human-reporter-rendering.js.map +1 -1
- package/resources/resource-definition-brand.js +1 -1
- package/resources/resource-definition-brand.js.map +1 -1
- package/resources/resource-definition-types.d.ts.map +1 -1
- package/resources/resource-scenario-binding.js +2 -0
- package/resources/resource-scenario-binding.js.map +1 -1
- package/resources/resource-session.d.ts.map +1 -1
- package/resources/runtime-definition.d.ts.map +1 -1
- package/resources/runtime-definition.js +1 -1
- package/resources/runtime-definition.js.map +1 -1
- package/resources/runtime-matrix-definition.d.ts.map +1 -1
- package/resources/runtime-matrix-definition.js +2 -2
- package/resources/runtime-matrix-definition.js.map +1 -1
- package/run/attachment-connection.js +108 -0
- package/run/attachment-connection.js.map +1 -0
- package/run/attachment-coordinator-context.js +9 -0
- package/run/attachment-coordinator-context.js.map +1 -0
- package/run/attachment-coordinator.js +77 -0
- package/run/attachment-coordinator.js.map +1 -0
- package/run/attachment-eligibility.js +21 -0
- package/run/attachment-eligibility.js.map +1 -0
- package/run/attachment-execution.js +255 -0
- package/run/attachment-execution.js.map +1 -0
- package/run/attachment-failure.js +63 -0
- package/run/attachment-failure.js.map +1 -0
- package/run/attachment-frames.js +22 -0
- package/run/attachment-frames.js.map +1 -0
- package/run/attachment-json.js +118 -0
- package/run/attachment-json.js.map +1 -0
- package/run/attachment-protocol.js +5 -0
- package/run/attachment-protocol.js.map +1 -0
- package/run/attachment-record.js +60 -0
- package/run/attachment-record.js.map +1 -0
- package/run/attachment-reporter.js +39 -0
- package/run/attachment-reporter.js.map +1 -0
- package/run/attachment-results.js +115 -0
- package/run/attachment-results.js.map +1 -0
- package/run/attachment-retention.js +153 -0
- package/run/attachment-retention.js.map +1 -0
- package/run/attachment-run.js +36 -0
- package/run/attachment-run.js.map +1 -0
- package/run/attachment-server.js +136 -0
- package/run/attachment-server.js.map +1 -0
- package/run/attachment-storage-session.js +21 -0
- package/run/attachment-storage-session.js.map +1 -0
- package/run/attachment-store.js +330 -0
- package/run/attachment-store.js.map +1 -0
- package/run/attachment-wire-schema.js +123 -0
- package/run/attachment-wire-schema.js.map +1 -0
- package/run/attachment-worker-context.js +49 -0
- package/run/attachment-worker-context.js.map +1 -0
- package/run/attachment-writer.js +117 -0
- package/run/attachment-writer.js.map +1 -0
- package/run/coverage-config-schema.d.ts +4 -4
- package/run/resource-lifecycle-projection.js +6 -2
- package/run/resource-lifecycle-projection.js.map +1 -1
- package/run/resource-lifecycle-session-acquirer.js +2 -0
- package/run/resource-lifecycle-session-acquirer.js.map +1 -1
- package/run/resource-lifecycle-startup-budget.js +1 -0
- package/run/resource-lifecycle-startup-budget.js.map +1 -1
- package/run/resource-lifecycle-state.d.ts.map +1 -1
- package/run/resource-lifecycle-state.js +10 -0
- package/run/resource-lifecycle-state.js.map +1 -1
- package/run/resource-lifecycle.js +24 -6
- package/run/resource-lifecycle.js.map +1 -1
- package/run/retry-artifact-retention.js.map +1 -1
- package/run/run-config-schema.d.ts +23 -4
- package/run/run-config-schema.d.ts.map +1 -1
- package/run/run-config-schema.js +11 -0
- package/run/run-config-schema.js.map +1 -1
- package/run/run-config.d.ts +7 -5
- package/run/run-config.d.ts.map +1 -1
- package/run/run-config.js +2 -1
- package/run/run-config.js.map +1 -1
- package/run/run-engine-primitives.d.ts +12 -1
- package/run/run-engine-primitives.d.ts.map +1 -1
- package/run/run-facts.js +1 -0
- package/run/run-facts.js.map +1 -1
- package/run/run-isolated-command.js +1 -0
- package/run/run-isolated-command.js.map +1 -1
- package/run/run-local-command.js +4 -1
- package/run/run-local-command.js.map +1 -1
- package/run/run-local-execution.js +2 -1
- package/run/run-local-execution.js.map +1 -1
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-record-input.js.map +1 -1
- package/run/run-record-outcomes.d.ts +4 -1
- package/run/run-record-outcomes.d.ts.map +1 -1
- package/run/run-record.js.map +1 -1
- package/run/run-support.js +6 -1
- package/run/run-support.js.map +1 -1
- package/run/run-types.d.ts +3 -4
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js.map +1 -1
- package/run/run-validation.js +9 -0
- package/run/run-validation.js.map +1 -1
- package/run/runtime-attachment-boundary.js +11 -0
- package/run/runtime-attachment-boundary.js.map +1 -0
- package/run/supervised-child.js +11 -9
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-runtime.js +9 -3
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run.js +11 -3
- package/run/supervised-run.js.map +1 -1
- package/run/worker-pool-command.js +1 -0
- package/run/worker-pool-command.js.map +1 -1
- package/run/worker-pool-execution.js +10 -2
- package/run/worker-pool-execution.js.map +1 -1
- package/run/worker-pool-hedged-arbitration.js +7 -2
- package/run/worker-pool-hedged-arbitration.js.map +1 -1
- package/run/worker-pool-protocol.js.map +1 -1
- package/run/worker-pool-run.js +8 -1
- package/run/worker-pool-run.js.map +1 -1
- package/run/worker-pool-runtime.js +3 -7
- package/run/worker-pool-runtime.js.map +1 -1
- package/run/worker-pool-task-events.js +5 -2
- package/run/worker-pool-task-events.js.map +1 -1
- package/run/worker-pool-worker.js +14 -4
- package/run/worker-pool-worker.js.map +1 -1
- package/sbom.cdx.json +4 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
2
|
+
const maxJsonDepth = 64;
|
|
3
|
+
const containerBytes = 2;
|
|
4
|
+
class JsonByteLimitError extends Error {
|
|
5
|
+
constructor() {
|
|
6
|
+
super('JSON attachment exceeds its byte limit.');
|
|
7
|
+
this.name = 'JsonByteLimitError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function createJsonSnapshotBudget(maxBytes) {
|
|
11
|
+
const ancestors = new Set();
|
|
12
|
+
const remaining = createStoredRunValue(maxBytes);
|
|
13
|
+
return {
|
|
14
|
+
reserve(bytes) {
|
|
15
|
+
if (bytes > remaining.read()) {
|
|
16
|
+
throw new JsonByteLimitError();
|
|
17
|
+
}
|
|
18
|
+
remaining.write(remaining.read() - bytes);
|
|
19
|
+
},
|
|
20
|
+
enter(value) {
|
|
21
|
+
ancestors.add(value);
|
|
22
|
+
},
|
|
23
|
+
leave(value) {
|
|
24
|
+
ancestors.delete(value);
|
|
25
|
+
},
|
|
26
|
+
contains(value) {
|
|
27
|
+
return ancestors.has(value);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function scalar(value) {
|
|
32
|
+
return value === null || typeof value === 'boolean' || typeof value === 'string' ||
|
|
33
|
+
typeof value === 'number' && Number.isFinite(value);
|
|
34
|
+
}
|
|
35
|
+
function descriptorValue(descriptor) {
|
|
36
|
+
if (descriptor === undefined || !Object.hasOwn(descriptor, 'value')) {
|
|
37
|
+
throw new TypeError('JSON attachments cannot contain sparse arrays or accessors.');
|
|
38
|
+
}
|
|
39
|
+
return descriptor.value;
|
|
40
|
+
}
|
|
41
|
+
function arraySnapshot(value, budget, depth, visit) {
|
|
42
|
+
const entries = [];
|
|
43
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
44
|
+
budget.reserve(index === 0 ? 0 : 1);
|
|
45
|
+
entries.push(visit(descriptorValue(Object.getOwnPropertyDescriptor(value, String(index))), depth + 1));
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze(entries);
|
|
48
|
+
}
|
|
49
|
+
function objectSnapshot(value, budget, depth, visit) {
|
|
50
|
+
const entries = {};
|
|
51
|
+
const keys = Reflect.ownKeys(value).filter(function enumerableKey(key) {
|
|
52
|
+
return Object.getOwnPropertyDescriptor(value, key)?.enumerable === true;
|
|
53
|
+
});
|
|
54
|
+
for (const [index, key] of keys.entries()) {
|
|
55
|
+
if (typeof key !== 'string') {
|
|
56
|
+
throw new TypeError('JSON attachments cannot contain symbol keys.');
|
|
57
|
+
}
|
|
58
|
+
budget.reserve(Buffer.byteLength(JSON.stringify(key)) + 1 + (index === 0 ? 0 : 1));
|
|
59
|
+
Object.defineProperty(entries, key, {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
value: visit(descriptorValue(Object.getOwnPropertyDescriptor(value, key)), depth + 1)
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return Object.freeze(entries);
|
|
65
|
+
}
|
|
66
|
+
function isContainer(value) {
|
|
67
|
+
return typeof value === 'object' && value !== null;
|
|
68
|
+
}
|
|
69
|
+
function validateContainer(value, budget, depth) {
|
|
70
|
+
if (depth > maxJsonDepth || budget.contains(value)) {
|
|
71
|
+
throw new TypeError('Attachments require finite, acyclic JSON values with depth at most 64.');
|
|
72
|
+
}
|
|
73
|
+
const prototype = Object.getPrototypeOf(value);
|
|
74
|
+
if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) {
|
|
75
|
+
throw new TypeError('JSON attachments require plain objects and arrays.');
|
|
76
|
+
}
|
|
77
|
+
budget.reserve(containerBytes);
|
|
78
|
+
budget.enter(value);
|
|
79
|
+
}
|
|
80
|
+
function containerSnapshot(value, budget, depth, visit) {
|
|
81
|
+
return Array.isArray(value)
|
|
82
|
+
? arraySnapshot(value, budget, depth, visit)
|
|
83
|
+
: objectSnapshot(value, budget, depth, visit);
|
|
84
|
+
}
|
|
85
|
+
function createJsonVisit(budget) {
|
|
86
|
+
return function visit(value, depth) {
|
|
87
|
+
if (scalar(value)) {
|
|
88
|
+
budget.reserve(Buffer.byteLength(JSON.stringify(value)));
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
if (!isContainer(value)) {
|
|
92
|
+
throw new TypeError('Attachments require finite JSON values.');
|
|
93
|
+
}
|
|
94
|
+
validateContainer(value, budget, depth);
|
|
95
|
+
try {
|
|
96
|
+
return containerSnapshot(value, budget, depth, visit);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
budget.leave(value);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function boundedJsonSnapshot(value, maxBytes) {
|
|
104
|
+
const copy = createJsonVisit(createJsonSnapshotBudget(maxBytes))(value, 0);
|
|
105
|
+
return { value: copy, encoded: JSON.stringify(copy) };
|
|
106
|
+
}
|
|
107
|
+
export function snapshotAttachmentJson(value, maxBytes) {
|
|
108
|
+
try {
|
|
109
|
+
return boundedJsonSnapshot(value, maxBytes);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (error instanceof JsonByteLimitError) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=attachment-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-json.js","sourceRoot":"","sources":["../../../../source/run/attachment-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-protocol.js","sourceRoot":"","sources":["../../../../source/run/attachment-protocol.ts"],"names":[],"mappings":"AAkDA,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAE/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ulid } from 'ulid';
|
|
2
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
3
|
+
import { collectedRunPlanFromTestPlan, createRunResultFromCollectedPlan } from "./collected-run-plan.js";
|
|
4
|
+
import { createRunRecordSession } from "./run-record.js";
|
|
5
|
+
import { runRecordVersions } from "./run-record-versions.js";
|
|
6
|
+
import { selectedProfile } from "./run-facts.js";
|
|
7
|
+
function createAttachmentRecordCheckpoint(record, resolved, dependencies) {
|
|
8
|
+
const pending = createStoredRunValue(Promise.resolve());
|
|
9
|
+
const startedAt = Number(dependencies.wallClock.currentMonotonicMicroseconds);
|
|
10
|
+
async function persist(artifacts, previous) {
|
|
11
|
+
await previous;
|
|
12
|
+
const plan = resolved.plan.kind === 'local'
|
|
13
|
+
? collectedRunPlanFromTestPlan(resolved.plan.testPlan)
|
|
14
|
+
: resolved.plan.collectedPlan;
|
|
15
|
+
const partial = createRunResultFromCollectedPlan(plan, [], [], {
|
|
16
|
+
completedAtMicroseconds: Number(dependencies.wallClock.currentMonotonicMicroseconds),
|
|
17
|
+
planStatus: 'planned',
|
|
18
|
+
resourceUsage: null,
|
|
19
|
+
startedAtMicroseconds: startedAt,
|
|
20
|
+
testExecutionWallTimeMicroseconds: 0
|
|
21
|
+
});
|
|
22
|
+
const persisted = await record.checkpointResult({ ...partial, artifacts });
|
|
23
|
+
if (persisted.runnerErrors.length > 0) {
|
|
24
|
+
throw new Error(persisted.runnerErrors[0]?.message ?? 'Attachment record checkpoint failed.');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function checkpoint(artifacts) {
|
|
28
|
+
pending.write(persist(artifacts, pending.read()));
|
|
29
|
+
await pending.read();
|
|
30
|
+
}
|
|
31
|
+
return { checkpoint };
|
|
32
|
+
}
|
|
33
|
+
export async function createAttachmentRecord(resolved, dependencies) {
|
|
34
|
+
const record = createRunRecordSession(resolved.cwd, {
|
|
35
|
+
config: resolved.config,
|
|
36
|
+
engine: resolved.engine,
|
|
37
|
+
profile: selectedProfile(resolved.request, resolved.config),
|
|
38
|
+
projectRoot: resolved.facts.environment.projectRoot,
|
|
39
|
+
request: { ...resolved.request, seed: { value: BigInt(resolved.facts.reproducibility.seed) } }
|
|
40
|
+
}, {
|
|
41
|
+
createId: ulid,
|
|
42
|
+
node: dependencies.node,
|
|
43
|
+
store: dependencies.runtimeStateStore,
|
|
44
|
+
versions: await runRecordVersions(resolved.engine, dependencies.node.version),
|
|
45
|
+
wallClock: dependencies.wallClock
|
|
46
|
+
});
|
|
47
|
+
await record.start(null);
|
|
48
|
+
await record.recordFacts(resolved.facts);
|
|
49
|
+
const checkpoints = createAttachmentRecordCheckpoint(record, resolved, dependencies);
|
|
50
|
+
return {
|
|
51
|
+
captureTime() {
|
|
52
|
+
return Number(dependencies.wallClock.currentMonotonicMicroseconds);
|
|
53
|
+
},
|
|
54
|
+
async checkpoint(artifacts) {
|
|
55
|
+
return checkpoints.checkpoint(artifacts);
|
|
56
|
+
},
|
|
57
|
+
session: record
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=attachment-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-record.js","sourceRoot":"","sources":["../../../../source/run/attachment-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { defineReporter } from "../engine/reporter.js";
|
|
2
|
+
import { createDefaultWorkId } from "../engine/identity.js";
|
|
3
|
+
import { currentAttachmentCoordinator } from "./attachment-coordinator-context.js";
|
|
4
|
+
function eventWithAttachments(event, coordinator) {
|
|
5
|
+
if (event.kind !== 'test-end') {
|
|
6
|
+
return event;
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
...event,
|
|
10
|
+
artifacts: [
|
|
11
|
+
...event.artifacts,
|
|
12
|
+
...coordinator.caseArtifacts(event.workId ?? createDefaultWorkId(event.case), { index: event.attempt }, null)
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function reporterWithAttachments(definition) {
|
|
17
|
+
const coordinator = currentAttachmentCoordinator();
|
|
18
|
+
if (coordinator === null) {
|
|
19
|
+
return definition;
|
|
20
|
+
}
|
|
21
|
+
return defineReporter(function createAttachmentReporter(context) {
|
|
22
|
+
const reporter = definition(context);
|
|
23
|
+
if (reporter.kind !== 'real-time') {
|
|
24
|
+
return reporter;
|
|
25
|
+
}
|
|
26
|
+
return new Proxy(reporter, {
|
|
27
|
+
get(target, property, receiver) {
|
|
28
|
+
if (property === 'onEvent') {
|
|
29
|
+
return async function deliverAttachmentEvent(event) {
|
|
30
|
+
return await target.onEvent(eventWithAttachments(event, coordinator));
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const original = Reflect.get(target, property, receiver);
|
|
34
|
+
return original;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=attachment-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-reporter.js","sourceRoot":"","sources":["../../../../source/run/attachment-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4C,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAA8B,MAAM,qCAAqC,CAAC;AAE/G,SAAS,oBAAoB,CAAC,KAAoB,EAAE,WAAkC;IAClF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO;QACH,GAAG,KAAK;QACR,SAAS,EAAE;YACP,GAAG,KAAK,CAAC,SAAS;YAClB,GAAG,WAAW,CAAC,aAAa,CACxB,KAAK,CAAC,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAC/C,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EACxB,IAAI,CACP;SACJ;KACJ,CAAC;AACN,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,UAA2B;IAC/D,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,cAAc,CAAC,SAAS,wBAAwB,CAAC,OAAO;QAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACvB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;gBAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,KAAK,UAAU,sBAAsB,CAAC,KAAoB;wBAC7D,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;oBAC1E,CAAC,CAAC;gBACN,CAAC;gBACD,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClE,OAAO,QAAQ,CAAC;YACpB,CAAC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { appendRunnerErrors } from "../engine/execution-result.js";
|
|
2
|
+
import { workIdentityKey } from "../engine/identity.js";
|
|
3
|
+
import { runStatusFromPlan } from "../engine/run-result.js";
|
|
4
|
+
import { attachmentFailureIdentity, attachmentFailureBranch } from "./attachment-failure.js";
|
|
5
|
+
import { retainedRetryArtifacts } from "./retry-artifact-retention.js";
|
|
6
|
+
function unclosedError(owner) {
|
|
7
|
+
return {
|
|
8
|
+
attributedTo: owner.kind === 'case' ? owner.work.case : null,
|
|
9
|
+
attributedToAttempt: owner.kind === 'case' ? owner.attempt : null,
|
|
10
|
+
attributedToWork: owner.kind === 'case' ? owner.work : null,
|
|
11
|
+
cause: { owner, reason: 'unclosed' },
|
|
12
|
+
diagnostics: [],
|
|
13
|
+
message: 'Attachment writer did not close before its execution boundary ended.',
|
|
14
|
+
subtype: 'artifact'
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function attachmentArtifacts(artifacts) {
|
|
18
|
+
return artifacts.flatMap(function retainedAttachments(artifact) {
|
|
19
|
+
if (artifact.payload.kind === 'runtime-attachment' && artifact.id.subtype === 'attachment' &&
|
|
20
|
+
artifact.source === 'instrumented') {
|
|
21
|
+
return [{
|
|
22
|
+
...artifact,
|
|
23
|
+
id: { ...artifact.id, subtype: 'attachment' },
|
|
24
|
+
payload: artifact.payload,
|
|
25
|
+
source: 'instrumented'
|
|
26
|
+
}];
|
|
27
|
+
}
|
|
28
|
+
return artifact.payload.kind === 'hedged-conflict'
|
|
29
|
+
? [...artifact.payload.authoritative.attachments, ...artifact.payload.conflicting.attachments]
|
|
30
|
+
: [];
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function attachmentMatchesAttempt(artifact, work, attempt) {
|
|
34
|
+
if (artifact.id.scope.kind !== 'case' || artifact.id.attempt?.index !== attempt.index) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const identity = {
|
|
38
|
+
case: artifact.id.scope.case,
|
|
39
|
+
runtimes: artifact.id.runtimes,
|
|
40
|
+
workload: artifact.id.workload
|
|
41
|
+
};
|
|
42
|
+
return workIdentityKey(identity) === workIdentityKey(work);
|
|
43
|
+
}
|
|
44
|
+
function distinctAttachmentErrors(errors) {
|
|
45
|
+
const ids = new Set();
|
|
46
|
+
return errors.filter(function distinctError(error) {
|
|
47
|
+
const id = attachmentFailureIdentity(error);
|
|
48
|
+
if (id === null) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (ids.has(id)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
ids.add(id);
|
|
55
|
+
return true;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function retainedConflictEvidence(artifact, policy) {
|
|
59
|
+
const { payload } = artifact;
|
|
60
|
+
if (payload.kind !== 'hedged-conflict') {
|
|
61
|
+
return artifact;
|
|
62
|
+
}
|
|
63
|
+
const results = [{ workId: payload.work, attempts: payload.authoritative.attempts }];
|
|
64
|
+
const conflicting = [{ workId: payload.work, attempts: payload.conflicting.attempts }];
|
|
65
|
+
return {
|
|
66
|
+
id: { ...artifact.id, subtype: 'hedged-conflict' },
|
|
67
|
+
source: 'native',
|
|
68
|
+
payload: {
|
|
69
|
+
...payload,
|
|
70
|
+
authoritative: {
|
|
71
|
+
...payload.authoritative,
|
|
72
|
+
attachments: retainedRetryArtifacts(payload.authoritative.attachments, results, policy)
|
|
73
|
+
},
|
|
74
|
+
conflicting: {
|
|
75
|
+
...payload.conflicting,
|
|
76
|
+
attachments: retainedRetryArtifacts(payload.conflicting.attachments, conflicting, policy)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function retainedAttachmentErrors(errors, retains) {
|
|
82
|
+
return distinctAttachmentErrors(errors.filter(function belongsToRetainedBranch(error) {
|
|
83
|
+
return retains(attachmentFailureBranch(error));
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
export function resultWithRuntimeAttachments(result, attachments, options) {
|
|
87
|
+
const artifacts = retainedRetryArtifacts(attachments, result.perTest, options.policy);
|
|
88
|
+
const existing = new Set(result
|
|
89
|
+
.artifacts
|
|
90
|
+
.filter(function attachment(artifact) {
|
|
91
|
+
return artifact.id.subtype === 'attachment';
|
|
92
|
+
})
|
|
93
|
+
.map(function sequence(artifact) {
|
|
94
|
+
return artifact.id.sequence;
|
|
95
|
+
}));
|
|
96
|
+
const additions = artifacts.filter(function newAttachment(artifact) {
|
|
97
|
+
return !existing.has(artifact.id.sequence);
|
|
98
|
+
});
|
|
99
|
+
const runnerErrors = retainedAttachmentErrors(result.runnerErrors, options.retainsBranch);
|
|
100
|
+
return appendRunnerErrors({
|
|
101
|
+
...result,
|
|
102
|
+
status: runStatusFromPlan(result.summary, runnerErrors, result.planStatus),
|
|
103
|
+
runnerErrors,
|
|
104
|
+
artifacts: [
|
|
105
|
+
...result.artifacts.map(function retainConflict(artifact) {
|
|
106
|
+
return retainedConflictEvidence(artifact, options.policy);
|
|
107
|
+
}),
|
|
108
|
+
...additions
|
|
109
|
+
]
|
|
110
|
+
}, [
|
|
111
|
+
...retainedAttachmentErrors(options.localErrors, options.retainsBranch),
|
|
112
|
+
...options.owners.map(unclosedError)
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=attachment-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-results.js","sourceRoot":"","sources":["../../../../source/run/attachment-results.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { mkdir, open } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
4
|
+
import { snapshotAttachmentJson } from "./attachment-json.js";
|
|
5
|
+
function createAttachmentByteBudget(limit) {
|
|
6
|
+
const bytes = createStoredRunValue(0);
|
|
7
|
+
const exceeded = createStoredRunValue(false);
|
|
8
|
+
function reserve(length, available) {
|
|
9
|
+
const retainedLength = Math.max(0, Math.min(length, available, limit - bytes.read()));
|
|
10
|
+
exceeded.write(exceeded.read() || retainedLength < length);
|
|
11
|
+
return retainedLength;
|
|
12
|
+
}
|
|
13
|
+
function retained(retainedBytes) {
|
|
14
|
+
bytes.write(bytes.read() + retainedBytes);
|
|
15
|
+
}
|
|
16
|
+
return { bytes, exceeded, reserve, retained };
|
|
17
|
+
}
|
|
18
|
+
function inlineAttachmentRetentionOmit(state) {
|
|
19
|
+
const { budget } = state;
|
|
20
|
+
budget.exceeded.write(true);
|
|
21
|
+
}
|
|
22
|
+
function inlineAttachmentRetentionJson(state, text) {
|
|
23
|
+
const { ended, budget, completion } = state;
|
|
24
|
+
if (!ended.read() || budget.exceeded.read() || completion.read().kind !== 'complete') {
|
|
25
|
+
return { kind: 'omitted', limit: state.limit, reason: 'byte-limit' };
|
|
26
|
+
}
|
|
27
|
+
const value = JSON.parse(text);
|
|
28
|
+
const snapshot = snapshotAttachmentJson(value, state.limit);
|
|
29
|
+
return snapshot === null
|
|
30
|
+
? { kind: 'omitted', limit: state.limit, reason: 'byte-limit' }
|
|
31
|
+
: { byteLength: budget.bytes.read(), kind: 'json', value: snapshot.value };
|
|
32
|
+
}
|
|
33
|
+
function inlineAttachmentRetentionContent(state) {
|
|
34
|
+
const { chunks, completion } = state;
|
|
35
|
+
const text = chunks.join('');
|
|
36
|
+
return state.kind === 'json'
|
|
37
|
+
? inlineAttachmentRetentionJson(state, text)
|
|
38
|
+
: { byteLength: Buffer.byteLength(text), completion: completion.read(), kind: 'text', text };
|
|
39
|
+
}
|
|
40
|
+
async function inlineAttachmentRetentionFinish(state, requestedCompletion) {
|
|
41
|
+
const { ended, completion, budget, chunks, decoder } = state;
|
|
42
|
+
if (ended.read()) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
ended.write(true);
|
|
46
|
+
completion.write(budget.exceeded.read() && requestedCompletion.kind === 'complete'
|
|
47
|
+
? { kind: 'truncated', reason: 'byte-limit' }
|
|
48
|
+
: requestedCompletion);
|
|
49
|
+
if (!budget.exceeded.read()) {
|
|
50
|
+
try {
|
|
51
|
+
chunks.push(decoder.decode(new Uint8Array(), { stream: false }));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
completion.write({ kind: 'incomplete', reason: 'write-error' });
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function inlineAttachmentRetentionRetain(state, chunk, availableBytes) {
|
|
60
|
+
const { budget, chunks, decoder } = state;
|
|
61
|
+
const length = budget.reserve(chunk.byteLength, availableBytes);
|
|
62
|
+
if (length > 0) {
|
|
63
|
+
try {
|
|
64
|
+
chunks.push(decoder.decode(chunk.subarray(0, length), { stream: true }));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
state.completion.write({ kind: 'incomplete', reason: 'write-error' });
|
|
68
|
+
state.ended.write(true);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
budget.retained(length);
|
|
73
|
+
return length;
|
|
74
|
+
}
|
|
75
|
+
function createInlineAttachmentRetention(kind, limit) {
|
|
76
|
+
const chunks = [];
|
|
77
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
78
|
+
const budget = createAttachmentByteBudget(limit);
|
|
79
|
+
const completion = createStoredRunValue({ kind: 'incomplete', reason: 'unclosed' });
|
|
80
|
+
const ended = createStoredRunValue(false);
|
|
81
|
+
const state = { kind, limit, chunks, decoder, budget, completion, ended };
|
|
82
|
+
return {
|
|
83
|
+
omit: inlineAttachmentRetentionOmit.bind(null, state),
|
|
84
|
+
content: inlineAttachmentRetentionContent.bind(null, state),
|
|
85
|
+
finish: inlineAttachmentRetentionFinish.bind(null, state),
|
|
86
|
+
retain: inlineAttachmentRetentionRetain.bind(null, state)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function fileAttachmentRetentionOmit() {
|
|
90
|
+
throw new TypeError('Binary attachments cannot be omitted as JSON.');
|
|
91
|
+
}
|
|
92
|
+
function fileAttachmentRetentionContent(state) {
|
|
93
|
+
const { budget, completion } = state;
|
|
94
|
+
return { byteLength: budget.bytes.read(), completion: completion.read(), kind: 'file', path: state.filePath };
|
|
95
|
+
}
|
|
96
|
+
async function fileAttachmentRetentionFinish(state, requestedCompletion) {
|
|
97
|
+
const { ended, completion, budget, file } = state;
|
|
98
|
+
if (ended.read()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
ended.write(true);
|
|
102
|
+
completion.write(budget.exceeded.read() || requestedCompletion.kind === 'truncated'
|
|
103
|
+
? { kind: 'incomplete', reason: 'byte-limit' }
|
|
104
|
+
: requestedCompletion);
|
|
105
|
+
await file.close();
|
|
106
|
+
}
|
|
107
|
+
async function fileAttachmentRetentionWrite(state, chunk) {
|
|
108
|
+
const { file, budget } = state;
|
|
109
|
+
let offset = 0;
|
|
110
|
+
while (offset < chunk.byteLength) {
|
|
111
|
+
const result = await file.write(chunk.subarray(offset));
|
|
112
|
+
if (result.bytesWritten === 0) {
|
|
113
|
+
throw new Error('Attachment file write made no progress.');
|
|
114
|
+
}
|
|
115
|
+
offset += result.bytesWritten;
|
|
116
|
+
budget.retained(result.bytesWritten);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function fileAttachmentRetentionRetain(state, chunk, availableBytes) {
|
|
120
|
+
const { budget } = state;
|
|
121
|
+
const length = budget.reserve(chunk.byteLength, availableBytes);
|
|
122
|
+
try {
|
|
123
|
+
await fileAttachmentRetentionWrite(state, chunk.subarray(0, length));
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
await fileAttachmentRetentionFinish(state, { kind: 'incomplete', reason: 'write-error' });
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
return length;
|
|
130
|
+
}
|
|
131
|
+
function createFileAttachmentRetention(file, filePath, limit) {
|
|
132
|
+
const budget = createAttachmentByteBudget(limit);
|
|
133
|
+
const completion = createStoredRunValue({
|
|
134
|
+
kind: 'incomplete',
|
|
135
|
+
reason: 'unclosed'
|
|
136
|
+
});
|
|
137
|
+
const ended = createStoredRunValue(false);
|
|
138
|
+
const state = { file, filePath, limit, budget, completion, ended };
|
|
139
|
+
return {
|
|
140
|
+
omit: fileAttachmentRetentionOmit,
|
|
141
|
+
content: fileAttachmentRetentionContent.bind(null, state),
|
|
142
|
+
finish: fileAttachmentRetentionFinish.bind(null, state),
|
|
143
|
+
retain: fileAttachmentRetentionRetain.bind(null, state)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export async function createAttachmentRetention(kind, projectRoot, filePath, limit) {
|
|
147
|
+
if (kind !== 'binary') {
|
|
148
|
+
return createInlineAttachmentRetention(kind, limit);
|
|
149
|
+
}
|
|
150
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
151
|
+
return createFileAttachmentRetention(await open(filePath, 'wx'), path.relative(projectRoot, filePath).split(path.sep).join('/'), limit);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=attachment-retention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-retention.js","sourceRoot":"","sources":["../../../../source/run/attachment-retention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAc9D,SAAS,0BAA0B,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,oBAAoB,CAAS,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,oBAAoB,CAAU,KAAK,CAAC,CAAC;IACtD,SAAS,OAAO,CAAC,MAAc,EAAE,SAAiB;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtF,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,cAAc,GAAG,MAAM,CAAC,CAAC;QAC3D,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,SAAS,QAAQ,CAAC,aAAqB;QACnC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC;AAgBD,SAAS,6BAA6B,CAAC,KAAqC;IACxE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AACD,SAAS,6BAA6B,CAAC,KAAqC,EAAE,IAAY;IACtF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE5C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,QAAQ,KAAK,IAAI;QACpB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;QAC/D,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnF,CAAC;AACD,SAAS,gCAAgC,CAAC,KAAqC;IAC3E,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM;QACxB,CAAC,CAAC,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACrG,CAAC;AACD,KAAK,UAAU,+BAA+B,CAC1C,KAAqC,EACrC,mBAAyC;IAEzC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE7D,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClB,UAAU,CAAC,KAAK,CACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,mBAAmB,CAAC,IAAI,KAAK,UAAU;QAC7D,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;QAC7C,CAAC,CAAC,mBAAmB,CAC5B,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC;AACD,KAAK,UAAU,+BAA+B,CAC1C,KAAqC,EACrC,KAAiB,EACjB,cAAsB;IAEtB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACb,IAAI,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YACtE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,+BAA+B,CAAC,IAAqB,EAAE,KAAa;IACzE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAyB,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,oBAAoB,CAAuB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1G,MAAM,KAAK,GAAG,oBAAoB,CAAU,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAmC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1G,OAAO;QACH,IAAI,EAAE,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACrD,OAAO,EAAE,gCAAgC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3D,MAAM,EAAE,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACzD,MAAM,EAAE,+BAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;KAC5D,CAAC;AACN,CAAC;AAoBD,SAAS,2BAA2B;IAChC,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACzE,CAAC;AACD,SAAS,8BAA8B,CAAC,KAAmC;IACvE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAErC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAClH,CAAC;AACD,KAAK,UAAU,6BAA6B,CACxC,KAAmC,EACnC,mBAAyC;IAEzC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAElD,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClB,UAAU,CAAC,KAAK,CACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,mBAAmB,CAAC,IAAI,KAAK,WAAW;QAC9D,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE;QAC9C,CAAC,CAAC,mBAAmB,CAC5B,CAAC;IACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AACD,KAAK,UAAU,4BAA4B,CAAC,KAAmC,EAAE,KAAiB;IAC9F,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AACD,KAAK,UAAU,6BAA6B,CACxC,KAAmC,EACnC,KAAiB,EACjB,cAAsB;IAEtB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,CAAC;QACD,MAAM,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,6BAA6B,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AACD,SAAS,6BAA6B,CAAC,IAAgB,EAAE,QAAgB,EAAE,KAAa;IACpF,MAAM,MAAM,GAAyB,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,oBAAoB,CAAiE;QACpG,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,UAAU;KACrB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,oBAAoB,CAAU,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACjG,OAAO;QACH,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACzD,MAAM,EAAE,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACvD,MAAM,EAAE,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;KAC1D,CAAC;AACN,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,IAAgC,EAChC,WAAmB,EACnB,QAAgB,EAChB,KAAa;IAEb,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,+BAA+B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,OAAO,6BAA6B,CAChC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC1B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9D,KAAK,CACR,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createAttachmentStorageSession } from "./attachment-storage-session.js";
|
|
2
|
+
import { createAttachmentRecord } from "./attachment-record.js";
|
|
3
|
+
import { createAttachmentRunCoordinator } from "./attachment-coordinator.js";
|
|
4
|
+
import { runWithAttachmentExecution } from "./resource-lifecycle-state.js";
|
|
5
|
+
import { runWithAttachmentCoordinator } from "./attachment-coordinator-context.js";
|
|
6
|
+
import { runHasAttachmentScopes } from "./attachment-eligibility.js";
|
|
7
|
+
async function executeAttachmentSession(record, coordinator, run) {
|
|
8
|
+
try {
|
|
9
|
+
const result = await runWithAttachmentCoordinator(coordinator, async function () {
|
|
10
|
+
return runWithAttachmentExecution(coordinator.execution, run);
|
|
11
|
+
});
|
|
12
|
+
return await record.session.complete(await coordinator.finalize(result));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
await coordinator.close();
|
|
16
|
+
try {
|
|
17
|
+
await record.checkpoint(coordinator.artifacts());
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
await record.session.interrupt(error);
|
|
21
|
+
}
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
await coordinator.close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function executeWithAttachments(resolved, dependencies, run) {
|
|
29
|
+
if (!runHasAttachmentScopes(resolved)) {
|
|
30
|
+
return await run();
|
|
31
|
+
}
|
|
32
|
+
const record = await createAttachmentRecord(resolved, dependencies);
|
|
33
|
+
const coordinator = createAttachmentRunCoordinator(await createAttachmentStorageSession(resolved, record));
|
|
34
|
+
return await executeAttachmentSession(record, coordinator, run);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=attachment-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-run.js","sourceRoot":"","sources":["../../../../source/run/attachment-run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAyB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,8BAA8B,EAAiC,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,KAAK,UAAU,wBAAwB,CACnC,MAAwB,EACxB,WAAqC,EACrC,GAA6B;IAE7B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC7C,WAAW,EACX,KAAK;YACD,OAAO,0BAA0B,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC,CACJ,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACP,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;YAAS,CAAC;QACP,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,QAAqB,EACrB,YAAyC,EACzC,GAA6B;IAE7B,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,MAAM,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,8BAA8B,CAAC,MAAM,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3G,OAAO,MAAM,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC"}
|