@inflexa-ai/harness 0.45.1 → 0.46.2

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 (790) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +9 -3
  3. package/dist/agents/conversation-agent.js +34 -33
  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 +12 -14
  9. package/dist/agents/sandbox/shared.js +18 -12
  10. package/dist/agents/sandbox/types.d.ts +4 -4
  11. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  12. package/dist/agents/sandbox/validate-skills.js +3 -1
  13. package/dist/agents/sandbox-catalog.d.ts +2 -2
  14. package/dist/agents/sandbox-catalog.js +3 -3
  15. package/dist/agents/system-prompt.d.ts +2 -2
  16. package/dist/app/chat-turn-workflow.d.ts +114 -0
  17. package/dist/app/chat-turn-workflow.js +306 -0
  18. package/dist/app/chat-turn.d.ts +85 -57
  19. package/dist/app/chat-turn.js +123 -100
  20. package/dist/app/data-profile-orientation.js +10 -8
  21. package/dist/app/data-profile-view.d.ts +4 -4
  22. package/dist/app/data-profile-view.js +9 -8
  23. package/dist/app/in-process-turn.d.ts +42 -0
  24. package/dist/app/in-process-turn.js +139 -0
  25. package/dist/app/message-assembly.d.ts +10 -4
  26. package/dist/app/message-assembly.js +13 -8
  27. package/dist/app/report-session-runtime.d.ts +4 -4
  28. package/dist/app/report-session-runtime.js +36 -21
  29. package/dist/app/spawn-report-session.d.ts +33 -28
  30. package/dist/app/spawn-report-session.js +25 -40
  31. package/dist/app/synthesize-run.d.ts +22 -16
  32. package/dist/app/synthesize-run.js +41 -35
  33. package/dist/app/work.d.ts +96 -0
  34. package/dist/app/work.js +147 -0
  35. package/dist/auth/local-auth-context.d.ts +1 -3
  36. package/dist/auth/local-auth-context.js +1 -3
  37. package/dist/auth/local-run-authorizer.d.ts +1 -1
  38. package/dist/auth/local-run-authorizer.js +5 -3
  39. package/dist/auth/types.d.ts +26 -26
  40. package/dist/billing/cached-resolver.d.ts +4 -4
  41. package/dist/billing/run-charge.d.ts +5 -8
  42. package/dist/billing/run-charge.js +2 -2
  43. package/dist/billing/usage-recorder.d.ts +9 -9
  44. package/dist/citations/aggregate.js +1 -1
  45. package/dist/citations/clients/arxiv.d.ts +2 -2
  46. package/dist/citations/clients/arxiv.js +12 -4
  47. package/dist/citations/clients/common.js +4 -2
  48. package/dist/citations/clients/crossref.d.ts +2 -2
  49. package/dist/citations/clients/crossref.js +37 -37
  50. package/dist/citations/clients/doi-registry.js +15 -16
  51. package/dist/citations/clients/pubmed.d.ts +2 -2
  52. package/dist/citations/clients/pubmed.js +20 -13
  53. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  54. package/dist/citations/clients/semantic-scholar.js +9 -9
  55. package/dist/citations/compare.js +2 -2
  56. package/dist/citations/match.d.ts +2 -2
  57. package/dist/citations/match.js +12 -7
  58. package/dist/citations/normalize.js +35 -26
  59. package/dist/citations/plan.js +6 -2
  60. package/dist/citations/resolve.d.ts +6 -6
  61. package/dist/citations/resolve.js +34 -25
  62. package/dist/citations/types.d.ts +77 -77
  63. package/dist/config/environment-stores.d.ts +6 -6
  64. package/dist/config/resource-limits.js +1 -3
  65. package/dist/contracts/analogy-report.d.ts +7 -7
  66. package/dist/contracts/analogy-report.js +2 -2
  67. package/dist/contracts/chat-events.d.ts +38 -24
  68. package/dist/contracts/chat-frame.d.ts +15 -5
  69. package/dist/contracts/chat-frame.js +64 -41
  70. package/dist/contracts/chat-parts.d.ts +130 -67
  71. package/dist/contracts/chat-parts.js +1 -0
  72. package/dist/contracts/content-url.js +16 -2
  73. package/dist/contracts/data-profile.d.ts +38 -38
  74. package/dist/contracts/index.d.ts +2 -2
  75. package/dist/contracts/index.js +1 -1
  76. package/dist/contracts/message.d.ts +6 -6
  77. package/dist/contracts/organ-system.d.ts +11 -11
  78. package/dist/contracts/part-registry.d.ts +5 -4
  79. package/dist/contracts/part-registry.js +5 -0
  80. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  81. package/dist/contracts/profile-vocabulary.js +10 -3
  82. package/dist/contracts/report-blocks.d.ts +329 -329
  83. package/dist/contracts/report-reference.d.ts +105 -81
  84. package/dist/contracts/report-reference.js +30 -13
  85. package/dist/contracts/schemas/chat-events.d.ts +30 -16
  86. package/dist/contracts/schemas/chat-events.js +15 -6
  87. package/dist/contracts/schemas/chat-parts.d.ts +175 -102
  88. package/dist/contracts/schemas/chat-parts.js +33 -7
  89. package/dist/contracts/severity.d.ts +1 -1
  90. package/dist/contracts/structure-source.d.ts +3 -3
  91. package/dist/contracts/structure-source.js +6 -2
  92. package/dist/contracts/subagent-activity.d.ts +2 -2
  93. package/dist/contracts/subagent-activity.js +5 -3
  94. package/dist/contracts/usage.d.ts +2 -2
  95. package/dist/data/safety-panel-schema.d.ts +25 -25
  96. package/dist/data/safety-panel-schema.js +13 -4
  97. package/dist/execution/artifact-metadata.d.ts +23 -15
  98. package/dist/execution/artifact-metadata.js +33 -10
  99. package/dist/execution/artifact-record.d.ts +2 -2
  100. package/dist/execution/artifact-registration.d.ts +5 -5
  101. package/dist/execution/artifact-registry.d.ts +8 -8
  102. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  103. package/dist/execution/dbos-run-launcher.js +58 -4
  104. package/dist/execution/dbos-workflow-purger.d.ts +5 -6
  105. package/dist/execution/dbos-workflow-purger.js +8 -7
  106. package/dist/execution/input-signature.d.ts +2 -2
  107. package/dist/execution/post-step-pipeline.d.ts +9 -9
  108. package/dist/execution/post-step-pipeline.js +1 -1
  109. package/dist/execution/post-step.js +2 -2
  110. package/dist/execution/reconcile-manifest.d.ts +4 -4
  111. package/dist/execution/reconcile-manifest.js +3 -2
  112. package/dist/execution/run-authorizer.d.ts +46 -37
  113. package/dist/execution/run-authorizer.js +8 -8
  114. package/dist/execution/run-canceler.d.ts +7 -7
  115. package/dist/execution/run-canceler.js +14 -7
  116. package/dist/execution/run-end-record.d.ts +2 -3
  117. package/dist/execution/run-event-parts.d.ts +0 -8
  118. package/dist/execution/run-event-parts.js +29 -24
  119. package/dist/execution/run-event-stream.d.ts +8 -8
  120. package/dist/execution/run-event-stream.js +3 -4
  121. package/dist/execution/run-launcher.d.ts +4 -4
  122. package/dist/execution/run-synthesis.d.ts +49 -48
  123. package/dist/execution/run-synthesis.js +96 -255
  124. package/dist/execution/staged-input.d.ts +2 -2
  125. package/dist/execution/step-summary.d.ts +6 -6
  126. package/dist/execution/step-summary.js +4 -8
  127. package/dist/execution/topo-sort.js +4 -3
  128. package/dist/execution/workflow-purger.d.ts +2 -2
  129. package/dist/index.d.ts +17 -20
  130. package/dist/index.js +25 -36
  131. package/dist/input-sanitization.js +9 -2
  132. package/dist/input-scan/clustering.d.ts +6 -6
  133. package/dist/input-scan/clustering.js +11 -5
  134. package/dist/input-scan/companions.js +3 -2
  135. package/dist/input-scan/detect-sets.d.ts +2 -2
  136. package/dist/input-scan/detect-sets.js +25 -21
  137. package/dist/input-scan/enrich.d.ts +6 -6
  138. package/dist/input-scan/enrich.js +29 -12
  139. package/dist/input-scan/formats.d.ts +2 -2
  140. package/dist/input-scan/formats.js +8 -2
  141. package/dist/input-scan/markers.d.ts +2 -2
  142. package/dist/input-scan/markers.js +14 -5
  143. package/dist/input-scan/menu.d.ts +10 -10
  144. package/dist/input-scan/menu.js +0 -0
  145. package/dist/input-scan/quarantine.d.ts +2 -2
  146. package/dist/input-scan/quarantine.js +23 -18
  147. package/dist/input-scan/readout-budget.d.ts +2 -2
  148. package/dist/input-scan/readout-budget.js +1 -1
  149. package/dist/input-scan/readout.d.ts +2 -2
  150. package/dist/input-scan/readout.js +47 -34
  151. package/dist/input-scan/scan.d.ts +2 -2
  152. package/dist/input-scan/scan.js +7 -5
  153. package/dist/input-scan/set-types.d.ts +28 -28
  154. package/dist/input-scan/shapes.d.ts +4 -4
  155. package/dist/input-scan/shapes.js +0 -0
  156. package/dist/input-scan/templates.d.ts +10 -10
  157. package/dist/input-scan/templates.js +30 -22
  158. package/dist/input-scan/tokens.d.ts +6 -4
  159. package/dist/input-scan/tokens.js +100 -38
  160. package/dist/input-scan/types.d.ts +22 -22
  161. package/dist/lib/async-utils.d.ts +3 -7
  162. package/dist/lib/async-utils.js +5 -9
  163. package/dist/lib/cache.js +1 -1
  164. package/dist/lib/chrome.d.ts +46 -6
  165. package/dist/lib/console-logger.js +2 -2
  166. package/dist/lib/db-result.d.ts +22 -6
  167. package/dist/lib/db-result.js +9 -13
  168. package/dist/lib/eyes.d.ts +4 -4
  169. package/dist/lib/eyes.js +1 -1
  170. package/dist/lib/fs-helpers.js +18 -6
  171. package/dist/lib/fs-result.d.ts +1 -0
  172. package/dist/lib/fs-result.js +5 -6
  173. package/dist/lib/hooks.d.ts +32 -7
  174. package/dist/lib/hooks.js +22 -3
  175. package/dist/lib/host-concurrency.js +3 -2
  176. package/dist/lib/logger.d.ts +2 -2
  177. package/dist/lib/logger.js +2 -1
  178. package/dist/lib/metrics.d.ts +1 -1
  179. package/dist/lib/null-proto.d.ts +6 -0
  180. package/dist/lib/null-proto.js +17 -0
  181. package/dist/lib/otel-spans.d.ts +1 -1
  182. package/dist/lib/otel-spans.js +9 -5
  183. package/dist/lib/otel.d.ts +4 -2
  184. package/dist/lib/otel.js +10 -2
  185. package/dist/lib/page-capture.d.ts +8 -8
  186. package/dist/lib/page-capture.js +9 -4
  187. package/dist/lib/parse-json.d.ts +5 -0
  188. package/dist/lib/parse-json.js +12 -0
  189. package/dist/lib/present.d.ts +12 -0
  190. package/dist/lib/present.js +39 -0
  191. package/dist/lib/rate-limit.d.ts +4 -4
  192. package/dist/lib/rate-limit.js +12 -13
  193. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  194. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  195. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  196. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  197. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  198. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  199. package/dist/lib/regulatory-corpus.d.ts +10 -10
  200. package/dist/lib/regulatory-corpus.js +3 -1
  201. package/dist/lib/result.d.ts +10 -11
  202. package/dist/lib/result.js +15 -13
  203. package/dist/lib/storage.d.ts +2 -2
  204. package/dist/lib/test/async-iterable.d.ts +9 -0
  205. package/dist/lib/test/async-iterable.js +28 -0
  206. package/dist/lib/test/request-url.d.ts +5 -0
  207. package/dist/lib/test/request-url.js +7 -0
  208. package/dist/lib/test/result-assert.d.ts +12 -0
  209. package/dist/lib/test/result-assert.js +17 -0
  210. package/dist/lib/test/text-shapes.d.ts +24 -0
  211. package/dist/lib/test/text-shapes.js +63 -0
  212. package/dist/lib/text.d.ts +22 -0
  213. package/dist/lib/text.js +68 -0
  214. package/dist/lib/thrown.d.ts +18 -0
  215. package/dist/lib/thrown.js +30 -0
  216. package/dist/lib/unknown-array.d.ts +6 -0
  217. package/dist/lib/unknown-array.js +8 -0
  218. package/dist/lib/unknown-containers.d.ts +14 -0
  219. package/dist/lib/unknown-containers.js +17 -0
  220. package/dist/lib/unknown-text.d.ts +8 -0
  221. package/dist/lib/unknown-text.js +28 -0
  222. package/dist/lib/zod-issue-shape.d.ts +1 -1
  223. package/dist/lib/zod-issue-shape.js +31 -31
  224. package/dist/lib/zod-issues.d.ts +3 -3
  225. package/dist/lib/zod-issues.js +30 -17
  226. package/dist/literature/sources/arxiv.d.ts +6 -6
  227. package/dist/literature/sources/arxiv.js +92 -35
  228. package/dist/literature/sources/http.d.ts +2 -2
  229. package/dist/literature/sources/http.js +16 -15
  230. package/dist/literature/sources/pubmed.d.ts +16 -16
  231. package/dist/literature/sources/pubmed.js +96 -61
  232. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  233. package/dist/literature/sources/semantic-scholar.js +22 -13
  234. package/dist/loop/accounting.d.ts +63 -0
  235. package/dist/loop/accounting.js +141 -0
  236. package/dist/loop/call-policy.d.ts +73 -0
  237. package/dist/loop/call-policy.js +109 -0
  238. package/dist/loop/chat-stream.d.ts +62 -0
  239. package/dist/loop/chat-stream.js +237 -0
  240. package/dist/loop/compaction.d.ts +9 -9
  241. package/dist/loop/compaction.js +1 -1
  242. package/dist/loop/metrics.d.ts +12 -15
  243. package/dist/loop/metrics.js +14 -26
  244. package/dist/loop/run-loop.d.ts +233 -0
  245. package/dist/loop/run-loop.js +770 -0
  246. package/dist/loop/sub-agent.d.ts +61 -0
  247. package/dist/loop/sub-agent.js +160 -0
  248. package/dist/loop/tool-adapter.d.ts +98 -0
  249. package/dist/loop/tool-adapter.js +364 -0
  250. package/dist/loop/tool-detail.d.ts +1 -1
  251. package/dist/loop/tool-detail.js +6 -5
  252. package/dist/loop/tool-outcome.d.ts +1 -1
  253. package/dist/loop/tool-output.d.ts +4 -4
  254. package/dist/loop/tool-output.js +2 -2
  255. package/dist/loop/turn-credentials.d.ts +39 -0
  256. package/dist/loop/turn-credentials.js +90 -0
  257. package/dist/loop/types.d.ts +29 -38
  258. package/dist/loop/types.js +2 -7
  259. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  260. package/dist/memory/ai-sdk-message-storage.js +13 -11
  261. package/dist/memory/card-builders.d.ts +14 -14
  262. package/dist/memory/card-builders.js +19 -15
  263. package/dist/memory/conversation-display-recorder.d.ts +22 -4
  264. package/dist/memory/conversation-display-recorder.js +43 -24
  265. package/dist/memory/conversation-display-replay.js +3 -2
  266. package/dist/memory/conversation-display-storage.d.ts +15 -7
  267. package/dist/memory/conversation-display-storage.js +141 -36
  268. package/dist/memory/conversation-view.d.ts +4 -4
  269. package/dist/memory/conversation-view.js +5 -4
  270. package/dist/memory/count-tokens.js +10 -8
  271. package/dist/memory/derive-thread-title.d.ts +0 -13
  272. package/dist/memory/derive-thread-title.js +2 -1
  273. package/dist/memory/message-backfill.d.ts +12 -5
  274. package/dist/memory/message-backfill.js +5 -3
  275. package/dist/memory/thread-history.d.ts +36 -21
  276. package/dist/memory/thread-history.js +78 -54
  277. package/dist/memory/thread-store.d.ts +26 -17
  278. package/dist/memory/thread-store.js +15 -9
  279. package/dist/memory/tool-call-integrity.d.ts +2 -2
  280. package/dist/memory/tool-call-integrity.js +4 -3
  281. package/dist/memory/working-memory.d.ts +16 -12
  282. package/dist/memory/working-memory.js +72 -61
  283. package/dist/prompts/briefing.d.ts +12 -12
  284. package/dist/prompts/briefing.js +1 -1
  285. package/dist/prompts/synthesis-agent.d.ts +1 -1
  286. package/dist/prompts/synthesis-agent.js +6 -14
  287. package/dist/provenance/collector.d.ts +6 -6
  288. package/dist/provenance/collector.js +15 -8
  289. package/dist/provenance/exec-frame.d.ts +2 -2
  290. package/dist/provenance/exec-frame.js +6 -1
  291. package/dist/provenance/seam.d.ts +1 -4
  292. package/dist/provenance/types.d.ts +6 -6
  293. package/dist/providers/ai-sdk.d.ts +113 -62
  294. package/dist/providers/ai-sdk.js +283 -518
  295. package/dist/providers/embedding.d.ts +2 -2
  296. package/dist/providers/embedding.js +1 -1
  297. package/dist/providers/errors.d.ts +22 -2
  298. package/dist/providers/errors.js +98 -50
  299. package/dist/providers/prompt-cache.d.ts +8 -8
  300. package/dist/providers/prompt-cache.js +13 -11
  301. package/dist/providers/reasoning.d.ts +2 -2
  302. package/dist/providers/reasoning.js +2 -2
  303. package/dist/providers/request-headers.js +12 -3
  304. package/dist/providers/types.d.ts +55 -94
  305. package/dist/reference-data/catalog.d.ts +2 -15
  306. package/dist/reference-data/catalog.js +25 -8
  307. package/dist/reference-data/receipt.d.ts +2 -2
  308. package/dist/report-model/assert-rules.js +1 -1
  309. package/dist/report-model/authoring-grammar.d.ts +211 -233
  310. package/dist/report-model/block-walk.d.ts +10 -10
  311. package/dist/report-model/block-walk.js +2 -0
  312. package/dist/report-model/draft-finish.d.ts +8 -8
  313. package/dist/report-model/draft-finish.js +1 -1
  314. package/dist/report-model/draft-hash.js +8 -7
  315. package/dist/report-model/draft-operations.d.ts +22 -10
  316. package/dist/report-model/draft-operations.js +48 -30
  317. package/dist/report-model/draft-read.d.ts +19 -7
  318. package/dist/report-model/draft-read.js +16 -6
  319. package/dist/report-model/draft.d.ts +844 -2
  320. package/dist/report-model/draft.js +3 -1
  321. package/dist/report-model/fixture-resolver.js +39 -16
  322. package/dist/report-model/pin-snapshot.d.ts +2 -2
  323. package/dist/report-model/pin-snapshot.js +15 -15
  324. package/dist/report-model/production-resolver.d.ts +18 -18
  325. package/dist/report-model/production-resolver.js +50 -42
  326. package/dist/report-model/reference-resolver.d.ts +26 -10
  327. package/dist/report-model/reference-resolver.js +68 -5
  328. package/dist/report-model/reference-stamp.js +30 -38
  329. package/dist/report-model/structural-validation.js +12 -4
  330. package/dist/report-model/validate.d.ts +7 -7
  331. package/dist/report-model/validate.js +6 -6
  332. package/dist/report-render/assets.d.ts +2 -2
  333. package/dist/report-render/assets.js +27 -3
  334. package/dist/report-render/chart-export.d.ts +10 -2
  335. package/dist/report-render/chart-export.js +37 -11
  336. package/dist/report-render/chart-presets.d.ts +8 -8
  337. package/dist/report-render/chart-presets.js +3 -3
  338. package/dist/report-render/chart-renderers.d.ts +23 -16
  339. package/dist/report-render/chart-renderers.js +74 -53
  340. package/dist/report-render/chart-toolbox.d.ts +2 -2
  341. package/dist/report-render/chart-toolbox.js +7 -6
  342. package/dist/report-render/chart.d.ts +15 -16
  343. package/dist/report-render/chart.js +369 -252
  344. package/dist/report-render/design.d.ts +36 -297
  345. package/dist/report-render/design.js +0 -12
  346. package/dist/report-render/figures/common.d.ts +12 -12
  347. package/dist/report-render/figures/common.js +42 -31
  348. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  349. package/dist/report-render/figures/dendrogram.js +10 -10
  350. package/dist/report-render/figures/dense.js +15 -8
  351. package/dist/report-render/figures/dotplot.js +46 -33
  352. package/dist/report-render/figures/embedding.js +52 -43
  353. package/dist/report-render/figures/equal-units.d.ts +10 -10
  354. package/dist/report-render/figures/equal-units.js +27 -27
  355. package/dist/report-render/figures/forest.js +9 -7
  356. package/dist/report-render/figures/gsea.js +21 -11
  357. package/dist/report-render/figures/heatmap.js +13 -9
  358. package/dist/report-render/figures/index.d.ts +10 -10
  359. package/dist/report-render/figures/index.js +4 -2
  360. package/dist/report-render/figures/km.js +10 -9
  361. package/dist/report-render/figures/label-room.d.ts +12 -12
  362. package/dist/report-render/figures/label-room.js +7 -2
  363. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  364. package/dist/report-render/figures/locuszoom.js +59 -31
  365. package/dist/report-render/figures/lollipop.js +3 -2
  366. package/dist/report-render/figures/ma.js +8 -4
  367. package/dist/report-render/figures/manhattan.d.ts +1 -2
  368. package/dist/report-render/figures/manhattan.js +52 -34
  369. package/dist/report-render/figures/oncoprint.js +4 -5
  370. package/dist/report-render/figures/pca.js +25 -11
  371. package/dist/report-render/figures/qq.js +20 -9
  372. package/dist/report-render/figures/roc.js +1 -1
  373. package/dist/report-render/figures/sankey.d.ts +2 -2
  374. package/dist/report-render/figures/sankey.js +11 -10
  375. package/dist/report-render/figures/upset.d.ts +6 -6
  376. package/dist/report-render/figures/upset.js +7 -4
  377. package/dist/report-render/figures/volcano.js +12 -10
  378. package/dist/report-render/hybrid-svg.d.ts +4 -4
  379. package/dist/report-render/hybrid-svg.js +7 -5
  380. package/dist/report-render/number-format.d.ts +4 -4
  381. package/dist/report-render/number-format.js +62 -27
  382. package/dist/report-render/page.js +2 -1
  383. package/dist/report-render/provenance-data.d.ts +2 -2
  384. package/dist/report-render/references.d.ts +4 -4
  385. package/dist/report-render/render.d.ts +2 -2
  386. package/dist/report-render/render.js +10 -11
  387. package/dist/report-render/script-json.js +1 -1
  388. package/dist/report-render/table-data.d.ts +6 -6
  389. package/dist/report-render/test/options.d.ts +49 -0
  390. package/dist/report-render/test/options.js +143 -0
  391. package/dist/report-render/test/page-function.d.ts +19 -0
  392. package/dist/report-render/test/page-function.js +33 -0
  393. package/dist/report-render/types.d.ts +10 -10
  394. package/dist/report-render/value-bridge.d.ts +4 -4
  395. package/dist/report-render/value-bridge.js +27 -14
  396. package/dist/report-render/views/chart-view.d.ts +2 -2
  397. package/dist/report-render/views/chart-view.js +2 -2
  398. package/dist/report-render/views/lineage.d.ts +6 -6
  399. package/dist/report-render/views/lineage.js +2 -0
  400. package/dist/report-render/views/page-view.d.ts +2 -2
  401. package/dist/report-render/views/page-view.js +1 -0
  402. package/dist/report-render/views/prose.js +25 -8
  403. package/dist/report-render/views/references-view.js +12 -1
  404. package/dist/report-render/views/values.js +1 -1
  405. package/dist/runtime/assemble.d.ts +53 -26
  406. package/dist/runtime/assemble.js +103 -56
  407. package/dist/runtime/boot.d.ts +8 -7
  408. package/dist/runtime/boot.js +1 -1
  409. package/dist/runtime/connection-budget.d.ts +6 -6
  410. package/dist/runtime/connection-budget.js +1 -1
  411. package/dist/runtime/dbos.d.ts +29 -19
  412. package/dist/runtime/dbos.js +35 -20
  413. package/dist/runtime/result-serialization.js +18 -5
  414. package/dist/runtime/shutdown.d.ts +2 -2
  415. package/dist/sandbox/client.d.ts +7 -3
  416. package/dist/sandbox/cpu-files.d.ts +2 -2
  417. package/dist/sandbox/cpu-files.js +21 -4
  418. package/dist/sandbox/create-sandbox.d.ts +7 -8
  419. package/dist/sandbox/create-sandbox.js +6 -12
  420. package/dist/sandbox/docker-client.d.ts +48 -3
  421. package/dist/sandbox/docker-client.js +10 -6
  422. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  423. package/dist/sandbox/exec-outcome.d.ts +2 -2
  424. package/dist/sandbox/exec-outcome.js +1 -1
  425. package/dist/sandbox/exec.d.ts +10 -6
  426. package/dist/sandbox/exec.js +27 -12
  427. package/dist/sandbox/execution-id.js +14 -6
  428. package/dist/sandbox/farm.d.ts +2 -2
  429. package/dist/sandbox/farm.js +22 -27
  430. package/dist/sandbox/identity.d.ts +7 -0
  431. package/dist/sandbox/identity.js +14 -3
  432. package/dist/sandbox/image-packages.js +15 -27
  433. package/dist/sandbox/k8s-client.d.ts +35 -8
  434. package/dist/sandbox/k8s-client.js +6 -5
  435. package/dist/sandbox/labels.js +1 -0
  436. package/dist/sandbox/liveness.js +3 -1
  437. package/dist/sandbox/mount-plan.d.ts +10 -10
  438. package/dist/sandbox/mount-plan.js +13 -14
  439. package/dist/sandbox/notification-sweep.d.ts +4 -4
  440. package/dist/sandbox/notification-sweep.js +4 -7
  441. package/dist/sandbox/package-identity.d.ts +6 -13
  442. package/dist/sandbox/package-identity.js +46 -28
  443. package/dist/sandbox/reaper.d.ts +10 -10
  444. package/dist/sandbox/reaper.js +4 -6
  445. package/dist/sandbox/sandbox-error.d.ts +2 -9
  446. package/dist/sandbox/sandbox-error.js +21 -8
  447. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  448. package/dist/sandbox/sandbox-step-translate.js +22 -8
  449. package/dist/sandbox/step-sandbox.d.ts +47 -0
  450. package/dist/sandbox/step-sandbox.js +53 -0
  451. package/dist/sandbox/types.d.ts +18 -19
  452. package/dist/sandbox/types.js +1 -1
  453. package/dist/schemas/artifact-manifest.d.ts +4 -4
  454. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  455. package/dist/schemas/file-metadata.js +2 -4
  456. package/dist/schemas/plan-schemas.d.ts +31 -31
  457. package/dist/schemas/run-synthesis.d.ts +95 -26
  458. package/dist/schemas/run-synthesis.js +3 -1
  459. package/dist/schemas/validate-plan.d.ts +4 -4
  460. package/dist/schemas/validate-plan.js +17 -5
  461. package/dist/schemas/workflow-state.d.ts +19 -19
  462. package/dist/schemas/workflow-state.js +2 -2
  463. package/dist/state/active-turns.d.ts +36 -0
  464. package/dist/state/active-turns.js +67 -0
  465. package/dist/state/analyses-metrics.d.ts +8 -8
  466. package/dist/state/analyses-metrics.js +4 -4
  467. package/dist/state/analyses.d.ts +0 -14
  468. package/dist/state/analyses.js +0 -32
  469. package/dist/state/artifacts.d.ts +32 -19
  470. package/dist/state/artifacts.js +28 -5
  471. package/dist/state/data-profile.d.ts +2 -2
  472. package/dist/state/db.d.ts +12 -2
  473. package/dist/state/db.js +5 -0
  474. package/dist/state/edit-intents.d.ts +4 -0
  475. package/dist/state/edit-intents.js +71 -0
  476. package/dist/state/index.d.ts +4 -4
  477. package/dist/state/index.js +2 -2
  478. package/dist/state/init.d.ts +2 -1
  479. package/dist/state/init.js +5 -2
  480. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  482. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  484. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  486. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  488. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  490. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  492. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  494. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  496. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  498. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  499. package/dist/state/migrations/index.js +18 -0
  500. package/dist/state/paused-work.d.ts +52 -0
  501. package/dist/state/paused-work.js +105 -0
  502. package/dist/state/plans.d.ts +27 -8
  503. package/dist/state/plans.js +14 -11
  504. package/dist/state/purge-analysis.d.ts +6 -6
  505. package/dist/state/purge-analysis.js +10 -2
  506. package/dist/state/report-session-state.d.ts +43 -18
  507. package/dist/state/report-session-state.js +43 -4
  508. package/dist/state/report-versions.d.ts +16 -11
  509. package/dist/state/report-versions.js +5 -3
  510. package/dist/state/runs.d.ts +30 -19
  511. package/dist/state/runs.js +43 -51
  512. package/dist/state/schema.d.ts +18 -21
  513. package/dist/state/schema.js +4 -5
  514. package/dist/state/snapshot-parse.d.ts +2 -2
  515. package/dist/state/snapshot-parse.js +14 -8
  516. package/dist/state/step-executions.d.ts +20 -8
  517. package/dist/state/step-executions.js +6 -4
  518. package/dist/state/tool-outputs.d.ts +2 -2
  519. package/dist/state/tool-outputs.js +2 -1
  520. package/dist/state/vector-store.d.ts +16 -16
  521. package/dist/state/vector-store.js +11 -7
  522. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  523. package/dist/tasks/data-profile-absorb.js +21 -16
  524. package/dist/tasks/data-profile-activity.d.ts +5 -5
  525. package/dist/tasks/data-profile-activity.js +5 -5
  526. package/dist/tasks/data-profile-index.d.ts +4 -4
  527. package/dist/tasks/data-profile-index.js +32 -17
  528. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  529. package/dist/tasks/data-profile-resolve.js +88 -62
  530. package/dist/tasks/data-profile.d.ts +40 -31
  531. package/dist/tasks/data-profile.js +138 -95
  532. package/dist/tasks/extract-values.d.ts +26 -79
  533. package/dist/tasks/extract-values.js +48 -108
  534. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  535. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  536. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  537. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  538. package/dist/testing.d.ts +62 -0
  539. package/dist/testing.js +101 -0
  540. package/dist/tools/ad-hoc-router.d.ts +9 -9
  541. package/dist/tools/ad-hoc-router.js +65 -52
  542. package/dist/tools/analysis-invocation.d.ts +7 -0
  543. package/dist/tools/analysis-invocation.js +29 -5
  544. package/dist/tools/approval/contract.d.ts +8 -52
  545. package/dist/tools/approval/contract.js +7 -36
  546. package/dist/tools/approval/gateway.d.ts +27 -28
  547. package/dist/tools/approval/gateway.js +33 -130
  548. package/dist/tools/approval/queries.d.ts +6 -11
  549. package/dist/tools/approval/queries.js +43 -29
  550. package/dist/tools/approval/uuidv7.js +2 -2
  551. package/dist/tools/bio/chembl.d.ts +3 -3
  552. package/dist/tools/bio/chembl.js +10 -0
  553. package/dist/tools/bio/comptox.d.ts +25 -8
  554. package/dist/tools/bio/comptox.js +4 -2
  555. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  556. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  557. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  558. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  559. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  560. package/dist/tools/bio/keys.d.ts +2 -2
  561. package/dist/tools/bio/keys.js +3 -3
  562. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  563. package/dist/tools/bio/lookup-annotation.js +3 -0
  564. package/dist/tools/bio/opentargets.d.ts +1 -1
  565. package/dist/tools/bio/opentargets.js +6 -0
  566. package/dist/tools/bio/pubchem.d.ts +2 -2
  567. package/dist/tools/bio/pubchem.js +6 -0
  568. package/dist/tools/bio/pubmed.d.ts +26 -16
  569. package/dist/tools/bio/pubmed.js +9 -3
  570. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  571. package/dist/tools/bio/search-clinical-trials.js +5 -1
  572. package/dist/tools/bio/search-faers.d.ts +2 -2
  573. package/dist/tools/bio/search-faers.js +1 -1
  574. package/dist/tools/bio/search-gene.d.ts +2 -2
  575. package/dist/tools/bio/search-gene.js +1 -0
  576. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  577. package/dist/tools/bio/search-geo-datasets.js +5 -5
  578. package/dist/tools/bio/search-interactions.d.ts +1 -1
  579. package/dist/tools/bio/search-patents.d.ts +28 -22
  580. package/dist/tools/bio/search-patents.js +20 -17
  581. package/dist/tools/bio/search-protein.d.ts +2 -2
  582. package/dist/tools/bio/search-protein.js +1 -1
  583. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  584. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  585. package/dist/tools/bio/target-safety.d.ts +8 -8
  586. package/dist/tools/bio/target-safety.js +11 -6
  587. package/dist/tools/capability-data.d.ts +9 -5
  588. package/dist/tools/capability-data.js +2 -1
  589. package/dist/tools/define-tool.d.ts +55 -46
  590. package/dist/tools/define-tool.js +39 -27
  591. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  592. package/dist/tools/display/normalize-echart-spec.js +51 -27
  593. package/dist/tools/display/show-user.d.ts +2 -2
  594. package/dist/tools/display/show-user.js +1 -1
  595. package/dist/tools/execute-analysis.d.ts +19 -10
  596. package/dist/tools/execute-analysis.js +83 -62
  597. package/dist/tools/knowledge/check.d.ts +166 -44
  598. package/dist/tools/knowledge/check.js +5 -3
  599. package/dist/tools/knowledge/client.d.ts +31 -62
  600. package/dist/tools/knowledge/client.js +44 -27
  601. package/dist/tools/knowledge/environment.d.ts +6 -6
  602. package/dist/tools/knowledge/environment.js +18 -7
  603. package/dist/tools/knowledge/index.d.ts +2 -2
  604. package/dist/tools/knowledge/index.js +9 -9
  605. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  606. package/dist/tools/knowledge/local-slots.js +11 -4
  607. package/dist/tools/knowledge/pin.d.ts +2 -2
  608. package/dist/tools/knowledge/recommend.d.ts +20 -45
  609. package/dist/tools/knowledge/recommend.js +27 -19
  610. package/dist/tools/knowledge/situation.d.ts +40 -40
  611. package/dist/tools/knowledge/situation.js +2 -9
  612. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  613. package/dist/tools/knowledge/skeleton.js +10 -11
  614. package/dist/tools/knowledge/template.d.ts +20 -18
  615. package/dist/tools/knowledge/template.js +38 -32
  616. package/dist/tools/lib/alphafold-client.js +2 -1
  617. package/dist/tools/lib/amass-client.d.ts +28 -28
  618. package/dist/tools/lib/amass-client.js +20 -10
  619. package/dist/tools/lib/api-utils.d.ts +13 -3
  620. package/dist/tools/lib/api-utils.js +17 -3
  621. package/dist/tools/lib/bgee-client.d.ts +6 -6
  622. package/dist/tools/lib/bgee-client.js +16 -10
  623. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  624. package/dist/tools/lib/cbioportal-client.js +9 -8
  625. package/dist/tools/lib/chembl-client.d.ts +14 -14
  626. package/dist/tools/lib/chembl-client.js +11 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  628. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  629. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  630. package/dist/tools/lib/clinical-trials-client.js +10 -10
  631. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  632. package/dist/tools/lib/clinvar-client.js +6 -6
  633. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  634. package/dist/tools/lib/ctx-ops.js +13 -10
  635. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  636. package/dist/tools/lib/dgidb-client.js +10 -12
  637. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  638. package/dist/tools/lib/ema-client.d.ts +2 -2
  639. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  640. package/dist/tools/lib/ensembl-client.js +5 -4
  641. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  642. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  643. package/dist/tools/lib/html-text.d.ts +6 -0
  644. package/dist/tools/lib/html-text.js +9 -0
  645. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  646. package/dist/tools/lib/identifier-resolver.js +7 -3
  647. package/dist/tools/lib/impc-client.d.ts +8 -8
  648. package/dist/tools/lib/impc-client.js +46 -35
  649. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  650. package/dist/tools/lib/iuphar-client.js +7 -16
  651. package/dist/tools/lib/monarch-client.d.ts +4 -4
  652. package/dist/tools/lib/openfda-client.d.ts +22 -22
  653. package/dist/tools/lib/openfda-client.js +23 -22
  654. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  655. package/dist/tools/lib/pathway-client.d.ts +4 -4
  656. package/dist/tools/lib/pathway-client.js +15 -19
  657. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  658. package/dist/tools/lib/pharmgkb-client.js +1 -1
  659. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  660. package/dist/tools/lib/protein-family-modality.js +0 -2
  661. package/dist/tools/lib/protein-family-normalize.js +7 -0
  662. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  663. package/dist/tools/lib/pubchem-client.js +1 -0
  664. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  665. package/dist/tools/lib/pubchem-ops.js +8 -0
  666. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  667. package/dist/tools/lib/pubmed-client.js +1 -1
  668. package/dist/tools/lib/string-client.d.ts +6 -6
  669. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  670. package/dist/tools/lib/uniprot-client.js +5 -1
  671. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  672. package/dist/tools/memory/update-working-memory.js +21 -3
  673. package/dist/tools/read-tool-output.js +8 -2
  674. package/dist/tools/registry.d.ts +2 -2
  675. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  676. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  677. package/dist/tools/report-session/derive-table.d.ts +19 -59
  678. package/dist/tools/report-session/derive-table.js +120 -122
  679. package/dist/tools/report-session/examine-page.d.ts +6 -6
  680. package/dist/tools/report-session/examine-page.js +14 -12
  681. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  682. package/dist/tools/report-session/list-artifacts.js +5 -5
  683. package/dist/tools/report-session/page-faults.d.ts +6 -6
  684. package/dist/tools/report-session/page-faults.js +3 -1
  685. package/dist/tools/report-session/preview-report.d.ts +4 -3
  686. package/dist/tools/report-session/preview-report.js +26 -7
  687. package/dist/tools/report-session/record-version.d.ts +9 -4
  688. package/dist/tools/report-session/record-version.js +16 -9
  689. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  690. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  691. package/dist/tools/research/generate-analogy-report.js +80 -76
  692. package/dist/tools/research/generate-plan.d.ts +16 -16
  693. package/dist/tools/research/generate-plan.js +410 -374
  694. package/dist/tools/research/guarded-address.js +3 -2
  695. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  696. package/dist/tools/research/inspect-data-profile.js +26 -25
  697. package/dist/tools/research/inspect-run.d.ts +54 -27
  698. package/dist/tools/research/inspect-run.js +50 -40
  699. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  700. package/dist/tools/research/literature-reviewer.js +29 -28
  701. package/dist/tools/research/search-arxiv.d.ts +1 -1
  702. package/dist/tools/research/search-arxiv.js +1 -1
  703. package/dist/tools/research/search-github-repos.d.ts +10 -7
  704. package/dist/tools/research/search-github-repos.js +25 -22
  705. package/dist/tools/research/search-semantic-scholar.js +1 -1
  706. package/dist/tools/research/searxng-engine.d.ts +2 -2
  707. package/dist/tools/research/searxng-engine.js +6 -4
  708. package/dist/tools/research/web-fetch.d.ts +24 -21
  709. package/dist/tools/research/web-fetch.js +65 -74
  710. package/dist/tools/research/web-search.d.ts +26 -17
  711. package/dist/tools/research/web-search.js +26 -21
  712. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  713. package/dist/tools/sandbox/link-packages.js +11 -8
  714. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  715. package/dist/tools/sandbox/list-available-packages.js +31 -25
  716. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  717. package/dist/tools/sandbox/list-available-refs.js +61 -36
  718. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  719. package/dist/tools/sandbox/report-blocker.js +23 -73
  720. package/dist/tools/sandbox/skills.d.ts +16 -12
  721. package/dist/tools/sandbox/skills.js +16 -12
  722. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  723. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  724. package/dist/tools/start-report-session.d.ts +13 -5
  725. package/dist/tools/start-report-session.js +35 -8
  726. package/dist/tools/terminal-text.d.ts +5 -2
  727. package/dist/tools/terminal-text.js +35 -3
  728. package/dist/tools/workspace/decision-record.d.ts +4 -4
  729. package/dist/tools/workspace/decision-record.js +23 -13
  730. package/dist/tools/workspace/edit-file.d.ts +59 -20
  731. package/dist/tools/workspace/edit-file.js +81 -16
  732. package/dist/tools/workspace/execute-command.d.ts +15 -13
  733. package/dist/tools/workspace/execute-command.js +11 -9
  734. package/dist/tools/workspace/file-stat.d.ts +6 -3
  735. package/dist/tools/workspace/grep.d.ts +10 -7
  736. package/dist/tools/workspace/grep.js +9 -3
  737. package/dist/tools/workspace/list-files.d.ts +6 -3
  738. package/dist/tools/workspace/mutator.d.ts +28 -15
  739. package/dist/tools/workspace/mutator.js +107 -53
  740. package/dist/tools/workspace/read-file.d.ts +8 -5
  741. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  742. package/dist/tools/workspace/result-bounds.js +4 -2
  743. package/dist/tools/workspace/run-exec.d.ts +2 -2
  744. package/dist/tools/workspace/run-exec.js +3 -3
  745. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  746. package/dist/tools/workspace/scan-inputs.js +17 -5
  747. package/dist/tools/workspace/show-file.d.ts +1 -1
  748. package/dist/tools/workspace/show-file.js +2 -1
  749. package/dist/tools/workspace/show-plan.d.ts +8 -5
  750. package/dist/tools/workspace/show-plan.js +9 -8
  751. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  752. package/dist/tools/workspace/workspace-search.js +27 -14
  753. package/dist/tools/workspace/write-file.d.ts +9 -7
  754. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  755. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  756. package/dist/workflows/execute-analysis.d.ts +46 -62
  757. package/dist/workflows/execute-analysis.js +137 -219
  758. package/dist/workflows/pause.d.ts +71 -0
  759. package/dist/workflows/pause.js +173 -0
  760. package/dist/workflows/sandbox-step.d.ts +38 -61
  761. package/dist/workflows/sandbox-step.js +99 -106
  762. package/dist/workflows/test/sql-writes.d.ts +21 -0
  763. package/dist/workflows/test/sql-writes.js +36 -0
  764. package/dist/workspace/filesystem.d.ts +6 -6
  765. package/dist/workspace/filesystem.js +10 -8
  766. package/dist/workspace/paths.d.ts +1 -1
  767. package/dist/workspace/paths.js +15 -4
  768. package/dist/workspace/search-config.d.ts +2 -2
  769. package/dist/workspace/search-config.js +1 -1
  770. package/package.json +21 -22
  771. package/dist/loop/call-guard.d.ts +0 -50
  772. package/dist/loop/call-guard.js +0 -90
  773. package/dist/loop/continue-agent.d.ts +0 -40
  774. package/dist/loop/continue-agent.js +0 -38
  775. package/dist/loop/genai-spans.d.ts +0 -47
  776. package/dist/loop/genai-spans.js +0 -134
  777. package/dist/loop/run-agent.d.ts +0 -245
  778. package/dist/loop/run-agent.js +0 -1124
  779. package/dist/loop/run-step.d.ts +0 -29
  780. package/dist/loop/run-step.js +0 -34
  781. package/dist/loop/run-to-terminal.d.ts +0 -66
  782. package/dist/loop/run-to-terminal.js +0 -93
  783. package/dist/loop/tool-mask.d.ts +0 -23
  784. package/dist/loop/tool-mask.js +0 -46
  785. package/dist/providers/streaming-chat.d.ts +0 -32
  786. package/dist/providers/streaming-chat.js +0 -91
  787. package/dist/tasks/derive-table-exec.d.ts +0 -54
  788. package/dist/tasks/derive-table-exec.js +0 -86
  789. package/dist/workflows/suspension.d.ts +0 -32
  790. package/dist/workflows/suspension.js +0 -38
@@ -12,6 +12,7 @@
12
12
  * classifier never resolves a name and it never reads the network.
13
13
  */
14
14
  import { isIP } from "node:net";
15
+ import { isAllDigits, isAllHex } from "../../lib/text.js";
15
16
  /** Parse a dotted-quad IPv4 address into its 32-bit value. Anything else gives null. */
16
17
  function ipv4ToNumber(ip) {
17
18
  const parts = ip.split(".");
@@ -19,7 +20,7 @@ function ipv4ToNumber(ip) {
19
20
  return null;
20
21
  let value = 0;
21
22
  for (const part of parts) {
22
- if (!/^\d{1,3}$/.test(part))
23
+ if (part.length === 0 || part.length > 3 || !isAllDigits(part))
23
24
  return null;
24
25
  const octet = Number(part);
25
26
  if (octet > 255)
@@ -46,7 +47,7 @@ function ipv6ToBigInt(ip) {
46
47
  return [];
47
48
  const groups = [];
48
49
  for (const group of half.split(":")) {
49
- if (!/^[0-9a-f]{1,4}$/.test(group))
50
+ if (group.length === 0 || group.length > 4 || !isAllHex(group))
50
51
  return null;
51
52
  groups.push(BigInt(`0x${group}`));
52
53
  }
@@ -29,21 +29,23 @@
29
29
  * form names a file that does not exist in the frame of the caller. The same
30
30
  * projection guards the step briefing (`app/data-profile-orientation.ts`).
31
31
  */
32
- import type { Pool } from "pg";
32
+ import type { Querier } from "../../state/db.js";
33
+ import { z } from "zod";
33
34
  import { type DataProfileFile, type DataProfileResult } from "../../state/index.js";
35
+ import { type Tool } from "../define-tool.js";
34
36
  /**
35
37
  * Whether the served profile can be trusted to describe the analysis's CURRENT inputs.
36
38
  * `"stale"` still carries the full profile — a stale profile is far better than none —
37
39
  * but says plainly why it may be wrong.
38
40
  */
39
41
  type Freshness = "ready" | "stale";
40
- interface ProfileEnvelope {
42
+ type ProfileEnvelope = {
41
43
  readonly state: Freshness;
42
44
  /** Why the profile may not describe the current inputs. Present only when `state` is `"stale"`. */
43
45
  readonly staleReason?: string;
44
46
  readonly profiledAt: string;
45
- }
46
- interface OverviewOutput extends ProfileEnvelope {
47
+ };
48
+ type OverviewOutput = ProfileEnvelope & {
47
49
  readonly scope: "overview";
48
50
  readonly summary: string;
49
51
  readonly domain?: string;
@@ -76,7 +78,7 @@ interface OverviewOutput extends ProfileEnvelope {
76
78
  */
77
79
  readonly partition?: DataProfileResult["partition"];
78
80
  readonly coverage?: DataProfileResult["coverage"];
79
- }
81
+ };
80
82
  /**
81
83
  * The dataset's structure. A snapshot carrying none reports `available: false` rather
82
84
  * than an empty list: "this profile predates the structure" and "this dataset has no
@@ -85,7 +87,7 @@ interface OverviewOutput extends ProfileEnvelope {
85
87
  * A snapshot written under the previous model is served through `kinds`/`axes`, labelled
86
88
  * — the structure exists, and an agent must not be told the dataset has none.
87
89
  */
88
- interface GroupsOutput extends ProfileEnvelope {
90
+ type GroupsOutput = ProfileEnvelope & {
89
91
  readonly scope: "groups";
90
92
  readonly available: boolean;
91
93
  /** Authored under the previous model — `kinds`/`axes` rather than resolved groups. */
@@ -99,13 +101,13 @@ interface GroupsOutput extends ProfileEnvelope {
99
101
  readonly axes?: DataProfileResult["axes"];
100
102
  readonly coverage?: DataProfileResult["coverage"];
101
103
  readonly message?: string;
102
- }
104
+ };
103
105
  /**
104
106
  * The members the profile describes individually — annotated members on a resolved
105
107
  * snapshot, the notable-file records on an older one. Never the dataset: `datasetFileCount`
106
108
  * on the overview is what says how big that is.
107
109
  */
108
- interface FilesOutput extends ProfileEnvelope {
110
+ type FilesOutput = ProfileEnvelope & {
109
111
  readonly scope: "files";
110
112
  readonly page: number;
111
113
  readonly pageSize: number;
@@ -116,7 +118,7 @@ interface FilesOutput extends ProfileEnvelope {
116
118
  /** How many files the dataset holds, so a page of 20 never reads as the whole of it. */
117
119
  readonly datasetFileCount: number | null;
118
120
  readonly files: DataProfileFile[];
119
- }
121
+ };
120
122
  /**
121
123
  * No profile to serve — the honest lifecycle states, in the ok channel.
122
124
  *
@@ -128,15 +130,15 @@ interface FilesOutput extends ProfileEnvelope {
128
130
  * constant here, and a constant field carries no information while implying
129
131
  * that it does. `FailedOutput` omits one for the same reason — see its note.
130
132
  */
131
- interface AbsentOutput {
133
+ type AbsentOutput = {
132
134
  readonly state: "absent";
133
135
  readonly message: string;
134
- }
135
- interface PendingOutput {
136
+ };
137
+ type PendingOutput = {
136
138
  readonly state: "pending";
137
139
  readonly status: "pending" | "running";
138
140
  readonly message: string;
139
- }
141
+ };
140
142
  /**
141
143
  * A recorded failure with no profile to fall back on.
142
144
  *
@@ -152,17 +154,22 @@ interface PendingOutput {
152
154
  * `failedAt` is reported instead: a fact the row actually holds, and one an agent
153
155
  * that knows when the input set last changed can act on.
154
156
  */
155
- interface FailedOutput {
157
+ type FailedOutput = {
156
158
  readonly state: "failed";
157
159
  readonly error: string | null;
158
160
  /** When the failure was recorded; `null` when the row holds no time. */
159
161
  readonly failedAt: string | null;
160
162
  readonly message: string;
161
- }
163
+ };
162
164
  export type InspectDataProfileOutput = OverviewOutput | GroupsOutput | FilesOutput | AbsentOutput | PendingOutput | FailedOutput;
163
- export declare function createInspectDataProfileTool(pool: Pool): import("../define-tool.js").Tool<{
164
- scope?: "groups" | "files" | "overview" | undefined;
165
- page?: number | undefined;
166
- pageSize?: number | undefined;
167
- }, InspectDataProfileOutput>;
165
+ declare const InspectDataProfileInputSchema: z.ZodObject<{
166
+ scope: z.ZodOptional<z.ZodEnum<{
167
+ files: "files";
168
+ groups: "groups";
169
+ overview: "overview";
170
+ }>>;
171
+ page: z.ZodOptional<z.ZodNumber>;
172
+ pageSize: z.ZodOptional<z.ZodNumber>;
173
+ }, z.core.$strip>;
174
+ export declare function createInspectDataProfileTool(pool: Querier): Tool<z.infer<typeof InspectDataProfileInputSchema>, InspectDataProfileOutput>;
168
175
  export {};
@@ -90,6 +90,22 @@ function stalenessReasons(status) {
90
90
  const FAILURE_SCOPE_NOTE = "This records an earlier attempt; this row cannot establish whether it covered the input files the analysis " +
91
91
  "holds now, so do not read it as a verdict on the current data. Compare failedAt against when the input set " +
92
92
  "last changed, and re-profile if they have moved apart.";
93
+ const InspectDataProfileInputSchema = z.object({
94
+ scope: z
95
+ .enum(["overview", "groups", "files"])
96
+ .optional()
97
+ .describe("'overview' (default): dataset-level facts, the partition accounting, the annotated-member count, and the dataset file count. " +
98
+ "'groups': the groups the dataset is made of, with their slots, and the dimensions that vary across it. " +
99
+ "'files': paged records for the individually annotated members."),
100
+ page: z.number().int().min(1).optional().describe("1-based page of member records. Only used when scope is 'files'. Default 1."),
101
+ pageSize: z
102
+ .number()
103
+ .int()
104
+ .min(1)
105
+ .max(MAX_PAGE_SIZE)
106
+ .optional()
107
+ .describe(`Member records per page. Only used when scope is 'files'. Default ${DEFAULT_PAGE_SIZE}, max ${MAX_PAGE_SIZE}.`),
108
+ });
93
109
  export function createInspectDataProfileTool(pool) {
94
110
  return defineTool({
95
111
  id: "inspect_data_profile",
@@ -119,22 +135,7 @@ export function createInspectDataProfileTool(pool) {
119
135
  "input files you are holding now, and this tool cannot tell you whether that attempt covered them. Compare failedAt " +
120
136
  "against when the input set last changed before you conclude anything: if the data moved since, say the profile " +
121
137
  "needs re-running rather than diagnosing the data itself.",
122
- inputSchema: z.object({
123
- scope: z
124
- .enum(["overview", "groups", "files"])
125
- .optional()
126
- .describe("'overview' (default): dataset-level facts, the partition accounting, the annotated-member count, and the dataset file count. " +
127
- "'groups': the groups the dataset is made of, with their slots, and the dimensions that vary across it. " +
128
- "'files': paged records for the individually annotated members."),
129
- page: z.number().int().min(1).optional().describe("1-based page of member records. Only used when scope is 'files'. Default 1."),
130
- pageSize: z
131
- .number()
132
- .int()
133
- .min(1)
134
- .max(MAX_PAGE_SIZE)
135
- .optional()
136
- .describe(`Member records per page. Only used when scope is 'files'. Default ${DEFAULT_PAGE_SIZE}, max ${MAX_PAGE_SIZE}.`),
137
- }),
138
+ inputSchema: InspectDataProfileInputSchema,
138
139
  // `execute` defaults both fields internally, and the hook applies the same
139
140
  // defaults. Without them the ordinary call, which names no field at all,
140
141
  // gives no detail. `page` acts only on the `files` scope, as in `execute`.
@@ -214,9 +215,9 @@ export function createInspectDataProfileTool(pool) {
214
215
  // nothing of carries `groups: []`, and "zero groups" is a finding — reading
215
216
  // it as "no structure record" would report the analysis unprofiled.
216
217
  groupCount: result.groups !== undefined || result.kinds !== undefined ? groups.length : null,
217
- ...(structureNote ? { structureNote } : {}),
218
- ...(result.partition ? { partition: result.partition } : {}),
219
- ...(result.coverage ? { coverage: result.coverage } : {}),
218
+ structureNote,
219
+ partition: result.partition,
220
+ coverage: result.coverage,
220
221
  });
221
222
  }
222
223
  if (scope === "groups") {
@@ -226,10 +227,10 @@ export function createInspectDataProfileTool(pool) {
226
227
  scope: "groups",
227
228
  available: true,
228
229
  groups: rootGroupPatterns(result.groups, resourceId),
229
- ...(result.dimensions ? { dimensions: result.dimensions } : {}),
230
- ...(result.probes ? { probes: result.probes } : {}),
231
- ...(result.partition ? { partition: result.partition } : {}),
232
- ...(result.recipe ? { recipe: result.recipe } : {}),
230
+ dimensions: result.dimensions,
231
+ probes: result.probes,
232
+ partition: result.partition,
233
+ recipe: result.recipe,
233
234
  });
234
235
  }
235
236
  if (result.kinds === undefined) {
@@ -251,8 +252,8 @@ export function createInspectDataProfileTool(pool) {
251
252
  available: true,
252
253
  legacy: true,
253
254
  kinds: rootKindPatterns(result.kinds, resourceId),
254
- ...(result.axes ? { axes: result.axes } : {}),
255
- ...(result.coverage ? { coverage: result.coverage } : {}),
255
+ axes: result.axes,
256
+ coverage: result.coverage,
256
257
  message: "Authored under the previous model: these are kinds and axes, not resolved groups and dimensions. " +
257
258
  "Counts and patterns were the profiler's own claims rather than a computed partition, and there is no " +
258
259
  "unclassified sweep or quarantine accounting on a profile of that era.",
@@ -5,10 +5,24 @@
5
5
  * conversation. List mode puts the running runs first and is paged. Targeted mode makes
6
6
  * readiness explicit and can perform one bounded, abort-aware wait.
7
7
  */
8
- import type { Pool } from "pg";
8
+ import type { QueryConfig } from "pg";
9
+ import { z } from "zod";
10
+ import type { PauseCause } from "../../contracts/chat-parts.js";
9
11
  import type { CortexRunRow } from "../../state/schema.js";
10
- type FormattedRun = ReturnType<typeof formatRun>;
11
- interface FormattedStep {
12
+ import { type Tool } from "../define-tool.js";
13
+ type FormattedRun = {
14
+ runId: string;
15
+ workflowName: string;
16
+ status: CortexRunRow["status"];
17
+ startedAt: string;
18
+ completedAt: string | null;
19
+ planId: string | null;
20
+ synthesisPath: string | null;
21
+ synthesisStatus: CortexRunRow["synthesisStatus"];
22
+ error: string | null | undefined;
23
+ synthesisReason?: string;
24
+ };
25
+ type FormattedStep = {
12
26
  stepId: string;
13
27
  agentId: string;
14
28
  wave: number;
@@ -20,11 +34,11 @@ interface FormattedStep {
20
34
  lastErrorClass?: string | null;
21
35
  finishReason?: string | null;
22
36
  hitMaxSteps?: boolean | null;
23
- }
24
- interface WaitMetadata {
37
+ };
38
+ type WaitMetadata = {
25
39
  readonly requestedSeconds: number;
26
40
  readonly cutoffReached: boolean;
27
- }
41
+ };
28
42
  type InspectRunOutput = {
29
43
  runs: FormattedRun[];
30
44
  total: number;
@@ -36,7 +50,20 @@ type InspectRunOutput = {
36
50
  message: string;
37
51
  wait?: WaitMetadata;
38
52
  } | {
39
- inspectionState: "in_progress" | "suspended" | "terminal";
53
+ inspectionState: "paused";
54
+ message: string;
55
+ run: FormattedRun;
56
+ steps: FormattedStep[];
57
+ /** Each workflow of the run that waits: a step, or the synthesis. */
58
+ pauses: {
59
+ state: "retrying" | "paused";
60
+ cause: PauseCause;
61
+ attempt: number;
62
+ retryAt?: string;
63
+ }[];
64
+ wait?: WaitMetadata;
65
+ } | {
66
+ inspectionState: "in_progress" | "terminal";
40
67
  message: string;
41
68
  run: FormattedRun;
42
69
  steps: FormattedStep[];
@@ -44,31 +71,31 @@ type InspectRunOutput = {
44
71
  wait?: WaitMetadata;
45
72
  selfWaitPrevented?: boolean;
46
73
  };
47
- interface InspectRunClock {
74
+ type InspectRunClock = {
48
75
  now(): number;
49
76
  wait(ms: number, signal: AbortSignal): Promise<void>;
50
- }
51
- declare function formatRun(r: CortexRunRow, verbose: boolean, exposePaths?: boolean): {
52
- error?: string | null | undefined;
53
- synthesisReason?: string | undefined;
54
- runId: string;
55
- workflowName: string;
56
- status: "failed" | "running" | "completed" | "partial" | "canceled" | "suspended_insufficient_funds";
57
- startedAt: string;
58
- completedAt: string | null;
59
- planId: string | null;
60
- synthesisPath: string | null;
61
- synthesisStatus: "failed" | "produced" | "skipped_no_summaries" | "skipped_blocker" | null;
77
+ };
78
+ declare const inputSchema: z.ZodObject<{
79
+ runId: z.ZodOptional<z.ZodString>;
80
+ page: z.ZodOptional<z.ZodNumber>;
81
+ pageSize: z.ZodOptional<z.ZodNumber>;
82
+ waitForTerminalSeconds: z.ZodOptional<z.ZodNumber>;
83
+ includeDiagnostics: z.ZodOptional<z.ZodBoolean>;
84
+ }, z.core.$strip>;
85
+ /**
86
+ * The pool surface this tool reads: one query whose rows the state row parsers type. A computed test fake
87
+ * satisfies this shape directly, where the row-generic of `Querier` cannot be implemented by a fake that
88
+ * computes its rows.
89
+ */
90
+ export type InspectRunQuerier = {
91
+ query(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
92
+ rows: Record<string, unknown>[];
93
+ rowCount: number | null;
94
+ }>;
62
95
  };
63
96
  /**
64
97
  * Build the run-inspection tool. The optional clock is an internal testing
65
98
  * seam for deterministic cutoff and transition coverage.
66
99
  */
67
- export declare function createInspectRunTool(pool: Pool, clock?: InspectRunClock): import("../define-tool.js").Tool<{
68
- runId?: string | undefined;
69
- page?: number | undefined;
70
- pageSize?: number | undefined;
71
- waitForTerminalSeconds?: number | undefined;
72
- includeDiagnostics?: boolean | undefined;
73
- }, InspectRunOutput>;
100
+ export declare function createInspectRunTool(pool: InspectRunQuerier, clock?: InspectRunClock): Tool<z.infer<typeof inputSchema>, InspectRunOutput>;
74
101
  export {};
@@ -11,6 +11,7 @@ import { z } from "zod";
11
11
  import { scopeResource } from "../../auth/types.js";
12
12
  import { unwrapOrThrow } from "../../lib/result.js";
13
13
  import { queryRun, queryRunsForInspection, queryStepsByRun } from "../../state/index.js";
14
+ import { queryPausesOfWork } from "../../state/paused-work.js";
14
15
  import { SYNTHESIS_STEP_ID } from "../../workspace/paths.js";
15
16
  import { defineTool } from "../define-tool.js";
16
17
  const DEFAULT_PAGE_SIZE = 50;
@@ -20,10 +21,10 @@ const systemClock = {
20
21
  wait: (ms, signal) => sleep(ms, undefined, { signal }),
21
22
  };
22
23
  function isTerminal(status) {
23
- return status === "completed" || status === "partial" || status === "failed" || status === "canceled" || status === "suspended_insufficient_funds";
24
+ return status === "completed" || status === "partial" || status === "failed" || status === "canceled";
24
25
  }
25
26
  function formatRun(r, verbose, exposePaths = isTerminal(r.status)) {
26
- return {
27
+ const run = {
27
28
  runId: r.runId,
28
29
  workflowName: r.workflowName,
29
30
  status: r.status,
@@ -32,30 +33,33 @@ function formatRun(r, verbose, exposePaths = isTerminal(r.status)) {
32
33
  planId: r.planId,
33
34
  synthesisPath: exposePaths && r.synthesisStatus === "produced" ? `runs/${r.runId}/synthesis.json` : null,
34
35
  synthesisStatus: r.synthesisStatus,
35
- ...(r.synthesisReason !== null ? { synthesisReason: r.synthesisReason } : {}),
36
- ...(verbose ? { error: r.error } : {}),
36
+ error: verbose ? (r.error ?? null) : undefined,
37
37
  };
38
+ if (r.synthesisReason !== null)
39
+ return { ...run, synthesisReason: r.synthesisReason };
40
+ return run;
38
41
  }
39
42
  function formatSteps(runId, stepRows, verbose, exposePaths) {
40
- return stepRows.map((s) => ({
41
- stepId: s.stepId,
42
- agentId: s.agentId,
43
- wave: s.wave,
44
- status: s.status,
45
- ...(exposePaths && s.status !== "pending" && s.status !== "skipped" && s.stepId !== SYNTHESIS_STEP_ID
46
- ? { summaryPath: `runs/${runId}/${s.stepId}/output/summary.md` }
47
- : {}),
48
- ...(verbose
49
- ? {
50
- durationMs: s.durationMs,
51
- error: s.error,
52
- attempts: s.attempts,
53
- lastErrorClass: s.lastErrorClass,
54
- finishReason: s.finishReason,
55
- hitMaxSteps: s.hitMaxSteps,
56
- }
57
- : {}),
58
- }));
43
+ return stepRows.map((s) => {
44
+ const step = {
45
+ stepId: s.stepId,
46
+ agentId: s.agentId,
47
+ wave: s.wave,
48
+ status: s.status,
49
+ };
50
+ if (exposePaths && s.status !== "pending" && s.status !== "skipped" && s.stepId !== SYNTHESIS_STEP_ID) {
51
+ step.summaryPath = `runs/${runId}/${s.stepId}/output/summary.md`;
52
+ }
53
+ if (verbose) {
54
+ step.durationMs = s.durationMs;
55
+ step.error = s.error;
56
+ step.attempts = s.attempts;
57
+ step.lastErrorClass = s.lastErrorClass;
58
+ step.finishReason = s.finishReason;
59
+ step.hitMaxSteps = s.hitMaxSteps;
60
+ }
61
+ return step;
62
+ });
59
63
  }
60
64
  const inputSchema = z
61
65
  .object({
@@ -77,14 +81,14 @@ const inputSchema = z
77
81
  .superRefine((input, refinement) => {
78
82
  if (input.runId && (input.page !== undefined || input.pageSize !== undefined)) {
79
83
  refinement.addIssue({
80
- code: z.ZodIssueCode.custom,
84
+ code: "custom",
81
85
  message: "page and pageSize are valid only when runId is omitted",
82
86
  path: input.page !== undefined ? ["page"] : ["pageSize"],
83
87
  });
84
88
  }
85
89
  if (!input.runId && input.waitForTerminalSeconds !== undefined) {
86
90
  refinement.addIssue({
87
- code: z.ZodIssueCode.custom,
91
+ code: "custom",
88
92
  message: "waitForTerminalSeconds requires runId",
89
93
  path: ["waitForTerminalSeconds"],
90
94
  });
@@ -99,9 +103,9 @@ export function createInspectRunTool(pool, clock = systemClock) {
99
103
  id: "inspect_run",
100
104
  description: "Inspect workflow runs for this analysis. A run never posts its completion into the conversation; this tool is how you read it. " +
101
105
  "Without a runId, returns a paged list (running runs first, then each other run) with total and hasMore. " +
102
- "With a runId, returns the run, its steps, and an inspectionState: not_found; in_progress; suspended (the host suspended the run, it does not progress, and a new run of the plan can start); " +
106
+ "With a runId, returns the run, its steps, and an inspectionState: not_found; in_progress; paused (a step waits until the user resumes or stops the run, and pauses gives each cause); " +
103
107
  "or terminal (run.status completed, partial, failed, or canceled). " +
104
- "Output paths appear only on a suspended or terminal run: run.synthesisPath when synthesisStatus is produced, and the summaryPath of each step that ran. " +
108
+ "Output paths appear only on a terminal run: run.synthesisPath when synthesisStatus is produced, and the summaryPath of each step that ran. " +
105
109
  "For a user-directed check, waitForTerminalSeconds can wait once for 1-30 seconds; if the cutoff returns in_progress, stop polling for that turn. " +
106
110
  "A wait on the run that the caller itself runs inside returns at once with selfWaitPrevented. " +
107
111
  "Default response is lightweight — pass includeDiagnostics:true to add error/duration/retry telemetry.",
@@ -132,14 +136,17 @@ export function createInspectRunTool(pool, clock = systemClock) {
132
136
  return ok({
133
137
  inspectionState: "not_found",
134
138
  message: `Run ${input.runId} was not found in this analysis.`,
135
- ...(waitSeconds === undefined ? {} : { wait: { requestedSeconds: waitSeconds, cutoffReached: false } }),
139
+ wait: waitSeconds === undefined ? undefined : { requestedSeconds: waitSeconds, cutoffReached: false },
136
140
  });
137
141
  }
138
142
  const selfWait = waitSeconds !== undefined && ctx.session.runFrame?.runId === input.runId;
143
+ const runId = input.runId;
144
+ const pausesOf = async (status) => status === "running" ? unwrapOrThrow(await queryPausesOfWork(pool, resourceId, runId)) : [];
145
+ let pauses = await pausesOf(run.status);
139
146
  let cutoffReached = false;
140
- if (waitSeconds !== undefined && run.status === "running" && !selfWait) {
147
+ if (waitSeconds !== undefined && run.status === "running" && pauses.length === 0 && !selfWait) {
141
148
  const deadline = clock.now() + waitSeconds * 1_000;
142
- while (run.status === "running") {
149
+ while (run.status === "running" && pauses.length === 0) {
143
150
  const remaining = deadline - clock.now();
144
151
  if (remaining <= 0) {
145
152
  cutoffReached = true;
@@ -154,12 +161,24 @@ export function createInspectRunTool(pool, clock = systemClock) {
154
161
  wait: { requestedSeconds: waitSeconds, cutoffReached: false },
155
162
  });
156
163
  }
164
+ pauses = await pausesOf(run.status);
157
165
  }
158
166
  }
159
167
  const terminal = isTerminal(run.status);
160
168
  const stepRows = unwrapOrThrow(await queryStepsByRun(pool, input.runId));
161
169
  const steps = formatSteps(input.runId, stepRows, verbose, terminal);
162
170
  const wait = waitSeconds === undefined ? {} : { wait: { requestedSeconds: waitSeconds, cutoffReached } };
171
+ if (run.status === "running" && pauses.length > 0) {
172
+ return ok({
173
+ inspectionState: "paused",
174
+ message: "This run waits in a pause, and results are not ready. Tell the user the cause of each pause. " +
175
+ "The user can resume the run or stop it. A pause in the state retrying also sends its request again at retryAt.",
176
+ run: formatRun(run, verbose, false),
177
+ steps,
178
+ pauses: pauses.map((pause) => ({ state: pause.state, cause: pause.cause, attempt: pause.attempt, retryAt: pause.retryAt })),
179
+ ...wait,
180
+ });
181
+ }
163
182
  if (run.status === "running") {
164
183
  const message = selfWait
165
184
  ? "This run is still in progress. Results are not ready, and the enclosing workflow cannot finish while its current step waits for itself."
@@ -173,16 +192,7 @@ export function createInspectRunTool(pool, clock = systemClock) {
173
192
  steps,
174
193
  elapsedMs: Math.max(0, clock.now() - Date.parse(run.startedAt)),
175
194
  ...wait,
176
- ...(selfWait ? { selfWaitPrevented: true } : {}),
177
- });
178
- }
179
- if (run.status === "suspended_insufficient_funds") {
180
- return ok({
181
- inspectionState: "suspended",
182
- message: "The host suspended this run. The run does not progress. A new run of the plan can start.",
183
- run: formatRun(run, verbose, true),
184
- steps,
185
- ...wait,
195
+ selfWaitPrevented: selfWait ? true : undefined,
186
196
  });
187
197
  }
188
198
  return ok({
@@ -3,17 +3,18 @@
3
3
  *
4
4
  * The conversation agent delegates batch literature/biology research by
5
5
  * calling this tool. `execute` derives a child `Session` (`forSubAgent`)
6
- * and runs `runAgent` over a focused literature-reviewer agent: a research
6
+ * and runs `runLoop` over a focused literature-reviewer agent: a research
7
7
  * brief in, a structured evidence report out. The child's transcript is
8
8
  * ephemeral — it lives only for this call and is never persisted (see the harness-thread-store spec).
9
9
  *
10
10
  * This is the whole of sub-agent delegation in the harness. There is no
11
11
  * `agents: {}` config, no `messageFilter`, no `stripParentToolParts`: the
12
12
  * child cannot see the parent's tool history because it is simply handed
13
- * none — only the brief. The child loop uses `passthroughStep` because the
14
- * entire tool call is one step in the parent loop (PR #3 caches it whole,
15
- * so the child never replays).
13
+ * none — only the brief. Inside the body of a workflow the call starts a
14
+ * child workflow (`loop/sub-agent.ts`), thus each call of the child is a step
15
+ * of its own.
16
16
  */
17
+ import type { SubAgentRegistrar } from "../../loop/sub-agent.js";
17
18
  import type { ToolOutputStore } from "../../loop/tool-output.js";
18
19
  import { type ChatProvider } from "../../providers/types.js";
19
20
  import { type Tool } from "../define-tool.js";
@@ -21,7 +22,7 @@ import { type BioToolKeys } from "../bio/keys.js";
21
22
  import type { Logger } from "../../lib/logger.js";
22
23
  import type { UsageRecorder } from "../../billing/usage-recorder.js";
23
24
  import type { CitationResolver } from "../../citations/types.js";
24
- export interface LiteratureReviewerDeps {
25
+ export type LiteratureReviewerDeps = {
25
26
  /** Operational logging seam; omitted falls back to no-op. */
26
27
  readonly logger?: Logger;
27
28
  /** The LLM seam the child loop runs on. */
@@ -36,6 +37,6 @@ export interface LiteratureReviewerDeps {
36
37
  readonly toolOutputStore?: ToolOutputStore;
37
38
  /** Shared bibliographic verification service; all agent surfaces share its pacing/cache. */
38
39
  readonly citationResolver: CitationResolver;
39
- }
40
+ };
40
41
  /** Build the `literature_reviewer` delegation tool bound to its provider. */
41
- export declare function createLiteratureReviewerTool(deps: LiteratureReviewerDeps): Tool;
42
+ export declare function createLiteratureReviewerTool(deps: LiteratureReviewerDeps, registerSubAgent: SubAgentRegistrar): Tool;