@inflexa-ai/harness 0.1.1

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 (823) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +58 -0
  4. package/dist/agents/conversation-agent.d.ts +105 -0
  5. package/dist/agents/conversation-agent.js +140 -0
  6. package/dist/agents/report-builder.d.ts +32 -0
  7. package/dist/agents/report-builder.js +31 -0
  8. package/dist/agents/sandbox/__fixtures__/deps.d.ts +23 -0
  9. package/dist/agents/sandbox/__fixtures__/deps.js +96 -0
  10. package/dist/agents/sandbox/bulk-transcriptomics-agent.d.ts +8 -0
  11. package/dist/agents/sandbox/bulk-transcriptomics-agent.js +22 -0
  12. package/dist/agents/sandbox/cheminformatics-agent.d.ts +9 -0
  13. package/dist/agents/sandbox/cheminformatics-agent.js +62 -0
  14. package/dist/agents/sandbox/chromatin-agent.d.ts +8 -0
  15. package/dist/agents/sandbox/chromatin-agent.js +24 -0
  16. package/dist/agents/sandbox/data-profiler.d.ts +10 -0
  17. package/dist/agents/sandbox/data-profiler.js +24 -0
  18. package/dist/agents/sandbox/dna-methylation-agent.d.ts +8 -0
  19. package/dist/agents/sandbox/dna-methylation-agent.js +24 -0
  20. package/dist/agents/sandbox/drug-repurposing-agent.d.ts +8 -0
  21. package/dist/agents/sandbox/drug-repurposing-agent.js +54 -0
  22. package/dist/agents/sandbox/enrichment-agent.d.ts +8 -0
  23. package/dist/agents/sandbox/enrichment-agent.js +24 -0
  24. package/dist/agents/sandbox/ephemeral-executor.d.ts +9 -0
  25. package/dist/agents/sandbox/ephemeral-executor.js +29 -0
  26. package/dist/agents/sandbox/genomic-variant-agent.d.ts +8 -0
  27. package/dist/agents/sandbox/genomic-variant-agent.js +27 -0
  28. package/dist/agents/sandbox/immune-profiling-agent.d.ts +8 -0
  29. package/dist/agents/sandbox/immune-profiling-agent.js +43 -0
  30. package/dist/agents/sandbox/index.d.ts +31 -0
  31. package/dist/agents/sandbox/index.js +96 -0
  32. package/dist/agents/sandbox/metabolomics-agent.d.ts +8 -0
  33. package/dist/agents/sandbox/metabolomics-agent.js +15 -0
  34. package/dist/agents/sandbox/microbiome-agent.d.ts +8 -0
  35. package/dist/agents/sandbox/microbiome-agent.js +15 -0
  36. package/dist/agents/sandbox/multi-omics-integration-agent.d.ts +8 -0
  37. package/dist/agents/sandbox/multi-omics-integration-agent.js +33 -0
  38. package/dist/agents/sandbox/multimodal-sc-agent.d.ts +8 -0
  39. package/dist/agents/sandbox/multimodal-sc-agent.js +15 -0
  40. package/dist/agents/sandbox/network-agent.d.ts +8 -0
  41. package/dist/agents/sandbox/network-agent.js +25 -0
  42. package/dist/agents/sandbox/pkpd-clinical-response-agent.d.ts +8 -0
  43. package/dist/agents/sandbox/pkpd-clinical-response-agent.js +59 -0
  44. package/dist/agents/sandbox/proteomics-agent.d.ts +8 -0
  45. package/dist/agents/sandbox/proteomics-agent.js +15 -0
  46. package/dist/agents/sandbox/scientific-executor.d.ts +9 -0
  47. package/dist/agents/sandbox/scientific-executor.js +56 -0
  48. package/dist/agents/sandbox/shared.d.ts +100 -0
  49. package/dist/agents/sandbox/shared.js +195 -0
  50. package/dist/agents/sandbox/single-cell-agent.d.ts +8 -0
  51. package/dist/agents/sandbox/single-cell-agent.js +25 -0
  52. package/dist/agents/sandbox/spatial-omics-agent.d.ts +8 -0
  53. package/dist/agents/sandbox/spatial-omics-agent.js +15 -0
  54. package/dist/agents/sandbox/statistical-modeling-agent.d.ts +8 -0
  55. package/dist/agents/sandbox/statistical-modeling-agent.js +37 -0
  56. package/dist/agents/sandbox/translational-safety-agent.d.ts +8 -0
  57. package/dist/agents/sandbox/translational-safety-agent.js +59 -0
  58. package/dist/agents/sandbox/types.d.ts +34 -0
  59. package/dist/agents/sandbox/types.js +15 -0
  60. package/dist/agents/sandbox/validate-skills.d.ts +18 -0
  61. package/dist/agents/sandbox/validate-skills.js +40 -0
  62. package/dist/agents/sandbox-catalog.d.ts +33 -0
  63. package/dist/agents/sandbox-catalog.js +44 -0
  64. package/dist/agents/system-prompt.d.ts +25 -0
  65. package/dist/agents/system-prompt.js +23 -0
  66. package/dist/app/chat-turn.d.ts +35 -0
  67. package/dist/app/chat-turn.js +64 -0
  68. package/dist/app/data-profile-policy.d.ts +36 -0
  69. package/dist/app/data-profile-policy.js +37 -0
  70. package/dist/app/message-assembly.d.ts +65 -0
  71. package/dist/app/message-assembly.js +61 -0
  72. package/dist/app/synthesize-run.d.ts +57 -0
  73. package/dist/app/synthesize-run.js +103 -0
  74. package/dist/auth/local-auth-context.d.ts +19 -0
  75. package/dist/auth/local-auth-context.js +20 -0
  76. package/dist/auth/local-run-authorizer.d.ts +10 -0
  77. package/dist/auth/local-run-authorizer.js +23 -0
  78. package/dist/auth/types.d.ts +166 -0
  79. package/dist/auth/types.js +61 -0
  80. package/dist/billing/cached-resolver.d.ts +23 -0
  81. package/dist/billing/cached-resolver.js +61 -0
  82. package/dist/billing/noop-resolver.d.ts +6 -0
  83. package/dist/billing/noop-resolver.js +7 -0
  84. package/dist/billing/noop-run-charge.d.ts +6 -0
  85. package/dist/billing/noop-run-charge.js +10 -0
  86. package/dist/billing/resolver.d.ts +64 -0
  87. package/dist/billing/resolver.js +24 -0
  88. package/dist/billing/run-charge.d.ts +24 -0
  89. package/dist/billing/run-charge.js +9 -0
  90. package/dist/config/resource-limits.d.ts +76 -0
  91. package/dist/config/resource-limits.js +116 -0
  92. package/dist/contracts/analogy-report.d.ts +120 -0
  93. package/dist/contracts/analogy-report.js +50 -0
  94. package/dist/contracts/chat-events.d.ts +61 -0
  95. package/dist/contracts/chat-events.js +13 -0
  96. package/dist/contracts/chat-parts.d.ts +308 -0
  97. package/dist/contracts/chat-parts.js +13 -0
  98. package/dist/contracts/content-url.d.ts +49 -0
  99. package/dist/contracts/content-url.js +56 -0
  100. package/dist/contracts/index.d.ts +12 -0
  101. package/dist/contracts/index.js +5 -0
  102. package/dist/contracts/message.d.ts +36 -0
  103. package/dist/contracts/message.js +9 -0
  104. package/dist/contracts/part-registry.d.ts +18 -0
  105. package/dist/contracts/part-registry.js +28 -0
  106. package/dist/contracts/schemas/chat-events.d.ts +90 -0
  107. package/dist/contracts/schemas/chat-events.js +43 -0
  108. package/dist/contracts/schemas/chat-parts.d.ts +683 -0
  109. package/dist/contracts/schemas/chat-parts.js +295 -0
  110. package/dist/contracts/schemas/index.d.ts +2 -0
  111. package/dist/contracts/schemas/index.js +2 -0
  112. package/dist/contracts/target-assessment-row.d.ts +85 -0
  113. package/dist/contracts/target-assessment-row.js +37 -0
  114. package/dist/contracts/target-dossier.d.ts +16720 -0
  115. package/dist/contracts/target-dossier.js +1339 -0
  116. package/dist/data/clinical-benchmarks.json +108 -0
  117. package/dist/data/protein-family-modality.json +101 -0
  118. package/dist/data/safety-panel-schema.d.ts +64 -0
  119. package/dist/data/safety-panel-schema.js +34 -0
  120. package/dist/data/safety-panel.json +436 -0
  121. package/dist/execution/artifact-metadata.d.ts +74 -0
  122. package/dist/execution/artifact-metadata.js +203 -0
  123. package/dist/execution/artifact-record.d.ts +19 -0
  124. package/dist/execution/artifact-record.js +7 -0
  125. package/dist/execution/artifact-registration.d.ts +36 -0
  126. package/dist/execution/artifact-registration.js +61 -0
  127. package/dist/execution/artifact-registry.d.ts +82 -0
  128. package/dist/execution/artifact-registry.js +17 -0
  129. package/dist/execution/dbos-run-launcher.d.ts +7 -0
  130. package/dist/execution/dbos-run-launcher.js +38 -0
  131. package/dist/execution/ephemeral-runner.d.ts +81 -0
  132. package/dist/execution/ephemeral-runner.js +161 -0
  133. package/dist/execution/filesystem-artifact-registry.d.ts +57 -0
  134. package/dist/execution/filesystem-artifact-registry.js +92 -0
  135. package/dist/execution/noop-artifact-registry.d.ts +11 -0
  136. package/dist/execution/noop-artifact-registry.js +17 -0
  137. package/dist/execution/post-step-pipeline.d.ts +70 -0
  138. package/dist/execution/post-step-pipeline.js +207 -0
  139. package/dist/execution/post-step.d.ts +20 -0
  140. package/dist/execution/post-step.js +65 -0
  141. package/dist/execution/reconcile-manifest.d.ts +25 -0
  142. package/dist/execution/reconcile-manifest.js +132 -0
  143. package/dist/execution/report-render.d.ts +39 -0
  144. package/dist/execution/report-render.js +98 -0
  145. package/dist/execution/report-runner.d.ts +87 -0
  146. package/dist/execution/report-runner.js +227 -0
  147. package/dist/execution/run-authorizer.d.ts +43 -0
  148. package/dist/execution/run-authorizer.js +17 -0
  149. package/dist/execution/run-launcher.d.ts +36 -0
  150. package/dist/execution/run-launcher.js +15 -0
  151. package/dist/execution/run-synthesis.d.ts +107 -0
  152. package/dist/execution/run-synthesis.js +329 -0
  153. package/dist/execution/staged-input.d.ts +41 -0
  154. package/dist/execution/staged-input.js +15 -0
  155. package/dist/execution/step-summary-metrics.d.ts +10 -0
  156. package/dist/execution/step-summary-metrics.js +22 -0
  157. package/dist/execution/step-summary.d.ts +55 -0
  158. package/dist/execution/step-summary.js +106 -0
  159. package/dist/execution/topo-sort.d.ts +33 -0
  160. package/dist/execution/topo-sort.js +99 -0
  161. package/dist/index.d.ts +112 -0
  162. package/dist/index.js +157 -0
  163. package/dist/input-sanitization.d.ts +22 -0
  164. package/dist/input-sanitization.js +64 -0
  165. package/dist/lib/async-utils.d.ts +10 -0
  166. package/dist/lib/async-utils.js +24 -0
  167. package/dist/lib/chrome.d.ts +15 -0
  168. package/dist/lib/chrome.js +95 -0
  169. package/dist/lib/db-result.d.ts +93 -0
  170. package/dist/lib/db-result.js +197 -0
  171. package/dist/lib/fs-helpers.d.ts +74 -0
  172. package/dist/lib/fs-helpers.js +119 -0
  173. package/dist/lib/fs-result.d.ts +98 -0
  174. package/dist/lib/fs-result.js +137 -0
  175. package/dist/lib/host-concurrency.d.ts +16 -0
  176. package/dist/lib/host-concurrency.js +60 -0
  177. package/dist/lib/identifiers.d.ts +8 -0
  178. package/dist/lib/identifiers.js +10 -0
  179. package/dist/lib/metrics.d.ts +7 -0
  180. package/dist/lib/metrics.js +12 -0
  181. package/dist/lib/mime-detect.d.ts +17 -0
  182. package/dist/lib/mime-detect.js +29 -0
  183. package/dist/lib/otel.d.ts +30 -0
  184. package/dist/lib/otel.js +102 -0
  185. package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +35 -0
  186. package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +107 -0
  187. package/dist/lib/regulatory-corpus/fetch-ich.d.ts +46 -0
  188. package/dist/lib/regulatory-corpus/fetch-ich.js +173 -0
  189. package/dist/lib/regulatory-corpus.d.ts +88 -0
  190. package/dist/lib/regulatory-corpus.js +141 -0
  191. package/dist/lib/result.d.ts +87 -0
  192. package/dist/lib/result.js +103 -0
  193. package/dist/lib/storage.d.ts +29 -0
  194. package/dist/lib/storage.js +37 -0
  195. package/dist/lib/streamed-download.d.ts +28 -0
  196. package/dist/lib/streamed-download.js +111 -0
  197. package/dist/lib/trace-context.d.ts +11 -0
  198. package/dist/lib/trace-context.js +49 -0
  199. package/dist/loop/__fixtures__/scripted-provider.d.ts +31 -0
  200. package/dist/loop/__fixtures__/scripted-provider.js +57 -0
  201. package/dist/loop/budget-exceeded.d.ts +22 -0
  202. package/dist/loop/budget-exceeded.js +41 -0
  203. package/dist/loop/metrics.d.ts +25 -0
  204. package/dist/loop/metrics.js +46 -0
  205. package/dist/loop/run-agent.d.ts +28 -0
  206. package/dist/loop/run-agent.js +204 -0
  207. package/dist/loop/run-step.d.ts +29 -0
  208. package/dist/loop/run-step.js +34 -0
  209. package/dist/loop/run-to-terminal.d.ts +46 -0
  210. package/dist/loop/run-to-terminal.js +51 -0
  211. package/dist/loop/types.d.ts +95 -0
  212. package/dist/loop/types.js +10 -0
  213. package/dist/memory/ai-sdk-message-storage.d.ts +20 -0
  214. package/dist/memory/ai-sdk-message-storage.js +114 -0
  215. package/dist/memory/card-builders.d.ts +114 -0
  216. package/dist/memory/card-builders.js +231 -0
  217. package/dist/memory/content-to-cortex.d.ts +42 -0
  218. package/dist/memory/content-to-cortex.js +85 -0
  219. package/dist/memory/count-tokens.d.ts +18 -0
  220. package/dist/memory/count-tokens.js +64 -0
  221. package/dist/memory/derive-thread-title.d.ts +14 -0
  222. package/dist/memory/derive-thread-title.js +26 -0
  223. package/dist/memory/message-backfill.d.ts +2 -0
  224. package/dist/memory/message-backfill.js +38 -0
  225. package/dist/memory/reconstruct-cards.d.ts +23 -0
  226. package/dist/memory/reconstruct-cards.js +64 -0
  227. package/dist/memory/thread-history.d.ts +80 -0
  228. package/dist/memory/thread-history.js +187 -0
  229. package/dist/memory/thread-store.d.ts +66 -0
  230. package/dist/memory/thread-store.js +88 -0
  231. package/dist/memory/working-memory.d.ts +135 -0
  232. package/dist/memory/working-memory.js +185 -0
  233. package/dist/prompts/SOUL.d.ts +17 -0
  234. package/dist/prompts/SOUL.js +173 -0
  235. package/dist/prompts/analogical-reasoner.d.ts +1 -0
  236. package/dist/prompts/analogical-reasoner.js +170 -0
  237. package/dist/prompts/conversation.d.ts +1 -0
  238. package/dist/prompts/conversation.js +697 -0
  239. package/dist/prompts/execute-analysis/step-summary.d.ts +1 -0
  240. package/dist/prompts/execute-analysis/step-summary.js +38 -0
  241. package/dist/prompts/literature-reviewer.d.ts +1 -0
  242. package/dist/prompts/literature-reviewer.js +107 -0
  243. package/dist/prompts/planner.d.ts +2 -0
  244. package/dist/prompts/planner.js +259 -0
  245. package/dist/prompts/report-builder.d.ts +1 -0
  246. package/dist/prompts/report-builder.js +127 -0
  247. package/dist/prompts/sandbox/bulk-transcriptomics-agent.d.ts +1 -0
  248. package/dist/prompts/sandbox/bulk-transcriptomics-agent.js +78 -0
  249. package/dist/prompts/sandbox/cheminformatics-agent.d.ts +1 -0
  250. package/dist/prompts/sandbox/cheminformatics-agent.js +224 -0
  251. package/dist/prompts/sandbox/chromatin-agent.d.ts +1 -0
  252. package/dist/prompts/sandbox/chromatin-agent.js +100 -0
  253. package/dist/prompts/sandbox/data-profiler.d.ts +1 -0
  254. package/dist/prompts/sandbox/data-profiler.js +291 -0
  255. package/dist/prompts/sandbox/dna-methylation-agent.d.ts +1 -0
  256. package/dist/prompts/sandbox/dna-methylation-agent.js +96 -0
  257. package/dist/prompts/sandbox/drug-repurposing-agent.d.ts +1 -0
  258. package/dist/prompts/sandbox/drug-repurposing-agent.js +144 -0
  259. package/dist/prompts/sandbox/enrichment-agent.d.ts +1 -0
  260. package/dist/prompts/sandbox/enrichment-agent.js +89 -0
  261. package/dist/prompts/sandbox/ephemeral-executor.d.ts +1 -0
  262. package/dist/prompts/sandbox/ephemeral-executor.js +66 -0
  263. package/dist/prompts/sandbox/genomic-variant-agent.d.ts +1 -0
  264. package/dist/prompts/sandbox/genomic-variant-agent.js +83 -0
  265. package/dist/prompts/sandbox/immune-profiling-agent.d.ts +1 -0
  266. package/dist/prompts/sandbox/immune-profiling-agent.js +101 -0
  267. package/dist/prompts/sandbox/metabolomics-agent.d.ts +1 -0
  268. package/dist/prompts/sandbox/metabolomics-agent.js +89 -0
  269. package/dist/prompts/sandbox/microbiome-agent.d.ts +1 -0
  270. package/dist/prompts/sandbox/microbiome-agent.js +109 -0
  271. package/dist/prompts/sandbox/multi-omics-integration-agent.d.ts +1 -0
  272. package/dist/prompts/sandbox/multi-omics-integration-agent.js +122 -0
  273. package/dist/prompts/sandbox/multimodal-sc-agent.d.ts +1 -0
  274. package/dist/prompts/sandbox/multimodal-sc-agent.js +90 -0
  275. package/dist/prompts/sandbox/network-agent.d.ts +1 -0
  276. package/dist/prompts/sandbox/network-agent.js +95 -0
  277. package/dist/prompts/sandbox/pkpd-clinical-response-agent.d.ts +1 -0
  278. package/dist/prompts/sandbox/pkpd-clinical-response-agent.js +71 -0
  279. package/dist/prompts/sandbox/proteomics-agent.d.ts +1 -0
  280. package/dist/prompts/sandbox/proteomics-agent.js +93 -0
  281. package/dist/prompts/sandbox/scientific-executor.d.ts +1 -0
  282. package/dist/prompts/sandbox/scientific-executor.js +68 -0
  283. package/dist/prompts/sandbox/single-cell-agent.d.ts +1 -0
  284. package/dist/prompts/sandbox/single-cell-agent.js +129 -0
  285. package/dist/prompts/sandbox/spatial-omics-agent.d.ts +1 -0
  286. package/dist/prompts/sandbox/spatial-omics-agent.js +94 -0
  287. package/dist/prompts/sandbox/statistical-modeling-agent.d.ts +1 -0
  288. package/dist/prompts/sandbox/statistical-modeling-agent.js +112 -0
  289. package/dist/prompts/sandbox/translational-safety-agent.d.ts +1 -0
  290. package/dist/prompts/sandbox/translational-safety-agent.js +105 -0
  291. package/dist/prompts/sandbox-standards.d.ts +18 -0
  292. package/dist/prompts/sandbox-standards.js +358 -0
  293. package/dist/prompts/synthesis-agent.d.ts +1 -0
  294. package/dist/prompts/synthesis-agent.js +289 -0
  295. package/dist/prompts/target-assessment/briefs/executive-recommendation.d.ts +1 -0
  296. package/dist/prompts/target-assessment/briefs/executive-recommendation.js +85 -0
  297. package/dist/prompts/target-assessment/briefs/index.d.ts +4 -0
  298. package/dist/prompts/target-assessment/briefs/index.js +4 -0
  299. package/dist/prompts/target-assessment/briefs/liability-bullets.d.ts +1 -0
  300. package/dist/prompts/target-assessment/briefs/liability-bullets.js +114 -0
  301. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.d.ts +1 -0
  302. package/dist/prompts/target-assessment/briefs/target-organ-liabilities.js +29 -0
  303. package/dist/prompts/target-assessment/briefs/translational-commentary.d.ts +1 -0
  304. package/dist/prompts/target-assessment/briefs/translational-commentary.js +23 -0
  305. package/dist/prompts/target-assessment/drugs-in-class.d.ts +1 -0
  306. package/dist/prompts/target-assessment/drugs-in-class.js +29 -0
  307. package/dist/prompts/target-assessment/modulator-triage.d.ts +1 -0
  308. package/dist/prompts/target-assessment/modulator-triage.js +31 -0
  309. package/dist/prompts/target-assessment/off-target-annotator.d.ts +1 -0
  310. package/dist/prompts/target-assessment/off-target-annotator.js +28 -0
  311. package/dist/prompts/target-assessment/tox-voice/core.d.ts +1 -0
  312. package/dist/prompts/target-assessment/tox-voice/core.js +74 -0
  313. package/dist/prompts/target-assessment/tox-voice/critique.d.ts +7 -0
  314. package/dist/prompts/target-assessment/tox-voice/critique.js +109 -0
  315. package/dist/prompts/target-assessment/tox-voice/exemplars.d.ts +8 -0
  316. package/dist/prompts/target-assessment/tox-voice/exemplars.js +24 -0
  317. package/dist/prompts/target-assessment/tox-voice/index.d.ts +4 -0
  318. package/dist/prompts/target-assessment/tox-voice/index.js +4 -0
  319. package/dist/prompts/target-assessment/tox-voice/vocabulary.d.ts +15 -0
  320. package/dist/prompts/target-assessment/tox-voice/vocabulary.js +72 -0
  321. package/dist/provenance/collector.d.ts +148 -0
  322. package/dist/provenance/collector.js +296 -0
  323. package/dist/provenance/exec-frame.d.ts +36 -0
  324. package/dist/provenance/exec-frame.js +49 -0
  325. package/dist/provenance/types.d.ts +95 -0
  326. package/dist/provenance/types.js +64 -0
  327. package/dist/providers/__fixtures__/session.d.ts +16 -0
  328. package/dist/providers/__fixtures__/session.js +20 -0
  329. package/dist/providers/ai-sdk.d.ts +47 -0
  330. package/dist/providers/ai-sdk.js +142 -0
  331. package/dist/providers/anthropic.d.ts +22 -0
  332. package/dist/providers/anthropic.js +26 -0
  333. package/dist/providers/embedding.d.ts +32 -0
  334. package/dist/providers/embedding.js +42 -0
  335. package/dist/providers/errors.d.ts +80 -0
  336. package/dist/providers/errors.js +137 -0
  337. package/dist/providers/llm-capabilities.d.ts +33 -0
  338. package/dist/providers/llm-capabilities.js +58 -0
  339. package/dist/providers/streaming-chat.d.ts +23 -0
  340. package/dist/providers/streaming-chat.js +61 -0
  341. package/dist/providers/types.d.ts +59 -0
  342. package/dist/providers/types.js +8 -0
  343. package/dist/runtime/assemble.d.ts +68 -0
  344. package/dist/runtime/assemble.js +46 -0
  345. package/dist/runtime/boot.d.ts +73 -0
  346. package/dist/runtime/boot.js +65 -0
  347. package/dist/runtime/connection-budget.d.ts +48 -0
  348. package/dist/runtime/connection-budget.js +57 -0
  349. package/dist/runtime/dbos.d.ts +94 -0
  350. package/dist/runtime/dbos.js +160 -0
  351. package/dist/runtime/lifecycle.d.ts +12 -0
  352. package/dist/runtime/lifecycle.js +19 -0
  353. package/dist/runtime/pools.d.ts +25 -0
  354. package/dist/runtime/pools.js +30 -0
  355. package/dist/runtime/shutdown.d.ts +33 -0
  356. package/dist/runtime/shutdown.js +39 -0
  357. package/dist/sandbox/await-exec.d.ts +143 -0
  358. package/dist/sandbox/await-exec.js +406 -0
  359. package/dist/sandbox/client.d.ts +82 -0
  360. package/dist/sandbox/client.js +23 -0
  361. package/dist/sandbox/create-sandbox.d.ts +105 -0
  362. package/dist/sandbox/create-sandbox.js +132 -0
  363. package/dist/sandbox/deliver-exec-event.d.ts +25 -0
  364. package/dist/sandbox/deliver-exec-event.js +29 -0
  365. package/dist/sandbox/docker-client.d.ts +75 -0
  366. package/dist/sandbox/docker-client.js +315 -0
  367. package/dist/sandbox/estimate-data-profile-resources.d.ts +5 -0
  368. package/dist/sandbox/estimate-data-profile-resources.js +73 -0
  369. package/dist/sandbox/exec-id.d.ts +12 -0
  370. package/dist/sandbox/exec-id.js +20 -0
  371. package/dist/sandbox/execution-id.d.ts +30 -0
  372. package/dist/sandbox/execution-id.js +47 -0
  373. package/dist/sandbox/hmac.d.ts +54 -0
  374. package/dist/sandbox/hmac.js +67 -0
  375. package/dist/sandbox/identity.d.ts +15 -0
  376. package/dist/sandbox/identity.js +22 -0
  377. package/dist/sandbox/ignored-dirs.d.ts +7 -0
  378. package/dist/sandbox/ignored-dirs.js +7 -0
  379. package/dist/sandbox/k8s-client.d.ts +71 -0
  380. package/dist/sandbox/k8s-client.js +488 -0
  381. package/dist/sandbox/liveness.d.ts +60 -0
  382. package/dist/sandbox/liveness.js +82 -0
  383. package/dist/sandbox/mount-plan.d.ts +77 -0
  384. package/dist/sandbox/mount-plan.js +84 -0
  385. package/dist/sandbox/notification-sweep.d.ts +42 -0
  386. package/dist/sandbox/notification-sweep.js +74 -0
  387. package/dist/sandbox/reaper.d.ts +70 -0
  388. package/dist/sandbox/reaper.js +124 -0
  389. package/dist/sandbox/sandbox-error.d.ts +105 -0
  390. package/dist/sandbox/sandbox-error.js +92 -0
  391. package/dist/sandbox/sandbox-step-translate.d.ts +35 -0
  392. package/dist/sandbox/sandbox-step-translate.js +76 -0
  393. package/dist/sandbox/submit-exec.d.ts +33 -0
  394. package/dist/sandbox/submit-exec.js +68 -0
  395. package/dist/sandbox/types.d.ts +277 -0
  396. package/dist/sandbox/types.js +147 -0
  397. package/dist/sandbox/watchdog.d.ts +71 -0
  398. package/dist/sandbox/watchdog.js +150 -0
  399. package/dist/schemas/artifact-manifest.d.ts +34 -0
  400. package/dist/schemas/artifact-manifest.js +36 -0
  401. package/dist/schemas/data-profile-schemas.d.ts +92 -0
  402. package/dist/schemas/data-profile-schemas.js +89 -0
  403. package/dist/schemas/file-metadata.d.ts +51 -0
  404. package/dist/schemas/file-metadata.js +39 -0
  405. package/dist/schemas/plan-schemas.d.ts +110 -0
  406. package/dist/schemas/plan-schemas.js +50 -0
  407. package/dist/schemas/render-step-prompt.d.ts +32 -0
  408. package/dist/schemas/render-step-prompt.js +76 -0
  409. package/dist/schemas/run-synthesis.d.ts +148 -0
  410. package/dist/schemas/run-synthesis.js +87 -0
  411. package/dist/schemas/step-summary.d.ts +18 -0
  412. package/dist/schemas/step-summary.js +20 -0
  413. package/dist/schemas/validate-plan.d.ts +39 -0
  414. package/dist/schemas/validate-plan.js +120 -0
  415. package/dist/schemas/workflow-state.d.ts +314 -0
  416. package/dist/schemas/workflow-state.js +139 -0
  417. package/dist/state/active-sandboxes.d.ts +58 -0
  418. package/dist/state/active-sandboxes.js +100 -0
  419. package/dist/state/analyses-metrics.d.ts +21 -0
  420. package/dist/state/analyses-metrics.js +59 -0
  421. package/dist/state/analyses.d.ts +58 -0
  422. package/dist/state/analyses.js +132 -0
  423. package/dist/state/artifacts.d.ts +53 -0
  424. package/dist/state/artifacts.js +175 -0
  425. package/dist/state/data-profile.d.ts +176 -0
  426. package/dist/state/data-profile.js +284 -0
  427. package/dist/state/db.d.ts +10 -0
  428. package/dist/state/db.js +9 -0
  429. package/dist/state/index.d.ts +29 -0
  430. package/dist/state/index.js +20 -0
  431. package/dist/state/init.d.ts +14 -0
  432. package/dist/state/init.js +406 -0
  433. package/dist/state/plans.d.ts +56 -0
  434. package/dist/state/plans.js +117 -0
  435. package/dist/state/runs.d.ts +69 -0
  436. package/dist/state/runs.js +206 -0
  437. package/dist/state/schema.d.ts +150 -0
  438. package/dist/state/schema.js +100 -0
  439. package/dist/state/step-executions.d.ts +77 -0
  440. package/dist/state/step-executions.js +175 -0
  441. package/dist/state/target-assessments.d.ts +68 -0
  442. package/dist/state/target-assessments.js +222 -0
  443. package/dist/state/vector-store.d.ts +53 -0
  444. package/dist/state/vector-store.js +89 -0
  445. package/dist/tasks/data-profile.d.ts +171 -0
  446. package/dist/tasks/data-profile.js +461 -0
  447. package/dist/tasks/refresh-regulatory-corpus.d.ts +59 -0
  448. package/dist/tasks/refresh-regulatory-corpus.js +146 -0
  449. package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +55 -0
  450. package/dist/tasks/regulatory-corpus-boot-refresh.js +149 -0
  451. package/dist/tools/__fixtures__/tool-context.d.ts +13 -0
  452. package/dist/tools/__fixtures__/tool-context.js +18 -0
  453. package/dist/tools/bio/check-safety-panel.d.ts +35 -0
  454. package/dist/tools/bio/check-safety-panel.js +76 -0
  455. package/dist/tools/bio/find-approval-precedent.d.ts +32 -0
  456. package/dist/tools/bio/find-approval-precedent.js +72 -0
  457. package/dist/tools/bio/get-article-details.d.ts +11 -0
  458. package/dist/tools/bio/get-article-details.js +20 -0
  459. package/dist/tools/bio/get-article-full-text.d.ts +19 -0
  460. package/dist/tools/bio/get-article-full-text.js +32 -0
  461. package/dist/tools/bio/get-bioactivity.d.ts +11 -0
  462. package/dist/tools/bio/get-bioactivity.js +23 -0
  463. package/dist/tools/bio/get-drug-info.d.ts +9 -0
  464. package/dist/tools/bio/get-drug-info.js +22 -0
  465. package/dist/tools/bio/get-impc-ko-profile.d.ts +9 -0
  466. package/dist/tools/bio/get-impc-ko-profile.js +20 -0
  467. package/dist/tools/bio/get-mechanism.d.ts +8 -0
  468. package/dist/tools/bio/get-mechanism.js +18 -0
  469. package/dist/tools/bio/get-pubchem-assays.d.ts +22 -0
  470. package/dist/tools/bio/get-pubchem-assays.js +107 -0
  471. package/dist/tools/bio/get-pubchem-cross-refs.d.ts +15 -0
  472. package/dist/tools/bio/get-pubchem-cross-refs.js +68 -0
  473. package/dist/tools/bio/get-target-safety.d.ts +18 -0
  474. package/dist/tools/bio/get-target-safety.js +26 -0
  475. package/dist/tools/bio/index.d.ts +41 -0
  476. package/dist/tools/bio/index.js +48 -0
  477. package/dist/tools/bio/keys.d.ts +31 -0
  478. package/dist/tools/bio/keys.js +30 -0
  479. package/dist/tools/bio/lookup-go-term.d.ts +31 -0
  480. package/dist/tools/bio/lookup-go-term.js +116 -0
  481. package/dist/tools/bio/search-bgee-expression.d.ts +10 -0
  482. package/dist/tools/bio/search-bgee-expression.js +24 -0
  483. package/dist/tools/bio/search-clinical-trials.d.ts +12 -0
  484. package/dist/tools/bio/search-clinical-trials.js +21 -0
  485. package/dist/tools/bio/search-clinvar.d.ts +13 -0
  486. package/dist/tools/bio/search-clinvar.js +28 -0
  487. package/dist/tools/bio/search-compounds.d.ts +22 -0
  488. package/dist/tools/bio/search-compounds.js +160 -0
  489. package/dist/tools/bio/search-ctx-chemical.d.ts +50 -0
  490. package/dist/tools/bio/search-ctx-chemical.js +130 -0
  491. package/dist/tools/bio/search-ctx-exposure.d.ts +55 -0
  492. package/dist/tools/bio/search-ctx-exposure.js +176 -0
  493. package/dist/tools/bio/search-ctx-hazard.d.ts +111 -0
  494. package/dist/tools/bio/search-ctx-hazard.js +178 -0
  495. package/dist/tools/bio/search-dgidb.d.ts +43 -0
  496. package/dist/tools/bio/search-dgidb.js +199 -0
  497. package/dist/tools/bio/search-disgenet.d.ts +30 -0
  498. package/dist/tools/bio/search-disgenet.js +84 -0
  499. package/dist/tools/bio/search-drugbank.d.ts +38 -0
  500. package/dist/tools/bio/search-drugbank.js +109 -0
  501. package/dist/tools/bio/search-faers.d.ts +11 -0
  502. package/dist/tools/bio/search-faers.js +23 -0
  503. package/dist/tools/bio/search-gene.d.ts +11 -0
  504. package/dist/tools/bio/search-gene.js +19 -0
  505. package/dist/tools/bio/search-geo-datasets.d.ts +20 -0
  506. package/dist/tools/bio/search-geo-datasets.js +86 -0
  507. package/dist/tools/bio/search-gwas-catalog.d.ts +33 -0
  508. package/dist/tools/bio/search-gwas-catalog.js +172 -0
  509. package/dist/tools/bio/search-interactions.d.ts +17 -0
  510. package/dist/tools/bio/search-interactions.js +31 -0
  511. package/dist/tools/bio/search-opentargets.d.ts +11 -0
  512. package/dist/tools/bio/search-opentargets.js +25 -0
  513. package/dist/tools/bio/search-pathway.d.ts +12 -0
  514. package/dist/tools/bio/search-pathway.js +32 -0
  515. package/dist/tools/bio/search-pharmgkb.d.ts +17 -0
  516. package/dist/tools/bio/search-pharmgkb.js +46 -0
  517. package/dist/tools/bio/search-pubchem-compound.d.ts +26 -0
  518. package/dist/tools/bio/search-pubchem-compound.js +110 -0
  519. package/dist/tools/bio/search-pubmed.d.ts +17 -0
  520. package/dist/tools/bio/search-pubmed.js +31 -0
  521. package/dist/tools/bio/search-targets.d.ts +9 -0
  522. package/dist/tools/bio/search-targets.js +20 -0
  523. package/dist/tools/bio/search-toxcast.d.ts +36 -0
  524. package/dist/tools/bio/search-toxcast.js +141 -0
  525. package/dist/tools/define-tool.d.ts +80 -0
  526. package/dist/tools/define-tool.js +48 -0
  527. package/dist/tools/display/index.d.ts +4 -0
  528. package/dist/tools/display/index.js +4 -0
  529. package/dist/tools/display/show-user.d.ts +33 -0
  530. package/dist/tools/display/show-user.js +67 -0
  531. package/dist/tools/execute-plan.d.ts +64 -0
  532. package/dist/tools/execute-plan.js +208 -0
  533. package/dist/tools/iterate-report.d.ts +172 -0
  534. package/dist/tools/iterate-report.js +521 -0
  535. package/dist/tools/lib/api-utils.d.ts +80 -0
  536. package/dist/tools/lib/api-utils.js +128 -0
  537. package/dist/tools/lib/bgee-client.d.ts +36 -0
  538. package/dist/tools/lib/bgee-client.js +150 -0
  539. package/dist/tools/lib/cbioportal-client.d.ts +34 -0
  540. package/dist/tools/lib/cbioportal-client.js +159 -0
  541. package/dist/tools/lib/chembl-client.d.ts +123 -0
  542. package/dist/tools/lib/chembl-client.js +458 -0
  543. package/dist/tools/lib/chembl-config.d.ts +5 -0
  544. package/dist/tools/lib/chembl-config.js +3 -0
  545. package/dist/tools/lib/clinical-benchmarks-client.d.ts +33 -0
  546. package/dist/tools/lib/clinical-benchmarks-client.js +54 -0
  547. package/dist/tools/lib/clinical-trials-client.d.ts +216 -0
  548. package/dist/tools/lib/clinical-trials-client.js +339 -0
  549. package/dist/tools/lib/clinicaltrials-config.d.ts +4 -0
  550. package/dist/tools/lib/clinicaltrials-config.js +2 -0
  551. package/dist/tools/lib/clinvar-client.d.ts +25 -0
  552. package/dist/tools/lib/clinvar-client.js +126 -0
  553. package/dist/tools/lib/disgenet-config.d.ts +2 -0
  554. package/dist/tools/lib/disgenet-config.js +11 -0
  555. package/dist/tools/lib/drugbank-config.d.ts +2 -0
  556. package/dist/tools/lib/drugbank-config.js +12 -0
  557. package/dist/tools/lib/ema-client.d.ts +45 -0
  558. package/dist/tools/lib/ema-client.js +127 -0
  559. package/dist/tools/lib/ema-config.d.ts +7 -0
  560. package/dist/tools/lib/ema-config.js +7 -0
  561. package/dist/tools/lib/ensembl-client.d.ts +27 -0
  562. package/dist/tools/lib/ensembl-client.js +82 -0
  563. package/dist/tools/lib/gwas-catalog-config.d.ts +4 -0
  564. package/dist/tools/lib/gwas-catalog-config.js +2 -0
  565. package/dist/tools/lib/identifier-resolver.d.ts +85 -0
  566. package/dist/tools/lib/identifier-resolver.js +333 -0
  567. package/dist/tools/lib/impc-client.d.ts +44 -0
  568. package/dist/tools/lib/impc-client.js +239 -0
  569. package/dist/tools/lib/iuphar-client.d.ts +75 -0
  570. package/dist/tools/lib/iuphar-client.js +230 -0
  571. package/dist/tools/lib/iuphar-config.d.ts +5 -0
  572. package/dist/tools/lib/iuphar-config.js +3 -0
  573. package/dist/tools/lib/ncbi-utils.d.ts +58 -0
  574. package/dist/tools/lib/ncbi-utils.js +286 -0
  575. package/dist/tools/lib/openfda-client.d.ts +53 -0
  576. package/dist/tools/lib/openfda-client.js +192 -0
  577. package/dist/tools/lib/openfda-config.d.ts +2 -0
  578. package/dist/tools/lib/openfda-config.js +2 -0
  579. package/dist/tools/lib/opentargets-client.d.ts +64 -0
  580. package/dist/tools/lib/opentargets-client.js +290 -0
  581. package/dist/tools/lib/opentargets-config.d.ts +5 -0
  582. package/dist/tools/lib/opentargets-config.js +5 -0
  583. package/dist/tools/lib/path-validation.d.ts +14 -0
  584. package/dist/tools/lib/path-validation.js +26 -0
  585. package/dist/tools/lib/pathway-client.d.ts +27 -0
  586. package/dist/tools/lib/pathway-client.js +149 -0
  587. package/dist/tools/lib/pharmgkb-config.d.ts +4 -0
  588. package/dist/tools/lib/pharmgkb-config.js +2 -0
  589. package/dist/tools/lib/preview-lock.d.ts +20 -0
  590. package/dist/tools/lib/preview-lock.js +35 -0
  591. package/dist/tools/lib/protein-family-modality.d.ts +16 -0
  592. package/dist/tools/lib/protein-family-modality.js +42 -0
  593. package/dist/tools/lib/protein-family-normalize.d.ts +12 -0
  594. package/dist/tools/lib/protein-family-normalize.js +46 -0
  595. package/dist/tools/lib/pubchem-client.d.ts +40 -0
  596. package/dist/tools/lib/pubchem-client.js +128 -0
  597. package/dist/tools/lib/pubchem-config.d.ts +5 -0
  598. package/dist/tools/lib/pubchem-config.js +3 -0
  599. package/dist/tools/lib/pubmed-client.d.ts +28 -0
  600. package/dist/tools/lib/pubmed-client.js +91 -0
  601. package/dist/tools/lib/report-preflight.d.ts +39 -0
  602. package/dist/tools/lib/report-preflight.js +283 -0
  603. package/dist/tools/lib/string-client.d.ts +33 -0
  604. package/dist/tools/lib/string-client.js +93 -0
  605. package/dist/tools/lib/toxcast-config.d.ts +2 -0
  606. package/dist/tools/lib/toxcast-config.js +11 -0
  607. package/dist/tools/lib/uniprot-client.d.ts +28 -0
  608. package/dist/tools/lib/uniprot-client.js +103 -0
  609. package/dist/tools/lib/uniprot-config.d.ts +5 -0
  610. package/dist/tools/lib/uniprot-config.js +3 -0
  611. package/dist/tools/memory/index.d.ts +4 -0
  612. package/dist/tools/memory/index.js +4 -0
  613. package/dist/tools/memory/update-working-memory.d.ts +25 -0
  614. package/dist/tools/memory/update-working-memory.js +112 -0
  615. package/dist/tools/registry.d.ts +15 -0
  616. package/dist/tools/registry.js +26 -0
  617. package/dist/tools/report/build-report.d.ts +13 -0
  618. package/dist/tools/report/build-report.js +26 -0
  619. package/dist/tools/report/index.d.ts +14 -0
  620. package/dist/tools/report/index.js +14 -0
  621. package/dist/tools/report/mint-preview-url.d.ts +26 -0
  622. package/dist/tools/report/mint-preview-url.js +44 -0
  623. package/dist/tools/report/preview-publisher.d.ts +37 -0
  624. package/dist/tools/report/preview-publisher.js +25 -0
  625. package/dist/tools/report/preview-snapshot.d.ts +26 -0
  626. package/dist/tools/report/preview-snapshot.js +121 -0
  627. package/dist/tools/report/submit-report.d.ts +25 -0
  628. package/dist/tools/report/submit-report.js +126 -0
  629. package/dist/tools/report/version-fs.d.ts +15 -0
  630. package/dist/tools/report/version-fs.js +154 -0
  631. package/dist/tools/research/context7-docs.d.ts +31 -0
  632. package/dist/tools/research/context7-docs.js +61 -0
  633. package/dist/tools/research/generate-analogy-report.d.ts +60 -0
  634. package/dist/tools/research/generate-analogy-report.js +288 -0
  635. package/dist/tools/research/generate-plan.d.ts +39 -0
  636. package/dist/tools/research/generate-plan.js +393 -0
  637. package/dist/tools/research/index.d.ts +15 -0
  638. package/dist/tools/research/index.js +15 -0
  639. package/dist/tools/research/inspect-run.d.ts +54 -0
  640. package/dist/tools/research/inspect-run.js +85 -0
  641. package/dist/tools/research/literature-reviewer.d.ts +29 -0
  642. package/dist/tools/research/literature-reviewer.js +84 -0
  643. package/dist/tools/research/search-arxiv.d.ts +32 -0
  644. package/dist/tools/research/search-arxiv.js +123 -0
  645. package/dist/tools/research/search-github-repos.d.ts +32 -0
  646. package/dist/tools/research/search-github-repos.js +86 -0
  647. package/dist/tools/research/search-semantic-scholar.d.ts +33 -0
  648. package/dist/tools/research/search-semantic-scholar.js +93 -0
  649. package/dist/tools/run-ephemeral.d.ts +33 -0
  650. package/dist/tools/run-ephemeral.js +65 -0
  651. package/dist/tools/sandbox/index.d.ts +7 -0
  652. package/dist/tools/sandbox/index.js +7 -0
  653. package/dist/tools/sandbox/list-available-packages.d.ts +7 -0
  654. package/dist/tools/sandbox/list-available-packages.js +27 -0
  655. package/dist/tools/sandbox/list-available-refs.d.ts +7 -0
  656. package/dist/tools/sandbox/list-available-refs.js +147 -0
  657. package/dist/tools/sandbox/report-blocker.d.ts +23 -0
  658. package/dist/tools/sandbox/report-blocker.js +39 -0
  659. package/dist/tools/sandbox/skills.d.ts +72 -0
  660. package/dist/tools/sandbox/skills.js +144 -0
  661. package/dist/tools/workspace/edit-file.d.ts +46 -0
  662. package/dist/tools/workspace/edit-file.js +100 -0
  663. package/dist/tools/workspace/execute-command.d.ts +80 -0
  664. package/dist/tools/workspace/execute-command.js +95 -0
  665. package/dist/tools/workspace/file-stat.d.ts +24 -0
  666. package/dist/tools/workspace/file-stat.js +37 -0
  667. package/dist/tools/workspace/grep.d.ts +57 -0
  668. package/dist/tools/workspace/grep.js +154 -0
  669. package/dist/tools/workspace/index.d.ts +26 -0
  670. package/dist/tools/workspace/index.js +27 -0
  671. package/dist/tools/workspace/list-files.d.ts +24 -0
  672. package/dist/tools/workspace/list-files.js +38 -0
  673. package/dist/tools/workspace/mutator.d.ts +83 -0
  674. package/dist/tools/workspace/mutator.js +81 -0
  675. package/dist/tools/workspace/read-file.d.ts +39 -0
  676. package/dist/tools/workspace/read-file.js +93 -0
  677. package/dist/tools/workspace/result-bounds.d.ts +42 -0
  678. package/dist/tools/workspace/result-bounds.js +50 -0
  679. package/dist/tools/workspace/run-exec.d.ts +32 -0
  680. package/dist/tools/workspace/run-exec.js +34 -0
  681. package/dist/tools/workspace/show-file.d.ts +37 -0
  682. package/dist/tools/workspace/show-file.js +54 -0
  683. package/dist/tools/workspace/show-plan.d.ts +23 -0
  684. package/dist/tools/workspace/show-plan.js +44 -0
  685. package/dist/tools/workspace/workspace-search.d.ts +25 -0
  686. package/dist/tools/workspace/workspace-search.js +78 -0
  687. package/dist/tools/workspace/write-file.d.ts +16 -0
  688. package/dist/tools/workspace/write-file.js +33 -0
  689. package/dist/workflows/execute-analysis-scheduler.d.ts +94 -0
  690. package/dist/workflows/execute-analysis-scheduler.js +186 -0
  691. package/dist/workflows/execute-analysis.d.ts +271 -0
  692. package/dist/workflows/execute-analysis.js +746 -0
  693. package/dist/workflows/execute-target-assessment.d.ts +101 -0
  694. package/dist/workflows/execute-target-assessment.js +528 -0
  695. package/dist/workflows/metrics.d.ts +37 -0
  696. package/dist/workflows/metrics.js +55 -0
  697. package/dist/workflows/plan/level.d.ts +12 -0
  698. package/dist/workflows/plan/level.js +12 -0
  699. package/dist/workflows/register-workflows.d.ts +51 -0
  700. package/dist/workflows/register-workflows.js +48 -0
  701. package/dist/workflows/resume-execute-analysis.d.ts +70 -0
  702. package/dist/workflows/resume-execute-analysis.js +80 -0
  703. package/dist/workflows/sandbox-step.d.ts +243 -0
  704. package/dist/workflows/sandbox-step.js +573 -0
  705. package/dist/workflows/target-assessment/assemblers/index.d.ts +5 -0
  706. package/dist/workflows/target-assessment/assemblers/index.js +4 -0
  707. package/dist/workflows/target-assessment/assemblers/literature.d.ts +299 -0
  708. package/dist/workflows/target-assessment/assemblers/literature.js +987 -0
  709. package/dist/workflows/target-assessment/assemblers/orchestrator.d.ts +109 -0
  710. package/dist/workflows/target-assessment/assemblers/orchestrator.js +835 -0
  711. package/dist/workflows/target-assessment/assemblers/safety.d.ts +352 -0
  712. package/dist/workflows/target-assessment/assemblers/safety.js +985 -0
  713. package/dist/workflows/target-assessment/assemblers/trials.d.ts +30 -0
  714. package/dist/workflows/target-assessment/assemblers/trials.js +75 -0
  715. package/dist/workflows/target-assessment/collectors/index.d.ts +105 -0
  716. package/dist/workflows/target-assessment/collectors/index.js +468 -0
  717. package/dist/workflows/target-assessment/correction-loop.d.ts +45 -0
  718. package/dist/workflows/target-assessment/correction-loop.js +62 -0
  719. package/dist/workflows/target-assessment/coverage.d.ts +81 -0
  720. package/dist/workflows/target-assessment/coverage.js +82 -0
  721. package/dist/workflows/target-assessment/decisions/index.d.ts +86 -0
  722. package/dist/workflows/target-assessment/decisions/index.js +127 -0
  723. package/dist/workflows/target-assessment/fanout/index.d.ts +31 -0
  724. package/dist/workflows/target-assessment/fanout/index.js +155 -0
  725. package/dist/workflows/target-assessment/lib/approval-precedents.d.ts +52 -0
  726. package/dist/workflows/target-assessment/lib/approval-precedents.js +119 -0
  727. package/dist/workflows/target-assessment/lib/citation-validator.d.ts +46 -0
  728. package/dist/workflows/target-assessment/lib/citation-validator.js +316 -0
  729. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.d.ts +62 -0
  730. package/dist/workflows/target-assessment/lib/clinical-consequence-annotator.js +172 -0
  731. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.d.ts +45 -0
  732. package/dist/workflows/target-assessment/lib/clinical-evidence-attribution.js +156 -0
  733. package/dist/workflows/target-assessment/lib/compute-derived.d.ts +19 -0
  734. package/dist/workflows/target-assessment/lib/compute-derived.js +252 -0
  735. package/dist/workflows/target-assessment/lib/compute-selectivity.d.ts +15 -0
  736. package/dist/workflows/target-assessment/lib/compute-selectivity.js +18 -0
  737. package/dist/workflows/target-assessment/lib/dedup-modulators.d.ts +37 -0
  738. package/dist/workflows/target-assessment/lib/dedup-modulators.js +157 -0
  739. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.d.ts +17 -0
  740. package/dist/workflows/target-assessment/lib/evidence-conflict-detector.js +100 -0
  741. package/dist/workflows/target-assessment/lib/expression-constants.d.ts +21 -0
  742. package/dist/workflows/target-assessment/lib/expression-constants.js +21 -0
  743. package/dist/workflows/target-assessment/lib/family-complex-supplement.d.ts +21 -0
  744. package/dist/workflows/target-assessment/lib/family-complex-supplement.js +37 -0
  745. package/dist/workflows/target-assessment/lib/heterodimer-filter.d.ts +39 -0
  746. package/dist/workflows/target-assessment/lib/heterodimer-filter.js +54 -0
  747. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.d.ts +4 -0
  748. package/dist/workflows/target-assessment/lib/intended-polypharm-filter.js +24 -0
  749. package/dist/workflows/target-assessment/lib/llm-step.d.ts +77 -0
  750. package/dist/workflows/target-assessment/lib/llm-step.js +99 -0
  751. package/dist/workflows/target-assessment/lib/meddra-organ-map.d.ts +30 -0
  752. package/dist/workflows/target-assessment/lib/meddra-organ-map.js +126 -0
  753. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.d.ts +17 -0
  754. package/dist/workflows/target-assessment/lib/recommendation-quality-gates.js +99 -0
  755. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.d.ts +2 -0
  756. package/dist/workflows/target-assessment/lib/recommendation-sanitizer.js +51 -0
  757. package/dist/workflows/target-assessment/lib/regulatory-actions.d.ts +26 -0
  758. package/dist/workflows/target-assessment/lib/regulatory-actions.js +147 -0
  759. package/dist/workflows/target-assessment/lib/structured-llm.d.ts +58 -0
  760. package/dist/workflows/target-assessment/lib/structured-llm.js +101 -0
  761. package/dist/workflows/target-assessment/lib/target-identity-filter.d.ts +60 -0
  762. package/dist/workflows/target-assessment/lib/target-identity-filter.js +86 -0
  763. package/dist/workflows/target-assessment/lib/therapeutic-programs.d.ts +20 -0
  764. package/dist/workflows/target-assessment/lib/therapeutic-programs.js +68 -0
  765. package/dist/workflows/target-assessment/metrics.d.ts +21 -0
  766. package/dist/workflows/target-assessment/metrics.js +42 -0
  767. package/dist/workflows/target-assessment/phase4-assemble.d.ts +1841 -0
  768. package/dist/workflows/target-assessment/phase4-assemble.js +39 -0
  769. package/dist/workflows/target-assessment/phase5-persist.d.ts +57 -0
  770. package/dist/workflows/target-assessment/phase5-persist.js +461 -0
  771. package/dist/workflows/target-assessment/progress.d.ts +38 -0
  772. package/dist/workflows/target-assessment/progress.js +76 -0
  773. package/dist/workflows/target-assessment/schemas.d.ts +931 -0
  774. package/dist/workflows/target-assessment/schemas.js +293 -0
  775. package/dist/workflows/target-assessment/steps/collectors/pathways.d.ts +15 -0
  776. package/dist/workflows/target-assessment/steps/collectors/pathways.js +58 -0
  777. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.d.ts +34 -0
  778. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-class-drug-step.js +31 -0
  779. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.d.ts +57 -0
  780. package/dist/workflows/target-assessment/steps/fanout/aes-for-one-trial-step.js +54 -0
  781. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.d.ts +35 -0
  782. package/dist/workflows/target-assessment/steps/fanout/faers-for-one-modulator-step.js +32 -0
  783. package/dist/workflows/target-assessment/steps/fanout/index.d.ts +14 -0
  784. package/dist/workflows/target-assessment/steps/fanout/index.js +10 -0
  785. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.d.ts +28 -0
  786. package/dist/workflows/target-assessment/steps/fanout/polypharm-for-one-modulator-step.js +27 -0
  787. package/dist/workflows/target-assessment/steps/phase0-resolve.d.ts +71 -0
  788. package/dist/workflows/target-assessment/steps/phase0-resolve.js +21 -0
  789. package/dist/workflows/target-assessment/steps/phase1-aggregate.d.ts +1018 -0
  790. package/dist/workflows/target-assessment/steps/phase1-aggregate.js +25 -0
  791. package/dist/workflows/target-assessment/steps/phase2-aggregate.d.ts +696 -0
  792. package/dist/workflows/target-assessment/steps/phase2-aggregate.js +38 -0
  793. package/dist/workflows/target-assessment/steps/phase3-aggregate.d.ts +936 -0
  794. package/dist/workflows/target-assessment/steps/phase3-aggregate.js +22 -0
  795. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.d.ts +34 -0
  796. package/dist/workflows/target-assessment/steps/synthesis/diagnostics.js +45 -0
  797. package/dist/workflows/target-assessment/sub-workflows/index.d.ts +15 -0
  798. package/dist/workflows/target-assessment/sub-workflows/index.js +11 -0
  799. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.d.ts +41 -0
  800. package/dist/workflows/target-assessment/sub-workflows/per-class-drug-aes.js +12 -0
  801. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.d.ts +41 -0
  802. package/dist/workflows/target-assessment/sub-workflows/per-modulator-faers.js +12 -0
  803. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.d.ts +36 -0
  804. package/dist/workflows/target-assessment/sub-workflows/per-modulator-polypharm.js +12 -0
  805. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.d.ts +66 -0
  806. package/dist/workflows/target-assessment/sub-workflows/per-trial-aes.js +12 -0
  807. package/dist/workflows/target-assessment/synthesis/index.d.ts +560 -0
  808. package/dist/workflows/target-assessment/synthesis/index.js +351 -0
  809. package/dist/workflows/target-assessment/synthesis-probes.d.ts +56 -0
  810. package/dist/workflows/target-assessment/synthesis-probes.js +320 -0
  811. package/dist/workspace/filesystem.d.ts +117 -0
  812. package/dist/workspace/filesystem.js +304 -0
  813. package/dist/workspace/mount-strategy.d.ts +50 -0
  814. package/dist/workspace/mount-strategy.js +67 -0
  815. package/dist/workspace/paths.d.ts +185 -0
  816. package/dist/workspace/paths.js +219 -0
  817. package/dist/workspace/provenance-collector.d.ts +34 -0
  818. package/dist/workspace/provenance-collector.js +16 -0
  819. package/dist/workspace/search-config.d.ts +23 -0
  820. package/dist/workspace/search-config.js +43 -0
  821. package/dist/workspace/workspace-paths.d.ts +26 -0
  822. package/dist/workspace/workspace-paths.js +31 -0
  823. package/package.json +101 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * `cortex_step_executions` operations — step lifecycle and retry telemetry.
3
+ * The `sandbox_ref` column is read/written by the sibling `active-sandboxes`
4
+ * module.
5
+ */
6
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
7
+ /**
8
+ * Seed one `pending` row per plan step at run start (`started_at` NULL — no
9
+ * attempt has happened yet; `attempts`/`hit_max_steps` lean on their column
10
+ * defaults). `ON CONFLICT DO NOTHING`, NOT the mark-running upsert: on DBOS
11
+ * recovery the parent body replays this seed against rows a prior execution
12
+ * already advanced, and an upsert would reset them — DO NOTHING makes the seed
13
+ * idempotent and monotone (it can only ever add missing rows). From the first
14
+ * seed, `queryStepsByRun` returns the run's full DAG, so consumers can render
15
+ * honest done/total progress including not-yet-started steps.
16
+ */
17
+ export function seedStepExecutions(pool, rows) {
18
+ return tryMutation("stepExecutions.seedStepExecutions", async () => {
19
+ if (rows.length === 0)
20
+ return;
21
+ const values = [];
22
+ const tuples = rows.map((row) => {
23
+ values.push(row.runId, row.stepId, row.analysisId, row.wave, row.agentId);
24
+ const base = values.length - 5;
25
+ return `($${base + 1}, $${base + 2}, $${base + 3}, $${base + 4}, $${base + 5}, 'pending')`;
26
+ });
27
+ await pool.query({
28
+ text: `INSERT INTO cortex_step_executions
29
+ (run_id, step_id, analysis_id, wave, agent_id, status)
30
+ VALUES ${tuples.join(", ")}
31
+ ON CONFLICT (run_id, step_id) DO NOTHING`,
32
+ values,
33
+ });
34
+ });
35
+ }
36
+ export function insertStepExecution(pool, input) {
37
+ const now = new Date().toISOString();
38
+ return tryMutation("stepExecutions.insertStepExecution", async () => {
39
+ await pool.query({
40
+ text: `INSERT INTO cortex_step_executions
41
+ (run_id, step_id, analysis_id, wave, agent_id, status, started_at,
42
+ attempts, last_error_class, finish_reason, hit_max_steps,
43
+ child_workflow_id)
44
+ VALUES ($1, $2, $3, $4, $5, 'running', $6, 1, NULL, NULL, 0, $7)
45
+ ON CONFLICT (run_id, step_id) DO UPDATE SET
46
+ wave = EXCLUDED.wave,
47
+ agent_id = EXCLUDED.agent_id,
48
+ status = EXCLUDED.status,
49
+ started_at = EXCLUDED.started_at,
50
+ completed_at = NULL,
51
+ duration_ms = NULL,
52
+ error = NULL,
53
+ attempts = 1,
54
+ last_error_class = NULL,
55
+ finish_reason = NULL,
56
+ hit_max_steps = 0,
57
+ child_workflow_id = EXCLUDED.child_workflow_id`,
58
+ values: [input.runId, input.stepId, input.analysisId, input.wave, input.agentId, now, input.childWorkflowId ?? null],
59
+ });
60
+ });
61
+ }
62
+ /**
63
+ * Update a step execution row. Columns are written conditionally so callers
64
+ * can bump `attempts` / `lastErrorClass` on retry without clobbering timing
65
+ * telemetry, or set `finishReason` / `hitMaxSteps` on success.
66
+ *
67
+ * `completed_at` is only stamped for terminal statuses (completed/failed/
68
+ * skipped) — running updates leave it NULL for the next transition.
69
+ */
70
+ export function updateStepExecution(pool, runId, stepId, update) {
71
+ // Build the SET clause dynamically so retries can bump telemetry columns
72
+ // without clobbering timing, and success paths can set finish_reason /
73
+ // hit_max_steps without touching error. Placeholders are numbered
74
+ // position-wise via the `values` array length.
75
+ const sets = [];
76
+ const values = [];
77
+ const push = (col, val) => {
78
+ values.push(val);
79
+ sets.push(`${col} = $${values.length}`);
80
+ };
81
+ push("status", update.status);
82
+ const isTerminal = update.status !== "running";
83
+ if (isTerminal) {
84
+ push("completed_at", new Date().toISOString());
85
+ push("duration_ms", update.durationMs ?? null);
86
+ push("error", update.error ?? null);
87
+ }
88
+ if (update.attempts != null) {
89
+ push("attempts", update.attempts);
90
+ }
91
+ // Accept explicit null to clear (e.g., on success).
92
+ if (update.lastErrorClass !== undefined) {
93
+ push("last_error_class", update.lastErrorClass ?? null);
94
+ }
95
+ if (update.finishReason !== undefined) {
96
+ push("finish_reason", update.finishReason ?? null);
97
+ }
98
+ if (update.hitMaxSteps !== undefined) {
99
+ // `hit_max_steps` is INTEGER NOT NULL. node-postgres binds JS booleans as
100
+ // PG `boolean` type and PG refuses the implicit boolean → integer cast,
101
+ // so coerce to 0/1 at the bind site.
102
+ push("hit_max_steps", update.hitMaxSteps === true ? 1 : 0);
103
+ }
104
+ if (update.blockedReason !== undefined) {
105
+ push("blocked_reason", update.blockedReason ?? null);
106
+ }
107
+ values.push(runId);
108
+ const runIdPos = values.length;
109
+ values.push(stepId);
110
+ const stepIdPos = values.length;
111
+ return tryMutation("stepExecutions.updateStepExecution", async () => {
112
+ await pool.query({
113
+ text: `UPDATE cortex_step_executions
114
+ SET ${sets.join(", ")}
115
+ WHERE run_id = $${runIdPos} AND step_id = $${stepIdPos}`,
116
+ values,
117
+ });
118
+ });
119
+ }
120
+ /**
121
+ * Sweep a run's still-`pending` rows to `skipped` ("never ran, never will") at
122
+ * finalisation, stamping `completed_at`. Only genuinely-terminal paths may call
123
+ * this — the resumable budget-pause branch must NOT, because the resumed
124
+ * workflow still executes those steps (see the workflow-failure-lifecycle
125
+ * spec). `skipped`, not `canceled`: canceled means torn down mid-flight, and
126
+ * these steps never started.
127
+ */
128
+ export function sweepPendingStepExecutions(pool, runId) {
129
+ const now = new Date().toISOString();
130
+ return tryMutation("stepExecutions.sweepPendingStepExecutions", async () => {
131
+ await pool.query({
132
+ text: `UPDATE cortex_step_executions
133
+ SET status = 'skipped', completed_at = $2
134
+ WHERE run_id = $1 AND status = 'pending'`,
135
+ values: [runId, now],
136
+ });
137
+ });
138
+ }
139
+ export function queryStepsByRun(pool, runId) {
140
+ return tryQuery("stepExecutions.queryStepsByRun", async () => {
141
+ const result = await pool.query({
142
+ text: `SELECT run_id, step_id, analysis_id, wave, agent_id,
143
+ status, started_at, completed_at, duration_ms, error,
144
+ attempts, last_error_class, finish_reason, hit_max_steps,
145
+ blocked_reason, sandbox_ref, exec_id, child_workflow_id
146
+ FROM cortex_step_executions
147
+ WHERE run_id = $1
148
+ ORDER BY wave, started_at NULLS LAST, step_id`,
149
+ values: [runId],
150
+ });
151
+ return result.rows.map(mapStepExecutionRow);
152
+ });
153
+ }
154
+ function mapStepExecutionRow(row) {
155
+ return {
156
+ runId: row.run_id,
157
+ stepId: row.step_id,
158
+ analysisId: row.analysis_id,
159
+ wave: Number(row.wave),
160
+ agentId: row.agent_id,
161
+ status: row.status,
162
+ startedAt: row.started_at ?? null,
163
+ completedAt: row.completed_at ?? null,
164
+ durationMs: row.duration_ms === null || row.duration_ms === undefined ? null : Number(row.duration_ms),
165
+ error: row.error ?? null,
166
+ attempts: row.attempts ?? 1,
167
+ lastErrorClass: row.last_error_class ?? null,
168
+ finishReason: row.finish_reason ?? null,
169
+ hitMaxSteps: row.hit_max_steps === 1 || row.hit_max_steps === true,
170
+ blockedReason: row.blocked_reason ?? null,
171
+ sandboxRef: row.sandbox_ref ?? null,
172
+ execId: row.exec_id ?? null,
173
+ childWorkflowId: row.child_workflow_id ?? null,
174
+ };
175
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Harness-side typed query helpers for `cortex_target_assessments`.
3
+ *
4
+ * Owns the helpers the DBOS workflow body and harness HTTP routes call:
5
+ * - `insertAssessment` accepts an optional `workflowId` and persists it on
6
+ * insert (defaults to the assessment id; for DBOS-shaped rows the
7
+ * assessmentId IS the DBOS workflowID).
8
+ * - `markAssessmentSuspended` flips the row to the new
9
+ * `suspended_insufficient_funds` status, idempotent on replay.
10
+ * - `markAssessmentRunning` is used by the resume entry point after
11
+ * `DBOS.resumeWorkflow` completes.
12
+ * - All row mappers surface `workflowId` alongside `workflowRunId`.
13
+ *
14
+ * Soft-deleted rows (`status = 'deleted'`) are never resurrected — every
15
+ * mutating helper carries an `AND status != 'deleted'` guard, so a user
16
+ * deleting a row mid-run causes terminal workflow writes to no-op.
17
+ */
18
+ import type { ResultAsync } from "neverthrow";
19
+ import { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema, type TargetAssessmentStatus, type TargetAssessmentError, type TargetAssessmentListRow, type TargetAssessmentRow } from "@inflexa-ai/harness/contracts/target-assessment-row.js";
20
+ import { type DbError } from "../lib/db-result.js";
21
+ import type { Querier } from "./db.js";
22
+ export { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema };
23
+ export type { TargetAssessmentStatus, TargetAssessmentError, TargetAssessmentListRow, TargetAssessmentRow };
24
+ export interface InsertAssessmentInput {
25
+ id?: string;
26
+ /**
27
+ * DBOS workflow id for the executeTargetAssessment workflow. Defaults to
28
+ * the assessment id when omitted — the trigger route always passes the
29
+ * id explicitly so a future split between the two ids stays trivial.
30
+ */
31
+ workflowId?: string;
32
+ organizationId: string;
33
+ targetId: string;
34
+ targetLabel: string;
35
+ goal?: string | null;
36
+ billingContextId: string;
37
+ requestedBy: string;
38
+ }
39
+ export declare function insertAssessment(pool: Querier, input: InsertAssessmentInput): ResultAsync<string, DbError>;
40
+ export declare function updateProgress(pool: Querier, id: string, progress: string, status?: TargetAssessmentStatus): ResultAsync<void, DbError>;
41
+ export declare function setDossier(pool: Querier, id: string, dossier: Record<string, unknown>): ResultAsync<void, DbError>;
42
+ export declare function markFailed(pool: Querier, id: string, error: TargetAssessmentError): ResultAsync<void, DbError>;
43
+ /**
44
+ * Flip the row to the new `suspended_insufficient_funds` status used when
45
+ * an LLM step self-cancels the workflow on a 402 (budget exhausted).
46
+ * Idempotent on DBOS replay — a second call from the terminal handler on
47
+ * the recovery path is a no-op against an already-suspended row. Soft-
48
+ * deleted rows are NOT resurrected.
49
+ */
50
+ export declare function markAssessmentSuspended(pool: Querier, id: string): ResultAsync<void, DbError>;
51
+ /**
52
+ * Flip a suspended row back to `running` on `DBOS.resumeWorkflow`. Called
53
+ * from the resume entry point AFTER the resume call returns success.
54
+ * No-op on a soft-deleted row.
55
+ */
56
+ export declare function markAssessmentRunning(pool: Querier, id: string): ResultAsync<void, DbError>;
57
+ export declare function getAssessment(pool: Querier, id: string, organizationId: string): ResultAsync<TargetAssessmentRow | null, DbError>;
58
+ export interface ListAssessmentsOptions {
59
+ limit?: number;
60
+ offset?: number;
61
+ includeDeleted?: boolean;
62
+ }
63
+ export declare function listAssessmentsByOrg(pool: Querier, organizationId: string, options?: ListAssessmentsOptions): ResultAsync<TargetAssessmentListRow[], DbError>;
64
+ /**
65
+ * Soft-delete a row. A missing/already-deleted row returns `ok(0)` — absence
66
+ * rides the ok channel; `rowCount === 0` is not a failure.
67
+ */
68
+ export declare function softDeleteAssessment(pool: Querier, id: string, organizationId: string): ResultAsync<number, DbError>;
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Harness-side typed query helpers for `cortex_target_assessments`.
3
+ *
4
+ * Owns the helpers the DBOS workflow body and harness HTTP routes call:
5
+ * - `insertAssessment` accepts an optional `workflowId` and persists it on
6
+ * insert (defaults to the assessment id; for DBOS-shaped rows the
7
+ * assessmentId IS the DBOS workflowID).
8
+ * - `markAssessmentSuspended` flips the row to the new
9
+ * `suspended_insufficient_funds` status, idempotent on replay.
10
+ * - `markAssessmentRunning` is used by the resume entry point after
11
+ * `DBOS.resumeWorkflow` completes.
12
+ * - All row mappers surface `workflowId` alongside `workflowRunId`.
13
+ *
14
+ * Soft-deleted rows (`status = 'deleted'`) are never resurrected — every
15
+ * mutating helper carries an `AND status != 'deleted'` guard, so a user
16
+ * deleting a row mid-run causes terminal workflow writes to no-op.
17
+ */
18
+ import { randomUUID } from "node:crypto";
19
+ import { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema, } from "@inflexa-ai/harness/contracts/target-assessment-row.js";
20
+ import { tryQuery, tryMutation } from "../lib/db-result.js";
21
+ export { TargetAssessmentStatusSchema, TargetAssessmentErrorSchema, TargetAssessmentListRowSchema, TargetAssessmentRowSchema };
22
+ function toIso(value) {
23
+ if (value === null)
24
+ return null;
25
+ if (value instanceof Date)
26
+ return value.toISOString();
27
+ return value;
28
+ }
29
+ function parseJsonb(raw) {
30
+ if (raw === null || raw === undefined)
31
+ return null;
32
+ if (typeof raw === "string") {
33
+ try {
34
+ return JSON.parse(raw);
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ return raw;
41
+ }
42
+ function mapListRow(row) {
43
+ const created = toIso(row.created_at);
44
+ const updated = toIso(row.updated_at);
45
+ if (!created || !updated) {
46
+ throw new Error(`cortex_target_assessments(${row.id}): missing created_at or updated_at`);
47
+ }
48
+ return {
49
+ id: row.id,
50
+ organizationId: row.organization_id,
51
+ targetId: row.target_id,
52
+ targetLabel: row.target_label,
53
+ goal: row.goal,
54
+ status: row.status,
55
+ progress: row.progress,
56
+ billingContextId: row.billing_context_id,
57
+ error: parseJsonb(row.error),
58
+ requestedBy: row.requested_by,
59
+ workflowRunId: row.workflow_run_id,
60
+ workflowId: row.workflow_id,
61
+ createdAt: created,
62
+ updatedAt: updated,
63
+ completedAt: toIso(row.completed_at),
64
+ };
65
+ }
66
+ function mapRow(row) {
67
+ return {
68
+ ...mapListRow(row),
69
+ dossier: parseJsonb(row.dossier),
70
+ };
71
+ }
72
+ const SELECT_LIST_COLUMNS = `id, organization_id, target_id, target_label, goal,
73
+ status, progress, billing_context_id, error, requested_by,
74
+ workflow_run_id, workflow_id, created_at, updated_at, completed_at`;
75
+ const SELECT_COLUMNS = `${SELECT_LIST_COLUMNS}, dossier`;
76
+ export function insertAssessment(pool, input) {
77
+ const id = input.id ?? randomUUID();
78
+ const workflowId = input.workflowId ?? id;
79
+ return tryMutation("targetAssessments.insertAssessment", async () => {
80
+ await pool.query({
81
+ text: `INSERT INTO cortex_target_assessments
82
+ (id, organization_id, target_id, target_label, goal, status,
83
+ billing_context_id, requested_by, workflow_id)
84
+ VALUES ($1, $2, $3, $4, $5, 'queued', $6, $7, $8)`,
85
+ values: [id, input.organizationId, input.targetId, input.targetLabel, input.goal ?? null, input.billingContextId, input.requestedBy, workflowId],
86
+ });
87
+ return id;
88
+ });
89
+ }
90
+ export function updateProgress(pool, id, progress, status) {
91
+ return tryMutation("targetAssessments.updateProgress", async () => {
92
+ if (status) {
93
+ await pool.query({
94
+ text: `UPDATE cortex_target_assessments
95
+ SET progress = $1, status = $2, updated_at = NOW()
96
+ WHERE id = $3 AND status != 'deleted'`,
97
+ values: [progress, status, id],
98
+ });
99
+ }
100
+ else {
101
+ await pool.query({
102
+ text: `UPDATE cortex_target_assessments
103
+ SET progress = $1, updated_at = NOW()
104
+ WHERE id = $2 AND status != 'deleted'`,
105
+ values: [progress, id],
106
+ });
107
+ }
108
+ });
109
+ }
110
+ export function setDossier(pool, id, dossier) {
111
+ return tryMutation("targetAssessments.setDossier", async () => {
112
+ await pool.query({
113
+ text: `UPDATE cortex_target_assessments
114
+ SET dossier = $1::jsonb,
115
+ status = 'completed',
116
+ progress = 'Completed',
117
+ error = NULL,
118
+ completed_at = NOW(),
119
+ updated_at = NOW()
120
+ WHERE id = $2 AND status != 'deleted'`,
121
+ values: [JSON.stringify(dossier), id],
122
+ });
123
+ });
124
+ }
125
+ export function markFailed(pool, id, error) {
126
+ return tryMutation("targetAssessments.markFailed", async () => {
127
+ await pool.query({
128
+ text: `UPDATE cortex_target_assessments
129
+ SET status = 'failed',
130
+ error = $1::jsonb,
131
+ completed_at = NOW(),
132
+ updated_at = NOW()
133
+ WHERE id = $2 AND status != 'deleted'`,
134
+ values: [JSON.stringify(error), id],
135
+ });
136
+ });
137
+ }
138
+ /**
139
+ * Flip the row to the new `suspended_insufficient_funds` status used when
140
+ * an LLM step self-cancels the workflow on a 402 (budget exhausted).
141
+ * Idempotent on DBOS replay — a second call from the terminal handler on
142
+ * the recovery path is a no-op against an already-suspended row. Soft-
143
+ * deleted rows are NOT resurrected.
144
+ */
145
+ export function markAssessmentSuspended(pool, id) {
146
+ return tryMutation("targetAssessments.markAssessmentSuspended", async () => {
147
+ await pool.query({
148
+ text: `UPDATE cortex_target_assessments
149
+ SET status = 'suspended_insufficient_funds',
150
+ progress = 'Suspended — insufficient funds',
151
+ updated_at = NOW()
152
+ WHERE id = $1 AND status != 'deleted'`,
153
+ values: [id],
154
+ });
155
+ });
156
+ }
157
+ /**
158
+ * Flip a suspended row back to `running` on `DBOS.resumeWorkflow`. Called
159
+ * from the resume entry point AFTER the resume call returns success.
160
+ * No-op on a soft-deleted row.
161
+ */
162
+ export function markAssessmentRunning(pool, id) {
163
+ return tryMutation("targetAssessments.markAssessmentRunning", async () => {
164
+ await pool.query({
165
+ text: `UPDATE cortex_target_assessments
166
+ SET status = 'running',
167
+ progress = 'Resuming',
168
+ error = NULL,
169
+ updated_at = NOW()
170
+ WHERE id = $1 AND status != 'deleted'`,
171
+ values: [id],
172
+ });
173
+ });
174
+ }
175
+ export function getAssessment(pool, id, organizationId) {
176
+ // The raw read is wrapped; `mapRow`/`mapListRow` runs via `.map()` outside
177
+ // the catch so its corrupt-row throw (missing created_at) propagates as a
178
+ // control-flow throw rather than being captured as a `DbError`.
179
+ return tryQuery("targetAssessments.getAssessment", async () => {
180
+ const result = await pool.query({
181
+ text: `SELECT ${SELECT_COLUMNS}
182
+ FROM cortex_target_assessments
183
+ WHERE id = $1 AND organization_id = $2`,
184
+ values: [id, organizationId],
185
+ });
186
+ return result.rows[0] ?? null;
187
+ }).map((row) => (row ? mapRow(row) : null));
188
+ }
189
+ export function listAssessmentsByOrg(pool, organizationId, options = {}) {
190
+ const limit = options.limit ?? 50;
191
+ const offset = options.offset ?? 0;
192
+ const includeDeleted = options.includeDeleted ?? false;
193
+ const filterDeleted = includeDeleted ? "" : `AND status != 'deleted'`;
194
+ // `mapListRow` runs via `.map()` outside the catch so its corrupt-row throw
195
+ // propagates as a control-flow throw, not a captured `DbError`.
196
+ return tryQuery("targetAssessments.listAssessmentsByOrg", async () => {
197
+ const result = await pool.query({
198
+ text: `SELECT ${SELECT_LIST_COLUMNS}
199
+ FROM cortex_target_assessments
200
+ WHERE organization_id = $1 ${filterDeleted}
201
+ ORDER BY created_at DESC
202
+ LIMIT $2 OFFSET $3`,
203
+ values: [organizationId, limit, offset],
204
+ });
205
+ return result.rows;
206
+ }).map((rows) => rows.map(mapListRow));
207
+ }
208
+ /**
209
+ * Soft-delete a row. A missing/already-deleted row returns `ok(0)` — absence
210
+ * rides the ok channel; `rowCount === 0` is not a failure.
211
+ */
212
+ export function softDeleteAssessment(pool, id, organizationId) {
213
+ return tryMutation("targetAssessments.softDeleteAssessment", async () => {
214
+ const result = await pool.query({
215
+ text: `UPDATE cortex_target_assessments
216
+ SET status = 'deleted', updated_at = NOW()
217
+ WHERE id = $1 AND organization_id = $2`,
218
+ values: [id, organizationId],
219
+ });
220
+ return result.rowCount ?? 0;
221
+ });
222
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Minimal pgvector store — just the surface the harness write-side needs.
3
+ *
4
+ * Schema:
5
+ * - `id SERIAL PRIMARY KEY`
6
+ * - `vector_id TEXT UNIQUE NOT NULL`
7
+ * - `embedding vector(${dimension})`
8
+ * - `metadata JSONB DEFAULT '{}'::jsonb`
9
+ * Existing per-analysis `search_{...}` tables continue to work; the read-side
10
+ * (`tools/workspace/workspace-search.ts`) already speaks `vector_id`.
11
+ *
12
+ * Identifier guard: `indexName` is interpolated into SQL — only allow the
13
+ * `search_{snake}` shape we ever produce.
14
+ */
15
+ import { ResultAsync } from "neverthrow";
16
+ import type { Pool } from "pg";
17
+ import { type DbError } from "../lib/db-result.js";
18
+ export interface CreateIndexInput {
19
+ readonly indexName: string;
20
+ readonly dimension: number;
21
+ readonly metric?: "cosine" | "l2" | "ip";
22
+ }
23
+ export interface BuildIndexInput {
24
+ readonly indexName: string;
25
+ readonly metric?: "cosine" | "l2" | "ip";
26
+ readonly indexConfig: {
27
+ readonly type: "hnsw";
28
+ };
29
+ }
30
+ export interface UpsertInput {
31
+ readonly indexName: string;
32
+ readonly vectors: readonly number[][];
33
+ readonly metadata?: readonly Record<string, unknown>[];
34
+ readonly ids?: readonly string[];
35
+ }
36
+ export interface QueryInput {
37
+ readonly indexName: string;
38
+ readonly queryVector: readonly number[];
39
+ readonly topK: number;
40
+ readonly filter?: Record<string, unknown>;
41
+ }
42
+ export interface QueryResult {
43
+ readonly id: string;
44
+ readonly score: number;
45
+ readonly metadata: Record<string, unknown>;
46
+ }
47
+ export interface VectorStore {
48
+ createIndex(input: CreateIndexInput): ResultAsync<void, DbError>;
49
+ buildIndex(input: BuildIndexInput): ResultAsync<void, DbError>;
50
+ upsert(input: UpsertInput): ResultAsync<void, DbError>;
51
+ query(input: QueryInput): ResultAsync<QueryResult[], DbError>;
52
+ }
53
+ export declare function createVectorStore(pool: Pool): VectorStore;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Minimal pgvector store — just the surface the harness write-side needs.
3
+ *
4
+ * Schema:
5
+ * - `id SERIAL PRIMARY KEY`
6
+ * - `vector_id TEXT UNIQUE NOT NULL`
7
+ * - `embedding vector(${dimension})`
8
+ * - `metadata JSONB DEFAULT '{}'::jsonb`
9
+ * Existing per-analysis `search_{...}` tables continue to work; the read-side
10
+ * (`tools/workspace/workspace-search.ts`) already speaks `vector_id`.
11
+ *
12
+ * Identifier guard: `indexName` is interpolated into SQL — only allow the
13
+ * `search_{snake}` shape we ever produce.
14
+ */
15
+ import { okAsync } from "neverthrow";
16
+ import { tryMutation, tryQuery } from "../lib/db-result.js";
17
+ const IDENT = /^[a-z_][a-z0-9_]*$/;
18
+ function assertIdent(name) {
19
+ if (!IDENT.test(name)) {
20
+ throw new Error(`vector-store: unsafe index name "${name}"`);
21
+ }
22
+ }
23
+ function toVectorLiteral(v) {
24
+ return `[${v.join(",")}]`;
25
+ }
26
+ export function createVectorStore(pool) {
27
+ return {
28
+ createIndex({ indexName, dimension }) {
29
+ assertIdent(indexName);
30
+ return tryMutation("vectorStore.createIndex", async () => {
31
+ await pool.query(`CREATE TABLE IF NOT EXISTS "${indexName}" (
32
+ id SERIAL PRIMARY KEY,
33
+ vector_id TEXT UNIQUE NOT NULL,
34
+ embedding vector(${dimension}),
35
+ metadata JSONB DEFAULT '{}'::jsonb
36
+ )`);
37
+ });
38
+ },
39
+ buildIndex({ indexName, indexConfig }) {
40
+ assertIdent(indexName);
41
+ if (indexConfig.type !== "hnsw") {
42
+ throw new Error(`vector-store: unsupported index type "${indexConfig.type}"`);
43
+ }
44
+ // m/ef_construction default to 8/32.
45
+ return tryMutation("vectorStore.buildIndex", async () => {
46
+ await pool.query(`CREATE INDEX IF NOT EXISTS "${indexName}_vector_idx"
47
+ ON "${indexName}"
48
+ USING hnsw (embedding vector_cosine_ops)
49
+ WITH (m = 8, ef_construction = 32)`);
50
+ });
51
+ },
52
+ upsert({ indexName, vectors, metadata, ids }) {
53
+ assertIdent(indexName);
54
+ if (vectors.length === 0)
55
+ return okAsync(undefined);
56
+ const finalIds = ids ?? vectors.map(() => crypto.randomUUID());
57
+ return tryMutation("vectorStore.upsert", async () => {
58
+ for (let i = 0; i < vectors.length; i++) {
59
+ const vec = toVectorLiteral(vectors[i]);
60
+ const meta = JSON.stringify(metadata?.[i] ?? {});
61
+ await pool.query(`INSERT INTO "${indexName}" (vector_id, embedding, metadata)
62
+ VALUES ($1, $2::vector, $3::jsonb)
63
+ ON CONFLICT (vector_id)
64
+ DO UPDATE SET embedding = $2::vector, metadata = $3::jsonb`, [finalIds[i], vec, meta]);
65
+ }
66
+ });
67
+ },
68
+ query({ indexName, queryVector, topK, filter }) {
69
+ assertIdent(indexName);
70
+ const literal = toVectorLiteral(queryVector);
71
+ const values = [literal, topK];
72
+ let where = "";
73
+ if (filter && Object.keys(filter).length > 0) {
74
+ values.push(JSON.stringify(filter));
75
+ where = `WHERE metadata @> $3::jsonb`;
76
+ }
77
+ return tryQuery("vectorStore.query", async () => {
78
+ const result = await pool.query(`SELECT vector_id AS id,
79
+ 1 - (embedding <=> $1::vector) AS score,
80
+ metadata
81
+ FROM "${indexName}"
82
+ ${where}
83
+ ORDER BY embedding <=> $1::vector
84
+ LIMIT $2`, values);
85
+ return result.rows;
86
+ });
87
+ },
88
+ };
89
+ }