@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,119 @@
1
+ /**
2
+ * Shared filesystem helpers — deduplicated SHA-256 hashing and file existence checks.
3
+ */
4
+ import { createHash } from "node:crypto";
5
+ import { constants as fsConstants, createReadStream } from "node:fs";
6
+ import { access, mkdir, open, realpath } from "node:fs/promises";
7
+ import { dirname, resolve, sep } from "node:path";
8
+ /**
9
+ * Compute SHA-256 hash of in-memory content.
10
+ * Returns `sha256:<hex>` format.
11
+ */
12
+ export function computeSha256(content) {
13
+ return `sha256:${createHash("sha256").update(content).digest("hex")}`;
14
+ }
15
+ /**
16
+ * Compute SHA-256 hash of a file on disk.
17
+ * Returns `sha256:<hex>` format.
18
+ */
19
+ export async function computeSha256File(filePath) {
20
+ return new Promise((resolve, reject) => {
21
+ const hash = createHash("sha256");
22
+ const stream = createReadStream(filePath);
23
+ stream.on("data", (chunk) => hash.update(chunk));
24
+ stream.on("end", () => resolve(`sha256:${hash.digest("hex")}`));
25
+ stream.on("error", reject);
26
+ });
27
+ }
28
+ /**
29
+ * True when `hash` is a well-formed `algorithm:hex` content hash. The storage backend
30
+ * (`ValidateContentHash`) rejects any file row without one — and rolls back the
31
+ * whole activity transaction on the first bad row — so this gates what reaches
32
+ * registration. Inputs arrive hashless from the path-only provenance frame and
33
+ * are filled by `reconcileManifestWithDisk`; an empty hash past that point is
34
+ * an attestation invariant violation, not something to paper over.
35
+ */
36
+ export function hasValidContentHash(hash) {
37
+ return !!hash && /^[a-z0-9]+:[0-9a-f]+$/i.test(hash);
38
+ }
39
+ /**
40
+ * Check whether a file exists (access-based, no stat overhead).
41
+ */
42
+ export async function fileExists(filePath) {
43
+ try {
44
+ await access(filePath);
45
+ return true;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * Classify a path against a confinement root, following symlinks — the read-side
53
+ * companion to {@link writeFileWithinRoot}. The workspace read seam resolves
54
+ * agent-supplied paths lexically only; without this, a symlink an agent planted
55
+ * in its writable step dir (`ln -s ~/.ssh/id_rsa leak.txt`) would be read through
56
+ * by the host process, leaking arbitrary host-file content into the model context.
57
+ *
58
+ * Hard links classify as `in`: a hard link has no symlink target for `realpath`
59
+ * to follow, so it resolves to its own in-tree path — which is exactly why this
60
+ * blocks the symlink escape without breaking hard-linked staged inputs.
61
+ */
62
+ export async function classifyWithinRoot(confinementRoot, absPath) {
63
+ let realRoot;
64
+ try {
65
+ realRoot = await realpath(confinementRoot);
66
+ }
67
+ catch {
68
+ // The root itself is unresolvable — there is nothing in-tree to read.
69
+ return "absent";
70
+ }
71
+ let real;
72
+ try {
73
+ real = await realpath(absPath);
74
+ }
75
+ catch (cause) {
76
+ const code = cause.code;
77
+ // A path (or symlink target) that does not resolve leaks nothing; let the
78
+ // caller's own not-found/fallback path handle it. Genuine faults (e.g.
79
+ // EACCES traversing a directory) propagate.
80
+ if (code === "ENOENT" || code === "ENOTDIR" || code === "ELOOP")
81
+ return "absent";
82
+ throw cause;
83
+ }
84
+ if (real !== realRoot && !real.startsWith(realRoot + sep))
85
+ return "escaped";
86
+ return "in";
87
+ }
88
+ export async function writeFileWithinRoot(workspaceRoot, absPath, data) {
89
+ // Cheap lexical gate first, before any disk touch — rejects a `../` target
90
+ // without paying for the mkdir/realpath below. Both sides stay un-canonicalized
91
+ // so the comparison is consistent (canonicalizing only one would mismatch on a
92
+ // symlinked temp root like macOS's `/var` → `/private/var`).
93
+ const lexicalRoot = resolve(workspaceRoot);
94
+ const target = resolve(absPath);
95
+ if (target !== lexicalRoot && !target.startsWith(lexicalRoot + sep)) {
96
+ throw new Error(`writeFileWithinRoot: refusing to write outside the workspace root: ${absPath}`);
97
+ }
98
+ const dir = dirname(target);
99
+ await mkdir(dir, { recursive: true });
100
+ // Physical gate: canonicalize BOTH sides so a symlinked intermediate dir
101
+ // (`output -> /elsewhere`) is caught regardless of any symlink on the trusted
102
+ // root's own path.
103
+ const realRoot = await realpath(workspaceRoot);
104
+ const realDir = await realpath(dir);
105
+ if (realDir !== realRoot && !realDir.startsWith(realRoot + sep)) {
106
+ throw new Error(`writeFileWithinRoot: parent directory escapes the workspace root via a symlink: ${absPath}`);
107
+ }
108
+ // `O_NOFOLLOW ?? 0`: the flag is defined on Linux/macOS (the harness host
109
+ // platforms); the `?? 0` keeps the open valid on a platform that lacks it
110
+ // rather than NaN-ing the flag mask.
111
+ const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_TRUNC | (fsConstants.O_NOFOLLOW ?? 0);
112
+ const fh = await open(target, flags, 0o644);
113
+ try {
114
+ await fh.writeFile(data);
115
+ }
116
+ finally {
117
+ await fh.close();
118
+ }
119
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Filesystem Result glue for cortex.
3
+ *
4
+ * The workspace read seam (`workspace/filesystem.ts`) and the handful of
5
+ * modules that touch `node:fs` directly (e.g. `memory/card-builders.ts`) model
6
+ * failure as values. The ONLY `try/catch` against `node:fs` lives here, in
7
+ * `tryFs` — it turns a genuine I/O throw into an `err(FsError)`; everything
8
+ * above flows `ResultAsync`.
9
+ *
10
+ * House rules realized here (see `lib/result.ts`):
11
+ * - Absence is NOT an error. A missing path stays in the OK channel as a data
12
+ * variant: the seam returns `ok({ kind: "not_found" })` / `ok({ kind:
13
+ * "out_of_scope" })`, never an `err`. The fs-level `ENOENT`/`ENOTDIR` checks
14
+ * that distinguish absence map to the absence sentinel the caller supplies
15
+ * (`onAbsent`), NOT to an `err`. `FsError` is reserved for a genuine I/O
16
+ * failure — a permission denial (`EACCES`/`EPERM`), an `EISDIR` where a file
17
+ * was expected, a disk error, a too-many-open-files (`EMFILE`), a presigned
18
+ * download fetch failure.
19
+ * - Control-flow exceptions (DBOS cancellation, `AbortError`) are NOT failures
20
+ * and are never captured as an `FsError`: `tryFs` only ever wraps the single
21
+ * `fs` call passed to it. An `AbortError` raised inside a streamed read is a
22
+ * control-flow signal — keep it outside the wrapped call (it propagates) or
23
+ * re-classify it explicitly; do NOT funnel a whole streaming body through
24
+ * `tryFs` such that an `AbortError` becomes an `err`.
25
+ *
26
+ * Consumers unwrap per their edge: tool `execute` bodies (`read_file`, `grep`,
27
+ * `list_files`, `file_stat`, `edit_file`) `unwrapOrThrow` the Result, then
28
+ * switch on the OK-channel `.kind`; degrade-to-null direct-fs callers
29
+ * (`card-builders`) `.unwrapOr(null)` / `.match` to preserve their "any failure
30
+ * → fall back to a chip" behaviour.
31
+ */
32
+ import { ResultAsync } from "neverthrow";
33
+ /**
34
+ * A filesystem failure. Absence is deliberately NOT modelled here — a missing
35
+ * file/dir rides the OK channel as the seam's `not_found` / `out_of_scope` data
36
+ * variant (or a caller-chosen sentinel via `tryFs(..., { onAbsent })`).
37
+ * `FsError` is reserved for a genuine, unexpected I/O failure. `op` is a stable
38
+ * human-readable label (e.g. `"workspace.readFile"`, `"cardBuilders.subdirs"`)
39
+ * used by `describeFsError` and in logs.
40
+ */
41
+ export type FsError = {
42
+ readonly type: "read_failed";
43
+ readonly op: string;
44
+ readonly path?: string;
45
+ readonly cause: unknown;
46
+ } | {
47
+ readonly type: "write_failed";
48
+ readonly op: string;
49
+ readonly path?: string;
50
+ readonly cause: unknown;
51
+ } | {
52
+ readonly type: "permission_denied";
53
+ readonly op: string;
54
+ readonly path?: string;
55
+ readonly cause: unknown;
56
+ } | {
57
+ readonly type: "is_a_directory";
58
+ readonly op: string;
59
+ readonly path?: string;
60
+ readonly cause: unknown;
61
+ } | {
62
+ readonly type: "fetch_failed";
63
+ readonly op: string;
64
+ readonly path?: string;
65
+ readonly cause: unknown;
66
+ };
67
+ /** True when the throw is a plain "this path isn't here" — `ENOENT`/`ENOTDIR`. */
68
+ export declare function isAbsent(cause: unknown): boolean;
69
+ /** A one-line, user-facing description of an `FsError` for logs and error bodies. */
70
+ export declare function describeFsError(e: FsError): string;
71
+ /**
72
+ * Wrap a single `fs` read call. A genuine `fs` throw becomes `err(read_failed)`
73
+ * — or `err(permission_denied)` / `err(is_a_directory)` for the matching errno.
74
+ * When `onAbsent` is supplied, an `ENOENT`/`ENOTDIR` throw is intercepted and
75
+ * its return value placed in the OK channel (absence is NOT an error).
76
+ *
77
+ * `fn` runs the single `fs` call and returns the already-mapped value (`T`).
78
+ * Keep `fn` to the one `await fs.X(...)` plus trivial mapping; do NOT embed
79
+ * control-flow that could throw a non-`fs` error (an `AbortError` raised inside
80
+ * `fn` would be miscaptured as an `FsError` — keep abortable streaming bodies
81
+ * out of `tryFs`).
82
+ */
83
+ export declare function tryFs<T>(op: string, fn: () => Promise<T>, options?: {
84
+ path?: string;
85
+ onAbsent?: () => T;
86
+ }): ResultAsync<T, FsError>;
87
+ /** `tryFs` for a write/mkdir/open-for-write call: maps the non-permission
88
+ * default to `write_failed`. Absence semantics are identical. */
89
+ export declare function tryFsWrite<T>(op: string, fn: () => Promise<T>, options?: {
90
+ path?: string;
91
+ onAbsent?: () => T;
92
+ }): ResultAsync<T, FsError>;
93
+ /**
94
+ * Wrap a presigned-download fetch (the `PresignedFallback.fetch` seam call) into
95
+ * the same error channel. A throw becomes `err(fetch_failed)`; a `null` return
96
+ * (file genuinely not present remotely) stays in the OK channel as `null`.
97
+ */
98
+ export declare function tryFetch<T>(op: string, fn: () => Promise<T>, path?: string): ResultAsync<T, FsError>;
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Filesystem Result glue for cortex.
3
+ *
4
+ * The workspace read seam (`workspace/filesystem.ts`) and the handful of
5
+ * modules that touch `node:fs` directly (e.g. `memory/card-builders.ts`) model
6
+ * failure as values. The ONLY `try/catch` against `node:fs` lives here, in
7
+ * `tryFs` — it turns a genuine I/O throw into an `err(FsError)`; everything
8
+ * above flows `ResultAsync`.
9
+ *
10
+ * House rules realized here (see `lib/result.ts`):
11
+ * - Absence is NOT an error. A missing path stays in the OK channel as a data
12
+ * variant: the seam returns `ok({ kind: "not_found" })` / `ok({ kind:
13
+ * "out_of_scope" })`, never an `err`. The fs-level `ENOENT`/`ENOTDIR` checks
14
+ * that distinguish absence map to the absence sentinel the caller supplies
15
+ * (`onAbsent`), NOT to an `err`. `FsError` is reserved for a genuine I/O
16
+ * failure — a permission denial (`EACCES`/`EPERM`), an `EISDIR` where a file
17
+ * was expected, a disk error, a too-many-open-files (`EMFILE`), a presigned
18
+ * download fetch failure.
19
+ * - Control-flow exceptions (DBOS cancellation, `AbortError`) are NOT failures
20
+ * and are never captured as an `FsError`: `tryFs` only ever wraps the single
21
+ * `fs` call passed to it. An `AbortError` raised inside a streamed read is a
22
+ * control-flow signal — keep it outside the wrapped call (it propagates) or
23
+ * re-classify it explicitly; do NOT funnel a whole streaming body through
24
+ * `tryFs` such that an `AbortError` becomes an `err`.
25
+ *
26
+ * Consumers unwrap per their edge: tool `execute` bodies (`read_file`, `grep`,
27
+ * `list_files`, `file_stat`, `edit_file`) `unwrapOrThrow` the Result, then
28
+ * switch on the OK-channel `.kind`; degrade-to-null direct-fs callers
29
+ * (`card-builders`) `.unwrapOr(null)` / `.match` to preserve their "any failure
30
+ * → fall back to a chip" behaviour.
31
+ */
32
+ import { ResultAsync, err, ok } from "neverthrow";
33
+ const _assertDomainError = true;
34
+ /** errno codes that mean "the path is absent" — the caller's concern, mapped to
35
+ * the supplied absence sentinel, NOT to an `err`. */
36
+ const ABSENT_CODES = new Set(["ENOENT", "ENOTDIR"]);
37
+ /** errno codes that mean "permission denied". */
38
+ const PERMISSION_CODES = new Set(["EACCES", "EPERM"]);
39
+ function errnoOf(cause) {
40
+ if (cause && typeof cause === "object" && "code" in cause) {
41
+ const code = cause.code;
42
+ return typeof code === "string" ? code : undefined;
43
+ }
44
+ return undefined;
45
+ }
46
+ /** True when the throw is a plain "this path isn't here" — `ENOENT`/`ENOTDIR`. */
47
+ export function isAbsent(cause) {
48
+ const code = errnoOf(cause);
49
+ return code !== undefined && ABSENT_CODES.has(code);
50
+ }
51
+ /** Map an `fs` throw to a typed `FsError`. `EACCES`/`EPERM` → permission_denied;
52
+ * `EISDIR` → is_a_directory; everything else → read_failed (or write_failed,
53
+ * via `tryFsWrite`). Absence (`ENOENT`/`ENOTDIR`) is NOT routed here — `tryFs`
54
+ * intercepts it first and yields the absence sentinel. */
55
+ function readError(op, path, cause) {
56
+ const code = errnoOf(cause);
57
+ if (code && PERMISSION_CODES.has(code))
58
+ return { type: "permission_denied", op, path, cause };
59
+ if (code === "EISDIR")
60
+ return { type: "is_a_directory", op, path, cause };
61
+ return { type: "read_failed", op, path, cause };
62
+ }
63
+ function writeError(op, path, cause) {
64
+ const code = errnoOf(cause);
65
+ if (code && PERMISSION_CODES.has(code))
66
+ return { type: "permission_denied", op, path, cause };
67
+ return { type: "write_failed", op, path, cause };
68
+ }
69
+ /** A one-line, user-facing description of an `FsError` for logs and error bodies. */
70
+ export function describeFsError(e) {
71
+ const at = e.path ? ` (${e.op}: ${e.path})` : ` (${e.op})`;
72
+ switch (e.type) {
73
+ case "read_failed":
74
+ return `filesystem read failed${at}`;
75
+ case "write_failed":
76
+ return `filesystem write failed${at}`;
77
+ case "permission_denied":
78
+ return `filesystem permission denied${at}`;
79
+ case "is_a_directory":
80
+ return `expected a file but found a directory${at}`;
81
+ case "fetch_failed":
82
+ return `remote file fetch failed${at}`;
83
+ }
84
+ }
85
+ /**
86
+ * Wrap a single `fs` read call. A genuine `fs` throw becomes `err(read_failed)`
87
+ * — or `err(permission_denied)` / `err(is_a_directory)` for the matching errno.
88
+ * When `onAbsent` is supplied, an `ENOENT`/`ENOTDIR` throw is intercepted and
89
+ * its return value placed in the OK channel (absence is NOT an error).
90
+ *
91
+ * `fn` runs the single `fs` call and returns the already-mapped value (`T`).
92
+ * Keep `fn` to the one `await fs.X(...)` plus trivial mapping; do NOT embed
93
+ * control-flow that could throw a non-`fs` error (an `AbortError` raised inside
94
+ * `fn` would be miscaptured as an `FsError` — keep abortable streaming bodies
95
+ * out of `tryFs`).
96
+ */
97
+ export function tryFs(op, fn, options = {}) {
98
+ return new ResultAsync((async () => {
99
+ try {
100
+ return ok(await fn());
101
+ }
102
+ catch (cause) {
103
+ if (options.onAbsent && isAbsent(cause))
104
+ return ok(options.onAbsent());
105
+ return err(readError(op, options.path, cause));
106
+ }
107
+ })());
108
+ }
109
+ /** `tryFs` for a write/mkdir/open-for-write call: maps the non-permission
110
+ * default to `write_failed`. Absence semantics are identical. */
111
+ export function tryFsWrite(op, fn, options = {}) {
112
+ return new ResultAsync((async () => {
113
+ try {
114
+ return ok(await fn());
115
+ }
116
+ catch (cause) {
117
+ if (options.onAbsent && isAbsent(cause))
118
+ return ok(options.onAbsent());
119
+ return err(writeError(op, options.path, cause));
120
+ }
121
+ })());
122
+ }
123
+ /**
124
+ * Wrap a presigned-download fetch (the `PresignedFallback.fetch` seam call) into
125
+ * the same error channel. A throw becomes `err(fetch_failed)`; a `null` return
126
+ * (file genuinely not present remotely) stays in the OK channel as `null`.
127
+ */
128
+ export function tryFetch(op, fn, path) {
129
+ return new ResultAsync((async () => {
130
+ try {
131
+ return ok(await fn());
132
+ }
133
+ catch (cause) {
134
+ return err({ type: "fetch_failed", op, path, cause });
135
+ }
136
+ })());
137
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Per-source HTTP concurrency cap helper.
3
+ *
4
+ * Several Phase-3 fan-outs hit the same upstream (chembl, openfda,
5
+ * clinicaltrials.gov) from multiple branches. Without a host-level cap, a
6
+ * single shortlist of 8 modulators × 4 fan-out sub-workflows could open
7
+ * 32 concurrent requests against ChEMBL — well past polite usage. This
8
+ * module exposes a tiny semaphore keyed by host so all branches share
9
+ * one budget per upstream.
10
+ *
11
+ * Usage:
12
+ * import { withHost } from "../../lib/host-concurrency.js";
13
+ * const result = await withHost("chembl", () => chembl.getMechanism(id));
14
+ */
15
+ /** Acquire a slot, run `body`, release on completion (success or failure). */
16
+ export declare function withHost<T>(host: string, body: () => Promise<T>): Promise<T>;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Per-source HTTP concurrency cap helper.
3
+ *
4
+ * Several Phase-3 fan-outs hit the same upstream (chembl, openfda,
5
+ * clinicaltrials.gov) from multiple branches. Without a host-level cap, a
6
+ * single shortlist of 8 modulators × 4 fan-out sub-workflows could open
7
+ * 32 concurrent requests against ChEMBL — well past polite usage. This
8
+ * module exposes a tiny semaphore keyed by host so all branches share
9
+ * one budget per upstream.
10
+ *
11
+ * Usage:
12
+ * import { withHost } from "../../lib/host-concurrency.js";
13
+ * const result = await withHost("chembl", () => chembl.getMechanism(id));
14
+ */
15
+ const DEFAULT_LIMITS = {
16
+ chembl: 4,
17
+ openfda: 4,
18
+ ctgov: 4,
19
+ opentargets: 4,
20
+ ensembl: 6,
21
+ ncbi: 3,
22
+ bgee: 4,
23
+ cbioportal: 3,
24
+ string: 3,
25
+ reactome: 4,
26
+ kegg: 4,
27
+ hgnc: 6,
28
+ uniprot: 6,
29
+ iuphar: 4,
30
+ ema: 2,
31
+ pubchem: 4,
32
+ "annotation-llm": 4,
33
+ default: 4,
34
+ };
35
+ const budgets = new Map();
36
+ function getBudget(host) {
37
+ let b = budgets.get(host);
38
+ if (!b) {
39
+ b = { limit: DEFAULT_LIMITS[host] ?? DEFAULT_LIMITS.default, inUse: 0, queue: [] };
40
+ budgets.set(host, b);
41
+ }
42
+ return b;
43
+ }
44
+ /** Acquire a slot, run `body`, release on completion (success or failure). */
45
+ export async function withHost(host, body) {
46
+ const b = getBudget(host);
47
+ if (b.inUse >= b.limit) {
48
+ await new Promise((resolve) => b.queue.push(resolve));
49
+ }
50
+ b.inUse += 1;
51
+ try {
52
+ return await body();
53
+ }
54
+ finally {
55
+ b.inUse -= 1;
56
+ const next = b.queue.shift();
57
+ if (next)
58
+ next();
59
+ }
60
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Identifier validation — safe patterns for path-embedded IDs.
3
+ */
4
+ /** Pattern for IDs safe to embed in filesystem paths. */
5
+ export declare const SAFE_ID_PATTERN: RegExp;
6
+ /** Zod refinement for safe path identifiers. */
7
+ export declare function isSafePathId(value: string): boolean;
8
+ export declare const SAFE_ID_MESSAGE = "Must be alphanumeric with hyphens/underscores, no path separators";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Identifier validation — safe patterns for path-embedded IDs.
3
+ */
4
+ /** Pattern for IDs safe to embed in filesystem paths. */
5
+ export const SAFE_ID_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
6
+ /** Zod refinement for safe path identifiers. */
7
+ export function isSafePathId(value) {
8
+ return SAFE_ID_PATTERN.test(value) && !value.includes("..");
9
+ }
10
+ export const SAFE_ID_MESSAGE = "Must be alphanumeric with hyphens/underscores, no path separators";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Custom OTel metrics for Cortex.
3
+ *
4
+ * Instruments:
5
+ * - cortex.artifact.reconcile.dropped — counter for missing manifest entries
6
+ */
7
+ export declare const artifactReconcileDropped: import("@opentelemetry/api").Counter<import("@opentelemetry/api").Attributes>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Custom OTel metrics for Cortex.
3
+ *
4
+ * Instruments:
5
+ * - cortex.artifact.reconcile.dropped — counter for missing manifest entries
6
+ */
7
+ import { metrics } from "@opentelemetry/api";
8
+ const meter = metrics.getMeter("cortex");
9
+ export const artifactReconcileDropped = meter.createCounter("cortex.artifact.reconcile.dropped", {
10
+ description: "Manifest entries dropped because their on-disk file was missing at " +
11
+ "registration time (writes-then-deletes, renames). Tagged by agent_id, step_id.",
12
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Mime-type detection for artifact registration.
3
+ *
4
+ * Registration payloads sent to the storage backend carry a `mimeType` per file. The storage backend
5
+ * persists it on the artifact row and uses it as the S3 object's
6
+ * `Content-Type` when the artifact is later synced — without it, S3 stores
7
+ * `application/octet-stream` and downloads serve as opaque binary regardless
8
+ * of file extension.
9
+ *
10
+ * The `mime` package's mime-db backing doesn't include a few science-domain
11
+ * extensions (`.py`, `.R`, `.Rmd`, `.RData`, `.rds`) that browsers populate
12
+ * in `File.type` from their bundled tables, so we extend a custom Mime
13
+ * instance with those cases. Returned types align with the frontend's browser-side
14
+ * detection so a Python script uploaded directly and one synced from a
15
+ * sandbox both end up with the same `text/x-python`.
16
+ */
17
+ export declare function detectMimeType(pathOrFilename: string): string;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Mime-type detection for artifact registration.
3
+ *
4
+ * Registration payloads sent to the storage backend carry a `mimeType` per file. The storage backend
5
+ * persists it on the artifact row and uses it as the S3 object's
6
+ * `Content-Type` when the artifact is later synced — without it, S3 stores
7
+ * `application/octet-stream` and downloads serve as opaque binary regardless
8
+ * of file extension.
9
+ *
10
+ * The `mime` package's mime-db backing doesn't include a few science-domain
11
+ * extensions (`.py`, `.R`, `.Rmd`, `.RData`, `.rds`) that browsers populate
12
+ * in `File.type` from their bundled tables, so we extend a custom Mime
13
+ * instance with those cases. Returned types align with the frontend's browser-side
14
+ * detection so a Python script uploaded directly and one synced from a
15
+ * sandbox both end up with the same `text/x-python`.
16
+ */
17
+ import { Mime } from "mime";
18
+ import standard from "mime/types/standard.js";
19
+ import other from "mime/types/other.js";
20
+ const mime = new Mime(standard, other, {
21
+ "text/x-python": ["py"],
22
+ "text/x-r-source": ["R", "r"],
23
+ "text/x-r-markdown": ["Rmd", "rmd"],
24
+ "application/x-rdata": ["RData", "Rdata", "rds"],
25
+ });
26
+ const FALLBACK = "application/octet-stream";
27
+ export function detectMimeType(pathOrFilename) {
28
+ return mime.getType(pathOrFilename) ?? FALLBACK;
29
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * OpenTelemetry SDK initialization — traces + metrics.
3
+ *
4
+ * Exported as `initOtel()` and called explicitly from index.ts to prevent
5
+ * the bundler from tree-shaking it (side-effect-only imports get dropped).
6
+ *
7
+ * Traces: NodeTracerProvider exports to OTLP when OTEL_EXPORTER_OTLP_ENDPOINT
8
+ * is set.
9
+ *
10
+ * Metrics: MeterProvider exports to OTLP when OTEL_EXPORTER_OTLP_ENDPOINT
11
+ * is set. Custom Cortex metrics are defined in metrics.ts.
12
+ *
13
+ * Note: OTEL's instrumentation-http patches node:http but does not cover
14
+ * Hono's request handling or Node 22's undici-based globalThis.fetch,
15
+ * so inbound/outbound trace-context propagation across those paths is
16
+ * not currently wired.
17
+ */
18
+ /**
19
+ * Initialize the OpenTelemetry SDK. Must be called before any code that
20
+ * calls trace.getTracer() or metrics.getMeter().
21
+ *
22
+ * Safe to call multiple times — only the first call has effect.
23
+ */
24
+ export declare function initOtel(): void;
25
+ /**
26
+ * Flush and shut down the OTel exporters. Called by the graceful-shutdown
27
+ * sequence so in-flight batch spans/metrics make it to the collector
28
+ * before the process exits. Never throws.
29
+ */
30
+ export declare function shutdownOtel(): Promise<void>;
@@ -0,0 +1,102 @@
1
+ /**
2
+ * OpenTelemetry SDK initialization — traces + metrics.
3
+ *
4
+ * Exported as `initOtel()` and called explicitly from index.ts to prevent
5
+ * the bundler from tree-shaking it (side-effect-only imports get dropped).
6
+ *
7
+ * Traces: NodeTracerProvider exports to OTLP when OTEL_EXPORTER_OTLP_ENDPOINT
8
+ * is set.
9
+ *
10
+ * Metrics: MeterProvider exports to OTLP when OTEL_EXPORTER_OTLP_ENDPOINT
11
+ * is set. Custom Cortex metrics are defined in metrics.ts.
12
+ *
13
+ * Note: OTEL's instrumentation-http patches node:http but does not cover
14
+ * Hono's request handling or Node 22's undici-based globalThis.fetch,
15
+ * so inbound/outbound trace-context propagation across those paths is
16
+ * not currently wired.
17
+ */
18
+ import { propagation, metrics, trace } from "@opentelemetry/api";
19
+ import { W3CTraceContextPropagator } from "@opentelemetry/core";
20
+ import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
21
+ import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
22
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
23
+ import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
24
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
25
+ import { resourceFromAttributes } from "@opentelemetry/resources";
26
+ import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
27
+ let initialized = false;
28
+ let registeredTracerProvider;
29
+ let registeredMeterProvider;
30
+ /**
31
+ * Initialize the OpenTelemetry SDK. Must be called before any code that
32
+ * calls trace.getTracer() or metrics.getMeter().
33
+ *
34
+ * Safe to call multiple times — only the first call has effect.
35
+ */
36
+ export function initOtel() {
37
+ if (initialized)
38
+ return;
39
+ initialized = true;
40
+ // ── W3C Trace Context propagation ──────────────────────────────────
41
+ propagation.setGlobalPropagator(new W3CTraceContextPropagator());
42
+ const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
43
+ // ── Traces ─────────────────────────────────────────────────────────
44
+ // Always register a TracerProvider so trace.getTracer() returns real spans
45
+ // with unique IDs. Without this, the OtelBridge gets no-op spans (all zeros)
46
+ // that collide in its span map, causing "No OTEL span found" warnings.
47
+ {
48
+ const spanProcessors = [];
49
+ if (endpoint) {
50
+ const base = endpoint.replace(/\/+$/, "");
51
+ spanProcessors.push(new BatchSpanProcessor(new OTLPTraceExporter({ url: `${base}/v1/traces` })));
52
+ }
53
+ const serviceName = process.env.OTEL_SERVICE_NAME || "cortex";
54
+ const resource = resourceFromAttributes({
55
+ [ATTR_SERVICE_NAME]: serviceName,
56
+ });
57
+ const tracerProvider = new NodeTracerProvider({
58
+ resource,
59
+ spanProcessors,
60
+ });
61
+ tracerProvider.register();
62
+ registeredTracerProvider = tracerProvider;
63
+ // Debug: verify registration actually worked
64
+ const testTracer = trace.getTracer("otel-init-check");
65
+ const testSpan = testTracer.startSpan("init-check");
66
+ const ctx = testSpan.spanContext();
67
+ const isNoop = ctx.spanId === "0000000000000000";
68
+ console.log(`[otel] TracerProvider registered: spanId=${ctx.spanId}, noop=${isNoop}, ` +
69
+ `endpoint=${endpoint ?? "(none)"}, processors=${spanProcessors.length}`);
70
+ testSpan.end();
71
+ }
72
+ // ── Metrics ────────────────────────────────────────────────────────
73
+ if (endpoint) {
74
+ const base = endpoint.replace(/\/+$/, "");
75
+ const metricExporter = new OTLPMetricExporter({
76
+ url: `${base}/v1/metrics`,
77
+ });
78
+ const meterProvider = new MeterProvider({
79
+ readers: [
80
+ new PeriodicExportingMetricReader({
81
+ exporter: metricExporter,
82
+ exportIntervalMillis: 30_000,
83
+ }),
84
+ ],
85
+ });
86
+ metrics.setGlobalMeterProvider(meterProvider);
87
+ registeredMeterProvider = meterProvider;
88
+ }
89
+ }
90
+ /**
91
+ * Flush and shut down the OTel exporters. Called by the graceful-shutdown
92
+ * sequence so in-flight batch spans/metrics make it to the collector
93
+ * before the process exits. Never throws.
94
+ */
95
+ export async function shutdownOtel() {
96
+ const tasks = [];
97
+ if (registeredTracerProvider)
98
+ tasks.push(registeredTracerProvider.shutdown());
99
+ if (registeredMeterProvider)
100
+ tasks.push(registeredMeterProvider.shutdown());
101
+ await Promise.allSettled(tasks);
102
+ }