@inflexa-ai/harness 0.45.1 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (789) 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 +307 -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 +23 -7
  174. package/dist/lib/hooks.js +17 -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 +161 -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 +34 -0
  256. package/dist/loop/turn-credentials.js +73 -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/types.d.ts +55 -94
  304. package/dist/reference-data/catalog.d.ts +2 -15
  305. package/dist/reference-data/catalog.js +25 -8
  306. package/dist/reference-data/receipt.d.ts +2 -2
  307. package/dist/report-model/assert-rules.js +1 -1
  308. package/dist/report-model/authoring-grammar.d.ts +211 -233
  309. package/dist/report-model/block-walk.d.ts +10 -10
  310. package/dist/report-model/block-walk.js +2 -0
  311. package/dist/report-model/draft-finish.d.ts +8 -8
  312. package/dist/report-model/draft-finish.js +1 -1
  313. package/dist/report-model/draft-hash.js +8 -7
  314. package/dist/report-model/draft-operations.d.ts +22 -10
  315. package/dist/report-model/draft-operations.js +48 -30
  316. package/dist/report-model/draft-read.d.ts +19 -7
  317. package/dist/report-model/draft-read.js +16 -6
  318. package/dist/report-model/draft.d.ts +844 -2
  319. package/dist/report-model/draft.js +3 -1
  320. package/dist/report-model/fixture-resolver.js +39 -16
  321. package/dist/report-model/pin-snapshot.d.ts +2 -2
  322. package/dist/report-model/pin-snapshot.js +15 -15
  323. package/dist/report-model/production-resolver.d.ts +18 -18
  324. package/dist/report-model/production-resolver.js +50 -42
  325. package/dist/report-model/reference-resolver.d.ts +26 -10
  326. package/dist/report-model/reference-resolver.js +68 -5
  327. package/dist/report-model/reference-stamp.js +30 -38
  328. package/dist/report-model/structural-validation.js +12 -4
  329. package/dist/report-model/validate.d.ts +7 -7
  330. package/dist/report-model/validate.js +6 -6
  331. package/dist/report-render/assets.d.ts +2 -2
  332. package/dist/report-render/assets.js +27 -3
  333. package/dist/report-render/chart-export.d.ts +10 -2
  334. package/dist/report-render/chart-export.js +37 -11
  335. package/dist/report-render/chart-presets.d.ts +8 -8
  336. package/dist/report-render/chart-presets.js +3 -3
  337. package/dist/report-render/chart-renderers.d.ts +23 -16
  338. package/dist/report-render/chart-renderers.js +74 -53
  339. package/dist/report-render/chart-toolbox.d.ts +2 -2
  340. package/dist/report-render/chart-toolbox.js +7 -6
  341. package/dist/report-render/chart.d.ts +15 -16
  342. package/dist/report-render/chart.js +369 -252
  343. package/dist/report-render/design.d.ts +36 -297
  344. package/dist/report-render/design.js +0 -12
  345. package/dist/report-render/figures/common.d.ts +12 -12
  346. package/dist/report-render/figures/common.js +42 -31
  347. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  348. package/dist/report-render/figures/dendrogram.js +10 -10
  349. package/dist/report-render/figures/dense.js +15 -8
  350. package/dist/report-render/figures/dotplot.js +46 -33
  351. package/dist/report-render/figures/embedding.js +52 -43
  352. package/dist/report-render/figures/equal-units.d.ts +10 -10
  353. package/dist/report-render/figures/equal-units.js +27 -27
  354. package/dist/report-render/figures/forest.js +9 -7
  355. package/dist/report-render/figures/gsea.js +21 -11
  356. package/dist/report-render/figures/heatmap.js +13 -9
  357. package/dist/report-render/figures/index.d.ts +10 -10
  358. package/dist/report-render/figures/index.js +4 -2
  359. package/dist/report-render/figures/km.js +10 -9
  360. package/dist/report-render/figures/label-room.d.ts +12 -12
  361. package/dist/report-render/figures/label-room.js +7 -2
  362. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  363. package/dist/report-render/figures/locuszoom.js +59 -31
  364. package/dist/report-render/figures/lollipop.js +3 -2
  365. package/dist/report-render/figures/ma.js +8 -4
  366. package/dist/report-render/figures/manhattan.d.ts +1 -2
  367. package/dist/report-render/figures/manhattan.js +52 -34
  368. package/dist/report-render/figures/oncoprint.js +4 -5
  369. package/dist/report-render/figures/pca.js +25 -11
  370. package/dist/report-render/figures/qq.js +20 -9
  371. package/dist/report-render/figures/roc.js +1 -1
  372. package/dist/report-render/figures/sankey.d.ts +2 -2
  373. package/dist/report-render/figures/sankey.js +11 -10
  374. package/dist/report-render/figures/upset.d.ts +6 -6
  375. package/dist/report-render/figures/upset.js +7 -4
  376. package/dist/report-render/figures/volcano.js +12 -10
  377. package/dist/report-render/hybrid-svg.d.ts +4 -4
  378. package/dist/report-render/hybrid-svg.js +7 -5
  379. package/dist/report-render/number-format.d.ts +4 -4
  380. package/dist/report-render/number-format.js +62 -27
  381. package/dist/report-render/page.js +2 -1
  382. package/dist/report-render/provenance-data.d.ts +2 -2
  383. package/dist/report-render/references.d.ts +4 -4
  384. package/dist/report-render/render.d.ts +2 -2
  385. package/dist/report-render/render.js +10 -11
  386. package/dist/report-render/script-json.js +1 -1
  387. package/dist/report-render/table-data.d.ts +6 -6
  388. package/dist/report-render/test/options.d.ts +49 -0
  389. package/dist/report-render/test/options.js +143 -0
  390. package/dist/report-render/test/page-function.d.ts +19 -0
  391. package/dist/report-render/test/page-function.js +33 -0
  392. package/dist/report-render/types.d.ts +10 -10
  393. package/dist/report-render/value-bridge.d.ts +4 -4
  394. package/dist/report-render/value-bridge.js +27 -14
  395. package/dist/report-render/views/chart-view.d.ts +2 -2
  396. package/dist/report-render/views/chart-view.js +2 -2
  397. package/dist/report-render/views/lineage.d.ts +6 -6
  398. package/dist/report-render/views/lineage.js +2 -0
  399. package/dist/report-render/views/page-view.d.ts +2 -2
  400. package/dist/report-render/views/page-view.js +1 -0
  401. package/dist/report-render/views/prose.js +25 -8
  402. package/dist/report-render/views/references-view.js +12 -1
  403. package/dist/report-render/views/values.js +1 -1
  404. package/dist/runtime/assemble.d.ts +53 -26
  405. package/dist/runtime/assemble.js +103 -56
  406. package/dist/runtime/boot.d.ts +8 -7
  407. package/dist/runtime/boot.js +1 -1
  408. package/dist/runtime/connection-budget.d.ts +6 -6
  409. package/dist/runtime/connection-budget.js +1 -1
  410. package/dist/runtime/dbos.d.ts +29 -19
  411. package/dist/runtime/dbos.js +35 -20
  412. package/dist/runtime/result-serialization.js +18 -5
  413. package/dist/runtime/shutdown.d.ts +2 -2
  414. package/dist/sandbox/client.d.ts +7 -3
  415. package/dist/sandbox/cpu-files.d.ts +2 -2
  416. package/dist/sandbox/cpu-files.js +21 -4
  417. package/dist/sandbox/create-sandbox.d.ts +7 -8
  418. package/dist/sandbox/create-sandbox.js +6 -12
  419. package/dist/sandbox/docker-client.d.ts +48 -3
  420. package/dist/sandbox/docker-client.js +10 -6
  421. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  422. package/dist/sandbox/exec-outcome.d.ts +2 -2
  423. package/dist/sandbox/exec-outcome.js +1 -1
  424. package/dist/sandbox/exec.d.ts +10 -6
  425. package/dist/sandbox/exec.js +27 -12
  426. package/dist/sandbox/execution-id.js +14 -6
  427. package/dist/sandbox/farm.d.ts +2 -2
  428. package/dist/sandbox/farm.js +22 -27
  429. package/dist/sandbox/identity.d.ts +7 -0
  430. package/dist/sandbox/identity.js +14 -3
  431. package/dist/sandbox/image-packages.js +15 -27
  432. package/dist/sandbox/k8s-client.d.ts +35 -8
  433. package/dist/sandbox/k8s-client.js +6 -5
  434. package/dist/sandbox/labels.js +1 -0
  435. package/dist/sandbox/liveness.js +3 -1
  436. package/dist/sandbox/mount-plan.d.ts +10 -10
  437. package/dist/sandbox/mount-plan.js +13 -14
  438. package/dist/sandbox/notification-sweep.d.ts +4 -4
  439. package/dist/sandbox/notification-sweep.js +4 -7
  440. package/dist/sandbox/package-identity.d.ts +6 -13
  441. package/dist/sandbox/package-identity.js +46 -28
  442. package/dist/sandbox/reaper.d.ts +10 -10
  443. package/dist/sandbox/reaper.js +4 -6
  444. package/dist/sandbox/sandbox-error.d.ts +2 -9
  445. package/dist/sandbox/sandbox-error.js +21 -8
  446. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  447. package/dist/sandbox/sandbox-step-translate.js +22 -8
  448. package/dist/sandbox/step-sandbox.d.ts +47 -0
  449. package/dist/sandbox/step-sandbox.js +53 -0
  450. package/dist/sandbox/types.d.ts +18 -19
  451. package/dist/sandbox/types.js +1 -1
  452. package/dist/schemas/artifact-manifest.d.ts +4 -4
  453. package/dist/schemas/data-profile-schemas.d.ts +343 -298
  454. package/dist/schemas/file-metadata.js +2 -4
  455. package/dist/schemas/plan-schemas.d.ts +31 -31
  456. package/dist/schemas/run-synthesis.d.ts +95 -26
  457. package/dist/schemas/run-synthesis.js +3 -1
  458. package/dist/schemas/validate-plan.d.ts +4 -4
  459. package/dist/schemas/validate-plan.js +17 -5
  460. package/dist/schemas/workflow-state.d.ts +19 -19
  461. package/dist/schemas/workflow-state.js +2 -2
  462. package/dist/state/active-turns.d.ts +36 -0
  463. package/dist/state/active-turns.js +67 -0
  464. package/dist/state/analyses-metrics.d.ts +8 -8
  465. package/dist/state/analyses-metrics.js +4 -4
  466. package/dist/state/analyses.d.ts +0 -14
  467. package/dist/state/analyses.js +0 -32
  468. package/dist/state/artifacts.d.ts +32 -19
  469. package/dist/state/artifacts.js +28 -5
  470. package/dist/state/data-profile.d.ts +2 -2
  471. package/dist/state/db.d.ts +12 -2
  472. package/dist/state/db.js +5 -0
  473. package/dist/state/edit-intents.d.ts +4 -0
  474. package/dist/state/edit-intents.js +71 -0
  475. package/dist/state/index.d.ts +4 -4
  476. package/dist/state/index.js +2 -2
  477. package/dist/state/init.d.ts +2 -1
  478. package/dist/state/init.js +5 -2
  479. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  480. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  481. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  482. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  483. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  484. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  485. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  486. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  487. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  488. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  489. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  490. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  491. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  492. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  493. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  494. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  495. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  496. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  497. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  498. package/dist/state/migrations/index.js +18 -0
  499. package/dist/state/paused-work.d.ts +52 -0
  500. package/dist/state/paused-work.js +105 -0
  501. package/dist/state/plans.d.ts +27 -8
  502. package/dist/state/plans.js +14 -11
  503. package/dist/state/purge-analysis.d.ts +6 -6
  504. package/dist/state/purge-analysis.js +10 -2
  505. package/dist/state/report-session-state.d.ts +43 -18
  506. package/dist/state/report-session-state.js +43 -4
  507. package/dist/state/report-versions.d.ts +16 -11
  508. package/dist/state/report-versions.js +5 -3
  509. package/dist/state/runs.d.ts +30 -19
  510. package/dist/state/runs.js +43 -51
  511. package/dist/state/schema.d.ts +18 -21
  512. package/dist/state/schema.js +4 -5
  513. package/dist/state/snapshot-parse.d.ts +2 -2
  514. package/dist/state/snapshot-parse.js +14 -8
  515. package/dist/state/step-executions.d.ts +20 -8
  516. package/dist/state/step-executions.js +6 -4
  517. package/dist/state/tool-outputs.d.ts +2 -2
  518. package/dist/state/tool-outputs.js +2 -1
  519. package/dist/state/vector-store.d.ts +16 -16
  520. package/dist/state/vector-store.js +11 -7
  521. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  522. package/dist/tasks/data-profile-absorb.js +21 -16
  523. package/dist/tasks/data-profile-activity.d.ts +5 -5
  524. package/dist/tasks/data-profile-activity.js +5 -5
  525. package/dist/tasks/data-profile-index.d.ts +4 -4
  526. package/dist/tasks/data-profile-index.js +32 -17
  527. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  528. package/dist/tasks/data-profile-resolve.js +88 -62
  529. package/dist/tasks/data-profile.d.ts +40 -31
  530. package/dist/tasks/data-profile.js +138 -95
  531. package/dist/tasks/extract-values.d.ts +26 -79
  532. package/dist/tasks/extract-values.js +48 -108
  533. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  534. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  535. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  536. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  537. package/dist/testing.d.ts +60 -0
  538. package/dist/testing.js +96 -0
  539. package/dist/tools/ad-hoc-router.d.ts +9 -9
  540. package/dist/tools/ad-hoc-router.js +65 -52
  541. package/dist/tools/analysis-invocation.d.ts +7 -0
  542. package/dist/tools/analysis-invocation.js +29 -5
  543. package/dist/tools/approval/contract.d.ts +8 -52
  544. package/dist/tools/approval/contract.js +7 -36
  545. package/dist/tools/approval/gateway.d.ts +27 -28
  546. package/dist/tools/approval/gateway.js +33 -130
  547. package/dist/tools/approval/queries.d.ts +6 -11
  548. package/dist/tools/approval/queries.js +43 -29
  549. package/dist/tools/approval/uuidv7.js +2 -2
  550. package/dist/tools/bio/chembl.d.ts +3 -3
  551. package/dist/tools/bio/chembl.js +10 -0
  552. package/dist/tools/bio/comptox.d.ts +25 -8
  553. package/dist/tools/bio/comptox.js +4 -2
  554. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  555. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  556. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  557. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  558. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  559. package/dist/tools/bio/keys.d.ts +2 -2
  560. package/dist/tools/bio/keys.js +3 -3
  561. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  562. package/dist/tools/bio/lookup-annotation.js +3 -0
  563. package/dist/tools/bio/opentargets.d.ts +1 -1
  564. package/dist/tools/bio/opentargets.js +6 -0
  565. package/dist/tools/bio/pubchem.d.ts +2 -2
  566. package/dist/tools/bio/pubchem.js +6 -0
  567. package/dist/tools/bio/pubmed.d.ts +26 -16
  568. package/dist/tools/bio/pubmed.js +9 -3
  569. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  570. package/dist/tools/bio/search-clinical-trials.js +5 -1
  571. package/dist/tools/bio/search-faers.d.ts +2 -2
  572. package/dist/tools/bio/search-faers.js +1 -1
  573. package/dist/tools/bio/search-gene.d.ts +2 -2
  574. package/dist/tools/bio/search-gene.js +1 -0
  575. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  576. package/dist/tools/bio/search-geo-datasets.js +5 -5
  577. package/dist/tools/bio/search-interactions.d.ts +1 -1
  578. package/dist/tools/bio/search-patents.d.ts +28 -22
  579. package/dist/tools/bio/search-patents.js +20 -17
  580. package/dist/tools/bio/search-protein.d.ts +2 -2
  581. package/dist/tools/bio/search-protein.js +1 -1
  582. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  583. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  584. package/dist/tools/bio/target-safety.d.ts +8 -8
  585. package/dist/tools/bio/target-safety.js +11 -6
  586. package/dist/tools/capability-data.d.ts +9 -5
  587. package/dist/tools/capability-data.js +2 -1
  588. package/dist/tools/define-tool.d.ts +55 -46
  589. package/dist/tools/define-tool.js +39 -27
  590. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  591. package/dist/tools/display/normalize-echart-spec.js +51 -27
  592. package/dist/tools/display/show-user.d.ts +2 -2
  593. package/dist/tools/display/show-user.js +1 -1
  594. package/dist/tools/execute-analysis.d.ts +19 -10
  595. package/dist/tools/execute-analysis.js +83 -62
  596. package/dist/tools/knowledge/check.d.ts +166 -44
  597. package/dist/tools/knowledge/check.js +5 -3
  598. package/dist/tools/knowledge/client.d.ts +31 -62
  599. package/dist/tools/knowledge/client.js +44 -27
  600. package/dist/tools/knowledge/environment.d.ts +6 -6
  601. package/dist/tools/knowledge/environment.js +18 -7
  602. package/dist/tools/knowledge/index.d.ts +2 -2
  603. package/dist/tools/knowledge/index.js +9 -9
  604. package/dist/tools/knowledge/local-slots.d.ts +4 -4
  605. package/dist/tools/knowledge/local-slots.js +11 -4
  606. package/dist/tools/knowledge/pin.d.ts +2 -2
  607. package/dist/tools/knowledge/recommend.d.ts +20 -45
  608. package/dist/tools/knowledge/recommend.js +27 -19
  609. package/dist/tools/knowledge/situation.d.ts +40 -40
  610. package/dist/tools/knowledge/situation.js +2 -9
  611. package/dist/tools/knowledge/skeleton.d.ts +4 -4
  612. package/dist/tools/knowledge/skeleton.js +10 -11
  613. package/dist/tools/knowledge/template.d.ts +20 -18
  614. package/dist/tools/knowledge/template.js +38 -32
  615. package/dist/tools/lib/alphafold-client.js +2 -1
  616. package/dist/tools/lib/amass-client.d.ts +28 -28
  617. package/dist/tools/lib/amass-client.js +20 -10
  618. package/dist/tools/lib/api-utils.d.ts +13 -3
  619. package/dist/tools/lib/api-utils.js +17 -3
  620. package/dist/tools/lib/bgee-client.d.ts +6 -6
  621. package/dist/tools/lib/bgee-client.js +16 -10
  622. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  623. package/dist/tools/lib/cbioportal-client.js +9 -8
  624. package/dist/tools/lib/chembl-client.d.ts +14 -14
  625. package/dist/tools/lib/chembl-client.js +11 -4
  626. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  627. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  628. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  629. package/dist/tools/lib/clinical-trials-client.js +10 -10
  630. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  631. package/dist/tools/lib/clinvar-client.js +6 -6
  632. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  633. package/dist/tools/lib/ctx-ops.js +13 -10
  634. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  635. package/dist/tools/lib/dgidb-client.js +10 -12
  636. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  637. package/dist/tools/lib/ema-client.d.ts +2 -2
  638. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  639. package/dist/tools/lib/ensembl-client.js +5 -4
  640. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  641. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  642. package/dist/tools/lib/html-text.d.ts +6 -0
  643. package/dist/tools/lib/html-text.js +9 -0
  644. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  645. package/dist/tools/lib/identifier-resolver.js +7 -3
  646. package/dist/tools/lib/impc-client.d.ts +8 -8
  647. package/dist/tools/lib/impc-client.js +46 -35
  648. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  649. package/dist/tools/lib/iuphar-client.js +7 -16
  650. package/dist/tools/lib/monarch-client.d.ts +4 -4
  651. package/dist/tools/lib/openfda-client.d.ts +22 -22
  652. package/dist/tools/lib/openfda-client.js +23 -22
  653. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  654. package/dist/tools/lib/pathway-client.d.ts +4 -4
  655. package/dist/tools/lib/pathway-client.js +15 -19
  656. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  657. package/dist/tools/lib/pharmgkb-client.js +1 -1
  658. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  659. package/dist/tools/lib/protein-family-modality.js +0 -2
  660. package/dist/tools/lib/protein-family-normalize.js +7 -0
  661. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  662. package/dist/tools/lib/pubchem-client.js +1 -0
  663. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  664. package/dist/tools/lib/pubchem-ops.js +8 -0
  665. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  666. package/dist/tools/lib/pubmed-client.js +1 -1
  667. package/dist/tools/lib/string-client.d.ts +6 -6
  668. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  669. package/dist/tools/lib/uniprot-client.js +5 -1
  670. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  671. package/dist/tools/memory/update-working-memory.js +21 -3
  672. package/dist/tools/read-tool-output.js +8 -2
  673. package/dist/tools/registry.d.ts +2 -2
  674. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  675. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  676. package/dist/tools/report-session/derive-table.d.ts +19 -59
  677. package/dist/tools/report-session/derive-table.js +120 -122
  678. package/dist/tools/report-session/examine-page.d.ts +6 -6
  679. package/dist/tools/report-session/examine-page.js +14 -12
  680. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  681. package/dist/tools/report-session/list-artifacts.js +5 -5
  682. package/dist/tools/report-session/page-faults.d.ts +6 -6
  683. package/dist/tools/report-session/page-faults.js +3 -1
  684. package/dist/tools/report-session/preview-report.d.ts +4 -3
  685. package/dist/tools/report-session/preview-report.js +26 -7
  686. package/dist/tools/report-session/record-version.d.ts +9 -4
  687. package/dist/tools/report-session/record-version.js +16 -9
  688. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  689. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  690. package/dist/tools/research/generate-analogy-report.js +80 -76
  691. package/dist/tools/research/generate-plan.d.ts +16 -16
  692. package/dist/tools/research/generate-plan.js +410 -374
  693. package/dist/tools/research/guarded-address.js +3 -2
  694. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  695. package/dist/tools/research/inspect-data-profile.js +26 -25
  696. package/dist/tools/research/inspect-run.d.ts +54 -27
  697. package/dist/tools/research/inspect-run.js +50 -40
  698. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  699. package/dist/tools/research/literature-reviewer.js +29 -28
  700. package/dist/tools/research/search-arxiv.d.ts +1 -1
  701. package/dist/tools/research/search-arxiv.js +1 -1
  702. package/dist/tools/research/search-github-repos.d.ts +10 -7
  703. package/dist/tools/research/search-github-repos.js +25 -22
  704. package/dist/tools/research/search-semantic-scholar.js +1 -1
  705. package/dist/tools/research/searxng-engine.d.ts +2 -2
  706. package/dist/tools/research/searxng-engine.js +6 -4
  707. package/dist/tools/research/web-fetch.d.ts +24 -21
  708. package/dist/tools/research/web-fetch.js +65 -74
  709. package/dist/tools/research/web-search.d.ts +26 -17
  710. package/dist/tools/research/web-search.js +26 -21
  711. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  712. package/dist/tools/sandbox/link-packages.js +11 -8
  713. package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
  714. package/dist/tools/sandbox/list-available-packages.js +31 -25
  715. package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
  716. package/dist/tools/sandbox/list-available-refs.js +61 -36
  717. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  718. package/dist/tools/sandbox/report-blocker.js +23 -73
  719. package/dist/tools/sandbox/skills.d.ts +16 -12
  720. package/dist/tools/sandbox/skills.js +16 -12
  721. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  722. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  723. package/dist/tools/start-report-session.d.ts +13 -5
  724. package/dist/tools/start-report-session.js +35 -8
  725. package/dist/tools/terminal-text.d.ts +5 -2
  726. package/dist/tools/terminal-text.js +35 -3
  727. package/dist/tools/workspace/decision-record.d.ts +4 -4
  728. package/dist/tools/workspace/decision-record.js +23 -13
  729. package/dist/tools/workspace/edit-file.d.ts +59 -20
  730. package/dist/tools/workspace/edit-file.js +81 -16
  731. package/dist/tools/workspace/execute-command.d.ts +15 -13
  732. package/dist/tools/workspace/execute-command.js +11 -9
  733. package/dist/tools/workspace/file-stat.d.ts +6 -3
  734. package/dist/tools/workspace/grep.d.ts +10 -7
  735. package/dist/tools/workspace/grep.js +9 -3
  736. package/dist/tools/workspace/list-files.d.ts +6 -3
  737. package/dist/tools/workspace/mutator.d.ts +28 -15
  738. package/dist/tools/workspace/mutator.js +107 -53
  739. package/dist/tools/workspace/read-file.d.ts +8 -5
  740. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  741. package/dist/tools/workspace/result-bounds.js +4 -2
  742. package/dist/tools/workspace/run-exec.d.ts +2 -2
  743. package/dist/tools/workspace/run-exec.js +3 -3
  744. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  745. package/dist/tools/workspace/scan-inputs.js +17 -5
  746. package/dist/tools/workspace/show-file.d.ts +1 -1
  747. package/dist/tools/workspace/show-file.js +2 -1
  748. package/dist/tools/workspace/show-plan.d.ts +8 -5
  749. package/dist/tools/workspace/show-plan.js +9 -8
  750. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  751. package/dist/tools/workspace/workspace-search.js +27 -14
  752. package/dist/tools/workspace/write-file.d.ts +9 -7
  753. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  754. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  755. package/dist/workflows/execute-analysis.d.ts +46 -62
  756. package/dist/workflows/execute-analysis.js +137 -219
  757. package/dist/workflows/pause.d.ts +71 -0
  758. package/dist/workflows/pause.js +173 -0
  759. package/dist/workflows/sandbox-step.d.ts +38 -61
  760. package/dist/workflows/sandbox-step.js +99 -106
  761. package/dist/workflows/test/sql-writes.d.ts +21 -0
  762. package/dist/workflows/test/sql-writes.js +36 -0
  763. package/dist/workspace/filesystem.d.ts +6 -6
  764. package/dist/workspace/filesystem.js +10 -8
  765. package/dist/workspace/paths.d.ts +1 -1
  766. package/dist/workspace/paths.js +15 -4
  767. package/dist/workspace/search-config.d.ts +2 -2
  768. package/dist/workspace/search-config.js +1 -1
  769. package/package.json +21 -22
  770. package/dist/loop/call-guard.d.ts +0 -50
  771. package/dist/loop/call-guard.js +0 -90
  772. package/dist/loop/continue-agent.d.ts +0 -40
  773. package/dist/loop/continue-agent.js +0 -38
  774. package/dist/loop/genai-spans.d.ts +0 -47
  775. package/dist/loop/genai-spans.js +0 -134
  776. package/dist/loop/run-agent.d.ts +0 -245
  777. package/dist/loop/run-agent.js +0 -1124
  778. package/dist/loop/run-step.d.ts +0 -29
  779. package/dist/loop/run-step.js +0 -34
  780. package/dist/loop/run-to-terminal.d.ts +0 -66
  781. package/dist/loop/run-to-terminal.js +0 -93
  782. package/dist/loop/tool-mask.d.ts +0 -23
  783. package/dist/loop/tool-mask.js +0 -46
  784. package/dist/providers/streaming-chat.d.ts +0 -32
  785. package/dist/providers/streaming-chat.js +0 -91
  786. package/dist/tasks/derive-table-exec.d.ts +0 -54
  787. package/dist/tasks/derive-table-exec.js +0 -86
  788. package/dist/workflows/suspension.d.ts +0 -32
  789. package/dist/workflows/suspension.js +0 -38
@@ -10,7 +10,7 @@ import type { Logger } from "../lib/logger.js";
10
10
  import { type SuspendOn } from "./errors.js";
11
11
  import type { ResolveRequestHeaders } from "./request-headers.js";
12
12
  import type { EmbeddingProvider, FetchLike } from "./types.js";
13
- export interface EmbeddingProviderDeps {
13
+ export type EmbeddingProviderDeps = {
14
14
  /** Gateway base URL — all embedding traffic is routed through it. */
15
15
  readonly baseURL: string;
16
16
  /** API token presented to the gateway. */
@@ -34,5 +34,5 @@ export interface EmbeddingProviderDeps {
34
34
  * tests inject a fake to feed a recorded response.
35
35
  */
36
36
  readonly fetch?: FetchLike;
37
- }
37
+ };
38
38
  export declare function createEmbeddingProvider(deps: EmbeddingProviderDeps): EmbeddingProvider;
@@ -27,7 +27,7 @@ export function createEmbeddingProvider(deps) {
27
27
  baseURL: deps.baseURL,
28
28
  apiKey: deps.token,
29
29
  maxRetries: 0,
30
- ...(deps.fetch ? { fetch: deps.fetch } : {}),
30
+ fetch: deps.fetch,
31
31
  });
32
32
  const model = deps.model ?? DEFAULT_EMBEDDING_MODEL;
33
33
  const dimensions = deps.dimensions ?? DEFAULT_EMBEDDING_DIMENSIONS;
@@ -91,6 +91,26 @@ export type SuspendError = Extract<ProviderError, {
91
91
  export declare function findSuspendError(err: unknown): SuspendError | undefined;
92
92
  /** Find a `ProviderError` of any kind, by the walk of {@link findSuspendError}. */
93
93
  export declare function findProviderError(err: unknown): ProviderError | undefined;
94
+ /**
95
+ * The class of a model call that failed after its retries. Each failure that
96
+ * time or a person can repair is named here, and nowhere else:
97
+ *
98
+ * - `outage`: a transient provider failure that outlived each retry.
99
+ * - `billing`: a status that the `suspendOn` map of the host names, with its reason.
100
+ * - `credential`: the endpoint refused the credential.
101
+ * - `other`: each other failure.
102
+ */
103
+ export type ModelFailure = {
104
+ readonly kind: "outage";
105
+ } | {
106
+ readonly kind: "billing";
107
+ readonly reason: string;
108
+ } | {
109
+ readonly kind: "credential";
110
+ } | {
111
+ readonly kind: "other";
112
+ };
113
+ export declare function modelFailureOf(err: unknown): ModelFailure;
94
114
  /**
95
115
  * Turn a caught SDK throwable into a `ProviderError` value. Routes through
96
116
  * `classifyProviderError` with the `suspendOn` map of the provider, so the
@@ -98,8 +118,8 @@ export declare function findProviderError(err: unknown): ProviderError | undefin
98
118
  * classification and a mapped status becomes a `suspend` error. `cause` is the
99
119
  * original throwable verbatim.
100
120
  *
101
- * Idempotent: `chatStream` throws a `ProviderError` value, which
102
- * `streaming-chat`'s `catch` re-wraps by calling this again. Returning an
121
+ * Idempotent: the retry envelope of the provider throws a `ProviderError`
122
+ * value, and a caller can wrap it again. Returning an
103
123
  * already-constructed `ProviderError` unchanged stops that second pass from
104
124
  * `String()`-ing the object (a `ProviderError` is not an `Error`) into a
105
125
  * `"[object Object]"` message that would bury the real inner one.
@@ -17,7 +17,10 @@
17
17
  * which is a different remedy from every other non-retryable 4xx, so it is a
18
18
  * different kind.
19
19
  */
20
+ import { errorMessageOf } from "../lib/thrown.js";
21
+ import { textOf } from "../lib/unknown-text.js";
20
22
  import { redactSecrets } from "../input-sanitization.js";
23
+ import { collapseWhitespace } from "../lib/text.js";
21
24
  /**
22
25
  * The sentinel that the request-timeout guard uses as an abort reason. The guard
23
26
  * arms a timer for each fetch attempt. On expiry the guard aborts the attempt
@@ -47,8 +50,11 @@ export const DEFAULT_SUSPEND_ON = { 402: "payment_required" };
47
50
  export function isProviderError(value) {
48
51
  if (typeof value !== "object" || value === null)
49
52
  return false;
50
- const v = value;
51
- return (v.type === "auth" || v.type === "suspend" || v.type === "provider") && typeof v.retryable === "boolean" && typeof v.message === "string";
53
+ if (!("type" in value && "retryable" in value && "message" in value))
54
+ return false;
55
+ return ((value.type === "auth" || value.type === "suspend" || value.type === "provider") &&
56
+ typeof value.retryable === "boolean" &&
57
+ typeof value.message === "string");
52
58
  }
53
59
  /**
54
60
  * Find a `suspend` error on a failure or on its `cause` chain. A step boundary
@@ -61,12 +67,25 @@ export function isProviderError(value) {
61
67
  */
62
68
  export function findSuspendError(err) {
63
69
  const asSuspend = (value) => (isProviderError(value) && value.type === "suspend" ? value : undefined);
64
- return findInCauseChain(err, (link) => asSuspend(link) ?? (typeof link === "object" && link !== null ? asSuspend(link.value) : undefined));
70
+ return findInCauseChain(err, (link) => asSuspend(link) ?? ("value" in link ? asSuspend(link.value) : undefined));
65
71
  }
66
72
  /** Find a `ProviderError` of any kind, by the walk of {@link findSuspendError}. */
67
73
  export function findProviderError(err) {
68
74
  const asProviderError = (value) => (isProviderError(value) ? value : undefined);
69
- return findInCauseChain(err, (link) => asProviderError(link) ?? (typeof link === "object" && link !== null ? asProviderError(link.value) : undefined));
75
+ return findInCauseChain(err, (link) => asProviderError(link) ?? ("value" in link ? asProviderError(link.value) : undefined));
76
+ }
77
+ export function modelFailureOf(err) {
78
+ const error = findProviderError(err);
79
+ switch (error?.type) {
80
+ case "suspend":
81
+ return { kind: "billing", reason: error.reason };
82
+ case "auth":
83
+ return { kind: "credential" };
84
+ case "provider":
85
+ return error.retryable ? { kind: "outage" } : { kind: "other" };
86
+ case undefined:
87
+ return { kind: "other" };
88
+ }
70
89
  }
71
90
  /**
72
91
  * Turn a caught SDK throwable into a `ProviderError` value. Routes through
@@ -75,8 +94,8 @@ export function findProviderError(err) {
75
94
  * classification and a mapped status becomes a `suspend` error. `cause` is the
76
95
  * original throwable verbatim.
77
96
  *
78
- * Idempotent: `chatStream` throws a `ProviderError` value, which
79
- * `streaming-chat`'s `catch` re-wraps by calling this again. Returning an
97
+ * Idempotent: the retry envelope of the provider throws a `ProviderError`
98
+ * value, and a caller can wrap it again. Returning an
80
99
  * already-constructed `ProviderError` unchanged stops that second pass from
81
100
  * `String()`-ing the object (a `ProviderError` is not an `Error`) into a
82
101
  * `"[object Object]"` message that would bury the real inner one.
@@ -94,12 +113,12 @@ export function toProviderError(e, workload, suspendOn = DEFAULT_SUSPEND_ON) {
94
113
  return {
95
114
  type: "provider",
96
115
  retryable: true,
97
- message: `The provider sent no data for ${workload} within the request timeout of ${timeout.requestTimeoutMs} ms.`,
116
+ message: `The provider sent no data for ${workload} within the request timeout of ${timeout} ms.`,
98
117
  cause: e,
99
118
  };
100
119
  }
101
120
  const classified = classifyProviderError(e, suspendOn);
102
- const detail = e instanceof Error ? e.message : String(e);
121
+ const detail = errorMessageOf(e) ?? textOf(e);
103
122
  if (classified.kind === "auth") {
104
123
  return {
105
124
  type: "auth",
@@ -165,10 +184,10 @@ const PROVIDER_BODY_EXCERPT_MAX_LEN = 120;
165
184
  * strings) and is safe on biological data, so a legitimate error body passes through intact.
166
185
  */
167
186
  function excerptResponseBody(body) {
168
- const singleLine = redactSecrets(body).replace(/\s+/g, " ").trim();
187
+ const singleLine = collapseWhitespace(redactSecrets(body));
169
188
  // Slice by CODE POINT, not UTF-16 unit: a raw byte body can carry astral characters, and a plain
170
189
  // `.slice` could bisect a surrogate pair into a lone half that renders as U+FFFD.
171
- const chars = [...singleLine];
190
+ const chars = Array.from(singleLine);
172
191
  return chars.length > PROVIDER_BODY_EXCERPT_MAX_LEN ? chars.slice(0, PROVIDER_BODY_EXCERPT_MAX_LEN - 1).join("") + "…" : singleLine;
173
192
  }
174
193
  /** Max links walked on the `cause` chain looking for a structured status. */
@@ -185,20 +204,41 @@ const CONNECTION_ERROR_CODES = new Set([
185
204
  "UND_ERR_HEADERS_TIMEOUT",
186
205
  "UND_ERR_SOCKET",
187
206
  ]);
188
- const CONNECTION_ERROR_PATTERN = /fetch failed|socket hang up|network error|connection (?:refused|reset|error|closed)|econnrefused|enotfound|etimedout|terminated/i;
207
+ /** The transport-failure phrases of the fetch stack, as the providers write them; the compare lowercases the link message. */
208
+ const CONNECTION_ERROR_PHRASES = [
209
+ "fetch failed",
210
+ "socket hang up",
211
+ "network error",
212
+ "connection refused",
213
+ "connection reset",
214
+ "connection error",
215
+ "connection closed",
216
+ "econnrefused",
217
+ "enotfound",
218
+ "etimedout",
219
+ "terminated",
220
+ ];
189
221
  /**
190
222
  * Walk the `cause` chain up to {@link MAX_CAUSE_HOPS} links, and return the first
191
223
  * result that `probe` gives. `probe` gives a value for a link that matches, or
192
224
  * `undefined` for a link that does not. The walk stops at the first match, at
193
- * the hop cap, or at the end of the chain.
225
+ * the hop cap, or at the end of the chain. Each probe receives a link that the
226
+ * walk verified to be an object, so the probe reads its fields through the `in`
227
+ * narrowing and no assertion restates the check.
194
228
  */
195
229
  function findInCauseChain(err, probe) {
196
230
  let cursor = err;
197
- for (let i = 0; i < MAX_CAUSE_HOPS && cursor; i++) {
231
+ for (let i = 0; i < MAX_CAUSE_HOPS; i++) {
232
+ // A link of a cause chain is whatever a `throw` carried — most links are Error
233
+ // instances, whose own fields a record schema cannot reach — so the gate is the
234
+ // hand object check (a null-prototype thrown value fails `instanceof Object`),
235
+ // and each probe narrows the fields it reads.
236
+ if (cursor === null || typeof cursor !== "object")
237
+ return undefined;
198
238
  const found = probe(cursor);
199
239
  if (found !== undefined)
200
240
  return found;
201
- cursor = cursor.cause;
241
+ cursor = "cause" in cursor ? cursor.cause : undefined;
202
242
  }
203
243
  return undefined;
204
244
  }
@@ -210,11 +250,10 @@ function findInCauseChain(err, probe) {
210
250
  */
211
251
  export function extractStatus(err) {
212
252
  return findInCauseChain(err, (link) => {
213
- const e = link;
214
- if (typeof e.status === "number")
215
- return e.status;
216
- if (typeof e.statusCode === "number")
217
- return e.statusCode;
253
+ if ("status" in link && typeof link.status === "number")
254
+ return link.status;
255
+ if ("statusCode" in link && typeof link.statusCode === "number")
256
+ return link.statusCode;
218
257
  return undefined;
219
258
  });
220
259
  }
@@ -228,29 +267,27 @@ export function extractStatus(err) {
228
267
  * `— response body:` segment says less than no segment at all.
229
268
  */
230
269
  function extractResponseBody(err) {
231
- let cursor = err;
232
- for (let i = 0; i < MAX_CAUSE_HOPS && cursor; i++) {
233
- const e = cursor;
234
- if (typeof e.responseBody === "string" && e.responseBody.trim() !== "")
235
- return e.responseBody;
236
- cursor = e.cause;
237
- }
238
- return undefined;
270
+ return findInCauseChain(err, (link) => {
271
+ if ("responseBody" in link && typeof link.responseBody === "string" && link.responseBody.trim() !== "")
272
+ return link.responseBody;
273
+ return undefined;
274
+ });
239
275
  }
240
276
  /**
241
- * Walk the `cause` chain for the request-timeout sentinel. The guard aborts a
242
- * fetch with a `RequestTimeoutError`. The SDK carries the abort reason down the
243
- * `cause` chain, thus the sentinel can sit one or more hops down.
277
+ * Walk the `cause` chain for the request-timeout bound. The guard aborts a fetch
278
+ * with a `RequestTimeoutError`. The SDK carries the abort reason down the `cause`
279
+ * chain, thus the sentinel can sit one or more hops down. The bound rides the
280
+ * sentinel, so the walk returns it directly.
244
281
  */
245
282
  function findRequestTimeout(err) {
246
283
  return findInCauseChain(err, (link) => {
247
284
  if (link instanceof RequestTimeoutError)
248
- return link;
249
- // A duplicate class identity across a realm boundary fails `instanceof`,
250
- // thus match the name and the field as a fallback.
251
- const e = link;
252
- if (e.name === "RequestTimeoutError" && typeof e.requestTimeoutMs === "number")
253
- return link;
285
+ return link.requestTimeoutMs;
286
+ // A duplicate class identity across a realm boundary fails `instanceof`, thus match
287
+ // the name and the field as a fallback.
288
+ if ("name" in link && link.name === "RequestTimeoutError" && "requestTimeoutMs" in link && typeof link.requestTimeoutMs === "number") {
289
+ return link.requestTimeoutMs;
290
+ }
254
291
  return undefined;
255
292
  });
256
293
  }
@@ -267,22 +304,27 @@ const SDK_TIMEOUT_ERROR_NAME = "TimeoutError";
267
304
  * an abort reason down the `cause` chain, thus the reason can sit one or more
268
305
  * hops down.
269
306
  */
270
- function findSdkTimeout(err) {
271
- return findInCauseChain(err, (link) => {
272
- const e = link;
273
- return e.name === SDK_TIMEOUT_ERROR_NAME ? link : undefined;
274
- });
307
+ /**
308
+ * Does the `cause` chain hold the timeout that the SDK raises? The `DOMException`
309
+ * carries no field of its own, thus the name is the one signal. The SDK carries
310
+ * an abort reason down the `cause` chain, thus the reason can sit one or more
311
+ * hops down.
312
+ */
313
+ function hasSdkTimeout(err) {
314
+ return findInCauseChain(err, (link) => ("name" in link && link.name === SDK_TIMEOUT_ERROR_NAME ? true : undefined)) ?? false;
275
315
  }
276
316
  /** Does any link of the `cause` chain look like a transport-level failure? */
277
317
  function looksLikeConnectionError(err) {
278
318
  return (findInCauseChain(err, (link) => {
279
- const e = link;
280
- if (typeof e.code === "string" && CONNECTION_ERROR_CODES.has(e.code))
281
- return true;
282
- if (typeof e.name === "string" && /^APIConnection/.test(e.name))
319
+ if ("code" in link && typeof link.code === "string" && CONNECTION_ERROR_CODES.has(link.code))
283
320
  return true;
284
- if (typeof e.message === "string" && CONNECTION_ERROR_PATTERN.test(e.message))
321
+ if ("name" in link && typeof link.name === "string" && link.name.startsWith("APIConnection"))
285
322
  return true;
323
+ if ("message" in link && typeof link.message === "string") {
324
+ const message = link.message.toLowerCase();
325
+ if (CONNECTION_ERROR_PHRASES.some((phrase) => message.includes(phrase)))
326
+ return true;
327
+ }
286
328
  return undefined;
287
329
  }) ?? false);
288
330
  }
@@ -302,11 +344,17 @@ export function classifyProviderError(e, suspendOn = DEFAULT_SUSPEND_ON) {
302
344
  // policy as a connection error. This runs before the status and the
303
345
  // connection paths, because a timeout carries no HTTP status, and it must not
304
346
  // fall to a non-retryable path.
305
- if (findRequestTimeout(e) !== undefined || findSdkTimeout(e) !== undefined)
347
+ if (findRequestTimeout(e) !== undefined || hasSdkTimeout(e))
306
348
  return { kind: "provider", retryable: true };
307
- const status = extractStatus(e);
308
- if (status !== undefined && Object.hasOwn(suspendOn, status)) {
309
- return { kind: "suspend", retryable: false, reason: suspendOn[status], status };
349
+ // A status below 400 is the status of a response that started well, and the failure came later, for example a
350
+ // stream that a reset connection broke. Thus only an error status classifies, and the rest falls to the
351
+ // connection check.
352
+ const found = extractStatus(e);
353
+ const status = found !== undefined && found >= 400 ? found : undefined;
354
+ if (status !== undefined) {
355
+ const reason = suspendOn[status];
356
+ if (reason !== undefined)
357
+ return { kind: "suspend", retryable: false, reason, status };
310
358
  }
311
359
  // `auth` is its own kind rather than a plain non-retryable 4xx because the
312
360
  // remedy is categorically different: the request was well-formed and the
@@ -2,7 +2,7 @@
2
2
  * Prompt-cache policy → provider wire options.
3
3
  *
4
4
  * This is the **only** place in the harness that names a vendor for caching.
5
- * Everything upstream — `PromptCachePolicy`, `ChatUsage`, `RunAgentOptions` —
5
+ * Everything upstream — `PromptCachePolicy`, `ChatUsage`, `LoopOptions` —
6
6
  * speaks the neutral harness concept; this module translates it once, at the
7
7
  * provider seam, so the loop never learns which vendor it is talking to.
8
8
  *
@@ -54,11 +54,11 @@
54
54
  * ## Cache defeaters — what silently kills the hit rate
55
55
  *
56
56
  * The cache keys on an *exact prefix*, so anything that perturbs the head of the
57
- * request invalidates everything after it. The wrap-up of `runAgent`, the
58
- * salvage of `runToTerminal`, and a step's summary and file-metadata
59
- * continuations extend one conversation under a tool mask, thus they keep its
60
- * prefix (`loop/run-agent.ts`, `loop/continue-agent.ts`). A tool choice that
61
- * forbids a call would defeat the cache — see the CAUTION on `ChatRequest.toolChoice`.
57
+ * request invalidates everything after it. The salvage of `runWithSalvage`, and
58
+ * a step's summary and file-metadata follow-up requests, extend one
59
+ * conversation under a tool mask, thus they keep its prefix
60
+ * (`loop/run-loop.ts`). A tool choice that forbids a call would defeat the
61
+ * cache, because `@ai-sdk/anthropic` removes the tools from such a request.
62
62
  *
63
63
  * `loadRecent` gives the view of the latest compaction marker
64
64
  * (`memory/conversation-view.ts`). A compaction moves the start of the view one
@@ -132,8 +132,8 @@ export declare const CONVERSATION_PROMPT_CACHE: PromptCachePolicy;
132
132
  * `cacheControl` has already been renamed once, and the provider still accepts
133
133
  * `cache_control` as its alias.
134
134
  *
135
- * CAUTION: this is the marker's VALUE, not its placement. Attaching it to a
136
- * `ChatRequest` emits the invisible top-level field the module header warns
135
+ * CAUTION: this is the marker's VALUE, not its placement. Attaching it to the
136
+ * options of a request emits the invisible top-level field the module header warns
137
137
  * about. Place it with {@link withSystemPromptBreakpoint} and
138
138
  * {@link withPromptCacheBreakpoint}.
139
139
  */
@@ -2,7 +2,7 @@
2
2
  * Prompt-cache policy → provider wire options.
3
3
  *
4
4
  * This is the **only** place in the harness that names a vendor for caching.
5
- * Everything upstream — `PromptCachePolicy`, `ChatUsage`, `RunAgentOptions` —
5
+ * Everything upstream — `PromptCachePolicy`, `ChatUsage`, `LoopOptions` —
6
6
  * speaks the neutral harness concept; this module translates it once, at the
7
7
  * provider seam, so the loop never learns which vendor it is talking to.
8
8
  *
@@ -54,11 +54,11 @@
54
54
  * ## Cache defeaters — what silently kills the hit rate
55
55
  *
56
56
  * The cache keys on an *exact prefix*, so anything that perturbs the head of the
57
- * request invalidates everything after it. The wrap-up of `runAgent`, the
58
- * salvage of `runToTerminal`, and a step's summary and file-metadata
59
- * continuations extend one conversation under a tool mask, thus they keep its
60
- * prefix (`loop/run-agent.ts`, `loop/continue-agent.ts`). A tool choice that
61
- * forbids a call would defeat the cache — see the CAUTION on `ChatRequest.toolChoice`.
57
+ * request invalidates everything after it. The salvage of `runWithSalvage`, and
58
+ * a step's summary and file-metadata follow-up requests, extend one
59
+ * conversation under a tool mask, thus they keep its prefix
60
+ * (`loop/run-loop.ts`). A tool choice that forbids a call would defeat the
61
+ * cache, because `@ai-sdk/anthropic` removes the tools from such a request.
62
62
  *
63
63
  * `loadRecent` gives the view of the latest compaction marker
64
64
  * (`memory/conversation-view.ts`). A compaction moves the start of the view one
@@ -92,6 +92,7 @@
92
92
  * flat-zero read counter beside a non-zero write counter is still the signature
93
93
  * of an endpoint billing for writes and serving no reads.
94
94
  */
95
+ import { parseUnknownRecord } from "../lib/unknown-containers.js";
95
96
  /**
96
97
  * The default policy: cache with the 5-minute TTL.
97
98
  *
@@ -130,8 +131,8 @@ export const CONVERSATION_PROMPT_CACHE = { ttl: "1h" };
130
131
  * `cacheControl` has already been renamed once, and the provider still accepts
131
132
  * `cache_control` as its alias.
132
133
  *
133
- * CAUTION: this is the marker's VALUE, not its placement. Attaching it to a
134
- * `ChatRequest` emits the invisible top-level field the module header warns
134
+ * CAUTION: this is the marker's VALUE, not its placement. Attaching it to the
135
+ * options of a request emits the invisible top-level field the module header warns
135
136
  * about. Place it with {@link withSystemPromptBreakpoint} and
136
137
  * {@link withPromptCacheBreakpoint}.
137
138
  */
@@ -188,9 +189,10 @@ function canHostBreakpoint(message) {
188
189
  if (!Array.isArray(content))
189
190
  return false;
190
191
  const last = content.at(-1);
191
- if (typeof last !== "object" || last === null)
192
+ const part = parseUnknownRecord(last);
193
+ if (part === undefined)
192
194
  return false;
193
- return last.type !== "reasoning";
195
+ return !("type" in part) || part["type"] !== "reasoning";
194
196
  }
195
197
  /** The index of the last message that can host the breakpoint, or `-1` when none can. */
196
198
  function lastHostIndex(messages) {
@@ -227,7 +229,7 @@ function withoutBreakpoint(message) {
227
229
  continue;
228
230
  const { [key]: _dropped, ...rest } = bag;
229
231
  if (Object.keys(rest).length === 0)
230
- delete remaining[namespace];
232
+ Reflect.deleteProperty(remaining, namespace);
231
233
  else
232
234
  remaining[namespace] = rest;
233
235
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * The reasoning depth of a call.
3
3
  *
4
- * The effort resolves in order: `ChatRequest.reasoning` (set only through
5
- * `RunAgentOptions.reasoning`), the provider configuration's `reasoning`, then
4
+ * The effort resolves in order: the effort of the run (`LoopOptions.reasoning`),
5
+ * the provider configuration's `reasoning`, then
6
6
  * {@link DEFAULT_REASONING}. Anthropic discards its message cache when the
7
7
  * top-level effort changes between calls.
8
8
  *
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * The reasoning depth of a call.
3
3
  *
4
- * The effort resolves in order: `ChatRequest.reasoning` (set only through
5
- * `RunAgentOptions.reasoning`), the provider configuration's `reasoning`, then
4
+ * The effort resolves in order: the effort of the run (`LoopOptions.reasoning`),
5
+ * the provider configuration's `reasoning`, then
6
6
  * {@link DEFAULT_REASONING}. Anthropic discards its message cache when the
7
7
  * top-level effort changes between calls.
8
8
  *
@@ -5,14 +5,15 @@
5
5
  * vendor-neutral interfaces. Every call carries an `AgentSession`; billing
6
6
  * attribution is resolved lazily at the provider wire boundary.
7
7
  */
8
- import type { FinishReason, LanguageModel, ModelMessage, SystemModelMessage, ToolSet } from "ai";
9
- import type { LanguageModelV4CallOptions } from "@ai-sdk/provider";
10
- import type { ProviderOptions } from "@ai-sdk/provider-utils";
8
+ import type { TelemetryOptions } from "ai";
9
+ import type { LanguageModelV4, LanguageModelV4CallOptions } from "@ai-sdk/provider";
11
10
  import type { ResultAsync } from "neverthrow";
12
11
  import type { AgentSession } from "../auth/types.js";
13
12
  import type { ProviderError } from "./errors.js";
14
- export type { FinishReason, LanguageModel, ModelMessage, ProviderOptions, ToolSet };
15
- export interface ProviderCapabilities {
13
+ export type { FinishReason, LanguageModel, ModelMessage, ToolSet } from "ai";
14
+ import type { ProviderOptions } from "@ai-sdk/provider-utils";
15
+ export type { ProviderOptions } from "@ai-sdk/provider-utils";
16
+ export type ProviderCapabilities = {
16
17
  readonly toolCalling: boolean;
17
18
  /**
18
19
  * Whether the wire can carry a picture inside a tool result. The loop moves a
@@ -23,48 +24,13 @@ export interface ProviderCapabilities {
23
24
  * see it. Absent means "cannot carry", never "unknown".
24
25
  */
25
26
  readonly imageToolResults?: boolean;
26
- /**
27
- * Whether the wire can carry a picture inside a user message. The loop uses
28
- * this placement only when the tool result cannot carry the picture. The tool
29
- * result then keeps its JSON text, and one user message after the tool message
30
- * of the round carries the bytes. Absent means "cannot carry", never
31
- * "unknown".
32
- */
33
- readonly imageUserMessages?: boolean;
34
27
  /**
35
28
  * The context window of the model in tokens, when the host knows it. A chat
36
29
  * thread then compacts at 80% of the window at the latest. Absent means "at
37
30
  * least the compaction budget of the agent", thus the budget stays as declared.
38
31
  */
39
32
  readonly contextWindow?: number;
40
- }
41
- /**
42
- * The request carries no free-form provider options. That would let a caller
43
- * set a vendor key that bypasses the provider's per-model table.
44
- */
45
- export interface ChatRequest {
46
- /**
47
- * The system prompt: a plain string, or a system message that carries the
48
- * cache marker at its end (`withSystemPromptBreakpoint`).
49
- */
50
- readonly system: string | SystemModelMessage;
51
- readonly messages: readonly ModelMessage[];
52
- readonly tools: ToolSet;
53
- /**
54
- * A forced choice (`required`, or one named tool) is absent on purpose: some
55
- * Claude models reject it with a 400, and the model is chosen at run time.
56
- *
57
- * CAUTION: `@ai-sdk/anthropic` strips the tools when this is `"none"`, and
58
- * Anthropic drops its cache on any `tool_choice` change — taking a signed
59
- * thinking block with it. Use a tool mask instead of sending `"none"`.
60
- */
61
- readonly toolChoice?: "auto" | "none";
62
- /**
63
- * How deep the model reasons. Absent, the effort falls back to the provider
64
- * configuration's `reasoning`, then `DEFAULT_REASONING`.
65
- */
66
- readonly reasoning?: ReasoningPolicy;
67
- }
33
+ };
68
34
  /**
69
35
  * Vendor-neutral prompt-cache policy — a harness concept, not a vendor one.
70
36
  *
@@ -116,74 +82,69 @@ export type ReasoningPolicy = NonNullable<LanguageModelV4CallOptions["reasoning"
116
82
  * totals without a cache breakdown, is legitimate. Absent means "not reported",
117
83
  * never "zero".
118
84
  */
119
- export interface ChatUsage {
85
+ export type ChatUsage = {
120
86
  readonly inputTokens?: number;
121
87
  readonly outputTokens?: number;
122
88
  readonly cacheCreationInputTokens?: number;
123
89
  readonly cacheReadInputTokens?: number;
124
90
  readonly reasoningTokens?: number;
125
- }
126
- export interface ChatResponse {
127
- readonly message: Extract<ModelMessage, {
128
- role: "assistant";
129
- }>;
130
- /**
131
- * The terminal reason for this reply. `"aborted"` is produced ONLY by the
132
- * streaming wrapper (`createStreamingChat`), which resolves a client abort
133
- * with the partial assistant text assembled from the deltas it already
134
- * forwarded. The non-streaming `ChatProvider.chat` never yields `"aborted"`:
135
- * it propagates a client abort as a throw, because durable workflow loops —
136
- * the non-streaming provider's callers — record cancellation only when it
137
- * surfaces as a thrown exception.
138
- */
139
- readonly finishReason: FinishReason | "aborted";
140
- readonly rawFinishReason?: string;
141
- readonly usage?: ChatUsage;
142
- /**
143
- * The id of the model this provider instance is bound to — what the caller
144
- * asked for. Absent when the binding names no id.
145
- */
146
- readonly requestedModelId?: string;
147
- /**
148
- * The model id the provider itself reported as having answered. Absent
149
- * whenever the provider reported none — it is NEVER filled in from
150
- * `requestedModelId`, because a claim about which model answered is only
151
- * worth anything when the endpoint actually made it.
152
- *
153
- * A value differing from `requestedModelId` is not an error: the pair exists
154
- * so a consumer can observe an endpoint or proxy serving a different model
155
- * version than the one configured. Treat the comparison as best-effort
156
- * diagnostics, never as an invariant.
157
- */
158
- readonly servedModelId?: string;
159
- /**
160
- * The AI SDK's `LanguageModel.provider` id, for example `anthropic.messages`.
161
- * Absent for a bare model-id string, which names no provider.
162
- */
163
- readonly provider?: string;
164
- }
91
+ };
92
+ /** A text delta of the reply that streams to a reader. */
165
93
  export type ChatStreamEvent = {
166
94
  readonly type: "text-delta";
167
95
  readonly text: string;
168
- } | {
169
- readonly type: "done";
170
- readonly response: ChatResponse;
171
96
  };
172
- export interface AgentChat {
97
+ /** The facts of one run that bind a model: the session of its calls, its effort, and whether a reader sees its reply live. */
98
+ export type ModelBinding = {
99
+ readonly session: AgentSession;
100
+ /** Absent: the effort of the provider configuration, then `DEFAULT_REASONING`. */
101
+ readonly reasoning?: ReasoningPolicy;
102
+ /**
103
+ * A reader sees the reply as it streams. A live call retries only before its first output part, and a
104
+ * call with no live reader takes its whole reply inside each attempt.
105
+ */
106
+ readonly live: boolean;
107
+ /** Called before the wait of each retry of a request inside the retry envelope. */
108
+ readonly onRetry?: (retry: ModelRetry) => void;
109
+ };
110
+ /** One retry of a model request inside the retry envelope of the provider. */
111
+ export type ModelRetry = {
112
+ /** The id of the request. Each retry of one request carries the same id. */
113
+ readonly requestId: string;
114
+ /** The number of this retry, from 1. */
115
+ readonly attempt: number;
116
+ readonly maxRetries: number;
117
+ /** The wait before the next attempt, in milliseconds. */
118
+ readonly delayMs: number;
119
+ /** The HTTP error status of the failed attempt, 400 or higher. Absent for a failure with no error status. */
120
+ readonly status?: number;
121
+ };
122
+ /** The model of one run, under the retry envelope of its provider, and the call settings of each request. */
123
+ export type BoundModel = {
124
+ readonly model: LanguageModelV4;
125
+ readonly settings: {
126
+ readonly maxOutputTokens?: number;
127
+ readonly reasoning: ReasoningPolicy;
128
+ readonly providerOptions?: ProviderOptions;
129
+ };
130
+ readonly telemetry: TelemetryOptions;
131
+ };
132
+ /**
133
+ * The model configuration of the harness: one model over one connection. The loop binds it for each run, and
134
+ * the AI SDK drives each request.
135
+ */
136
+ export type ChatProvider = {
173
137
  readonly capabilities: ProviderCapabilities;
174
- chat(req: ChatRequest, session: AgentSession, signal?: AbortSignal): ResultAsync<ChatResponse, ProviderError>;
175
- }
176
- export interface ChatProvider extends AgentChat {
177
- chatStream(req: ChatRequest, session: AgentSession, signal?: AbortSignal): AsyncIterable<ChatStreamEvent>;
178
138
  /**
179
139
  * The request-timeout limit that this provider enforces, in milliseconds, or
180
140
  * absent when it enforces none. The value bounds each silent interval of a
181
141
  * request attempt: the wait until the response starts, and each gap between
182
- * two content chunks of a stream. A consumer that scales a deadline reads this
142
+ * two content parts of a stream. A consumer that scales a deadline reads this
183
143
  * value from the provider instance, not from a harness constant.
184
144
  */
185
145
  readonly requestTimeoutMs?: number;
186
- }
146
+ bind(binding: ModelBinding): BoundModel;
147
+ };
187
148
  /**
188
149
  * The effective deadline in milliseconds for a provider-bound operation.
189
150
  *
@@ -192,7 +153,7 @@ export interface ChatProvider extends AgentChat {
192
153
  * a configured request timeout can raise the floor. It cannot lower the floor.
193
154
  */
194
155
  export declare function effectiveDeadlineMs(provider: Pick<ChatProvider, "requestTimeoutMs">, floorMs: number, explicitMs?: number): number;
195
- export interface EmbeddingProvider {
156
+ export type EmbeddingProvider = {
196
157
  /**
197
158
  * Width of every vector `embed` returns. The write-side index paths create
198
159
  * each per-analysis pgvector index at exactly this width (`ensureSearchIndex`),
@@ -202,5 +163,5 @@ export interface EmbeddingProvider {
202
163
  */
203
164
  readonly dimensions: number;
204
165
  embed(texts: readonly string[], session: AgentSession): ResultAsync<number[][], ProviderError>;
205
- }
166
+ };
206
167
  export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;