@overkill-dev/run 0.0.64 → 0.0.66
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 +41 -0
- package/attachments/attachment-context.js.map +1 -0
- package/attachments/failure-artifact-stream.js +53 -0
- package/attachments/failure-artifact-stream.js.map +1 -0
- package/attachments/resource-failure-context.js +41 -0
- package/attachments/resource-failure-context.js.map +1 -0
- package/engine/case-execution.d.ts +1 -0
- package/engine/case-execution.d.ts.map +1 -1
- package/engine/case-execution.js +17 -29
- package/engine/case-execution.js.map +1 -1
- package/engine/recorded-assertion-failure.js +30 -0
- package/engine/recorded-assertion-failure.js.map +1 -0
- package/engine/run-artifact.d.ts +2 -2
- 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 +82 -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-version.js +31 -0
- package/package-version.js.map +1 -0
- package/package.json +29 -3
- 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/packages/simulation/transcript.entry-point.js +2 -0
- package/packages/simulation/transcript.entry-point.js.map +1 -1
- package/readme.md +41 -7
- package/reporters/human-reporter-rendering.js +59 -15
- package/reporters/human-reporter-rendering.js.map +1 -1
- package/resources/failure-artifacts.js +9 -0
- package/resources/failure-artifacts.js.map +1 -0
- 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/assertion-result-schema.js +69 -0
- package/run/assertion-result-schema.js.map +1 -0
- 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 +81 -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 +302 -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 +9 -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 +40 -0
- package/run/attachment-reporter.js.map +1 -0
- package/run/attachment-results.js +111 -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 +22 -0
- package/run/attachment-storage-session.js.map +1 -0
- package/run/attachment-storage-writer.js +128 -0
- package/run/attachment-storage-writer.js.map +1 -0
- package/run/attachment-store.js +287 -0
- package/run/attachment-store.js.map +1 -0
- package/run/attachment-wire-schema.js +159 -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 +119 -0
- package/run/attachment-writer.js.map +1 -0
- package/run/capability-policy-snapshots.d.ts +3 -2
- package/run/capability-policy-snapshots.d.ts.map +1 -1
- package/run/capability-policy-snapshots.js.map +1 -1
- package/run/capability-policy.js +48 -38
- package/run/capability-policy.js.map +1 -1
- package/run/child-process-protocol.js +17 -13
- package/run/child-process-protocol.js.map +1 -1
- package/run/child-process-shutdown.js +54 -0
- package/run/child-process-shutdown.js.map +1 -0
- package/run/collected-run-plan-schema.js +90 -0
- package/run/collected-run-plan-schema.js.map +1 -0
- package/run/coverage-config-schema.d.ts +6 -6
- package/run/coverage-runtime-source.js +5 -0
- package/run/coverage-runtime-source.js.map +1 -1
- package/run/coverage-source-selection.js +6 -2
- package/run/coverage-source-selection.js.map +1 -1
- package/run/current-process-run-orchestrator.js +7 -11
- package/run/current-process-run-orchestrator.js.map +1 -1
- package/run/diff-schema.js +78 -0
- package/run/diff-schema.js.map +1 -0
- package/run/failure-artifact-retention.js +76 -0
- package/run/failure-artifact-retention.js.map +1 -0
- package/run/node-child-process-starters.js +8 -1
- package/run/node-child-process-starters.js.map +1 -1
- package/run/node-process-policy-observation.js +43 -0
- package/run/node-process-policy-observation.js.map +1 -0
- package/run/permission-denial-runtime-policy.js +3 -0
- package/run/permission-denial-runtime-policy.js.map +1 -1
- package/run/reporter-event-schema.js +42 -0
- package/run/reporter-event-schema.js.map +1 -0
- package/run/resource-disposal-error.js +27 -0
- package/run/resource-disposal-error.js.map +1 -0
- package/run/resource-failure-preparation.js +86 -0
- package/run/resource-failure-preparation.js.map +1 -0
- package/run/resource-lifecycle-disposal.js +132 -0
- package/run/resource-lifecycle-disposal.js.map +1 -0
- package/run/resource-lifecycle-projection.js +6 -2
- package/run/resource-lifecycle-projection.js.map +1 -1
- package/run/resource-lifecycle-session-acquirer.js +31 -8
- 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 +2 -1
- package/run/resource-lifecycle-state.d.ts.map +1 -1
- package/run/resource-lifecycle-state.js +40 -1
- package/run/resource-lifecycle-state.js.map +1 -1
- package/run/resource-lifecycle.js +47 -107
- package/run/resource-lifecycle.js.map +1 -1
- package/run/retry-artifact-retention.js.map +1 -1
- package/run/run-artifact-id-schema.js +27 -0
- package/run/run-artifact-id-schema.js.map +1 -0
- package/run/run-artifact-schema.js +74 -0
- package/run/run-artifact-schema.js.map +1 -0
- package/run/run-collection-error-result.js +1 -1
- package/run/run-collection-error-result.js.map +1 -1
- package/run/run-command-schema.js +60 -0
- package/run/run-command-schema.js.map +1 -0
- package/run/run-config-schema.d.ts +25 -6
- 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-errors.d.ts +2 -0
- package/run/run-errors.d.ts.map +1 -1
- package/run/run-errors.js +17 -0
- package/run/run-errors.js.map +1 -1
- package/run/run-facts.js +1 -0
- package/run/run-facts.js.map +1 -1
- package/run/run-identity-schema.js +38 -0
- package/run/run-identity-schema.js.map +1 -0
- package/run/run-isolated-command.js +1 -0
- package/run/run-isolated-command.js.map +1 -1
- package/run/run-local-command.js +20 -4
- package/run/run-local-command.js.map +1 -1
- package/run/run-local-coverage.js +16 -3
- package/run/run-local-coverage.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-orchestrator.d.ts +2 -2
- package/run/run-orchestrator.d.ts.map +1 -1
- package/run/run-orchestrator.js +2 -2
- package/run/run-orchestrator.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-versions.js +1 -30
- package/run/run-record-versions.js.map +1 -1
- package/run/run-record.js.map +1 -1
- package/run/run-result-schema.js +65 -0
- package/run/run-result-schema.js.map +1 -0
- package/run/run-runtime-schema.js +64 -0
- package/run/run-runtime-schema.js.map +1 -0
- package/run/run-support.js +10 -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/serialized-value-schema.js +76 -0
- package/run/serialized-value-schema.js.map +1 -0
- package/run/simulation-witness.js +38 -0
- package/run/simulation-witness.js.map +1 -0
- package/run/supervised-child-failure.js +26 -0
- package/run/supervised-child-failure.js.map +1 -0
- package/run/supervised-child-process.d.ts +3 -0
- package/run/supervised-child-process.d.ts.map +1 -1
- package/run/supervised-child-process.js +2 -0
- package/run/supervised-child-process.js.map +1 -1
- package/run/supervised-child-transport.js +125 -0
- package/run/supervised-child-transport.js.map +1 -0
- package/run/supervised-child.entry-point.js +38 -33
- package/run/supervised-child.entry-point.js.map +1 -1
- package/run/supervised-child.js +13 -11
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-protocol-schema.js +42 -0
- package/run/supervised-protocol-schema.js.map +1 -0
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-collection.js +33 -30
- package/run/supervised-run-collection.js.map +1 -1
- package/run/supervised-run-runtime.js +36 -12
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run-state.js +43 -22
- package/run/supervised-run-state.js.map +1 -1
- package/run/supervised-run.js +80 -39
- 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 +12 -5
- 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-host-process.js +50 -20
- package/run/worker-pool-host-process.js.map +1 -1
- package/run/worker-pool-host-protocol-schema.js +80 -0
- package/run/worker-pool-host-protocol-schema.js.map +1 -0
- package/run/worker-pool-host-protocol.js.map +1 -1
- package/run/worker-pool-host-task.js +20 -11
- package/run/worker-pool-host-task.js.map +1 -1
- package/run/worker-pool-host-transport.js +96 -0
- package/run/worker-pool-host-transport.js.map +1 -0
- package/run/worker-pool-host.entry-point.js +37 -5
- package/run/worker-pool-host.entry-point.js.map +1 -1
- package/run/worker-pool-protocol.js +3 -0
- package/run/worker-pool-protocol.js.map +1 -1
- package/run/worker-pool-resource-lifecycle-execution.js +66 -1
- package/run/worker-pool-resource-lifecycle-execution.js.map +1 -1
- package/run/worker-pool-routing.js +2 -1
- package/run/worker-pool-routing.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 +20 -14
- package/run/worker-pool-task-events.js.map +1 -1
- package/run/worker-pool-task-schema.js +61 -0
- package/run/worker-pool-task-schema.js.map +1 -0
- package/run/worker-pool-task-validation.js +1 -0
- package/run/worker-pool-task-validation.js.map +1 -1
- package/run/worker-pool-worker-resources.js +68 -0
- package/run/worker-pool-worker-resources.js.map +1 -1
- package/run/worker-pool-worker.js +25 -8
- package/run/worker-pool-worker.js.map +1 -1
- package/sbom.cdx.json +5 -5
- package/stored-value.js +12 -0
- package/stored-value.js.map +1 -0
- package/transcript/http-transcript-artifact.js +2 -0
- package/transcript/http-transcript-artifact.js.map +1 -0
- package/transcript/transcript-store.d.ts +1 -1
- package/transcript/transcript-store.d.ts.map +1 -1
- package/transcript/transcript-store.js +29 -3
- package/transcript/transcript-store.js.map +1 -1
- package/run/node-process-capability-restrictions.js +0 -92
- package/run/node-process-capability-restrictions.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { diffPathSchema, diffSchema } from "./diff-schema.js";
|
|
3
|
+
import { serializedValueSchema } from "./serialized-value-schema.js";
|
|
4
|
+
import { runArtifactIdSchema } from "./run-artifact-id-schema.js";
|
|
5
|
+
import { sourceLocationsSchema } from "./run-identity-schema.js";
|
|
6
|
+
const thrownErrorSchema = z.strictObject({
|
|
7
|
+
message: z.string(),
|
|
8
|
+
name: z.string(),
|
|
9
|
+
stack: z.string().nullable(),
|
|
10
|
+
thrown: z.unknown()
|
|
11
|
+
});
|
|
12
|
+
const failedCheckSchema = z.lazy(function () {
|
|
13
|
+
const base = {
|
|
14
|
+
actual: serializedValueSchema,
|
|
15
|
+
expected: serializedValueSchema,
|
|
16
|
+
diff: diffSchema.nullable(),
|
|
17
|
+
id: z.string(),
|
|
18
|
+
path: diffPathSchema,
|
|
19
|
+
source: z.enum(['assert', 'require']),
|
|
20
|
+
sourceLocations: sourceLocationsSchema,
|
|
21
|
+
summary: z.string()
|
|
22
|
+
};
|
|
23
|
+
return z.discriminatedUnion('kind', [
|
|
24
|
+
z.strictObject({ ...base, kind: z.literal('leaf') }),
|
|
25
|
+
z.strictObject({
|
|
26
|
+
...base,
|
|
27
|
+
kind: z.literal('composite'),
|
|
28
|
+
children: z.tuple([failedCheckSchema]).rest(failedCheckSchema)
|
|
29
|
+
}),
|
|
30
|
+
z.strictObject({ ...base, kind: z.literal('foreign'), error: thrownErrorSchema, label: z.string() })
|
|
31
|
+
]);
|
|
32
|
+
});
|
|
33
|
+
const failureSchema = z.discriminatedUnion('kind', [
|
|
34
|
+
z.strictObject({ kind: z.literal('assertion'), checks: z.tuple([failedCheckSchema]).rest(failedCheckSchema) }),
|
|
35
|
+
z.strictObject({ kind: z.literal('body-error'), error: thrownErrorSchema }),
|
|
36
|
+
z.strictObject({ kind: z.literal('cleanup-error'), error: thrownErrorSchema }),
|
|
37
|
+
z.strictObject({
|
|
38
|
+
kind: z.literal('hedged-duplicate-conflict'),
|
|
39
|
+
artifact: runArtifactIdSchema,
|
|
40
|
+
summary: z.string()
|
|
41
|
+
}),
|
|
42
|
+
z.strictObject({ kind: z.literal('timeout'), deadlineMilliseconds: z.number(), elapsedMilliseconds: z.number() }),
|
|
43
|
+
z.strictObject({
|
|
44
|
+
kind: z.literal('test-contract'),
|
|
45
|
+
actual: z.unknown(),
|
|
46
|
+
code: z.enum([
|
|
47
|
+
'dead-builder-assertion',
|
|
48
|
+
'invalid-assertion-reference',
|
|
49
|
+
'invalid-composite-result',
|
|
50
|
+
'invalid-deep-assertion-operand',
|
|
51
|
+
'invalid-plan',
|
|
52
|
+
'invalid-timeout-control',
|
|
53
|
+
'invalid-require-reference',
|
|
54
|
+
'no-assertions',
|
|
55
|
+
'pending-in-flight-task',
|
|
56
|
+
'pending-async-assertion',
|
|
57
|
+
'plan-mismatch',
|
|
58
|
+
'unobserved-in-flight-task'
|
|
59
|
+
]),
|
|
60
|
+
expected: z.string(),
|
|
61
|
+
summary: z.string()
|
|
62
|
+
})
|
|
63
|
+
]);
|
|
64
|
+
export const testOutcomeSchema = z.discriminatedUnion('kind', [
|
|
65
|
+
z.strictObject({ kind: z.literal('pass') }),
|
|
66
|
+
z.strictObject({ kind: z.enum(['skip', 'inconclusive']), reason: z.string() }),
|
|
67
|
+
z.strictObject({ kind: z.literal('fail'), failures: z.tuple([failureSchema]).rest(failureSchema) })
|
|
68
|
+
]);
|
|
69
|
+
//# sourceMappingURL=assertion-result-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-result-schema.js","sourceRoot":"","sources":["../../../../source/run/assertion-result-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { connect } from 'node:net';
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
4
|
+
import { attachmentMaxFrameBytes, attachmentMaxPendingRequests } from "./attachment-protocol.js";
|
|
5
|
+
import { attachmentReplySchema } from "./attachment-wire-schema.js";
|
|
6
|
+
import { boundedAttachmentFrames } from "./attachment-frames.js";
|
|
7
|
+
const jsonEscapeExpansion = 6;
|
|
8
|
+
function attachmentChannelFail(state, error) {
|
|
9
|
+
const { failure, pending } = state;
|
|
10
|
+
failure.write(error);
|
|
11
|
+
for (const request of pending.values()) {
|
|
12
|
+
request.reject(error);
|
|
13
|
+
}
|
|
14
|
+
pending.clear();
|
|
15
|
+
}
|
|
16
|
+
function attachmentChannelReply(state, line) {
|
|
17
|
+
const { pending, socket } = state;
|
|
18
|
+
const value = JSON.parse(line);
|
|
19
|
+
const reply = attachmentReplySchema.parse(value);
|
|
20
|
+
pending.get(reply.request)?.resolve(reply.result);
|
|
21
|
+
pending.delete(reply.request);
|
|
22
|
+
if (pending.size === 0) {
|
|
23
|
+
socket.unref();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function attachmentChannelReceive(state, line) {
|
|
27
|
+
const { socket } = state;
|
|
28
|
+
try {
|
|
29
|
+
attachmentChannelReply(state, line);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
attachmentChannelFail(state, error instanceof Error ? error : new Error('Invalid attachment reply.'));
|
|
33
|
+
socket.destroy();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function attachmentChannelObserve(state) {
|
|
37
|
+
const { endpoint, socket } = state;
|
|
38
|
+
const frames = boundedAttachmentFrames(endpoint.limits.maxInlineBytes * jsonEscapeExpansion + attachmentMaxFrameBytes);
|
|
39
|
+
const lines = createInterface({ input: socket.pipe(frames), crlfDelay: Number.POSITIVE_INFINITY });
|
|
40
|
+
frames.on('error', function (error) {
|
|
41
|
+
attachmentChannelFail(state, error);
|
|
42
|
+
socket.destroy();
|
|
43
|
+
});
|
|
44
|
+
lines.on('error', function (error) {
|
|
45
|
+
attachmentChannelFail(state, error);
|
|
46
|
+
socket.destroy();
|
|
47
|
+
});
|
|
48
|
+
socket.on('error', function (error) {
|
|
49
|
+
attachmentChannelFail(state, error);
|
|
50
|
+
});
|
|
51
|
+
socket.on('close', function () {
|
|
52
|
+
attachmentChannelFail(state, new Error('Attachment execution boundary disconnected.'));
|
|
53
|
+
lines.close();
|
|
54
|
+
});
|
|
55
|
+
lines.on('line', function (line) {
|
|
56
|
+
attachmentChannelReceive(state, line);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function attachmentChannelClose(state) {
|
|
60
|
+
const { socket } = state;
|
|
61
|
+
socket.end();
|
|
62
|
+
}
|
|
63
|
+
async function sendAttachmentRequest(state, operation) {
|
|
64
|
+
const { sequence, pending, socket, endpoint } = state;
|
|
65
|
+
if (pending.size >= attachmentMaxPendingRequests) {
|
|
66
|
+
throw new Error('Attachment transport request limit exceeded.');
|
|
67
|
+
}
|
|
68
|
+
const request = sequence.read();
|
|
69
|
+
sequence.write(request + 1);
|
|
70
|
+
const response = Promise.withResolvers();
|
|
71
|
+
pending.set(request, response);
|
|
72
|
+
socket.ref();
|
|
73
|
+
socket.write(`${JSON.stringify({ request, token: endpoint.token, operation })}\n`);
|
|
74
|
+
return response.promise;
|
|
75
|
+
}
|
|
76
|
+
async function attachmentChannelExchange(state, operation) {
|
|
77
|
+
await state.ready;
|
|
78
|
+
const unavailable = state.failure.read();
|
|
79
|
+
if (unavailable !== null) {
|
|
80
|
+
throw unavailable;
|
|
81
|
+
}
|
|
82
|
+
return await sendAttachmentRequest(state, operation);
|
|
83
|
+
}
|
|
84
|
+
function observeAttachmentDisconnect(state, observer) {
|
|
85
|
+
state.socket.once('close', observer);
|
|
86
|
+
}
|
|
87
|
+
export function createAttachmentConnection(endpoint) {
|
|
88
|
+
const socket = connect({ host: '127.0.0.1', port: endpoint.port });
|
|
89
|
+
const pending = new Map();
|
|
90
|
+
const sequence = createStoredRunValue(0);
|
|
91
|
+
const failure = createStoredRunValue(null);
|
|
92
|
+
const ready = new Promise(function (resolve, reject) {
|
|
93
|
+
socket.once('connect', function () {
|
|
94
|
+
socket.unref();
|
|
95
|
+
resolve();
|
|
96
|
+
});
|
|
97
|
+
socket.once('error', reject);
|
|
98
|
+
});
|
|
99
|
+
const state = { endpoint, socket, pending, sequence, failure, ready };
|
|
100
|
+
attachmentChannelObserve(state);
|
|
101
|
+
return {
|
|
102
|
+
ready: state.ready,
|
|
103
|
+
observeDisconnect: observeAttachmentDisconnect.bind(null, state),
|
|
104
|
+
close: attachmentChannelClose.bind(null, state),
|
|
105
|
+
exchange: attachmentChannelExchange.bind(null, state)
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=attachment-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-connection.js","sourceRoot":"","sources":["../../../../source/run/attachment-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
const coordinatorContext = new AsyncLocalStorage();
|
|
3
|
+
export function currentAttachmentCoordinator() {
|
|
4
|
+
return coordinatorContext.getStore() ?? null;
|
|
5
|
+
}
|
|
6
|
+
export async function runWithAttachmentCoordinator(coordinator, run) {
|
|
7
|
+
return await coordinatorContext.run(coordinator, run);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=attachment-coordinator-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-coordinator-context.js","sourceRoot":"","sources":["../../../../source/run/attachment-coordinator-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAwBrD,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAyB,CAAC;AAE1E,MAAM,UAAU,4BAA4B;IACxC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAC9C,WAAkC,EAClC,GAAyB;IAEzB,OAAO,MAAM,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
3
|
+
import { attachmentArtifacts, attachmentMatchesAttempt, resultWithRuntimeAttachments } from "./attachment-results.js";
|
|
4
|
+
import { createAttachmentExecution } from "./attachment-execution.js";
|
|
5
|
+
function attachmentRunCoordinatorBranchEndpoint(state, branch, retain) {
|
|
6
|
+
const { branches, store } = state;
|
|
7
|
+
const id = branches.get(branch) ?? randomUUID();
|
|
8
|
+
branches.set(branch, id);
|
|
9
|
+
store.registerBranch(id, retain);
|
|
10
|
+
return { ...state.endpoint, branch: id };
|
|
11
|
+
}
|
|
12
|
+
function attachmentRunCoordinatorBranchArtifacts(state, branch) {
|
|
13
|
+
const { branches, store } = state;
|
|
14
|
+
const id = branches.get(branch);
|
|
15
|
+
return id === undefined ? [] : store.conflictArtifacts(id);
|
|
16
|
+
}
|
|
17
|
+
function attachmentRunCoordinatorCaseArtifacts(state, work, attempt, branch) {
|
|
18
|
+
const { store } = state;
|
|
19
|
+
const artifacts = branch === null
|
|
20
|
+
? store.branchArtifacts(null)
|
|
21
|
+
: store.branchArtifacts(state.branches.get(branch) ?? null);
|
|
22
|
+
return artifacts.filter(function belongsToAttempt(artifact) {
|
|
23
|
+
return attachmentMatchesAttempt(artifact, work, attempt);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function attachmentRunCoordinatorFinalize(state, result) {
|
|
27
|
+
const { finalized, execution, server, store, resolved } = state;
|
|
28
|
+
if (finalized.read() !== null) {
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
const localErrors = await execution.finish();
|
|
32
|
+
store.settleResult(result);
|
|
33
|
+
const owners = await server.finish();
|
|
34
|
+
const final = resultWithRuntimeAttachments(result, store.selectedArtifacts(), {
|
|
35
|
+
localErrors,
|
|
36
|
+
owners,
|
|
37
|
+
policy: resolved.facts.execution.retries?.artifacts ?? 'first-failure-and-final',
|
|
38
|
+
retainsBranch: store.retainsBranch
|
|
39
|
+
});
|
|
40
|
+
finalized.write(final);
|
|
41
|
+
await store.prune(attachmentArtifacts(final.artifacts));
|
|
42
|
+
return final;
|
|
43
|
+
}
|
|
44
|
+
async function attachmentRunCoordinatorClose(state) {
|
|
45
|
+
const { execution, server } = state;
|
|
46
|
+
await execution.finish();
|
|
47
|
+
await server.finish();
|
|
48
|
+
}
|
|
49
|
+
export function createAttachmentRunCoordinator(storage) {
|
|
50
|
+
const { store, server, resolved } = storage;
|
|
51
|
+
const branches = new WeakMap();
|
|
52
|
+
const execution = createAttachmentExecution(async function (operation) {
|
|
53
|
+
return store.exchange('local', operation);
|
|
54
|
+
}, server.endpoint.limits);
|
|
55
|
+
const endpoint = server.endpoint;
|
|
56
|
+
const finalized = createStoredRunValue(null);
|
|
57
|
+
const state = {
|
|
58
|
+
storage,
|
|
59
|
+
store,
|
|
60
|
+
server,
|
|
61
|
+
resolved,
|
|
62
|
+
branches,
|
|
63
|
+
execution,
|
|
64
|
+
endpoint,
|
|
65
|
+
finalized
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
settleAttempt(work, attempt, verdict, branch) {
|
|
69
|
+
store.settleAttempt(work, attempt, verdict, branch === null ? null : branches.get(branch) ?? null);
|
|
70
|
+
},
|
|
71
|
+
artifacts: store.selectedArtifacts,
|
|
72
|
+
execution: state.execution,
|
|
73
|
+
endpoint: state.endpoint,
|
|
74
|
+
branchEndpoint: attachmentRunCoordinatorBranchEndpoint.bind(null, state),
|
|
75
|
+
branchArtifacts: attachmentRunCoordinatorBranchArtifacts.bind(null, state),
|
|
76
|
+
caseArtifacts: attachmentRunCoordinatorCaseArtifacts.bind(null, state),
|
|
77
|
+
finalize: attachmentRunCoordinatorFinalize.bind(null, state),
|
|
78
|
+
close: attachmentRunCoordinatorClose.bind(null, state)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=attachment-coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-coordinator.js","sourceRoot":"","sources":["../../../../source/run/attachment-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { workIdentityKey } from "../engine/identity.js";
|
|
2
|
+
import { collectedRunCaseEntries } from "./collected-run-plan.js";
|
|
3
|
+
export function runHasAttachmentScopes(resolved) {
|
|
4
|
+
if (resolved.facts.execution.testFamily !== 'integration' || resolved.facts.cases.length === 0) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
const selected = new Set(resolved.facts.cases.map(function selectedWork(entry) {
|
|
8
|
+
return workIdentityKey(entry.workId);
|
|
9
|
+
}));
|
|
10
|
+
const cases = resolved.plan.kind === 'local'
|
|
11
|
+
? resolved.plan.testPlan.cases.map(function localCase(testCase) {
|
|
12
|
+
return { testCase, workId: testCase.workId };
|
|
13
|
+
})
|
|
14
|
+
: collectedRunCaseEntries(resolved.plan.collectedPlan);
|
|
15
|
+
return cases.some(function hasAttachmentScope(entry) {
|
|
16
|
+
return selected.has(workIdentityKey(entry.workId)) &&
|
|
17
|
+
(entry.testCase.resourceAttachments.resourceGraph.length > 0 ||
|
|
18
|
+
entry.testCase.resourceAttachments.runtimeGraphs.length > 0);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=attachment-eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-eligibility.js","sourceRoot":"","sources":["../../../../source/run/attachment-eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,UAAU,sBAAsB,CAAC,QAAqB;IACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK;QACzE,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;QACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,QAAQ;YAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjD,CAAC,CAAC;QACF,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,kBAAkB,CAAC,KAAK;QAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBACxD,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { workIdentityKey } from "../engine/identity.js";
|
|
3
|
+
import { AttachmentOperationError, createAttachmentFailure } from "./attachment-failure.js";
|
|
4
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
5
|
+
import { snapshotAttachmentJson } from "./attachment-json.js";
|
|
6
|
+
import { createAttachmentStream, copyAttachmentFile } from "./attachment-writer.js";
|
|
7
|
+
function createAttachmentAttempt(work, attempt) {
|
|
8
|
+
const owner = { attempt, kind: 'case', work };
|
|
9
|
+
const active = createStoredRunValue(true);
|
|
10
|
+
function end() {
|
|
11
|
+
active.write(false);
|
|
12
|
+
}
|
|
13
|
+
function isActive() {
|
|
14
|
+
return active.read();
|
|
15
|
+
}
|
|
16
|
+
return { owner, end, isActive };
|
|
17
|
+
}
|
|
18
|
+
function ownerKey(owner) {
|
|
19
|
+
return owner.kind === 'run' ? 'run' : `${workIdentityKey(owner.work)}:${owner.attempt.index}`;
|
|
20
|
+
}
|
|
21
|
+
const maxFailuresPerOwner = 100;
|
|
22
|
+
function attachmentExecutionSessionFail(state, rejection) {
|
|
23
|
+
const { owner, drift } = rejection;
|
|
24
|
+
const { failures } = state;
|
|
25
|
+
const error = createAttachmentFailure(rejection, state.currentBranch.getStore() ?? null);
|
|
26
|
+
const key = ownerKey(drift ? { kind: 'run' } : owner);
|
|
27
|
+
const errors = failures.get(key) ?? [];
|
|
28
|
+
if (errors.length < maxFailuresPerOwner) {
|
|
29
|
+
state.failures.set(key, [...errors, error]);
|
|
30
|
+
}
|
|
31
|
+
return error;
|
|
32
|
+
}
|
|
33
|
+
function attachmentExecutionSessionVerify(state, window) {
|
|
34
|
+
if (state.closed.read()) {
|
|
35
|
+
throw attachmentExecutionSessionFail(state, {
|
|
36
|
+
owner: window?.owner ?? { kind: 'run' },
|
|
37
|
+
message: 'Attachment escaped its integration run.',
|
|
38
|
+
reason: 'expired-run',
|
|
39
|
+
drift: true
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (window?.isActive() === false) {
|
|
43
|
+
throw attachmentExecutionSessionFail(state, {
|
|
44
|
+
owner: window.owner,
|
|
45
|
+
message: 'Attachment escaped its test attempt.',
|
|
46
|
+
reason: 'expired-attempt',
|
|
47
|
+
drift: true
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function attachmentExecutionSessionTransport(state, operation, owner) {
|
|
52
|
+
try {
|
|
53
|
+
return await state.exchange(operation);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw attachmentExecutionSessionFail(state, {
|
|
57
|
+
owner,
|
|
58
|
+
message: error instanceof Error ? error.message : 'Attachment transport failed.',
|
|
59
|
+
reason: 'transport',
|
|
60
|
+
drift: false
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function attachmentExecutionSessionSend(state, operation, owner) {
|
|
65
|
+
const response = await attachmentExecutionSessionTransport(state, operation, owner);
|
|
66
|
+
if (response.kind === 'error') {
|
|
67
|
+
throw attachmentExecutionSessionFail(state, {
|
|
68
|
+
owner,
|
|
69
|
+
message: response.message,
|
|
70
|
+
reason: response.reason,
|
|
71
|
+
drift: false
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
function preparedAttemptWindow(state, condition) {
|
|
77
|
+
const window = state.attempts.get(ownerKey({ kind: 'case', work: condition.work, attempt: condition.attempt }));
|
|
78
|
+
if (window === undefined) {
|
|
79
|
+
throw attachmentExecutionSessionFail(state, {
|
|
80
|
+
owner: { kind: 'case', work: condition.work, attempt: condition.attempt },
|
|
81
|
+
message: 'Failure artifact escaped its test attempt.',
|
|
82
|
+
reason: 'expired-attempt',
|
|
83
|
+
drift: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
attachmentExecutionSessionVerify(state, window);
|
|
87
|
+
return window;
|
|
88
|
+
}
|
|
89
|
+
function activeAttachmentWindow(state) {
|
|
90
|
+
const condition = state.preparation?.condition;
|
|
91
|
+
if (condition?.kind === 'attempt') {
|
|
92
|
+
return preparedAttemptWindow(state, condition);
|
|
93
|
+
}
|
|
94
|
+
const window = condition?.kind === 'resource' ? undefined : state.currentAttempt.getStore();
|
|
95
|
+
attachmentExecutionSessionVerify(state, window);
|
|
96
|
+
return window;
|
|
97
|
+
}
|
|
98
|
+
async function attachmentExecutionSessionOpen(state, metadata, kind, producer) {
|
|
99
|
+
const { currentBranch, writers } = state;
|
|
100
|
+
const window = activeAttachmentWindow(state);
|
|
101
|
+
const owner = window?.owner ?? { kind: 'run' };
|
|
102
|
+
const response = await attachmentExecutionSessionSend(state, {
|
|
103
|
+
branch: currentBranch.getStore() ?? null,
|
|
104
|
+
contentKind: kind,
|
|
105
|
+
...state.preparation === null
|
|
106
|
+
? { kind: 'open' }
|
|
107
|
+
: { kind: 'prepare', ...state.preparation },
|
|
108
|
+
metadata,
|
|
109
|
+
owner,
|
|
110
|
+
producer
|
|
111
|
+
}, owner);
|
|
112
|
+
if (response.kind !== 'opened') {
|
|
113
|
+
throw attachmentExecutionSessionFail(state, {
|
|
114
|
+
owner,
|
|
115
|
+
message: 'Attachment open returned an invalid reply.',
|
|
116
|
+
reason: 'protocol',
|
|
117
|
+
drift: false
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const token = Symbol('attachment-writer');
|
|
121
|
+
const writer = createAttachmentStream({
|
|
122
|
+
fail(message, reason) {
|
|
123
|
+
return attachmentExecutionSessionFail(state, {
|
|
124
|
+
owner,
|
|
125
|
+
message,
|
|
126
|
+
reason,
|
|
127
|
+
drift: false
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
owner,
|
|
131
|
+
release() {
|
|
132
|
+
writers.delete(token);
|
|
133
|
+
},
|
|
134
|
+
async send(operation) {
|
|
135
|
+
return attachmentExecutionSessionSend(state, operation, owner);
|
|
136
|
+
},
|
|
137
|
+
verify() {
|
|
138
|
+
attachmentExecutionSessionVerify(state, window);
|
|
139
|
+
}
|
|
140
|
+
}, response.writer, kind);
|
|
141
|
+
writers.set(token, writer);
|
|
142
|
+
return writer;
|
|
143
|
+
}
|
|
144
|
+
function attachmentJsonLimit(state) {
|
|
145
|
+
return state.preparation?.subtype === 'witness' ? state.maxArtifactBytes : state.maxInlineBytes;
|
|
146
|
+
}
|
|
147
|
+
function attachmentExecutionSessionJsonSnapshot(state, value) {
|
|
148
|
+
const { currentAttempt } = state;
|
|
149
|
+
const limit = attachmentJsonLimit(state);
|
|
150
|
+
try {
|
|
151
|
+
return snapshotAttachmentJson(value, limit);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
const owner = currentAttempt.getStore()?.owner ?? { kind: 'run' };
|
|
155
|
+
throw attachmentExecutionSessionFail(state, {
|
|
156
|
+
owner,
|
|
157
|
+
message: error instanceof Error ? error.message : 'Invalid JSON attachment.',
|
|
158
|
+
reason: 'invalid-json',
|
|
159
|
+
drift: false
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function attachmentExecutionSessionJson(state, metadata, value, producer) {
|
|
164
|
+
activeAttachmentWindow(state);
|
|
165
|
+
const snapshot = attachmentExecutionSessionJsonSnapshot(state, value);
|
|
166
|
+
const writer = await attachmentExecutionSessionOpen(state, metadata, 'json', producer);
|
|
167
|
+
if (snapshot === null) {
|
|
168
|
+
await writer.omit();
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
await writer.write(snapshot.encoded);
|
|
172
|
+
}
|
|
173
|
+
return await writer.close();
|
|
174
|
+
}
|
|
175
|
+
async function attachmentExecutionSessionFile(state, metadata, filePath, producer) {
|
|
176
|
+
const writer = await attachmentExecutionSessionOpen(state, metadata, 'binary', producer);
|
|
177
|
+
try {
|
|
178
|
+
await copyAttachmentFile(writer, filePath);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
await writer.finish('write-error');
|
|
182
|
+
if (error instanceof AttachmentOperationError) {
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
throw attachmentExecutionSessionFail(state, {
|
|
186
|
+
owner: writer.owner,
|
|
187
|
+
message: error instanceof Error ? error.message : 'Attachment file read failed.',
|
|
188
|
+
reason: 'file-read',
|
|
189
|
+
drift: false
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
return await writer.close();
|
|
193
|
+
}
|
|
194
|
+
function attachmentExecutionSessionCapabilities(state, producer) {
|
|
195
|
+
return {
|
|
196
|
+
async file(metadata, filePath) {
|
|
197
|
+
return attachmentExecutionSessionFile(state, metadata, filePath, producer);
|
|
198
|
+
},
|
|
199
|
+
async json(metadata, value) {
|
|
200
|
+
return attachmentExecutionSessionJson(state, metadata, value, producer);
|
|
201
|
+
},
|
|
202
|
+
async open(metadata) {
|
|
203
|
+
return attachmentExecutionSessionOpen(state, metadata, metadata.kind, producer);
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
async function attachmentExecutionSessionFinishOwner(state, owner) {
|
|
208
|
+
const { writers } = state;
|
|
209
|
+
const selected = Array.from(writers.values()).filter(function ownedWriter(writer) {
|
|
210
|
+
return ownerKey(writer.owner) === ownerKey(owner);
|
|
211
|
+
});
|
|
212
|
+
await Promise.allSettled(selected.map(async function finishOwnedWriter(writer) {
|
|
213
|
+
await writer.finish('unclosed');
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
function attachmentExecutionSessionTakeErrors(state, owner) {
|
|
217
|
+
const { failures } = state;
|
|
218
|
+
const key = ownerKey(owner);
|
|
219
|
+
const errors = failures.get(key) ?? [];
|
|
220
|
+
failures.delete(key);
|
|
221
|
+
return errors.flatMap(function unreportedError(error) {
|
|
222
|
+
const failure = error.take();
|
|
223
|
+
return failure === null ? [] : [failure];
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
async function attachmentExecutionSessionFinish(state) {
|
|
227
|
+
state.closed.write(true);
|
|
228
|
+
await attachmentExecutionSessionFinishOwner(state, { kind: 'run' });
|
|
229
|
+
return attachmentExecutionSessionTakeErrors(state, { kind: 'run' });
|
|
230
|
+
}
|
|
231
|
+
async function attachmentExecutionSessionOwnedAttempt(state, window, run) {
|
|
232
|
+
try {
|
|
233
|
+
return await run();
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
window.end();
|
|
237
|
+
await attachmentExecutionSessionFinishOwner(state, window.owner);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async function attachmentExecutionSessionRunAttempt(state, work, attempt, run) {
|
|
241
|
+
const { currentAttempt } = state;
|
|
242
|
+
const existing = currentAttempt.getStore();
|
|
243
|
+
if (existing?.isActive() === true && ownerKey(existing.owner) === ownerKey({ kind: 'case', work, attempt })) {
|
|
244
|
+
return await run();
|
|
245
|
+
}
|
|
246
|
+
const window = createAttachmentAttempt(work, attempt);
|
|
247
|
+
state.attempts.set(ownerKey(window.owner), window);
|
|
248
|
+
return await currentAttempt.run(window, async function () {
|
|
249
|
+
return attachmentExecutionSessionOwnedAttempt(state, window, run);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
async function attachmentExecutionSessionRunBranch(state, branch, run) {
|
|
253
|
+
const { currentBranch } = state;
|
|
254
|
+
return await currentBranch.run(branch, run);
|
|
255
|
+
}
|
|
256
|
+
export function createAttachmentExecution(exchange, limits) {
|
|
257
|
+
const currentAttempt = new AsyncLocalStorage();
|
|
258
|
+
const currentBranch = new AsyncLocalStorage();
|
|
259
|
+
const writers = new Map();
|
|
260
|
+
const failures = new Map();
|
|
261
|
+
const state = {
|
|
262
|
+
closed: createStoredRunValue(false),
|
|
263
|
+
exchange,
|
|
264
|
+
maxInlineBytes: limits.maxInlineBytes,
|
|
265
|
+
maxArtifactBytes: limits.maxArtifactBytes,
|
|
266
|
+
preparation: null,
|
|
267
|
+
attempts: new Map(),
|
|
268
|
+
currentAttempt,
|
|
269
|
+
currentBranch,
|
|
270
|
+
writers,
|
|
271
|
+
failures
|
|
272
|
+
};
|
|
273
|
+
const context = {
|
|
274
|
+
limits,
|
|
275
|
+
forProducer: attachmentExecutionSessionCapabilities.bind(null, state),
|
|
276
|
+
prepareForProducer(producer, condition, source, subtype) {
|
|
277
|
+
return attachmentExecutionSessionCapabilities({ ...state, preparation: { condition, source, subtype } }, producer);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
return {
|
|
281
|
+
context,
|
|
282
|
+
async markResourceFailure(boundary) {
|
|
283
|
+
await attachmentExecutionSessionSend(state, { kind: 'resource-failure', boundary }, { kind: 'run' });
|
|
284
|
+
},
|
|
285
|
+
async registerResourceConsumers(boundary, consumers) {
|
|
286
|
+
for (const work of consumers) {
|
|
287
|
+
await attachmentExecutionSessionSend(state, { kind: 'resource-consumer', boundary, work }, {
|
|
288
|
+
kind: 'run'
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
takeErrors: attachmentExecutionSessionTakeErrors.bind(null, state),
|
|
293
|
+
finish: attachmentExecutionSessionFinish.bind(null, state),
|
|
294
|
+
async runAttempt(work, attempt, run) {
|
|
295
|
+
return await attachmentExecutionSessionRunAttempt(state, work, attempt, run);
|
|
296
|
+
},
|
|
297
|
+
async runBranch(branch, run) {
|
|
298
|
+
return await attachmentExecutionSessionRunBranch(state, branch, run);
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=attachment-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-execution.js","sourceRoot":"","sources":["../../../../source/run/attachment-execution.ts"],"names":[],"mappings":"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"}
|