agentfootprint 9.74.0 → 9.76.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 (161) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +126 -0
  3. package/CLAUDE.md +24 -19
  4. package/ai-instructions/claude-code/SKILL.md +1 -1
  5. package/dist/artifacts/index.js +3 -1
  6. package/dist/artifacts/index.js.map +1 -1
  7. package/dist/artifacts/recordingArtifact.js +47 -1
  8. package/dist/artifacts/recordingArtifact.js.map +1 -1
  9. package/dist/core/Agent.js +53 -1
  10. package/dist/core/Agent.js.map +1 -1
  11. package/dist/core/agent/AgentBuilder.js +12 -0
  12. package/dist/core/agent/AgentBuilder.js.map +1 -1
  13. package/dist/core/agent/evidence/gate.js +22 -3
  14. package/dist/core/agent/evidence/gate.js.map +1 -1
  15. package/dist/core/agent/stagedRefs.js +161 -0
  16. package/dist/core/agent/stagedRefs.js.map +1 -0
  17. package/dist/core/agent/stages/callLLM.js +22 -2
  18. package/dist/core/agent/stages/callLLM.js.map +1 -1
  19. package/dist/core/agent/stages/evidenceRecheck.js +21 -2
  20. package/dist/core/agent/stages/evidenceRecheck.js.map +1 -1
  21. package/dist/core/agent/stages/toolCalls.js +42 -0
  22. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  23. package/dist/core/agent/toolDispatch.js +101 -0
  24. package/dist/core/agent/toolDispatch.js.map +1 -0
  25. package/dist/core/flowchartAsTool.js +9 -2
  26. package/dist/core/flowchartAsTool.js.map +1 -1
  27. package/dist/core/runbook/coverage.js +162 -0
  28. package/dist/core/runbook/coverage.js.map +1 -0
  29. package/dist/core/runbook/dispatch.js +119 -0
  30. package/dist/core/runbook/dispatch.js.map +1 -0
  31. package/dist/core/runbook/index.js +24 -0
  32. package/dist/core/runbook/index.js.map +1 -0
  33. package/dist/core/runbook/runbookAsTool.js +358 -0
  34. package/dist/core/runbook/runbookAsTool.js.map +1 -0
  35. package/dist/core/runbook/types.js +22 -0
  36. package/dist/core/runbook/types.js.map +1 -0
  37. package/dist/core/runbook/verdicts.js +156 -0
  38. package/dist/core/runbook/verdicts.js.map +1 -0
  39. package/dist/core/runbook/walk.js +115 -0
  40. package/dist/core/runbook/walk.js.map +1 -0
  41. package/dist/core/tools.js +55 -1
  42. package/dist/core/tools.js.map +1 -1
  43. package/dist/esm/artifacts/index.d.ts +1 -1
  44. package/dist/esm/artifacts/index.js +1 -1
  45. package/dist/esm/artifacts/index.js.map +1 -1
  46. package/dist/esm/artifacts/recordingArtifact.d.ts +36 -0
  47. package/dist/esm/artifacts/recordingArtifact.js +45 -0
  48. package/dist/esm/artifacts/recordingArtifact.js.map +1 -1
  49. package/dist/esm/core/Agent.js +53 -1
  50. package/dist/esm/core/Agent.js.map +1 -1
  51. package/dist/esm/core/agent/AgentBuilder.d.ts +12 -0
  52. package/dist/esm/core/agent/AgentBuilder.js +12 -0
  53. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  54. package/dist/esm/core/agent/evidence/gate.d.ts +11 -1
  55. package/dist/esm/core/agent/evidence/gate.js +22 -3
  56. package/dist/esm/core/agent/evidence/gate.js.map +1 -1
  57. package/dist/esm/core/agent/evidence/types.d.ts +23 -0
  58. package/dist/esm/core/agent/stagedRefs.d.ts +94 -0
  59. package/dist/esm/core/agent/stagedRefs.js +154 -0
  60. package/dist/esm/core/agent/stagedRefs.js.map +1 -0
  61. package/dist/esm/core/agent/stages/callLLM.d.ts +17 -0
  62. package/dist/esm/core/agent/stages/callLLM.js +22 -2
  63. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  64. package/dist/esm/core/agent/stages/evidenceRecheck.d.ts +19 -1
  65. package/dist/esm/core/agent/stages/evidenceRecheck.js +21 -2
  66. package/dist/esm/core/agent/stages/evidenceRecheck.js.map +1 -1
  67. package/dist/esm/core/agent/stages/toolCalls.js +42 -0
  68. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  69. package/dist/esm/core/agent/toolDispatch.d.ts +50 -0
  70. package/dist/esm/core/agent/toolDispatch.js +97 -0
  71. package/dist/esm/core/agent/toolDispatch.js.map +1 -0
  72. package/dist/esm/core/flowchartAsTool.d.ts +6 -0
  73. package/dist/esm/core/flowchartAsTool.js +9 -2
  74. package/dist/esm/core/flowchartAsTool.js.map +1 -1
  75. package/dist/esm/core/runbook/coverage.d.ts +69 -0
  76. package/dist/esm/core/runbook/coverage.js +155 -0
  77. package/dist/esm/core/runbook/coverage.js.map +1 -0
  78. package/dist/esm/core/runbook/dispatch.d.ts +69 -0
  79. package/dist/esm/core/runbook/dispatch.js +112 -0
  80. package/dist/esm/core/runbook/dispatch.js.map +1 -0
  81. package/dist/esm/core/runbook/index.d.ts +9 -0
  82. package/dist/esm/core/runbook/index.js +9 -0
  83. package/dist/esm/core/runbook/index.js.map +1 -0
  84. package/dist/esm/core/runbook/runbookAsTool.d.ts +88 -0
  85. package/dist/esm/core/runbook/runbookAsTool.js +354 -0
  86. package/dist/esm/core/runbook/runbookAsTool.js.map +1 -0
  87. package/dist/esm/core/runbook/types.d.ts +196 -0
  88. package/dist/esm/core/runbook/types.js +21 -0
  89. package/dist/esm/core/runbook/types.js.map +1 -0
  90. package/dist/esm/core/runbook/verdicts.d.ts +78 -0
  91. package/dist/esm/core/runbook/verdicts.js +148 -0
  92. package/dist/esm/core/runbook/verdicts.js.map +1 -0
  93. package/dist/esm/core/runbook/walk.d.ts +72 -0
  94. package/dist/esm/core/runbook/walk.js +110 -0
  95. package/dist/esm/core/runbook/walk.js.map +1 -0
  96. package/dist/esm/core/tools.d.ts +112 -0
  97. package/dist/esm/core/tools.js +52 -0
  98. package/dist/esm/core/tools.js.map +1 -1
  99. package/dist/esm/events/payloads.d.ts +39 -0
  100. package/dist/esm/events/registry.d.ts +3 -1
  101. package/dist/esm/events/registry.js +2 -0
  102. package/dist/esm/events/registry.js.map +1 -1
  103. package/dist/esm/index.d.ts +4 -3
  104. package/dist/esm/index.js +19 -2
  105. package/dist/esm/index.js.map +1 -1
  106. package/dist/esm/lib/mcp/toolExtras.d.ts +8 -0
  107. package/dist/esm/lib/mcp/toolExtras.js +7 -1
  108. package/dist/esm/lib/mcp/toolExtras.js.map +1 -1
  109. package/dist/events/registry.js +2 -0
  110. package/dist/events/registry.js.map +1 -1
  111. package/dist/index.js +97 -66
  112. package/dist/index.js.map +1 -1
  113. package/dist/lib/mcp/toolExtras.js +6 -0
  114. package/dist/lib/mcp/toolExtras.js.map +1 -1
  115. package/dist/types/artifacts/index.d.ts +1 -1
  116. package/dist/types/artifacts/index.d.ts.map +1 -1
  117. package/dist/types/artifacts/recordingArtifact.d.ts +36 -0
  118. package/dist/types/artifacts/recordingArtifact.d.ts.map +1 -1
  119. package/dist/types/core/Agent.d.ts.map +1 -1
  120. package/dist/types/core/agent/AgentBuilder.d.ts +12 -0
  121. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  122. package/dist/types/core/agent/evidence/gate.d.ts +11 -1
  123. package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
  124. package/dist/types/core/agent/evidence/types.d.ts +23 -0
  125. package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
  126. package/dist/types/core/agent/stagedRefs.d.ts +95 -0
  127. package/dist/types/core/agent/stagedRefs.d.ts.map +1 -0
  128. package/dist/types/core/agent/stages/callLLM.d.ts +17 -0
  129. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  130. package/dist/types/core/agent/stages/evidenceRecheck.d.ts +19 -1
  131. package/dist/types/core/agent/stages/evidenceRecheck.d.ts.map +1 -1
  132. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  133. package/dist/types/core/agent/toolDispatch.d.ts +51 -0
  134. package/dist/types/core/agent/toolDispatch.d.ts.map +1 -0
  135. package/dist/types/core/flowchartAsTool.d.ts +6 -0
  136. package/dist/types/core/flowchartAsTool.d.ts.map +1 -1
  137. package/dist/types/core/runbook/coverage.d.ts +70 -0
  138. package/dist/types/core/runbook/coverage.d.ts.map +1 -0
  139. package/dist/types/core/runbook/dispatch.d.ts +70 -0
  140. package/dist/types/core/runbook/dispatch.d.ts.map +1 -0
  141. package/dist/types/core/runbook/index.d.ts +10 -0
  142. package/dist/types/core/runbook/index.d.ts.map +1 -0
  143. package/dist/types/core/runbook/runbookAsTool.d.ts +89 -0
  144. package/dist/types/core/runbook/runbookAsTool.d.ts.map +1 -0
  145. package/dist/types/core/runbook/types.d.ts +197 -0
  146. package/dist/types/core/runbook/types.d.ts.map +1 -0
  147. package/dist/types/core/runbook/verdicts.d.ts +79 -0
  148. package/dist/types/core/runbook/verdicts.d.ts.map +1 -0
  149. package/dist/types/core/runbook/walk.d.ts +73 -0
  150. package/dist/types/core/runbook/walk.d.ts.map +1 -0
  151. package/dist/types/core/tools.d.ts +112 -0
  152. package/dist/types/core/tools.d.ts.map +1 -1
  153. package/dist/types/events/payloads.d.ts +39 -0
  154. package/dist/types/events/payloads.d.ts.map +1 -1
  155. package/dist/types/events/registry.d.ts +3 -1
  156. package/dist/types/events/registry.d.ts.map +1 -1
  157. package/dist/types/index.d.ts +4 -3
  158. package/dist/types/index.d.ts.map +1 -1
  159. package/dist/types/lib/mcp/toolExtras.d.ts +8 -0
  160. package/dist/types/lib/mcp/toolExtras.d.ts.map +1 -1
  161. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /**
3
+ * runbook/walk — the recorded walk: projection law, counters, mint.
4
+ *
5
+ * Pattern: pure projection (`projectWalk`) + one guarded side effect
6
+ * (`mintWalk`, which files the artifact and NEVER fails the answer).
7
+ * Role: core/runbook. The walk is not a debugging extra — a procedure that
8
+ * cannot show how it reached a verdict is a procedure somebody has
9
+ * to take on trust.
10
+ * Emits: nothing (the artifact capability emits its own `artifacts.*`).
11
+ *
12
+ * THE CAP LAW, and why a head slice is the wrong cap: in a chart walk the
13
+ * per-key reads and writes come FIRST and the decisions come LAST, so a
14
+ * naive head slice over a fleet sweep keeps four hundred writes and drops
15
+ * every decision — a walk with the walking taken out. When the whole thing
16
+ * does not fit, the CONTROL FLOW survives (stages, forks, subflows, and
17
+ * every `condition` entry carrying its decide() evidence) and the projection
18
+ * is DECLARED, so a reader knows which of the two they are holding.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.mintWalk = exports.projectWalk = exports.DEFAULT_WALK_CAP = void 0;
22
+ const recordingArtifact_js_1 = require("../../artifacts/recordingArtifact.js");
23
+ /** The default row cap — a readable artifact, not an archive. The count is
24
+ * always reported, so a truncated walk says it is truncated instead of
25
+ * looking like a short run. */
26
+ exports.DEFAULT_WALK_CAP = 500;
27
+ function toWalkRow(entry, step) {
28
+ return {
29
+ step,
30
+ type: entry.type,
31
+ depth: entry.depth,
32
+ stage: entry.stageName ?? null,
33
+ stage_id: entry.stageId ?? null,
34
+ runtime_stage_id: entry.runtimeStageId ?? null,
35
+ subflow: entry.subflowId ?? null,
36
+ text: entry.text,
37
+ };
38
+ }
39
+ /** Apply the cap law. Counters are about the WHOLE narrative (`total`), so a
40
+ * projected walk cannot read as a short run. */
41
+ function projectWalk(entries, cap) {
42
+ const full = entries.length <= cap;
43
+ const projection = full ? 'full' : 'control-flow';
44
+ const chosen = full ? entries : entries.filter((entry) => entry.type !== 'step');
45
+ const rows = chosen.slice(0, cap).map(toWalkRow);
46
+ return {
47
+ rows,
48
+ projection,
49
+ shown: rows.length,
50
+ total: entries.length,
51
+ complete: rows.length === entries.length,
52
+ };
53
+ }
54
+ exports.projectWalk = projectWalk;
55
+ /** The descriptor's standing sentence, plus the projection clause when the
56
+ * control flow is what survived. */
57
+ function walkNote(projection) {
58
+ return ("The chart's own walk, one row per execution step. The `condition` rows carry the " +
59
+ 'rule that matched, the values it compared and the branch it chose — that is where a ' +
60
+ 'verdict can be checked rather than taken on trust.' +
61
+ (projection === 'control-flow'
62
+ ? ' This one is the CONTROL-FLOW projection: the walk did not fit, so the stages, ' +
63
+ 'forks, subflows and decisions are here and the per-key reads and writes are not.'
64
+ : ''));
65
+ }
66
+ /**
67
+ * File the walk and build the descriptor. THE SPINE ALWAYS GETS A
68
+ * DESCRIPTOR: with no store attached, or when the mint fails, the counters
69
+ * still travel and the note names why there is no ticket — a failed mint
70
+ * costs the TICKET, never the answer and never the counts.
71
+ */
72
+ async function mintWalk(ctx, projected, facts) {
73
+ const base = {
74
+ rows: projected.rows.length,
75
+ steps_executed: facts.stepsExecuted,
76
+ projection: projected.projection,
77
+ shown: projected.shown,
78
+ total: projected.total,
79
+ complete: projected.complete,
80
+ walk_segment: 'full',
81
+ };
82
+ if (!ctx.hasArtifacts || projected.rows.length === 0) {
83
+ return {
84
+ ...base,
85
+ note: projected.rows.length === 0
86
+ ? 'The run produced no narrative entries, so there was no walk to file.'
87
+ : walkNote(projected.projection) +
88
+ ' No artifact store is attached to this run, so the walk was recorded but not ' +
89
+ 'filed — the counters above are still the truth about it.',
90
+ };
91
+ }
92
+ try {
93
+ const meta = await ctx.artifacts.put((0, recordingArtifact_js_1.chartWalkPutInput)([...projected.rows], {
94
+ toolName: facts.toolName,
95
+ toolCallId: facts.toolCallId,
96
+ ...(facts.runId !== undefined && { runId: facts.runId }),
97
+ }));
98
+ return {
99
+ ref: meta.ref,
100
+ kind: recordingArtifact_js_1.CHART_WALK_ARTIFACT_KIND,
101
+ ...base,
102
+ note: walkNote(projected.projection),
103
+ };
104
+ }
105
+ catch (err) {
106
+ return {
107
+ ...base,
108
+ note: walkNote(projected.projection) +
109
+ ` The walk could not be filed (${err instanceof Error ? err.message : String(err)}) — ` +
110
+ 'the mint failure cost the ticket, never the answer.',
111
+ };
112
+ }
113
+ }
114
+ exports.mintWalk = mintWalk;
115
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../src/core/runbook/walk.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  * Emits: N/A (types only).
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.defineTool = exports.warnIfInvalidToolName = exports.assertValidToolName = exports.assertArgumentsFrom = exports.assertToolOwner = exports.assertResultKind = exports.assertResultClass = exports.assertResultCeiling = void 0;
11
+ exports.defineTool = exports.warnIfInvalidToolName = exports.assertValidToolName = exports.assertGates = exports.assertComposedOf = exports.assertArgumentsFrom = exports.assertToolOwner = exports.assertResultKind = exports.assertResultClass = exports.assertResultCeiling = void 0;
12
12
  const footprintjs_1 = require("footprintjs");
13
13
  const wants_js_1 = require("../artifacts/wants.js");
14
14
  const types_js_1 = require("../lib/semantics/types.js");
@@ -155,6 +155,53 @@ function assertArgumentsFrom(toolName, argumentsFrom) {
155
155
  }
156
156
  }
157
157
  exports.assertArgumentsFrom = assertArgumentsFrom;
158
+ /**
159
+ * Refuse a `composedOf` list that could never be drift-checked, at definition
160
+ * time — the {@link assertArgumentsFrom} law applied to composition: the
161
+ * agent-build gate joins on these names, and a blank one — or a tool composed
162
+ * of itself — would join the wrong subjects or none. The REGISTRATION check
163
+ * (is every named ingredient actually registered?) deliberately does NOT
164
+ * happen here: the ingredients need not exist before this tool is defined,
165
+ * and only the agent build sees the complete catalog.
166
+ */
167
+ function assertComposedOf(toolName, composedOf) {
168
+ if (composedOf === undefined)
169
+ return;
170
+ // Same reason as `assertArgumentsFrom`: this rule is also asked about
171
+ // untyped values from a foreign MCP server, and `for…of` over a bare string
172
+ // would walk its CHARACTERS.
173
+ if (!Array.isArray(composedOf) || composedOf.length === 0) {
174
+ throw new Error(`defineTool('${toolName}'): \`composedOf\` must name at least one ingredient tool — ` +
175
+ `omitting the field is how "not composed" is said.`);
176
+ }
177
+ for (const ingredient of composedOf) {
178
+ if (typeof ingredient !== 'string' || ingredient.length === 0) {
179
+ throw new Error(`defineTool('${toolName}'): \`composedOf\` entries must be non-empty tool names. ` +
180
+ `Got ${JSON.stringify(ingredient)}.`);
181
+ }
182
+ if (ingredient === toolName) {
183
+ throw new Error(`defineTool('${toolName}'): \`composedOf\` names the tool itself — a tool cannot ` +
184
+ `be its own ingredient.`);
185
+ }
186
+ }
187
+ }
188
+ exports.assertComposedOf = assertComposedOf;
189
+ /**
190
+ * Refuse a `gates` declaration that is not a boolean, at definition time.
191
+ * Trivial for anyone the compiler vets; load-bearing at the MCP ingest
192
+ * boundary, where a foreign server can put anything under the key and a
193
+ * truthy string would silently declare a gate nobody wrote.
194
+ */
195
+ function assertGates(toolName, gates) {
196
+ if (gates === undefined)
197
+ return;
198
+ if (typeof gates !== 'boolean') {
199
+ throw new Error(`defineTool('${toolName}'): \`gates\` must be a boolean — \`true\` (this tool's ` +
200
+ `procedure can raise an approval gate), \`false\` (declared gate-free), or omitted ` +
201
+ `(nothing declared). Got ${JSON.stringify(gates)}.`);
202
+ }
203
+ }
204
+ exports.assertGates = assertGates;
158
205
  /**
159
206
  * Ergonomic builder for `Tool`. Equivalent to constructing an object
160
207
  * literal with `schema` + `execute`, but flatter and safer — the name
@@ -261,6 +308,11 @@ function defineTool(options) {
261
308
  // dangling-reference check joins on these names, and a blank one — or a
262
309
  // tool grounded by itself — would join the wrong subjects or none.
263
310
  assertArgumentsFrom(options.name, options.argumentsFrom);
311
+ // Composition edges get the same shape discipline; the REGISTRATION check
312
+ // (does every ingredient exist?) waits for the agent build, where the
313
+ // catalog is complete.
314
+ assertComposedOf(options.name, options.composedOf);
315
+ assertGates(options.name, options.gates);
264
316
  return {
265
317
  schema: {
266
318
  name: options.name,
@@ -281,6 +333,8 @@ function defineTool(options) {
281
333
  ...(options.resultKind !== undefined && { resultKind: options.resultKind }),
282
334
  ...(options.owner !== undefined && { owner: options.owner }),
283
335
  ...(options.argumentsFrom !== undefined && { argumentsFrom: options.argumentsFrom }),
336
+ ...(options.composedOf !== undefined && { composedOf: options.composedOf }),
337
+ ...(options.gates !== undefined && { gates: options.gates }),
284
338
  ...(options.repeatedWhen !== undefined && { repeatedWhen: options.repeatedWhen }),
285
339
  execute: options.execute,
286
340
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,6 @@ export { assertStreamBytes, bytesAsStream, canGetArtifactStream, canPutArtifactS
21
21
  export { bindArtifacts, unconfiguredArtifacts, type ArtifactEventFact, type ArtifactEventSink, type ArtifactOp, type ArtifactRefusalReason, type BindArtifactsOptions, type ToolArtifactPutInput, type ToolArtifacts, } from './capability.js';
22
22
  export { assertToolWants, resolveToolWants, wantsNeedsStoreRefusal, type ToolWants, type WantsRefusal, type WantsResolution, } from './wants.js';
23
23
  export { PRESENT_TOOL_NAME, presentArtifact, type PresentOutcome, type PresentSnapshot, type PresentedResult, } from './present.js';
24
- export { recordingPutInput, RECORDING_ARTIFACT_KIND, RECORDING_MEDIA_TYPE, UnserializableRecordingError, type RecordingMintFacts, } from './recordingArtifact.js';
24
+ export { recordingPutInput, RECORDING_ARTIFACT_KIND, RECORDING_MEDIA_TYPE, CHART_WALK_ARTIFACT_KIND, chartWalkPutInput, UnserializableRecordingError, type ChartWalkMintFacts, type RecordingMintFacts, } from './recordingArtifact.js';
25
25
  export { artifactStoreConformance, formatArtifactStoreReport, runArtifactStoreCase, runArtifactStoreConformance, type ArtifactConformanceKit, type ArtifactStoreCase, type ArtifactStoreCaseName, type ArtifactStoreHarness, type ArtifactStoreHarnessHook, type ArtifactStoreMember, type ArtifactStoreOutcome, type ArtifactStoreReport, } from './conformance/index.js';
26
26
  export { assertArtifactPlacement, isPlacedToolResult, placedResultKind, placedToolResult, type ArtifactPlacement, type PlacedToolResult, } from './placement.js';
@@ -20,7 +20,7 @@ export { assertStreamBytes, bytesAsStream, canGetArtifactStream, canPutArtifactS
20
20
  export { bindArtifacts, unconfiguredArtifacts, } from './capability.js';
21
21
  export { assertToolWants, resolveToolWants, wantsNeedsStoreRefusal, } from './wants.js';
22
22
  export { PRESENT_TOOL_NAME, presentArtifact, } from './present.js';
23
- export { recordingPutInput, RECORDING_ARTIFACT_KIND, RECORDING_MEDIA_TYPE, UnserializableRecordingError, } from './recordingArtifact.js';
23
+ export { recordingPutInput, RECORDING_ARTIFACT_KIND, RECORDING_MEDIA_TYPE, CHART_WALK_ARTIFACT_KIND, chartWalkPutInput, UnserializableRecordingError, } from './recordingArtifact.js';
24
24
  // The battery a store must pass to CLAIM the port, exported beside the port
25
25
  // itself so an out-of-tree store imports the check the same way it imports the
26
26
  // interface it is implementing. Imports no test framework — a case throws to
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/artifacts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GAetB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EACL,iBAAiB,EACjB,oCAAoC,GAGrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,2BAA2B,GAE5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,4BAA4B,GAG7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,GAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,qBAAqB,GAQtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GAIvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,GAE7B,MAAM,wBAAwB,CAAC;AAChC,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,mCAAmC;AACnC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,GAS5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/artifacts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GAetB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EACL,iBAAiB,EACjB,oCAAoC,GAGrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,2BAA2B,GAE5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,4BAA4B,GAG7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,GAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,qBAAqB,GAQtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,sBAAsB,GAIvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,GAG7B,MAAM,wBAAwB,CAAC;AAChC,4EAA4E;AAC5E,+EAA+E;AAC/E,6EAA6E;AAC7E,mCAAmC;AACnC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,GAS5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC"}
@@ -35,6 +35,14 @@ import type { PutArtifactInput } from './types.js';
35
35
  /** The consumer vocabulary a run recording is stored under. One kind, exact
36
36
  * match — the same rule every `wants` declaration is judged by. */
37
37
  export declare const RECORDING_ARTIFACT_KIND = "recording/run";
38
+ /**
39
+ * The consumer vocabulary a chart WALK is stored under (9.76.0) — one row per
40
+ * execution step of a runbook's inner chart, with the decider evidence
41
+ * sentences in the `condition` rows. Namespaced by what it IS (`recording/…`,
42
+ * beside `recording/run`), never by what produced it: a walk is a recording
43
+ * projection, not a dataset that happens to mention stages.
44
+ */
45
+ export declare const CHART_WALK_ARTIFACT_KIND = "recording/chart-walk";
38
46
  /** The media type a recording is minted with. */
39
47
  export declare const RECORDING_MEDIA_TYPE = "application/json";
40
48
  /** What a recording mint needs to know beyond the recording itself. */
@@ -74,3 +82,31 @@ export declare class UnserializableRecordingError extends Error {
74
82
  * JSON-serialized — a cyclic object in a snapshot, most likely.
75
83
  */
76
84
  export declare function recordingPutInput(recording: unknown, facts?: RecordingMintFacts): PutArtifactInput;
85
+ /** What a chart-walk mint needs to know beyond the rows themselves. */
86
+ export interface ChartWalkMintFacts {
87
+ /** The tool whose inner chart walked — names the default label. */
88
+ readonly toolName?: string;
89
+ /** The outer tool call the walk belongs to — stamped on `origin.toolCallId`,
90
+ * the join back to the call that produced it. */
91
+ readonly toolCallId?: string;
92
+ /** The outer run, when there is one — `origin.runId`. */
93
+ readonly runId?: string;
94
+ /** The operator's label, verbatim when present (the `recordingPutInput`
95
+ * law: a name somebody chose is not the library's to decorate). */
96
+ readonly label?: string;
97
+ }
98
+ /**
99
+ * Turn one chart walk into the `put` input that stores it under
100
+ * {@link CHART_WALK_ARTIFACT_KIND}.
101
+ *
102
+ * Pure, and serialized to JSON TEXT at the mint for exactly the reasons the
103
+ * run recording is (see the file header): a walk row must never be a live
104
+ * view into engine memory, and a walk JSON cannot carry could not cross any
105
+ * wire either.
106
+ *
107
+ * @throws UnserializableRecordingError when the rows cannot be
108
+ * JSON-serialized. Walk rows are projected to plain data upstream, so this
109
+ * firing means the projection let a live value through — fail at the mint,
110
+ * loudly.
111
+ */
112
+ export declare function chartWalkPutInput(rows: readonly unknown[], facts?: ChartWalkMintFacts): PutArtifactInput;
@@ -34,6 +34,14 @@
34
34
  /** The consumer vocabulary a run recording is stored under. One kind, exact
35
35
  * match — the same rule every `wants` declaration is judged by. */
36
36
  export const RECORDING_ARTIFACT_KIND = 'recording/run';
37
+ /**
38
+ * The consumer vocabulary a chart WALK is stored under (9.76.0) — one row per
39
+ * execution step of a runbook's inner chart, with the decider evidence
40
+ * sentences in the `condition` rows. Namespaced by what it IS (`recording/…`,
41
+ * beside `recording/run`), never by what produced it: a walk is a recording
42
+ * projection, not a dataset that happens to mention stages.
43
+ */
44
+ export const CHART_WALK_ARTIFACT_KIND = 'recording/chart-walk';
37
45
  /** The media type a recording is minted with. */
38
46
  export const RECORDING_MEDIA_TYPE = 'application/json';
39
47
  /**
@@ -80,4 +88,41 @@ export function recordingPutInput(recording, facts = {}) {
80
88
  ...(facts.runId !== undefined && { origin: { runId: facts.runId } }),
81
89
  };
82
90
  }
91
+ /**
92
+ * Turn one chart walk into the `put` input that stores it under
93
+ * {@link CHART_WALK_ARTIFACT_KIND}.
94
+ *
95
+ * Pure, and serialized to JSON TEXT at the mint for exactly the reasons the
96
+ * run recording is (see the file header): a walk row must never be a live
97
+ * view into engine memory, and a walk JSON cannot carry could not cross any
98
+ * wire either.
99
+ *
100
+ * @throws UnserializableRecordingError when the rows cannot be
101
+ * JSON-serialized. Walk rows are projected to plain data upstream, so this
102
+ * firing means the projection let a live value through — fail at the mint,
103
+ * loudly.
104
+ */
105
+ export function chartWalkPutInput(rows, facts = {}) {
106
+ let text;
107
+ try {
108
+ text = JSON.stringify(rows) ?? '';
109
+ }
110
+ catch (err) {
111
+ throw new UnserializableRecordingError(err instanceof Error ? err.message : String(err));
112
+ }
113
+ if (text === '') {
114
+ throw new UnserializableRecordingError('it serializes to nothing');
115
+ }
116
+ const origin = {
117
+ ...(facts.runId !== undefined && { runId: facts.runId }),
118
+ ...(facts.toolCallId !== undefined && { toolCallId: facts.toolCallId }),
119
+ };
120
+ return {
121
+ kind: CHART_WALK_ARTIFACT_KIND,
122
+ mediaType: RECORDING_MEDIA_TYPE,
123
+ data: text,
124
+ label: facts.label ?? (facts.toolName !== undefined ? `${facts.toolName} walk` : 'chart walk'),
125
+ ...(Object.keys(origin).length > 0 && { origin }),
126
+ };
127
+ }
83
128
  //# sourceMappingURL=recordingArtifact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recordingArtifact.js","sourceRoot":"","sources":["../../../src/artifacts/recordingArtifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH;oEACoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,iDAAiD;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAoBvD;;;;;GAKG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAC5C,IAAI,GAAG,8BAAuC,CAAC;IAExD,YAAY,MAAc;QACxB,KAAK,CACH,0DAA0D,MAAM,mBAAmB;YACjF,kFAAkF;YAClF,oFAAoF;YACpF,kFAAkF,CACrF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAkB,EAClB,QAA4B,EAAE;IAE9B,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,4BAA4B,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,4BAA4B,CAAC,0BAA0B,CAAC,CAAC;IACrE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,SAAS,EAAE,oBAAoB;QAC/B,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QAC1F,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"recordingArtifact.js","sourceRoot":"","sources":["../../../src/artifacts/recordingArtifact.ts"],"names":[],"mappings":"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"}
@@ -102,6 +102,7 @@ import { buildReadSkillTool } from '../lib/injection-engine/skillTools.js';
102
102
  import { foldStepPlans } from '../lib/injection-engine/skillSteps.js';
103
103
  import { buildStepNudgeStage } from './agent/stages/stepNudge.js';
104
104
  import { buildEvidenceRecheckStage } from './agent/stages/evidenceRecheck.js';
105
+ import { toolWantsOf } from './agent/stagedRefs.js';
105
106
  import { wrapUpStage } from './agent/stages/wrapUp.js';
106
107
  import { evidenceRefusalSentence } from './agent/evidence/gate.js';
107
108
  import { UnsupportedValuesError } from './agent/evidence/errors.js';
@@ -2898,6 +2899,36 @@ export class Agent extends RunnerBase {
2898
2899
  }
2899
2900
  }
2900
2901
  }
2902
+ // The composedOf drift gate (9.76.0), judged HERE and not at defineTool —
2903
+ // the one moment the catalog is complete. A tool that declares its
2904
+ // ingredients (`composedOf`, the runbookAsTool law) whose ingredient was
2905
+ // renamed or never registered fails the BUILD by name, instead of failing
2906
+ // its first run inside a stage. Tools delivered by a ToolProvider are
2907
+ // invisible to this check (no build-time list — the 9.72.0 caveat), so
2908
+ // with a provider configured an unmatched name is a dev-mode heads-up
2909
+ // rather than a refusal: the ingredient may genuinely arrive at dispatch.
2910
+ for (const [composedName, registered] of registryByName) {
2911
+ for (const ingredient of registered.composedOf ?? []) {
2912
+ if (registryByName.has(ingredient))
2913
+ continue;
2914
+ if (this.externalToolProvider !== undefined) {
2915
+ if (isDevMode()) {
2916
+ // eslint-disable-next-line no-console
2917
+ console.warn(`[agentfootprint] tool '${composedName}' declares composedOf ingredient ` +
2918
+ `'${ingredient}', which is not in the static catalog. A ToolProvider is ` +
2919
+ `configured, so it may arrive at dispatch — but provider-delivered tools ` +
2920
+ `cannot be drift-checked at build. If '${ingredient}' is static, this is ` +
2921
+ `the rename the check exists to catch.`);
2922
+ }
2923
+ continue;
2924
+ }
2925
+ throw new Error(`Agent: tool '${composedName}' declares composedOf ingredient '${ingredient}', ` +
2926
+ `but no tool of that name is registered on this agent. The declaration names ` +
2927
+ `the tools its procedure calls through ctx.tools, and an ingredient that is ` +
2928
+ `not in the dispatch map fails at its first inner call — refused at build ` +
2929
+ `instead. Register '${ingredient}' (or fix the name in composedOf).`);
2930
+ }
2931
+ }
2901
2932
  // Late-bind toolSchemas into the seed stage's deps (the factory was
2902
2933
  // built earlier with a getter; this resolves the actual value).
2903
2934
  toolSchemasResolved = toolSchemas;
@@ -3038,6 +3069,11 @@ export class Agent extends RunnerBase {
3038
3069
  .filter(([, tool]) => tool.argumentsFrom !== undefined)
3039
3070
  .map(([name, tool]) => [name, tool.argumentsFrom]));
3040
3071
  this.integrityDanglingPresent = toolGrounding.size > 0;
3072
+ // The staged-refs join's other half (grounded numbers): `Tool.wants` by
3073
+ // tool name, harvested the same way and with the same ToolProvider caveat.
3074
+ // Consumed only by the evidence gate (the callLLM nudge and the recheck
3075
+ // correction), so an agent without the gate never reads it.
3076
+ const toolWants = toolWantsOf(registryByName);
3041
3077
  const toolsSubflow = buildToolsSlot({
3042
3078
  tools: toolSchemas,
3043
3079
  ...(toolOwners.size > 0 && { toolOwners }),
@@ -3071,6 +3107,10 @@ export class Agent extends RunnerBase {
3071
3107
  // The declared argument-ground edges (9.60.0) — value-conditional, so
3072
3108
  // an agent whose tools declare none runs the exact bytes it always did.
3073
3109
  ...(toolGrounding.size > 0 && { toolGrounding }),
3110
+ // The staged-refs nudge (grounded numbers) — armed only when the dial
3111
+ // is ON and a registered tool declares `wants`; otherwise the stage
3112
+ // reads nothing new and every request keeps its exact bytes.
3113
+ ...(this.evidenceGate?.nudge === true && toolWants.size > 0 && { toolWants }),
3074
3114
  // The external-ground door (9.72.0) — value-conditional for the same
3075
3115
  // reason: no provider, no key, byte-identical corpus assembly.
3076
3116
  ...(this.externalGrounds !== undefined && { externalGrounds: this.externalGrounds }),
@@ -3316,7 +3356,19 @@ export class Agent extends RunnerBase {
3316
3356
  ...(this.evidenceGate !== undefined && {
3317
3357
  hasEvidenceGate: true,
3318
3358
  ...(this.evidenceGate.posture !== 'assist' && {
3319
- evidenceRecheckStage: buildEvidenceRecheckStage(this.evidenceGate),
3359
+ evidenceRecheckStage: buildEvidenceRecheckStage(this.evidenceGate,
3360
+ // The staged-refs join (grounded numbers) — the correction names
3361
+ // the refs and the spender when the run declared both. Threaded
3362
+ // whenever a `wants` tool exists (not gated on `nudge`: a
3363
+ // revision that cannot say HOW to compute leaves the model to
3364
+ // head-math again); absent for every agent without one, so the
3365
+ // correction keeps its exact bytes.
3366
+ toolWants.size > 0
3367
+ ? {
3368
+ toolWants,
3369
+ staticToolNames: () => toolSchemasResolved.map((t) => t.name),
3370
+ }
3371
+ : undefined),
3320
3372
  }),
3321
3373
  }),
3322
3374
  // Escalation (9.19.0): the grouped chart threads `skillEscalated`