@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
@@ -7,8 +7,7 @@ import { z } from "zod";
7
7
  import { requestJson } from "./http.js";
8
8
  const BASE_URL = "https://api.semanticscholar.org/graph/v1";
9
9
  const FIELDS = "paperId,title,abstract,year,venue,citationCount,url,authors,externalIds";
10
- const WirePaperSchema = z
11
- .object({
10
+ const WirePaperSchema = z.looseObject({
12
11
  paperId: z.string().optional(),
13
12
  title: z.string().nullable().optional(),
14
13
  abstract: z.string().nullable().optional(),
@@ -23,8 +22,7 @@ const WirePaperSchema = z
23
22
  .record(z.string(), z.union([z.string(), z.number()]))
24
23
  .nullable()
25
24
  .optional(),
26
- })
27
- .passthrough();
25
+ });
28
26
  export const ExactPaperSchema = WirePaperSchema.extend({ paperId: z.string() });
29
27
  export const SearchResponseSchema = z.object({ data: z.array(WirePaperSchema).optional() });
30
28
  /** Give one text form to each external id, thus a numeric `CorpusId` reaches a caller that keys on a string. */
@@ -39,17 +37,25 @@ function mapPaper(raw) {
39
37
  return undefined;
40
38
  const authors = raw.authors?.flatMap((author) => (typeof author.name === "string" && author.name.trim() ? [author.name] : [])) ?? [];
41
39
  const externalIds = stringExternalIds(raw.externalIds);
42
- return {
40
+ const paper = {
43
41
  id: raw.paperId,
44
- ...(typeof raw.title === "string" ? { title: raw.title } : {}),
45
- ...(typeof raw.abstract === "string" ? { abstract: raw.abstract } : {}),
46
- ...(typeof raw.year === "number" ? { year: raw.year } : {}),
47
- ...(typeof raw.venue === "string" ? { venue: raw.venue } : {}),
48
- ...(typeof raw.citationCount === "number" ? { citationCount: raw.citationCount } : {}),
49
- ...(typeof raw.url === "string" ? { url: raw.url } : {}),
50
42
  authors,
51
- ...(externalIds === undefined ? {} : { externalIds }),
52
43
  };
44
+ if (typeof raw.title === "string")
45
+ paper.title = raw.title;
46
+ if (typeof raw.abstract === "string")
47
+ paper.abstract = raw.abstract;
48
+ if (typeof raw.year === "number")
49
+ paper.year = raw.year;
50
+ if (typeof raw.venue === "string")
51
+ paper.venue = raw.venue;
52
+ if (typeof raw.citationCount === "number")
53
+ paper.citationCount = raw.citationCount;
54
+ if (typeof raw.url === "string")
55
+ paper.url = raw.url;
56
+ if (externalIds !== undefined)
57
+ paper.externalIds = externalIds;
58
+ return paper;
53
59
  }
54
60
  export function parseSemanticScholarResponse(raw) {
55
61
  const parsed = SearchResponseSchema.safeParse(raw);
@@ -57,7 +63,10 @@ export function parseSemanticScholarResponse(raw) {
57
63
  return [];
58
64
  return (parsed.data.data ?? []).flatMap((paper) => {
59
65
  const mapped = mapPaper(paper);
60
- return mapped?.title === undefined ? [] : [mapped];
66
+ if (mapped === undefined || mapped.title === undefined)
67
+ return [];
68
+ const { title } = mapped;
69
+ return [{ ...mapped, title }];
61
70
  });
62
71
  }
63
72
  export function createSemanticScholarSource(options = {}) {
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The accounting of each model call: the token counters and the usage record.
3
+ *
4
+ * The middleware runs inside the durable step of the call, below the step and
5
+ * above the retry envelope. Thus it sees the stream of the attempt that answered,
6
+ * and a replay of a recorded step does not run it again. The usage record and
7
+ * the counters therefore count each call one time.
8
+ */
9
+ import type { LanguageModelMiddleware } from "ai";
10
+ import type { LanguageModelV4Usage } from "@ai-sdk/provider";
11
+ import type { AgentSession } from "../auth/types.js";
12
+ import type { UsageRecorder } from "../billing/usage-recorder.js";
13
+ import type { Logger } from "../lib/logger.js";
14
+ import type { ChatUsage } from "../providers/types.js";
15
+ import { type AgentRunUsage } from "./metrics.js";
16
+ /** What one completed model call is accounted under. */
17
+ export type CallAccounting = {
18
+ readonly session: AgentSession;
19
+ /** The id that the counters and the record name, which is not always the id of the agent. */
20
+ readonly agentId: string;
21
+ /** The id of the tool call that runs the loop, when the loop runs inside a tool call. */
22
+ readonly invocationId?: string;
23
+ readonly usageRecorder: UsageRecorder;
24
+ /** The sink that the notice helper logs the reason of a recorder `err` to. */
25
+ readonly logger: Logger;
26
+ };
27
+ /**
28
+ * Idempotency key for one call's usage record, and for the kept text of one cut
29
+ * tool result: `{runId}[:{stepId}]:{callPath}[:{invocationId}]:{callKey}`. A
30
+ * workflow with no `RunFrame`, a chat turn, puts its own workflow id in place of
31
+ * the run and the step.
32
+ *
33
+ * Each component is a fact the same call carries again on every rerun:
34
+ *
35
+ * - `stepId` — `executeAnalysis` runs one child workflow per step under a
36
+ * single shared `runId`.
37
+ * - `callPath` — several loops run under one frame: a step agent and its
38
+ * follow-up requests, and the run synthesis and the sub-agents of its tools.
39
+ * - `invocationId` — the same sub-agent dispatched twice in one round has an
40
+ * identical call path, so only the dispatching tool-call id tells the two
41
+ * child loops apart. Each data profile runs under the same constant frame,
42
+ * thus the workflow id of its attempt takes this place.
43
+ * - `callKey` — the id of the model response, or the id of the tool call. A
44
+ * recorded step gives the same id on a replay.
45
+ *
46
+ * Outside a workflow there is no replay to be safe against, so a fresh id is
47
+ * enough and is what keeps two calls in one turn distinct.
48
+ */
49
+ export declare function recordKeyFor(session: AgentSession, invocationId: string | undefined, callKey: string): string;
50
+ /** The usage of one call in the names of the harness. An unreported figure stays absent. */
51
+ export declare function chatUsageOf(usage: LanguageModelV4Usage): ChatUsage;
52
+ /**
53
+ * Folds the usage of each model call into the rollups of the run. It wraps the
54
+ * durable step of the call, thus a replayed call folds the usage of its
55
+ * checkpoint, and a reply whose tool calls an abort cut folds too.
56
+ */
57
+ export declare function rollupMiddleware(rollups: readonly AgentRunUsage[]): LanguageModelMiddleware;
58
+ /**
59
+ * The accounting of each model call of a run, as a model middleware. It reads
60
+ * the response id and the model id of the response metadata, and it accounts
61
+ * the call at the `finish` part.
62
+ */
63
+ export declare function accountingMiddleware(call: CallAccounting): LanguageModelMiddleware;
@@ -0,0 +1,141 @@
1
+ /**
2
+ * The accounting of each model call: the token counters and the usage record.
3
+ *
4
+ * The middleware runs inside the durable step of the call, below the step and
5
+ * above the retry envelope. Thus it sees the stream of the attempt that answered,
6
+ * and a replay of a recorded step does not run it again. The usage record and
7
+ * the counters therefore count each call one time.
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ import { DBOS } from "@dbos-inc/dbos-sdk";
11
+ import { deliverNotice } from "../lib/hooks.js";
12
+ import { fallbackModelOf } from "../providers/ai-sdk.js";
13
+ import { addChatUsage, hasReportedUsage, recordChatCall } from "./metrics.js";
14
+ /**
15
+ * Delimiter joining the call path into one key segment.
16
+ *
17
+ * Deliberately not the `:` that separates the key's segments, so a call path
18
+ * can never be read as one: agent ids are kebab-case identifiers, and none of
19
+ * the other segments can contain `>`.
20
+ */
21
+ const CALL_PATH_DELIMITER = ">";
22
+ /**
23
+ * Idempotency key for one call's usage record, and for the kept text of one cut
24
+ * tool result: `{runId}[:{stepId}]:{callPath}[:{invocationId}]:{callKey}`. A
25
+ * workflow with no `RunFrame`, a chat turn, puts its own workflow id in place of
26
+ * the run and the step.
27
+ *
28
+ * Each component is a fact the same call carries again on every rerun:
29
+ *
30
+ * - `stepId` — `executeAnalysis` runs one child workflow per step under a
31
+ * single shared `runId`.
32
+ * - `callPath` — several loops run under one frame: a step agent and its
33
+ * follow-up requests, and the run synthesis and the sub-agents of its tools.
34
+ * - `invocationId` — the same sub-agent dispatched twice in one round has an
35
+ * identical call path, so only the dispatching tool-call id tells the two
36
+ * child loops apart. Each data profile runs under the same constant frame,
37
+ * thus the workflow id of its attempt takes this place.
38
+ * - `callKey` — the id of the model response, or the id of the tool call. A
39
+ * recorded step gives the same id on a replay.
40
+ *
41
+ * Outside a workflow there is no replay to be safe against, so a fresh id is
42
+ * enough and is what keeps two calls in one turn distinct.
43
+ */
44
+ export function recordKeyFor(session, invocationId, callKey) {
45
+ const frame = session.runFrame;
46
+ const workflowId = DBOS.workflowID;
47
+ if (frame === undefined && workflowId === undefined)
48
+ return randomUUID();
49
+ const scope = frame === undefined ? [workflowId] : [frame.runId, ...(frame.stepId === undefined ? [] : [frame.stepId])];
50
+ return [...scope, session.provenance.callPath.join(CALL_PATH_DELIMITER), ...(invocationId === undefined ? [] : [invocationId]), callKey].join(":");
51
+ }
52
+ /** The usage of one call in the names of the harness. An unreported figure stays absent. */
53
+ export function chatUsageOf(usage) {
54
+ return {
55
+ inputTokens: usage.inputTokens.total,
56
+ outputTokens: usage.outputTokens.total,
57
+ cacheCreationInputTokens: usage.inputTokens.cacheWrite,
58
+ cacheReadInputTokens: usage.inputTokens.cacheRead,
59
+ reasoningTokens: usage.outputTokens.reasoning,
60
+ };
61
+ }
62
+ /** Count one completed call, and send its usage record. */
63
+ function account(call, facts) {
64
+ recordChatCall({ agentId: call.agentId, usage: facts.usage, servedModelId: facts.servedModelId, provider: facts.provider });
65
+ if (!hasReportedUsage(facts.usage))
66
+ return;
67
+ const { session } = call;
68
+ const record = {
69
+ recordKey: recordKeyFor(session, call.invocationId, facts.responseId ?? randomUUID()),
70
+ agentId: call.agentId,
71
+ callPath: session.provenance.callPath,
72
+ scope: session.scope,
73
+ usage: facts.usage,
74
+ requestedModelId: facts.requestedModelId,
75
+ };
76
+ if (session.runFrame?.runId !== undefined)
77
+ record.runId = session.runFrame.runId;
78
+ if (session.runFrame?.stepId !== undefined)
79
+ record.stepId = session.runFrame.stepId;
80
+ if (facts.servedModelId !== undefined)
81
+ record.servedModelId = facts.servedModelId;
82
+ void deliverNotice(call.logger, "UsageRecorder.record", call.usageRecorder.record(record));
83
+ }
84
+ /**
85
+ * Folds the usage of each model call into the rollups of the run. It wraps the
86
+ * durable step of the call, thus a replayed call folds the usage of its
87
+ * checkpoint, and a reply whose tool calls an abort cut folds too.
88
+ */
89
+ export function rollupMiddleware(rollups) {
90
+ return {
91
+ specificationVersion: "v4",
92
+ wrapStream: async ({ doStream }) => {
93
+ const { stream, ...rest } = await doStream();
94
+ const observed = stream.pipeThrough(new TransformStream({
95
+ transform(part, controller) {
96
+ if (part.type === "finish")
97
+ for (const rollup of rollups)
98
+ addChatUsage(rollup, chatUsageOf(part.usage));
99
+ controller.enqueue(part);
100
+ },
101
+ }));
102
+ return { ...rest, stream: observed };
103
+ },
104
+ };
105
+ }
106
+ /**
107
+ * The accounting of each model call of a run, as a model middleware. It reads
108
+ * the response id and the model id of the response metadata, and it accounts
109
+ * the call at the `finish` part.
110
+ */
111
+ export function accountingMiddleware(call) {
112
+ return {
113
+ specificationVersion: "v4",
114
+ wrapStream: async ({ doStream, model }) => {
115
+ const { stream, ...rest } = await doStream();
116
+ let responseId;
117
+ let servedModelId;
118
+ const observed = stream.pipeThrough(new TransformStream({
119
+ transform(part, controller) {
120
+ if (part.type === "response-metadata") {
121
+ responseId = part.id ?? responseId;
122
+ servedModelId = part.modelId ?? servedModelId;
123
+ }
124
+ else if (part.type === "finish") {
125
+ // A fallback hop names the model that answered, and the metadata keeps the requested one.
126
+ const servedBy = fallbackModelOf(part.providerMetadata);
127
+ account(call, {
128
+ usage: chatUsageOf(part.usage),
129
+ responseId,
130
+ provider: model.provider,
131
+ requestedModelId: model.modelId,
132
+ servedModelId: servedBy === undefined || servedBy === "" ? servedModelId : servedBy,
133
+ });
134
+ }
135
+ controller.enqueue(part);
136
+ },
137
+ }));
138
+ return { ...rest, stream: observed };
139
+ },
140
+ };
141
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The policy that refuses a tool call before it runs: the mask of a request,
3
+ * the budget of a run, and the guard against repeated calls.
4
+ *
5
+ * A signed thinking block is bound to the exact prefix of its request, so a
6
+ * request always declares the full tool set of its agent. The policy acts at
7
+ * the approval of each call instead. A refused call gets a result that gives
8
+ * the reason, and the run continues.
9
+ *
10
+ * The policy reads only the calls of the run, in the order that they arrive.
11
+ * A replay sees the same calls in the same order, thus it refuses the same calls.
12
+ */
13
+ /** An absent mask lets each declared tool run. */
14
+ export type ToolMask = "none" | {
15
+ readonly allow: readonly string[];
16
+ };
17
+ /** A tool with no entry has no limit. */
18
+ export type ToolBudget = Readonly<Record<string, number>>;
19
+ export type CallGuardPolicy = {
20
+ /** The calls with one identical input that a run may make to one tool. The next one is refused. */
21
+ readonly identicalLimit: number;
22
+ /** The calls, with any input, that a run may make to one tool. The next one is refused. */
23
+ readonly perToolLimit: number;
24
+ /** The calls, with any input, that a run may make across every guarded tool. The next one is refused by every tool. */
25
+ readonly totalLimit: number;
26
+ };
27
+ /**
28
+ * Two identical calls let a model confirm an answer once. Twelve calls of one
29
+ * tool is above the largest count a frontier planner made in the Phase 0
30
+ * campaign (six and a half calls per plan across ALL tools) and far below the
31
+ * two hundred that a looping planner reached. Forty calls across every tool
32
+ * bounds the round over the tools that stays under each per-tool budget: in
33
+ * the 32-task campaign every submitted Sonnet plan but two needed fewer, and
34
+ * the one plan that ran to the wall clock made 62.
35
+ */
36
+ export declare const DEFAULT_CALL_GUARD: CallGuardPolicy;
37
+ export type GuardedCallRefusal = {
38
+ readonly tool: string;
39
+ readonly kind: "identical" | "budget" | "total";
40
+ readonly calls: number;
41
+ };
42
+ /**
43
+ * The guard against repeated calls of a set of tools. A model that treats a
44
+ * tool answer as a state to poll calls the same tool with the same input again
45
+ * and again, or drifts through one query after another, until the step cap or
46
+ * the wall clock ends the run. A frontier model reads an "unavailable" answer
47
+ * once and continues; a smaller model does not.
48
+ */
49
+ export type CallGuard = {
50
+ readonly tools: readonly string[];
51
+ readonly policy?: CallGuardPolicy;
52
+ /** Called on each refusal of the guard, for the log of the host and for a cap of the run. */
53
+ readonly onRefusal?: (refusal: GuardedCallRefusal) => void;
54
+ };
55
+ export type CallPolicy = {
56
+ /** The tools that can run for each request of the task. A follow-up request gives its own mask. */
57
+ readonly mask?: ToolMask;
58
+ readonly budget?: ToolBudget;
59
+ readonly guard?: CallGuard;
60
+ };
61
+ /** The counters of one conversation. */
62
+ export type CallPolicyState = {
63
+ /** The refusal text of a call, or `undefined` for a call that runs. A call that runs counts against each limit. */
64
+ refusalOf(call: {
65
+ readonly toolName: string;
66
+ readonly input: unknown;
67
+ }, mask: ToolMask | undefined): string | undefined;
68
+ };
69
+ /** A stable key for one input: the JSON text with the object keys sorted at every depth. */
70
+ export declare function canonicalInputKey(input: unknown): string;
71
+ /** The mask that lets each tool run except the named ones. */
72
+ export declare function maskExcept(toolIds: readonly string[], ids: readonly string[]): ToolMask;
73
+ export declare function createCallPolicy(policy: CallPolicy): CallPolicyState;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * The policy that refuses a tool call before it runs: the mask of a request,
3
+ * the budget of a run, and the guard against repeated calls.
4
+ *
5
+ * A signed thinking block is bound to the exact prefix of its request, so a
6
+ * request always declares the full tool set of its agent. The policy acts at
7
+ * the approval of each call instead. A refused call gets a result that gives
8
+ * the reason, and the run continues.
9
+ *
10
+ * The policy reads only the calls of the run, in the order that they arrive.
11
+ * A replay sees the same calls in the same order, thus it refuses the same calls.
12
+ */
13
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
14
+ /**
15
+ * Two identical calls let a model confirm an answer once. Twelve calls of one
16
+ * tool is above the largest count a frontier planner made in the Phase 0
17
+ * campaign (six and a half calls per plan across ALL tools) and far below the
18
+ * two hundred that a looping planner reached. Forty calls across every tool
19
+ * bounds the round over the tools that stays under each per-tool budget: in
20
+ * the 32-task campaign every submitted Sonnet plan but two needed fewer, and
21
+ * the one plan that ran to the wall clock made 62.
22
+ */
23
+ export const DEFAULT_CALL_GUARD = { identicalLimit: 2, perToolLimit: 12, totalLimit: 40 };
24
+ /** A stable key for one input: the JSON text with the object keys sorted at every depth. */
25
+ export function canonicalInputKey(input) {
26
+ return JSON.stringify(sortKeys(input));
27
+ }
28
+ function sortKeys(value) {
29
+ if (Array.isArray(value))
30
+ return value.map(sortKeys);
31
+ const record = parseUnknownRecord(value);
32
+ if (record !== undefined) {
33
+ const out = {};
34
+ for (const key of Object.keys(record).sort())
35
+ out[key] = sortKeys(record[key]);
36
+ return out;
37
+ }
38
+ return value;
39
+ }
40
+ /** Matches the `{ error, retryable }` shape of every other tool error. */
41
+ function refusal(error) {
42
+ return JSON.stringify({ error, retryable: false });
43
+ }
44
+ function maskRefusal(mask, toolName) {
45
+ if (mask === "none")
46
+ return refusal(`No tool can run for this request, thus ${toolName} did not run. Answer in text.`);
47
+ if (mask.allow.includes(toolName))
48
+ return undefined;
49
+ const available = mask.allow.length === 0 ? "none" : mask.allow.join(", ");
50
+ return refusal(`The tool ${toolName} is not available for this request, thus it did not run. The tools that can run now: ${available}.`);
51
+ }
52
+ /** The mask that lets each tool run except the named ones. */
53
+ export function maskExcept(toolIds, ids) {
54
+ return { allow: toolIds.filter((id) => !ids.includes(id)) };
55
+ }
56
+ export function createCallPolicy(policy) {
57
+ const used = new Map();
58
+ const guard = policy.guard;
59
+ const limits = guard?.policy ?? DEFAULT_CALL_GUARD;
60
+ const guarded = new Set(guard?.tools ?? []);
61
+ const guardCalls = new Map();
62
+ const byInput = new Map();
63
+ let guardTotal = 0;
64
+ const guardRefusal = (toolName, input) => {
65
+ if (!guarded.has(toolName))
66
+ return undefined;
67
+ const calls = (guardCalls.get(toolName) ?? 0) + 1;
68
+ guardCalls.set(toolName, calls);
69
+ const key = `${toolName}:${canonicalInputKey(input)}`;
70
+ const identical = (byInput.get(key) ?? 0) + 1;
71
+ byInput.set(key, identical);
72
+ if (identical > limits.identicalLimit) {
73
+ guard?.onRefusal?.({ tool: toolName, kind: "identical", calls: identical });
74
+ return refusal(`This run already called ${toolName} with this exact input ${identical - 1} times, and the answer does not change within a run. ` +
75
+ "Use the answer you have and continue. If the answer was that a resource is absent, plan without it or ask for it; do not search again.");
76
+ }
77
+ guardTotal += 1;
78
+ if (guardTotal > limits.totalLimit) {
79
+ guard?.onRefusal?.({ tool: toolName, kind: "total", calls: guardTotal });
80
+ return refusal(`This run made ${limits.totalLimit} calls across its search tools, which is the search budget of one run. ` +
81
+ "Submit the plan you have now. If a required resource is absent, ask for it; do not search again.");
82
+ }
83
+ if (calls > limits.perToolLimit) {
84
+ guard?.onRefusal?.({ tool: toolName, kind: "budget", calls });
85
+ return refusal(`This run made ${limits.perToolLimit} calls of ${toolName}, which is the budget of one run for one tool. ` +
86
+ "Continue with what you have. If a required resource is absent, ask for it; do not search again.");
87
+ }
88
+ return undefined;
89
+ };
90
+ return {
91
+ refusalOf(call, mask) {
92
+ if (mask !== undefined) {
93
+ const refused = maskRefusal(mask, call.toolName);
94
+ if (refused !== undefined)
95
+ return refused;
96
+ }
97
+ const limit = policy.budget?.[call.toolName];
98
+ const count = used.get(call.toolName) ?? 0;
99
+ if (limit !== undefined && count >= limit) {
100
+ return refusal(`The tool ${call.toolName} reached its limit of ${limit} calls in this run, thus this call did not run.`);
101
+ }
102
+ const guardRefused = guardRefusal(call.toolName, call.input);
103
+ if (guardRefused !== undefined)
104
+ return guardRefused;
105
+ used.set(call.toolName, count + 1);
106
+ return undefined;
107
+ },
108
+ };
109
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The durable stream of a chat turn, and of each sub-agent of the turn.
3
+ *
4
+ * The turn writes to the stream of its workflow with the writer of
5
+ * `@dbos-inc/vercel-ai`: each model call writes its text from inside its step,
6
+ * and the harness writes each of its own frames as one `data-harness-frame`
7
+ * chunk. The reader converts the chunks to the `ChatFrame`s that a host gives
8
+ * its client. A model record also holds the input of each tool call, and the
9
+ * converter drops it, thus a client gets the frames of an in-process turn.
10
+ */
11
+ import { type DurableStreamSource } from "@dbos-inc/vercel-ai";
12
+ import type { UIMessageChunk, UIMessageStreamWriter } from "ai";
13
+ import type { ChatFrame, EventSource } from "../contracts/chat-events.js";
14
+ import type { EmitFn } from "./types.js";
15
+ /** The key of the durable stream of a chat turn. */
16
+ export declare const CHAT_STREAM_KEY = "chat";
17
+ /** The data part that names the child workflow of a sub-agent call in the stream of its caller. */
18
+ export declare const SUB_AGENT_STREAM_PART = "data-subagent-stream";
19
+ /** The chunk that carries one frame of the harness in the stream of a turn. A transient chunk is live only. */
20
+ export declare function chunkOfFrame(frame: ChatFrame, transient?: boolean): UIMessageChunk;
21
+ /** What the body of a turn workflow writes to its stream, and what each of its tool steps writes. */
22
+ export type TurnStreamWriter = {
23
+ /** The emit sink of the loop of the turn. */
24
+ readonly emit: EmitFn;
25
+ /** The writer that the tool steps of the turn give their chunks to, through the library. */
26
+ readonly toolWriter: UIMessageStreamWriter;
27
+ /** Write one frame from the body of the workflow. */
28
+ write(frame: ChatFrame): Promise<void>;
29
+ /** Wait for each write in flight. A failed write fails the call. */
30
+ settle(): Promise<void>;
31
+ };
32
+ /**
33
+ * The writer of the stream of a turn workflow. `observe` gets each frame of the turn that goes to the stream: the
34
+ * frames of the body, and the frames of each tool step, the frames that a replay of a step gives again included.
35
+ *
36
+ * From the body a write is checkpointed, thus a replay writes nothing again. From a step a write is at-least-once,
37
+ * and a fold of the frames by the id of a tool call or a part makes a second copy harmless.
38
+ */
39
+ export declare function createTurnStreamWriter(rootSource: EventSource, observe: (frame: ChatFrame) => void): TurnStreamWriter;
40
+ /**
41
+ * The frames of one chunk of the stream. The text of a model call is the text of the root agent, because a
42
+ * sub-agent writes to the stream of its own workflow. The end chunks of the library carry no fact of the turn,
43
+ * except the error and the abort of a workflow that ended before the turn wrote its own end.
44
+ */
45
+ export declare function framesOfChunk(chunk: UIMessageChunk, rootSource: EventSource): ChatFrame[];
46
+ export type ReadChatTurnOptions = {
47
+ /**
48
+ * The source of the root agent of the turn, which the text of each model call takes. Absent: the source of the
49
+ * first frame of the harness, which the turn writes before its first model call.
50
+ */
51
+ readonly rootSource?: EventSource;
52
+ /** A `DBOSClient` for a process that did not launch DBOS. Absent: the `DBOS` of this process. */
53
+ readonly client?: DurableStreamSource;
54
+ };
55
+ /**
56
+ * Read the frames of a turn from its start, live, until the turn ends. A second read gives the same frames.
57
+ *
58
+ * The read merges the stream of each sub-agent child that the turn names, in the order of arrival. A child stream
59
+ * gives only the frames of the harness: the child ends before its caller continues, and the result of its tool call
60
+ * tells its outcome. The end frame of the turn comes last.
61
+ */
62
+ export declare function readChatTurn(turnId: string, options: ReadChatTurnOptions): AsyncGenerator<ChatFrame>;