agentfootprint 11.0.0 → 11.1.0

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 (126) hide show
  1. package/CAPABILITIES.md +2 -0
  2. package/dist/debug.js +5 -3
  3. package/dist/debug.js.map +1 -1
  4. package/dist/esm/debug.d.ts +1 -1
  5. package/dist/esm/debug.js +1 -1
  6. package/dist/esm/debug.js.map +1 -1
  7. package/dist/esm/lib/boundedJson.d.ts +1 -1
  8. package/dist/esm/lib/boundedJson.js +4 -2
  9. package/dist/esm/lib/boundedJson.js.map +1 -1
  10. package/dist/esm/trace-toolpack/causeCapture.d.ts +5 -2
  11. package/dist/esm/trace-toolpack/causeCapture.js +32 -18
  12. package/dist/esm/trace-toolpack/causeCapture.js.map +1 -1
  13. package/dist/esm/trace-toolpack/causeContext.d.ts +14 -0
  14. package/dist/esm/trace-toolpack/causeContext.js +14 -0
  15. package/dist/esm/trace-toolpack/causeContext.js.map +1 -0
  16. package/dist/esm/trace-toolpack/causeProjection.d.ts +17 -0
  17. package/dist/esm/trace-toolpack/causeProjection.js +72 -0
  18. package/dist/esm/trace-toolpack/causeProjection.js.map +1 -0
  19. package/dist/esm/trace-toolpack/causeReader.d.ts +2 -3
  20. package/dist/esm/trace-toolpack/causeReader.js +21 -13
  21. package/dist/esm/trace-toolpack/causeReader.js.map +1 -1
  22. package/dist/esm/trace-toolpack/causeResponse.d.ts +5 -2
  23. package/dist/esm/trace-toolpack/causeResponse.js +26 -9
  24. package/dist/esm/trace-toolpack/causeResponse.js.map +1 -1
  25. package/dist/esm/trace-toolpack/causeSnapshot.d.ts +2 -8
  26. package/dist/esm/trace-toolpack/causeSnapshot.js +3 -63
  27. package/dist/esm/trace-toolpack/causeSnapshot.js.map +1 -1
  28. package/dist/esm/trace-toolpack/causeTools.d.ts +8 -1
  29. package/dist/esm/trace-toolpack/causeTools.js +33 -10
  30. package/dist/esm/trace-toolpack/causeTools.js.map +1 -1
  31. package/dist/esm/trace-toolpack/index.d.ts +3 -0
  32. package/dist/esm/trace-toolpack/index.js +2 -0
  33. package/dist/esm/trace-toolpack/index.js.map +1 -1
  34. package/dist/esm/trace-toolpack/storedCause.d.ts +8 -0
  35. package/dist/esm/trace-toolpack/storedCause.js +58 -0
  36. package/dist/esm/trace-toolpack/storedCause.js.map +1 -0
  37. package/dist/esm/trace-toolpack/storedCauseBinding.d.ts +16 -0
  38. package/dist/esm/trace-toolpack/storedCauseBinding.js +50 -0
  39. package/dist/esm/trace-toolpack/storedCauseBinding.js.map +1 -0
  40. package/dist/esm/trace-toolpack/storedCauseOptions.d.ts +5 -0
  41. package/dist/esm/trace-toolpack/storedCauseOptions.js +53 -0
  42. package/dist/esm/trace-toolpack/storedCauseOptions.js.map +1 -0
  43. package/dist/esm/trace-toolpack/storedCauseProjection.d.ts +3 -0
  44. package/dist/esm/trace-toolpack/storedCauseProjection.js +117 -0
  45. package/dist/esm/trace-toolpack/storedCauseProjection.js.map +1 -0
  46. package/dist/esm/trace-toolpack/storedCauseReader.d.ts +3 -0
  47. package/dist/esm/trace-toolpack/storedCauseReader.js +9 -0
  48. package/dist/esm/trace-toolpack/storedCauseReader.js.map +1 -0
  49. package/dist/esm/trace-toolpack/storedCauseSources.d.ts +8 -0
  50. package/dist/esm/trace-toolpack/storedCauseSources.js +28 -0
  51. package/dist/esm/trace-toolpack/storedCauseSources.js.map +1 -0
  52. package/dist/esm/trace-toolpack/storedCauseTypes.d.ts +48 -0
  53. package/dist/esm/trace-toolpack/storedCauseTypes.js +2 -0
  54. package/dist/esm/trace-toolpack/storedCauseTypes.js.map +1 -0
  55. package/dist/esm/trace-toolpack/traceToolpack.js +18 -0
  56. package/dist/esm/trace-toolpack/traceToolpack.js.map +1 -1
  57. package/dist/lib/boundedJson.js +4 -2
  58. package/dist/lib/boundedJson.js.map +1 -1
  59. package/dist/trace-toolpack/causeCapture.js +35 -20
  60. package/dist/trace-toolpack/causeCapture.js.map +1 -1
  61. package/dist/trace-toolpack/causeContext.js +18 -0
  62. package/dist/trace-toolpack/causeContext.js.map +1 -0
  63. package/dist/trace-toolpack/causeProjection.js +76 -0
  64. package/dist/trace-toolpack/causeProjection.js.map +1 -0
  65. package/dist/trace-toolpack/causeReader.js +21 -13
  66. package/dist/trace-toolpack/causeReader.js.map +1 -1
  67. package/dist/trace-toolpack/causeResponse.js +26 -9
  68. package/dist/trace-toolpack/causeResponse.js.map +1 -1
  69. package/dist/trace-toolpack/causeSnapshot.js +3 -63
  70. package/dist/trace-toolpack/causeSnapshot.js.map +1 -1
  71. package/dist/trace-toolpack/causeTools.js +36 -12
  72. package/dist/trace-toolpack/causeTools.js.map +1 -1
  73. package/dist/trace-toolpack/index.js +5 -1
  74. package/dist/trace-toolpack/index.js.map +1 -1
  75. package/dist/trace-toolpack/storedCause.js +85 -0
  76. package/dist/trace-toolpack/storedCause.js.map +1 -0
  77. package/dist/trace-toolpack/storedCauseBinding.js +55 -0
  78. package/dist/trace-toolpack/storedCauseBinding.js.map +1 -0
  79. package/dist/trace-toolpack/storedCauseOptions.js +58 -0
  80. package/dist/trace-toolpack/storedCauseOptions.js.map +1 -0
  81. package/dist/trace-toolpack/storedCauseProjection.js +121 -0
  82. package/dist/trace-toolpack/storedCauseProjection.js.map +1 -0
  83. package/dist/trace-toolpack/storedCauseReader.js +35 -0
  84. package/dist/trace-toolpack/storedCauseReader.js.map +1 -0
  85. package/dist/trace-toolpack/storedCauseSources.js +32 -0
  86. package/dist/trace-toolpack/storedCauseSources.js.map +1 -0
  87. package/dist/trace-toolpack/storedCauseTypes.js +3 -0
  88. package/dist/trace-toolpack/storedCauseTypes.js.map +1 -0
  89. package/dist/trace-toolpack/traceToolpack.js +18 -0
  90. package/dist/trace-toolpack/traceToolpack.js.map +1 -1
  91. package/dist/types/debug.d.ts +1 -1
  92. package/dist/types/debug.d.ts.map +1 -1
  93. package/dist/types/lib/boundedJson.d.ts +1 -1
  94. package/dist/types/lib/boundedJson.d.ts.map +1 -1
  95. package/dist/types/trace-toolpack/causeCapture.d.ts +5 -2
  96. package/dist/types/trace-toolpack/causeCapture.d.ts.map +1 -1
  97. package/dist/types/trace-toolpack/causeContext.d.ts +15 -0
  98. package/dist/types/trace-toolpack/causeContext.d.ts.map +1 -0
  99. package/dist/types/trace-toolpack/causeProjection.d.ts +18 -0
  100. package/dist/types/trace-toolpack/causeProjection.d.ts.map +1 -0
  101. package/dist/types/trace-toolpack/causeReader.d.ts +2 -3
  102. package/dist/types/trace-toolpack/causeReader.d.ts.map +1 -1
  103. package/dist/types/trace-toolpack/causeResponse.d.ts +5 -2
  104. package/dist/types/trace-toolpack/causeResponse.d.ts.map +1 -1
  105. package/dist/types/trace-toolpack/causeSnapshot.d.ts +2 -8
  106. package/dist/types/trace-toolpack/causeSnapshot.d.ts.map +1 -1
  107. package/dist/types/trace-toolpack/causeTools.d.ts +8 -1
  108. package/dist/types/trace-toolpack/causeTools.d.ts.map +1 -1
  109. package/dist/types/trace-toolpack/index.d.ts +3 -0
  110. package/dist/types/trace-toolpack/index.d.ts.map +1 -1
  111. package/dist/types/trace-toolpack/storedCause.d.ts +9 -0
  112. package/dist/types/trace-toolpack/storedCause.d.ts.map +1 -0
  113. package/dist/types/trace-toolpack/storedCauseBinding.d.ts +17 -0
  114. package/dist/types/trace-toolpack/storedCauseBinding.d.ts.map +1 -0
  115. package/dist/types/trace-toolpack/storedCauseOptions.d.ts +6 -0
  116. package/dist/types/trace-toolpack/storedCauseOptions.d.ts.map +1 -0
  117. package/dist/types/trace-toolpack/storedCauseProjection.d.ts +4 -0
  118. package/dist/types/trace-toolpack/storedCauseProjection.d.ts.map +1 -0
  119. package/dist/types/trace-toolpack/storedCauseReader.d.ts +4 -0
  120. package/dist/types/trace-toolpack/storedCauseReader.d.ts.map +1 -0
  121. package/dist/types/trace-toolpack/storedCauseSources.d.ts +9 -0
  122. package/dist/types/trace-toolpack/storedCauseSources.d.ts.map +1 -0
  123. package/dist/types/trace-toolpack/storedCauseTypes.d.ts +49 -0
  124. package/dist/types/trace-toolpack/storedCauseTypes.d.ts.map +1 -0
  125. package/dist/types/trace-toolpack/traceToolpack.d.ts.map +1 -1
  126. package/package.json +3 -3
@@ -1,3 +1,4 @@
1
+ const STORED_LIMITATION = 'The storage adapter acknowledged these saved root-history bytes only. The native note remains memory-only; this receipt is not producer authentication or whole-workflow delivery proof.';
1
2
  const SNAPSHOT_LIMITATION = 'Snapshot-only records have no engine-written capture/end attestation. This reader cannot prove a root cause from them, even after a normally finished run.';
2
3
  const CAPTURE_REASONS = {
3
4
  'captured-root-log': 'Capture covers this in-memory root log only; exact read versions, child scopes and durable delivery remain unproven.',
@@ -13,33 +14,49 @@ const CAPTURE_REASONS = {
13
14
  'control-not-retained': 'Same-run captured control-dependency data is missing, partial or ambiguous.',
14
15
  'projection-incomplete': 'The execution-tree projection is missing a committed step.',
15
16
  };
16
- function interpretationFor(text, capture) {
17
- return capture
17
+ function interpretationFor(text, capture, storage) {
18
+ const native = capture
18
19
  ? `${text} ${capture === true
19
20
  ? 'The capture/end attestation was not inspected. No completeness claim is made.'
20
- : CAPTURE_REASONS[capture.reason]}`
21
+ : capture.reason === 'captured-root-log' && capture.readSources !== 'not-collected'
22
+ ? 'Capture covers this saved root log segment only. Read-source observations use independently collected native ownership; unavailable reads retain gaps. Child scopes and whole-workflow durable delivery remain unproven.'
23
+ : CAPTURE_REASONS[capture.reason]}`
21
24
  : text;
25
+ return storage === undefined ? native : `${native} ${STORED_LIMITATION}`;
22
26
  }
23
27
  /** Fixed wording: no exception messages, state values or provider payloads cross this boundary. */
24
- export function causeGap(tool, code, capture) {
25
- return JSON.stringify({
28
+ export function causeGap(tool, code, capture, storage, maxChars) {
29
+ const text = JSON.stringify({
26
30
  tool,
27
31
  mode: 'recorded-evidence',
28
32
  confidence: 'incomplete',
29
33
  gaps: [{ code, evidence: [] }],
30
34
  ...(capture && capture !== true ? { capture } : {}),
31
- interpretation: interpretationFor('Not sure: the requested evidence is incomplete. No root cause is asserted.', capture),
35
+ ...(storage === undefined ? {} : { storage }),
36
+ interpretation: interpretationFor('Not sure: the requested evidence is incomplete. No root cause is asserted.', capture, storage),
32
37
  });
38
+ // The native + saved assessments can themselves exceed a small output ceiling.
39
+ // Withhold them together with the proof; never clip a label into an apparent root.
40
+ return storage !== undefined && maxChars !== undefined && text.length > maxChars
41
+ ? JSON.stringify({
42
+ tool,
43
+ mode: 'recorded-evidence',
44
+ confidence: 'incomplete',
45
+ gaps: [{ code, evidence: [] }],
46
+ interpretation: 'Recorded evidence response: output limit reached. The response contains a gap, no root or full assessment. The storage adapter acknowledged saved root-history bytes only; native capture is memory-only. Producer identity and whole-workflow delivery remain unproven.',
47
+ })
48
+ : text;
33
49
  }
34
50
  /** A clipped proof must never leave behind a seemingly supported root or apparently complete empty list. */
35
- export function causeResponse(tool, finding, interpretation, maxChars, capture) {
51
+ export function causeResponse(tool, finding, interpretation, maxChars, capture, storage) {
36
52
  const text = JSON.stringify({
37
53
  tool,
38
54
  mode: 'recorded-evidence',
39
55
  finding,
40
56
  ...(capture && capture !== true ? { capture } : {}),
41
- interpretation: interpretationFor(interpretation, capture),
57
+ ...(storage === undefined ? {} : { storage }),
58
+ interpretation: interpretationFor(interpretation, capture, storage),
42
59
  });
43
- return text.length <= maxChars ? text : causeGap(tool, 'truncated', capture);
60
+ return text.length <= maxChars ? text : causeGap(tool, 'truncated', capture, storage, maxChars);
44
61
  }
45
62
  //# sourceMappingURL=causeResponse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"causeResponse.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeResponse.ts"],"names":[],"mappings":"AAIA,MAAM,mBAAmB,GACvB,4JAA4J,CAAC;AAE/J,MAAM,eAAe,GAAkC;IACrD,mBAAmB,EACjB,sHAAsH;IACxH,qBAAqB,EAAE,mBAAmB;IAC1C,qBAAqB,EAAE,6CAA6C;IACpE,cAAc,EAAE,iEAAiE;IACjF,mBAAmB,EAAE,iDAAiD;IACtE,mBAAmB,EAAE,+DAA+D;IACpF,mBAAmB,EAAE,mDAAmD;IACxE,qBAAqB,EACnB,qFAAqF;IACvF,sBAAsB,EAAE,gEAAgE;IACxF,iBAAiB,EAAE,+DAA+D;IAClF,sBAAsB,EACpB,6EAA6E;IAC/E,uBAAuB,EAAE,4DAA4D;CACtF,CAAC;AAEF,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAgC;IACvE,OAAO,OAAO;QACZ,CAAC,CAAC,GAAG,IAAI,IACL,OAAO,KAAK,IAAI;YACd,CAAC,CAAC,+EAA+E;YACjF,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CACpC,EAAE;QACJ,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,QAAQ,CACtB,IAAyB,EACzB,IAAa,EACb,OAAgC;IAEhC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,IAAI;QACJ,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC9B,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,cAAc,EAAE,iBAAiB,CAC/B,4EAA4E,EAC5E,OAAO,CACR;KACF,CAAC,CAAC;AACL,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,aAAa,CAC3B,IAAyB,EACzB,OAAgB,EAChB,cAAsB,EACtB,QAAgB,EAChB,OAAgC;IAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,IAAI;QACJ,IAAI,EAAE,mBAAmB;QACzB,OAAO;QACP,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC;KAC3D,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"causeResponse.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeResponse.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,4 @@
1
1
  import type { StageSnapshot } from 'footprintjs/advanced';
2
2
  import type { TraceToolpackArtifacts } from './types.js';
3
- import type { TraceCauseArtifacts } from './causeTypes.js';
4
- import { type SnapshotCapture } from './causeCapture.js';
5
- interface SnapshotCauseArtifacts extends TraceCauseArtifacts {
6
- readonly capture: SnapshotCapture;
7
- }
8
- /** A snapshot projection, not another dependence walker. The public reader owns all graph reasoning. */
9
- export declare function snapshotCauseArtifacts(artifacts: TraceToolpackArtifacts, nodes: ReadonlyMap<string, StageSnapshot>): SnapshotCauseArtifacts | 'truncated' | undefined;
10
- export {};
3
+ /** Preserve the existing in-memory projection through the shared narrow basis. */
4
+ export declare function snapshotCauseArtifacts(artifacts: TraceToolpackArtifacts, nodes: ReadonlyMap<string, StageSnapshot>): "truncated" | import("./causeProjection.js").SnapshotCauseArtifacts | undefined;
@@ -1,66 +1,6 @@
1
- import { createRecordGraph } from 'foottrace/cause';
2
- import { assessCapture, captureAddress, captureAssessment, captureOwn as own, } from './causeCapture.js';
3
- import { capturedControl } from './causeControl.js';
4
- /** A snapshot projection, not another dependence walker. The public reader owns all graph reasoning. */
1
+ import { projectCauseBasis } from './causeProjection.js';
2
+ /** Preserve the existing in-memory projection through the shared narrow basis. */
5
3
  export function snapshotCauseArtifacts(artifacts, nodes) {
6
- const snapshot = artifacts.snapshot;
7
- // A snapshot-local namespace is not a storage address or a service-correlation claim.
8
- const recordedAddress = own(snapshot, 'logAddress');
9
- const runId = own(snapshot, 'runId');
10
- const address = recordedAddress ??
11
- (typeof runId === 'string' ? { logRunId: `snapshot:${runId}`, drillPath: [] } : undefined);
12
- if (address === undefined)
13
- return undefined;
14
- const log = own(snapshot, 'commitLog');
15
- if (!Array.isArray(log))
16
- return undefined;
17
- if (log.length > 4096)
18
- return 'truncated';
19
- let capture = assessCapture(snapshot, log.length);
20
- const nativeControl = capture.status === 'admitted' ? capturedControl(snapshot) : undefined;
21
- if (capture.status === 'admitted' && nativeControl === undefined)
22
- capture = captureAssessment('control-not-retained');
23
- const reads = Object.create(null);
24
- const marks = Object.create(null);
25
- const control = Object.create(null);
26
- let visited = 0;
27
- for (const [id, stage] of nodes) {
28
- if (visited++ >= 4096)
29
- return 'truncated';
30
- const capturedReads = own(stage, 'stageReads');
31
- if (capturedReads !== null && typeof capturedReads === 'object')
32
- reads[id] = Object.keys(capturedReads);
33
- else if (capture.status === 'admitted')
34
- reads[id] = [];
35
- const attention = own(stage, 'attention');
36
- if (attention !== undefined)
37
- marks[id] = attention;
38
- const parent = nativeControl === undefined ? artifacts.controlDeps?.(id) : nativeControl[id];
39
- if (parent !== undefined)
40
- control[id] = { deciderId: parent.deciderId };
41
- }
42
- if (capture.status === 'admitted' &&
43
- log.some((bundle) => !nodes.has(own(bundle, 'runtimeStageId'))))
44
- capture = captureAssessment('projection-incomplete');
45
- const complete = capture.status === 'admitted';
46
- const scopeAddress = (complete && captureAddress(own(snapshot, 'logAddress'))) || address;
47
- const scope = {
48
- address: scopeAddress,
49
- commitLog: log,
50
- reads,
51
- ...(complete || Object.keys(marks).length
52
- ? { attention: marks }
53
- : {}),
54
- ...(nativeControl === undefined && artifacts.controlDeps === undefined
55
- ? {}
56
- : { controlDeps: control }),
57
- complete,
58
- };
59
- const graph = createRecordGraph([scope], { maxCommits: 4096 });
60
- // The public scope reader admits untrusted commits and creates its own official IDs.
61
- return {
62
- graph: { ...graph, roots: (context) => graph.openScope(scopeAddress, context) },
63
- capture,
64
- };
4
+ return projectCauseBasis(artifacts.snapshot, nodes, () => artifacts.controlDeps);
65
5
  }
66
6
  //# sourceMappingURL=causeSnapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"causeSnapshot.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeSnapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"causeSnapshot.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeSnapshot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CACpC,SAAiC,EACjC,KAAyC;IAEzC,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACnF,CAAC"}
@@ -1,6 +1,13 @@
1
1
  import type { StageSnapshot } from 'footprintjs/advanced';
2
2
  import { type Tool } from '../tools/tools.js';
3
3
  import type { TraceToolpackArtifacts } from './types.js';
4
- import type { TraceCauseOptions } from './causeTypes.js';
4
+ import type { TraceCauseArtifacts, TraceCauseOptions } from './causeTypes.js';
5
5
  /** Model questions select IDs only. The host owns all resource controls. */
6
6
  export declare function buildCauseTools(artifacts: TraceToolpackArtifacts, nodes: ReadonlyMap<string, StageSnapshot>, options?: TraceCauseOptions): Tool[];
7
+ /**
8
+ * Serve the three read-only cause questions over one host-authorized graph.
9
+ * Saved evidence must be the exact object returned by `readStoredCauseArtifacts`;
10
+ * copied display assessments do not grant saved-history authority.
11
+ * No snapshot is indexed, no storage is fetched and no business work is rerun.
12
+ */
13
+ export declare function traceCauseTools(cause: TraceCauseArtifacts, options?: TraceCauseOptions): Tool[];
@@ -2,6 +2,7 @@ import { defineTool } from '../tools/tools.js';
2
2
  import { causeLimits } from './causeLimits.js';
3
3
  import { causeGap } from './causeResponse.js';
4
4
  import { loadCauseReader } from './causeLoad.js';
5
+ import { causeContextAssessment } from './causeContext.js';
5
6
  const nodeId = {
6
7
  type: 'string',
7
8
  minLength: 1,
@@ -34,34 +35,56 @@ const CAUSE_OPERATIONS = {
34
35
  };
35
36
  /** Model questions select IDs only. The host owns all resource controls. */
36
37
  export function buildCauseTools(artifacts, nodes, options) {
38
+ return toolsForContext({ kind: 'snapshot', artifacts, nodes }, options);
39
+ }
40
+ /**
41
+ * Serve the three read-only cause questions over one host-authorized graph.
42
+ * Saved evidence must be the exact object returned by `readStoredCauseArtifacts`;
43
+ * copied display assessments do not grant saved-history authority.
44
+ * No snapshot is indexed, no storage is fetched and no business work is rerun.
45
+ */
46
+ export function traceCauseTools(cause, options) {
47
+ return toolsForContext({ kind: 'graph', cause }, options);
48
+ }
49
+ function toolsForContext(context, options) {
37
50
  return Object.keys(CAUSE_OPERATIONS).map((operation) => defineTool({
38
51
  name: operation,
39
52
  ...CAUSE_OPERATIONS[operation],
40
- execute: async (question, context) => {
41
- const snapshotOnly = artifacts.cause === undefined ? true : undefined;
42
- if (context.signal?.aborted)
43
- return causeGap(operation, 'cancelled', snapshotOnly);
53
+ execute: async (question, execution) => {
54
+ const assessed = causeContextAssessment(context);
55
+ if (assessed.kind === 'invalid')
56
+ return causeGap(operation, 'invalid-data');
57
+ const capture = assessed.kind === 'stored'
58
+ ? assessed.capture
59
+ : context.kind === 'snapshot' && context.artifacts.cause === undefined
60
+ ? true
61
+ : undefined;
62
+ const storage = assessed.kind === 'stored' ? assessed.admission.storage : undefined;
63
+ if (execution.signal?.aborted && storage === undefined)
64
+ return causeGap(operation, 'cancelled', capture);
44
65
  let limits;
45
66
  try {
46
67
  limits = causeLimits(options);
47
68
  }
48
69
  catch {
49
- return causeGap(operation, 'invalid-data', snapshotOnly);
70
+ return causeGap(operation, 'invalid-data', capture, storage, 512);
50
71
  }
72
+ if (execution.signal?.aborted)
73
+ return causeGap(operation, 'cancelled', capture, storage, limits.maxChars);
51
74
  const deadline = performance.now() + limits.timeoutMs;
52
75
  try {
53
- const loaded = await loadCauseReader(deadline, context.signal);
76
+ const loaded = await loadCauseReader(deadline, execution.signal);
54
77
  if ('gap' in loaded)
55
- return causeGap(operation, loaded.gap, snapshotOnly);
56
- return await loaded.reader.readCause(operation, artifacts, nodes, question, limits, deadline, context.signal);
78
+ return causeGap(operation, loaded.gap, capture, storage, limits.maxChars);
79
+ return await loaded.reader.readCause(operation, context, question, limits, deadline, execution.signal);
57
80
  }
58
81
  catch {
59
82
  // Includes bounded loader refusals. Never echo an exception or disclose a private path.
60
- return causeGap(operation, context.signal?.aborted
83
+ return causeGap(operation, execution.signal?.aborted
61
84
  ? 'cancelled'
62
85
  : performance.now() >= deadline
63
86
  ? 'timeout'
64
- : 'unavailable', snapshotOnly);
87
+ : 'unavailable', capture, storage, limits.maxChars);
65
88
  }
66
89
  },
67
90
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"causeTools.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"causeTools.js","sourceRoot":"","sources":["../../../src/trace-toolpack/causeTools.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,9 @@ export { callTraceTool, traceToolpack, TRACE_TOOL_NAMES } from './traceToolpack.
21
21
  export { lazyTraceToolpack, NO_COMPLETED_RUN_MESSAGE } from './lazyToolpack.js';
22
22
  export { openRecording, type OpenableRecording } from './openRecording.js';
23
23
  export type { TraceCauseArtifacts, TraceCauseOptions, TraceCauseOperation } from './causeTypes.js';
24
+ export { traceCauseTools } from './causeTools.js';
25
+ export { readStoredCauseArtifacts } from './storedCause.js';
26
+ export type { ReadStoredCauseOptions, StoredCauseUnknown, StoredCauseAdmission, StoredCauseArtifacts, StoredCauseResult, } from './storedCauseTypes.js';
24
27
  export { DEFAULT_INNER_RUN_LIMIT, INNER_RUN_RECORDS, innerRunStore, innerRunsOf, mergeInnerRuns, type InnerRunLookup, type InnerRunOutcome, type InnerRunRecord, type InnerRunStore, type InnerRunSummary, type KeepsInnerRuns, } from '../core/innerRunRecords.js';
25
28
  export { traceDebugAgent, type TraceDebugAgentOptions } from './traceDebugAgent.js';
26
29
  export { buildSelfExplainSkill, buildSelfExplainToolProvider, SelfExplainBinding, SELF_EXPLAIN_MAX_EVENTS, type SelfExplainInclude, type SelfExplainOptions, type SelfExplainServing, type SelfExplainSource, } from './selfExplain.js';
@@ -23,6 +23,8 @@ export { callTraceTool, traceToolpack, TRACE_TOOL_NAMES } from './traceToolpack.
23
23
  // consumer has no call to construct one.
24
24
  export { lazyTraceToolpack, NO_COMPLETED_RUN_MESSAGE } from './lazyToolpack.js';
25
25
  export { openRecording } from './openRecording.js';
26
+ export { traceCauseTools } from './causeTools.js';
27
+ export { readStoredCauseArtifacts } from './storedCause.js';
26
28
  // The record a TOOL keeps of its own run — what `inspect_tool_run` opens.
27
29
  // `INNER_RUN_RECORDS` / `innerRunsOf` are the join key between a Tool and
28
30
  // its store; `innerRunStore` / `mergeInnerRuns` exist for consumers wiring
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trace-toolpack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpF,2EAA2E;AAC3E,6EAA6E;AAC7E,yCAAyC;AACzC,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAE3E,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,cAAc,GAOf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,GAKxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,GAGnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trace-toolpack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpF,2EAA2E;AAC3E,6EAA6E;AAC7E,yCAAyC;AACzC,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAQ5D,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,cAAc,GAOf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,GAKxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,GAGnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReadStoredCauseOptions, StoredCauseResult } from './storedCauseTypes.js';
2
+ /**
3
+ * Admit one host-authorized saved root through the producer's public reader, without a runtime snapshot.
4
+ * Storage acknowledgement is not producer authentication. Missing source ownership remains unknown.
5
+ * Graph projection is capped at 4,096 nodes/commits and uses the producer's 256-level data depth.
6
+ * Cannot preempt a blocking host iterator; cancellation is checked before and after asynchronous admission.
7
+ */
8
+ export declare function readStoredCauseArtifacts(entries: Iterable<unknown>, options: ReadStoredCauseOptions): Promise<StoredCauseResult>;
@@ -0,0 +1,58 @@
1
+ import { captureOwn } from './causeCapture.js';
2
+ import { storedCauseCancelled, storedCauseOptions } from './storedCauseOptions.js';
3
+ const unknown = (reason) => ({ status: 'unknown', reason });
4
+ /**
5
+ * Admit one host-authorized saved root through the producer's public reader, without a runtime snapshot.
6
+ * Storage acknowledgement is not producer authentication. Missing source ownership remains unknown.
7
+ * Graph projection is capped at 4,096 nodes/commits and uses the producer's 256-level data depth.
8
+ * Cannot preempt a blocking host iterator; cancellation is checked before and after asynchronous admission.
9
+ */
10
+ export async function readStoredCauseArtifacts(entries, options) {
11
+ let configured;
12
+ try {
13
+ configured = storedCauseOptions(options);
14
+ if (storedCauseCancelled(configured.signal))
15
+ return unknown('cancelled');
16
+ }
17
+ catch {
18
+ return unknown('invalid-data');
19
+ }
20
+ if (!globalThis.crypto?.subtle)
21
+ return unknown('unavailable');
22
+ let reader;
23
+ try {
24
+ ({ readStoredCapture: reader } = await import('./storedCauseReader.js'));
25
+ }
26
+ catch {
27
+ return unknown('unsupported');
28
+ }
29
+ if (storedCauseCancelled(configured.signal))
30
+ return unknown('cancelled');
31
+ if (typeof reader !== 'function')
32
+ return unknown('unsupported');
33
+ try {
34
+ const result = await reader(entries, {
35
+ runId: configured.runId,
36
+ maxBytes: configured.maxBytes,
37
+ ...(configured.readerLimits === undefined ? {} : { limits: configured.readerLimits }),
38
+ });
39
+ if (storedCauseCancelled(configured.signal))
40
+ return unknown('cancelled');
41
+ if (captureOwn(result, 'status') !== 'acknowledged') {
42
+ const reason = captureOwn(result, 'reason');
43
+ return unknown(reason === 'reader-limit' || reason === 'history-too-large'
44
+ ? 'reader-limit'
45
+ : 'stored-admission');
46
+ }
47
+ const history = captureOwn(result, 'history');
48
+ const { projectStoredCause } = await import('./storedCauseProjection.js');
49
+ if (storedCauseCancelled(configured.signal))
50
+ return unknown('cancelled');
51
+ const projected = projectStoredCause(history, configured.runId, configured.maxBytes);
52
+ return storedCauseCancelled(configured.signal) ? unknown('cancelled') : projected;
53
+ }
54
+ catch {
55
+ return unknown(storedCauseCancelled(configured.signal) ? 'cancelled' : 'unavailable');
56
+ }
57
+ }
58
+ //# sourceMappingURL=storedCause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storedCause.js","sourceRoot":"","sources":["../../../src/trace-toolpack/storedCause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOnF,MAAM,OAAO,GAAG,CAAC,MAA0B,EAAqB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AAEnG;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA0B,EAC1B,OAA+B;IAE/B,IAAI,UAAiD,CAAC;IACtD,IAAI,CAAC;QACH,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9D,IAAI,MAAoE,CAAC;IACzE,IAAI,CAAC;QACH,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,GAAG,CAAC,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;SACtF,CAAC,CAAC;QACH,IAAI,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,cAAc,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,OAAO,OAAO,CACZ,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,mBAAmB;gBACzD,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,kBAAkB,CACvB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC1E,IAAI,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrF,OAAO,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CauseGraph } from 'foottrace/cause';
2
+ import type { SnapshotCapture } from './causeCapture.js';
3
+ import type { StoredCauseAdmission, StoredCauseArtifacts } from './storedCauseTypes.js';
4
+ export type StoredCauseAssessment = {
5
+ readonly kind: 'none';
6
+ } | {
7
+ readonly kind: 'invalid';
8
+ } | {
9
+ readonly kind: 'stored';
10
+ readonly capture: SnapshotCapture;
11
+ readonly admission: StoredCauseAdmission;
12
+ };
13
+ /** Internal issuer. This identity is intentionally not serializable or shared across module instances. */
14
+ export declare function bindStoredCause(graph: CauseGraph, capture: SnapshotCapture, history: object, version: 1 | 2): StoredCauseArtifacts;
15
+ /** Read identity, never the value of a caller's assessment property or an attached getter. */
16
+ export declare function storedCauseAssessment(cause: unknown): StoredCauseAssessment;
@@ -0,0 +1,50 @@
1
+ const bindings = new WeakMap();
2
+ function admissionFor(capture, version) {
3
+ return Object.freeze({
4
+ native: Object.freeze({
5
+ status: capture.status,
6
+ reason: capture.reason,
7
+ version,
8
+ scope: 'root-log',
9
+ persistence: 'memory-only',
10
+ }),
11
+ storage: Object.freeze({
12
+ status: 'adapter-acknowledged-history',
13
+ scope: 'root-log',
14
+ }),
15
+ readSources: capture.readSources,
16
+ });
17
+ }
18
+ /** Internal issuer. This identity is intentionally not serializable or shared across module instances. */
19
+ export function bindStoredCause(graph, capture, history, version) {
20
+ const frozenGraph = Object.freeze(graph);
21
+ const frozenCapture = Object.freeze({ ...capture });
22
+ const admission = admissionFor(frozenCapture, version);
23
+ // The display copy is separate from the authority retained by this module instance.
24
+ const cause = Object.freeze({
25
+ graph: frozenGraph,
26
+ admission: admissionFor(frozenCapture, version),
27
+ });
28
+ bindings.set(cause, { graph: frozenGraph, capture: frozenCapture, admission, history });
29
+ return cause;
30
+ }
31
+ /** Read identity, never the value of a caller's assessment property or an attached getter. */
32
+ export function storedCauseAssessment(cause) {
33
+ if (cause === null || typeof cause !== 'object')
34
+ return { kind: 'none' };
35
+ try {
36
+ const binding = bindings.get(cause);
37
+ if (binding) {
38
+ const graph = Object.getOwnPropertyDescriptor(cause, 'graph');
39
+ return graph && 'value' in graph && graph.value === binding.graph
40
+ ? { kind: 'stored', capture: binding.capture, admission: binding.admission }
41
+ : { kind: 'invalid' };
42
+ }
43
+ // Inherited copies carry the same claim but not the issuing identity. `in` invokes no getter.
44
+ return 'admission' in cause ? { kind: 'invalid' } : { kind: 'none' };
45
+ }
46
+ catch {
47
+ return { kind: 'invalid' };
48
+ }
49
+ }
50
+ //# sourceMappingURL=storedCauseBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storedCauseBinding.js","sourceRoot":"","sources":["../../../src/trace-toolpack/storedCauseBinding.ts"],"names":[],"mappings":"AAoBA,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAmB,CAAC;AAEhD,SAAS,YAAY,CAAC,OAAwB,EAAE,OAAc;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,KAAK,EAAE,UAAmB;YAC1B,WAAW,EAAE,aAAsB;SACpC,CAAC;QACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,MAAM,EAAE,8BAAuC;YAC/C,KAAK,EAAE,UAAmB;SAC3B,CAAC;QACF,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;AACL,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,OAAwB,EACxB,OAAe,EACf,OAAc;IAEd,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,oFAAoF;IACpF,MAAM,KAAK,GAAyB,MAAM,CAAC,MAAM,CAAC;QAChD,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;KAChD,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACxF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;gBAC/D,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;gBAC5E,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC1B,CAAC;QACD,8FAA8F;QAC9F,OAAO,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ReadStoredCauseOptions } from './storedCauseTypes.js';
2
+ /** Only the declared host settings; no coercion, getters, inherited overrides or mutable options bag. */
3
+ export declare function storedCauseOptions(value: ReadStoredCauseOptions): Required<Pick<ReadStoredCauseOptions, 'runId' | 'maxBytes' | 'readerLimits'>> & Pick<ReadStoredCauseOptions, 'signal'>;
4
+ /** Call the platform getter itself, so a host subclass cannot replace this observation with code. */
5
+ export declare function storedCauseCancelled(signal?: AbortSignal): boolean;
@@ -0,0 +1,53 @@
1
+ import { ownData } from '../lib/boundedJson.js';
2
+ const DEFAULT_READER_LIMITS = Object.freeze({
3
+ entries: 16_384,
4
+ missingCommits: 4096,
5
+ drillDepth: 64,
6
+ addressLength: 2048,
7
+ });
8
+ const READER_CEILINGS = { ...DEFAULT_READER_LIMITS, entries: 65_536 };
9
+ const LIMIT_KEYS = Object.keys(DEFAULT_READER_LIMITS);
10
+ /** Only the declared host settings; no coercion, getters, inherited overrides or mutable options bag. */
11
+ export function storedCauseOptions(value) {
12
+ const data = ownData(value, ['runId', 'readerLimits', 'maxBytes', 'signal']);
13
+ if (typeof data.runId !== 'string' || data.runId.length === 0 || data.runId.length > 128)
14
+ throw Error('Invalid stored cause options.');
15
+ const maxBytes = data.maxBytes === undefined ? 1024 * 1024 : data.maxBytes;
16
+ if (!Number.isSafeInteger(maxBytes) ||
17
+ maxBytes < 1 ||
18
+ maxBytes > 8 * 1024 * 1024)
19
+ throw Error('Invalid stored cause options.');
20
+ const provided = data.readerLimits === undefined ? {} : ownData(data.readerLimits, LIMIT_KEYS);
21
+ for (const key of LIMIT_KEYS) {
22
+ const limit = provided[key];
23
+ if (limit !== undefined &&
24
+ (!Number.isSafeInteger(limit) ||
25
+ limit < 0 ||
26
+ limit > READER_CEILINGS[key]))
27
+ throw Error('Invalid stored cause options.');
28
+ }
29
+ // Bound the upstream reader before it can allocate gap rows or iterate its very large defaults.
30
+ const limits = {
31
+ ...DEFAULT_READER_LIMITS,
32
+ ...Object.fromEntries(Object.entries(provided).filter(([, limit]) => limit !== undefined)),
33
+ };
34
+ const signal = data.signal;
35
+ if (signal !== undefined && !(signal instanceof AbortSignal))
36
+ throw Error('Invalid stored cause options.');
37
+ return {
38
+ runId: data.runId,
39
+ maxBytes: maxBytes,
40
+ readerLimits: limits,
41
+ ...(signal !== undefined && { signal: signal }),
42
+ };
43
+ }
44
+ /** Call the platform getter itself, so a host subclass cannot replace this observation with code. */
45
+ export function storedCauseCancelled(signal) {
46
+ if (!signal)
47
+ return false;
48
+ const getter = Object.getOwnPropertyDescriptor(AbortSignal.prototype, 'aborted')?.get;
49
+ if (!getter)
50
+ throw Error('Abort signal observation is unavailable.');
51
+ return getter.call(signal);
52
+ }
53
+ //# sourceMappingURL=storedCauseOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storedCauseOptions.js","sourceRoot":"","sources":["../../../src/trace-toolpack/storedCauseOptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { StoredCauseResult } from './storedCauseTypes.js';
2
+ /** A narrow graph projection over admitted producer history, never a synthetic RuntimeSnapshot. */
3
+ export declare function projectStoredCause(value: unknown, runId: string, maxBytes: number): StoredCauseResult;