@overkill-dev/resources 0.0.10 → 0.0.12

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 (75) hide show
  1. package/attachments/attachment-context.d.ts +12 -0
  2. package/attachments/attachment-context.d.ts.map +1 -0
  3. package/attachments/attachment-context.js +41 -0
  4. package/attachments/attachment-context.js.map +1 -0
  5. package/attachments/failure-artifact-stream.js +147 -0
  6. package/attachments/failure-artifact-stream.js.map +1 -0
  7. package/attachments/resource-failure-context.js +45 -0
  8. package/attachments/resource-failure-context.js.map +1 -0
  9. package/engine/identity.d.ts +29 -0
  10. package/engine/identity.d.ts.map +1 -0
  11. package/engine/identity.js +41 -0
  12. package/engine/identity.js.map +1 -0
  13. package/engine/run-artifact.d.ts +30 -0
  14. package/engine/run-artifact.d.ts.map +1 -0
  15. package/engine/runtime-attachment.d.ts +98 -0
  16. package/engine/runtime-attachment.d.ts.map +1 -0
  17. package/engine/runtime-attachment.js +7 -0
  18. package/engine/runtime-attachment.js.map +1 -0
  19. package/package-version.js +31 -0
  20. package/package-version.js.map +1 -0
  21. package/package.json +15 -3
  22. package/packages/resources/attachment-context.entry-point.d.ts +3 -0
  23. package/packages/resources/attachment-context.entry-point.d.ts.map +1 -0
  24. package/packages/resources/attachment-context.entry-point.js +2 -0
  25. package/packages/resources/attachment-context.entry-point.js.map +1 -0
  26. package/packages/resources/resources.entry-point.d.ts +3 -0
  27. package/packages/resources/resources.entry-point.d.ts.map +1 -1
  28. package/packages/resources/resources.entry-point.js +1 -0
  29. package/packages/resources/resources.entry-point.js.map +1 -1
  30. package/readme.md +70 -1
  31. package/resources/failure-artifacts.d.ts +49 -0
  32. package/resources/failure-artifacts.d.ts.map +1 -0
  33. package/resources/failure-artifacts.js +34 -0
  34. package/resources/failure-artifacts.js.map +1 -0
  35. package/resources/http-request-attribution.js +23 -0
  36. package/resources/http-request-attribution.js.map +1 -0
  37. package/resources/local-http-failure-capture.js +43 -0
  38. package/resources/local-http-failure-capture.js.map +1 -0
  39. package/resources/local-http-service-resource.d.ts.map +1 -1
  40. package/resources/local-http-service-resource.js +18 -7
  41. package/resources/local-http-service-resource.js.map +1 -1
  42. package/resources/local-http-transcript-observer.js +14 -21
  43. package/resources/local-http-transcript-observer.js.map +1 -1
  44. package/resources/local-process-service-resource.d.ts +1 -1
  45. package/resources/local-process-service-resource.d.ts.map +1 -1
  46. package/resources/local-process-service-resource.js +85 -12
  47. package/resources/local-process-service-resource.js.map +1 -1
  48. package/resources/local-service-resource.d.ts +3 -0
  49. package/resources/local-service-resource.d.ts.map +1 -1
  50. package/resources/local-service-resource.js +2 -0
  51. package/resources/local-service-resource.js.map +1 -1
  52. package/resources/resource-definition-brand.d.ts.map +1 -1
  53. package/resources/resource-definition-brand.js +1 -1
  54. package/resources/resource-definition-brand.js.map +1 -1
  55. package/resources/resource-definition-types.d.ts +5 -0
  56. package/resources/resource-definition-types.d.ts.map +1 -1
  57. package/resources/resource-scenario-binding.d.ts.map +1 -1
  58. package/resources/resource-scenario-binding.js +2 -0
  59. package/resources/resource-scenario-binding.js.map +1 -1
  60. package/resources/resource-session.d.ts.map +1 -1
  61. package/resources/resource-session.js +3 -0
  62. package/resources/resource-session.js.map +1 -1
  63. package/resources/runtime-definition.d.ts.map +1 -1
  64. package/resources/runtime-definition.js +1 -1
  65. package/resources/runtime-definition.js.map +1 -1
  66. package/resources/runtime-matrix-definition.d.ts.map +1 -1
  67. package/resources/runtime-matrix-definition.js +2 -2
  68. package/resources/runtime-matrix-definition.js.map +1 -1
  69. package/resources/simulated-http-server-resource.d.ts +1 -1
  70. package/resources/simulated-http-server-resource.d.ts.map +1 -1
  71. package/resources/simulated-http-server-resource.js +29 -1
  72. package/resources/simulated-http-server-resource.js.map +1 -1
  73. package/sbom.cdx.json +28 -11
  74. package/stored-value.js +12 -0
  75. package/stored-value.js.map +1 -0
@@ -0,0 +1,12 @@
1
+ import type { AttachmentProducer, AttachmentLimits, FailureArtifactCondition, RuntimeAttachments } from '../engine/runtime-attachment.ts';
2
+ export type AttachmentContext = {
3
+ readonly limits: AttachmentLimits;
4
+ readonly prepareForProducer: (producer: AttachmentProducer, condition: FailureArtifactCondition, source: 'boundary-captured' | 'instrumented' | 'native', subtype: 'attachment' | 'witness') => RuntimeAttachments;
5
+ readonly forProducer: (producer: AttachmentProducer) => RuntimeAttachments;
6
+ };
7
+ export declare function attachmentsForProducer(producer: AttachmentProducer): RuntimeAttachments;
8
+ export declare function resourceAttachments(name: string): RuntimeAttachments;
9
+ export declare function runWithAttachmentContext<Value>(context: AttachmentContext, run: () => Promise<Value>): Promise<Value>;
10
+ export declare function preparedResourceAttachments(name: string, condition: FailureArtifactCondition, source: 'boundary-captured' | 'instrumented' | 'native', subtype: 'attachment' | 'witness'): RuntimeAttachments | null;
11
+ export declare function currentAttachmentLimits(): AttachmentLimits | null;
12
+ //# sourceMappingURL=attachment-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-context.d.ts","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,QAAQ,EACvD,OAAO,EAAE,YAAY,GAAG,SAAS,KAChC,kBAAkB,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;CAC9E,CAAC;AA2BF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEpE;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAChD,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,KAAK,CAAC,CAEhB;AAED,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,wBAAwB,EACnC,MAAM,EAAE,mBAAmB,GAAG,cAAc,GAAG,QAAQ,EACvD,OAAO,EAAE,YAAY,GAAG,SAAS,GAClC,kBAAkB,GAAG,IAAI,CAG3B;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,41 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const attachmentContextKey = Symbol.for('@overkill-dev/runtime-attachment-context/v1');
3
+ function isAttachmentContextStorage(value) {
4
+ return value instanceof AsyncLocalStorage;
5
+ }
6
+ function sharedAttachmentContext() {
7
+ const existing = Reflect.get(globalThis, attachmentContextKey);
8
+ if (isAttachmentContextStorage(existing)) {
9
+ return existing;
10
+ }
11
+ const created = new AsyncLocalStorage();
12
+ Object.defineProperty(globalThis, attachmentContextKey, { value: created });
13
+ return created;
14
+ }
15
+ const attachmentContext = sharedAttachmentContext();
16
+ function unavailableAttachments() {
17
+ const unavailable = async function rejectUnmanagedAttachment() {
18
+ throw new TypeError('Runtime attachments require runner-managed integration execution.');
19
+ };
20
+ return Object.freeze({ open: unavailable, json: unavailable, file: unavailable });
21
+ }
22
+ export function attachmentsForProducer(producer) {
23
+ return attachmentContext.getStore()?.forProducer(producer) ?? unavailableAttachments();
24
+ }
25
+ export function resourceAttachments(name) {
26
+ return attachmentsForProducer({ kind: 'resource', name });
27
+ }
28
+ export async function runWithAttachmentContext(context, run) {
29
+ return await attachmentContext.run(context, run);
30
+ }
31
+ export function preparedResourceAttachments(name, condition, source, subtype) {
32
+ return attachmentContext.getStore()?.prepareForProducer({ kind: 'resource', name }, condition, source, subtype) ??
33
+ null;
34
+ }
35
+ export function currentAttachmentLimits() {
36
+ return attachmentContext.getStore()?.limits ?? null;
37
+ }
38
+ export function currentAttachmentContext() {
39
+ return attachmentContext.getStore() ?? null;
40
+ }
41
+ //# sourceMappingURL=attachment-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-context.js","sourceRoot":"","sources":["../../../../source/attachments/attachment-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAoBrD,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAEvF,SAAS,0BAA0B,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC9C,CAAC;AACD,SAAS,uBAAuB;IAC5B,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxE,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAqB,CAAC;IAC3D,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,iBAAiB,GAAG,uBAAuB,EAAE,CAAC;AAEpD,SAAS,sBAAsB;IAC3B,MAAM,WAAW,GAAG,KAAK,UAAU,yBAAyB;QACxD,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IAC/D,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,OAAO,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAA0B,EAC1B,GAAyB;IAEzB,OAAO,MAAM,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,IAAY,EACZ,SAAmC,EACnC,MAAuD,EACvD,OAAiC;IAEjC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QAC3G,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB;IACnC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AAChD,CAAC"}
@@ -0,0 +1,147 @@
1
+ import { createStoredValue } from "../stored-value.js";
2
+ import { defaultAttachmentLimits } from "../engine/runtime-attachment.js";
3
+ import { workIdentityKey } from "../engine/identity.js";
4
+ import { currentAttachmentContext } from "./attachment-context.js";
5
+ import { resourceFailureAttachments } from "./resource-failure-context.js";
6
+ const registryKey = Symbol.for('@overkill-dev/failure-artifact-streams/v2');
7
+ function isFailureRunRegistry(value) {
8
+ return value instanceof WeakMap;
9
+ }
10
+ function sharedFailureRuns() {
11
+ const existing = Reflect.get(globalThis, registryKey);
12
+ if (isFailureRunRegistry(existing)) {
13
+ return existing;
14
+ }
15
+ const created = new WeakMap();
16
+ Object.defineProperty(globalThis, registryKey, { value: created });
17
+ return created;
18
+ }
19
+ const runs = sharedFailureRuns();
20
+ function currentFailureStreams() {
21
+ const context = currentAttachmentContext();
22
+ if (context === null) {
23
+ return null;
24
+ }
25
+ const streams = runs.get(context) ?? new Map();
26
+ runs.set(context, streams);
27
+ return streams;
28
+ }
29
+ function attemptKey(work, attempt) {
30
+ return `${workIdentityKey(work)}:${attempt.index}`;
31
+ }
32
+
33
+ async function drainCapture(state) {
34
+ const writer = state.writer.read() ?? await state.attachments.open(state.metadata);
35
+ state.writer.write(writer);
36
+ while (state.chunks.read().length > 0) {
37
+ const batch = state.chunks.read();
38
+ state.chunks.write([]);
39
+ for (const chunk of batch) {
40
+ await writer.write(chunk);
41
+ state.queuedBytes.write(state.queuedBytes.read() - Buffer.byteLength(chunk));
42
+ }
43
+ }
44
+ }
45
+ async function capturePending(state) {
46
+ try {
47
+ await drainCapture(state);
48
+ }
49
+ catch (error) {
50
+ state.failure.write(error instanceof Error
51
+ ? error
52
+ : new Error('Failure artifact stream could not capture output.', { cause: error }));
53
+ state.chunks.write([]);
54
+ state.queuedBytes.write(0);
55
+ }
56
+ finally {
57
+ state.pending.write(null);
58
+ }
59
+ }
60
+ async function observeLateCapture(state, chunk) {
61
+ const writer = state.writer.read();
62
+ const writing = writer === null ? state.attachments.json(state.metadata, null) : writer.write(chunk);
63
+ try {
64
+ await writing;
65
+ }
66
+ catch (error) {
67
+ state.failure.write(error instanceof Error ? error : new Error('Late failure capture failed.', { cause: error }));
68
+ }
69
+ }
70
+ function captureAcceptsWrite(state, chunk) {
71
+ if (state.closed.read() && !state.lateReported.read()) {
72
+ state.lateReported.write(true);
73
+ state.pending.write(observeLateCapture(state, chunk));
74
+ }
75
+ return !state.closed.read() && !state.truncated.read() && state.failure.read() === null;
76
+ }
77
+ function queueCapture(state, chunk) {
78
+ const available = defaultAttachmentLimits.maxInlineBytes - state.queuedBytes.read();
79
+ const limited = Buffer.byteLength(chunk) > available;
80
+ const decoder = new TextDecoder();
81
+ const prefix = limited
82
+ ? decoder.decode(Buffer.from(chunk).subarray(0, available), { stream: true })
83
+ : chunk;
84
+ state.truncated.write(limited);
85
+ state.chunks.write([...state.chunks.read(), prefix]);
86
+ state.queuedBytes.write(state.queuedBytes.read() + Buffer.byteLength(prefix));
87
+ }
88
+ function writeCapture(state, chunk) {
89
+ if (!captureAcceptsWrite(state, chunk)) {
90
+ return;
91
+ }
92
+ queueCapture(state, chunk);
93
+ if (state.pending.read() === null) {
94
+ state.pending.write(capturePending(state));
95
+ }
96
+ }
97
+ async function closeCapture(state) {
98
+ if (state.closed.read()) {
99
+ return;
100
+ }
101
+ state.closed.write(true);
102
+ await state.pending.read();
103
+ const writer = state.writer.read();
104
+ if (writer !== null) {
105
+ await (state.truncated.read() ? writer.close('capture-limit') : writer.close());
106
+ }
107
+ const failure = state.failure.read();
108
+ if (failure !== null) {
109
+ throw failure;
110
+ }
111
+ }
112
+ function createCaptureState(attachments, name, mediaType) {
113
+ return {
114
+ attachments,
115
+ metadata: { kind: 'text', name, mediaType },
116
+ chunks: createStoredValue([]),
117
+ queuedBytes: createStoredValue(0),
118
+ truncated: createStoredValue(false),
119
+ failure: createStoredValue(null),
120
+ closed: createStoredValue(false),
121
+ lateReported: createStoredValue(false),
122
+ writer: createStoredValue(null),
123
+ pending: createStoredValue(null)
124
+ };
125
+ }
126
+ function registerAttemptStream(context, stream) {
127
+ const streams = currentFailureStreams();
128
+ if (context.condition.kind === 'attempt' && streams !== null) {
129
+ const key = attemptKey(context.condition.work, context.condition.attempt);
130
+ const owned = streams.get(key) ?? new Set();
131
+ streams.set(key, new Set([...owned, stream]));
132
+ }
133
+ }
134
+ export function createFailureArtifactStream(context, source, name, mediaType) {
135
+ const attachments = resourceFailureAttachments(context, source);
136
+ if (attachments === null) {
137
+ return null;
138
+ }
139
+ const state = createCaptureState(attachments, name, mediaType);
140
+ const stream = {
141
+ write: writeCapture.bind(null, state),
142
+ close: closeCapture.bind(null, state)
143
+ };
144
+ registerAttemptStream(context, stream);
145
+ return stream;
146
+ }
147
+ //# sourceMappingURL=failure-artifact-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-artifact-stream.js","sourceRoot":"","sources":["../../../../source/attachments/failure-artifact-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { preparedResourceAttachments } from "./attachment-context.js";
3
+ const contextKey = Symbol.for('@overkill-dev/resource-failure-context/v1');
4
+ function isResourceFailureStorage(value) {
5
+ return value instanceof AsyncLocalStorage;
6
+ }
7
+ function sharedResourceFailureContext() {
8
+ const existing = Reflect.get(globalThis, contextKey);
9
+ if (isResourceFailureStorage(existing)) {
10
+ return existing;
11
+ }
12
+ const created = new AsyncLocalStorage();
13
+ Object.defineProperty(globalThis, contextKey, { value: created });
14
+ return created;
15
+ }
16
+ const resourceFailureContext = sharedResourceFailureContext();
17
+ export function currentResourceFailureContext() {
18
+ return resourceFailureContext.getStore() ?? null;
19
+ }
20
+ export function resourceFailureAttachments(context, source) {
21
+ return preparedResourceAttachments(context.name, context.condition, source, 'attachment');
22
+ }
23
+ export function attemptFailureContext(name, work, attempt) {
24
+ return { name, condition: { kind: 'attempt', work, attempt } };
25
+ }
26
+
27
+ const scopeRegistryKey = Symbol.for('@overkill-dev/transcript-attempt-scopes/v1');
28
+ function isAttemptScopeRegistry(value) {
29
+ return value instanceof WeakMap;
30
+ }
31
+ function sharedAttemptScopes() {
32
+ const existing = Reflect.get(globalThis, scopeRegistryKey);
33
+ if (isAttemptScopeRegistry(existing)) {
34
+ return existing;
35
+ }
36
+ const created = new WeakMap();
37
+ Object.defineProperty(globalThis, scopeRegistryKey, { value: created });
38
+ return created;
39
+ }
40
+ const attemptScopes = sharedAttemptScopes();
41
+
42
+ export function transcriptAttempt(scope) {
43
+ return scope === null ? null : attemptScopes.get(scope) ?? null;
44
+ }
45
+ //# sourceMappingURL=resource-failure-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-failure-context.js","sourceRoot":"","sources":["../../../../source/attachments/resource-failure-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,6BAAkD,MAAM,yBAAyB,CAAC;AAM3F,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAE3E,SAAS,wBAAwB,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,iBAAiB,CAAC;AAC9C,CAAC;AACD,SAAS,4BAA4B;IACjC,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAA0B,CAAC;IAChE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC;AAE9D,MAAM,UAAU,6BAA6B;IACzC,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,OAA+B,EAC/B,MAA4C;IAE5C,OAAO,2BAA2B,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAY,EAAE,OAAkB;IAChF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;AACnE,CAAC;;MAWK,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAClF,SAAS,sBAAsB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,OAAO,CAAC;AACpC,CAAC;AACD,SAAS,mBAAmB;IACxB,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACpE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAyB,IAAI,OAAO,EAAE,CAAC;IACpD,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;;MAQtC,UAAU,iBAAiB,CAC7B,KAA0B;IAE1B,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpE,CAAC"}
@@ -0,0 +1,29 @@
1
+ export type TestId = {
2
+ readonly file: string | null;
3
+ readonly suite: readonly string[];
4
+ readonly title: string;
5
+ };
6
+ export type CaseId = TestId & {
7
+ readonly params: string | null;
8
+ };
9
+ export type RuntimeDimensions = Readonly<Record<string, string>>;
10
+ export type RuntimeScenarioBindings = Readonly<Record<string, string>>;
11
+ export type RuntimeId = {
12
+ readonly dimensions: RuntimeDimensions;
13
+ readonly name: string;
14
+ readonly scenarios: RuntimeScenarioBindings;
15
+ readonly variantId: string | null;
16
+ };
17
+ export type WorkloadId = {
18
+ readonly name: string;
19
+ readonly params: Readonly<Record<string, string>>;
20
+ };
21
+ export type WorkId = {
22
+ readonly case: CaseId;
23
+ readonly runtimes: readonly RuntimeId[];
24
+ readonly workload: WorkloadId | null;
25
+ };
26
+ export type AttemptId = {
27
+ readonly index: number;
28
+ };
29
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,SAII,GAkFQ,SAAS,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,41 @@
1
+ export function caseIdentityKey(caseId) {
2
+ return JSON.stringify([caseId.file, caseId.suite, caseId.title, caseId.params]);
3
+ }
4
+ function orderedRecordEntries(record) {
5
+ return Object.entries(record).toSorted(function compareKeys([left], [right]) {
6
+ return left.localeCompare(right);
7
+ });
8
+ }
9
+ function runtimeIdentityShape(runtime) {
10
+ return [
11
+ runtime.name,
12
+ runtime.variantId,
13
+ orderedRecordEntries(runtime.dimensions),
14
+ orderedRecordEntries(runtime.scenarios)
15
+ ];
16
+ }
17
+ function runtimeIdentitiesShape(runtimes) {
18
+ return runtimes.map(runtimeIdentityShape);
19
+ }
20
+ function workloadIdentityShape(workload) {
21
+ if (workload === null) {
22
+ return null;
23
+ }
24
+ return [
25
+ workload.name,
26
+ orderedRecordEntries(workload.params)
27
+ ];
28
+ }
29
+
30
+ export function workIdentityKey(work) {
31
+ if (work.runtimes.length === 0 && work.workload === null) {
32
+ return caseIdentityKey(work.case);
33
+ }
34
+ return JSON.stringify([
35
+ caseIdentityKey(work.case),
36
+ runtimeIdentitiesShape(work.runtimes),
37
+ workloadIdentityShape(work.workload)
38
+ ]);
39
+ }
40
+
41
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,eAce,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAwC;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,WAAW,CAAC,CAAE,IAAI,CAAE,EAAE,CAAE,KAAK,CAAE;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAkB;IAC5C,OAAO;QACH,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,SAAS;QACjB,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;QACxC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC;KAC1C,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAAC,QAA8B;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA2B;IACtD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,QAAQ,CAAC,IAAI;QACb,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;KACxC,CAAC;AACN,CAAC;;MAMK,UAIU,eAAe,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC;QAClB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { AttemptId, CaseId, RuntimeId, WorkloadId } from './identity.ts';
2
+ export type RunArtifactScope = {
3
+ readonly activeCases: readonly CaseId[];
4
+ readonly case: CaseId;
5
+ readonly confidence: 'active-case' | 'concurrent-active';
6
+ readonly kind: 'case';
7
+ } | {
8
+ readonly kind: 'run';
9
+ };
10
+ type RunArtifactBaseId = {
11
+ readonly runtimes: readonly RuntimeId[];
12
+ readonly sequence: number;
13
+ readonly subtype: 'attachment' | 'coverage' | 'hedged-conflict' | 'log-capture' | 'witness';
14
+ readonly workload: WorkloadId | null;
15
+ };
16
+ type CaseArtifactId = RunArtifactBaseId & {
17
+ readonly attempt: AttemptId;
18
+ readonly scope: Extract<RunArtifactScope, {
19
+ readonly kind: 'case';
20
+ }>;
21
+ };
22
+ type RunScopedArtifactId = RunArtifactBaseId & {
23
+ readonly attempt: null;
24
+ readonly scope: {
25
+ readonly kind: 'run';
26
+ };
27
+ };
28
+ export type RunArtifactId = CaseArtifactId | RunScopedArtifactId;
29
+ export {};
30
+ //# sourceMappingURL=run-artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-artifact.d.ts","sourceRoot":"","sources":["../../../../source/engine/run-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,mBAAmB,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAAC;IAC5F,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,KAAK,cAAc,GAAG,iBAAiB,GAAG;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC;CACzE,CAAC;AAEF,KAAK,mBAAmB,GAAG,iBAAiB,GAAG;IAC3C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;KAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAEjE,MAAM,CAAsC,EAO3C,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { JsonValue, ReadonlyDeep } from 'type-fest';
2
+ import type { AttemptId, WorkId } from './identity.ts';
3
+ import type { RunArtifactId } from './run-artifact.ts';
4
+ export type AttachmentMetadata = {
5
+ readonly name: string;
6
+ readonly mediaType: string;
7
+ };
8
+ export type AttachmentCompletion = {
9
+ readonly kind: 'complete';
10
+ } | {
11
+ readonly kind: 'incomplete';
12
+ readonly reason: 'byte-limit' | 'capture-limit' | 'interrupted' | 'unclosed' | 'write-error';
13
+ } | {
14
+ readonly kind: 'truncated';
15
+ readonly reason: 'byte-limit';
16
+ };
17
+ export type AttachmentContent = {
18
+ readonly kind: 'file';
19
+ readonly path: string;
20
+ readonly byteLength: number;
21
+ readonly completion: Exclude<AttachmentCompletion, {
22
+ readonly kind: 'truncated';
23
+ }>;
24
+ } | {
25
+ readonly kind: 'json';
26
+ readonly value: ReadonlyDeep<JsonValue>;
27
+ readonly byteLength: number;
28
+ } | {
29
+ readonly kind: 'omitted';
30
+ readonly reason: 'byte-limit' | 'count-limit';
31
+ readonly limit: number;
32
+ } | {
33
+ readonly kind: 'text';
34
+ readonly text: string;
35
+ readonly byteLength: number;
36
+ readonly completion: AttachmentCompletion;
37
+ };
38
+ export type AttachmentProducer = {
39
+ readonly kind: 'case';
40
+ } | {
41
+ readonly kind: 'resource';
42
+ readonly name: string;
43
+ };
44
+ export type FailureArtifactCondition = {
45
+ readonly kind: 'attempt';
46
+ readonly work: WorkId;
47
+ readonly attempt: AttemptId;
48
+ } | {
49
+ readonly kind: 'resource';
50
+ readonly resource: string;
51
+ readonly boundary: string;
52
+ };
53
+ type ExplicitAttachmentCapture = {
54
+ readonly capture: 'opt-in';
55
+ };
56
+ type AutomaticAttachmentCapture = {
57
+ readonly capture: 'automatic';
58
+ readonly retention: {
59
+ readonly condition: FailureArtifactCondition;
60
+ readonly state: 'prepared' | 'retained';
61
+ };
62
+ };
63
+ export type RuntimeAttachmentArtifact = {
64
+ readonly id: RunArtifactId & {
65
+ readonly subtype: 'attachment' | 'witness';
66
+ };
67
+ readonly source: 'boundary-captured' | 'instrumented' | 'native';
68
+ readonly payload: AttachmentMetadata & {
69
+ readonly kind: 'runtime-attachment';
70
+ readonly capturedAtMicroseconds: number;
71
+ readonly producer: AttachmentProducer;
72
+ readonly content: AttachmentContent;
73
+ } & (AutomaticAttachmentCapture | ExplicitAttachmentCapture);
74
+ };
75
+ export type AttachmentWriter<Chunk> = {
76
+ readonly write: (chunk: Chunk) => Promise<void>;
77
+ readonly close: (...reason: readonly ['capture-limit'] | readonly []) => Promise<RuntimeAttachmentArtifact>;
78
+ };
79
+ export type RuntimeAttachments = {
80
+ readonly open: {
81
+ (metadata: AttachmentMetadata & {
82
+ readonly kind: 'text';
83
+ }): Promise<AttachmentWriter<Uint8Array | string>>;
84
+ (metadata: AttachmentMetadata & {
85
+ readonly kind: 'binary';
86
+ }): Promise<AttachmentWriter<Uint8Array>>;
87
+ };
88
+ readonly json: (metadata: AttachmentMetadata, value: unknown) => Promise<RuntimeAttachmentArtifact>;
89
+ readonly file: (metadata: AttachmentMetadata, path: string) => Promise<RuntimeAttachmentArtifact>;
90
+ };
91
+ export type AttachmentLimits = {
92
+ readonly maxInlineBytes: number;
93
+ readonly maxArtifactBytes: number;
94
+ readonly maxScopeBytes: number;
95
+ readonly maxScopeAttachments: number;
96
+ };
97
+ export {};
98
+ //# sourceMappingURL=runtime-attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-attachment.d.ts","sourceRoot":"","sources":["../../../../source/engine/runtime-attachment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export const defaultAttachmentLimits = Object.freeze({
2
+ maxInlineBytes: 1_048_576,
3
+ maxArtifactBytes: 10_485_760,
4
+ maxScopeBytes: 10_485_760,
5
+ maxScopeAttachments: 100
6
+ });
7
+ //# sourceMappingURL=runtime-attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-attachment.js","sourceRoot":"","sources":["../../../../source/engine/runtime-attachment.ts"],"names":[],"mappings":"AA0FA,MAAM,CAAC,MAAM,uBAAuB,GAAqB,MAAM,CAAC,MAAM,CAAC;IACnE,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,UAAU;IAC5B,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,GAAG;CAC3B,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { z } from 'zod';
5
+ const packageVersionSchema = z.object({ name: z.string(), version: z.string() });
6
+ async function parsePackageVersion(manifestPath) {
7
+ const contents = await readFile(manifestPath, 'utf8');
8
+ const parsed = packageVersionSchema.safeParse(JSON.parse(contents));
9
+ return parsed.success ? parsed.data : null;
10
+ }
11
+ async function readPackageVersion(directory) {
12
+ const manifestPath = path.join(directory, 'package.json');
13
+ try {
14
+ return await parsePackageVersion(manifestPath);
15
+ }
16
+ catch (error) {
17
+ if (error instanceof Error && Reflect.get(error, 'code') === 'ENOENT' && path.dirname(directory) !== directory) {
18
+ return await readPackageVersion(path.dirname(directory));
19
+ }
20
+ return null;
21
+ }
22
+ }
23
+ export async function packageVersion(moduleUrl) {
24
+ try {
25
+ return await readPackageVersion(path.dirname(fileURLToPath(moduleUrl)));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../../source/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGjF,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACnD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC;QACD,OAAO,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,IACI,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAC5G,CAAC;YACC,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAClD,IAAI,CAAC;QACD,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,8 @@
4
4
  "url": "https://github.com/enormora/overkill/issues"
5
5
  },
6
6
  "dependencies": {
7
- "type-fest": "5.10.0"
7
+ "type-fest": "5.10.0",
8
+ "zod": "4.6.5"
8
9
  },
9
10
  "description": "Typed Overkill resource and runtime descriptors.",
10
11
  "engines": {
@@ -14,6 +15,10 @@
14
15
  ".": {
15
16
  "import": "./packages/resources/resources.entry-point.js",
16
17
  "types": "./packages/resources/resources.entry-point.d.ts"
18
+ },
19
+ "./attachment-context": {
20
+ "import": "./packages/resources/attachment-context.entry-point.js",
21
+ "types": "./packages/resources/attachment-context.entry-point.d.ts"
17
22
  }
18
23
  },
19
24
  "homepage": "https://github.com/enormora/overkill#readme",
@@ -25,16 +30,23 @@
25
30
  "license": "MIT",
26
31
  "name": "@overkill-dev/resources",
27
32
  "peerDependencies": {
28
- "@overkill-dev/simulation": "0.0.4"
33
+ "@overkill-dev/simulation": "0.0.5"
29
34
  },
30
35
  "repository": {
31
36
  "type": "git",
32
37
  "url": "git+https://github.com/enormora/overkill.git"
33
38
  },
34
39
  "sideEffects": [
40
+ "./attachments/attachment-context.js",
41
+ "./attachments/failure-artifact-stream.js",
42
+ "./attachments/resource-failure-context.js",
43
+ "./engine/runtime-attachment.js",
44
+ "./package-version.js",
35
45
  "./packages/resources/resources.entry-point.js",
46
+ "./resources/failure-artifacts.js",
36
47
  "./resources/local-http-transcript-observer.js",
37
48
  "./resources/local-service-resource.js",
49
+ "./resources/resource-definition-brand.js",
38
50
  "./resources/resource-definition.js",
39
51
  "./resources/resource-lifecycle-error.js",
40
52
  "./resources/resource-scenario-binding.js",
@@ -43,5 +55,5 @@
43
55
  "./resources/runtime-matrix-definition.js"
44
56
  ],
45
57
  "type": "module",
46
- "version": "0.0.10"
58
+ "version": "0.0.12"
47
59
  }
@@ -0,0 +1,3 @@
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
2
+ export type { AttachmentContext } from '../../attachments/attachment-context.ts';
3
+ //# sourceMappingURL=attachment-context.entry-point.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
2
+ //# sourceMappingURL=attachment-context.entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type ResourcesModule } from '../../resources/resources.ts';
2
+ export type { AttachmentMetadata, AttachmentWriter, AttachmentLimits, RuntimeAttachments, RuntimeAttachmentArtifact } from '../../engine/runtime-attachment.ts';
2
3
  export { defineLocalServiceResource } from '../../resources/local-service-resource.ts';
3
4
  export { createLocalHttpServiceResource } from '../../resources/local-http-service-resource.ts';
4
5
  export { createLocalProcessServiceResource } from '../../resources/local-process-service-resource.ts';
@@ -26,4 +27,6 @@ export type { RuntimeDefinition as Runtime, RuntimeResourceMap as ResourceMap }
26
27
  export type { ResourceLifecycleFailure, ResourceLifecyclePhase } from '../../resources/resource-lifecycle-error.ts';
27
28
  export type { ResourceSession, ResourceSessionDisposalContext, StartResourcesRequest } from '../../resources/resource-session.ts';
28
29
  export type { RuntimeSession, RuntimeSessionDisposalContext, StartRuntimeRequest } from '../../resources/runtime-lifecycle.ts';
30
+ export { withFailureArtifacts } from '../../resources/failure-artifacts.ts';
31
+ export type { FailureArtifactAttachments, ResourceFailureCapture, SimulationWitnessArtifact, SimulationWitnessInput } from '../../resources/failure-artifacts.ts';
29
32
  //# sourceMappingURL=resources.entry-point.d.ts.map