@overkill-dev/run 0.0.63 → 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/assertion-protocol/source-location-forwarding.js +14 -2
- package/assertion-protocol/source-location-forwarding.js.map +1 -1
- package/assertion-protocol/source-location.js +1 -0
- package/assertion-protocol/source-location.js.map +1 -1
- package/attachments/attachment-context.js +31 -0
- package/attachments/attachment-context.js.map +1 -0
- package/engine/async-leak-diagnostics.js +9 -9
- package/engine/async-leak-diagnostics.js.map +1 -1
- package/engine/case-attempt-execution.js +191 -0
- package/engine/case-attempt-execution.js.map +1 -0
- package/engine/case-execution.d.ts +5 -3
- package/engine/case-execution.d.ts.map +1 -1
- package/engine/case-execution.js +25 -24
- package/engine/case-execution.js.map +1 -1
- package/engine/coverage-artifact.d.ts +1 -0
- package/engine/coverage-artifact.d.ts.map +1 -1
- package/engine/execution-async-leak-policy.js +3 -10
- package/engine/execution-async-leak-policy.js.map +1 -1
- package/engine/execution-global-error-observer.d.ts +2 -1
- package/engine/execution-global-error-observer.d.ts.map +1 -1
- package/engine/execution-global-error-observer.js +19 -15
- package/engine/execution-global-error-observer.js.map +1 -1
- package/engine/execution-options.d.ts +4 -1
- package/engine/execution-options.d.ts.map +1 -1
- package/engine/execution-options.js +7 -2
- package/engine/execution-options.js.map +1 -1
- package/engine/execution-resource-budget-tracking.js.map +1 -1
- package/engine/execution-resource-tracked-cases.js.map +1 -1
- package/engine/execution-result.js.map +1 -1
- package/engine/execution-supervision-state.js.map +1 -1
- package/engine/execution-supervision.d.ts.map +1 -1
- package/engine/execution-supervision.js +50 -33
- package/engine/execution-supervision.js.map +1 -1
- package/engine/execution-test-plan-cases.js +6 -126
- package/engine/execution-test-plan-cases.js.map +1 -1
- package/engine/execution-test-plan-resource-usage.js.map +1 -1
- package/engine/execution.js +3 -3
- package/engine/execution.js.map +1 -1
- package/engine/identity.d.ts +3 -0
- package/engine/identity.d.ts.map +1 -1
- package/engine/reporter-dispatcher.js +1 -0
- package/engine/reporter-dispatcher.js.map +1 -1
- package/engine/reporter-event-queue.js.map +1 -1
- package/engine/reporter.d.ts +2 -1
- package/engine/reporter.d.ts.map +1 -1
- package/engine/reporter.js.map +1 -1
- package/engine/resource-usage.d.ts +22 -0
- package/engine/resource-usage.d.ts.map +1 -0
- package/engine/retry-policy.d.ts +4 -0
- package/engine/retry-policy.d.ts.map +1 -0
- package/engine/retry-policy.js +22 -0
- package/engine/retry-policy.js.map +1 -0
- package/engine/run-artifact.d.ts +45 -0
- package/engine/run-artifact.d.ts.map +1 -0
- package/engine/run-result.d.ts +22 -53
- package/engine/run-result.d.ts.map +1 -1
- package/engine/run-result.js +14 -0
- package/engine/run-result.js.map +1 -1
- package/engine/runner-error-reporting.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/engine/test-attempt-history.js +24 -0
- package/engine/test-attempt-history.js.map +1 -0
- package/package.json +25 -6
- 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 +3 -1
- package/packages/run/config.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.d.ts +3 -1
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/packages/run/transcript-store.entry-point.d.ts +3 -0
- package/packages/run/transcript-store.entry-point.d.ts.map +1 -0
- package/packages/run/transcript-store.entry-point.js +2 -0
- package/packages/run/transcript-store.entry-point.js.map +1 -0
- package/packages/simulation/transcript.entry-point.js +2 -0
- package/packages/simulation/transcript.entry-point.js.map +1 -0
- package/readme.md +69 -2
- package/reporters/human-reporter-rendering.js +25 -2
- package/reporters/human-reporter-rendering.js.map +1 -1
- package/reporters/line-reporter.js +6 -1
- package/reporters/line-reporter.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/resources.d.ts.map +1 -1
- package/resources/resources.js +3 -6
- package/resources/resources.js.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/capability-policy.js +10 -5
- package/run/capability-policy.js.map +1 -1
- package/run/collected-run-plan.js.map +1 -1
- package/run/coverage-config-schema.d.ts +4 -4
- package/run/coverage-loaded-sources.js +112 -0
- package/run/coverage-loaded-sources.js.map +1 -0
- package/run/coverage-native-data.js +18 -0
- package/run/coverage-native-data.js.map +1 -0
- package/run/coverage-paths.js +45 -4
- package/run/coverage-paths.js.map +1 -1
- package/run/coverage-reporting.js +104 -8
- package/run/coverage-reporting.js.map +1 -1
- package/run/coverage-run-record.js +50 -0
- package/run/coverage-run-record.js.map +1 -0
- package/run/coverage-runtime-source.js +37 -0
- package/run/coverage-runtime-source.js.map +1 -0
- package/run/coverage-session.js +344 -6
- package/run/coverage-session.js.map +1 -1
- package/run/coverage-source-map.js +125 -0
- package/run/coverage-source-map.js.map +1 -0
- package/run/coverage-source-selection.js +120 -0
- package/run/coverage-source-selection.js.map +1 -0
- package/run/duration-history.d.ts.map +1 -1
- package/run/duration-history.js +1 -0
- package/run/duration-history.js.map +1 -1
- package/run/node-run-execution.js +25 -0
- package/run/node-run-execution.js.map +1 -0
- package/run/node-runtime-state-store.js +38 -0
- package/run/node-runtime-state-store.js.map +1 -0
- package/run/node-worker-pool-factory.js +0 -31
- package/run/node-worker-pool-factory.js.map +1 -1
- package/run/path-containment.js +6 -1
- package/run/path-containment.js.map +1 -1
- package/run/permission-denial-runtime-policy.js +21 -13
- package/run/permission-denial-runtime-policy.js.map +1 -1
- package/run/recorded-coverage-run.js +45 -0
- package/run/recorded-coverage-run.js.map +1 -0
- package/run/recorded-coverage-session.js +50 -0
- package/run/recorded-coverage-session.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 +13 -6
- 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 +4 -2
- package/run/resource-lifecycle-state.d.ts.map +1 -1
- package/run/resource-lifecycle-state.js +19 -3
- package/run/resource-lifecycle-state.js.map +1 -1
- package/run/resource-lifecycle.js +57 -13
- package/run/resource-lifecycle.js.map +1 -1
- package/run/resource-usage.js.map +1 -1
- package/run/retry-artifact-retention.js +37 -0
- package/run/retry-artifact-retention.js.map +1 -0
- package/run/run-config-schema.d.ts +48 -4
- package/run/run-config-schema.d.ts.map +1 -1
- package/run/run-config-schema.js +18 -0
- package/run/run-config-schema.js.map +1 -1
- package/run/run-config.d.ts +9 -6
- package/run/run-config.d.ts.map +1 -1
- package/run/run-config.js +6 -1
- package/run/run-config.js.map +1 -1
- package/run/run-coverage.js +5 -2
- package/run/run-coverage.js.map +1 -1
- package/run/run-engine-primitives.d.ts +13 -1
- package/run/run-engine-primitives.d.ts.map +1 -1
- package/run/run-errors.d.ts.map +1 -1
- package/run/run-errors.js +1 -0
- package/run/run-errors.js.map +1 -1
- package/run/run-execution-config.d.ts +5 -0
- package/run/run-execution-config.d.ts.map +1 -1
- package/run/run-facts.js +3 -0
- package/run/run-facts.js.map +1 -1
- package/run/run-isolated-command.js +3 -0
- package/run/run-isolated-command.js.map +1 -1
- package/run/run-local-command.js +12 -83
- package/run/run-local-command.js.map +1 -1
- package/run/run-local-coverage.js +72 -0
- package/run/run-local-coverage.js.map +1 -0
- package/run/run-local-execution.js +3 -1
- package/run/run-local-execution.js.map +1 -1
- package/run/run-local-resolution.js +6 -3
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-orchestrator-dependencies.d.ts +1 -1
- package/run/run-orchestrator-dependencies.d.ts.map +1 -1
- package/run/run-orchestrator.d.ts.map +1 -1
- package/run/run-orchestrator.js +6 -18
- package/run/run-orchestrator.js.map +1 -1
- package/run/run-record-error.js +26 -0
- package/run/run-record-error.js.map +1 -0
- package/run/run-record-input.js +34 -0
- package/run/run-record-input.js.map +1 -0
- package/run/run-record-outcomes.d.ts +49 -0
- package/run/run-record-outcomes.d.ts.map +1 -0
- package/run/run-record-result.js +58 -0
- package/run/run-record-result.js.map +1 -0
- package/run/run-record-storage.js +51 -0
- package/run/run-record-storage.js.map +1 -0
- package/run/run-record-types.d.ts +73 -0
- package/run/run-record-types.d.ts.map +1 -0
- package/run/run-record-versions.js +51 -0
- package/run/run-record-versions.js.map +1 -0
- package/run/run-record.js +48 -0
- package/run/run-record.js.map +1 -0
- package/run/run-result-reporting.js +16 -0
- package/run/run-result-reporting.js.map +1 -0
- package/run/run-supervised-finalization.js +8 -0
- package/run/run-supervised-finalization.js.map +1 -0
- package/run/run-supervised-process.js +34 -33
- package/run/run-supervised-process.js.map +1 -1
- package/run/run-support.js +23 -9
- package/run/run-support.js.map +1 -1
- package/run/run-types.d.ts +7 -5
- 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-test-plan.js +2 -0
- package/run/supervised-child-test-plan.js.map +1 -1
- package/run/supervised-child.js +12 -9
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-output-capture.js +66 -0
- package/run/supervised-output-capture.js.map +1 -0
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-collection.js +3 -1
- package/run/supervised-run-collection.js.map +1 -1
- package/run/supervised-run-resource-policy.js +12 -1
- package/run/supervised-run-resource-policy.js.map +1 -1
- package/run/supervised-run-runtime.js +25 -30
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run-state.js +64 -81
- package/run/supervised-run-state.js.map +1 -1
- package/run/supervised-run.js +14 -4
- package/run/supervised-run.js.map +1 -1
- package/run/worker-pool-collection.js +1 -0
- package/run/worker-pool-collection.js.map +1 -1
- package/run/worker-pool-command.js +2 -0
- package/run/worker-pool-command.js.map +1 -1
- package/run/worker-pool-execution.js +12 -3
- package/run/worker-pool-execution.js.map +1 -1
- package/run/worker-pool-hedged-arbitration.js +11 -2
- package/run/worker-pool-hedged-arbitration.js.map +1 -1
- package/run/worker-pool-host-process.js.map +1 -1
- package/run/worker-pool-host-protocol.js.map +1 -1
- package/run/worker-pool-protocol.js.map +1 -1
- package/run/worker-pool-resource-lifecycle-execution.js +1 -0
- package/run/worker-pool-resource-lifecycle-execution.js.map +1 -1
- package/run/worker-pool-resource-tracking.js +2 -2
- package/run/worker-pool-resource-tracking.js.map +1 -1
- package/run/worker-pool-results.js +7 -9
- package/run/worker-pool-results.js.map +1 -1
- package/run/worker-pool-run.js +10 -3
- 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 +12 -4
- package/run/worker-pool-task-events.js.map +1 -1
- package/run/worker-pool-worker-plan.js +1 -0
- package/run/worker-pool-worker-plan.js.map +1 -1
- package/run/worker-pool-worker-resources.js +1 -0
- package/run/worker-pool-worker-resources.js.map +1 -1
- package/run/worker-pool-worker.js +15 -4
- package/run/worker-pool-worker.js.map +1 -1
- package/sbom.cdx.json +65 -14
- package/transcript/http-transcript.js +3 -0
- package/transcript/http-transcript.js.map +1 -0
- package/transcript/transcript-store.d.ts +25 -0
- package/transcript/transcript-store.d.ts.map +1 -0
- package/transcript/transcript-store.js +73 -0
- package/transcript/transcript-store.js.map +1 -0
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createServer } from 'node:net';
|
|
3
|
+
import { createInterface } from 'node:readline';
|
|
4
|
+
import { createStoredRunValue } from "./supervised-run-state.js";
|
|
5
|
+
import { attachmentMaxFrameBytes, attachmentMaxPendingRequests } from "./attachment-protocol.js";
|
|
6
|
+
import { attachmentRequestSchema } from "./attachment-wire-schema.js";
|
|
7
|
+
import { boundedAttachmentFrames } from "./attachment-frames.js";
|
|
8
|
+
async function attachmentServerChannelsReply(state, line, socket, channel) {
|
|
9
|
+
const { store } = state;
|
|
10
|
+
const value = JSON.parse(line);
|
|
11
|
+
const request = attachmentRequestSchema.parse(value);
|
|
12
|
+
if (request.token !== state.token) {
|
|
13
|
+
throw new Error('Invalid attachment execution token.');
|
|
14
|
+
}
|
|
15
|
+
const result = await store.exchange(channel, request.operation);
|
|
16
|
+
await new Promise(function acknowledgeAttachment(resolve, reject) {
|
|
17
|
+
socket.write(`${JSON.stringify({ request: request.request, result })}\n`, function attachmentSent(error) {
|
|
18
|
+
if (error === undefined || error === null) {
|
|
19
|
+
resolve();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
reject(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async function attachmentServerChannelsRequest(state, request) {
|
|
28
|
+
const { line, socket, channel, previous } = request;
|
|
29
|
+
await previous;
|
|
30
|
+
try {
|
|
31
|
+
await attachmentServerChannelsReply(state, line, socket, channel);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
socket.destroy();
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
request.queued.write(request.queued.read() - 1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function attachmentServerChannelsInterrupt(state, channel, previous) {
|
|
41
|
+
const { abandoned, store } = state;
|
|
42
|
+
await previous;
|
|
43
|
+
abandoned.push(...await store.finish(channel));
|
|
44
|
+
}
|
|
45
|
+
function observeAttachmentChannelFailures(socket, frames, lines) {
|
|
46
|
+
frames.on('error', function () {
|
|
47
|
+
socket.destroy();
|
|
48
|
+
});
|
|
49
|
+
lines.on('error', function () {
|
|
50
|
+
socket.destroy();
|
|
51
|
+
});
|
|
52
|
+
socket.on('error', function () {
|
|
53
|
+
socket.destroy();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function attachmentServerChannelsAccept(state, socket) {
|
|
57
|
+
const { sockets } = state;
|
|
58
|
+
sockets.add(socket);
|
|
59
|
+
const channel = randomUUID();
|
|
60
|
+
const frames = boundedAttachmentFrames(attachmentMaxFrameBytes);
|
|
61
|
+
const lines = createInterface({ input: socket.pipe(frames), crlfDelay: Number.POSITIVE_INFINITY });
|
|
62
|
+
let queue = Promise.resolve();
|
|
63
|
+
const queued = createStoredRunValue(0);
|
|
64
|
+
observeAttachmentChannelFailures(socket, frames, lines);
|
|
65
|
+
lines.on('line', function receiveAttachmentLine(line) {
|
|
66
|
+
if (queued.read() >= attachmentMaxPendingRequests) {
|
|
67
|
+
socket.destroy();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
queued.write(queued.read() + 1);
|
|
71
|
+
state.operations.delete(queue);
|
|
72
|
+
queue = attachmentServerChannelsRequest(state, { line, socket, channel, previous: queue, queued });
|
|
73
|
+
state.operations.add(queue);
|
|
74
|
+
});
|
|
75
|
+
socket.on('close', function attachmentChannelClosed() {
|
|
76
|
+
sockets.delete(socket);
|
|
77
|
+
lines.close();
|
|
78
|
+
state.operations.delete(queue);
|
|
79
|
+
const interrupted = attachmentServerChannelsInterrupt(state, channel, queue);
|
|
80
|
+
state.operations.add(interrupted);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async function attachmentServerChannelsFinish(state, server) {
|
|
84
|
+
const { store } = state;
|
|
85
|
+
await Promise.all(state.operations.values());
|
|
86
|
+
const owners = [...state.abandoned.values(), ...await store.finish(null)];
|
|
87
|
+
for (const socket of state.sockets.values()) {
|
|
88
|
+
socket.destroy();
|
|
89
|
+
}
|
|
90
|
+
await new Promise(function closeAttachmentServer(resolve, reject) {
|
|
91
|
+
server.close(function attachmentServerClosed(error) {
|
|
92
|
+
if (error === undefined) {
|
|
93
|
+
resolve();
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
reject(error);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
await Promise.all(state.operations.values());
|
|
101
|
+
return owners;
|
|
102
|
+
}
|
|
103
|
+
function createAttachmentServerChannels(store, token) {
|
|
104
|
+
const sockets = new Set();
|
|
105
|
+
const operations = new Set();
|
|
106
|
+
const abandoned = [];
|
|
107
|
+
const state = { store, token, sockets, operations, abandoned };
|
|
108
|
+
return {
|
|
109
|
+
accept: attachmentServerChannelsAccept.bind(null, state),
|
|
110
|
+
finish: attachmentServerChannelsFinish.bind(null, state)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export async function createAttachmentServer(store, limits) {
|
|
114
|
+
const token = randomUUID();
|
|
115
|
+
const channels = createAttachmentServerChannels(store, token);
|
|
116
|
+
const server = createServer(function (socket) {
|
|
117
|
+
channels.accept(socket);
|
|
118
|
+
});
|
|
119
|
+
await new Promise(function listenForAttachments(resolve, reject) {
|
|
120
|
+
server.once('error', reject);
|
|
121
|
+
server.listen(0, '127.0.0.1', resolve);
|
|
122
|
+
});
|
|
123
|
+
const address = server.address();
|
|
124
|
+
if (address === null || typeof address === 'string') {
|
|
125
|
+
throw new Error('Attachment server did not obtain an execution address.');
|
|
126
|
+
}
|
|
127
|
+
let finishing = null;
|
|
128
|
+
return {
|
|
129
|
+
endpoint: { branch: null, limits, port: address.port, token },
|
|
130
|
+
async finish() {
|
|
131
|
+
finishing = finishing ?? channels.finish(server);
|
|
132
|
+
return await finishing;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=attachment-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-server.js","sourceRoot":"","sources":["../../../../source/run/attachment-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { createAttachmentStore } from "./attachment-store.js";
|
|
3
|
+
import { createAttachmentServer } from "./attachment-server.js";
|
|
4
|
+
export async function createAttachmentStorageSession(resolved, record) {
|
|
5
|
+
const limits = resolved.facts.execution.attachments;
|
|
6
|
+
if (limits === null) {
|
|
7
|
+
throw new TypeError('Runtime attachments require integration limits.');
|
|
8
|
+
}
|
|
9
|
+
const store = createAttachmentStore({
|
|
10
|
+
captureTime: record.captureTime,
|
|
11
|
+
checkpoint: record.checkpoint,
|
|
12
|
+
directory: path.resolve(resolved.facts.environment.projectRoot, resolved.config.runtimeStateDir, 'runs', record.session.id, 'artifacts'),
|
|
13
|
+
limits,
|
|
14
|
+
projectRoot: resolved.facts.environment.projectRoot,
|
|
15
|
+
work: resolved.facts.cases.map(function workIdentity(entry) {
|
|
16
|
+
return entry.workId;
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
return { resolved, server: await createAttachmentServer(store, limits), store };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=attachment-storage-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-storage-session.js","sourceRoot":"","sources":["../../../../source/run/attachment-storage-session.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAyB,MAAM,wBAAwB,CAAC;AASvF,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAChD,QAAqB,EACrB,MAAwB;IAExB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,KAAK,GAAG,qBAAqB,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,IAAI,CAAC,OAAO,CACnB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EACtC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAC/B,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,EAAE,EACjB,WAAW,CACd;QACD,MAAM;QACN,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW;QACnD,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK;YACtD,OAAO,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC,CAAC;KACL,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AACpF,CAAC"}
|