@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
@@ -2,7 +2,7 @@
2
2
  * `bootHarness` — the harness-owned boot sequence.
3
3
  *
4
4
  * `assembleCoreRuntime` stays sync and pure (it is the register-before-launch
5
- * cohort SOT, driven by tests on `passthroughStep`). `bootHarness` wraps it with
5
+ * cohort SOT, driven by tests outside a workflow). `bootHarness` wraps it with
6
6
  * the ordered, effectful boot steps every host must run in the same order, and
7
7
  * returns a `shutdown` handle the embedder wires to its process signals. The
8
8
  * ordering is load-bearing and runs cheapest-failure-first:
@@ -20,20 +20,20 @@
20
20
  * Runs after `launchDbos` and before the HTTP listener accepts traffic so a
21
21
  * misconfigured pod fails boot loudly instead of degrading under load.
22
22
  */
23
- import type { Pool } from "pg";
23
+ import type { Querier } from "../state/db.js";
24
24
  import type { Logger } from "../lib/logger.js";
25
25
  /**
26
26
  * Narrow config slice the budget guard reads — only the optional app-pool
27
27
  * size override. Composition roots map `Env.DB_POOL_MAX` onto this.
28
28
  */
29
- export interface ConnectionBudgetConfig {
29
+ export type ConnectionBudgetConfig = {
30
30
  readonly poolMax?: string;
31
- }
32
- export interface AssertConnectionBudgetOptions {
33
- pool: Pool;
31
+ };
32
+ export type AssertConnectionBudgetOptions = {
33
+ pool: Querier;
34
34
  logger: Logger;
35
35
  config: ConnectionBudgetConfig;
36
- }
36
+ };
37
37
  /**
38
38
  * Verify a single pod's pool footprint fits inside pg `max_connections`.
39
39
  * Throws on shortfall — the caller must abort boot. Returns the per-pod
@@ -31,7 +31,7 @@ export async function assertConnectionBudget({ pool, logger, config }) {
31
31
  const dbosPoolSize = DBOS_SYSTEM_POOL_SIZE;
32
32
  const podFootprint = appPoolSize + dbosPoolSize;
33
33
  const { rows } = await pool.query("SELECT current_setting('max_connections') AS max");
34
- const maxConnections = parseInt(rows[0].max, 10);
34
+ const maxConnections = parseInt(rows[0]?.max ?? "0", 10);
35
35
  if (podFootprint + SAFETY_MARGIN > maxConnections) {
36
36
  throw new Error(`FATAL: pg max_connections (${maxConnections}) cannot hold one pod's pool footprint ` +
37
37
  `(${podFootprint}) = app=${appPoolSize} + dbos=${dbosPoolSize}, plus margin=${SAFETY_MARGIN}. ` +
@@ -1,25 +1,15 @@
1
1
  /**
2
- * DBOS Transact bootstrap.
3
- *
4
- * This is the only module that imports `@dbos-inc/dbos-sdk` directly. The
5
- * agent loop and routes depend on the `RunStep` shape (`harness/loop/types.ts`),
6
- * so DBOS stays swappable and the chat path never reaches into the workflow
7
- * runtime. `harness/loop/run-step.ts` wraps `DBOS.runStep` for the durable
8
- * variant; nothing else here.
9
- *
10
- * Launch is dormant — this change registers no workflows. The durability seam
11
- * exists; the engine is running; nothing is durable yet.
12
- *
13
- * See `openspec/changes/harness-dbos-runtime`.
2
+ * DBOS Transact bootstrap: the config of the engine, its launch, the
3
+ * schedules of the scheduled workflows, and its shutdown.
14
4
  */
15
5
  import { type DBOSConfig, type DLogger } from "@dbos-inc/dbos-sdk";
16
- import type { Pool } from "pg";
6
+ import type { Querier } from "../state/db.js";
17
7
  import type { Logger } from "../lib/logger.js";
18
8
  /**
19
9
  * Narrow config slice the DBOS bootstrap reads. Composition roots map their
20
10
  * validated `Env` onto this and pass the executor id in (the harness reads no env).
21
11
  */
22
- export interface DbosConfig {
12
+ export type DbosConfig = {
23
13
  readonly dbHost: string;
24
14
  readonly dbPort: string;
25
15
  readonly dbName: string;
@@ -28,7 +18,6 @@ export interface DbosConfig {
28
18
  readonly dbSslMode: "disable" | "require" | "verify-ca" | "verify-full";
29
19
  readonly appName: string;
30
20
  readonly applicationVersion?: string;
31
- readonly adminPort: string;
32
21
  /** Stable per-pod executor id (e.g. `process.env.HOSTNAME ?? "local-dev"`). */
33
22
  readonly executorId: string;
34
23
  /**
@@ -66,12 +55,12 @@ export interface DbosConfig {
66
55
  * new root trace, with no link to the trace of the original execution.
67
56
  */
68
57
  readonly tracingEnabled?: boolean;
69
- }
58
+ };
70
59
  /** DBOS lifecycle facts a host's readiness probe reports on. */
71
- export interface DbosState {
60
+ export type DbosState = {
72
61
  launched: boolean;
73
62
  recoveryStarted: boolean;
74
- }
63
+ };
75
64
  /**
76
65
  * Bridge the SDK's internal logger onto the harness `Logger` seam, so the
77
66
  * SDK's own lines (`Recovering N workflows…`, migration chatter) land in the
@@ -88,6 +77,27 @@ export declare function dbosSdkLogger(logger: Logger, logLevel: string | undefin
88
77
  * assert on the mapping without a launch.
89
78
  */
90
79
  export declare function dbosSdkConfig(config: DbosConfig, logger: Logger): DBOSConfig;
80
+ /**
81
+ * Whether a failure ends the execution because it no longer owns its workflow. A
82
+ * cancel raises `DBOSWorkflowCancelledError` at the next operation. A cancel that
83
+ * lands while a step runs clears the owner of the workflow, and the record of the
84
+ * step then raises `DBOSWorkflowConflictError`. Neither execution may write a
85
+ * terminal state, thus each one leaves with the error.
86
+ */
87
+ export declare function isWorkflowCancellation(err: unknown): boolean;
88
+ /** One scheduled workflow: a registered workflow, and the crontab that starts it. */
89
+ export type WorkflowSchedule = {
90
+ readonly scheduleName: string;
91
+ readonly workflowFn: () => Promise<void>;
92
+ /** A crontab with an optional leading field for the seconds. */
93
+ readonly schedule: string;
94
+ };
95
+ /**
96
+ * Schedule a registered workflow. DBOS stores a schedule in its system database,
97
+ * and it accepts one only after the launch, thus `launchDbos` applies each
98
+ * schedule of this list. A second call with the same name replaces the first.
99
+ */
100
+ export declare function scheduleWorkflow(schedule: WorkflowSchedule): void;
91
101
  /**
92
102
  * Launch DBOS. Idempotent — a second call is a no-op so tests that drive
93
103
  * the harness twice (or accidentally double-import) don't re-launch.
@@ -126,7 +136,7 @@ export declare function shutdownDbos({ logger: injected }: {
126
136
  * DB is the same database as the app pool, so the pool reaches it directly.
127
137
  */
128
138
  export declare function sweepEphemeralWorkflows({ pool, logger: injectedLogger, executorId, }: {
129
- pool: Pool;
139
+ pool: Querier;
130
140
  logger: Logger;
131
141
  /** Stable per-pod executor id — must match `launchDbos`'s `executorId`. */
132
142
  executorId: string;
@@ -1,18 +1,11 @@
1
1
  /**
2
- * DBOS Transact bootstrap.
3
- *
4
- * This is the only module that imports `@dbos-inc/dbos-sdk` directly. The
5
- * agent loop and routes depend on the `RunStep` shape (`harness/loop/types.ts`),
6
- * so DBOS stays swappable and the chat path never reaches into the workflow
7
- * runtime. `harness/loop/run-step.ts` wraps `DBOS.runStep` for the durable
8
- * variant; nothing else here.
9
- *
10
- * Launch is dormant — this change registers no workflows. The durability seam
11
- * exists; the engine is running; nothing is durable yet.
12
- *
13
- * See `openspec/changes/harness-dbos-runtime`.
2
+ * DBOS Transact bootstrap: the config of the engine, its launch, the
3
+ * schedules of the scheduled workflows, and its shutdown.
14
4
  */
15
- import { DBOS } from "@dbos-inc/dbos-sdk";
5
+ import { z } from "zod";
6
+ import { textOf } from "../lib/unknown-text.js";
7
+ import { DBOS, Error as DBOSErrors } from "@dbos-inc/dbos-sdk";
8
+ import { presentGet } from "../lib/present.js";
16
9
  import { DBOS_SYSTEM_POOL_SIZE } from "./pools.js";
17
10
  import { errRecipe, okRecipe } from "./result-serialization.js";
18
11
  const state = {
@@ -69,16 +62,16 @@ const SDK_DEFAULT_LOG_LEVEL = "info";
69
62
  */
70
63
  export function dbosSdkLogger(logger, logLevel) {
71
64
  const sink = logger.named("sdk");
72
- const threshold = SDK_LOG_LEVEL_RANK[logLevel ?? SDK_DEFAULT_LOG_LEVEL] ?? SDK_LOG_LEVEL_RANK[SDK_DEFAULT_LOG_LEVEL];
73
- const passes = (level) => SDK_LOG_LEVEL_RANK[level] <= threshold;
65
+ const threshold = SDK_LOG_LEVEL_RANK[logLevel ?? SDK_DEFAULT_LOG_LEVEL] ?? presentGet(SDK_LOG_LEVEL_RANK, SDK_DEFAULT_LOG_LEVEL, "the default log-level rank");
66
+ const passes = (level) => presentGet(SDK_LOG_LEVEL_RANK, level, "the log-level rank") <= threshold;
74
67
  const fields = (metadata) => {
75
68
  const attributes = metadata?.span?.attributes;
76
69
  const stack = metadata?.stack;
77
70
  if (attributes === undefined && stack === undefined)
78
71
  return undefined;
79
- return { ...attributes, ...(stack !== undefined ? { stack } : {}) };
72
+ return { ...attributes, stack };
80
73
  };
81
- const message = (entry) => (typeof entry === "string" ? entry : String(entry));
74
+ const message = (entry) => (typeof entry === "string" ? entry : textOf(entry));
82
75
  return {
83
76
  debug: (entry, metadata) => {
84
77
  if (passes("debug"))
@@ -109,13 +102,34 @@ export function dbosSdkConfig(config, logger) {
109
102
  systemDatabasePoolSize: DBOS_SYSTEM_POOL_SIZE,
110
103
  executorID: config.executorId,
111
104
  applicationVersion: config.applicationVersion,
112
- adminPort: parseInt(config.adminPort, 10),
105
+ // With no version from the host, DBOS keeps the one version `PATCHING_ENABLED` across upgrades, thus a paused
106
+ // workflow recovers after an upgrade. A change of the operations of a workflow body goes behind `DBOS.patch`.
107
+ enablePatching: true,
113
108
  logLevel: config.logLevel,
114
109
  logger: dbosSdkLogger(logger, config.logLevel),
115
110
  tracingEnabled: config.tracingEnabled ?? false,
116
111
  otelAttributeFormat: "semconv",
117
112
  };
118
113
  }
114
+ /**
115
+ * Whether a failure ends the execution because it no longer owns its workflow. A
116
+ * cancel raises `DBOSWorkflowCancelledError` at the next operation. A cancel that
117
+ * lands while a step runs clears the owner of the workflow, and the record of the
118
+ * step then raises `DBOSWorkflowConflictError`. Neither execution may write a
119
+ * terminal state, thus each one leaves with the error.
120
+ */
121
+ export function isWorkflowCancellation(err) {
122
+ return err instanceof DBOSErrors.DBOSWorkflowCancelledError || err instanceof DBOSErrors.DBOSWorkflowConflictError;
123
+ }
124
+ const pendingSchedules = new Map();
125
+ /**
126
+ * Schedule a registered workflow. DBOS stores a schedule in its system database,
127
+ * and it accepts one only after the launch, thus `launchDbos` applies each
128
+ * schedule of this list. A second call with the same name replaces the first.
129
+ */
130
+ export function scheduleWorkflow(schedule) {
131
+ pendingSchedules.set(schedule.scheduleName, schedule);
132
+ }
119
133
  let resultRecipesRegistered = false;
120
134
  /**
121
135
  * DBOS refuses a registration after the launch, and the registry of SuperJSON
@@ -146,12 +160,13 @@ export async function launchDbos({ config, logger: injected }) {
146
160
  registerResultSerialization();
147
161
  const start = performance.now();
148
162
  await DBOS.launch();
163
+ if (pendingSchedules.size > 0)
164
+ await DBOS.applySchedules([...pendingSchedules.values()]);
149
165
  state.launched = true;
150
166
  state.recoveryStarted = true;
151
167
  logger.info("launched", {
152
168
  executorID: sdkConfig.executorID,
153
169
  applicationVersion: config.applicationVersion,
154
- adminPort: sdkConfig.adminPort,
155
170
  tracingEnabled: sdkConfig.tracingEnabled,
156
171
  durationMs: Math.round(performance.now() - start),
157
172
  });
@@ -215,7 +230,7 @@ export async function sweepEphemeralWorkflows({ pool, logger: injectedLogger, ex
215
230
  }
216
231
  catch (err) {
217
232
  // First-ever boot: DBOS has not created its schema yet — nothing to sweep.
218
- if (err && typeof err === "object" && "code" in err && err.code === "42P01") {
233
+ if (z.object({ code: z.literal("42P01") }).safeParse(err).success) {
219
234
  return;
220
235
  }
221
236
  logger.error("legacy ephemeral-row sweep failed", { executorID, ...logger.errorFields(err) });
@@ -15,22 +15,35 @@
15
15
  * inside the step, before the checkpoint.
16
16
  */
17
17
  import { Err, Ok, err, ok } from "neverthrow";
18
+ import { z } from "zod";
19
+ import { parseJsonAs } from "../lib/parse-json.js";
20
+ import { errorOf } from "../lib/thrown.js";
18
21
  /**
19
22
  * The JSON form of the value inside a `Result`, with the rules of
20
23
  * `JSON.stringify`. An `Error` becomes `{ name, message }`, because
21
24
  * `JSON.stringify` gives `{}` for one. A `bigint` becomes its decimal text,
22
25
  * because `JSON.stringify` throws on one.
23
26
  */
24
- function toJson(value) {
25
- const text = JSON.stringify(value, (_key, v) => {
26
- if (v instanceof Error)
27
- return { name: v.name, message: v.message };
27
+ /**
28
+ * The stringify with the Error and bigint replacer. The declared return is honest where
29
+ * the lib signature lies: the format gives back `undefined` for a value it cannot hold.
30
+ */
31
+ function stringifyJson(value) {
32
+ return JSON.stringify(value, (_key, v) => {
33
+ const error = errorOf(v);
34
+ if (error !== undefined)
35
+ return { name: error.name, message: error.message };
28
36
  if (typeof v === "bigint")
29
37
  return v.toString();
30
38
  return v;
31
39
  });
32
- return text === undefined ? undefined : JSON.parse(text);
33
40
  }
41
+ function toJson(value) {
42
+ const text = stringifyJson(value);
43
+ // The stringify round-trip holds only JSON values, so the parse cannot refuse.
44
+ return text === undefined ? undefined : parseJsonAs(text, JsonSchema);
45
+ }
46
+ const JsonSchema = z.lazy(() => z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(JsonSchema), z.record(z.string(), JsonSchema)]));
34
47
  export const okRecipe = {
35
48
  name: "neverthrow.Ok",
36
49
  isApplicable: (v) => v instanceof Ok,
@@ -19,7 +19,7 @@
19
19
  * any single step's failure.
20
20
  */
21
21
  import type { Logger } from "../lib/logger.js";
22
- export interface ShutdownDeps {
22
+ export type ShutdownDeps = {
23
23
  signal: string;
24
24
  logger: Logger;
25
25
  markDraining: () => void;
@@ -29,5 +29,5 @@ export interface ShutdownDeps {
29
29
  flushLogger: () => Promise<void>;
30
30
  shutdownOtel: () => Promise<void>;
31
31
  exit: (code: number) => void;
32
- }
32
+ };
33
33
  export declare function runShutdownSequence(deps: ShutdownDeps): Promise<void>;
@@ -21,7 +21,7 @@ import type { ResultAsync } from "neverthrow";
21
21
  import type { SpawnSession } from "../auth/types.js";
22
22
  import type { SandboxError } from "./sandbox-error.js";
23
23
  import type { ExecEmit, ExecRequest, ExecResult, ManagedSandbox, SandboxIdentity, SandboxLiveness, SandboxRef, SandboxSpec, ToolchainSource } from "./types.js";
24
- export interface SandboxClient {
24
+ export type SandboxClient = {
25
25
  /**
26
26
  * The declared owner of the sandbox toolchain, as the client was composed
27
27
  * with it: `"image"` when the config declared it, `"store"` when the config
@@ -59,11 +59,15 @@ export interface SandboxClient {
59
59
  * same step gets the same id, and the sandbox gives it the result of the
60
60
  * first. Outside a workflow it throws.
61
61
  *
62
+ * `execId` replaces that id. A caller that runs more than one exec in one
63
+ * step, or an exec outside a workflow, gives its own id
64
+ * (`sandbox/step-sandbox.ts`).
65
+ *
62
66
  * A recovered step submits again under the same id. The sandbox dedups the
63
67
  * submit on the id, thus the poll attaches to the exec that already ran or
64
68
  * runs, and `emit` sees its events again from the start.
65
69
  */
66
- exec(ref: SandboxRef, request: ExecRequest, emit: ExecEmit, deadline: number): Promise<ExecResult>;
70
+ exec(ref: SandboxRef, request: ExecRequest, emit: ExecEmit, deadline: number, execId?: string): Promise<ExecResult>;
67
71
  /**
68
72
  * Per-sandbox-machine liveness. `alive: false` only when observably dead
69
73
  * (terminal pod phase, missing container); `oomKilled` marks a death the
@@ -99,4 +103,4 @@ export interface SandboxClient {
99
103
  * ref the caller already holds; this one finds machines Cortex has forgotten.
100
104
  */
101
105
  listManagedSandboxes(): Promise<ManagedSandbox[]>;
102
- }
106
+ };
@@ -17,7 +17,7 @@
17
17
  export declare const CPU_ONLINE_PATH = "/sys/devices/system/cpu/online";
18
18
  export declare const CPUINFO_PATH = "/proc/cpuinfo";
19
19
  export declare function readHostCpuinfoOnce(): Promise<string | undefined>;
20
- export interface CpuFiles {
20
+ export type CpuFiles = {
21
21
  /** Content of `/sys/devices/system/cpu/online`: `0` for one thread, else the range `0-<n-1>`. */
22
22
  readonly online: string;
23
23
  /**
@@ -25,7 +25,7 @@ export interface CpuFiles {
25
25
  * of the host. `undefined` when the host gives no `/proc/cpuinfo`.
26
26
  */
27
27
  readonly cpuinfo: string | undefined;
28
- }
28
+ };
29
29
  /**
30
30
  * The content of the two cpu files for `threads` cpus.
31
31
  *
@@ -14,6 +14,7 @@
14
14
  * the content in a ConfigMap and mounts each key with `subPath`.
15
15
  */
16
16
  import { readFile } from "node:fs/promises";
17
+ import { splitLines } from "../lib/text.js";
17
18
  /** The two container paths that the cpu files cover. */
18
19
  export const CPU_ONLINE_PATH = "/sys/devices/system/cpu/online";
19
20
  export const CPUINFO_PATH = "/proc/cpuinfo";
@@ -33,10 +34,26 @@ export function readHostCpuinfoOnce() {
33
34
  * trailer of an ARM kernel, is not a processor and is dropped.
34
35
  */
35
36
  function processorBlocks(cpuinfo) {
36
- return cpuinfo
37
- .split(/\n\s*\n/)
38
- .map((block) => block.trim())
39
- .filter((block) => /^processor\b/m.test(block));
37
+ const blocks = [];
38
+ let block = [];
39
+ for (const line of splitLines(cpuinfo)) {
40
+ if (line.trim() === "") {
41
+ if (block.length > 0)
42
+ blocks.push(block.join("\n"));
43
+ block = [];
44
+ continue;
45
+ }
46
+ block.push(line);
47
+ }
48
+ if (block.length > 0)
49
+ blocks.push(block.join("\n"));
50
+ return blocks.filter(hasProcessorLine);
51
+ }
52
+ function hasProcessorLine(block) {
53
+ return splitLines(block).some((line) => line.startsWith("processor") && !isWordChar(line.charAt("processor".length)));
54
+ }
55
+ function isWordChar(char) {
56
+ return (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9") || char === "_";
40
57
  }
41
58
  /**
42
59
  * The content of the two cpu files for `threads` cpus.
@@ -12,11 +12,10 @@
12
12
  * backend-agnostic — it only needs the SandboxRef.
13
13
  */
14
14
  import type { V1Toleration } from "@kubernetes/client-node";
15
- import type { Pool } from "pg";
15
+ import type { Querier } from "../state/db.js";
16
16
  import type { Logger } from "../lib/logger.js";
17
17
  import { type ResourceLimits } from "../config/resource-limits.js";
18
18
  import { type ResolveWorkspaceRoot } from "../workspace/paths.js";
19
- import { clearSandboxRef } from "../state/index.js";
20
19
  import type { SandboxClient } from "./client.js";
21
20
  import { type ExecDeps } from "./exec.js";
22
21
  import { type MountPlanCoords } from "./mount-plan.js";
@@ -26,13 +25,13 @@ import type { FarmSource, ResolveSandboxLabels, ToolchainSource } from "./types.
26
25
  * default and the K8s namespace fallback. Composition roots map their
27
26
  * validated `Env` onto this.
28
27
  */
29
- export interface SandboxBackendConfig {
28
+ export type SandboxBackendConfig = {
30
29
  readonly backend: "docker" | "k8s";
31
30
  readonly namespace: string;
32
- }
33
- export interface CreateSandboxClientConfig {
31
+ };
32
+ export type CreateSandboxClientConfig = {
34
33
  /** App pool — used for registry writes inside the create/teardown steps. */
35
- pool: Pool;
34
+ pool: Querier;
36
35
  /** Backend default + namespace fallback source. */
37
36
  env: SandboxBackendConfig;
38
37
  /** Default sandbox-base image when the workflow doesn't override per-step. */
@@ -150,7 +149,7 @@ export interface CreateSandboxClientConfig {
150
149
  * An `isAlive` here wins over the backend inspect that the client wires.
151
150
  */
152
151
  execDeps?: ExecDeps;
153
- }
152
+ };
154
153
  /**
155
154
  * Backend-agnostic pre-creation of the writable tree under the analysis's
156
155
  * resolved workspace root. On Docker that root is the host dir the container
@@ -177,4 +176,4 @@ export declare function precreateStepTree(deps: {
177
176
  }, coords: MountPlanCoords): Promise<void>;
178
177
  export declare function createSandboxClient(config: CreateSandboxClientConfig): SandboxClient;
179
178
  /** Re-exports so consumers import once from this module. */
180
- export { clearSandboxRef };
179
+ export { clearSandboxRef } from "../state/index.js";
@@ -22,7 +22,7 @@ import { clampResources } from "../config/resource-limits.js";
22
22
  import { tailWritePrefix } from "../workspace/paths.js";
23
23
  import { tryMutation } from "../lib/db-result.js";
24
24
  import { unwrapOrThrow } from "../lib/result.js";
25
- import { clearSandboxRef, setSandboxRef } from "../state/index.js";
25
+ import { setSandboxRef } from "../state/index.js";
26
26
  import { capExecStreams, EXEC_STREAM_BYTE_CAP } from "../tools/workspace/result-bounds.js";
27
27
  import { createDockerSandboxOps } from "./docker-client.js";
28
28
  import { runExec, stepExecId } from "./exec.js";
@@ -95,8 +95,8 @@ export function createSandboxClient(config) {
95
95
  * variant as the message, and the variant itself on `cause`. The `mapErr`
96
96
  * happens before the bridge because `toThrowable` passes an `Error`
97
97
  * through untouched — thus `unwrapOrThrow` stays the single sanctioned
98
- * Result→throw bridge, no second bridge is introduced, and the
99
- * `must-use-result` lint patch keeps recognizing every site. The registry
98
+ * Result→throw bridge, no second bridge is introduced, and the type check
99
+ * command keeps recognizing every site. The registry
100
100
  * unwraps below stay on the plain bridge: they carry a `DbError`.
101
101
  */
102
102
  const failing = (e) => new SandboxFailure(e);
@@ -182,12 +182,6 @@ export function createSandboxClient(config) {
182
182
  sandboxId: identity.sandboxId,
183
183
  cause,
184
184
  });
185
- // Every caller must declare resources — a sandbox with no cpu/memory
186
- // request is a semantic error, not something to paper over with a
187
- // default.
188
- if (!spec.resources) {
189
- return err(createFailed("createSandbox")(new Error(`createSandbox: ${session.scope.analysisId}/${session.runFrame.runId}/${session.runFrame.stepId} has no resources — every caller must declare cpu/memoryGb`)));
190
- }
191
185
  // The config states an engine fact (binds preserve host ownership);
192
186
  // which remediation that fact demands — today, a world-writable step
193
187
  // write tree — is harness-owned and chosen here, not by the embedder.
@@ -218,8 +212,8 @@ export function createSandboxClient(config) {
218
212
  // recovered step reaches this line again. `capExecStreams` cuts the
219
213
  // streams and keeps every other field, thus the kernel accounting the
220
214
  // sandbox reported reaches the record intact.
221
- exec: (ref, request, emit, deadline) => DBOS.runStep(async () => {
222
- const execId = stepExecId();
215
+ exec: (ref, request, emit, deadline, givenExecId) => DBOS.runStep(async () => {
216
+ const execId = givenExecId ?? stepExecId();
223
217
  stableSpan("sandbox.exec", "sandbox.exec", { [ATTR_INFLEXA_EXEC_ID]: execId });
224
218
  const result = capExecStreams(await runExec(ref, execId, request, emit, deadline, execDeps), streamCap);
225
219
  recordSandboxExec({
@@ -240,4 +234,4 @@ export function createSandboxClient(config) {
240
234
  };
241
235
  }
242
236
  /** Re-exports so consumers import once from this module. */
243
- export { clearSandboxRef };
237
+ export { clearSandboxRef } from "../state/index.js";
@@ -39,7 +39,51 @@ import type { Logger } from "../lib/logger.js";
39
39
  import { type ResolveWorkspaceRoot } from "../workspace/paths.js";
40
40
  import { type SandboxError } from "./sandbox-error.js";
41
41
  import type { FarmSource, ManagedSandbox, SandboxIdentity, SandboxLabels, SandboxLiveness, SandboxRef, SandboxSpec, ToolchainSource } from "./types.js";
42
- export interface DockerClientConfig {
42
+ /**
43
+ * The surface of a Docker engine that this module reads. The classes of
44
+ * `dockerode` carry private members, so an injected engine — a test double or a
45
+ * wrapper — names this shape instead. A real `Docker` instance satisfies it.
46
+ */
47
+ type EngineContainer = {
48
+ start(): Promise<unknown>;
49
+ stop(options?: {
50
+ t?: number;
51
+ }): Promise<unknown>;
52
+ remove(options?: {
53
+ force?: boolean;
54
+ v?: boolean;
55
+ }): Promise<unknown>;
56
+ inspect(): Promise<EngineInspectInfo>;
57
+ };
58
+ type EngineInspectInfo = {
59
+ Config?: {
60
+ Labels?: Record<string, string>;
61
+ };
62
+ State: {
63
+ Running?: boolean;
64
+ OOMKilled?: boolean;
65
+ };
66
+ NetworkSettings: {
67
+ Ports?: Record<string, Array<{
68
+ HostPort?: string;
69
+ }>>;
70
+ };
71
+ };
72
+ type EngineContainerInfo = {
73
+ Labels?: Record<string, string>;
74
+ Created?: unknown;
75
+ };
76
+ export type DockerEngine = {
77
+ createContainer(options: Docker.ContainerCreateOptions): Promise<EngineContainer>;
78
+ getContainer(id: string): EngineContainer;
79
+ listContainers(options?: {
80
+ all?: boolean;
81
+ filters?: {
82
+ label?: string[];
83
+ };
84
+ }): Promise<EngineContainerInfo[]>;
85
+ };
86
+ export type DockerClientConfig = {
43
87
  image: string;
44
88
  /** Workspace-root resolution seam; each analysis's resolved root is the bind source for its tree mounts. */
45
89
  resolveWorkspaceRoot: ResolveWorkspaceRoot;
@@ -87,7 +131,7 @@ export interface DockerClientConfig {
87
131
  */
88
132
  engineSocketPath?: string;
89
133
  /** Injected for tests. */
90
- docker?: Docker;
134
+ docker?: DockerEngine;
91
135
  /** Injected for tests so `/health` polling can be stubbed. */
92
136
  fetch?: typeof fetch;
93
137
  /**
@@ -104,7 +148,7 @@ export interface DockerClientConfig {
104
148
  logger?: Logger;
105
149
  /** Hook called after the registry row is written. */
106
150
  registerSandbox: (session: SpawnSession, spec: SandboxSpec, ref: SandboxRef) => Promise<void>;
107
- }
151
+ };
108
152
  /**
109
153
  * dockerode connection options for a configured engine socket, or `undefined`
110
154
  * to leave construction as a bare `new Docker()` — which preserves dockerode's
@@ -121,3 +165,4 @@ export declare function createDockerSandboxOps(config: DockerClientConfig): {
121
165
  isAliveById(sandboxId: string): ResultAsync<SandboxLiveness, SandboxError>;
122
166
  listManagedSandboxes(): ResultAsync<ManagedSandbox[], SandboxError>;
123
167
  };
168
+ export {};
@@ -32,9 +32,12 @@
32
32
  * The workload ends as uid 1000 with `no-new-privileges` and no effective
33
33
  * capabilities.
34
34
  */
35
+ import { errorMessageOf } from "../lib/thrown.js";
36
+ import { textOf } from "../lib/unknown-text.js";
35
37
  import { lstatSync } from "node:fs";
36
38
  import { mkdir, rm, writeFile } from "node:fs/promises";
37
39
  import { dirname, join } from "node:path";
40
+ import { setTimeout as sleep } from "node:timers/promises";
38
41
  import Docker from "dockerode";
39
42
  import { ResultAsync, err, ok } from "neverthrow";
40
43
  import { createNoopLogger } from "../lib/console-logger.js";
@@ -135,9 +138,9 @@ async function pollHealth(fetchImpl, url, timeoutMs) {
135
138
  catch (err) {
136
139
  lastErr = err;
137
140
  }
138
- await new Promise((r) => setTimeout(r, HEALTH_POLL_MS));
141
+ await sleep(HEALTH_POLL_MS);
139
142
  }
140
- throw new Error(`sandbox /health did not return 200 within ${timeoutMs}ms: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`);
143
+ throw new Error(`sandbox /health did not return 200 within ${timeoutMs}ms: ${errorMessageOf(lastErr) ?? textOf(lastErr)}`);
141
144
  }
142
145
  /**
143
146
  * dockerode connection options for a configured engine socket, or `undefined`
@@ -312,10 +315,10 @@ export function createDockerSandboxOps(config) {
312
315
  ...(write && plan.writableStepPath
313
316
  ? [`${tailWritePrefix({ workspaceRoot: hostTreePath, tail: write.tail })}:${plan.writableStepPath}:rw`]
314
317
  : []),
315
- ...(libsMounted && config.libStorePath ? [`${config.libStorePath}:${plan.libsPath}:ro`] : []),
318
+ ...(libsMounted && config.libStorePath ? [`${config.libStorePath}:${String(plan.libsPath)}:ro`] : []),
316
319
  ...(libsMounted && farm && plan.farmPath ? [`${farm.farmPath}:${plan.farmPath}:ro`] : []),
317
320
  ...(libsMounted && cacheBindable && farm?.cachePath && plan.cachePath ? [`${farm.cachePath}:${plan.cachePath}:rw`] : []),
318
- ...(refsMounted && config.refStorePath ? [`${config.refStorePath}:${plan.refsPath}:ro`] : []),
321
+ ...(refsMounted && config.refStorePath ? [`${config.refStorePath}:${String(plan.refsPath)}:ro`] : []),
319
322
  ...cpuBinds,
320
323
  ];
321
324
  const createFailed = (status, cause) => ({
@@ -337,11 +340,10 @@ export function createDockerSandboxOps(config) {
337
340
  SANDBOX_EGRESS_FIREWALL: "1",
338
341
  ...threadLimitEnv(limits),
339
342
  ...plan.env,
340
- ...(spec.extraEnv ?? {}),
343
+ ...spec.extraEnv,
341
344
  }).map(([k, v]) => `${k}=${v}`);
342
345
  const createOpts = {
343
346
  name: sandboxId,
344
- ...(config.platform !== undefined && { platform: config.platform }),
345
347
  Image: image,
346
348
  Env: env,
347
349
  User: SANDBOX_ROOT_USER,
@@ -374,6 +376,8 @@ export function createDockerSandboxOps(config) {
374
376
  AutoRemove: false,
375
377
  },
376
378
  };
379
+ if (config.platform !== undefined)
380
+ createOpts.platform = config.platform;
377
381
  const sandbox = await createOrAdopt(docker, createOpts, sandboxId, spec.childWorkflowId, createFailed, logger);
378
382
  if (sandbox.isErr())
379
383
  return err(sandbox.error);
@@ -57,13 +57,8 @@ function factorFor(relativePath) {
57
57
  export function estimateDataProfileResources(files) {
58
58
  if (files.length === 0)
59
59
  return { cpu: 1, memoryGb: 2 };
60
- let largest = files[0];
61
- let totalBytes = 0;
62
- for (const f of files) {
63
- totalBytes += f.size;
64
- if (f.size > largest.size)
65
- largest = f;
66
- }
60
+ const totalBytes = files.reduce((sum, f) => sum + f.size, 0);
61
+ const largest = files.reduce((a, b) => (b.size > a.size ? b : a));
67
62
  const memoryGb = Math.max(2, Math.ceil(2 + (largest.size * factorFor(largest.relativePath)) / 1e9));
68
63
  let cpu = totalBytes < 100 * 1e6 ? 1 : totalBytes < 1e9 ? 2 : totalBytes < 10 * 1e9 ? 4 : 8;
69
64
  if (files.length >= 8)
@@ -26,7 +26,7 @@ import type { ExecResult } from "./types.js";
26
26
  */
27
27
  export declare function sandboxExecOutcomeOf(result: ExecResult): SandboxExecOutcome;
28
28
  /** The account of one exec that a failure record can hold. Text-free by construction. */
29
- export interface ExecOutcomeSummary {
29
+ export type ExecOutcomeSummary = {
30
30
  readonly exitCode: number | null;
31
31
  readonly timedOut: boolean;
32
32
  /**
@@ -36,7 +36,7 @@ export interface ExecOutcomeSummary {
36
36
  */
37
37
  readonly stderrTotalBytes: number;
38
38
  readonly syntheticFailureReason?: string;
39
- }
39
+ };
40
40
  /** Reduce a result to its summary. */
41
41
  export declare function summarizeExec(result: ExecResult): ExecOutcomeSummary;
42
42
  /** Keep `summary` as the last known exec of `sandboxId`. */