@inflexa-ai/harness 0.45.0 → 0.46.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 (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -1,22 +1,24 @@
1
- import { jsonSchema, tool as aiTool } from "ai";
1
+ import { errorMessageOf } from "../lib/thrown.js";
2
+ import { textOf } from "../lib/unknown-text.js";
3
+ import { ok } from "neverthrow";
2
4
  import { z } from "zod";
3
5
  import { PLANNABLE_AGENT_CATALOG } from "../agents/sandbox-catalog.js";
6
+ import { SANDBOX_AGENT_META } from "../agents/sandbox/index.js";
4
7
  import { forSubAgent } from "../auth/types.js";
5
8
  import { DATA_PROFILE_ORIENTATION_MAX_CHARS, buildDataProfileOrientation } from "../app/data-profile-orientation.js";
6
- import { createNoopUsageRecorder } from "../billing/noop-usage-recorder.js";
7
9
  import { createNoopLogger } from "../lib/console-logger.js";
8
- import { unwrapOrThrow } from "../lib/result.js";
9
- import { countChatTokens } from "../loop/metrics.js";
10
- import { accountForChatCall } from "../loop/run-agent.js";
10
+ import { toThrowable, unwrapOrThrow } from "../lib/result.js";
11
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
12
+ import { runLoop } from "../loop/run-loop.js";
11
13
  import { packagesSection, resourceEstimationSection } from "../prompts/planner.js";
12
14
  import { effectiveDeadlineMs } from "../providers/types.js";
13
15
  import { formatQuery, parseQuery } from "../sandbox/package-identity.js";
14
16
  import { loadDataProfileStatus } from "../state/index.js";
17
+ import { defineTool } from "./define-tool.js";
15
18
  export const AD_HOC_ROUTER_AGENT_ID = "adhoc-router";
16
19
  export const AD_HOC_ROUTER_TIMEOUT_MS = 10_000;
17
20
  export const AD_HOC_FALLBACK_AGENT_ID = "scientific-executor";
18
- /** Must differ from a loop step name such as `llm-0`, since both share the usage-record key space. */
19
- const AD_HOC_ROUTE_CALL_NAME = "adhoc-route";
21
+ const SUBMIT_ROUTE_TOOL_ID = "submit_route";
20
22
  const resourcesSchema = z.object({
21
23
  cpu: z.number().positive(),
22
24
  memoryGb: z.number().positive(),
@@ -24,6 +26,7 @@ const resourcesSchema = z.object({
24
26
  });
25
27
  const routeSchema = z.object({
26
28
  agentId: z.string().optional().describe("The id of one specialist from the eligible catalog, copied exactly."),
29
+ capability: z.string().optional().describe("The one capability phrase of that specialist which this request uses, copied exactly from its capabilities."),
27
30
  resources: resourcesSchema
28
31
  .optional()
29
32
  .describe("The sandbox resources of the step, inside the stated ranges. Omit to take the defaults; a value outside the ranges is replaced by the defaults."),
@@ -68,7 +71,7 @@ async function profileOrientation(pool, analysisId, logger) {
68
71
  return buildDataProfileOrientation(status.result, analysisId, DATA_PROFILE_ORIENTATION_MAX_CHARS);
69
72
  }
70
73
  catch (error) {
71
- logger.warn("could not load data profile for ad hoc routing", { error: error instanceof Error ? error.message : String(error) });
74
+ logger.warn("could not load data profile for ad hoc routing", { error: errorMessageOf(error) ?? textOf(error) });
72
75
  return "The persisted data profile could not be loaded; route from the request alone.";
73
76
  }
74
77
  }
@@ -96,7 +99,7 @@ async function routePackages(raw, resolve, logger) {
96
99
  const seen = new Set();
97
100
  for (const element of entries) {
98
101
  if (typeof element !== "string") {
99
- droppedPackages.push({ entry: String(element), reason: "unparsable" });
102
+ droppedPackages.push({ entry: textOf(element), reason: "unparsable" });
100
103
  continue;
101
104
  }
102
105
  const entry = element.trim();
@@ -121,7 +124,7 @@ async function routePackages(raw, resolve, logger) {
121
124
  catch (error) {
122
125
  // A resolution that throws is the same condition as an inventory that
123
126
  // reports itself unavailable: it says nothing about the packages.
124
- logger.warn("ad hoc package resolution failed", { error: error instanceof Error ? error.message : String(error) });
127
+ logger.warn("ad hoc package resolution failed", { error: errorMessageOf(error) ?? textOf(error) });
125
128
  rows = null;
126
129
  }
127
130
  if (rows === null)
@@ -152,13 +155,15 @@ async function routePackages(raw, resolve, logger) {
152
155
  }
153
156
  return { packages, droppedPackages };
154
157
  }
158
+ /** The one tool of the router. The route is the input of its call, thus the call itself records nothing. */
155
159
  function routeTool() {
156
- return {
157
- submit_route: aiTool({
158
- description: "Submit the single specialist, the resource recommendation, and the packages of the step. This is the only valid response.",
159
- inputSchema: jsonSchema(z.toJSONSchema(routeSchema)),
160
- }),
161
- };
160
+ return defineTool({
161
+ id: SUBMIT_ROUTE_TOOL_ID,
162
+ description: "Submit the single specialist, the resource recommendation, and the packages of the step. This is the only valid response.",
163
+ inputSchema: routeSchema,
164
+ describeCall: "none",
165
+ execute: () => Promise.resolve(ok({ recorded: true })),
166
+ });
162
167
  }
163
168
  export async function routeAdHocRequest(deps, input) {
164
169
  const logger = (deps.logger ?? createNoopLogger()).named("adhoc-router").with({ analysisId: input.analysisId, model: deps.model });
@@ -166,14 +171,15 @@ export async function routeAdHocRequest(deps, input) {
166
171
  const catalog = PLANNABLE_AGENT_CATALOG.map((agent) => `- ${agent.id}: capabilities [${agent.capabilities.join(", ")}]; suitable for [${agent.suitableFor.join(", ")}]`).join("\n");
167
172
  const orientation = await profileOrientation(deps.pool, input.analysisId, logger);
168
173
  const controller = new AbortController();
174
+ // oxlint-disable-next-line eslint-js/no-restricted-syntax -- a guard, not a wait: it aborts the routing controller at the deadline while the provider call runs, and the finally clears it.
169
175
  const timer = setTimeout(() => controller.abort(new Error("ad hoc routing timed out")), effectiveDeadlineMs(deps.provider, AD_HOC_ROUTER_TIMEOUT_MS, deps.timeoutMs));
170
176
  const signal = AbortSignal.any([input.signal, controller.signal]);
171
177
  let raw;
172
178
  let failure;
173
179
  try {
174
- const response = unwrapOrThrow(await deps.provider
175
- .chat({
176
- system: [
180
+ const router = {
181
+ id: AD_HOC_ROUTER_AGENT_ID,
182
+ systemPrompt: [
177
183
  "Select exactly one specialist for a targeted one-step analysis, estimate its sandbox resources, and name the packages that the step imports.",
178
184
  "Choose only from the supplied catalog. Do not create a plan, reject the request, or select scientific-executor.",
179
185
  resourceEstimationSection(deps.resourcePolicy),
@@ -182,45 +188,54 @@ export async function routeAdHocRequest(deps, input) {
182
188
  "You hold no package census. For a name that both ecosystems hold, the language of the specialist you select and the wording of the request decide the track.",
183
189
  "Respond only by calling submit_route.",
184
190
  ].join("\n\n"),
185
- messages: [
186
- {
187
- role: "user",
188
- content: `Request:\n${input.request}\n\nPersisted data-profile orientation:\n${orientation}\n\nEligible specialists:\n${catalog}`,
189
- },
190
- ],
191
- // No forced tool choice: some Claude models reject it with a
192
- // 400. A reply without the call falls back below as `malformed`.
193
- tools: routeTool(),
194
- }, routerSession, signal)
195
- .map(countChatTokens(AD_HOC_ROUTER_AGENT_ID)));
196
- // A failed call throws at unwrapOrThrow above, so no usage is recorded.
197
- accountForChatCall(response, {
198
- session: routerSession,
199
- agentId: AD_HOC_ROUTER_AGENT_ID,
200
- callPath: routerSession.provenance.callPath,
201
- stepName: AD_HOC_ROUTE_CALL_NAME,
202
- ...(input.invocationId === undefined ? {} : { invocationId: input.invocationId }),
203
- usageRecorder: deps.usageRecorder ?? createNoopUsageRecorder(),
204
- logger,
205
- rollups: input.turnUsage === undefined ? [] : [input.turnUsage],
191
+ model: deps.model,
192
+ tools: [routeTool()],
193
+ // One request: the route is the input of the call, thus no second request is due.
194
+ maxIterations: 1,
195
+ };
196
+ const run = await runLoop(router, [
197
+ {
198
+ role: "user",
199
+ content: `Request:\n${input.request}\n\nPersisted data-profile orientation:\n${orientation}\n\nEligible specialists:\n${catalog}`,
200
+ },
201
+ ], routerSession, {
202
+ provider: deps.provider,
203
+ signal,
204
+ emit: () => undefined,
205
+ // One request reads no cache back, thus a cache write is a cost with no return.
206
+ promptCache: "off",
207
+ logger: deps.logger,
208
+ usageRecorder: deps.usageRecorder,
209
+ // The router call folds its usage into the turn total, and the turn root reports it.
210
+ turnUsage: input.turnUsage ?? {},
211
+ invocationId: input.invocationId,
212
+ stopWhen: (steps) => steps.some((step) => step.calls.some((call) => call.toolName === SUBMIT_ROUTE_TOOL_ID)),
206
213
  });
207
- const call = Array.isArray(response.message.content)
208
- ? response.message.content.find((part) => part.type === "tool-call" && part.toolName === "submit_route")
209
- : undefined;
210
- raw = call?.input;
211
- if (!call)
212
- failure = "malformed";
214
+ if (run.finish.reason === "aborted") {
215
+ if (input.signal.aborted)
216
+ throw toThrowable(input.signal.reason);
217
+ failure = "timeout";
218
+ logger.warn("ad hoc route fell back", { failure });
219
+ }
220
+ else {
221
+ // No forced tool choice: some Claude models reject it with a 400. A reply
222
+ // without the call falls back below as `malformed`.
223
+ const call = run.steps.flatMap((step) => step.calls).find((entry) => entry.toolName === SUBMIT_ROUTE_TOOL_ID);
224
+ raw = call?.input;
225
+ if (!call)
226
+ failure = "malformed";
227
+ }
213
228
  }
214
229
  catch (error) {
215
230
  if (input.signal.aborted)
216
231
  throw error;
217
- failure = controller.signal.aborted && !input.signal.aborted ? "timeout" : "provider_error";
218
- logger.warn("ad hoc route fell back", { failure, error: error instanceof Error ? error.message : String(error) });
232
+ failure = controller.signal.aborted ? "timeout" : "provider_error";
233
+ logger.warn("ad hoc route fell back", { failure, error: errorMessageOf(error) ?? textOf(error) });
219
234
  }
220
235
  finally {
221
236
  clearTimeout(timer);
222
237
  }
223
- const candidate = raw !== null && typeof raw === "object" ? raw : {};
238
+ const candidate = parseUnknownRecord(raw) ?? {};
224
239
  const requestedAgent = typeof candidate.agentId === "string" ? candidate.agentId : undefined;
225
240
  const validAgent = requestedAgent !== undefined && PLANNABLE_AGENT_CATALOG.some((agent) => agent.id === requestedAgent);
226
241
  const agentId = validAgent ? requestedAgent : AD_HOC_FALLBACK_AGENT_ID;
@@ -241,6 +256,20 @@ export async function routeAdHocRequest(deps, input) {
241
256
  // never becomes a `fallbackClass`, because that class describes the route
242
257
  // as a whole and a step agent reads it as "the routing itself fell back".
243
258
  const { packages, droppedPackages } = await routePackages(candidate.packages, deps.resolvePackages, logger);
244
- logger.info("ad hoc route selected", { agentId, resources, rationale, failure, packages, droppedPackages });
245
- return { agentId, resources, rationale, packages, droppedPackages, ...(failure ? { fallbackClass: failure } : {}) };
259
+ // Kept only when the chosen agent really advertises it. A phrase that no agent advertises
260
+ // resolves no data requirement anyway, and carrying it would put a fabricated capability into
261
+ // the step and into the run record. An absent phrase is a normal answer, not a fallback class:
262
+ // most requests use a capability that declares nothing.
263
+ const requestedCapability = typeof candidate.capability === "string" ? candidate.capability.trim() : "";
264
+ const capability = (SANDBOX_AGENT_META[agentId]?.capabilities ?? []).includes(requestedCapability) ? requestedCapability : undefined;
265
+ logger.info("ad hoc route selected", { agentId, resources, rationale, failure, packages, droppedPackages, capability });
266
+ return {
267
+ agentId,
268
+ resources,
269
+ rationale,
270
+ packages,
271
+ droppedPackages,
272
+ capability,
273
+ fallbackClass: failure,
274
+ };
246
275
  }
@@ -2,3 +2,10 @@
2
2
  export declare function adHocPlanId(analysisId: string, invocationId: string): string;
3
3
  /** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
4
4
  export declare function adHocRunId(analysisId: string, invocationId: string): string;
5
+ /**
6
+ * The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
7
+ * gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
8
+ */
9
+ export declare function callRunId(callKey: string): string;
10
+ /** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
11
+ export declare function durableCallKey(toolCallId: string): string | undefined;
@@ -1,7 +1,10 @@
1
+ import { DBOS } from "@dbos-inc/dbos-sdk";
1
2
  import { createHash } from "node:crypto";
2
3
  const TOOL_ID = "execute_analysis";
3
- function digest(analysisId, invocationId) {
4
- return createHash("sha256").update(`${TOOL_ID}\0${analysisId}\0${invocationId}`, "utf8").digest();
4
+ function digest(...parts) {
5
+ return createHash("sha256")
6
+ .update([TOOL_ID, ...parts].join("\0"), "utf8")
7
+ .digest();
5
8
  }
6
9
  /** Deterministic internal plan id in the existing persistence shape. */
7
10
  export function adHocPlanId(analysisId, invocationId) {
@@ -9,9 +12,30 @@ export function adHocPlanId(analysisId, invocationId) {
9
12
  }
10
13
  /** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
11
14
  export function adHocRunId(analysisId, invocationId) {
12
- const bytes = Buffer.from(digest(analysisId, invocationId).subarray(4, 20));
13
- bytes[6] = (bytes[6] & 0x0f) | 0x50;
14
- bytes[8] = (bytes[8] & 0x3f) | 0x80;
15
+ return uuidOf(digest(analysisId, invocationId));
16
+ }
17
+ /**
18
+ * The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
19
+ * gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
20
+ */
21
+ export function callRunId(callKey) {
22
+ return uuidOf(digest("plan", callKey));
23
+ }
24
+ /** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
25
+ export function durableCallKey(toolCallId) {
26
+ const workflowId = DBOS.workflowID;
27
+ return workflowId === undefined ? undefined : `${workflowId}:${toolCallId}`;
28
+ }
29
+ function uuidOf(hash) {
30
+ const bytes = Buffer.from(hash.subarray(4, 20));
31
+ const versionByte = bytes[6];
32
+ if (versionByte === undefined)
33
+ throw new Error("the digest is shorter than the UUID layout");
34
+ bytes[6] = (versionByte & 0x0f) | 0x50;
35
+ const variantByte = bytes[8];
36
+ if (variantByte === undefined)
37
+ throw new Error("the digest is shorter than the UUID layout");
38
+ bytes[8] = (variantByte & 0x3f) | 0x80;
15
39
  const hex = bytes.toString("hex");
16
40
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
17
41
  }
@@ -1,15 +1,13 @@
1
1
  /**
2
- * The tool-approval seam contract: the request a conversation tool pauses on,
3
- * the decision the user returns, and the deny-by-default realization shipped for
4
- * hosts that wire no interactive surface.
2
+ * The tool-approval contract: the request that the approval hook of a tool gives,
3
+ * and the decision that the user returns.
5
4
  *
6
- * The seam is generic — nothing here names a tool or a domain. A tool describes
5
+ * The contract is generic — nothing here names a tool or a domain. A tool describes
7
6
  * the concrete action it needs approved (`AskRequest`); a surface renders it, the
8
- * user decides, and the decision comes back as an `AskApproval` on approval or an
9
- * `AskRejectedError` throw on denial.
7
+ * user decides, and the loop runs the call on an approval or denies it.
10
8
  *
11
- * These are standalone types so `define-tool.ts` can type-import them into
12
- * `ToolContext` without an import cycle back through the tools layer.
9
+ * These are standalone types so `define-tool.ts` can type-import them without an
10
+ * import cycle back through the tools layer.
13
11
  */
14
12
  /**
15
13
  * The human-facing content a surface renders to describe the exact action being
@@ -17,7 +15,7 @@
17
15
  * they saw is precisely what is granted, nothing broader. No tool- or
18
16
  * domain-specific fields: the harness stays agnostic to what is being approved.
19
17
  */
20
- export interface AskRequest {
18
+ export type AskRequest = {
21
19
  readonly title: string;
22
20
  readonly command: string;
23
21
  readonly detail?: string;
@@ -29,15 +27,12 @@ export interface AskRequest {
29
27
  * field, and the surface never renders it. Absent, the grant keys on `command`.
30
28
  */
31
29
  readonly grantKey?: string;
32
- }
30
+ };
33
31
  /**
34
32
  * A user's decision on an approval request — three distinct outcomes, never a
35
33
  * boolean. `once` approves the single pending invocation; `always` approves it
36
34
  * AND records a standing grant for the matched action; `reject` denies and MAY
37
35
  * carry model-facing feedback.
38
- *
39
- * This full three-variant union is the wire type the outward `answer` API takes;
40
- * `ctx.ask` itself resolves only with the `AskApproval` subset (denial throws).
41
36
  */
42
37
  export type AskReply = {
43
38
  readonly kind: "once";
@@ -47,42 +42,3 @@ export type AskReply = {
47
42
  readonly kind: "reject";
48
43
  readonly feedback?: string;
49
44
  };
50
- /**
51
- * The subset of `AskReply` `ctx.ask` may resolve with. Denial never returns — it
52
- * throws `AskRejectedError` — so a resolved approval is only ever `once` or
53
- * `always`, and a caller never has to inspect for a reject variant.
54
- */
55
- export type AskApproval = Exclude<AskReply, {
56
- kind: "reject";
57
- }>;
58
- /**
59
- * The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
60
- * model-facing feedback.
61
- *
62
- * Denial is a throw rather than a returned reject variant so a tool never has to
63
- * inspect the reply to learn it was denied: only asks throw, so the throw itself
64
- * is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
65
- * the caught error to an execution-denied tool result and stops the turn.
66
- */
67
- export declare class AskRejectedError extends Error {
68
- readonly feedback?: string;
69
- constructor(feedback?: string);
70
- }
71
- /**
72
- * The user-approval seam. `ask` pauses on an approval request and resolves with
73
- * the approval decision, or throws `AskRejectedError` when the user denies.
74
- * Realizations are wired by the embedder; an unwired host resolves to
75
- * `UnavailableAsk`.
76
- */
77
- export interface Ask {
78
- ask(request: AskRequest): Promise<AskApproval>;
79
- }
80
- /**
81
- * Deny-by-default realization — the shipped `Ask` for hosts that wire no
82
- * interactive surface (workflow contexts, headless embedders). Every request is
83
- * denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
84
- * rather than left waiting on a surface that will never respond.
85
- */
86
- export declare class UnavailableAsk implements Ask {
87
- ask(_request: AskRequest): Promise<AskApproval>;
88
- }
@@ -1,41 +1,12 @@
1
1
  /**
2
- * The tool-approval seam contract: the request a conversation tool pauses on,
3
- * the decision the user returns, and the deny-by-default realization shipped for
4
- * hosts that wire no interactive surface.
2
+ * The tool-approval contract: the request that the approval hook of a tool gives,
3
+ * and the decision that the user returns.
5
4
  *
6
- * The seam is generic — nothing here names a tool or a domain. A tool describes
5
+ * The contract is generic — nothing here names a tool or a domain. A tool describes
7
6
  * the concrete action it needs approved (`AskRequest`); a surface renders it, the
8
- * user decides, and the decision comes back as an `AskApproval` on approval or an
9
- * `AskRejectedError` throw on denial.
7
+ * user decides, and the loop runs the call on an approval or denies it.
10
8
  *
11
- * These are standalone types so `define-tool.ts` can type-import them into
12
- * `ToolContext` without an import cycle back through the tools layer.
9
+ * These are standalone types so `define-tool.ts` can type-import them without an
10
+ * import cycle back through the tools layer.
13
11
  */
14
- /**
15
- * The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
16
- * model-facing feedback.
17
- *
18
- * Denial is a throw rather than a returned reject variant so a tool never has to
19
- * inspect the reply to learn it was denied: only asks throw, so the throw itself
20
- * is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
21
- * the caught error to an execution-denied tool result and stops the turn.
22
- */
23
- export class AskRejectedError extends Error {
24
- feedback;
25
- constructor(feedback) {
26
- super(feedback ? `approval rejected: ${feedback}` : "approval rejected");
27
- this.name = "AskRejectedError";
28
- this.feedback = feedback;
29
- }
30
- }
31
- /**
32
- * Deny-by-default realization — the shipped `Ask` for hosts that wire no
33
- * interactive surface (workflow contexts, headless embedders). Every request is
34
- * denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
35
- * rather than left waiting on a surface that will never respond.
36
- */
37
- export class UnavailableAsk {
38
- async ask(_request) {
39
- throw new AskRejectedError("approval is unavailable in this environment");
40
- }
41
- }
12
+ export {};
@@ -1,48 +1,47 @@
1
1
  /**
2
- * The poll-based tool-approval gateway — the constructed `Ask` seam realization
3
- * an embedder wires over its Postgres pool, plus the outward `answer` / `pending`
4
- * API it drives and the boot-time `sweepExpired`.
5
- *
6
- * `ask` is the per-turn seam an embedder binds: a conversation tool's `ctx.ask`
7
- * pauses on it. The database is the single source of truth for ask state — `ask`
8
- * inserts a `pending` ledger row, emits the `data-ask` part, and polls that row to
9
- * a terminal status; there is no in-memory resolver map. `answer` is one guarded
10
- * write. See the poll site below for why.
2
+ * The tool-approval gateway: the ask ledger over the Postgres pool of an
3
+ * embedder. A turn workflow raises an ask under a known id and waits for the
4
+ * answer itself. `answer` is one guarded write, and `pending` and the boot-time
5
+ * `sweepExpired` read and expire the ledger.
11
6
  */
12
7
  import type { Pool } from "pg";
13
- import type { EmitFn } from "../../loop/types.js";
14
- import { type AskApproval, type AskReply, type AskRequest } from "./contract.js";
15
- import { type AnswerOutcome, type PendingAsk } from "./queries.js";
8
+ import type { AskPart } from "../../contracts/chat-parts.js";
9
+ import type { AskReply, AskRequest } from "./contract.js";
10
+ import { type AnswerOutcome, type AskStatus, type PendingAsk } from "./queries.js";
16
11
  export type { AnswerOutcome, PendingAsk } from "./queries.js";
17
12
  /** Construction deps: the harness application pool the ledger lives in. */
18
- export interface AskGatewayDeps {
13
+ export type AskGatewayDeps = {
19
14
  readonly pool: Pool;
20
- }
21
- /**
22
- * Per-turn context an embedder binds into the `Ask` seam. It scopes the ask to an
23
- * analysis/thread and to one user, carries the turn's abort `signal`, and supplies
24
- * the `emit` sink the `data-ask` part flows through.
25
- */
26
- export interface AskContext {
15
+ };
16
+ /** Who an ask goes to and where it belongs. */
17
+ export type AskScope = {
27
18
  readonly analysisId: string;
28
19
  /** The opaque identity of the person the ask goes to. The harness never reads it. */
29
20
  readonly userId: string;
30
21
  readonly threadId?: string;
31
- readonly signal: AbortSignal;
32
- readonly emit: EmitFn;
33
- }
34
- /** The gateway surface: the per-turn seam plus the outward embedder-driven API. */
35
- export interface AskGateway {
36
- ask(request: AskRequest, ctx: AskContext): Promise<AskApproval>;
22
+ };
23
+ /** The gateway surface: the raise of a turn and the outward embedder-driven API. */
24
+ export type AskGateway = {
25
+ /**
26
+ * Raise an ask under a known id, for a turn workflow that waits for the answer itself. A standing grant settles
27
+ * it at once as `resolved`. Else the row waits as `pending`. A second raise of the same id changes nothing.
28
+ */
29
+ raise(id: string, request: AskRequest, scope: AskScope): Promise<"granted" | "pending">;
30
+ /** Mark a pending ask `expired`. */
31
+ expire(id: string): Promise<void>;
32
+ /** Mark a pending ask `aborted`. */
33
+ abort(id: string): Promise<void>;
37
34
  answer(id: string, reply: AskReply): Promise<AnswerOutcome>;
38
35
  pending(): Promise<PendingAsk[]>;
39
36
  /** Expire pending asks older than `maxAgeMs` (default {@link DEFAULT_SWEEP_MAX_AGE_MS}). */
40
37
  sweepExpired(maxAgeMs?: number): Promise<number>;
41
- }
38
+ };
42
39
  /**
43
40
  * Pending rows older than this are treated as orphans of a dead process. Far
44
41
  * beyond any plausible live turn, so a boot sweep during a rolling deployment
45
- * cannot expire an ask another pod is still polling.
42
+ * cannot expire an ask another pod is still waiting on.
46
43
  */
47
44
  export declare const DEFAULT_SWEEP_MAX_AGE_MS: number;
48
45
  export declare function createAskGateway(deps: AskGatewayDeps): AskGateway;
46
+ /** The `data-ask` part of an ask in one status. Each status of one ask reconciles under the same id. */
47
+ export declare function askPartOf(id: string, request: AskRequest, status: AskStatus, reply?: AskReply["kind"]): AskPart;