@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,99 @@
1
+ /**
2
+ * LLM step wrapper for the target-assessment DBOS workflow body.
3
+ *
4
+ * Each Phase-2 decision and Phase-5 synthesis LLM call goes through
5
+ * `runLlmStep` — it wraps `DBOS.runStep({name})` around the chat provider
6
+ * call and classifies caught errors:
7
+ *
8
+ * - `isBudgetExceeded(err) === true` (billing-gateway 402): self-send a
9
+ * `BUDGET_EXCEEDED_TOPIC` marker addressed to this workflow's own
10
+ * id, then return a sentinel marker. The wrapper does NOT call
11
+ * `DBOS.cancelWorkflow` itself — the workflow body's terminal block
12
+ * reads the marker, writes `status = "suspended_insufficient_funds"`
13
+ * via `DBOS.runStep({name: "ta-terminal-suspended"})`, then issues
14
+ * `DBOS.cancelWorkflow` + a trailing `runStep` to materialise the
15
+ * CANCELLED terminal state. Deferring the cancel keeps the terminal
16
+ * handler's DB writes inside DBOS step boundaries (replay-cached).
17
+ * - anything else: rethrow so the caller wraps the failure as
18
+ * `coverage: "queried_no_data"` with `error.kind: "synthesis-unavailable"`
19
+ * (or `"queried_no_data"` for decisions).
20
+ *
21
+ * The step name is attempt-numbered by the caller — e.g.
22
+ * `"ta-synth:liability-bullets:0"`. On 402 + top-up + `DBOS.resumeWorkflow`
23
+ * the caller bumps the attempt counter so the resumed call lands a fresh
24
+ * DBOS cache slot rather than replaying the cancelled prior attempt.
25
+ */
26
+ import { DBOS } from "@dbos-inc/dbos-sdk";
27
+ import { unwrapOrThrow } from "../../../lib/result.js";
28
+ import { isBudgetExceeded } from "../../../loop/budget-exceeded.js";
29
+ /**
30
+ * DBOS message topic the LLM step uses to mark the workflow as
31
+ * self-cancelled on a billing-gateway 402. The terminal handler drains the topic
32
+ * to dispatch to `markAssessmentSuspended` rather than the generic
33
+ * operator-cancel handler.
34
+ */
35
+ export const BUDGET_EXCEEDED_TOPIC = "ta-budget-exceeded";
36
+ /**
37
+ * Sentinel returned (NOT thrown) when the wrapper has self-cancelled the
38
+ * workflow. The next `DBOS.runStep` after this point raises
39
+ * `DBOSWorkflowCancelledError`, so call sites only see this value on the
40
+ * synchronous return path before the cancel materialises. Callers MUST NOT
41
+ * wrap this as `coverage: "queried_no_data"` — the workflow is unwinding.
42
+ */
43
+ export const BUDGET_EXCEEDED_SENTINEL = Symbol.for("ta.budget-exceeded");
44
+ /**
45
+ * Run one LLM call inside a `DBOS.runStep` boundary. On a billing-gateway 402 the
46
+ * workflow self-cancels and the caller receives a sentinel result; on any
47
+ * other throw the original error rethrows.
48
+ */
49
+ export async function runLlmStep(opts) {
50
+ const { stepName, agentId, provider, req, session, signal } = opts;
51
+ try {
52
+ const response = await DBOS.runStep(async () => unwrapOrThrow(await provider.chat(req, session, signal)), { name: stepName });
53
+ return { kind: "ok", response };
54
+ }
55
+ catch (err) {
56
+ if (!isBudgetExceeded(err)) {
57
+ throw err;
58
+ }
59
+ const workflowId = DBOS.workflowID;
60
+ if (!workflowId) {
61
+ // Should not happen — the wrapper is only callable from inside a
62
+ // workflow body. Surface as a generic throw so the caller does not
63
+ // misclassify as coverage failure.
64
+ throw err;
65
+ }
66
+ const marker = {
67
+ stepName,
68
+ agentId,
69
+ error: err instanceof Error ? err.message : String(err),
70
+ };
71
+ // Self-send a marker so the terminal handler's `DBOS.recv(topic, 0)`
72
+ // drain sees it before the body unwinds. DBOS persists the send under
73
+ // (workflowID, function_id), so replay does not duplicate the
74
+ // marker. The send is wrapped in `DBOS.runStep` to own the slot.
75
+ //
76
+ // The workflow is NOT cancelled here — the body propagates the
77
+ // sentinel through phase outputs, the terminal block runs its DB
78
+ // writes inside DBOS step boundaries, and the cancel materialises at
79
+ // the very end via the terminal block's trailing
80
+ // `DBOS.cancelWorkflow` + `DBOS.runStep("self-cancel-budget-exceeded")`.
81
+ try {
82
+ await DBOS.runStep(() => DBOS.send(workflowId, marker, BUDGET_EXCEEDED_TOPIC), { name: `${stepName}:notify-budget-exceeded` });
83
+ }
84
+ catch (sendErr) {
85
+ console.warn(`[ta-llm-step] notify-budget-exceeded send failed (non-fatal): ${sendErr instanceof Error ? sendErr.message : sendErr}`);
86
+ }
87
+ return { kind: "budget-exceeded", sentinel: BUDGET_EXCEEDED_SENTINEL };
88
+ }
89
+ }
90
+ /**
91
+ * Drain the budget-exceeded topic for this workflow. Called from the
92
+ * terminal handler (after the body has unwound) to decide whether the
93
+ * workflow cancelled because of a 402 or because of an operator-initiated
94
+ * cancel. Returns the first marker (or `null` if none queued).
95
+ */
96
+ export async function readBudgetExceededMarker() {
97
+ const msg = await DBOS.recv(BUDGET_EXCEEDED_TOPIC, 0);
98
+ return msg ?? null;
99
+ }
@@ -0,0 +1,30 @@
1
+ export type CanonicalOrgan = "cardiac" | "hepatic" | "cns" | "renal" | "gi" | "pancreas" | "endocrine_thyroid" | "metabolic" | "hematologic" | "immune" | "respiratory" | "reproductive" | "dermatologic" | "musculoskeletal" | "oncology";
2
+ export declare function classifyOrgan(meddraTerm: string): CanonicalOrgan | null;
3
+ /**
4
+ * MedDRA SOC (System Organ Class) names as they appear in CT.gov structured
5
+ * AE tables → canonical organ. SOC strings (e.g. "Gastrointestinal disorders")
6
+ * do not contain MedDRA PT stems, so `classifyOrgan` returns null for them —
7
+ * the SOC map is the primary path; `classifyOrgan(term)` is the fallback when
8
+ * the SOC string isn't in the map.
9
+ */
10
+ export declare const TRIAL_AE_ORGAN_MAP: Record<string, CanonicalOrgan>;
11
+ /**
12
+ * Classify a trial AE row by its SOC (preferred) or its individual MedDRA
13
+ * preferred term (fallback). Shared between the Phase-4 assembler's
14
+ * organ_rollup builder and the derived-completeness validator so both
15
+ * agree on which organ a trial AE belongs to.
16
+ */
17
+ export declare function classifyTrialAe(ae: {
18
+ term?: string | null;
19
+ organ?: string | null;
20
+ }): CanonicalOrgan | null;
21
+ /**
22
+ * Classify a polypharm off-target panel row by its canonical `organ_system`
23
+ * string (set by the curated safety panel — `cardiac` | `hepatic` | `cns` |
24
+ * `renal` | `gi` | `hematologic` | `immune` | `metabolic` | `respiratory`).
25
+ *
26
+ * Falls back to `classifyOrgan` if the upstream string is non-canonical;
27
+ * this preserves coverage if a future collector emits MedDRA terms instead
28
+ * of canonical organ names.
29
+ */
30
+ export declare function classifyPolypharmOrgan(organSystem: string | null | undefined): CanonicalOrgan | null;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Order matters: more-specific patterns first. GI is matched before
3
+ * "metabolic" because terms like "blood glucose" should land in
4
+ * metabolic, but "nausea" / "vomiting" must not be reclassified by
5
+ * later metabolic glucose rules.
6
+ *
7
+ * Patterns are stem-based (e.g. "nause" matches "NAUSEA"), so trailing
8
+ * \b is omitted — the stem does not end at a word boundary inside the
9
+ * full MedDRA term. A leading \b is kept to prevent mid-word false matches.
10
+ */
11
+ const RULES = [
12
+ // pancreas (specific) — must come before generic GI
13
+ { rx: /\bpancreatit|\bamylase|\blipase/i, organ: "pancreas" },
14
+ // thyroid / C-cell
15
+ { rx: /\b(thyroid|c[-\s]?cell|calcitonin|goit[re]+|medullar[a-z]*\s*(?:thyroid|carcinoma))/i, organ: "endocrine_thyroid" },
16
+ // gastrointestinal
17
+ { rx: /\b(nause|vomit|diarrhoe|diarrhea|constipat|ileus|gastropares|abdominal\s*pain|cholecystit|cholelithias|gallbladder|colit|heartburn)/i, organ: "gi" },
18
+ // hepatic — liver/alt/ast forms added; alt/ast pinned to "increased" to avoid
19
+ // over-firing on terms like "ALTERED MENTAL STATUS"
20
+ {
21
+ rx: /\b(hepatit|hepato|jaundic|cholestas|transaminas|bilirubin|liver|alt\s+increased|ast\s+increased|alanine\s+aminotransferase|aspartate\s+aminotransferase)/i,
22
+ organ: "hepatic",
23
+ },
24
+ // renal — haematur/hematur explicitly placed here (above hematologic) to prevent
25
+ // the broad \bhaemat stem from misclassifying HAEMATURIA as hematologic
26
+ { rx: /\b(renal|kidney|nephro|creatinin|glomerul|dialys|haematur|hematur)/i, organ: "renal" },
27
+ // cardiac — cardi(ac|al|o) covers CARDIOMYOPATHY/CARDIOVASCULAR/CARDIOTOXICITY;
28
+ // bare heart covers HEART FAILURE, HEART RATE INCREASED, etc.
29
+ { rx: /\b(cardi(?:ac|al|o)|heart|myocard|tachycard|brady\w*card|arrhythm|atrial\s+fibrillat|qt\s+prolong|torsade)/i, organ: "cardiac" },
30
+ // metabolic (glucose, weight, lipid)
31
+ // triglyc has no leading \b because it appears mid-word in HYPERTRIGLYCERIDAEMIA
32
+ { rx: /\b(glucose|glycaemi|hba1c|insulin|weight\s+(?:decreased|increased)|lipid|cholester|dehydration)|triglyc/i, organ: "metabolic" },
33
+ // cns
34
+ { rx: /\b(headache|dizz|seizure|suici|depression|anxiet|paraesthes|neuropath|encephalo|migrain)/i, organ: "cns" },
35
+ // hematologic
36
+ { rx: /\b(haemoglobin|hemoglobin|haematocrit|leuko|neutro|thrombocyt|anaemi|haemat|platelet)/i, organ: "hematologic" },
37
+ // respiratory
38
+ { rx: /\b(nasopharyng|pharyng|bronch|pneumon|dyspnoe|dyspnea|cough|respiratory|sinusit)/i, organ: "respiratory" },
39
+ // dermatologic
40
+ { rx: /\b(rash|eczem|prurit|urticari|injection\s+site\s+(?:pain|haemorrhag|erythem))/i, organ: "dermatologic" },
41
+ // musculoskeletal
42
+ { rx: /\b(arthralg|myalg|musculoskel|fracture|bone\s+pain)/i, organ: "musculoskeletal" },
43
+ // immune
44
+ { rx: /\b(hypersensitiv|anaphyl|autoimmune|cytokine\s+release)/i, organ: "immune" },
45
+ // reproductive
46
+ { rx: /\b(menstrual|menorrhag|ovari|endometr|prostat|erectile)/i, organ: "reproductive" },
47
+ ];
48
+ const UNINFORMATIVE_RE = /\b(incorrect\s+dose|off\s+label|drug\s+ineffective|product\s+(?:use|storage|administration)|accidental\s+exposure|inappropriate\s+schedule|exposure\s+via\s+skin|extra\s+dose|wrong\s+technique)\b/i;
49
+ export function classifyOrgan(meddraTerm) {
50
+ if (UNINFORMATIVE_RE.test(meddraTerm))
51
+ return null;
52
+ for (const { rx, organ } of RULES) {
53
+ if (rx.test(meddraTerm))
54
+ return organ;
55
+ }
56
+ return null;
57
+ }
58
+ /**
59
+ * MedDRA SOC (System Organ Class) names as they appear in CT.gov structured
60
+ * AE tables → canonical organ. SOC strings (e.g. "Gastrointestinal disorders")
61
+ * do not contain MedDRA PT stems, so `classifyOrgan` returns null for them —
62
+ * the SOC map is the primary path; `classifyOrgan(term)` is the fallback when
63
+ * the SOC string isn't in the map.
64
+ */
65
+ export const TRIAL_AE_ORGAN_MAP = {
66
+ "Gastrointestinal disorders": "gi",
67
+ "Cardiac disorders": "cardiac",
68
+ "Nervous system disorders": "cns",
69
+ "Hepatobiliary disorders": "hepatic",
70
+ "Renal and urinary disorders": "renal",
71
+ "Endocrine disorders": "endocrine_thyroid",
72
+ "Respiratory, thoracic and mediastinal disorders": "respiratory",
73
+ "Skin and subcutaneous tissue disorders": "dermatologic",
74
+ "Musculoskeletal and connective tissue disorders": "musculoskeletal",
75
+ "Metabolism and nutrition disorders": "metabolic",
76
+ "Blood and lymphatic system disorders": "hematologic",
77
+ "Reproductive system and breast disorders": "reproductive",
78
+ "Immune system disorders": "immune",
79
+ };
80
+ /**
81
+ * Classify a trial AE row by its SOC (preferred) or its individual MedDRA
82
+ * preferred term (fallback). Shared between the Phase-4 assembler's
83
+ * organ_rollup builder and the derived-completeness validator so both
84
+ * agree on which organ a trial AE belongs to.
85
+ */
86
+ export function classifyTrialAe(ae) {
87
+ const fromSoc = TRIAL_AE_ORGAN_MAP[ae.organ ?? ""];
88
+ if (fromSoc)
89
+ return fromSoc;
90
+ return classifyOrgan(ae.term ?? "");
91
+ }
92
+ /**
93
+ * Classify a polypharm off-target panel row by its canonical `organ_system`
94
+ * string (set by the curated safety panel — `cardiac` | `hepatic` | `cns` |
95
+ * `renal` | `gi` | `hematologic` | `immune` | `metabolic` | `respiratory`).
96
+ *
97
+ * Falls back to `classifyOrgan` if the upstream string is non-canonical;
98
+ * this preserves coverage if a future collector emits MedDRA terms instead
99
+ * of canonical organ names.
100
+ */
101
+ export function classifyPolypharmOrgan(organSystem) {
102
+ const sys = (organSystem ?? "").toLowerCase().trim();
103
+ if (!sys)
104
+ return null;
105
+ // Canonical names from the safety panel enum match by direct string equality.
106
+ if (CANONICAL_ORGAN_NAMES.has(sys))
107
+ return sys;
108
+ return classifyOrgan(sys);
109
+ }
110
+ const CANONICAL_ORGAN_NAMES = new Set([
111
+ "cardiac",
112
+ "hepatic",
113
+ "cns",
114
+ "renal",
115
+ "gi",
116
+ "pancreas",
117
+ "endocrine_thyroid",
118
+ "metabolic",
119
+ "hematologic",
120
+ "immune",
121
+ "respiratory",
122
+ "reproductive",
123
+ "dermatologic",
124
+ "musculoskeletal",
125
+ "oncology",
126
+ ]);
@@ -0,0 +1,17 @@
1
+ import type { ExecutiveRecommendation, QualityGateStatus, RecommendationAudit, SynthesisDiagnosticRow } from "@inflexa-ai/harness/contracts/target-dossier.js";
2
+ type ApplyRecommendationQualityGatesInput = {
3
+ executive_recommendation: ExecutiveRecommendation;
4
+ synthesis_diagnostics: Array<Partial<SynthesisDiagnosticRow> & {
5
+ step_id?: string;
6
+ }>;
7
+ recommendation_audit: Extract<RecommendationAudit, {
8
+ coverage: "available";
9
+ }>["data"] | null | undefined;
10
+ has_direct_clinical_evidence: boolean;
11
+ };
12
+ type ApplyRecommendationQualityGatesResult = {
13
+ executive_recommendation: ExecutiveRecommendation;
14
+ quality_gates: QualityGateStatus[];
15
+ };
16
+ export declare function applyRecommendationQualityGates(input: ApplyRecommendationQualityGatesInput): ApplyRecommendationQualityGatesResult;
17
+ export {};
@@ -0,0 +1,99 @@
1
+ const ORGAN_CLAIM_RE = /\b(renal|kidney|nephro\w*|cns|brain|hypothalam\w*|cardiac|cardiovascular|hepatic|liver|pulmonary|respiratory|gastrointestinal|gi|oncology|malignan\w*)\b/i;
2
+ function appendNote(current, addition) {
3
+ const trimmed = current.trim();
4
+ return trimmed ? `${trimmed} ${addition}` : addition;
5
+ }
6
+ export function applyRecommendationQualityGates(input) {
7
+ const quality_gates = [];
8
+ const executive_recommendation = structuredClone(input.executive_recommendation);
9
+ const unresolved = input.recommendation_audit?.citations_unresolved ?? [];
10
+ const visibleRecommendationText = input.executive_recommendation.coverage === "available"
11
+ ? [
12
+ input.executive_recommendation.data.rationale,
13
+ input.executive_recommendation.data.modality_choice.rationale,
14
+ ...input.executive_recommendation.data.key_strengths,
15
+ ...input.executive_recommendation.data.key_risks,
16
+ ].join("\n")
17
+ : "";
18
+ const blockingCitationCount = unresolved.filter((u) => {
19
+ // The unresolved-citation entries are an untyped audit payload narrowed
20
+ // here to the fields these gates read; `excerpt` exists only on some
21
+ // surfaces, guarded by the `in` presence check.
22
+ if (u.surface === "organ_claim_without_probe_pass" && "excerpt" in u) {
23
+ const excerpt = String(u.excerpt ?? "");
24
+ return excerpt.length > 0 && visibleRecommendationText.includes(excerpt.slice(0, Math.min(80, excerpt.length)));
25
+ }
26
+ return ["external_missing", "nct_wrong_class", "organ_claim_without_probe_pass", "off_topic_citation"].includes(u.surface);
27
+ }).length;
28
+ if (blockingCitationCount > 0) {
29
+ quality_gates.push({
30
+ gate_id: "recommendation-citations",
31
+ status: "blocked",
32
+ message: "Recommendation contains unresolved or unsafe citation references.",
33
+ affected_sections: ["executive_recommendation"],
34
+ unresolved_count: blockingCitationCount,
35
+ });
36
+ return {
37
+ executive_recommendation: {
38
+ coverage: "queried_no_data",
39
+ error: {
40
+ message: "executive recommendation blocked because unresolved citation audit findings remain",
41
+ source: "recommendation-quality-gates",
42
+ },
43
+ },
44
+ quality_gates,
45
+ };
46
+ }
47
+ const safetyFlags = input.synthesis_diagnostics.find((row) => row.step_id === "safety-flags-trail");
48
+ const safetyFlagsAvailable = safetyFlags?.final_coverage === "available";
49
+ if (!safetyFlagsAvailable && executive_recommendation.coverage === "available") {
50
+ const rec = executive_recommendation.data;
51
+ const unverified = rec.key_risks
52
+ .filter((risk) => ORGAN_CLAIM_RE.test(risk))
53
+ .map((risk) => ({
54
+ text: risk,
55
+ bullet_category: "organ_claim_without_probe_pass",
56
+ surface: "organ_claim_without_probe_pass",
57
+ }));
58
+ if (unverified.length > 0) {
59
+ rec.key_risks = rec.key_risks.filter((risk) => !ORGAN_CLAIM_RE.test(risk));
60
+ rec.coverage_qualifier = {
61
+ ...rec.coverage_qualifier,
62
+ unverified_bullets: [...(rec.coverage_qualifier.unverified_bullets ?? []), ...unverified],
63
+ note: appendNote(rec.coverage_qualifier.note, "Organ-level risk bullets were demoted because the safety-flags audit trail did not pass validation."),
64
+ };
65
+ quality_gates.push({
66
+ gate_id: "safety-flags-trail",
67
+ status: "blocked",
68
+ message: "Organ-level executive risk claims were demoted because safety-flags-trail was unavailable or failed validation.",
69
+ affected_sections: ["executive_recommendation.key_risks"],
70
+ unresolved_count: unverified.length,
71
+ });
72
+ }
73
+ }
74
+ if (!input.has_direct_clinical_evidence && executive_recommendation.coverage === "available") {
75
+ const rec = executive_recommendation.data;
76
+ if (rec.confidence !== "low") {
77
+ rec.confidence = "low";
78
+ }
79
+ rec.coverage_qualifier = {
80
+ ...rec.coverage_qualifier,
81
+ note: appendNote(rec.coverage_qualifier.note, "No direct target-modulator clinical evidence was available; recommendation confidence is capped at low."),
82
+ };
83
+ quality_gates.push({
84
+ gate_id: "direct-clinical-evidence",
85
+ status: "warning",
86
+ message: "No direct target-modulator clinical evidence is available, so confidence is capped at low.",
87
+ affected_sections: ["executive_recommendation"],
88
+ });
89
+ }
90
+ if (!quality_gates.some((g) => g.status === "blocked")) {
91
+ quality_gates.push({
92
+ gate_id: "recommendation-quality",
93
+ status: "pass",
94
+ message: "No blocking recommendation quality issues detected.",
95
+ affected_sections: ["executive_recommendation"],
96
+ });
97
+ }
98
+ return { executive_recommendation, quality_gates };
99
+ }
@@ -0,0 +1,2 @@
1
+ import type { DossierRecommendationOutput } from "../synthesis/index.js";
2
+ export declare function sanitizeRecommendation(rec: DossierRecommendationOutput): DossierRecommendationOutput;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Strip pipeline scaffold tokens from user-visible recommendation prose.
3
+ *
4
+ * The Phase-5 dossier-recommendation agent occasionally echoes internal
5
+ * indexing paths it saw in its delegation prompt — strings like
6
+ * `per_section_synthesis.liability_bullets[0]` and parenthetical lists
7
+ * containing them. These are scaffolding for the build pipeline; a
8
+ * toxicologist reading the final dossier should never see them.
9
+ *
10
+ * The sanitizer removes the tokens and their parenthetical wrappers,
11
+ * collapses the resulting double whitespace, and preserves surrounding
12
+ * sentence punctuation.
13
+ */
14
+ const SCAFFOLD_TOKEN_RE = /per_section_synthesis\.[A-Za-z_][\w.]*(?:\[[\d–-]+\])?(?:\s+row\s+\d+)?/g;
15
+ // Citations to dossier.per_section_synthesis.* — this namespace doesn't exist
16
+ // in the v4 schema. The synthesis prompt occasionally emits these paths;
17
+ // strip them to prevent non-resolvable citations in recommendation prose.
18
+ const INVALID_PATH_RE = /\(?dossier\.per_section_synthesis\.[a-z_.[\]0-9]*\)?/gi;
19
+ // Dangling "dossier." with no path suffix is leftover templating; strip it.
20
+ const DANGLING_DOSSIER_RE = /\bdossier\.(?=\s|$|[.,;])/g;
21
+ function stripScaffold(text) {
22
+ if (!text)
23
+ return text;
24
+ let out = text;
25
+ // First pass: remove a parenthetical that contains a scaffold token,
26
+ // along with its trailing punctuation if it directly precedes one.
27
+ out = out.replace(/\s*\([^()]*per_section_synthesis\.[^()]*\)/g, "");
28
+ // Second pass: any leftover scaffold tokens not inside parens.
29
+ out = out.replace(SCAFFOLD_TOKEN_RE, "");
30
+ // Strip dossier.per_section_synthesis.* invalid paths and dangling dossier. placeholders.
31
+ out = out.replace(INVALID_PATH_RE, "").replace(DANGLING_DOSSIER_RE, "");
32
+ // Collapse double whitespace.
33
+ out = out.replace(/\s{2,}/g, " ").replace(/\s+([,.;:])/g, "$1");
34
+ return out.trim();
35
+ }
36
+ export function sanitizeRecommendation(rec) {
37
+ return {
38
+ ...rec,
39
+ rationale: stripScaffold(rec.rationale),
40
+ key_strengths: rec.key_strengths.map(stripScaffold),
41
+ key_risks: rec.key_risks.map(stripScaffold),
42
+ modality_choice: {
43
+ ...rec.modality_choice,
44
+ rationale: stripScaffold(rec.modality_choice.rationale),
45
+ },
46
+ coverage_qualifier: {
47
+ ...rec.coverage_qualifier,
48
+ note: stripScaffold(rec.coverage_qualifier.note),
49
+ },
50
+ };
51
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Per-drug regulatory-action collector. Queries openFDA Structured Product
3
+ * Labels (boxed warning, Section 5 warnings_and_cautions, REMS indicator)
4
+ * and the EMA referrals catalogue (Article 31 / Article 20 procedures)
5
+ * for each drug, then maps both into the dossier's RegulatoryActionRow
6
+ * shape.
7
+ *
8
+ * This is the data-source replacement for the hand-curated calcitonin seed
9
+ * that previously lived next to it. Coverage that legitimately has no
10
+ * machine-readable source (e.g., EMA assessment-report procedure codes like
11
+ * EMEA/H/A-31/1291) is omitted rather than backfilled with curation — the
12
+ * source_url points at the canonical document where the human reader can
13
+ * extract the additional context.
14
+ */
15
+ import type { RegulatoryActionRowV5 as RegulatoryActionRow } from "@inflexa-ai/harness/contracts/target-dossier.js";
16
+ export interface DrugForRegulatoryActions {
17
+ chemblId: string;
18
+ name: string;
19
+ }
20
+ /**
21
+ * Fetch regulatory actions (FDA label + EMA referrals) for a set of drugs.
22
+ * Per-drug failures are isolated — one drug throwing does not blank out
23
+ * the rest. Returns an empty array when no drugs are provided or no source
24
+ * returned any actions.
25
+ */
26
+ export declare function fetchRegulatoryActions(drugs: DrugForRegulatoryActions[]): Promise<RegulatoryActionRow[]>;
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Per-drug regulatory-action collector. Queries openFDA Structured Product
3
+ * Labels (boxed warning, Section 5 warnings_and_cautions, REMS indicator)
4
+ * and the EMA referrals catalogue (Article 31 / Article 20 procedures)
5
+ * for each drug, then maps both into the dossier's RegulatoryActionRow
6
+ * shape.
7
+ *
8
+ * This is the data-source replacement for the hand-curated calcitonin seed
9
+ * that previously lived next to it. Coverage that legitimately has no
10
+ * machine-readable source (e.g., EMA assessment-report procedure codes like
11
+ * EMEA/H/A-31/1291) is omitted rather than backfilled with curation — the
12
+ * source_url points at the canonical document where the human reader can
13
+ * extract the additional context.
14
+ */
15
+ import { withHost } from "../../../lib/host-concurrency.js";
16
+ import { getReferralsByDrug } from "../../../tools/lib/ema-client.js";
17
+ import { getDrugLabelActions } from "../../../tools/lib/openfda-client.js";
18
+ function formatEffectiveTime(yyyymmdd) {
19
+ if (!yyyymmdd || yyyymmdd.length < 6)
20
+ return "";
21
+ return `${yyyymmdd.slice(0, 4)}-${yyyymmdd.slice(4, 6)}`;
22
+ }
23
+ function formatEmaDate(ddmmyyyy) {
24
+ if (!ddmmyyyy)
25
+ return "";
26
+ const parts = ddmmyyyy.split("/");
27
+ if (parts.length !== 3)
28
+ return "";
29
+ return `${parts[2]}-${parts[1]}`;
30
+ }
31
+ const FINDING_CHAR_LIMIT = 2000;
32
+ function clipFinding(text) {
33
+ const cleaned = text.replace(/\s+/g, " ").trim();
34
+ if (cleaned.length <= FINDING_CHAR_LIMIT)
35
+ return cleaned;
36
+ return `${cleaned.slice(0, FINDING_CHAR_LIMIT - 1).trimEnd()}…`;
37
+ }
38
+ function fdaRowsFor(drug, labels) {
39
+ if (labels.length === 0)
40
+ return [];
41
+ const sorted = [...labels].sort((a, b) => (b.effectiveTime ?? "").localeCompare(a.effectiveTime ?? ""));
42
+ const latest = sorted[0];
43
+ const rows = [];
44
+ const actionDate = formatEffectiveTime(latest.effectiveTime);
45
+ if (latest.boxedWarning) {
46
+ rows.push({
47
+ drug_chembl_id: drug.chemblId,
48
+ drug_name: drug.name,
49
+ agency: "FDA",
50
+ action_kind: "black_box",
51
+ source_kind: "boxed_warning",
52
+ action_date: actionDate,
53
+ source_date: actionDate,
54
+ application_number: latest.applicationNumber ?? undefined,
55
+ finding: clipFinding(latest.boxedWarning),
56
+ source_url: latest.sourceUrl || undefined,
57
+ evidence: [],
58
+ });
59
+ }
60
+ if (latest.warningsAndCautions) {
61
+ rows.push({
62
+ drug_chembl_id: drug.chemblId,
63
+ drug_name: drug.name,
64
+ agency: "FDA",
65
+ action_kind: "label_warning",
66
+ source_kind: "label_warning",
67
+ action_date: actionDate,
68
+ source_date: actionDate,
69
+ application_number: latest.applicationNumber ?? undefined,
70
+ label_section: "5",
71
+ finding: clipFinding(latest.warningsAndCautions),
72
+ source_url: latest.sourceUrl || undefined,
73
+ evidence: [],
74
+ });
75
+ }
76
+ if (latest.hasRems) {
77
+ rows.push({
78
+ drug_chembl_id: drug.chemblId,
79
+ drug_name: drug.name,
80
+ agency: "FDA",
81
+ action_kind: "REMS",
82
+ source_kind: "rems",
83
+ action_date: actionDate,
84
+ source_date: actionDate,
85
+ application_number: latest.applicationNumber ?? undefined,
86
+ finding: `Risk Evaluation and Mitigation Strategy referenced in current label (${latest.brandName ?? latest.genericName ?? drug.name}).`,
87
+ source_url: latest.sourceUrl || undefined,
88
+ evidence: [],
89
+ });
90
+ }
91
+ return rows;
92
+ }
93
+ function classifyEmaActionKind(referral) {
94
+ const status = referral.currentStatus.toLowerCase();
95
+ if (status.includes("withdraw"))
96
+ return "withdrawal";
97
+ return "referral";
98
+ }
99
+ function emaRowsFor(drug, referrals) {
100
+ return referrals.map((r) => {
101
+ const date = formatEmaDate(r.europeanCommissionDecisionDate) ||
102
+ formatEmaDate(r.chmpOpinionDate) ||
103
+ formatEmaDate(r.cmdhPositionDate) ||
104
+ formatEmaDate(r.pracRecommendationDate) ||
105
+ formatEmaDate(r.procedureStartDate);
106
+ const findingParts = [];
107
+ if (r.referralType)
108
+ findingParts.push(r.referralType);
109
+ if (r.referenceNumber)
110
+ findingParts.push(`(${r.referenceNumber})`);
111
+ if (r.currentStatus)
112
+ findingParts.push(`— ${r.currentStatus}`);
113
+ if (r.referralName && r.referralName.toLowerCase() !== drug.name.toLowerCase()) {
114
+ findingParts.push(`re: ${r.referralName}`);
115
+ }
116
+ return {
117
+ drug_chembl_id: drug.chemblId,
118
+ drug_name: drug.name,
119
+ agency: "EMA",
120
+ action_kind: classifyEmaActionKind(r),
121
+ source_kind: classifyEmaActionKind(r) === "withdrawal" ? "withdrawal" : "referral",
122
+ action_date: date,
123
+ source_date: date,
124
+ finding: clipFinding(findingParts.join(" ")),
125
+ source_url: r.referralUrl || undefined,
126
+ evidence: [],
127
+ };
128
+ });
129
+ }
130
+ /**
131
+ * Fetch regulatory actions (FDA label + EMA referrals) for a set of drugs.
132
+ * Per-drug failures are isolated — one drug throwing does not blank out
133
+ * the rest. Returns an empty array when no drugs are provided or no source
134
+ * returned any actions.
135
+ */
136
+ export async function fetchRegulatoryActions(drugs) {
137
+ if (drugs.length === 0)
138
+ return [];
139
+ const perDrug = await Promise.all(drugs.map(async (drug) => {
140
+ const [fdaLabels, emaReferrals] = await Promise.all([
141
+ withHost("openfda", () => getDrugLabelActions(drug.name)).catch(() => []),
142
+ withHost("ema", () => getReferralsByDrug(drug.name)).catch(() => []),
143
+ ]);
144
+ return [...fdaRowsFor(drug, fdaLabels), ...emaRowsFor(drug, emaReferrals)];
145
+ }));
146
+ return perDrug.flat();
147
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Structured-output LLM helper for the target-assessment DBOS workflow.
3
+ *
4
+ * Uses a tool-choice forcing pattern: a single Anthropic tool named `submit`
5
+ * carries the Zod schema as its `input_schema`, and
6
+ * `tool_choice: { type: "tool", name: "submit" }` forces the model to fill
7
+ * it. The tool's `input` IS the structured output.
8
+ *
9
+ * This intentionally does NOT pull in the harness `runAgent` loop — Phase-2
10
+ * decisions are zero-tool single-shot calls. Phase-5 syntheses today use
11
+ * regulatory-guidance + approval-precedent retrieval tools; the harness
12
+ * port drops those grounding tools (PR #4 ships single-shot synthesis; a
13
+ * follow-up may reintroduce the retrieval tools through the agent loop).
14
+ *
15
+ * Calls are routed through `runLlmStep`, so each LLM call lives in its own
16
+ * `DBOS.runStep({name})` cache slot and a billing-gateway 402 self-cancels the
17
+ * workflow rather than returning a coverage envelope.
18
+ */
19
+ import { z } from "zod";
20
+ import type { AgentSession } from "../../../auth/types.js";
21
+ import type { AgentChat } from "../../../providers/types.js";
22
+ import { BUDGET_EXCEEDED_SENTINEL } from "./llm-step.js";
23
+ export interface StructuredLlmCallOptions<TSchema extends z.ZodType> {
24
+ /** Attempt-numbered durable-step name (e.g. `"ta-decision:modulator-triage:0"`). */
25
+ readonly stepName: string;
26
+ /** Agent id stamped on telemetry and billing-gateway provenance. */
27
+ readonly agentId: string;
28
+ readonly provider: AgentChat;
29
+ readonly session: AgentSession;
30
+ readonly system: string;
31
+ readonly prompt: string;
32
+ readonly schema: TSchema;
33
+ readonly model: string;
34
+ readonly signal?: AbortSignal;
35
+ }
36
+ export type StructuredLlmResult<TSchema extends z.ZodType> = {
37
+ readonly kind: "ok";
38
+ readonly value: z.infer<TSchema>;
39
+ } | {
40
+ readonly kind: "budget-exceeded";
41
+ readonly sentinel: typeof BUDGET_EXCEEDED_SENTINEL;
42
+ };
43
+ /**
44
+ * Thrown when the model returned a structured-output payload that does
45
+ * not parse against the declared Zod schema. The caller decides whether
46
+ * to wrap as `coverage: "queried_no_data"` or rethrow as a hard failure.
47
+ */
48
+ export declare class StructuredOutputParseError extends Error {
49
+ readonly cause?: unknown | undefined;
50
+ constructor(message: string, cause?: unknown | undefined);
51
+ }
52
+ /**
53
+ * Run one structured-output LLM call. Forces the model to call the
54
+ * `submit` tool whose input schema is `opts.schema`; parses the tool
55
+ * input via `safeParse` and returns the typed value. A billing-gateway 402 returns
56
+ * the budget-exceeded sentinel; non-402 throws + parse errors throw.
57
+ */
58
+ export declare function structuredLlmCall<TSchema extends z.ZodType>(opts: StructuredLlmCallOptions<TSchema>): Promise<StructuredLlmResult<TSchema>>;