agentfootprint 12.2.0 → 13.0.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 (405) hide show
  1. package/CAPABILITIES.md +1 -0
  2. package/dist/adapters/code/output.js +8 -29
  3. package/dist/adapters/code/output.js.map +1 -1
  4. package/dist/adapters/observability/audit.js +151 -159
  5. package/dist/adapters/observability/audit.js.map +1 -1
  6. package/dist/adapters/observability/auditBounding.js +411 -0
  7. package/dist/adapters/observability/auditBounding.js.map +1 -0
  8. package/dist/adapters/observability/auditKeptByContract.js +107 -0
  9. package/dist/adapters/observability/auditKeptByContract.js.map +1 -0
  10. package/dist/adapters/observability/auditShapes.js +1731 -0
  11. package/dist/adapters/observability/auditShapes.js.map +1 -0
  12. package/dist/answer-account/account.js +92 -15
  13. package/dist/answer-account/account.js.map +1 -1
  14. package/dist/answer-account/facts/calls.js +7 -9
  15. package/dist/answer-account/facts/calls.js.map +1 -1
  16. package/dist/answer-account/facts/checked.js +2 -2
  17. package/dist/answer-account/facts/checked.js.map +1 -1
  18. package/dist/answer-account/facts/common.js +40 -7
  19. package/dist/answer-account/facts/common.js.map +1 -1
  20. package/dist/answer-account/facts/found.js +1 -1
  21. package/dist/answer-account/facts/found.js.map +1 -1
  22. package/dist/answer-account/facts/howSure.js +21 -3
  23. package/dist/answer-account/facts/howSure.js.map +1 -1
  24. package/dist/answer-account/facts/inView.js +3 -4
  25. package/dist/answer-account/facts/inView.js.map +1 -1
  26. package/dist/answer-account/facts/pausedLeg.js +1 -1
  27. package/dist/answer-account/facts/pausedLeg.js.map +1 -1
  28. package/dist/answer-account/facts/scripts.js +222 -0
  29. package/dist/answer-account/facts/scripts.js.map +1 -0
  30. package/dist/answer-account/facts/understood.js +5 -5
  31. package/dist/answer-account/facts/understood.js.map +1 -1
  32. package/dist/answer-account/pointerKey.js +1 -1
  33. package/dist/answer-account/shown.js +25 -7
  34. package/dist/answer-account/shown.js.map +1 -1
  35. package/dist/answer-account/signals.js +1 -1
  36. package/dist/answer-account/signals.js.map +1 -1
  37. package/dist/answer-account/size.js +152 -0
  38. package/dist/answer-account/size.js.map +1 -0
  39. package/dist/answer-account/templates.js +39 -1
  40. package/dist/answer-account/templates.js.map +1 -1
  41. package/dist/core/Agent.js +25 -1
  42. package/dist/core/Agent.js.map +1 -1
  43. package/dist/core/agent/AgentBuilder.js +85 -1
  44. package/dist/core/agent/AgentBuilder.js.map +1 -1
  45. package/dist/core/agent/arguments/ask.js +85 -2
  46. package/dist/core/agent/arguments/ask.js.map +1 -1
  47. package/dist/core/agent/arguments/partialWindow.js +120 -0
  48. package/dist/core/agent/arguments/partialWindow.js.map +1 -0
  49. package/dist/core/agent/assessment/assess.js +37 -0
  50. package/dist/core/agent/assessment/assess.js.map +1 -1
  51. package/dist/core/agent/assessment/compose.js +5 -1
  52. package/dist/core/agent/assessment/compose.js.map +1 -1
  53. package/dist/core/agent/assessment/reasons.js +7 -0
  54. package/dist/core/agent/assessment/reasons.js.map +1 -1
  55. package/dist/core/agent/assessment/witness.js +37 -4
  56. package/dist/core/agent/assessment/witness.js.map +1 -1
  57. package/dist/core/agent/buildAgentChart.js.map +1 -1
  58. package/dist/core/agent/evidence/codeRegions.js +279 -0
  59. package/dist/core/agent/evidence/codeRegions.js.map +1 -0
  60. package/dist/core/agent/evidence/gate.js +13 -2
  61. package/dist/core/agent/evidence/gate.js.map +1 -1
  62. package/dist/core/agent/evidence/recovery.js +11 -2
  63. package/dist/core/agent/evidence/recovery.js.map +1 -1
  64. package/dist/core/agent/findings/types.js.map +1 -1
  65. package/dist/core/agent/scripts/attachment.js +375 -0
  66. package/dist/core/agent/scripts/attachment.js.map +1 -0
  67. package/dist/core/agent/scripts/inert.js +88 -0
  68. package/dist/core/agent/scripts/inert.js.map +1 -0
  69. package/dist/core/agent/scripts/judge.js +41 -0
  70. package/dist/core/agent/scripts/judge.js.map +1 -0
  71. package/dist/core/agent/scripts/label.js +143 -0
  72. package/dist/core/agent/scripts/label.js.map +1 -0
  73. package/dist/core/agent/scripts/match.js +233 -0
  74. package/dist/core/agent/scripts/match.js.map +1 -0
  75. package/dist/core/agent/scripts/recovery.js +81 -0
  76. package/dist/core/agent/scripts/recovery.js.map +1 -0
  77. package/dist/core/agent/scripts/rows.js +221 -0
  78. package/dist/core/agent/scripts/rows.js.map +1 -0
  79. package/dist/core/agent/scripts/types.js +22 -0
  80. package/dist/core/agent/scripts/types.js.map +1 -0
  81. package/dist/core/agent/scripts/wrapper.js +63 -0
  82. package/dist/core/agent/scripts/wrapper.js.map +1 -0
  83. package/dist/core/agent/stages/argumentAsk.js +161 -19
  84. package/dist/core/agent/stages/argumentAsk.js.map +1 -1
  85. package/dist/core/agent/stages/evidenceRecheck.js +4 -1
  86. package/dist/core/agent/stages/evidenceRecheck.js.map +1 -1
  87. package/dist/core/agent/stages/prepareFinal.js +65 -10
  88. package/dist/core/agent/stages/prepareFinal.js.map +1 -1
  89. package/dist/core/agent/stages/route.js +53 -3
  90. package/dist/core/agent/stages/route.js.map +1 -1
  91. package/dist/core/agent/stages/seed.js +14 -1
  92. package/dist/core/agent/stages/seed.js.map +1 -1
  93. package/dist/core/agent/stages/toolCalls.js +339 -18
  94. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  95. package/dist/core/codeRunnerTool.js +32 -3
  96. package/dist/core/codeRunnerTool.js.map +1 -1
  97. package/dist/core/runCheckpoint.js +19 -6
  98. package/dist/core/runCheckpoint.js.map +1 -1
  99. package/dist/esm/adapters/code/output.d.ts +1 -4
  100. package/dist/esm/adapters/code/output.js +3 -24
  101. package/dist/esm/adapters/code/output.js.map +1 -1
  102. package/dist/esm/adapters/observability/audit.d.ts +79 -12
  103. package/dist/esm/adapters/observability/audit.js +132 -142
  104. package/dist/esm/adapters/observability/audit.js.map +1 -1
  105. package/dist/esm/adapters/observability/auditBounding.d.ts +215 -0
  106. package/dist/esm/adapters/observability/auditBounding.js +390 -0
  107. package/dist/esm/adapters/observability/auditBounding.js.map +1 -0
  108. package/dist/esm/adapters/observability/auditKeptByContract.d.ts +65 -0
  109. package/dist/esm/adapters/observability/auditKeptByContract.js +103 -0
  110. package/dist/esm/adapters/observability/auditKeptByContract.js.map +1 -0
  111. package/dist/esm/adapters/observability/auditShapes.d.ts +78 -0
  112. package/dist/esm/adapters/observability/auditShapes.js +1726 -0
  113. package/dist/esm/adapters/observability/auditShapes.js.map +1 -0
  114. package/dist/esm/answer-account/account.js +91 -14
  115. package/dist/esm/answer-account/account.js.map +1 -1
  116. package/dist/esm/answer-account/facts/calls.d.ts +0 -2
  117. package/dist/esm/answer-account/facts/calls.js +1 -3
  118. package/dist/esm/answer-account/facts/calls.js.map +1 -1
  119. package/dist/esm/answer-account/facts/checked.js +2 -2
  120. package/dist/esm/answer-account/facts/checked.js.map +1 -1
  121. package/dist/esm/answer-account/facts/common.d.ts +16 -4
  122. package/dist/esm/answer-account/facts/common.js +38 -6
  123. package/dist/esm/answer-account/facts/common.js.map +1 -1
  124. package/dist/esm/answer-account/facts/found.js +2 -2
  125. package/dist/esm/answer-account/facts/found.js.map +1 -1
  126. package/dist/esm/answer-account/facts/howSure.d.ts +1 -1
  127. package/dist/esm/answer-account/facts/howSure.js +22 -4
  128. package/dist/esm/answer-account/facts/howSure.js.map +1 -1
  129. package/dist/esm/answer-account/facts/inView.js +1 -2
  130. package/dist/esm/answer-account/facts/inView.js.map +1 -1
  131. package/dist/esm/answer-account/facts/pausedLeg.js +2 -2
  132. package/dist/esm/answer-account/facts/pausedLeg.js.map +1 -1
  133. package/dist/esm/answer-account/facts/scripts.d.ts +34 -0
  134. package/dist/esm/answer-account/facts/scripts.js +218 -0
  135. package/dist/esm/answer-account/facts/scripts.js.map +1 -0
  136. package/dist/esm/answer-account/facts/understood.js +2 -2
  137. package/dist/esm/answer-account/facts/understood.js.map +1 -1
  138. package/dist/esm/answer-account/pointerKey.d.ts +1 -1
  139. package/dist/esm/answer-account/pointerKey.js +1 -1
  140. package/dist/esm/answer-account/shown.d.ts +9 -2
  141. package/dist/esm/answer-account/shown.js +25 -7
  142. package/dist/esm/answer-account/shown.js.map +1 -1
  143. package/dist/esm/answer-account/signals.js +2 -2
  144. package/dist/esm/answer-account/signals.js.map +1 -1
  145. package/dist/esm/answer-account/size.d.ts +59 -0
  146. package/dist/esm/answer-account/size.js +147 -0
  147. package/dist/esm/answer-account/size.js.map +1 -0
  148. package/dist/esm/answer-account/templates.d.ts +29 -1
  149. package/dist/esm/answer-account/templates.js +39 -1
  150. package/dist/esm/answer-account/templates.js.map +1 -1
  151. package/dist/esm/core/Agent.d.ts +8 -1
  152. package/dist/esm/core/Agent.js +25 -1
  153. package/dist/esm/core/Agent.js.map +1 -1
  154. package/dist/esm/core/agent/AgentBuilder.d.ts +52 -0
  155. package/dist/esm/core/agent/AgentBuilder.js +85 -1
  156. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  157. package/dist/esm/core/agent/arguments/ask.d.ts +11 -0
  158. package/dist/esm/core/agent/arguments/ask.js +83 -1
  159. package/dist/esm/core/agent/arguments/ask.js.map +1 -1
  160. package/dist/esm/core/agent/arguments/partialWindow.d.ts +42 -0
  161. package/dist/esm/core/agent/arguments/partialWindow.js +111 -0
  162. package/dist/esm/core/agent/arguments/partialWindow.js.map +1 -0
  163. package/dist/esm/core/agent/assessment/assess.js +37 -0
  164. package/dist/esm/core/agent/assessment/assess.js.map +1 -1
  165. package/dist/esm/core/agent/assessment/compose.d.ts +3 -1
  166. package/dist/esm/core/agent/assessment/compose.js +5 -1
  167. package/dist/esm/core/agent/assessment/compose.js.map +1 -1
  168. package/dist/esm/core/agent/assessment/reasons.js +7 -0
  169. package/dist/esm/core/agent/assessment/reasons.js.map +1 -1
  170. package/dist/esm/core/agent/assessment/types.d.ts +12 -2
  171. package/dist/esm/core/agent/assessment/witness.d.ts +44 -4
  172. package/dist/esm/core/agent/assessment/witness.js +35 -3
  173. package/dist/esm/core/agent/assessment/witness.js.map +1 -1
  174. package/dist/esm/core/agent/buildAgentChart.d.ts +9 -0
  175. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  176. package/dist/esm/core/agent/evidence/codeRegions.d.ts +130 -0
  177. package/dist/esm/core/agent/evidence/codeRegions.js +275 -0
  178. package/dist/esm/core/agent/evidence/codeRegions.js.map +1 -0
  179. package/dist/esm/core/agent/evidence/gate.d.ts +3 -0
  180. package/dist/esm/core/agent/evidence/gate.js +12 -2
  181. package/dist/esm/core/agent/evidence/gate.js.map +1 -1
  182. package/dist/esm/core/agent/evidence/recovery.d.ts +5 -1
  183. package/dist/esm/core/agent/evidence/recovery.js +11 -2
  184. package/dist/esm/core/agent/evidence/recovery.js.map +1 -1
  185. package/dist/esm/core/agent/evidence/types.d.ts +35 -0
  186. package/dist/esm/core/agent/findings/types.d.ts +3 -2
  187. package/dist/esm/core/agent/findings/types.js.map +1 -1
  188. package/dist/esm/core/agent/scripts/attachment.d.ts +179 -0
  189. package/dist/esm/core/agent/scripts/attachment.js +361 -0
  190. package/dist/esm/core/agent/scripts/attachment.js.map +1 -0
  191. package/dist/esm/core/agent/scripts/inert.d.ts +38 -0
  192. package/dist/esm/core/agent/scripts/inert.js +84 -0
  193. package/dist/esm/core/agent/scripts/inert.js.map +1 -0
  194. package/dist/esm/core/agent/scripts/judge.d.ts +36 -0
  195. package/dist/esm/core/agent/scripts/judge.js +37 -0
  196. package/dist/esm/core/agent/scripts/judge.js.map +1 -0
  197. package/dist/esm/core/agent/scripts/label.d.ts +103 -0
  198. package/dist/esm/core/agent/scripts/label.js +136 -0
  199. package/dist/esm/core/agent/scripts/label.js.map +1 -0
  200. package/dist/esm/core/agent/scripts/match.d.ts +99 -0
  201. package/dist/esm/core/agent/scripts/match.js +226 -0
  202. package/dist/esm/core/agent/scripts/match.js.map +1 -0
  203. package/dist/esm/core/agent/scripts/recovery.d.ts +54 -0
  204. package/dist/esm/core/agent/scripts/recovery.js +77 -0
  205. package/dist/esm/core/agent/scripts/recovery.js.map +1 -0
  206. package/dist/esm/core/agent/scripts/rows.d.ts +143 -0
  207. package/dist/esm/core/agent/scripts/rows.js +211 -0
  208. package/dist/esm/core/agent/scripts/rows.js.map +1 -0
  209. package/dist/esm/core/agent/scripts/types.d.ts +91 -0
  210. package/dist/esm/core/agent/scripts/types.js +21 -0
  211. package/dist/esm/core/agent/scripts/types.js.map +1 -0
  212. package/dist/esm/core/agent/scripts/wrapper.d.ts +36 -0
  213. package/dist/esm/core/agent/scripts/wrapper.js +58 -0
  214. package/dist/esm/core/agent/scripts/wrapper.js.map +1 -0
  215. package/dist/esm/core/agent/stages/argumentAsk.d.ts +4 -1
  216. package/dist/esm/core/agent/stages/argumentAsk.js +164 -22
  217. package/dist/esm/core/agent/stages/argumentAsk.js.map +1 -1
  218. package/dist/esm/core/agent/stages/evidenceRecheck.js +4 -1
  219. package/dist/esm/core/agent/stages/evidenceRecheck.js.map +1 -1
  220. package/dist/esm/core/agent/stages/prepareFinal.d.ts +11 -0
  221. package/dist/esm/core/agent/stages/prepareFinal.js +65 -10
  222. package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
  223. package/dist/esm/core/agent/stages/route.js +53 -3
  224. package/dist/esm/core/agent/stages/route.js.map +1 -1
  225. package/dist/esm/core/agent/stages/seed.js +14 -1
  226. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  227. package/dist/esm/core/agent/stages/toolCalls.d.ts +14 -0
  228. package/dist/esm/core/agent/stages/toolCalls.js +337 -16
  229. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  230. package/dist/esm/core/agent/types.d.ts +41 -0
  231. package/dist/esm/core/codeRunnerTool.d.ts +23 -0
  232. package/dist/esm/core/codeRunnerTool.js +31 -2
  233. package/dist/esm/core/codeRunnerTool.js.map +1 -1
  234. package/dist/esm/core/runCheckpoint.js +16 -3
  235. package/dist/esm/core/runCheckpoint.js.map +1 -1
  236. package/dist/esm/events/payloads.d.ts +46 -1
  237. package/dist/esm/hosting/answerAccounts.js +4 -2
  238. package/dist/esm/hosting/answerAccounts.js.map +1 -1
  239. package/dist/esm/hosting/artifactWire.d.ts +3 -2
  240. package/dist/esm/hosting/artifactWire.js.map +1 -1
  241. package/dist/esm/index.d.ts +3 -1
  242. package/dist/esm/index.js.map +1 -1
  243. package/dist/esm/lib/boundedJson.d.ts +24 -0
  244. package/dist/esm/lib/boundedJson.js +45 -2
  245. package/dist/esm/lib/boundedJson.js.map +1 -1
  246. package/dist/esm/lib/scriptRecord.d.ts +139 -0
  247. package/dist/esm/lib/scriptRecord.js +18 -0
  248. package/dist/esm/lib/scriptRecord.js.map +1 -0
  249. package/dist/esm/lib/utf8.d.ts +36 -0
  250. package/dist/esm/lib/utf8.js +70 -0
  251. package/dist/esm/lib/utf8.js.map +1 -0
  252. package/dist/esm/mcp/toolExtras.d.ts +9 -0
  253. package/dist/esm/mcp/toolExtras.js +6 -0
  254. package/dist/esm/mcp/toolExtras.js.map +1 -1
  255. package/dist/esm/redaction/conversation.js +10 -0
  256. package/dist/esm/redaction/conversation.js.map +1 -1
  257. package/dist/esm/redaction/knownStrings.js +34 -0
  258. package/dist/esm/redaction/knownStrings.js.map +1 -1
  259. package/dist/esm/semantics/coverage/answer.d.ts +12 -1
  260. package/dist/esm/semantics/coverage/answer.js +26 -3
  261. package/dist/esm/semantics/coverage/answer.js.map +1 -1
  262. package/dist/esm/tools/script.d.ts +85 -0
  263. package/dist/esm/tools/script.js +157 -0
  264. package/dist/esm/tools/script.js.map +1 -0
  265. package/dist/esm/tools/tools.d.ts +30 -0
  266. package/dist/esm/tools/tools.js +4 -0
  267. package/dist/esm/tools/tools.js.map +1 -1
  268. package/dist/hosting/answerAccounts.js +4 -2
  269. package/dist/hosting/answerAccounts.js.map +1 -1
  270. package/dist/hosting/artifactWire.js.map +1 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/lib/boundedJson.js +48 -3
  273. package/dist/lib/boundedJson.js.map +1 -1
  274. package/dist/lib/scriptRecord.js +19 -0
  275. package/dist/lib/scriptRecord.js.map +1 -0
  276. package/dist/lib/utf8.js +77 -0
  277. package/dist/lib/utf8.js.map +1 -0
  278. package/dist/mcp/toolExtras.js +6 -0
  279. package/dist/mcp/toolExtras.js.map +1 -1
  280. package/dist/redaction/conversation.js +10 -0
  281. package/dist/redaction/conversation.js.map +1 -1
  282. package/dist/redaction/knownStrings.js +34 -0
  283. package/dist/redaction/knownStrings.js.map +1 -1
  284. package/dist/semantics/coverage/answer.js +26 -3
  285. package/dist/semantics/coverage/answer.js.map +1 -1
  286. package/dist/tools/script.js +163 -0
  287. package/dist/tools/script.js.map +1 -0
  288. package/dist/tools/tools.js +4 -0
  289. package/dist/tools/tools.js.map +1 -1
  290. package/dist/types/adapters/code/output.d.ts +1 -4
  291. package/dist/types/adapters/code/output.d.ts.map +1 -1
  292. package/dist/types/adapters/observability/audit.d.ts +79 -12
  293. package/dist/types/adapters/observability/audit.d.ts.map +1 -1
  294. package/dist/types/adapters/observability/auditBounding.d.ts +216 -0
  295. package/dist/types/adapters/observability/auditBounding.d.ts.map +1 -0
  296. package/dist/types/adapters/observability/auditKeptByContract.d.ts +66 -0
  297. package/dist/types/adapters/observability/auditKeptByContract.d.ts.map +1 -0
  298. package/dist/types/adapters/observability/auditShapes.d.ts +79 -0
  299. package/dist/types/adapters/observability/auditShapes.d.ts.map +1 -0
  300. package/dist/types/answer-account/account.d.ts.map +1 -1
  301. package/dist/types/answer-account/facts/calls.d.ts +0 -2
  302. package/dist/types/answer-account/facts/calls.d.ts.map +1 -1
  303. package/dist/types/answer-account/facts/checked.d.ts.map +1 -1
  304. package/dist/types/answer-account/facts/common.d.ts +16 -4
  305. package/dist/types/answer-account/facts/common.d.ts.map +1 -1
  306. package/dist/types/answer-account/facts/found.d.ts.map +1 -1
  307. package/dist/types/answer-account/facts/howSure.d.ts +1 -1
  308. package/dist/types/answer-account/facts/howSure.d.ts.map +1 -1
  309. package/dist/types/answer-account/facts/inView.d.ts.map +1 -1
  310. package/dist/types/answer-account/facts/pausedLeg.d.ts.map +1 -1
  311. package/dist/types/answer-account/facts/scripts.d.ts +35 -0
  312. package/dist/types/answer-account/facts/scripts.d.ts.map +1 -0
  313. package/dist/types/answer-account/facts/understood.d.ts.map +1 -1
  314. package/dist/types/answer-account/pointerKey.d.ts +1 -1
  315. package/dist/types/answer-account/shown.d.ts +9 -2
  316. package/dist/types/answer-account/shown.d.ts.map +1 -1
  317. package/dist/types/answer-account/signals.d.ts.map +1 -1
  318. package/dist/types/answer-account/size.d.ts +60 -0
  319. package/dist/types/answer-account/size.d.ts.map +1 -0
  320. package/dist/types/answer-account/templates.d.ts +29 -1
  321. package/dist/types/answer-account/templates.d.ts.map +1 -1
  322. package/dist/types/core/Agent.d.ts +8 -1
  323. package/dist/types/core/Agent.d.ts.map +1 -1
  324. package/dist/types/core/agent/AgentBuilder.d.ts +52 -0
  325. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  326. package/dist/types/core/agent/arguments/ask.d.ts +11 -0
  327. package/dist/types/core/agent/arguments/ask.d.ts.map +1 -1
  328. package/dist/types/core/agent/arguments/partialWindow.d.ts +43 -0
  329. package/dist/types/core/agent/arguments/partialWindow.d.ts.map +1 -0
  330. package/dist/types/core/agent/assessment/assess.d.ts.map +1 -1
  331. package/dist/types/core/agent/assessment/compose.d.ts +3 -1
  332. package/dist/types/core/agent/assessment/compose.d.ts.map +1 -1
  333. package/dist/types/core/agent/assessment/reasons.d.ts.map +1 -1
  334. package/dist/types/core/agent/assessment/types.d.ts +12 -2
  335. package/dist/types/core/agent/assessment/types.d.ts.map +1 -1
  336. package/dist/types/core/agent/assessment/witness.d.ts +44 -4
  337. package/dist/types/core/agent/assessment/witness.d.ts.map +1 -1
  338. package/dist/types/core/agent/buildAgentChart.d.ts +9 -0
  339. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  340. package/dist/types/core/agent/evidence/codeRegions.d.ts +131 -0
  341. package/dist/types/core/agent/evidence/codeRegions.d.ts.map +1 -0
  342. package/dist/types/core/agent/evidence/gate.d.ts +3 -0
  343. package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
  344. package/dist/types/core/agent/evidence/recovery.d.ts +5 -1
  345. package/dist/types/core/agent/evidence/recovery.d.ts.map +1 -1
  346. package/dist/types/core/agent/evidence/types.d.ts +35 -0
  347. package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
  348. package/dist/types/core/agent/findings/types.d.ts +3 -2
  349. package/dist/types/core/agent/findings/types.d.ts.map +1 -1
  350. package/dist/types/core/agent/scripts/attachment.d.ts +180 -0
  351. package/dist/types/core/agent/scripts/attachment.d.ts.map +1 -0
  352. package/dist/types/core/agent/scripts/inert.d.ts +39 -0
  353. package/dist/types/core/agent/scripts/inert.d.ts.map +1 -0
  354. package/dist/types/core/agent/scripts/judge.d.ts +37 -0
  355. package/dist/types/core/agent/scripts/judge.d.ts.map +1 -0
  356. package/dist/types/core/agent/scripts/label.d.ts +104 -0
  357. package/dist/types/core/agent/scripts/label.d.ts.map +1 -0
  358. package/dist/types/core/agent/scripts/match.d.ts +100 -0
  359. package/dist/types/core/agent/scripts/match.d.ts.map +1 -0
  360. package/dist/types/core/agent/scripts/recovery.d.ts +55 -0
  361. package/dist/types/core/agent/scripts/recovery.d.ts.map +1 -0
  362. package/dist/types/core/agent/scripts/rows.d.ts +144 -0
  363. package/dist/types/core/agent/scripts/rows.d.ts.map +1 -0
  364. package/dist/types/core/agent/scripts/types.d.ts +92 -0
  365. package/dist/types/core/agent/scripts/types.d.ts.map +1 -0
  366. package/dist/types/core/agent/scripts/wrapper.d.ts +37 -0
  367. package/dist/types/core/agent/scripts/wrapper.d.ts.map +1 -0
  368. package/dist/types/core/agent/stages/argumentAsk.d.ts +4 -1
  369. package/dist/types/core/agent/stages/argumentAsk.d.ts.map +1 -1
  370. package/dist/types/core/agent/stages/evidenceRecheck.d.ts.map +1 -1
  371. package/dist/types/core/agent/stages/prepareFinal.d.ts +11 -0
  372. package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
  373. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  374. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  375. package/dist/types/core/agent/stages/toolCalls.d.ts +14 -0
  376. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  377. package/dist/types/core/agent/types.d.ts +41 -0
  378. package/dist/types/core/agent/types.d.ts.map +1 -1
  379. package/dist/types/core/codeRunnerTool.d.ts +23 -0
  380. package/dist/types/core/codeRunnerTool.d.ts.map +1 -1
  381. package/dist/types/core/runCheckpoint.d.ts.map +1 -1
  382. package/dist/types/events/payloads.d.ts +46 -1
  383. package/dist/types/events/payloads.d.ts.map +1 -1
  384. package/dist/types/hosting/answerAccounts.d.ts.map +1 -1
  385. package/dist/types/hosting/artifactWire.d.ts +3 -2
  386. package/dist/types/hosting/artifactWire.d.ts.map +1 -1
  387. package/dist/types/index.d.ts +3 -1
  388. package/dist/types/index.d.ts.map +1 -1
  389. package/dist/types/lib/boundedJson.d.ts +24 -0
  390. package/dist/types/lib/boundedJson.d.ts.map +1 -1
  391. package/dist/types/lib/scriptRecord.d.ts +140 -0
  392. package/dist/types/lib/scriptRecord.d.ts.map +1 -0
  393. package/dist/types/lib/utf8.d.ts +37 -0
  394. package/dist/types/lib/utf8.d.ts.map +1 -0
  395. package/dist/types/mcp/toolExtras.d.ts +9 -0
  396. package/dist/types/mcp/toolExtras.d.ts.map +1 -1
  397. package/dist/types/redaction/conversation.d.ts.map +1 -1
  398. package/dist/types/redaction/knownStrings.d.ts.map +1 -1
  399. package/dist/types/semantics/coverage/answer.d.ts +12 -1
  400. package/dist/types/semantics/coverage/answer.d.ts.map +1 -1
  401. package/dist/types/tools/script.d.ts +86 -0
  402. package/dist/types/tools/script.d.ts.map +1 -0
  403. package/dist/types/tools/tools.d.ts +30 -0
  404. package/dist/types/tools/tools.d.ts.map +1 -1
  405. package/package.json +2 -1
@@ -0,0 +1,226 @@
1
+ /**
2
+ * scripts/match — is a fenced block the program ONE call of this turn
3
+ * submitted? Identity against the record, never evidence for a value.
4
+ *
5
+ * Pattern: pure function over the answer and this turn's rows.
6
+ * Role: core/ layer. Asked inside the ONE judge closure the Route decider
7
+ * builds (`stages/route.ts` · `judgeEvidence`, through `judge.ts`),
8
+ * before the names-and-numbers extractor reads the text — so the
9
+ * draft and the delivered candidate are read alike. Only under
10
+ * `.namesAndNumbersFromEvidence({ code: 'match' })`.
11
+ * Emits: N/A.
12
+ *
13
+ * ## The match rule: exact, after removing only the wrapper (design § 5.2)
14
+ *
15
+ * A block matches a call only when its content (`../evidence/codeRegions.ts`)
16
+ * equals the program the call SUBMITTED to the tool, byte for byte. Nothing is
17
+ * transformed: no trailing-space strip, no line-ending rewrite, no Unicode
18
+ * normalization, no shape, no edit distance — each can change a literal and so
19
+ * the program (`print(len("""A \nB"""))` prints 5, its copy without the two
20
+ * spaces 3; `"é"` written with a combining mark is one more character than its
21
+ * NFC form). The strings are compared as they hold the text (UTF-16 code
22
+ * units): for well-formed text that is UTF-8 byte equality, and for a lone
23
+ * surrogate it is stricter, the safe direction.
24
+ *
25
+ * - Against the rows of the CURRENT TURN only; earlier turns are counted
26
+ * (`earlierTurnRows`), never compared, and a miss says "no submission of
27
+ * this turn", never "no submission".
28
+ * - A block over `MAX_SCRIPT_BYTES` is `over-size`: no row keeps a program
29
+ * that long, so it is never compared.
30
+ * - Two calls that submitted byte-identical programs: the block names the
31
+ * LATEST, counts the rest (`alsoMatches`) and carries its label.
32
+ * - No nearest submission is ever named: a near match is a different program.
33
+ *
34
+ * WHAT A MATCH YIELDS. The block is script content: it is cut out of the text
35
+ * the extractor reads, so it yields no value candidates — and it grounds
36
+ * nothing: the evidence corpus is untouched, so a value in the prose that also
37
+ * sits in the script still needs a result. A MISS stays in the text and is
38
+ * checked as prose, exactly as today.
39
+ *
40
+ * COST. One linear scan of the answer (`codeRegionsOf`); each of at most
41
+ * `MAX_CODE_REGIONS` blocks is looked up once among at most `MAX_SCRIPT_ROWS`
42
+ * programs of at most `MAX_SCRIPT_BYTES` — within the 512 comparisons per
43
+ * judged answer of design § 4.4. Earlier turns add nothing.
44
+ */
45
+ import { codeRegionsOf, MAX_CODE_REGIONS } from '../evidence/codeRegions.js';
46
+ import { utf8Length } from '../../../lib/utf8.js';
47
+ import { exitCodeFits, SCRIPT_LABELS } from './label.js';
48
+ import { MAX_SCRIPT_BYTES } from './rows.js';
49
+ /** The text with `cut` regions removed, whole lines each (fence lines included). */
50
+ function without(text, cut) {
51
+ if (cut.length === 0)
52
+ return text;
53
+ const parts = [];
54
+ let from = 0;
55
+ for (const region of cut) {
56
+ parts.push(text.slice(from, region.start));
57
+ from = region.end;
58
+ }
59
+ parts.push(text.slice(from));
60
+ return parts.join('');
61
+ }
62
+ /** Whether a block's content is over the per-script bound — never compared then. */
63
+ function overSize(content) {
64
+ // Every UTF-16 unit is at least one UTF-8 byte: a long string is over at once.
65
+ return content.length > MAX_SCRIPT_BYTES || utf8Length(content) > MAX_SCRIPT_BYTES;
66
+ }
67
+ /**
68
+ * Read `answer`'s fenced blocks against this turn's submissions. Pure; the
69
+ * rows are `rows.ts` · `scriptRowsOfTurn`'s reading (last row per call).
70
+ */
71
+ export function readShownScripts(answer, turn, scriptsDropped) {
72
+ const { regions, dropped } = codeRegionsOf(answer);
73
+ // The programs this turn submitted, each with every call that submitted it,
74
+ // in the order the calls were made — the last is "the latest".
75
+ const byProgram = new Map();
76
+ for (const row of turn.current) {
77
+ if (row.text === undefined)
78
+ continue;
79
+ const calls = byProgram.get(row.text);
80
+ if (calls === undefined)
81
+ byProgram.set(row.text, [row]);
82
+ else
83
+ calls.push(row);
84
+ }
85
+ const blocks = [];
86
+ const matched = [];
87
+ for (const region of regions) {
88
+ if (overSize(region.content)) {
89
+ blocks.push({ block: region.block, label: 'unmatched', reason: 'over-size' });
90
+ continue;
91
+ }
92
+ const calls = byProgram.get(region.content);
93
+ if (calls === undefined) {
94
+ blocks.push({ block: region.block, label: 'unmatched', reason: 'no-submission-this-turn' });
95
+ continue;
96
+ }
97
+ const latest = calls[calls.length - 1];
98
+ matched.push(region);
99
+ blocks.push({
100
+ block: region.block,
101
+ label: latest.outcome,
102
+ ...(latest.exitCode !== undefined && { exitCode: latest.exitCode }),
103
+ toolCallId: latest.toolCallId,
104
+ tool: latest.tool,
105
+ dispatch: latest.dispatch,
106
+ ...(calls.length > 1 && { alsoMatches: calls.length - 1 }),
107
+ });
108
+ }
109
+ return {
110
+ prose: without(answer, matched),
111
+ outsideCode: without(answer, regions),
112
+ verdict: {
113
+ blocks,
114
+ earlierTurnRows: turn.earlier,
115
+ regionsDropped: dropped,
116
+ ...(scriptsDropped !== undefined && scriptsDropped > 0 && { scriptsDropped }),
117
+ },
118
+ };
119
+ }
120
+ /**
121
+ * A verdict as detached plain data — field by field, never a reference into
122
+ * state (a value read back through a TypedScope is a live view, and an event
123
+ * payload must be plain data).
124
+ */
125
+ export function copyScriptsVerdict(verdict) {
126
+ return {
127
+ blocks: verdict.blocks.map((b) => b.label === 'unmatched'
128
+ ? { block: b.block, label: 'unmatched', reason: b.reason }
129
+ : {
130
+ block: b.block,
131
+ label: b.label,
132
+ ...(b.exitCode !== undefined && { exitCode: b.exitCode }),
133
+ toolCallId: b.toolCallId,
134
+ tool: b.tool,
135
+ dispatch: b.dispatch,
136
+ ...(b.alsoMatches !== undefined && { alsoMatches: b.alsoMatches }),
137
+ }),
138
+ earlierTurnRows: verdict.earlierTurnRows,
139
+ regionsDropped: verdict.regionsDropped,
140
+ ...(verdict.scriptsDropped !== undefined && { scriptsDropped: verdict.scriptsDropped }),
141
+ };
142
+ }
143
+ // ─── Reading a record back ────────────────────────────────────────────
144
+ //
145
+ // A saved verdict is JSON a reader is handed, not a value this library holds.
146
+ // ONE rule reads its fields for every reader of the shape — the answer
147
+ // account (`evidence_checked.scripts`) and the checkpoint door's
148
+ // `script-shown` witness row (`assessment/witness.ts`) — and it refuses
149
+ // exactly what no writer of this library files.
150
+ /** Every reason a block can be unmatched for. */
151
+ export const UNMATCHED_REASONS = Object.freeze([
152
+ 'no-submission-this-turn',
153
+ 'over-size',
154
+ 'kept-out',
155
+ ]);
156
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
157
+ const isPositive = (value) => typeof value === 'number' && Number.isInteger(value) && value >= 1;
158
+ /**
159
+ * One block verdict's fields, checked as {@link readShownScripts} writes them
160
+ * — a fresh copy, or `undefined` when any field is one no writer of this
161
+ * library files: a position or a dispatch that is not a whole number from 1,
162
+ * a label outside the vocabulary, an exit code its label does not carry
163
+ * (`label.ts` · `exitCodeFits`), an unmatched block that names a call, a
164
+ * matched one without its call. Fields beside these (a witness row's `kind`,
165
+ * `turn`, `iteration`) are not read.
166
+ */
167
+ export function blockVerdictOf(value) {
168
+ if (!isObject(value))
169
+ return undefined;
170
+ const { block, label, reason, toolCallId, tool, dispatch, exitCode, alsoMatches } = value;
171
+ if (!isPositive(block))
172
+ return undefined;
173
+ if (label === 'unmatched') {
174
+ const named = toolCallId !== undefined ||
175
+ tool !== undefined ||
176
+ dispatch !== undefined ||
177
+ exitCode !== undefined ||
178
+ alsoMatches !== undefined;
179
+ if (named || !UNMATCHED_REASONS.includes(reason))
180
+ return undefined;
181
+ return { block, label: 'unmatched', reason: reason };
182
+ }
183
+ if (reason !== undefined || !SCRIPT_LABELS.includes(label)) {
184
+ return undefined;
185
+ }
186
+ if (!exitCodeFits(label, exitCode))
187
+ return undefined;
188
+ if (typeof toolCallId !== 'string' || typeof tool !== 'string')
189
+ return undefined;
190
+ if (!isPositive(dispatch))
191
+ return undefined;
192
+ if (alsoMatches !== undefined && !isPositive(alsoMatches))
193
+ return undefined;
194
+ return {
195
+ block,
196
+ label: label,
197
+ ...(exitCode !== undefined && { exitCode: exitCode }),
198
+ toolCallId,
199
+ tool,
200
+ dispatch,
201
+ ...(alsoMatches !== undefined && { alsoMatches }),
202
+ };
203
+ }
204
+ /**
205
+ * A saved `evidence_checked.scripts` — THE reader of the shape for a reader
206
+ * of a record. `undefined` when the event carries no scripts arm. Bounded by
207
+ * the writer's cap: no reader iterates more verdicts than a writer files.
208
+ */
209
+ export function recordedBlocks(value) {
210
+ if (value === undefined)
211
+ return undefined;
212
+ if (!isObject(value) || !Array.isArray(value.blocks))
213
+ return { blocks: [], unread: 1 };
214
+ const all = value.blocks;
215
+ const blocks = [];
216
+ let unread = Math.max(0, all.length - MAX_CODE_REGIONS);
217
+ for (let index = 0; index < Math.min(all.length, MAX_CODE_REGIONS); index++) {
218
+ const verdict = blockVerdictOf(all[index]);
219
+ if (verdict === undefined)
220
+ unread += 1;
221
+ else
222
+ blocks.push({ index, verdict });
223
+ }
224
+ return { blocks, unread };
225
+ }
226
+ //# sourceMappingURL=match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match.js","sourceRoot":"","sources":["../../../../../src/core/agent/scripts/match.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * scripts/recovery — the one clause the evidence revision request gains under
3
+ * `code: 'match'`: keep the script, fix the values.
4
+ *
5
+ * Pattern: Lens — a library sentence about a FINISHED call, composed from the
6
+ * match's verdict, in the past tense, naming no tool as where to go
7
+ * next (`core/agent/README.md`, the correction law). Request-only:
8
+ * it rides the internal recovery instruction (`../evidence/recovery.ts`
9
+ * · `buildEvidenceRecovery`), never history.
10
+ * Role: core/ layer. Composed by the Route decider, which holds this turn's
11
+ * rows, and carried to the recheck stage on `evidenceUnsupported`.
12
+ * Emits: N/A.
13
+ *
14
+ * Two clauses, chosen by what the verdict holds (design § 7):
15
+ *
16
+ * - a block that matched no submission, and a flagged value that sat only in
17
+ * such a block — its contents were checked as prose: keep a script, show it
18
+ * exactly as submitted, or say the code shown is not the one submitted, and
19
+ * fix the values in the prose;
20
+ * - a block that matched a call, with values flagged in the prose — the
21
+ * script was not checked: keep it; the listed values were in the prose.
22
+ *
23
+ * The parenthesis carries the call's ACTUAL label in its words
24
+ * (`label.ts` · `labelWords`) — never a fixed "executed", never an exit
25
+ * number the record does not hold.
26
+ *
27
+ * WHAT IT CANNOT DO, stated: deleting an unmatched block removes its
28
+ * candidates and the `script-unmatched` reason, so a draft without the script
29
+ * can pass the check. No sentence makes a model keep a script; mandatory
30
+ * display comes from `.scriptTravelsWithTheAnswer()`, which needs no
31
+ * cooperation from the model.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * scriptRecoveryClause({ blocks: [{ block: 1, label: 'completed-with-failure', exitCode: 7,
36
+ * toolCallId: 'c1', tool: 'run_code' }], earlierTurnRows: 0, regionsDropped: 0 },
37
+ * [{ value: '1200', shape: 'number', region: 'prose' }], ['run_code']);
38
+ * // 'The script shown is the one submitted to `run_code` on call c1 (completed with failure,
39
+ * // exit 7) and was not checked. Keep it. The listed values were in the prose around it.'
40
+ * ```
41
+ */
42
+ import type { ScriptsVerdict } from './types.js';
43
+ /** A flagged value as the clause reads it — its region under `code: 'match'`. */
44
+ interface FlaggedValue {
45
+ readonly region?: 'prose' | 'code';
46
+ }
47
+ /**
48
+ * The clause(s) for one rejected draft — `''` when the verdict calls for
49
+ * none (no fenced block, or no flagged value the blocks bear on).
50
+ * `toolsThisTurn` names the code-running tools this turn's calls submitted
51
+ * to, in first-call order.
52
+ */
53
+ export declare function scriptRecoveryClause(scripts: ScriptsVerdict, unsupported: readonly FlaggedValue[], toolsThisTurn: readonly string[]): string;
54
+ export {};
@@ -0,0 +1,77 @@
1
+ /**
2
+ * scripts/recovery — the one clause the evidence revision request gains under
3
+ * `code: 'match'`: keep the script, fix the values.
4
+ *
5
+ * Pattern: Lens — a library sentence about a FINISHED call, composed from the
6
+ * match's verdict, in the past tense, naming no tool as where to go
7
+ * next (`core/agent/README.md`, the correction law). Request-only:
8
+ * it rides the internal recovery instruction (`../evidence/recovery.ts`
9
+ * · `buildEvidenceRecovery`), never history.
10
+ * Role: core/ layer. Composed by the Route decider, which holds this turn's
11
+ * rows, and carried to the recheck stage on `evidenceUnsupported`.
12
+ * Emits: N/A.
13
+ *
14
+ * Two clauses, chosen by what the verdict holds (design § 7):
15
+ *
16
+ * - a block that matched no submission, and a flagged value that sat only in
17
+ * such a block — its contents were checked as prose: keep a script, show it
18
+ * exactly as submitted, or say the code shown is not the one submitted, and
19
+ * fix the values in the prose;
20
+ * - a block that matched a call, with values flagged in the prose — the
21
+ * script was not checked: keep it; the listed values were in the prose.
22
+ *
23
+ * The parenthesis carries the call's ACTUAL label in its words
24
+ * (`label.ts` · `labelWords`) — never a fixed "executed", never an exit
25
+ * number the record does not hold.
26
+ *
27
+ * WHAT IT CANNOT DO, stated: deleting an unmatched block removes its
28
+ * candidates and the `script-unmatched` reason, so a draft without the script
29
+ * can pass the check. No sentence makes a model keep a script; mandatory
30
+ * display comes from `.scriptTravelsWithTheAnswer()`, which needs no
31
+ * cooperation from the model.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * scriptRecoveryClause({ blocks: [{ block: 1, label: 'completed-with-failure', exitCode: 7,
36
+ * toolCallId: 'c1', tool: 'run_code' }], earlierTurnRows: 0, regionsDropped: 0 },
37
+ * [{ value: '1200', shape: 'number', region: 'prose' }], ['run_code']);
38
+ * // 'The script shown is the one submitted to `run_code` on call c1 (completed with failure,
39
+ * // exit 7) and was not checked. Keep it. The listed values were in the prose around it.'
40
+ * ```
41
+ */
42
+ import { labelWords } from './label.js';
43
+ /** `run_code`, `` `a` or `b` `` — the tools named, quoted. */
44
+ function toolsNamed(tools) {
45
+ const quoted = tools.map((t) => `\`${t}\``);
46
+ if (quoted.length === 0)
47
+ return 'a code-running tool';
48
+ if (quoted.length === 1)
49
+ return quoted[0];
50
+ return `${quoted.slice(0, -1).join(', ')} or ${quoted[quoted.length - 1]}`;
51
+ }
52
+ /**
53
+ * The clause(s) for one rejected draft — `''` when the verdict calls for
54
+ * none (no fenced block, or no flagged value the blocks bear on).
55
+ * `toolsThisTurn` names the code-running tools this turn's calls submitted
56
+ * to, in first-call order.
57
+ */
58
+ export function scriptRecoveryClause(scripts, unsupported, toolsThisTurn) {
59
+ const clauses = [];
60
+ const unmatched = scripts.blocks.some((b) => b.label === 'unmatched');
61
+ if (unmatched && unsupported.some((v) => v.region === 'code')) {
62
+ clauses.push(`The fenced code in the rejected draft matched no submission to ${toolsNamed(toolsThisTurn)} recorded this turn, so its contents were checked as prose. Keep a script in the ` +
63
+ 'answer: show the program exactly as it was submitted on that call, byte for byte, or ' +
64
+ 'say that the code shown is not the one that was submitted. Fix the values in the prose.');
65
+ }
66
+ const matched = scripts.blocks.flatMap((b) => (b.label === 'unmatched' ? [] : [b]));
67
+ if (matched.length > 0 && unsupported.some((v) => v.region === 'prose')) {
68
+ const calls = matched.map((b) => `to \`${b.tool}\` on call ${b.toolCallId} (${labelWords(b.label, b.exitCode)})`);
69
+ clauses.push(matched.length === 1
70
+ ? `The script shown is the one submitted ${calls[0]} and was not checked. Keep it. The ` +
71
+ 'listed values were in the prose around it.'
72
+ : `The scripts shown are the ones submitted ${calls.join(' and ')} and were not checked. ` +
73
+ 'Keep them. The listed values were in the prose around them.');
74
+ }
75
+ return clauses.join(' ');
76
+ }
77
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../../../../src/core/agent/scripts/recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,8DAA8D;AAC9D,SAAS,UAAU,CAAC,KAAwB;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qBAAqB,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAW,CAAC;IACpD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAuB,EACvB,WAAoC,EACpC,aAAgC;IAEhC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;IACtE,IAAI,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,CACV,kEAAkE,UAAU,CAC1E,aAAa,CACd,mFAAmF;YAClF,uFAAuF;YACvF,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CACV,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,yCAAyC,KAAK,CAAC,CAAC,CAAC,qCAAqC;gBACpF,4CAA4C;YAChD,CAAC,CAAC,4CAA4C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB;gBACtF,6DAA6D,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * scripts/rows — the `script` row: built from one call, filed through ONE
3
+ * writer, read back per turn, and bounded.
4
+ *
5
+ * Pattern: Map + one writer (the `findings/ledger.ts` · `recordFindings`
6
+ * twin for this kind): `scriptRowFor` builds, `recordScriptRow` is
7
+ * the only thing that writes a `script` row, `scriptRowsOfTurn` is
8
+ * the one reader the match and the attachment share.
9
+ * Role: core/ layer leaf. Called by the dispatch loop (`stages/toolCalls.ts`)
10
+ * at each place a call of a declared code-running tool pauses or
11
+ * settles; read by the Route decider's judge and the final branch.
12
+ * Emits: N/A — the row is state; the runner's facts already rode
13
+ * `agentfootprint.tools.code_run`, which never carries the code.
14
+ *
15
+ * ## One unit, and the bounds (design § 4.4)
16
+ *
17
+ * UTF-8 payload bytes of the program, measured at record time
18
+ * (`lib/utf8.ts` · `utf8Length`) — never characters: 32,768 characters of a
19
+ * 3-byte character are 98,304 bytes.
20
+ *
21
+ * - **Per script.** A program over {@link MAX_SCRIPT_BYTES} keeps a row with
22
+ * `bytes`, `lines` and the outcome, and no `text`: it can be neither matched
23
+ * nor attached.
24
+ * - **Per turn.** {@link MAX_SCRIPT_ROWS} calls keep a row; a further call of
25
+ * the turn files none and is counted in `AgentState.scriptsDropped`.
26
+ * - **Eligible text.** A row's `text` lives for its own turn: the seed stage's
27
+ * restore drops it from every earlier turn's row (`withoutEarlierScriptText`),
28
+ * so the text the ledger holds is at most 16 × 32,768 bytes = 512 KiB before
29
+ * serialization, whatever the conversation's length. That bounds eligible
30
+ * text only — prior turns' metadata, history and the answers that carried an
31
+ * attached script are outside it.
32
+ *
33
+ * ## Append only, last wins
34
+ *
35
+ * A call PAUSED before it settles (a check-in, a consent, an ask, a tool that
36
+ * asked a person) files a `submitted` row at the pause, WITHOUT its text: the
37
+ * settled row filed when the call resumes is the one that carries it, so a
38
+ * program is never held twice. A reader takes the LAST row per call of the
39
+ * turn (the ledger's own law). A row that never settles stays `submitted`.
40
+ */
41
+ import type { ToolScript } from '../../../tools/script.js';
42
+ import type { FindingsLedger } from '../findings/types.js';
43
+ import { type CallSettlement, type RunnerOutcome } from './label.js';
44
+ import type { ScriptRow } from './types.js';
45
+ /** A program longer than this (UTF-8 bytes) keeps a row with no text. Design § 4.4. */
46
+ export declare const MAX_SCRIPT_BYTES = 32768;
47
+ /** Calls per turn that keep a row; the rest are counted. Design § 4.4. */
48
+ export declare const MAX_SCRIPT_ROWS = 16;
49
+ /** Lines of a program: LF-separated, `0` for an empty one. */
50
+ export declare function linesOf(program: string): number;
51
+ /** One call of a declared code-running tool, as the dispatch loop knows it. */
52
+ export interface ScriptCall {
53
+ readonly script: ToolScript;
54
+ /** The name the model called. */
55
+ readonly tool: string;
56
+ readonly toolCallId: string;
57
+ readonly iteration: number;
58
+ /** `AgentState.turnNumber`. */
59
+ readonly turn: number;
60
+ /**
61
+ * The declared argument's VALUE as the model proposed it — read once, as
62
+ * the call arrived, before any before-tool rule ran (`programIn`). A string
63
+ * is immutable: no code that runs later can change what was captured.
64
+ */
65
+ readonly proposed: unknown;
66
+ /**
67
+ * The declared argument's value as handed to `execute` — read once, just
68
+ * before the tool ran, after every rule. Absent: the call never got there,
69
+ * and the proposal stands.
70
+ */
71
+ readonly submitted?: unknown;
72
+ readonly settlement: CallSettlement;
73
+ /** The runner's facts, when the tool filed them. */
74
+ readonly facts?: RunnerOutcome;
75
+ /** The tool's own ceiling replaced the delivered result. */
76
+ readonly withheld?: boolean;
77
+ /** A pause: the row is filed without its text (the settled row carries it). */
78
+ readonly paused?: boolean;
79
+ }
80
+ /**
81
+ * The declared argument's value in `args` — the one read a call's program is
82
+ * captured with. Read it at the boundary it names (as the call arrives; just
83
+ * before `execute`) and keep the value: never the arguments object, which app
84
+ * code may edit after it was handed over.
85
+ */
86
+ export declare function programIn(script: ToolScript, args: Readonly<Record<string, unknown>> | undefined): unknown;
87
+ /** A row before the writer gives it its dispatch identity. */
88
+ export type ScriptRowDraft = Omit<ScriptRow, 'dispatch'>;
89
+ /**
90
+ * The row for one call, or `undefined` when the call carried no program — the
91
+ * declared argument is not a string (an argument check refuses such a call;
92
+ * there is nothing to record as "the program submitted").
93
+ */
94
+ export declare function scriptRowFor(call: ScriptCall): ScriptRowDraft | undefined;
95
+ /** The scope surface the writer needs. Structurally a `TypedScope<AgentState>`. */
96
+ export interface ScriptScope {
97
+ findingsLedger?: FindingsLedger;
98
+ scriptsDropped?: number;
99
+ }
100
+ /**
101
+ * THE ONE WRITER of a `script` row, and the one place a call gets its
102
+ * DISPATCH identity: the 1-based order of the actual dispatch within its turn.
103
+ * A call is a dispatch, never a provider id: a later call that reuses an id is
104
+ * a new dispatch. `options.dispatch` names a dispatch that already has a row
105
+ * (a paused call, settling): its row joins that dispatch.
106
+ *
107
+ * Appended, unless the turn already holds {@link MAX_SCRIPT_ROWS} other
108
+ * dispatches — then the call files nothing and `scriptsDropped` counts it
109
+ * (value-conditional: absent until a call is dropped). A dispatch that already
110
+ * has a row is never dropped, and a PAUSE is never counted (`paused`): its call
111
+ * is counted once, when it settles. Returns the dispatch the row was filed
112
+ * under, `undefined` when it was dropped. Synchronous: one read, one write, no
113
+ * await between.
114
+ */
115
+ export declare function recordScriptRow(scope: ScriptScope, draft: ScriptRowDraft, options?: {
116
+ readonly paused?: boolean;
117
+ readonly dispatch?: number;
118
+ }): number | undefined;
119
+ /** This turn's calls — the LAST row of each dispatch, in the order those rows were filed. */
120
+ export interface TurnScripts {
121
+ readonly current: readonly ScriptRow[];
122
+ /** Calls of EARLIER turns on the ledger: counted, never compared. */
123
+ readonly earlier: number;
124
+ }
125
+ /**
126
+ * The one reader of a turn's script rows: the last row per DISPATCH wins, and
127
+ * a dispatch sits where its last row was filed — execution order, so a call
128
+ * that settles after a later one ran is read after it. Earlier turns counted.
129
+ */
130
+ export declare function scriptRowsOfTurn(ledger: readonly unknown[] | undefined, turn: number): TurnScripts;
131
+ /**
132
+ * The restore door's half of the bound (seed): every `script` row of a turn
133
+ * BEFORE `turn` keeps its facts — ids, counts, outcome — and loses its `text`.
134
+ * The same reference when there is nothing to drop, so a ledger without
135
+ * script text is restored byte for byte.
136
+ */
137
+ export declare function withoutEarlierScriptText<T>(ledger: readonly T[], turn: number): readonly T[];
138
+ /**
139
+ * Whether a value read from a stored checkpoint is a `script` row this library
140
+ * could have written — the checkpoint door's arm (`core/runCheckpoint.ts`).
141
+ * An older runtime refuses a checkpoint carrying one.
142
+ */
143
+ export declare function scriptRowIsWellFormed(r: Readonly<Record<string, unknown>>): boolean;