@inflexa-ai/harness 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (802) hide show
  1. package/README.md +6 -3
  2. package/dist/agents/conversation-agent.d.ts +19 -3
  3. package/dist/agents/conversation-agent.js +49 -30
  4. package/dist/agents/report-session-agent.d.ts +15 -15
  5. package/dist/agents/report-session-agent.js +23 -15
  6. package/dist/agents/sandbox/index.d.ts +1 -1
  7. package/dist/agents/sandbox/index.js +1 -1
  8. package/dist/agents/sandbox/shared.d.ts +35 -16
  9. package/dist/agents/sandbox/shared.js +63 -24
  10. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  11. package/dist/agents/sandbox/types.d.ts +26 -3
  12. package/dist/agents/sandbox/validate-skills.d.ts +2 -2
  13. package/dist/agents/sandbox/validate-skills.js +3 -1
  14. package/dist/agents/sandbox-catalog.d.ts +16 -2
  15. package/dist/agents/sandbox-catalog.js +22 -3
  16. package/dist/agents/system-prompt.d.ts +2 -2
  17. package/dist/app/approve-plan.d.ts +5 -2
  18. package/dist/app/approve-plan.js +1 -1
  19. package/dist/app/chat-turn-workflow.d.ts +114 -0
  20. package/dist/app/chat-turn-workflow.js +307 -0
  21. package/dist/app/chat-turn.d.ts +85 -57
  22. package/dist/app/chat-turn.js +125 -99
  23. package/dist/app/data-profile-orientation.js +10 -8
  24. package/dist/app/data-profile-view.d.ts +4 -4
  25. package/dist/app/data-profile-view.js +9 -8
  26. package/dist/app/in-process-turn.d.ts +42 -0
  27. package/dist/app/in-process-turn.js +139 -0
  28. package/dist/app/message-assembly.d.ts +10 -4
  29. package/dist/app/message-assembly.js +13 -8
  30. package/dist/app/report-session-runtime.d.ts +4 -4
  31. package/dist/app/report-session-runtime.js +36 -21
  32. package/dist/app/spawn-report-session.d.ts +33 -28
  33. package/dist/app/spawn-report-session.js +25 -40
  34. package/dist/app/synthesize-run.d.ts +22 -16
  35. package/dist/app/synthesize-run.js +41 -35
  36. package/dist/app/work.d.ts +96 -0
  37. package/dist/app/work.js +147 -0
  38. package/dist/auth/local-auth-context.d.ts +1 -3
  39. package/dist/auth/local-auth-context.js +1 -3
  40. package/dist/auth/local-run-authorizer.d.ts +1 -1
  41. package/dist/auth/local-run-authorizer.js +5 -3
  42. package/dist/auth/types.d.ts +26 -26
  43. package/dist/billing/cached-resolver.d.ts +4 -4
  44. package/dist/billing/run-charge.d.ts +5 -8
  45. package/dist/billing/run-charge.js +2 -2
  46. package/dist/billing/usage-recorder.d.ts +9 -9
  47. package/dist/citations/aggregate.js +1 -1
  48. package/dist/citations/clients/arxiv.d.ts +2 -2
  49. package/dist/citations/clients/arxiv.js +12 -4
  50. package/dist/citations/clients/common.js +4 -2
  51. package/dist/citations/clients/crossref.d.ts +2 -2
  52. package/dist/citations/clients/crossref.js +37 -37
  53. package/dist/citations/clients/doi-registry.js +15 -16
  54. package/dist/citations/clients/pubmed.d.ts +2 -2
  55. package/dist/citations/clients/pubmed.js +20 -13
  56. package/dist/citations/clients/semantic-scholar.d.ts +2 -2
  57. package/dist/citations/clients/semantic-scholar.js +9 -9
  58. package/dist/citations/compare.js +2 -2
  59. package/dist/citations/match.d.ts +2 -2
  60. package/dist/citations/match.js +12 -7
  61. package/dist/citations/normalize.js +35 -26
  62. package/dist/citations/plan.js +6 -2
  63. package/dist/citations/resolve.d.ts +6 -6
  64. package/dist/citations/resolve.js +34 -25
  65. package/dist/citations/types.d.ts +77 -77
  66. package/dist/config/environment-stores.d.ts +10 -8
  67. package/dist/config/resource-limits.js +1 -3
  68. package/dist/contracts/analogy-report.d.ts +7 -7
  69. package/dist/contracts/analogy-report.js +2 -2
  70. package/dist/contracts/chat-events.d.ts +46 -22
  71. package/dist/contracts/chat-events.js +1 -1
  72. package/dist/contracts/chat-frame.d.ts +15 -5
  73. package/dist/contracts/chat-frame.js +67 -40
  74. package/dist/contracts/chat-parts.d.ts +130 -67
  75. package/dist/contracts/chat-parts.js +1 -0
  76. package/dist/contracts/content-url.js +16 -2
  77. package/dist/contracts/data-profile.d.ts +38 -38
  78. package/dist/contracts/index.d.ts +3 -3
  79. package/dist/contracts/index.js +1 -1
  80. package/dist/contracts/message.d.ts +6 -6
  81. package/dist/contracts/organ-system.d.ts +11 -11
  82. package/dist/contracts/part-registry.d.ts +5 -4
  83. package/dist/contracts/part-registry.js +5 -0
  84. package/dist/contracts/profile-vocabulary.d.ts +11 -10
  85. package/dist/contracts/profile-vocabulary.js +10 -3
  86. package/dist/contracts/report-blocks.d.ts +329 -329
  87. package/dist/contracts/report-reference.d.ts +105 -81
  88. package/dist/contracts/report-reference.js +30 -13
  89. package/dist/contracts/schemas/chat-events.d.ts +45 -6
  90. package/dist/contracts/schemas/chat-events.js +16 -0
  91. package/dist/contracts/schemas/chat-parts.d.ts +214 -102
  92. package/dist/contracts/schemas/chat-parts.js +50 -7
  93. package/dist/contracts/schemas/index.d.ts +1 -1
  94. package/dist/contracts/schemas/index.js +1 -1
  95. package/dist/contracts/severity.d.ts +1 -1
  96. package/dist/contracts/structure-source.d.ts +3 -3
  97. package/dist/contracts/structure-source.js +6 -2
  98. package/dist/contracts/subagent-activity.d.ts +2 -2
  99. package/dist/contracts/subagent-activity.js +5 -3
  100. package/dist/contracts/usage.d.ts +2 -2
  101. package/dist/data/safety-panel-schema.d.ts +25 -25
  102. package/dist/data/safety-panel-schema.js +13 -4
  103. package/dist/execution/artifact-metadata.d.ts +23 -15
  104. package/dist/execution/artifact-metadata.js +33 -10
  105. package/dist/execution/artifact-record.d.ts +2 -2
  106. package/dist/execution/artifact-registration.d.ts +5 -5
  107. package/dist/execution/artifact-registry.d.ts +8 -8
  108. package/dist/execution/dbos-run-launcher.d.ts +24 -4
  109. package/dist/execution/dbos-run-launcher.js +58 -4
  110. package/dist/execution/dbos-workflow-purger.d.ts +7 -6
  111. package/dist/execution/dbos-workflow-purger.js +29 -21
  112. package/dist/execution/input-signature.d.ts +2 -2
  113. package/dist/execution/post-step-pipeline.d.ts +9 -9
  114. package/dist/execution/post-step-pipeline.js +1 -1
  115. package/dist/execution/post-step.js +2 -2
  116. package/dist/execution/reconcile-manifest.d.ts +4 -4
  117. package/dist/execution/reconcile-manifest.js +3 -2
  118. package/dist/execution/run-authorizer.d.ts +46 -37
  119. package/dist/execution/run-authorizer.js +8 -8
  120. package/dist/execution/run-canceler.d.ts +39 -17
  121. package/dist/execution/run-canceler.js +137 -28
  122. package/dist/execution/run-end-record.d.ts +29 -0
  123. package/dist/execution/run-end-record.js +27 -0
  124. package/dist/execution/run-event-parts.d.ts +0 -8
  125. package/dist/execution/run-event-parts.js +29 -24
  126. package/dist/execution/run-event-stream.d.ts +8 -8
  127. package/dist/execution/run-event-stream.js +3 -4
  128. package/dist/execution/run-launcher.d.ts +4 -4
  129. package/dist/execution/run-synthesis.d.ts +49 -48
  130. package/dist/execution/run-synthesis.js +96 -255
  131. package/dist/execution/staged-input.d.ts +2 -2
  132. package/dist/execution/step-summary.d.ts +6 -6
  133. package/dist/execution/step-summary.js +4 -8
  134. package/dist/execution/topo-sort.js +4 -3
  135. package/dist/execution/workflow-purger.d.ts +2 -2
  136. package/dist/index.d.ts +25 -24
  137. package/dist/index.js +36 -37
  138. package/dist/input-sanitization.js +9 -2
  139. package/dist/input-scan/clustering.d.ts +6 -6
  140. package/dist/input-scan/clustering.js +11 -5
  141. package/dist/input-scan/companions.js +3 -2
  142. package/dist/input-scan/detect-sets.d.ts +2 -2
  143. package/dist/input-scan/detect-sets.js +25 -21
  144. package/dist/input-scan/enrich.d.ts +6 -6
  145. package/dist/input-scan/enrich.js +29 -12
  146. package/dist/input-scan/formats.d.ts +2 -2
  147. package/dist/input-scan/formats.js +8 -2
  148. package/dist/input-scan/markers.d.ts +2 -2
  149. package/dist/input-scan/markers.js +14 -5
  150. package/dist/input-scan/menu.d.ts +10 -10
  151. package/dist/input-scan/menu.js +0 -0
  152. package/dist/input-scan/quarantine.d.ts +2 -2
  153. package/dist/input-scan/quarantine.js +23 -18
  154. package/dist/input-scan/readout-budget.d.ts +2 -2
  155. package/dist/input-scan/readout-budget.js +1 -1
  156. package/dist/input-scan/readout.d.ts +2 -2
  157. package/dist/input-scan/readout.js +47 -34
  158. package/dist/input-scan/scan.d.ts +2 -2
  159. package/dist/input-scan/scan.js +7 -5
  160. package/dist/input-scan/set-types.d.ts +28 -28
  161. package/dist/input-scan/shapes.d.ts +4 -4
  162. package/dist/input-scan/shapes.js +0 -0
  163. package/dist/input-scan/templates.d.ts +10 -10
  164. package/dist/input-scan/templates.js +30 -22
  165. package/dist/input-scan/tokens.d.ts +6 -4
  166. package/dist/input-scan/tokens.js +100 -38
  167. package/dist/input-scan/types.d.ts +22 -22
  168. package/dist/lib/async-utils.d.ts +3 -7
  169. package/dist/lib/async-utils.js +5 -9
  170. package/dist/lib/cache.js +1 -1
  171. package/dist/lib/chrome.d.ts +46 -6
  172. package/dist/lib/console-logger.js +2 -2
  173. package/dist/lib/db-result.d.ts +22 -6
  174. package/dist/lib/db-result.js +9 -13
  175. package/dist/lib/eyes.d.ts +4 -4
  176. package/dist/lib/eyes.js +1 -1
  177. package/dist/lib/fs-helpers.js +18 -6
  178. package/dist/lib/fs-result.d.ts +1 -0
  179. package/dist/lib/fs-result.js +5 -6
  180. package/dist/lib/hooks.d.ts +23 -7
  181. package/dist/lib/hooks.js +17 -3
  182. package/dist/lib/host-concurrency.js +3 -2
  183. package/dist/lib/logger.d.ts +2 -2
  184. package/dist/lib/logger.js +2 -1
  185. package/dist/lib/metrics.d.ts +1 -1
  186. package/dist/lib/null-proto.d.ts +6 -0
  187. package/dist/lib/null-proto.js +17 -0
  188. package/dist/lib/otel-spans.d.ts +1 -1
  189. package/dist/lib/otel-spans.js +9 -5
  190. package/dist/lib/otel.d.ts +4 -2
  191. package/dist/lib/otel.js +10 -2
  192. package/dist/lib/page-capture.d.ts +8 -8
  193. package/dist/lib/page-capture.js +9 -4
  194. package/dist/lib/parse-json.d.ts +5 -0
  195. package/dist/lib/parse-json.js +12 -0
  196. package/dist/lib/present.d.ts +12 -0
  197. package/dist/lib/present.js +39 -0
  198. package/dist/lib/rate-limit.d.ts +4 -4
  199. package/dist/lib/rate-limit.js +12 -13
  200. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
  201. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
  202. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
  203. package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
  204. package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
  205. package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
  206. package/dist/lib/regulatory-corpus.d.ts +10 -10
  207. package/dist/lib/regulatory-corpus.js +3 -1
  208. package/dist/lib/result.d.ts +10 -11
  209. package/dist/lib/result.js +15 -13
  210. package/dist/lib/storage.d.ts +2 -2
  211. package/dist/lib/test/async-iterable.d.ts +9 -0
  212. package/dist/lib/test/async-iterable.js +28 -0
  213. package/dist/lib/test/request-url.d.ts +5 -0
  214. package/dist/lib/test/request-url.js +7 -0
  215. package/dist/lib/test/result-assert.d.ts +12 -0
  216. package/dist/lib/test/result-assert.js +17 -0
  217. package/dist/lib/test/text-shapes.d.ts +24 -0
  218. package/dist/lib/test/text-shapes.js +63 -0
  219. package/dist/lib/text.d.ts +22 -0
  220. package/dist/lib/text.js +68 -0
  221. package/dist/lib/thrown.d.ts +18 -0
  222. package/dist/lib/thrown.js +30 -0
  223. package/dist/lib/unknown-array.d.ts +6 -0
  224. package/dist/lib/unknown-array.js +8 -0
  225. package/dist/lib/unknown-containers.d.ts +14 -0
  226. package/dist/lib/unknown-containers.js +17 -0
  227. package/dist/lib/unknown-text.d.ts +8 -0
  228. package/dist/lib/unknown-text.js +28 -0
  229. package/dist/lib/zod-issue-shape.d.ts +1 -1
  230. package/dist/lib/zod-issue-shape.js +31 -31
  231. package/dist/lib/zod-issues.d.ts +3 -3
  232. package/dist/lib/zod-issues.js +30 -17
  233. package/dist/literature/sources/arxiv.d.ts +6 -6
  234. package/dist/literature/sources/arxiv.js +92 -35
  235. package/dist/literature/sources/http.d.ts +2 -2
  236. package/dist/literature/sources/http.js +16 -15
  237. package/dist/literature/sources/pubmed.d.ts +16 -16
  238. package/dist/literature/sources/pubmed.js +96 -61
  239. package/dist/literature/sources/semantic-scholar.d.ts +8 -8
  240. package/dist/literature/sources/semantic-scholar.js +22 -13
  241. package/dist/loop/accounting.d.ts +63 -0
  242. package/dist/loop/accounting.js +141 -0
  243. package/dist/loop/call-policy.d.ts +73 -0
  244. package/dist/loop/call-policy.js +109 -0
  245. package/dist/loop/chat-stream.d.ts +62 -0
  246. package/dist/loop/chat-stream.js +237 -0
  247. package/dist/loop/compaction.d.ts +14 -9
  248. package/dist/loop/compaction.js +17 -0
  249. package/dist/loop/metrics.d.ts +12 -15
  250. package/dist/loop/metrics.js +14 -26
  251. package/dist/loop/run-loop.d.ts +233 -0
  252. package/dist/loop/run-loop.js +770 -0
  253. package/dist/loop/sub-agent.d.ts +61 -0
  254. package/dist/loop/sub-agent.js +161 -0
  255. package/dist/loop/tool-adapter.d.ts +98 -0
  256. package/dist/loop/tool-adapter.js +364 -0
  257. package/dist/loop/tool-detail.d.ts +1 -1
  258. package/dist/loop/tool-detail.js +6 -5
  259. package/dist/loop/tool-outcome.d.ts +1 -1
  260. package/dist/loop/tool-output.d.ts +4 -4
  261. package/dist/loop/tool-output.js +2 -2
  262. package/dist/loop/turn-credentials.d.ts +34 -0
  263. package/dist/loop/turn-credentials.js +73 -0
  264. package/dist/loop/types.d.ts +34 -37
  265. package/dist/loop/types.js +2 -7
  266. package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
  267. package/dist/memory/ai-sdk-message-storage.js +13 -11
  268. package/dist/memory/card-builders.d.ts +14 -14
  269. package/dist/memory/card-builders.js +19 -15
  270. package/dist/memory/conversation-display-recorder.d.ts +22 -6
  271. package/dist/memory/conversation-display-recorder.js +64 -20
  272. package/dist/memory/conversation-display-replay.js +3 -2
  273. package/dist/memory/conversation-display-storage.d.ts +15 -7
  274. package/dist/memory/conversation-display-storage.js +141 -36
  275. package/dist/memory/conversation-view.d.ts +4 -4
  276. package/dist/memory/conversation-view.js +5 -4
  277. package/dist/memory/count-tokens.js +10 -8
  278. package/dist/memory/derive-thread-title.d.ts +0 -13
  279. package/dist/memory/derive-thread-title.js +2 -1
  280. package/dist/memory/message-backfill.d.ts +12 -5
  281. package/dist/memory/message-backfill.js +5 -3
  282. package/dist/memory/thread-history.d.ts +66 -24
  283. package/dist/memory/thread-history.js +212 -79
  284. package/dist/memory/thread-store.d.ts +26 -17
  285. package/dist/memory/thread-store.js +15 -9
  286. package/dist/memory/tool-call-integrity.d.ts +2 -2
  287. package/dist/memory/tool-call-integrity.js +4 -3
  288. package/dist/memory/working-memory.d.ts +16 -12
  289. package/dist/memory/working-memory.js +72 -61
  290. package/dist/prompts/briefing.d.ts +63 -9
  291. package/dist/prompts/briefing.js +130 -3
  292. package/dist/prompts/planner.js +13 -2
  293. package/dist/prompts/synthesis-agent.d.ts +1 -1
  294. package/dist/prompts/synthesis-agent.js +6 -14
  295. package/dist/provenance/collector.d.ts +6 -6
  296. package/dist/provenance/collector.js +15 -8
  297. package/dist/provenance/exec-frame.d.ts +2 -2
  298. package/dist/provenance/exec-frame.js +6 -1
  299. package/dist/provenance/seam.d.ts +24 -19
  300. package/dist/provenance/seam.js +7 -5
  301. package/dist/provenance/types.d.ts +6 -6
  302. package/dist/providers/ai-sdk.d.ts +113 -62
  303. package/dist/providers/ai-sdk.js +303 -458
  304. package/dist/providers/embedding.d.ts +2 -2
  305. package/dist/providers/embedding.js +1 -1
  306. package/dist/providers/errors.d.ts +22 -2
  307. package/dist/providers/errors.js +98 -50
  308. package/dist/providers/prompt-cache.d.ts +8 -8
  309. package/dist/providers/prompt-cache.js +13 -11
  310. package/dist/providers/reasoning.d.ts +2 -2
  311. package/dist/providers/reasoning.js +2 -2
  312. package/dist/providers/types.d.ts +59 -92
  313. package/dist/reference-data/catalog.d.ts +2 -15
  314. package/dist/reference-data/catalog.js +166 -10
  315. package/dist/reference-data/receipt.d.ts +2 -2
  316. package/dist/report-model/assert-rules.js +1 -1
  317. package/dist/report-model/authoring-grammar.d.ts +209 -231
  318. package/dist/report-model/block-walk.d.ts +10 -10
  319. package/dist/report-model/block-walk.js +2 -0
  320. package/dist/report-model/draft-finish.d.ts +8 -8
  321. package/dist/report-model/draft-finish.js +1 -1
  322. package/dist/report-model/draft-hash.js +8 -7
  323. package/dist/report-model/draft-operations.d.ts +22 -10
  324. package/dist/report-model/draft-operations.js +48 -30
  325. package/dist/report-model/draft-read.d.ts +19 -7
  326. package/dist/report-model/draft-read.js +16 -6
  327. package/dist/report-model/draft.d.ts +844 -2
  328. package/dist/report-model/draft.js +3 -1
  329. package/dist/report-model/fixture-resolver.js +39 -16
  330. package/dist/report-model/pin-snapshot.d.ts +2 -2
  331. package/dist/report-model/pin-snapshot.js +15 -15
  332. package/dist/report-model/production-resolver.d.ts +18 -18
  333. package/dist/report-model/production-resolver.js +50 -42
  334. package/dist/report-model/reference-resolver.d.ts +26 -10
  335. package/dist/report-model/reference-resolver.js +68 -5
  336. package/dist/report-model/reference-stamp.js +30 -38
  337. package/dist/report-model/structural-validation.js +12 -4
  338. package/dist/report-model/validate.d.ts +7 -7
  339. package/dist/report-model/validate.js +6 -6
  340. package/dist/report-render/assets.d.ts +2 -2
  341. package/dist/report-render/assets.js +27 -3
  342. package/dist/report-render/chart-export.d.ts +10 -2
  343. package/dist/report-render/chart-export.js +37 -11
  344. package/dist/report-render/chart-presets.d.ts +8 -8
  345. package/dist/report-render/chart-presets.js +3 -3
  346. package/dist/report-render/chart-renderers.d.ts +23 -16
  347. package/dist/report-render/chart-renderers.js +74 -53
  348. package/dist/report-render/chart-toolbox.d.ts +2 -2
  349. package/dist/report-render/chart-toolbox.js +7 -6
  350. package/dist/report-render/chart.d.ts +15 -16
  351. package/dist/report-render/chart.js +369 -252
  352. package/dist/report-render/design.d.ts +36 -297
  353. package/dist/report-render/design.js +0 -12
  354. package/dist/report-render/figures/common.d.ts +12 -12
  355. package/dist/report-render/figures/common.js +42 -31
  356. package/dist/report-render/figures/dendrogram.d.ts +3 -3
  357. package/dist/report-render/figures/dendrogram.js +10 -10
  358. package/dist/report-render/figures/dense.js +15 -8
  359. package/dist/report-render/figures/dotplot.js +46 -33
  360. package/dist/report-render/figures/embedding.js +52 -43
  361. package/dist/report-render/figures/equal-units.d.ts +10 -10
  362. package/dist/report-render/figures/equal-units.js +27 -27
  363. package/dist/report-render/figures/forest.js +9 -7
  364. package/dist/report-render/figures/gsea.js +21 -11
  365. package/dist/report-render/figures/heatmap.js +13 -9
  366. package/dist/report-render/figures/index.d.ts +10 -10
  367. package/dist/report-render/figures/index.js +4 -2
  368. package/dist/report-render/figures/km.js +10 -9
  369. package/dist/report-render/figures/label-room.d.ts +12 -12
  370. package/dist/report-render/figures/label-room.js +7 -2
  371. package/dist/report-render/figures/locuszoom.d.ts +2 -2
  372. package/dist/report-render/figures/locuszoom.js +59 -31
  373. package/dist/report-render/figures/lollipop.js +3 -2
  374. package/dist/report-render/figures/ma.js +8 -4
  375. package/dist/report-render/figures/manhattan.d.ts +1 -2
  376. package/dist/report-render/figures/manhattan.js +52 -34
  377. package/dist/report-render/figures/oncoprint.js +4 -5
  378. package/dist/report-render/figures/pca.js +25 -11
  379. package/dist/report-render/figures/qq.js +20 -9
  380. package/dist/report-render/figures/roc.js +1 -1
  381. package/dist/report-render/figures/sankey.d.ts +2 -2
  382. package/dist/report-render/figures/sankey.js +11 -10
  383. package/dist/report-render/figures/upset.d.ts +6 -6
  384. package/dist/report-render/figures/upset.js +7 -4
  385. package/dist/report-render/figures/volcano.js +12 -10
  386. package/dist/report-render/hybrid-svg.d.ts +4 -4
  387. package/dist/report-render/hybrid-svg.js +7 -5
  388. package/dist/report-render/number-format.d.ts +4 -4
  389. package/dist/report-render/number-format.js +62 -27
  390. package/dist/report-render/page.js +2 -1
  391. package/dist/report-render/provenance-data.d.ts +2 -2
  392. package/dist/report-render/references.d.ts +4 -4
  393. package/dist/report-render/render.d.ts +2 -2
  394. package/dist/report-render/render.js +10 -11
  395. package/dist/report-render/script-json.js +1 -1
  396. package/dist/report-render/table-data.d.ts +6 -6
  397. package/dist/report-render/test/options.d.ts +49 -0
  398. package/dist/report-render/test/options.js +143 -0
  399. package/dist/report-render/test/page-function.d.ts +19 -0
  400. package/dist/report-render/test/page-function.js +33 -0
  401. package/dist/report-render/types.d.ts +10 -10
  402. package/dist/report-render/value-bridge.d.ts +4 -4
  403. package/dist/report-render/value-bridge.js +27 -14
  404. package/dist/report-render/views/chart-view.d.ts +2 -2
  405. package/dist/report-render/views/chart-view.js +2 -2
  406. package/dist/report-render/views/lineage.d.ts +6 -6
  407. package/dist/report-render/views/lineage.js +2 -0
  408. package/dist/report-render/views/page-view.d.ts +2 -2
  409. package/dist/report-render/views/page-view.js +1 -0
  410. package/dist/report-render/views/prose.js +25 -8
  411. package/dist/report-render/views/references-view.js +12 -1
  412. package/dist/report-render/views/values.js +1 -1
  413. package/dist/runtime/assemble.d.ts +53 -26
  414. package/dist/runtime/assemble.js +103 -56
  415. package/dist/runtime/boot.d.ts +8 -7
  416. package/dist/runtime/boot.js +1 -1
  417. package/dist/runtime/connection-budget.d.ts +6 -6
  418. package/dist/runtime/connection-budget.js +1 -1
  419. package/dist/runtime/dbos.d.ts +29 -19
  420. package/dist/runtime/dbos.js +35 -20
  421. package/dist/runtime/result-serialization.js +18 -5
  422. package/dist/runtime/shutdown.d.ts +2 -2
  423. package/dist/sandbox/client.d.ts +7 -3
  424. package/dist/sandbox/cpu-files.d.ts +2 -2
  425. package/dist/sandbox/cpu-files.js +21 -4
  426. package/dist/sandbox/create-sandbox.d.ts +7 -8
  427. package/dist/sandbox/create-sandbox.js +6 -12
  428. package/dist/sandbox/docker-client.d.ts +48 -3
  429. package/dist/sandbox/docker-client.js +10 -6
  430. package/dist/sandbox/estimate-data-profile-resources.js +2 -7
  431. package/dist/sandbox/exec-outcome.d.ts +2 -2
  432. package/dist/sandbox/exec-outcome.js +1 -1
  433. package/dist/sandbox/exec.d.ts +10 -6
  434. package/dist/sandbox/exec.js +27 -12
  435. package/dist/sandbox/execution-id.js +14 -6
  436. package/dist/sandbox/farm.d.ts +2 -2
  437. package/dist/sandbox/farm.js +22 -27
  438. package/dist/sandbox/identity.d.ts +7 -0
  439. package/dist/sandbox/identity.js +14 -3
  440. package/dist/sandbox/image-packages.d.ts +26 -4
  441. package/dist/sandbox/image-packages.js +29 -27
  442. package/dist/sandbox/k8s-client.d.ts +35 -8
  443. package/dist/sandbox/k8s-client.js +6 -5
  444. package/dist/sandbox/labels.js +1 -0
  445. package/dist/sandbox/liveness.js +3 -1
  446. package/dist/sandbox/mount-plan.d.ts +10 -10
  447. package/dist/sandbox/mount-plan.js +13 -14
  448. package/dist/sandbox/notification-sweep.d.ts +4 -4
  449. package/dist/sandbox/notification-sweep.js +4 -7
  450. package/dist/sandbox/package-identity.d.ts +6 -13
  451. package/dist/sandbox/package-identity.js +46 -28
  452. package/dist/sandbox/reaper.d.ts +10 -10
  453. package/dist/sandbox/reaper.js +4 -6
  454. package/dist/sandbox/sandbox-error.d.ts +2 -9
  455. package/dist/sandbox/sandbox-error.js +21 -8
  456. package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
  457. package/dist/sandbox/sandbox-step-translate.js +22 -8
  458. package/dist/sandbox/step-sandbox.d.ts +47 -0
  459. package/dist/sandbox/step-sandbox.js +53 -0
  460. package/dist/sandbox/types.d.ts +18 -19
  461. package/dist/sandbox/types.js +1 -1
  462. package/dist/schemas/artifact-manifest.d.ts +4 -4
  463. package/dist/schemas/data-profile-schemas.d.ts +351 -306
  464. package/dist/schemas/file-metadata.js +2 -4
  465. package/dist/schemas/plan-schemas.d.ts +79 -25
  466. package/dist/schemas/plan-schemas.js +1 -1
  467. package/dist/schemas/run-synthesis.d.ts +95 -26
  468. package/dist/schemas/run-synthesis.js +3 -1
  469. package/dist/schemas/validate-plan.d.ts +4 -4
  470. package/dist/schemas/validate-plan.js +17 -5
  471. package/dist/schemas/workflow-state.d.ts +127 -14
  472. package/dist/schemas/workflow-state.js +56 -2
  473. package/dist/state/active-turns.d.ts +36 -0
  474. package/dist/state/active-turns.js +67 -0
  475. package/dist/state/analyses-metrics.d.ts +8 -8
  476. package/dist/state/analyses-metrics.js +4 -4
  477. package/dist/state/analyses.d.ts +0 -14
  478. package/dist/state/analyses.js +0 -32
  479. package/dist/state/artifacts.d.ts +47 -18
  480. package/dist/state/artifacts.js +48 -7
  481. package/dist/state/data-profile.d.ts +2 -2
  482. package/dist/state/db.d.ts +12 -2
  483. package/dist/state/db.js +5 -0
  484. package/dist/state/edit-intents.d.ts +4 -0
  485. package/dist/state/edit-intents.js +71 -0
  486. package/dist/state/index.d.ts +5 -5
  487. package/dist/state/index.js +3 -3
  488. package/dist/state/init.d.ts +2 -1
  489. package/dist/state/init.js +5 -2
  490. package/dist/state/migrations/20260927120000_baseline.js +3 -1
  491. package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
  492. package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
  493. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
  494. package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
  495. package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
  496. package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
  497. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
  498. package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
  499. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
  500. package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
  501. package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
  502. package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
  503. package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
  504. package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
  505. package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
  506. package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
  507. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
  508. package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
  509. package/dist/state/migrations/index.js +18 -0
  510. package/dist/state/paused-work.d.ts +52 -0
  511. package/dist/state/paused-work.js +105 -0
  512. package/dist/state/plans.d.ts +27 -8
  513. package/dist/state/plans.js +14 -11
  514. package/dist/state/purge-analysis.d.ts +6 -6
  515. package/dist/state/purge-analysis.js +10 -2
  516. package/dist/state/report-session-state.d.ts +43 -18
  517. package/dist/state/report-session-state.js +43 -4
  518. package/dist/state/report-versions.d.ts +16 -11
  519. package/dist/state/report-versions.js +5 -3
  520. package/dist/state/runs.d.ts +70 -25
  521. package/dist/state/runs.js +127 -64
  522. package/dist/state/schema.d.ts +18 -21
  523. package/dist/state/schema.js +4 -5
  524. package/dist/state/snapshot-parse.d.ts +2 -2
  525. package/dist/state/snapshot-parse.js +14 -8
  526. package/dist/state/step-executions.d.ts +29 -8
  527. package/dist/state/step-executions.js +28 -4
  528. package/dist/state/tool-outputs.d.ts +2 -2
  529. package/dist/state/tool-outputs.js +2 -1
  530. package/dist/state/vector-store.d.ts +16 -16
  531. package/dist/state/vector-store.js +11 -7
  532. package/dist/tasks/data-profile-absorb.d.ts +3 -3
  533. package/dist/tasks/data-profile-absorb.js +21 -16
  534. package/dist/tasks/data-profile-activity.d.ts +5 -5
  535. package/dist/tasks/data-profile-activity.js +5 -5
  536. package/dist/tasks/data-profile-index.d.ts +4 -4
  537. package/dist/tasks/data-profile-index.js +32 -17
  538. package/dist/tasks/data-profile-resolve.d.ts +8 -8
  539. package/dist/tasks/data-profile-resolve.js +88 -62
  540. package/dist/tasks/data-profile.d.ts +40 -31
  541. package/dist/tasks/data-profile.js +138 -95
  542. package/dist/tasks/extract-values.d.ts +26 -79
  543. package/dist/tasks/extract-values.js +48 -108
  544. package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
  545. package/dist/tasks/refresh-regulatory-corpus.js +12 -8
  546. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
  547. package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
  548. package/dist/testing.d.ts +60 -0
  549. package/dist/testing.js +96 -0
  550. package/dist/tools/ad-hoc-router.d.ts +11 -9
  551. package/dist/tools/ad-hoc-router.js +80 -51
  552. package/dist/tools/analysis-invocation.d.ts +7 -0
  553. package/dist/tools/analysis-invocation.js +29 -5
  554. package/dist/tools/approval/contract.d.ts +8 -52
  555. package/dist/tools/approval/contract.js +7 -36
  556. package/dist/tools/approval/gateway.d.ts +27 -28
  557. package/dist/tools/approval/gateway.js +33 -130
  558. package/dist/tools/approval/queries.d.ts +6 -11
  559. package/dist/tools/approval/queries.js +43 -29
  560. package/dist/tools/approval/uuidv7.js +2 -2
  561. package/dist/tools/bio/chembl.d.ts +3 -3
  562. package/dist/tools/bio/chembl.js +10 -0
  563. package/dist/tools/bio/comptox.d.ts +25 -8
  564. package/dist/tools/bio/comptox.js +4 -2
  565. package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
  566. package/dist/tools/bio/drug-gene-interactions.js +11 -8
  567. package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
  568. package/dist/tools/bio/gene-disease-evidence.js +10 -6
  569. package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
  570. package/dist/tools/bio/keys.d.ts +2 -2
  571. package/dist/tools/bio/keys.js +3 -3
  572. package/dist/tools/bio/lookup-annotation.d.ts +5 -5
  573. package/dist/tools/bio/lookup-annotation.js +3 -0
  574. package/dist/tools/bio/opentargets.d.ts +1 -1
  575. package/dist/tools/bio/opentargets.js +6 -0
  576. package/dist/tools/bio/pubchem.d.ts +2 -2
  577. package/dist/tools/bio/pubchem.js +6 -0
  578. package/dist/tools/bio/pubmed.d.ts +26 -16
  579. package/dist/tools/bio/pubmed.js +9 -3
  580. package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
  581. package/dist/tools/bio/search-clinical-trials.js +5 -1
  582. package/dist/tools/bio/search-faers.d.ts +2 -2
  583. package/dist/tools/bio/search-faers.js +1 -1
  584. package/dist/tools/bio/search-gene.d.ts +2 -2
  585. package/dist/tools/bio/search-gene.js +1 -0
  586. package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
  587. package/dist/tools/bio/search-geo-datasets.js +5 -5
  588. package/dist/tools/bio/search-interactions.d.ts +1 -1
  589. package/dist/tools/bio/search-patents.d.ts +28 -22
  590. package/dist/tools/bio/search-patents.js +20 -17
  591. package/dist/tools/bio/search-protein.d.ts +2 -2
  592. package/dist/tools/bio/search-protein.js +1 -1
  593. package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
  594. package/dist/tools/bio/search-regulatory-approvals.js +21 -16
  595. package/dist/tools/bio/target-safety.d.ts +8 -8
  596. package/dist/tools/bio/target-safety.js +11 -6
  597. package/dist/tools/capability-data.d.ts +40 -0
  598. package/dist/tools/capability-data.js +74 -0
  599. package/dist/tools/define-tool.d.ts +55 -46
  600. package/dist/tools/define-tool.js +39 -27
  601. package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
  602. package/dist/tools/display/normalize-echart-spec.js +51 -27
  603. package/dist/tools/display/show-user.d.ts +2 -2
  604. package/dist/tools/display/show-user.js +1 -1
  605. package/dist/tools/execute-analysis.d.ts +54 -17
  606. package/dist/tools/execute-analysis.js +193 -62
  607. package/dist/tools/knowledge/check.d.ts +182 -0
  608. package/dist/tools/knowledge/check.js +94 -0
  609. package/dist/tools/knowledge/client.d.ts +351 -0
  610. package/dist/tools/knowledge/client.js +319 -0
  611. package/dist/tools/knowledge/environment.d.ts +78 -0
  612. package/dist/tools/knowledge/environment.js +116 -0
  613. package/dist/tools/knowledge/index.d.ts +49 -0
  614. package/dist/tools/knowledge/index.js +70 -0
  615. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  616. package/dist/tools/knowledge/local-slots.js +184 -0
  617. package/dist/tools/knowledge/pin.d.ts +14 -0
  618. package/dist/tools/knowledge/pin.js +17 -0
  619. package/dist/tools/knowledge/recommend.d.ts +67 -0
  620. package/dist/tools/knowledge/recommend.js +106 -0
  621. package/dist/tools/knowledge/situation.d.ts +143 -0
  622. package/dist/tools/knowledge/situation.js +157 -0
  623. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  624. package/dist/tools/knowledge/skeleton.js +201 -0
  625. package/dist/tools/knowledge/template.d.ts +139 -0
  626. package/dist/tools/knowledge/template.js +273 -0
  627. package/dist/tools/lib/alphafold-client.js +2 -1
  628. package/dist/tools/lib/amass-client.d.ts +28 -28
  629. package/dist/tools/lib/amass-client.js +20 -10
  630. package/dist/tools/lib/api-utils.d.ts +13 -3
  631. package/dist/tools/lib/api-utils.js +17 -3
  632. package/dist/tools/lib/bgee-client.d.ts +6 -6
  633. package/dist/tools/lib/bgee-client.js +16 -10
  634. package/dist/tools/lib/cbioportal-client.d.ts +4 -4
  635. package/dist/tools/lib/cbioportal-client.js +9 -8
  636. package/dist/tools/lib/chembl-client.d.ts +14 -14
  637. package/dist/tools/lib/chembl-client.js +11 -4
  638. package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
  639. package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
  640. package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
  641. package/dist/tools/lib/clinical-trials-client.js +10 -10
  642. package/dist/tools/lib/clinvar-client.d.ts +2 -2
  643. package/dist/tools/lib/clinvar-client.js +6 -6
  644. package/dist/tools/lib/ctx-ops.d.ts +23 -23
  645. package/dist/tools/lib/ctx-ops.js +13 -10
  646. package/dist/tools/lib/dgidb-client.d.ts +6 -6
  647. package/dist/tools/lib/dgidb-client.js +10 -12
  648. package/dist/tools/lib/disgenet-client.d.ts +4 -4
  649. package/dist/tools/lib/ema-client.d.ts +2 -2
  650. package/dist/tools/lib/ensembl-client.d.ts +4 -4
  651. package/dist/tools/lib/ensembl-client.js +5 -4
  652. package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
  653. package/dist/tools/lib/gwas-catalog-client.js +17 -17
  654. package/dist/tools/lib/html-text.d.ts +6 -0
  655. package/dist/tools/lib/html-text.js +9 -0
  656. package/dist/tools/lib/identifier-resolver.d.ts +4 -4
  657. package/dist/tools/lib/identifier-resolver.js +7 -3
  658. package/dist/tools/lib/impc-client.d.ts +8 -8
  659. package/dist/tools/lib/impc-client.js +46 -35
  660. package/dist/tools/lib/iuphar-client.d.ts +2 -2
  661. package/dist/tools/lib/iuphar-client.js +7 -16
  662. package/dist/tools/lib/monarch-client.d.ts +4 -4
  663. package/dist/tools/lib/openfda-client.d.ts +22 -22
  664. package/dist/tools/lib/openfda-client.js +23 -22
  665. package/dist/tools/lib/opentargets-client.d.ts +12 -12
  666. package/dist/tools/lib/pathway-client.d.ts +4 -4
  667. package/dist/tools/lib/pathway-client.js +15 -19
  668. package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
  669. package/dist/tools/lib/pharmgkb-client.js +1 -1
  670. package/dist/tools/lib/protein-family-modality.d.ts +2 -2
  671. package/dist/tools/lib/protein-family-modality.js +0 -2
  672. package/dist/tools/lib/protein-family-normalize.js +7 -0
  673. package/dist/tools/lib/pubchem-client.d.ts +2 -2
  674. package/dist/tools/lib/pubchem-client.js +1 -0
  675. package/dist/tools/lib/pubchem-ops.d.ts +4 -4
  676. package/dist/tools/lib/pubchem-ops.js +8 -0
  677. package/dist/tools/lib/pubmed-client.d.ts +9 -9
  678. package/dist/tools/lib/pubmed-client.js +1 -1
  679. package/dist/tools/lib/string-client.d.ts +6 -6
  680. package/dist/tools/lib/uniprot-client.d.ts +8 -8
  681. package/dist/tools/lib/uniprot-client.js +5 -1
  682. package/dist/tools/memory/update-working-memory.d.ts +16 -13
  683. package/dist/tools/memory/update-working-memory.js +21 -3
  684. package/dist/tools/read-tool-output.js +8 -2
  685. package/dist/tools/registry.d.ts +2 -2
  686. package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
  687. package/dist/tools/report-authoring/authoring-tools.js +128 -62
  688. package/dist/tools/report-session/derive-table.d.ts +19 -59
  689. package/dist/tools/report-session/derive-table.js +120 -122
  690. package/dist/tools/report-session/examine-page.d.ts +6 -6
  691. package/dist/tools/report-session/examine-page.js +14 -12
  692. package/dist/tools/report-session/list-artifacts.d.ts +6 -6
  693. package/dist/tools/report-session/list-artifacts.js +5 -5
  694. package/dist/tools/report-session/page-faults.d.ts +6 -6
  695. package/dist/tools/report-session/page-faults.js +3 -1
  696. package/dist/tools/report-session/preview-report.d.ts +4 -3
  697. package/dist/tools/report-session/preview-report.js +26 -7
  698. package/dist/tools/report-session/record-version.d.ts +9 -4
  699. package/dist/tools/report-session/record-version.js +16 -9
  700. package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
  701. package/dist/tools/research/generate-analogy-report.d.ts +14 -7
  702. package/dist/tools/research/generate-analogy-report.js +80 -76
  703. package/dist/tools/research/generate-plan.d.ts +39 -16
  704. package/dist/tools/research/generate-plan.js +565 -338
  705. package/dist/tools/research/guarded-address.d.ts +20 -0
  706. package/dist/tools/research/guarded-address.js +149 -0
  707. package/dist/tools/research/inspect-data-profile.d.ts +27 -20
  708. package/dist/tools/research/inspect-data-profile.js +26 -25
  709. package/dist/tools/research/inspect-run.d.ts +54 -27
  710. package/dist/tools/research/inspect-run.js +50 -40
  711. package/dist/tools/research/literature-reviewer.d.ts +8 -7
  712. package/dist/tools/research/literature-reviewer.js +29 -28
  713. package/dist/tools/research/search-arxiv.d.ts +1 -1
  714. package/dist/tools/research/search-arxiv.js +1 -1
  715. package/dist/tools/research/search-github-repos.d.ts +10 -7
  716. package/dist/tools/research/search-github-repos.js +25 -22
  717. package/dist/tools/research/search-semantic-scholar.js +1 -1
  718. package/dist/tools/research/searxng-engine.d.ts +40 -0
  719. package/dist/tools/research/searxng-engine.js +122 -0
  720. package/dist/tools/research/web-fetch.d.ts +127 -0
  721. package/dist/tools/research/web-fetch.js +618 -0
  722. package/dist/tools/research/web-search.d.ts +84 -0
  723. package/dist/tools/research/web-search.js +117 -0
  724. package/dist/tools/sandbox/link-packages.d.ts +11 -7
  725. package/dist/tools/sandbox/link-packages.js +11 -8
  726. package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
  727. package/dist/tools/sandbox/list-available-packages.js +43 -29
  728. package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
  729. package/dist/tools/sandbox/list-available-refs.js +119 -37
  730. package/dist/tools/sandbox/report-blocker.d.ts +30 -37
  731. package/dist/tools/sandbox/report-blocker.js +22 -68
  732. package/dist/tools/sandbox/skills.d.ts +16 -12
  733. package/dist/tools/sandbox/skills.js +16 -12
  734. package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
  735. package/dist/tools/sandbox/submit-file-metadata.js +18 -21
  736. package/dist/tools/start-report-session.d.ts +13 -5
  737. package/dist/tools/start-report-session.js +35 -8
  738. package/dist/tools/terminal-text.d.ts +14 -0
  739. package/dist/tools/terminal-text.js +51 -0
  740. package/dist/tools/workspace/decision-record.d.ts +81 -0
  741. package/dist/tools/workspace/decision-record.js +127 -0
  742. package/dist/tools/workspace/edit-file.d.ts +59 -18
  743. package/dist/tools/workspace/edit-file.js +98 -15
  744. package/dist/tools/workspace/execute-command.d.ts +31 -12
  745. package/dist/tools/workspace/execute-command.js +37 -8
  746. package/dist/tools/workspace/file-stat.d.ts +6 -3
  747. package/dist/tools/workspace/grep.d.ts +10 -7
  748. package/dist/tools/workspace/grep.js +9 -3
  749. package/dist/tools/workspace/index.d.ts +1 -0
  750. package/dist/tools/workspace/index.js +1 -0
  751. package/dist/tools/workspace/list-files.d.ts +6 -3
  752. package/dist/tools/workspace/mutator.d.ts +28 -15
  753. package/dist/tools/workspace/mutator.js +107 -53
  754. package/dist/tools/workspace/read-file.d.ts +8 -5
  755. package/dist/tools/workspace/result-bounds.d.ts +5 -5
  756. package/dist/tools/workspace/result-bounds.js +4 -2
  757. package/dist/tools/workspace/run-exec.d.ts +2 -2
  758. package/dist/tools/workspace/run-exec.js +3 -3
  759. package/dist/tools/workspace/scan-inputs.d.ts +8 -5
  760. package/dist/tools/workspace/scan-inputs.js +17 -5
  761. package/dist/tools/workspace/show-file.d.ts +1 -1
  762. package/dist/tools/workspace/show-file.js +2 -1
  763. package/dist/tools/workspace/show-plan.d.ts +8 -5
  764. package/dist/tools/workspace/show-plan.js +9 -8
  765. package/dist/tools/workspace/workspace-search.d.ts +41 -13
  766. package/dist/tools/workspace/workspace-search.js +27 -14
  767. package/dist/tools/workspace/write-file.d.ts +9 -7
  768. package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
  769. package/dist/workflows/execute-analysis-scheduler.js +6 -3
  770. package/dist/workflows/execute-analysis.d.ts +100 -76
  771. package/dist/workflows/execute-analysis.js +380 -247
  772. package/dist/workflows/pause.d.ts +71 -0
  773. package/dist/workflows/pause.js +173 -0
  774. package/dist/workflows/sandbox-step.d.ts +50 -61
  775. package/dist/workflows/sandbox-step.js +99 -106
  776. package/dist/workflows/test/sql-writes.d.ts +21 -0
  777. package/dist/workflows/test/sql-writes.js +36 -0
  778. package/dist/workspace/filesystem.d.ts +6 -6
  779. package/dist/workspace/filesystem.js +10 -8
  780. package/dist/workspace/paths.d.ts +1 -1
  781. package/dist/workspace/paths.js +15 -4
  782. package/dist/workspace/search-config.d.ts +2 -2
  783. package/dist/workspace/search-config.js +1 -1
  784. package/package.json +25 -22
  785. package/dist/loop/continue-agent.d.ts +0 -40
  786. package/dist/loop/continue-agent.js +0 -38
  787. package/dist/loop/genai-spans.d.ts +0 -47
  788. package/dist/loop/genai-spans.js +0 -134
  789. package/dist/loop/run-agent.d.ts +0 -236
  790. package/dist/loop/run-agent.js +0 -1110
  791. package/dist/loop/run-step.d.ts +0 -29
  792. package/dist/loop/run-step.js +0 -34
  793. package/dist/loop/run-to-terminal.d.ts +0 -66
  794. package/dist/loop/run-to-terminal.js +0 -90
  795. package/dist/loop/tool-mask.d.ts +0 -23
  796. package/dist/loop/tool-mask.js +0 -46
  797. package/dist/providers/streaming-chat.d.ts +0 -32
  798. package/dist/providers/streaming-chat.js +0 -91
  799. package/dist/tasks/derive-table-exec.d.ts +0 -54
  800. package/dist/tasks/derive-table-exec.js +0 -86
  801. package/dist/workflows/suspension.d.ts +0 -32
  802. package/dist/workflows/suspension.js +0 -38
@@ -4,16 +4,28 @@
4
4
  * module.
5
5
  */
6
6
  import type { ResultAsync } from "neverthrow";
7
+ import type { QueryConfig } from "pg";
7
8
  import { type DbError } from "../lib/db-result.js";
8
9
  import type { Querier } from "./db.js";
9
- import type { StepExecutionRow } from "./schema.js";
10
- export interface SeedStepExecutionRow {
10
+ import { type StepExecutionRow } from "./schema.js";
11
+ /**
12
+ * The row-reading surface of this module: one query over the text or config form, whose rows the
13
+ * mapStepExecutionRow parser types. A computed test fake satisfies this shape directly, where the
14
+ * row-generic of `Querier` cannot be implemented by a fake that computes its rows.
15
+ */
16
+ export type StepRowQuerier = {
17
+ query(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
18
+ rows: Record<string, unknown>[];
19
+ rowCount: number | null;
20
+ }>;
21
+ };
22
+ export type SeedStepExecutionRow = {
11
23
  runId: string;
12
24
  stepId: string;
13
25
  analysisId: string;
14
26
  wave: number;
15
27
  agentId: string;
16
- }
28
+ };
17
29
  /**
18
30
  * Seed one `pending` row per plan step at run start (`started_at` NULL — no
19
31
  * attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
@@ -25,7 +37,7 @@ export interface SeedStepExecutionRow {
25
37
  * honest done/total progress including not-yet-started steps.
26
38
  */
27
39
  export declare function seedStepExecutions(pool: Querier, rows: readonly SeedStepExecutionRow[]): ResultAsync<void, DbError>;
28
- export interface InsertStepExecutionInput {
40
+ export type InsertStepExecutionInput = {
29
41
  runId: string;
30
42
  stepId: string;
31
43
  analysisId: string;
@@ -33,14 +45,14 @@ export interface InsertStepExecutionInput {
33
45
  agentId: string;
34
46
  /** DBOS child workflow id (`"${parent}-${N}"`). Optional for legacy callers. */
35
47
  childWorkflowId?: string | null;
36
- }
48
+ };
37
49
  export declare function insertStepExecution(pool: Querier, input: InsertStepExecutionInput): ResultAsync<void, DbError>;
38
50
  /**
39
51
  * Look up a step execution by its DBOS child workflow id. The parent
40
52
  * scheduler uses this to find the step row corresponding to a CANCELLED
41
53
  * child without holding the runId/stepId map in memory across recovery.
42
54
  */
43
- export interface UpdateStepExecutionInput {
55
+ export type UpdateStepExecutionInput = {
44
56
  /** Step status — `running` is allowed for mid-flight telemetry updates (retries). */
45
57
  status: "running" | "completed" | "failed" | "skipped" | "canceled" | "blocked";
46
58
  durationMs?: number | null;
@@ -55,7 +67,7 @@ export interface UpdateStepExecutionInput {
55
67
  finishReason?: string | null;
56
68
  /** True when `stepsUsed === maxSteps`. Stored as 0/1 in SQLite. */
57
69
  hitMaxSteps?: boolean | null;
58
- }
70
+ };
59
71
  /**
60
72
  * Update a step execution row. Columns are written conditionally so callers
61
73
  * can bump `attempts` / `lastErrorClass` on retry without clobbering timing
@@ -74,4 +86,13 @@ export declare function updateStepExecution(pool: Querier, runId: string, stepId
74
86
  * these steps never started.
75
87
  */
76
88
  export declare function sweepPendingStepExecutions(pool: Querier, runId: string): ResultAsync<void, DbError>;
77
- export declare function queryStepsByRun(pool: Querier, runId: string): ResultAsync<StepExecutionRow[], DbError>;
89
+ /**
90
+ * Settle a run's still-`running` rows to `canceled` after an engine cancel.
91
+ * A canceled child re-raises before it writes a terminal row, so this is the
92
+ * only writer for a step that the cancel cut. `canceled`, not `skipped`: these
93
+ * steps started. The `status = 'running'` guard keeps a terminal row that a
94
+ * child wrote first. `started_at` and `completed_at` are ISO 8601 `TEXT`, so
95
+ * the duration casts both; it is NULL when `started_at` is NULL.
96
+ */
97
+ export declare function cancelRunningStepExecutions(pool: Querier, runId: string, reason: string): ResultAsync<void, DbError>;
98
+ export declare function queryStepsByRun(pool: StepRowQuerier, runId: string): ResultAsync<StepExecutionRow[], DbError>;
@@ -4,6 +4,7 @@
4
4
  * module.
5
5
  */
6
6
  import { tryMutation, tryQuery } from "../lib/db-result.js";
7
+ import { StepExecutionRowSchema } from "./schema.js";
7
8
  /**
8
9
  * Seed one `pending` row per plan step at run start (`started_at` NULL — no
9
10
  * attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
@@ -136,6 +137,28 @@ export function sweepPendingStepExecutions(pool, runId) {
136
137
  });
137
138
  });
138
139
  }
140
+ /**
141
+ * Settle a run's still-`running` rows to `canceled` after an engine cancel.
142
+ * A canceled child re-raises before it writes a terminal row, so this is the
143
+ * only writer for a step that the cancel cut. `canceled`, not `skipped`: these
144
+ * steps started. The `status = 'running'` guard keeps a terminal row that a
145
+ * child wrote first. `started_at` and `completed_at` are ISO 8601 `TEXT`, so
146
+ * the duration casts both; it is NULL when `started_at` is NULL.
147
+ */
148
+ export function cancelRunningStepExecutions(pool, runId, reason) {
149
+ const now = new Date().toISOString();
150
+ return tryMutation("stepExecutions.cancelRunningStepExecutions", async () => {
151
+ await pool.query({
152
+ text: `UPDATE cortex_step_executions
153
+ SET status = 'canceled',
154
+ completed_at = $2::text,
155
+ duration_ms = (EXTRACT(EPOCH FROM ($2::text::timestamptz - started_at::timestamptz)) * 1000)::bigint,
156
+ error = $3
157
+ WHERE run_id = $1 AND status = 'running'`,
158
+ values: [runId, now, reason],
159
+ });
160
+ });
161
+ }
139
162
  export function queryStepsByRun(pool, runId) {
140
163
  return tryQuery("stepExecutions.queryStepsByRun", async () => {
141
164
  const result = await pool.query({
@@ -152,7 +175,7 @@ export function queryStepsByRun(pool, runId) {
152
175
  });
153
176
  }
154
177
  function mapStepExecutionRow(row) {
155
- return {
178
+ return StepExecutionRowSchema.parse({
156
179
  runId: row.run_id,
157
180
  stepId: row.step_id,
158
181
  analysisId: row.analysis_id,
@@ -161,14 +184,15 @@ function mapStepExecutionRow(row) {
161
184
  status: row.status,
162
185
  startedAt: row.started_at ?? null,
163
186
  completedAt: row.completed_at ?? null,
164
- durationMs: row.duration_ms === null || row.duration_ms === undefined ? null : Number(row.duration_ms),
187
+ // `duration_ms` is bigint, which `pg` delivers as a string; the schema wants the number.
188
+ durationMs: row.duration_ms === undefined || row.duration_ms === null ? null : Number(row.duration_ms),
165
189
  error: row.error ?? null,
166
- attempts: row.attempts ?? 1,
190
+ attempts: row.attempts === undefined || row.attempts === null ? undefined : Number(row.attempts),
167
191
  lastErrorClass: row.last_error_class ?? null,
168
192
  finishReason: row.finish_reason ?? null,
169
193
  hitMaxSteps: row.hit_max_steps === 1 || row.hit_max_steps === true,
170
194
  blockedReason: row.blocked_reason ?? null,
171
195
  sandboxRef: row.sandbox_ref ?? null,
172
196
  childWorkflowId: row.child_workflow_id ?? null,
173
- };
197
+ });
174
198
  }
@@ -1,4 +1,4 @@
1
1
  /** The Postgres realization of the tool output store of the loop, over `cortex_tool_outputs`. */
2
- import type { Pool } from "pg";
2
+ import type { Querier } from "./db.js";
3
3
  import type { ToolOutputStore } from "../loop/tool-output.js";
4
- export declare function createToolOutputStore(pool: Pool): ToolOutputStore;
4
+ export declare function createToolOutputStore(pool: Querier): ToolOutputStore;
@@ -1,14 +1,15 @@
1
1
  /** The Postgres realization of the tool output store of the loop, over `cortex_tool_outputs`. */
2
2
  import { tryMutation, tryQuery } from "../lib/db-result.js";
3
3
  function toKeptToolOutput(row) {
4
+ const threadIdField = row.thread_id === null ? undefined : { threadId: row.thread_id };
4
5
  return {
5
6
  analysisId: row.analysis_id,
6
7
  ref: row.ref,
7
8
  toolName: row.tool_name,
8
9
  toolCallId: row.tool_call_id,
9
- ...(row.thread_id === null ? {} : { threadId: row.thread_id }),
10
10
  content: row.content,
11
11
  totalLength: row.total_length,
12
+ ...threadIdField,
12
13
  };
13
14
  }
14
15
  export function createToolOutputStore(pool) {
@@ -13,7 +13,7 @@
13
13
  * `search_{snake}` shape we ever produce.
14
14
  */
15
15
  import { ResultAsync } from "neverthrow";
16
- import type { Pool } from "pg";
16
+ import type { Querier } from "./db.js";
17
17
  import { type DbError } from "../lib/db-result.js";
18
18
  /**
19
19
  * Whether `name` may be interpolated into a statement as an identifier. Shared
@@ -21,24 +21,24 @@ import { type DbError } from "../lib/db-result.js";
21
21
  * shape — one invariant, one place to read it.
22
22
  */
23
23
  export declare function isSqlIdentifier(name: string): boolean;
24
- export interface CreateIndexInput {
24
+ export type CreateIndexInput = {
25
25
  readonly indexName: string;
26
26
  readonly dimension: number;
27
27
  readonly metric?: "cosine" | "l2" | "ip";
28
- }
29
- export interface BuildIndexInput {
28
+ };
29
+ export type BuildIndexInput = {
30
30
  readonly indexName: string;
31
31
  readonly metric?: "cosine" | "l2" | "ip";
32
32
  readonly indexConfig: {
33
33
  readonly type: "hnsw";
34
34
  };
35
- }
36
- export interface UpsertInput {
35
+ };
36
+ export type UpsertInput = {
37
37
  readonly indexName: string;
38
38
  readonly vectors: readonly number[][];
39
39
  readonly metadata?: readonly Record<string, unknown>[];
40
40
  readonly ids?: readonly string[];
41
- }
41
+ };
42
42
  /**
43
43
  * A narrow delete surface: every entry of one index whose metadata `type` is named.
44
44
  *
@@ -47,26 +47,26 @@ export interface UpsertInput {
47
47
  * has to be unable to reach another's — a general predicate would make that a review
48
48
  * question rather than a type error.
49
49
  */
50
- export interface DeleteByTypeInput {
50
+ export type DeleteByTypeInput = {
51
51
  readonly indexName: string;
52
52
  readonly types: readonly string[];
53
- }
54
- export interface QueryInput {
53
+ };
54
+ export type QueryInput = {
55
55
  readonly indexName: string;
56
56
  readonly queryVector: readonly number[];
57
57
  readonly topK: number;
58
58
  readonly filter?: Record<string, unknown>;
59
- }
60
- export interface QueryResult {
59
+ };
60
+ export type QueryResult = {
61
61
  readonly id: string;
62
62
  readonly score: number;
63
63
  readonly metadata: Record<string, unknown>;
64
- }
65
- export interface VectorStore {
64
+ };
65
+ export type VectorStore = {
66
66
  createIndex(input: CreateIndexInput): ResultAsync<void, DbError>;
67
67
  buildIndex(input: BuildIndexInput): ResultAsync<void, DbError>;
68
68
  upsert(input: UpsertInput): ResultAsync<void, DbError>;
69
69
  deleteByType(input: DeleteByTypeInput): ResultAsync<void, DbError>;
70
70
  query(input: QueryInput): ResultAsync<QueryResult[], DbError>;
71
- }
72
- export declare function createVectorStore(pool: Pool): VectorStore;
71
+ };
72
+ export declare function createVectorStore(pool: Querier): VectorStore;
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { okAsync } from "neverthrow";
16
16
  import { tryMutation, tryQuery } from "../lib/db-result.js";
17
+ import { presentAt } from "../lib/present.js";
17
18
  /**
18
19
  * The identifier shape and length the harness may interpolate into a statement.
19
20
  * An identifier cannot be a bind parameter, so a name reaching SQL has to be
@@ -25,7 +26,13 @@ import { tryMutation, tryQuery } from "../lib/db-result.js";
25
26
  * a name that matches it has one byte per character and `length` is the byte count
26
27
  * the limit is measured in.
27
28
  */
28
- const SQL_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;
29
+ function isSqlIdentifierShape(name) {
30
+ if (name.length === 0)
31
+ return false;
32
+ const isLowerOrUnderscore = (char) => (char >= "a" && char <= "z") || char === "_";
33
+ const isWordChar = (char) => isLowerOrUnderscore(char) || (char >= "0" && char <= "9");
34
+ return isLowerOrUnderscore(name.charAt(0)) && Array.from(name).every(isWordChar);
35
+ }
29
36
  const MAX_SQL_IDENTIFIER_BYTES = 63;
30
37
  /**
31
38
  * Whether `name` may be interpolated into a statement as an identifier. Shared
@@ -33,7 +40,7 @@ const MAX_SQL_IDENTIFIER_BYTES = 63;
33
40
  * shape — one invariant, one place to read it.
34
41
  */
35
42
  export function isSqlIdentifier(name) {
36
- return SQL_IDENTIFIER.test(name) && name.length <= MAX_SQL_IDENTIFIER_BYTES;
43
+ return isSqlIdentifierShape(name) && name.length <= MAX_SQL_IDENTIFIER_BYTES;
37
44
  }
38
45
  function assertIdent(name) {
39
46
  if (!isSqlIdentifier(name)) {
@@ -56,11 +63,8 @@ export function createVectorStore(pool) {
56
63
  )`);
57
64
  });
58
65
  },
59
- buildIndex({ indexName, indexConfig }) {
66
+ buildIndex({ indexName }) {
60
67
  assertIdent(indexName);
61
- if (indexConfig.type !== "hnsw") {
62
- throw new Error(`vector-store: unsupported index type "${indexConfig.type}"`);
63
- }
64
68
  // m/ef_construction default to 8/32.
65
69
  return tryMutation("vectorStore.buildIndex", async () => {
66
70
  await pool.query(`CREATE INDEX IF NOT EXISTS "${indexName}_vector_idx"
@@ -76,7 +80,7 @@ export function createVectorStore(pool) {
76
80
  const finalIds = ids ?? vectors.map(() => crypto.randomUUID());
77
81
  return tryMutation("vectorStore.upsert", async () => {
78
82
  for (let i = 0; i < vectors.length; i++) {
79
- const vec = toVectorLiteral(vectors[i]);
83
+ const vec = toVectorLiteral(presentAt(vectors, i, "the vector at the index"));
80
84
  const meta = JSON.stringify(metadata?.[i] ?? {});
81
85
  await pool.query(`INSERT INTO "${indexName}" (vector_id, embedding, metadata)
82
86
  VALUES ($1, $2::vector, $3::jsonb)
@@ -31,7 +31,7 @@
31
31
  import type { DataProfileResult } from "../contracts/data-profile.js";
32
32
  import type { SetMenu } from "../input-scan/menu.js";
33
33
  import type { DetectedSets } from "../input-scan/set-types.js";
34
- import type { MenuOperation } from "../schemas/data-profile-schemas.js";
34
+ import type { MenuOperationInput } from "../schemas/data-profile-schemas.js";
35
35
  import { type ProfileResolution } from "./data-profile-resolve.js";
36
36
  /** Delta paths named in the repair briefing before the tail folds into a count. */
37
37
  export declare const MAX_DELTA_PATHS = 30;
@@ -43,11 +43,11 @@ export type AbsorbOutcome = {
43
43
  readonly reason: string;
44
44
  } | {
45
45
  readonly kind: "full";
46
- readonly operations: readonly MenuOperation[];
46
+ readonly operations: readonly MenuOperationInput[];
47
47
  readonly resolution: ProfileResolution;
48
48
  } | {
49
49
  readonly kind: "partial";
50
- readonly operations: readonly MenuOperation[];
50
+ readonly operations: readonly MenuOperationInput[];
51
51
  readonly resolution: ProfileResolution;
52
52
  /** Kept files the replayed recipe does not account for — what the agent is woken for. */
53
53
  readonly delta: readonly string[];
@@ -51,17 +51,19 @@ function keptPaths(detected) {
51
51
  */
52
52
  function annotationOf(group, kept) {
53
53
  const annotations = (group.memberAnnotations ?? []).filter((entry) => kept.has(entry.path));
54
- return {
54
+ const annotation = {
55
55
  name: group.name,
56
56
  memberRepresents: group.memberRepresents,
57
57
  description: group.description,
58
58
  role: group.role,
59
59
  category: group.category,
60
- ...(group.categoryLabel ? { categoryLabel: group.categoryLabel } : {}),
61
- ...(group.subtype ? { subtype: group.subtype } : {}),
62
- ...(group.categoryReason ? { categoryReason: group.categoryReason } : {}),
63
- ...(annotations.length > 0 ? { memberAnnotations: annotations.map((entry) => ({ path: entry.path, note: entry.note })) } : {}),
60
+ categoryLabel: group.categoryLabel,
61
+ subtype: group.subtype,
62
+ categoryReason: group.categoryReason,
64
63
  };
64
+ if (annotations.length > 0)
65
+ annotation.memberAnnotations = annotations.map((entry) => ({ path: entry.path, note: entry.note }));
66
+ return annotation;
65
67
  }
66
68
  class StrandedRecipe extends Error {
67
69
  }
@@ -140,21 +142,23 @@ function replayDimension(ctx, dimension) {
140
142
  if (!slot) {
141
143
  throw new StrandedRecipe(`dimension "${dimension.label}": the template "${binding.template}" no longer carries a slot at position ${binding.slotIndex}`);
142
144
  }
143
- return { kind: "slot", setId: set.id, slotId: slot.id, ...(observation.note ? { note: observation.note } : {}) };
145
+ return { kind: "slot", setId: set.id, slotId: slot.id, note: observation.note };
144
146
  });
145
- return {
147
+ const reconciliations = dimension.reconciliations?.map((entry) => ({ ...entry }));
148
+ const replayed = {
146
149
  label: dimension.label,
147
150
  category: dimension.category,
148
- ...(dimension.categoryLabel ? { categoryLabel: dimension.categoryLabel } : {}),
149
- ...(dimension.scope ? { scope: dimension.scope } : {}),
150
- ...(dimension.description ? { description: dimension.description } : {}),
151
+ categoryLabel: dimension.categoryLabel,
152
+ scope: dimension.scope,
153
+ description: dimension.description,
151
154
  observations,
152
- ...(dimension.reconciliations && dimension.reconciliations.length > 0
153
- ? { reconciliations: dimension.reconciliations.map((entry) => ({ ...entry })) }
154
- : {}),
155
- ...(dimension.nestsUnder ? { nestsUnder: { ...dimension.nestsUnder } } : {}),
156
- ...(dimension.treatmentReason ? { treatmentReason: dimension.treatmentReason } : {}),
155
+ reconciliations,
156
+ nestsUnder: dimension.nestsUnder === undefined ? undefined : { ...dimension.nestsUnder },
157
+ treatmentReason: dimension.treatmentReason,
157
158
  };
159
+ if (reconciliations && reconciliations.length > 0)
160
+ replayed.reconciliations = reconciliations;
161
+ return replayed;
158
162
  }
159
163
  /** Every group id the authored steps named, including a value-mapped split's per-value groups. */
160
164
  function namedGroupIds(steps) {
@@ -208,11 +212,12 @@ export function absorbRecipe(prior, detected, menu) {
208
212
  }
209
213
  const submission = {
210
214
  operations,
211
- ...(dimensions.length > 0 ? { dimensions } : {}),
212
215
  analysisSummary: prior.summary,
213
216
  domain: prior.domain ?? "",
214
217
  organism: prior.organism ?? null,
215
218
  };
219
+ if (dimensions.length > 0)
220
+ submission.dimensions = dimensions;
216
221
  // Final round by construction: no agent is awake to repair anything this raises, so a
217
222
  // contested file sweeps rather than being awarded to whichever step ran first.
218
223
  const resolution = resolveProfileSubmission(submission, detected, menu, { finalRound: true });
@@ -47,7 +47,7 @@ export type ActivityWrite = (part: unknown) => Promise<void>;
47
47
  * manifest, a fallback file description) are logged because neither warrants
48
48
  * interrupting the activity line.
49
49
  */
50
- export interface ProfileActivityEmitter {
50
+ export type ProfileActivityEmitter = {
51
51
  /** Reported before the sandbox is created — the longest wait in a profile, and the one that precedes the agent entirely. */
52
52
  sandboxInit(): Promise<void>;
53
53
  /**
@@ -72,16 +72,16 @@ export interface ProfileActivityEmitter {
72
72
  * phrases are this capability's observable contract, and a call site that
73
73
  * composed its own is a call site that can drift from it.
74
74
  */
75
- forTool(name: string, input: unknown, resolveDetail?: ToolDetailResolver): Promise<void>;
75
+ forTool(toolUseId: string, name: string, input: unknown, resolveDetail?: ToolDetailResolver): Promise<void>;
76
76
  /** Reported for the vector-store pass that indexes per-file descriptions. */
77
77
  indexing(): Promise<void>;
78
78
  /** The success terminal. Emitted only after the terminal ledger write has landed. */
79
79
  complete(): Promise<void>;
80
80
  /** The failure terminal, carrying the same user-safe reason the ledger receives. */
81
81
  failed(reason: string): Promise<void>;
82
- }
82
+ };
83
83
  /** Identity the emitted parts carry — the workflow's synthetic frame, not a real run. */
84
- export interface ProfileActivityFrame {
84
+ export type ProfileActivityFrame = {
85
85
  /**
86
86
  * The constant literal the data-profile workflow uses as its run id. It is the
87
87
  * same string for every analysis, so it identifies nothing; consumers are
@@ -92,7 +92,7 @@ export interface ProfileActivityFrame {
92
92
  readonly runId: string;
93
93
  /** The constant literal step id of the profile's single synthetic step. */
94
94
  readonly stepId: string;
95
- }
95
+ };
96
96
  /**
97
97
  * Build the profile's activity channel over `write`.
98
98
  *
@@ -19,7 +19,7 @@
19
19
  * anything that throws on the way there reaches the failure path having emitted
20
20
  * no terminal at all.
21
21
  */
22
- import { activityEmission, activityForTool } from "../sandbox/sandbox-step-translate.js";
22
+ import { activityEmission, activityForTool, toolActivityKey } from "../sandbox/sandbox-step-translate.js";
23
23
  /**
24
24
  * Build the profile's activity channel over `write`.
25
25
  *
@@ -47,10 +47,10 @@ export function createProfileActivityEmitter(write, frame, logger, now) {
47
47
  logger.warn("run-event write failed (non-fatal)", { phase, ...logger.errorFields(err) });
48
48
  }
49
49
  };
50
- const emit = async (phase, activity) => {
51
- const position = seq++;
50
+ const emit = async (phase, activity, toolUseId) => {
51
+ const key = toolUseId === undefined ? seq++ : toolActivityKey(toolUseId);
52
52
  const at = new Date(await now()).toISOString();
53
- const parts = activityEmission(frame, position, phase, activity, at);
53
+ const parts = activityEmission(frame, key, phase, activity, at);
54
54
  await writeAlone(parts.activity, phase);
55
55
  await writeAlone(parts.entry, phase);
56
56
  };
@@ -58,7 +58,7 @@ export function createProfileActivityEmitter(write, frame, logger, now) {
58
58
  sandboxInit: () => emit("sandbox-init", "Starting sandbox"),
59
59
  scanning: () => emit("executing", "Scanning input files"),
60
60
  agentStarting: () => emit("executing", "Running data-profiler"),
61
- forTool: (name, input, resolveDetail) => emit("executing", activityForTool(name, input, resolveDetail)),
61
+ forTool: (toolUseId, name, input, resolveDetail) => emit("executing", activityForTool(name, input, resolveDetail), toolUseId),
62
62
  indexing: () => emit("indexing", "Indexing input descriptions for search"),
63
63
  complete: () => emit("complete", "Profile complete"),
64
64
  failed: (reason) => emit("failed", reason),
@@ -34,18 +34,18 @@ export declare const MAX_ENTITY_ENTRIES = 20000;
34
34
  * own types and are untouched.
35
35
  */
36
36
  export declare const PROFILE_INDEX_TYPES: readonly ["input-group", "input-dimension", "input", "input-kind"];
37
- export interface ProfileIndexEntry {
37
+ export type ProfileIndexEntry = {
38
38
  readonly id: string;
39
39
  readonly text: string;
40
40
  readonly metadata: Record<string, unknown>;
41
- }
42
- export interface BuildProfileIndexArgs {
41
+ };
42
+ export type BuildProfileIndexArgs = {
43
43
  readonly analysisId: string;
44
44
  /** The profile as persisted. Whichever era wrote it, the entries are derived from it alone. */
45
45
  readonly result: DataProfileResult;
46
46
  /** The scan the profile was taken against — the source of a legacy profile's entity value set. */
47
47
  readonly scan?: InputScan;
48
- }
48
+ };
49
49
  /**
50
50
  * Build every index entry for a completed profile. Deterministic and model-free: each
51
51
  * entry's text is templated from what the agent already wrote and what resolution already
@@ -20,6 +20,7 @@
20
20
  * entries (group, dimension, kind, entity) never do. That presence is the discriminator
21
21
  * `workspace_search` documents, so a consumer needs no id parsing to tell them apart.
22
22
  */
23
+ import { presentFirst } from "../lib/present.js";
23
24
  import { dimensionCardinalities, profileDimensions, profileFileRecords, profileGroups } from "../app/data-profile-view.js";
24
25
  /** Entity entries built for a legacy profile. Past this the entity tier is a liability, not a search aid. */
25
26
  export const MAX_ENTITY_ENTRIES = 20_000;
@@ -36,19 +37,31 @@ export const PROFILE_INDEX_TYPES = ["input-group", "input-dimension", "input", "
36
37
  /** Group names named in one legacy entity entry's text. */
37
38
  const MAX_GROUPS_IN_ENTITY_TEXT = 6;
38
39
  function slug(value) {
39
- return (value
40
- .toLowerCase()
41
- .replace(/[^a-z0-9]+/g, "-")
42
- .replace(/^-|-$/g, "")
43
- .slice(0, 60) || "unnamed");
40
+ let out = "";
41
+ let inRun = false;
42
+ for (const char of value.toLowerCase()) {
43
+ if (out.length >= SLUG_MAX_LENGTH)
44
+ break;
45
+ const isSlugChar = (char >= "a" && char <= "z") || (char >= "0" && char <= "9");
46
+ if (!isSlugChar) {
47
+ inRun = true;
48
+ continue;
49
+ }
50
+ if (inRun && out.length > 0)
51
+ out += "-";
52
+ inRun = false;
53
+ out += char;
54
+ }
55
+ return out.slice(0, SLUG_MAX_LENGTH) || "unnamed";
44
56
  }
57
+ const SLUG_MAX_LENGTH = 60;
45
58
  function slotSummary(slot) {
46
59
  return { id: slot.id, location: slot.location, tokenClass: slot.tokenClass, distinctValues: slot.distinctValues };
47
60
  }
48
61
  function groupEntry(analysisId, group) {
49
62
  const category = group.categoryLabel ?? group.category;
50
63
  const facts = [`${group.count} members`, `${group.fileCount} files`, group.displayPattern].join(", ");
51
- return {
64
+ const entry = {
52
65
  id: `/${analysisId}/group/${group.id}`,
53
66
  text: `${group.name} — one member is ${group.memberRepresents}. ${group.description} ${category} held as ${group.role}. (${facts})`,
54
67
  metadata: {
@@ -57,14 +70,16 @@ function groupEntry(analysisId, group) {
57
70
  name: group.name,
58
71
  role: group.role,
59
72
  category: group.category,
60
- ...(group.categoryLabel ? { categoryLabel: group.categoryLabel } : {}),
73
+ categoryLabel: group.categoryLabel ? group.categoryLabel : undefined,
61
74
  pathPattern: group.displayPattern,
62
75
  count: group.count,
63
76
  fileCount: group.fileCount,
64
- ...(group.slots && group.slots.length > 0 ? { slots: group.slots.map(slotSummary) } : {}),
65
- ...(group.unclassified ? { unclassified: true } : {}),
77
+ slots: group.slots && group.slots.length > 0 ? group.slots.map(slotSummary) : undefined,
66
78
  },
67
79
  };
80
+ if (group.unclassified)
81
+ entry.metadata.unclassified = true;
82
+ return entry;
68
83
  }
69
84
  /** One observation as a searchable clause — where the dimension was seen, and what was seen there. */
70
85
  function observationSummary(observation) {
@@ -89,7 +104,7 @@ function dimensionEntry(analysisId, dimension) {
89
104
  type: "input-dimension",
90
105
  dimension: dimension.label,
91
106
  category: dimension.category,
92
- ...(dimension.categoryLabel ? { categoryLabel: dimension.categoryLabel } : {}),
107
+ categoryLabel: dimension.categoryLabel ? dimension.categoryLabel : undefined,
93
108
  scope: dimension.scope,
94
109
  cardinalities: dimensionCardinalities(dimension),
95
110
  groups: [...new Set(dimension.observations.flatMap((observation) => (observation.kind === "slot" ? observation.groupIds : [])))],
@@ -101,7 +116,7 @@ function dimensionEntry(analysisId, dimension) {
101
116
  * resolves to a file that exists rather than to a synthetic key.
102
117
  */
103
118
  function memberEntry(analysisId, group, annotation) {
104
- const format = group.formats.length === 1 ? group.formats[0].format : undefined;
119
+ const format = group.formats.length === 1 ? presentFirst(group.formats, "the single format").format : undefined;
105
120
  return {
106
121
  id: `/${analysisId}/${annotation.path}`,
107
122
  text: `${annotation.path} — ${annotation.note} In ${group.name}, where one member is ${group.memberRepresents}.`,
@@ -111,7 +126,7 @@ function memberEntry(analysisId, group, annotation) {
111
126
  group: group.id,
112
127
  groupName: group.name,
113
128
  category: group.category,
114
- ...(format ? { format } : {}),
129
+ format: format ? format : undefined,
115
130
  },
116
131
  };
117
132
  }
@@ -154,7 +169,7 @@ function entityDimensionLabel(dimensions, distinct) {
154
169
  return widest?.label ?? "entity";
155
170
  }
156
171
  function kindEntry(analysisId, group) {
157
- const facts = [`${group.count} files`, group.format, group.pattern].filter((fact) => Boolean(fact)).join(", ");
172
+ const facts = [`${group.count} files`, group.format, group.pattern].flatMap((fact) => (fact ? [fact] : [])).join(", ");
158
173
  return {
159
174
  id: `/${analysisId}/kind/${slug(group.name)}`,
160
175
  text: `${group.name} — ${group.description} One member is ${group.memberRepresents}. (${facts})`,
@@ -163,7 +178,7 @@ function kindEntry(analysisId, group) {
163
178
  kind: group.name,
164
179
  pathPattern: group.pattern,
165
180
  count: group.count,
166
- ...(group.format ? { format: group.format } : {}),
181
+ format: group.format ? group.format : undefined,
167
182
  },
168
183
  };
169
184
  }
@@ -189,9 +204,9 @@ function fileEntry(analysisId, file) {
189
204
  metadata: {
190
205
  type: "input",
191
206
  path: file.path,
192
- ...(file.dataType ? { dataType: file.dataType } : {}),
193
- ...(file.format ? { format: file.format } : {}),
194
- ...(file.tags ? { tags: file.tags } : {}),
207
+ dataType: file.dataType ? file.dataType : undefined,
208
+ format: file.format ? file.format : undefined,
209
+ tags: file.tags ? file.tags : undefined,
195
210
  },
196
211
  };
197
212
  }