@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.
Files changed (141) hide show
  1. package/attachments/attachment-context.js +31 -0
  2. package/attachments/attachment-context.js.map +1 -0
  3. package/engine/run-artifact.d.ts +1 -1
  4. package/engine/run-artifact.d.ts.map +1 -1
  5. package/engine/run-result.d.ts +5 -1
  6. package/engine/run-result.d.ts.map +1 -1
  7. package/engine/run-result.js.map +1 -1
  8. package/engine/runtime-attachment.d.ts +62 -0
  9. package/engine/runtime-attachment.d.ts.map +1 -0
  10. package/engine/runtime-attachment.js +7 -0
  11. package/engine/runtime-attachment.js.map +1 -0
  12. package/package.json +9 -1
  13. package/packages/resources/attachment-context.entry-point.js +2 -0
  14. package/packages/resources/attachment-context.entry-point.js.map +1 -0
  15. package/packages/run/config.entry-point.d.ts +1 -1
  16. package/packages/run/config.entry-point.d.ts.map +1 -1
  17. package/packages/run/run.entry-point.d.ts +1 -1
  18. package/packages/run/run.entry-point.d.ts.map +1 -1
  19. package/readme.md +23 -1
  20. package/reporters/human-reporter-rendering.js +14 -0
  21. package/reporters/human-reporter-rendering.js.map +1 -1
  22. package/resources/resource-definition-brand.js +1 -1
  23. package/resources/resource-definition-brand.js.map +1 -1
  24. package/resources/resource-definition-types.d.ts.map +1 -1
  25. package/resources/resource-scenario-binding.js +2 -0
  26. package/resources/resource-scenario-binding.js.map +1 -1
  27. package/resources/resource-session.d.ts.map +1 -1
  28. package/resources/runtime-definition.d.ts.map +1 -1
  29. package/resources/runtime-definition.js +1 -1
  30. package/resources/runtime-definition.js.map +1 -1
  31. package/resources/runtime-matrix-definition.d.ts.map +1 -1
  32. package/resources/runtime-matrix-definition.js +2 -2
  33. package/resources/runtime-matrix-definition.js.map +1 -1
  34. package/run/attachment-connection.js +108 -0
  35. package/run/attachment-connection.js.map +1 -0
  36. package/run/attachment-coordinator-context.js +9 -0
  37. package/run/attachment-coordinator-context.js.map +1 -0
  38. package/run/attachment-coordinator.js +77 -0
  39. package/run/attachment-coordinator.js.map +1 -0
  40. package/run/attachment-eligibility.js +21 -0
  41. package/run/attachment-eligibility.js.map +1 -0
  42. package/run/attachment-execution.js +255 -0
  43. package/run/attachment-execution.js.map +1 -0
  44. package/run/attachment-failure.js +63 -0
  45. package/run/attachment-failure.js.map +1 -0
  46. package/run/attachment-frames.js +22 -0
  47. package/run/attachment-frames.js.map +1 -0
  48. package/run/attachment-json.js +118 -0
  49. package/run/attachment-json.js.map +1 -0
  50. package/run/attachment-protocol.js +5 -0
  51. package/run/attachment-protocol.js.map +1 -0
  52. package/run/attachment-record.js +60 -0
  53. package/run/attachment-record.js.map +1 -0
  54. package/run/attachment-reporter.js +39 -0
  55. package/run/attachment-reporter.js.map +1 -0
  56. package/run/attachment-results.js +115 -0
  57. package/run/attachment-results.js.map +1 -0
  58. package/run/attachment-retention.js +153 -0
  59. package/run/attachment-retention.js.map +1 -0
  60. package/run/attachment-run.js +36 -0
  61. package/run/attachment-run.js.map +1 -0
  62. package/run/attachment-server.js +136 -0
  63. package/run/attachment-server.js.map +1 -0
  64. package/run/attachment-storage-session.js +21 -0
  65. package/run/attachment-storage-session.js.map +1 -0
  66. package/run/attachment-store.js +330 -0
  67. package/run/attachment-store.js.map +1 -0
  68. package/run/attachment-wire-schema.js +123 -0
  69. package/run/attachment-wire-schema.js.map +1 -0
  70. package/run/attachment-worker-context.js +49 -0
  71. package/run/attachment-worker-context.js.map +1 -0
  72. package/run/attachment-writer.js +117 -0
  73. package/run/attachment-writer.js.map +1 -0
  74. package/run/coverage-config-schema.d.ts +4 -4
  75. package/run/resource-lifecycle-projection.js +6 -2
  76. package/run/resource-lifecycle-projection.js.map +1 -1
  77. package/run/resource-lifecycle-session-acquirer.js +2 -0
  78. package/run/resource-lifecycle-session-acquirer.js.map +1 -1
  79. package/run/resource-lifecycle-startup-budget.js +1 -0
  80. package/run/resource-lifecycle-startup-budget.js.map +1 -1
  81. package/run/resource-lifecycle-state.d.ts.map +1 -1
  82. package/run/resource-lifecycle-state.js +10 -0
  83. package/run/resource-lifecycle-state.js.map +1 -1
  84. package/run/resource-lifecycle.js +24 -6
  85. package/run/resource-lifecycle.js.map +1 -1
  86. package/run/retry-artifact-retention.js.map +1 -1
  87. package/run/run-config-schema.d.ts +23 -4
  88. package/run/run-config-schema.d.ts.map +1 -1
  89. package/run/run-config-schema.js +11 -0
  90. package/run/run-config-schema.js.map +1 -1
  91. package/run/run-config.d.ts +7 -5
  92. package/run/run-config.d.ts.map +1 -1
  93. package/run/run-config.js +2 -1
  94. package/run/run-config.js.map +1 -1
  95. package/run/run-engine-primitives.d.ts +12 -1
  96. package/run/run-engine-primitives.d.ts.map +1 -1
  97. package/run/run-facts.js +1 -0
  98. package/run/run-facts.js.map +1 -1
  99. package/run/run-isolated-command.js +1 -0
  100. package/run/run-isolated-command.js.map +1 -1
  101. package/run/run-local-command.js +4 -1
  102. package/run/run-local-command.js.map +1 -1
  103. package/run/run-local-execution.js +2 -1
  104. package/run/run-local-execution.js.map +1 -1
  105. package/run/run-local-resolution.js.map +1 -1
  106. package/run/run-record-input.js.map +1 -1
  107. package/run/run-record-outcomes.d.ts +4 -1
  108. package/run/run-record-outcomes.d.ts.map +1 -1
  109. package/run/run-record.js.map +1 -1
  110. package/run/run-support.js +6 -1
  111. package/run/run-support.js.map +1 -1
  112. package/run/run-types.d.ts +3 -4
  113. package/run/run-types.d.ts.map +1 -1
  114. package/run/run-types.js.map +1 -1
  115. package/run/run-validation.js +9 -0
  116. package/run/run-validation.js.map +1 -1
  117. package/run/runtime-attachment-boundary.js +11 -0
  118. package/run/runtime-attachment-boundary.js.map +1 -0
  119. package/run/supervised-child.js +11 -9
  120. package/run/supervised-child.js.map +1 -1
  121. package/run/supervised-protocol.js.map +1 -1
  122. package/run/supervised-run-runtime.js +9 -3
  123. package/run/supervised-run-runtime.js.map +1 -1
  124. package/run/supervised-run.js +11 -3
  125. package/run/supervised-run.js.map +1 -1
  126. package/run/worker-pool-command.js +1 -0
  127. package/run/worker-pool-command.js.map +1 -1
  128. package/run/worker-pool-execution.js +10 -2
  129. package/run/worker-pool-execution.js.map +1 -1
  130. package/run/worker-pool-hedged-arbitration.js +7 -2
  131. package/run/worker-pool-hedged-arbitration.js.map +1 -1
  132. package/run/worker-pool-protocol.js.map +1 -1
  133. package/run/worker-pool-run.js +8 -1
  134. package/run/worker-pool-run.js.map +1 -1
  135. package/run/worker-pool-runtime.js +3 -7
  136. package/run/worker-pool-runtime.js.map +1 -1
  137. package/run/worker-pool-task-events.js +5 -2
  138. package/run/worker-pool-task-events.js.map +1 -1
  139. package/run/worker-pool-worker.js +14 -4
  140. package/run/worker-pool-worker.js.map +1 -1
  141. 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,5 @@
1
+ export const attachmentChunkBytes = 65_536;
2
+ export const attachmentMetadataBytes = 256;
3
+ export const attachmentMaxFrameBytes = 131_072;
4
+ export const attachmentMaxPendingRequests = 256;
5
+ //# sourceMappingURL=attachment-protocol.js.map
@@ -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":"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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"}