agentfootprint 9.112.2 → 9.113.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 (261) hide show
  1. package/CHANGELOG.md +296 -0
  2. package/CLAUDE.md +1 -0
  3. package/dist/adapters/observability/audit.js +8 -0
  4. package/dist/adapters/observability/audit.js.map +1 -1
  5. package/dist/adapters/observability/otel.js +44 -2
  6. package/dist/adapters/observability/otel.js.map +1 -1
  7. package/dist/adapters/observability/xray.js +19 -0
  8. package/dist/adapters/observability/xray.js.map +1 -1
  9. package/dist/adapters/types.js.map +1 -1
  10. package/dist/core/Agent.js +11 -1
  11. package/dist/core/Agent.js.map +1 -1
  12. package/dist/core/agent/composeRequest.js +19 -11
  13. package/dist/core/agent/composeRequest.js.map +1 -1
  14. package/dist/core/agent/coverage/absent.js +163 -7
  15. package/dist/core/agent/coverage/absent.js.map +1 -1
  16. package/dist/core/agent/coverage/answer.js +3 -1
  17. package/dist/core/agent/coverage/answer.js.map +1 -1
  18. package/dist/core/agent/coverage/read.js +15 -11
  19. package/dist/core/agent/coverage/read.js.map +1 -1
  20. package/dist/core/agent/findings/ledger.js +27 -5
  21. package/dist/core/agent/findings/ledger.js.map +1 -1
  22. package/dist/core/agent/findings/offer.js +29 -9
  23. package/dist/core/agent/findings/offer.js.map +1 -1
  24. package/dist/core/agent/findings/serve.js +76 -7
  25. package/dist/core/agent/findings/serve.js.map +1 -1
  26. package/dist/core/agent/findings/types.js.map +1 -1
  27. package/dist/core/agent/findings/unsettled.js +276 -0
  28. package/dist/core/agent/findings/unsettled.js.map +1 -0
  29. package/dist/core/agent/stages/callLLM.js +30 -8
  30. package/dist/core/agent/stages/callLLM.js.map +1 -1
  31. package/dist/core/agent/stages/route.js +10 -2
  32. package/dist/core/agent/stages/route.js.map +1 -1
  33. package/dist/core/agent/stages/toolCalls.js +247 -31
  34. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  35. package/dist/core/agent/stages/window.js +5 -2
  36. package/dist/core/agent/stages/window.js.map +1 -1
  37. package/dist/core/agent/toolResultCap.js +0 -0
  38. package/dist/core/agent/toolResultCap.js.map +1 -1
  39. package/dist/core/agent/window/ledgerFactPins.js +13 -2
  40. package/dist/core/agent/window/ledgerFactPins.js.map +1 -1
  41. package/dist/core/agent/window/toolNames.js +17 -2
  42. package/dist/core/agent/window/toolNames.js.map +1 -1
  43. package/dist/core/checkin.js +5 -1
  44. package/dist/core/checkin.js.map +1 -1
  45. package/dist/core/runCheckpoint.js +26 -2
  46. package/dist/core/runCheckpoint.js.map +1 -1
  47. package/dist/esm/adapters/observability/audit.d.ts +8 -0
  48. package/dist/esm/adapters/observability/audit.js +8 -0
  49. package/dist/esm/adapters/observability/audit.js.map +1 -1
  50. package/dist/esm/adapters/observability/otel.d.ts +17 -2
  51. package/dist/esm/adapters/observability/otel.js +44 -2
  52. package/dist/esm/adapters/observability/otel.js.map +1 -1
  53. package/dist/esm/adapters/observability/xray.d.ts +8 -0
  54. package/dist/esm/adapters/observability/xray.js +19 -0
  55. package/dist/esm/adapters/observability/xray.js.map +1 -1
  56. package/dist/esm/adapters/types.d.ts +49 -0
  57. package/dist/esm/adapters/types.js.map +1 -1
  58. package/dist/esm/core/Agent.js +11 -1
  59. package/dist/esm/core/Agent.js.map +1 -1
  60. package/dist/esm/core/agent/composeRequest.d.ts +10 -7
  61. package/dist/esm/core/agent/composeRequest.js +19 -11
  62. package/dist/esm/core/agent/composeRequest.js.map +1 -1
  63. package/dist/esm/core/agent/coverage/absent.d.ts +31 -4
  64. package/dist/esm/core/agent/coverage/absent.js +160 -6
  65. package/dist/esm/core/agent/coverage/absent.js.map +1 -1
  66. package/dist/esm/core/agent/coverage/answer.js +3 -1
  67. package/dist/esm/core/agent/coverage/answer.js.map +1 -1
  68. package/dist/esm/core/agent/coverage/index.d.ts +1 -1
  69. package/dist/esm/core/agent/coverage/read.d.ts +9 -1
  70. package/dist/esm/core/agent/coverage/read.js +16 -12
  71. package/dist/esm/core/agent/coverage/read.js.map +1 -1
  72. package/dist/esm/core/agent/coverage/types.d.ts +42 -0
  73. package/dist/esm/core/agent/findings/ledger.d.ts +23 -6
  74. package/dist/esm/core/agent/findings/ledger.js +27 -5
  75. package/dist/esm/core/agent/findings/ledger.js.map +1 -1
  76. package/dist/esm/core/agent/findings/offer.d.ts +23 -6
  77. package/dist/esm/core/agent/findings/offer.js +27 -8
  78. package/dist/esm/core/agent/findings/offer.js.map +1 -1
  79. package/dist/esm/core/agent/findings/serve.d.ts +19 -6
  80. package/dist/esm/core/agent/findings/serve.js +77 -8
  81. package/dist/esm/core/agent/findings/serve.js.map +1 -1
  82. package/dist/esm/core/agent/findings/types.d.ts +81 -1
  83. package/dist/esm/core/agent/findings/types.js.map +1 -1
  84. package/dist/esm/core/agent/findings/unsettled.d.ts +121 -0
  85. package/dist/esm/core/agent/findings/unsettled.js +271 -0
  86. package/dist/esm/core/agent/findings/unsettled.js.map +1 -0
  87. package/dist/esm/core/agent/stages/callLLM.js +30 -8
  88. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  89. package/dist/esm/core/agent/stages/route.js +10 -2
  90. package/dist/esm/core/agent/stages/route.js.map +1 -1
  91. package/dist/esm/core/agent/stages/toolCalls.d.ts +90 -2
  92. package/dist/esm/core/agent/stages/toolCalls.js +244 -31
  93. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  94. package/dist/esm/core/agent/stages/window.js +5 -2
  95. package/dist/esm/core/agent/stages/window.js.map +1 -1
  96. package/dist/esm/core/agent/toolResultCap.d.ts +4 -1
  97. package/dist/esm/core/agent/toolResultCap.js +0 -0
  98. package/dist/esm/core/agent/toolResultCap.js.map +1 -1
  99. package/dist/esm/core/agent/types.d.ts +5 -0
  100. package/dist/esm/core/agent/window/ledgerFactPins.d.ts +10 -1
  101. package/dist/esm/core/agent/window/ledgerFactPins.js +13 -2
  102. package/dist/esm/core/agent/window/ledgerFactPins.js.map +1 -1
  103. package/dist/esm/core/agent/window/strategy.d.ts +2 -1
  104. package/dist/esm/core/agent/window/toolNames.d.ts +16 -1
  105. package/dist/esm/core/agent/window/toolNames.js +17 -2
  106. package/dist/esm/core/agent/window/toolNames.js.map +1 -1
  107. package/dist/esm/core/checkin.js +5 -1
  108. package/dist/esm/core/checkin.js.map +1 -1
  109. package/dist/esm/core/runCheckpoint.js +26 -2
  110. package/dist/esm/core/runCheckpoint.js.map +1 -1
  111. package/dist/esm/events/payloads.d.ts +76 -1
  112. package/dist/esm/index.d.ts +2 -2
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/lib/bug-report/transcript.d.ts +5 -0
  115. package/dist/esm/lib/bug-report/transcript.js +1 -0
  116. package/dist/esm/lib/bug-report/transcript.js.map +1 -1
  117. package/dist/esm/lib/semantics/projection.js +1 -0
  118. package/dist/esm/lib/semantics/projection.js.map +1 -1
  119. package/dist/esm/lib/time-travel/receipt.d.ts +4 -3
  120. package/dist/esm/lib/time-travel/receipt.js +4 -3
  121. package/dist/esm/lib/time-travel/receipt.js.map +1 -1
  122. package/dist/esm/lib/time-travel/servedView.js +13 -9
  123. package/dist/esm/lib/time-travel/servedView.js.map +1 -1
  124. package/dist/esm/lib/trace-toolpack/traceToolpack.js +130 -17
  125. package/dist/esm/lib/trace-toolpack/traceToolpack.js.map +1 -1
  126. package/dist/esm/memory/causal/evidenceRecorder.d.ts +2 -0
  127. package/dist/esm/memory/causal/evidenceRecorder.js +13 -0
  128. package/dist/esm/memory/causal/evidenceRecorder.js.map +1 -1
  129. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.d.ts +2 -0
  130. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js +11 -0
  131. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  132. package/dist/esm/recorders/observability/BoundaryRecorder.d.ts +10 -1
  133. package/dist/esm/recorders/observability/BoundaryRecorder.js +9 -1
  134. package/dist/esm/recorders/observability/BoundaryRecorder.js.map +1 -1
  135. package/dist/esm/recorders/observability/FlowchartRecorder.d.ts +4 -1
  136. package/dist/esm/recorders/observability/FlowchartRecorder.js +13 -1
  137. package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
  138. package/dist/esm/recorders/observability/LiveStateRecorder.d.ts +2 -0
  139. package/dist/esm/recorders/observability/LiveStateRecorder.js +9 -0
  140. package/dist/esm/recorders/observability/LiveStateRecorder.js.map +1 -1
  141. package/dist/esm/recorders/observability/RouteRecorder.js +5 -0
  142. package/dist/esm/recorders/observability/RouteRecorder.js.map +1 -1
  143. package/dist/esm/recorders/observability/StatusRecorder.js +7 -0
  144. package/dist/esm/recorders/observability/StatusRecorder.js.map +1 -1
  145. package/dist/esm/recorders/observability/ToolChoiceRecorder.js +5 -0
  146. package/dist/esm/recorders/observability/ToolChoiceRecorder.js.map +1 -1
  147. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +18 -2
  148. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  149. package/dist/esm/recorders/observability/status/statusTemplates.js +5 -0
  150. package/dist/esm/recorders/observability/status/statusTemplates.js.map +1 -1
  151. package/dist/esm/security/extractSequence.d.ts +36 -5
  152. package/dist/esm/security/extractSequence.js +99 -26
  153. package/dist/esm/security/extractSequence.js.map +1 -1
  154. package/dist/index.js.map +1 -1
  155. package/dist/lib/bug-report/transcript.js +1 -0
  156. package/dist/lib/bug-report/transcript.js.map +1 -1
  157. package/dist/lib/semantics/projection.js +1 -0
  158. package/dist/lib/semantics/projection.js.map +1 -1
  159. package/dist/lib/time-travel/receipt.js +4 -3
  160. package/dist/lib/time-travel/receipt.js.map +1 -1
  161. package/dist/lib/time-travel/servedView.js +13 -9
  162. package/dist/lib/time-travel/servedView.js.map +1 -1
  163. package/dist/lib/trace-toolpack/traceToolpack.js +130 -17
  164. package/dist/lib/trace-toolpack/traceToolpack.js.map +1 -1
  165. package/dist/memory/causal/evidenceRecorder.js +13 -0
  166. package/dist/memory/causal/evidenceRecorder.js.map +1 -1
  167. package/dist/recorders/observability/AgentThinkingTraceRecorder.js +11 -0
  168. package/dist/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  169. package/dist/recorders/observability/BoundaryRecorder.js +9 -1
  170. package/dist/recorders/observability/BoundaryRecorder.js.map +1 -1
  171. package/dist/recorders/observability/FlowchartRecorder.js +13 -1
  172. package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
  173. package/dist/recorders/observability/LiveStateRecorder.js +9 -0
  174. package/dist/recorders/observability/LiveStateRecorder.js.map +1 -1
  175. package/dist/recorders/observability/RouteRecorder.js +5 -0
  176. package/dist/recorders/observability/RouteRecorder.js.map +1 -1
  177. package/dist/recorders/observability/StatusRecorder.js +7 -0
  178. package/dist/recorders/observability/StatusRecorder.js.map +1 -1
  179. package/dist/recorders/observability/ToolChoiceRecorder.js +5 -0
  180. package/dist/recorders/observability/ToolChoiceRecorder.js.map +1 -1
  181. package/dist/recorders/observability/commentary/commentaryTemplates.js +18 -2
  182. package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  183. package/dist/recorders/observability/status/statusTemplates.js +5 -0
  184. package/dist/recorders/observability/status/statusTemplates.js.map +1 -1
  185. package/dist/security/extractSequence.js +99 -26
  186. package/dist/security/extractSequence.js.map +1 -1
  187. package/dist/types/adapters/observability/audit.d.ts +8 -0
  188. package/dist/types/adapters/observability/audit.d.ts.map +1 -1
  189. package/dist/types/adapters/observability/otel.d.ts +17 -2
  190. package/dist/types/adapters/observability/otel.d.ts.map +1 -1
  191. package/dist/types/adapters/observability/xray.d.ts +8 -0
  192. package/dist/types/adapters/observability/xray.d.ts.map +1 -1
  193. package/dist/types/adapters/types.d.ts +49 -0
  194. package/dist/types/adapters/types.d.ts.map +1 -1
  195. package/dist/types/core/Agent.d.ts.map +1 -1
  196. package/dist/types/core/agent/composeRequest.d.ts +10 -7
  197. package/dist/types/core/agent/composeRequest.d.ts.map +1 -1
  198. package/dist/types/core/agent/coverage/absent.d.ts +31 -4
  199. package/dist/types/core/agent/coverage/absent.d.ts.map +1 -1
  200. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -1
  201. package/dist/types/core/agent/coverage/index.d.ts +1 -1
  202. package/dist/types/core/agent/coverage/index.d.ts.map +1 -1
  203. package/dist/types/core/agent/coverage/read.d.ts +9 -1
  204. package/dist/types/core/agent/coverage/read.d.ts.map +1 -1
  205. package/dist/types/core/agent/coverage/types.d.ts +42 -0
  206. package/dist/types/core/agent/coverage/types.d.ts.map +1 -1
  207. package/dist/types/core/agent/findings/ledger.d.ts +23 -6
  208. package/dist/types/core/agent/findings/ledger.d.ts.map +1 -1
  209. package/dist/types/core/agent/findings/offer.d.ts +23 -6
  210. package/dist/types/core/agent/findings/offer.d.ts.map +1 -1
  211. package/dist/types/core/agent/findings/serve.d.ts +19 -6
  212. package/dist/types/core/agent/findings/serve.d.ts.map +1 -1
  213. package/dist/types/core/agent/findings/types.d.ts +81 -1
  214. package/dist/types/core/agent/findings/types.d.ts.map +1 -1
  215. package/dist/types/core/agent/findings/unsettled.d.ts +122 -0
  216. package/dist/types/core/agent/findings/unsettled.d.ts.map +1 -0
  217. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  218. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  219. package/dist/types/core/agent/stages/toolCalls.d.ts +90 -2
  220. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  221. package/dist/types/core/agent/stages/window.d.ts.map +1 -1
  222. package/dist/types/core/agent/toolResultCap.d.ts +4 -1
  223. package/dist/types/core/agent/toolResultCap.d.ts.map +1 -1
  224. package/dist/types/core/agent/types.d.ts +5 -0
  225. package/dist/types/core/agent/types.d.ts.map +1 -1
  226. package/dist/types/core/agent/window/ledgerFactPins.d.ts +10 -1
  227. package/dist/types/core/agent/window/ledgerFactPins.d.ts.map +1 -1
  228. package/dist/types/core/agent/window/strategy.d.ts +2 -1
  229. package/dist/types/core/agent/window/strategy.d.ts.map +1 -1
  230. package/dist/types/core/agent/window/toolNames.d.ts +16 -1
  231. package/dist/types/core/agent/window/toolNames.d.ts.map +1 -1
  232. package/dist/types/core/checkin.d.ts.map +1 -1
  233. package/dist/types/core/runCheckpoint.d.ts.map +1 -1
  234. package/dist/types/events/payloads.d.ts +76 -1
  235. package/dist/types/events/payloads.d.ts.map +1 -1
  236. package/dist/types/index.d.ts +2 -2
  237. package/dist/types/index.d.ts.map +1 -1
  238. package/dist/types/lib/bug-report/transcript.d.ts +5 -0
  239. package/dist/types/lib/bug-report/transcript.d.ts.map +1 -1
  240. package/dist/types/lib/semantics/projection.d.ts.map +1 -1
  241. package/dist/types/lib/time-travel/receipt.d.ts +4 -3
  242. package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
  243. package/dist/types/lib/time-travel/servedView.d.ts.map +1 -1
  244. package/dist/types/lib/trace-toolpack/traceToolpack.d.ts.map +1 -1
  245. package/dist/types/memory/causal/evidenceRecorder.d.ts +2 -0
  246. package/dist/types/memory/causal/evidenceRecorder.d.ts.map +1 -1
  247. package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts +2 -0
  248. package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts.map +1 -1
  249. package/dist/types/recorders/observability/BoundaryRecorder.d.ts +10 -1
  250. package/dist/types/recorders/observability/BoundaryRecorder.d.ts.map +1 -1
  251. package/dist/types/recorders/observability/FlowchartRecorder.d.ts +4 -1
  252. package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
  253. package/dist/types/recorders/observability/LiveStateRecorder.d.ts +2 -0
  254. package/dist/types/recorders/observability/LiveStateRecorder.d.ts.map +1 -1
  255. package/dist/types/recorders/observability/RouteRecorder.d.ts.map +1 -1
  256. package/dist/types/recorders/observability/ToolChoiceRecorder.d.ts.map +1 -1
  257. package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
  258. package/dist/types/recorders/observability/status/statusTemplates.d.ts.map +1 -1
  259. package/dist/types/security/extractSequence.d.ts +36 -5
  260. package/dist/types/security/extractSequence.d.ts.map +1 -1
  261. package/package.json +1 -1
@@ -38,12 +38,27 @@
38
38
  * The gate therefore withholds `looked_for`, and only `looked_for` (see
39
39
  * `coverage/evidence.ts`): it is the one field whose job is to quote the
40
40
  * request. Everything else the absence carries — the coverage lists, the
41
- * author's `tryInstead`, any extra key the tool attached to the envelope — is
42
- * the TOOL speaking about the world and does ground, because an answer that
43
- * follows the absence's own advice must not be called ungrounded for doing so.
41
+ * author's `tryInstead` and `tryInsteadTool`, any extra key the tool attached
42
+ * to the envelope — is the TOOL speaking about the world and does ground,
43
+ * because an answer that follows the absence's own advice must not be called
44
+ * ungrounded for doing so.
44
45
  * The note is kept free of interpolation for the same reason the exclusion
45
46
  * exists: static library text has nothing of the caller's to leak.
47
+ *
48
+ * ## A suggestion to try another tool is typed, never parsed (9.113.0)
49
+ *
50
+ * `tryInstead` is ONE sentence, for the model; nothing in this library reads
51
+ * a tool name out of it. When the sentence points at another tool, the author
52
+ * names that tool beside it — `tryInsteadTool: { tool, why? }` — and the
53
+ * envelope carries it under its OWN key, `try_instead_tool`. Its own key, not
54
+ * `try_instead`: that field has been a string since it shipped and every
55
+ * reader typed against `ToolAbsence` reads it as one, so a second shape there
56
+ * would be dropped by each of them without a word. `tools.absent` carries
57
+ * both, as declared. ONE rule set decides what each is ({@link readSentence},
58
+ * {@link readToolSuggestion}): `absent()` refuses by it and the recognizer
59
+ * reads by it, so a mint and a read cannot disagree.
46
60
  */
61
+ import { warnIfInvalidToolName } from '../../tools.js';
47
62
  import { normalizeCoverageList } from './items.js';
48
63
  /**
49
64
  * The reserved key that makes an absence recognizable. Exported because tests,
@@ -62,6 +77,115 @@ export const ABSENCE_NOTE = 'The search ran and matched nothing. This is an ANSW
62
77
  'arguments returns this same result. `checked` is the ground this answer covers; anything ' +
63
78
  'under `not_checked` or `cannot_cover` is ground it does NOT cover, and reaching that ' +
64
79
  'needs a different question, not a retry.';
80
+ /**
81
+ * The typed tool's keys, tied to {@link TryInsteadTool} in BOTH directions: a
82
+ * key the interface gains, or one listed here that it does not have, fails to
83
+ * compile. Any other key on a value is refused, so a misspelt `why` cannot
84
+ * vanish without a word.
85
+ */
86
+ const TOOL_SUGGESTION_KEYS = Object.keys({
87
+ tool: true,
88
+ why: true,
89
+ });
90
+ /**
91
+ * `undefined` and `null` both mean "not given" for the typed tool and its
92
+ * `why`. A JSON producer writes a missing optional value as `null`, and
93
+ * `tryInstead: null` read as no suggestion before 9.113.0 — refusing it would
94
+ * turn a nothing-found into a tool error, the direction of error this file
95
+ * exists to prevent.
96
+ */
97
+ const notGiven = (raw) => raw === undefined || raw === null;
98
+ /** An object literal's shape — `{…}` or `Object.create(null)`; never an
99
+ * array, a Date, a boxed string or any other class instance. */
100
+ const isPlainObject = (raw) => {
101
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
102
+ return false;
103
+ const prototype = Object.getPrototypeOf(raw);
104
+ return prototype === Object.prototype || prototype === null;
105
+ };
106
+ /**
107
+ * The rule for the SENTENCE (`tryInstead`, `try_instead` on the wire):
108
+ * trimmed, and one that trims to nothing is no suggestion, as it always was.
109
+ *
110
+ * ONE non-string is refused: a plain object. That is the typed form
111
+ * `{ tool, why? }` written into the sentence's slot, and the refusal points it
112
+ * at `tryInsteadTool` rather than drop the author's tool without a word. Any
113
+ * OTHER value that is not a string — `null`, `false` from
114
+ * `tryInstead: cond && '…'`, a number, a list, a Date — reads as no
115
+ * suggestion, exactly as it did before 9.113.0: `absent()` runs inside a
116
+ * tool's `execute`, so refusing it would turn a nothing-found the 9.112.2
117
+ * loop delivered as an absence into that call's error result.
118
+ */
119
+ function readSentence(raw) {
120
+ if (typeof raw === 'string') {
121
+ const sentence = raw.trim();
122
+ return { value: sentence === '' ? undefined : sentence };
123
+ }
124
+ if (isPlainObject(raw)) {
125
+ return {
126
+ problem: '`tryInstead` is the sentence the model reads, and only that. To name the other ' +
127
+ 'tool as data, give { tool, why? } as `tryInsteadTool`, beside the sentence.',
128
+ };
129
+ }
130
+ return { value: undefined };
131
+ }
132
+ /**
133
+ * The rule for the TYPED TOOL (`tryInsteadTool`, `try_instead_tool` on the
134
+ * wire): `{ tool, why? }`, where `tool` is a non-empty name and `why`, when
135
+ * given, says something. Both are trimmed; `why: null` reads as omitted. The
136
+ * name is recorded as declared: never looked up (a provider may serve it on a
137
+ * later iteration), and held to no charset here — which names a provider
138
+ * accepts is `core/tools.ts` · `assertValidToolName`'s question, and
139
+ * `absent` asks the dev-mode warning that owns it.
140
+ *
141
+ * Why ONE tool and not a list: every suggestion on record names at most one
142
+ * other tool, and where a sentence joins that tool to "or widen the window",
143
+ * the rest of the advice stays in the sentence. A list would be a second
144
+ * shape of this field for every reader to narrow — the cost this key exists
145
+ * to spare `try_instead`.
146
+ */
147
+ function readToolSuggestion(raw) {
148
+ if (notGiven(raw))
149
+ return { value: undefined };
150
+ if (Array.isArray(raw)) {
151
+ return {
152
+ problem: '`tryInsteadTool` names ONE tool — { tool, why? }, never a list. Say the rest of the ' +
153
+ 'advice in the `tryInstead` sentence.',
154
+ };
155
+ }
156
+ if (typeof raw !== 'object') {
157
+ return {
158
+ problem: `\`tryInsteadTool\` must be { tool, why? } — got ${typeof raw}. For a sentence, use ` +
159
+ '`tryInstead`; to suggest nothing, omit the field.',
160
+ };
161
+ }
162
+ const value = raw;
163
+ const unknownKey = Object.keys(value).find((key) => !TOOL_SUGGESTION_KEYS.includes(key));
164
+ if (unknownKey !== undefined) {
165
+ return {
166
+ problem: `\`tryInsteadTool\` has an unknown key '${unknownKey}' — the form is { tool, why? }, ` +
167
+ 'and a misspelt `why` would otherwise vanish without a word.',
168
+ };
169
+ }
170
+ const { tool, why } = value;
171
+ if (typeof tool !== 'string' || tool.trim() === '') {
172
+ return {
173
+ problem: '`tryInsteadTool.tool` must name the tool to try — its registered name, e.g. ' +
174
+ "{ tool: 'cluster_inventory', why: 'it lists the collected names' }. The name is " +
175
+ 'recorded as declared and never looked up (a provider may serve it).',
176
+ };
177
+ }
178
+ const name = tool.trim();
179
+ if (notGiven(why))
180
+ return { value: { tool: name } };
181
+ if (typeof why !== 'string' || why.trim() === '') {
182
+ return {
183
+ problem: `\`tryInsteadTool.why\` (for '${name}') must be a sentence — say why that tool, or ` +
184
+ 'omit the field.',
185
+ };
186
+ }
187
+ return { value: { tool: name, why: why.trim() } };
188
+ }
65
189
  /**
66
190
  * Say "I looked, and there is nothing" in a way a model cannot read as a
67
191
  * failure — and cannot productively retry.
@@ -97,7 +221,8 @@ export const ABSENCE_NOTE = 'The search ran and matched nothing. This is an ANSW
97
221
  export function absent(decl) {
98
222
  const fn = 'absent';
99
223
  if (typeof decl !== 'object' || decl === null) {
100
- throw new Error(`${fn}: takes a declaration — { what, checked, notChecked?, cannotCover?, tryInstead? }.`);
224
+ throw new Error(`${fn}: takes a declaration — { what, checked, notChecked?, cannotCover?, tryInstead?, ` +
225
+ `tryInsteadTool? }.`);
101
226
  }
102
227
  const what = typeof decl.what === 'string' ? decl.what.trim() : '';
103
228
  if (what === '') {
@@ -115,7 +240,18 @@ export function absent(decl) {
115
240
  }
116
241
  const notChecked = normalizeCoverageList(fn, 'notChecked', decl.notChecked, false);
117
242
  const cannotCover = normalizeCoverageList(fn, 'cannotCover', decl.cannotCover, true);
118
- const tryInstead = typeof decl.tryInstead === 'string' ? decl.tryInstead.trim() : undefined;
243
+ const sentence = readSentence(decl.tryInstead);
244
+ if (sentence.problem !== undefined)
245
+ throw new Error(`${fn}: '${what}' — ${sentence.problem}`);
246
+ const tool = readToolSuggestion(decl.tryInsteadTool);
247
+ if (tool.problem !== undefined)
248
+ throw new Error(`${fn}: '${what}' — ${tool.problem}`);
249
+ const tryInstead = sentence.value;
250
+ const tryInsteadTool = tool.value;
251
+ // The name's charset is the tool registry's question: the owner warns in
252
+ // dev mode and never throws — the verdict a `defineTool` of it would get.
253
+ if (tryInsteadTool !== undefined)
254
+ warnIfInvalidToolName(tryInsteadTool.tool);
119
255
  return {
120
256
  af_absent: true,
121
257
  outcome: 'nothing_found',
@@ -124,7 +260,8 @@ export function absent(decl) {
124
260
  ...(notChecked.length > 0 && { not_checked: notChecked }),
125
261
  ...(cannotCover.length > 0 && { cannot_cover: cannotCover }),
126
262
  retry_returns_the_same: true,
127
- ...(tryInstead !== undefined && tryInstead !== '' && { try_instead: tryInstead }),
263
+ ...(tryInstead !== undefined && { try_instead: tryInstead }),
264
+ ...(tryInsteadTool !== undefined && { try_instead_tool: tryInsteadTool }),
128
265
  note: ABSENCE_NOTE,
129
266
  };
130
267
  }
@@ -157,4 +294,21 @@ export function coverageOfAbsence(absence) {
157
294
  cannotCover: absence.cannot_cover ?? [],
158
295
  };
159
296
  }
297
+ /**
298
+ * The absence's sentence, read by the rules `absent()` mints by. `undefined`
299
+ * when it declared none, AND when it declared one those rules refuse: an
300
+ * envelope minted elsewhere (a non-JS tool, a hand-built value) is read,
301
+ * never repaired, and the absence itself is still an absence either way.
302
+ */
303
+ export function tryInsteadOfAbsence(absence) {
304
+ return readSentence(absence.try_instead).value;
305
+ }
306
+ /**
307
+ * The absence's typed tool, read by the same rules — a copy, never the
308
+ * object the envelope holds. `undefined` when it declared none, or one those
309
+ * rules refuse (see {@link tryInsteadOfAbsence}).
310
+ */
311
+ export function tryInsteadToolOfAbsence(absence) {
312
+ return readToolSuggestion(absence.try_instead_tool).value;
313
+ }
160
314
  //# sourceMappingURL=absent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"absent.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/absent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"absent.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/absent.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,9 @@ function renderSection(label, items) {
58
58
  }
59
59
  // LENS · injected-turn · persistent-history
60
60
  // reads: scope.coverageDeclared ← read once by ../stages/prepareFinal.ts · captureTurnPayload — the ONE reader that COMPOSES from it,
61
- // folded and capped. Not the only read of the key: ../stages/toolCalls.ts · declareCoverage reads it to append to it.
61
+ // folded and capped. Not the only read of the key: ../stages/toolCalls.ts · declareCoverage reads it to append to it,
62
+ // and ../findings/unsettled.ts · withUnsettledRows (9.113.0) reads one call's rows for their `kind` — the witness
63
+ // that the tool returned an absence — and composes nothing from them (its row's words come from the served result).
62
64
  // law: may omit, never deny; every clause anchored to the call it was composed on.
63
65
  /**
64
66
  * Fold the run's declarations into one block and append it to the answer.
@@ -1 +1 @@
1
- {"version":3,"file":"answer.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/answer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,QAAQ,GAAG;IACf,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,aAAa,EAAE,cAAc,CAAC;CACvB,CAAC;AAEX,SAAS,aAAa,CAAC,KAAa,EAAE,KAA8B;IAClE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,2BAA2B,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,sIAAsI;AACtI,6HAA6H;AAC7H,mFAAmF;AACnF;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAc,EACd,QAAqC;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,+BAA+B;IAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,MAAM,KAAK,GACT,GAAG,sBAAsB,8DAA8D;QACvF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"answer.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/answer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,QAAQ,GAAG;IACf,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,aAAa,EAAE,cAAc,CAAC;CACvB,CAAC;AAEX,SAAS,aAAa,CAAC,KAAa,EAAE,KAA8B;IAClE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,2BAA2B,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,sIAAsI;AACtI,6HAA6H;AAC7H,yHAAyH;AACzH,2HAA2H;AAC3H,mFAAmF;AACnF;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAc,EACd,QAAqC;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,+BAA+B;IAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,MAAM,KAAK,GACT,GAAG,sBAAsB,8DAA8D;QACvF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC"}
@@ -14,4 +14,4 @@ export { absenceEvidenceProjection } from './evidence.js';
14
14
  export { mergeItems, normalizeCoverageList, sameItem } from './items.js';
15
15
  export { coverage, COVERAGE_MARKER, COVERAGE_NOTE, coverageOfLedger, readCoverageLedger, } from './ledger.js';
16
16
  export { readCoverageResult, type CoverageFacts, type CoverageReading } from './read.js';
17
- export type { AbsenceDeclaration, Coverage, CoverageDeclaration, CoverageInput, CoverageItem, CoveredResult, DeclaredCoverage, ToolAbsence, } from './types.js';
17
+ export type { AbsenceDeclaration, Coverage, CoverageDeclaration, CoverageInput, CoverageItem, CoveredResult, DeclaredCoverage, ToolAbsence, TryInsteadTool, } from './types.js';
@@ -15,7 +15,7 @@
15
15
  * returned — byte for byte.
16
16
  */
17
17
  import type { ToolResultStatus } from '../../../lib/injection-engine/toolOutcome.js';
18
- import type { Coverage } from './types.js';
18
+ import type { Coverage, TryInsteadTool } from './types.js';
19
19
  /** One coverage statement found in a result, before the caller stamps it with
20
20
  * the call it came from. */
21
21
  export interface CoverageFacts {
@@ -23,6 +23,14 @@ export interface CoverageFacts {
23
23
  readonly coverage: Coverage;
24
24
  /** Present for `'absence'` — what the search was for. */
25
25
  readonly lookedFor?: string;
26
+ /**
27
+ * Present for `'absence'` when it declared a sentence (9.113.0) — trimmed,
28
+ * as `absent()` mints it, and never parsed for a tool name. Not a piece of
29
+ * coverage, so it sits beside `coverage` rather than inside it.
30
+ */
31
+ readonly tryInstead?: string;
32
+ /** Present for `'absence'` when it declared a typed tool (9.113.0) — a copy. */
33
+ readonly tryInsteadTool?: TryInsteadTool;
26
34
  }
27
35
  /** What one recognized result declares. `undefined` from
28
36
  * {@link readCoverageResult} means "neither shape": untouched path. */
@@ -15,8 +15,21 @@
15
15
  * returned — byte for byte.
16
16
  */
17
17
  import { coverageOfSemantics, readSemantics } from '../../../lib/semantics/envelope.js';
18
- import { coverageOfAbsence, readAbsence } from './absent.js';
18
+ import { coverageOfAbsence, readAbsence, tryInsteadOfAbsence, tryInsteadToolOfAbsence, } from './absent.js';
19
19
  import { coverageOfLedger, readCoverageLedger } from './ledger.js';
20
+ /** The facts one absence declares — the same for a bare absence and for one
21
+ * a ledger bounds, so the two sites cannot drift. */
22
+ function absenceFacts(absence) {
23
+ const tryInstead = tryInsteadOfAbsence(absence);
24
+ const tryInsteadTool = tryInsteadToolOfAbsence(absence);
25
+ return {
26
+ kind: 'absence',
27
+ coverage: coverageOfAbsence(absence),
28
+ lookedFor: absence.looked_for,
29
+ ...(tryInstead !== undefined && { tryInstead }),
30
+ ...(tryInsteadTool !== undefined && { tryInsteadTool }),
31
+ };
32
+ }
20
33
  const ABSENT_STATUS = 'absent';
21
34
  /**
22
35
  * Read one finalized tool result for coverage declarations.
@@ -29,12 +42,7 @@ const ABSENT_STATUS = 'absent';
29
42
  export function readCoverageResult(value) {
30
43
  const absence = readAbsence(value);
31
44
  if (absence !== undefined) {
32
- return {
33
- status: ABSENT_STATUS,
34
- declared: [
35
- { kind: 'absence', coverage: coverageOfAbsence(absence), lookedFor: absence.looked_for },
36
- ],
37
- };
45
+ return { status: ABSENT_STATUS, declared: [absenceFacts(absence)] };
38
46
  }
39
47
  // A semantic envelope's `coverage` field (9.53.0) is ABSORBED here — the
40
48
  // one recognizer funnel — so the boundary a semantic tool declared flows
@@ -55,11 +63,7 @@ export function readCoverageResult(value) {
55
63
  const inner = readAbsence(covered.result);
56
64
  if (inner === undefined)
57
65
  return { declared };
58
- declared.push({
59
- kind: 'absence',
60
- coverage: coverageOfAbsence(inner),
61
- lookedFor: inner.looked_for,
62
- });
66
+ declared.push(absenceFacts(inner));
63
67
  return { status: ABSENT_STATUS, declared };
64
68
  }
65
69
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA6BnE,MAAM,aAAa,GAAqB,QAAQ,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE;aACzF;SACF,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,uEAAuE;IACvE,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;QAClC,SAAS,EAAE,KAAK,CAAC,UAAU;KAC5B,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../../src/core/agent/coverage/read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoBnE;sDACsD;AACtD,SAAS,YAAY,CAAC,OAAoB;IACxC,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACpC,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,CAAC;QAC/C,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAmBD,MAAM,aAAa,GAAqB,QAAQ,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,uEAAuE;IACvE,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
@@ -58,6 +58,29 @@ export interface CoverageDeclaration {
58
58
  readonly notChecked?: readonly CoverageInput[];
59
59
  readonly cannotCover?: readonly CoverageInput[];
60
60
  }
61
+ /**
62
+ * The other TOOL a suggestion points at, typed (9.113.0) — `tryInsteadTool`
63
+ * on the declaration, `try_instead_tool` on the envelope.
64
+ *
65
+ * The `tryInstead` sentence puts a tool's name inside prose ("…or check
66
+ * cluster_inventory for the collected names."), and a reader that wants to
67
+ * know WHICH tool was suggested could only find out by parsing that sentence.
68
+ * This library never parses a tool name out of prose, so the name rides here
69
+ * as data — BESIDE the sentence, never in its place: `try_instead` stays a
70
+ * string, so every reader of it reads what it always read.
71
+ *
72
+ * `tool` is NOT looked up. The tool may be served by a provider that resolves
73
+ * per iteration, or be offered on a later turn; `absent()` requires a
74
+ * non-empty name and records it as declared. Which names a provider accepts is
75
+ * `core/tools.ts` · `assertValidToolName`'s question, and the library only
76
+ * warns about it (dev mode), here as at `defineTool`.
77
+ */
78
+ export interface TryInsteadTool {
79
+ /** The tool's registered name, as a call would name it. */
80
+ readonly tool: string;
81
+ /** Why that tool, in the author's words ("it lists the collected names"). */
82
+ readonly why?: string;
83
+ }
61
84
  /** What a tool author passes to {@link import('./absent.js').absent}. */
62
85
  export interface AbsenceDeclaration {
63
86
  /**
@@ -83,8 +106,22 @@ export interface AbsenceDeclaration {
83
106
  * `window: '7d'`, or ask for a different interface"). Optional, and the
84
107
  * highest-value optional field in the shape: the loop this primitive stops
85
108
  * is a model with nowhere else to go.
109
+ *
110
+ * Prose for the model. Nothing in this library reads a tool name out of it:
111
+ * when the sentence points at another tool, name that tool in
112
+ * {@link AbsenceDeclaration.tryInsteadTool} as well.
86
113
  */
87
114
  readonly tryInstead?: string;
115
+ /**
116
+ * The other TOOL the suggestion points at, as data (9.113.0) —
117
+ * `{ tool, why? }`. Beside the sentence, not instead of it: the sentence is
118
+ * what the model is told, this is what a reader reads without parsing
119
+ * prose. Either may be given without the other; when both are given they
120
+ * must name the same tool, and the library cannot check that they do — it
121
+ * would have to read a tool name out of the sentence. ONE tool; a list is
122
+ * refused (see `absent.ts` · `readToolSuggestion` for why).
123
+ */
124
+ readonly tryInsteadTool?: TryInsteadTool;
88
125
  }
89
126
  /**
90
127
  * The rendered absence — the exact object a tool hands back and the model
@@ -109,7 +146,12 @@ export interface ToolAbsence {
109
146
  /** Stated as data as well as prose — the note can be skimmed past, a
110
147
  * `true` in a field named for the question cannot. */
111
148
  readonly retry_returns_the_same: true;
149
+ /** The author's sentence. A string, always — the typed tool rides its own
150
+ * key, so a reader of this one never has to narrow it. */
112
151
  readonly try_instead?: string;
152
+ /** The typed tool the suggestion points at (9.113.0), as declared — the
153
+ * author's words, `{ tool, why? }`. The model reads it as written. */
154
+ readonly try_instead_tool?: TryInsteadTool;
113
155
  /** The static sentence. Never interpolated — see `absent.ts`. */
114
156
  readonly note: string;
115
157
  }
@@ -19,9 +19,14 @@
19
19
  * filed by the two moments `contingent.ts` serves: the route
20
20
  * decider's answer and the dispatch loop's call) — identities,
21
21
  * enums and numbers only. Assertion values, `settles`, `line`, the
22
- * judged state and the contingent VALUE live in the committed key
23
- * under whatever redaction the run configured; an event stream
24
- * fans out to sinks we do not control.
22
+ * judged state, the contingent VALUE and — on an
23
+ * `unsettled-by-absence` row — a TOOL's own words (its envelope's
24
+ * `notChecked`, `cannotCover` and `tryInstead`) live in the
25
+ * committed key under whatever redaction the run configured; an
26
+ * event stream fans out to sinks we do not control. That row
27
+ * (9.113.0, filed by the same two moments through
28
+ * `unsettled.ts · withUnsettledRows`) emits nothing of its own, as
29
+ * a conflict row emits nothing of its own.
25
30
  *
26
31
  * ## Append only, last wins, conflicts are a fold
27
32
  *
@@ -43,7 +48,7 @@
43
48
  */
44
49
  import { type Conflict } from '../../../integrity/assertion/conflicts.js';
45
50
  import { type Assertion } from '../../../integrity/assertion/types.js';
46
- import { type BasisRow, type DeclaredOn, type FindingsDeclaration, type FindingsLedger, type FindingsRow, type JudgmentRow, type StandingRow } from './types.js';
51
+ import { type BasisRow, type DeclaredOn, type FindingsDeclaration, type FindingsLedger, type FindingsRow, type JudgmentRow, type StandingRow, type UnsettledByAbsenceRow } from './types.js';
47
52
  /** The scope surface this file needs. Structurally a `TypedScope<AgentState>`. */
48
53
  export interface FindingsScope {
49
54
  findingsLedger?: FindingsLedger;
@@ -77,6 +82,16 @@ export interface LedgerFold {
77
82
  readonly conflicts: readonly Conflict[];
78
83
  /** Whether any result has a standing at all. */
79
84
  readonly hasStanding: boolean;
85
+ /**
86
+ * The ruled-out standings that rest on an absence (9.113.0): the LAST
87
+ * `unsettled-by-absence` row per result, kept only while that result's
88
+ * CURRENT standing (`standingOf`) is still `ruled-out` — a later `fact`,
89
+ * `open` or `noise` moved the model's word, and a row beside the earlier
90
+ * word describes a standing that no longer stands. In the order each
91
+ * result first got a row. The piece's `unsettled by absence` section reads
92
+ * this and nothing else (`serve.ts · findingsLedgerPiece`).
93
+ */
94
+ readonly unsettled: ReadonlyMap<string, UnsettledByAbsenceRow>;
80
95
  }
81
96
  /**
82
97
  * Fold a ledger to its current reading. Pure; safe on a spread of the
@@ -89,8 +104,10 @@ export declare function foldLedger(rows: readonly FindingsRow[]): LedgerFold;
89
104
  * key that first disagreed at this write, and emit one event per basis or
90
105
  * standing row. No-op on an empty list, so an armed agent whose model
91
106
  * declared nothing never writes the key — its commit log is the one it
92
- * always had. Callers pass basis and standing rows; conflict rows are this
93
- * function's to write.
107
+ * always had. Callers pass basis and standing rows — each standing followed
108
+ * by the `unsettled-by-absence` row the rule files beside it, when it files
109
+ * one (`unsettled.ts · withUnsettledRows`); conflict rows are this function's
110
+ * to write.
94
111
  */
95
112
  export declare function recordFindings(scope: FindingsScope, rows: readonly FindingsRow[]): void;
96
113
  /**
@@ -19,9 +19,14 @@
19
19
  * filed by the two moments `contingent.ts` serves: the route
20
20
  * decider's answer and the dispatch loop's call) — identities,
21
21
  * enums and numbers only. Assertion values, `settles`, `line`, the
22
- * judged state and the contingent VALUE live in the committed key
23
- * under whatever redaction the run configured; an event stream
24
- * fans out to sinks we do not control.
22
+ * judged state, the contingent VALUE and — on an
23
+ * `unsettled-by-absence` row — a TOOL's own words (its envelope's
24
+ * `notChecked`, `cannotCover` and `tryInstead`) live in the
25
+ * committed key under whatever redaction the run configured; an
26
+ * event stream fans out to sinks we do not control. That row
27
+ * (9.113.0, filed by the same two moments through
28
+ * `unsettled.ts · withUnsettledRows`) emits nothing of its own, as
29
+ * a conflict row emits nothing of its own.
25
30
  *
26
31
  * ## Append only, last wins, conflicts are a fold
27
32
  *
@@ -55,23 +60,32 @@ import { PROPOSITION_CHARS, } from './types.js';
55
60
  export function foldLedger(rows) {
56
61
  const standingOf = new Map();
57
62
  const judgments = new Map();
63
+ const lastUnsettled = new Map();
58
64
  for (const row of rows) {
59
65
  if (row.kind === 'standing')
60
66
  standingOf.set(row.toolCallId, row);
61
67
  else if (row.kind === 'judgment')
62
68
  judgments.set(row.toolCallId, row);
69
+ else if (row.kind === 'unsettled-by-absence')
70
+ lastUnsettled.set(row.toolCallId, row);
63
71
  }
64
72
  const asserted = [];
65
73
  for (const row of standingOf.values()) {
66
74
  if (row.standing === 'fact')
67
75
  asserted.push(...row.assertions);
68
76
  }
77
+ const unsettled = new Map();
78
+ for (const [toolCallId, row] of lastUnsettled) {
79
+ if (standingOf.get(toolCallId)?.standing === 'ruled-out')
80
+ unsettled.set(toolCallId, row);
81
+ }
69
82
  return {
70
83
  standingOf,
71
84
  judgments,
72
85
  asserted,
73
86
  conflicts: conflictsOf(asserted),
74
87
  hasStanding: standingOf.size > 0,
88
+ unsettled,
75
89
  };
76
90
  }
77
91
  /**
@@ -103,8 +117,10 @@ function witnessesOf(conflict, standingOf) {
103
117
  * key that first disagreed at this write, and emit one event per basis or
104
118
  * standing row. No-op on an empty list, so an armed agent whose model
105
119
  * declared nothing never writes the key — its commit log is the one it
106
- * always had. Callers pass basis and standing rows; conflict rows are this
107
- * function's to write.
120
+ * always had. Callers pass basis and standing rows — each standing followed
121
+ * by the `unsettled-by-absence` row the rule files beside it, when it files
122
+ * one (`unsettled.ts · withUnsettledRows`); conflict rows are this function's
123
+ * to write.
108
124
  */
109
125
  export function recordFindings(scope, rows) {
110
126
  if (rows.length === 0)
@@ -195,6 +211,12 @@ function emitRow(scope, row, newConflicts, judgments) {
195
211
  });
196
212
  return;
197
213
  }
214
+ // The row beside a ruled-out standing that rests on an absence (9.113.0)
215
+ // emits nothing of its own — the conflict row's precedent: it is on the
216
+ // committed key, the served piece is its reader, and no event field ships
217
+ // without a reader in the same release.
218
+ if (row.kind === 'unsettled-by-absence')
219
+ return;
198
220
  if (row.kind !== 'standing')
199
221
  return;
200
222
  const conflictKeys = newConflicts
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../../src/core/agent/findings/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../../src/core/agent/findings/ledger.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,11 @@
18
18
  * standingRowsFrom` resolves a named id against. The offer and the
19
19
  * identity source read the SAME served history, so every id the
20
20
  * offer lists resolves: the law "the offer is what the model may
21
- * COPY" holds at the row, not only at the schema.
21
+ * COPY" holds at the row, not only at the schema. All of them ask
22
+ * ONE predicate, `isResultMessage`: a message the batch settlement
23
+ * wrote (9.113.0, `LLMMessage.notDispatched`) is served — the model
24
+ * reads its sentence — and is no result, so it is never offered,
25
+ * resolved or counted undeclared.
22
26
  *
23
27
  * WHY AN OFFER. On a hosted model the ask "by its tool_result id" produced
24
28
  * standings named by ORDINAL ("0", "1"), recorded as `unknownId` and settling
@@ -62,10 +66,21 @@ import type { FindingsLedger, Standing, StandingRow } from './types.js';
62
66
  */
63
67
  export declare const RETIRING_STANDINGS: readonly Standing[];
64
68
  /**
65
- * The `role: 'tool'` ids on a message list, in wire order, each once. A
66
- * message without an id, or with an empty one, contributes nothing. The
67
- * collapse (`serve.ts · collapseJudged`) never changes an id, so the list is
68
- * the same before and after it.
69
+ * Is this message a tool's RESULT — the only thing a standing can be about?
70
+ * A `role: 'tool'` message the batch settlement wrote (9.113.0,
71
+ * `LLMMessage.notDispatched`) is not: the call never ran, so there is nothing
72
+ * to stand on. Read off the marker, never the sentence — which is why every
73
+ * caller hands these functions the COMMITTED conversation, not the wire,
74
+ * where `stripFrameworkFields` has already removed the marker (ids and order
75
+ * are the same either way).
76
+ */
77
+ export declare function isResultMessage(m: LLMMessage): boolean;
78
+ /**
79
+ * The `role: 'tool'` ids on a message list, in wire order, each once — a
80
+ * settled message excluded (`isResultMessage`). A message without an id, or
81
+ * with an empty one, contributes nothing. The collapse (`serve.ts ·
82
+ * collapseJudged`) never changes an id, so the list is the same before and
83
+ * after it.
69
84
  */
70
85
  export declare function servedToolCallIds(messages: readonly LLMMessage[]): readonly string[];
71
86
  /**
@@ -107,6 +122,8 @@ export declare function offeredResultIds(messages: readonly LLMMessage[], rows:
107
122
  * order changes no row; it is the source the rows resolved against before
108
123
  * the history joined). An id in neither is `unknownId`, as written. A tool
109
124
  * message with no `toolName` yields a result with none: nothing is invented
110
- * for it.
125
+ * for it. A settled message (`isResultMessage`) is no result, so a model that
126
+ * names its id anyway files `unknownId` — the batch never holds one: a
127
+ * settled call never joins `toolResults`.
111
128
  */
112
129
  export declare function knownResults(messages: readonly LLMMessage[], previousBatch?: readonly PreviousResult[]): readonly PreviousResult[];