@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,304 @@
1
+ /**
2
+ * The workspace read seam — `{ readFile, list, stat }` over the analysis
3
+ * workspace tree. A construction-time dependency (see the harness-durable-runtime spec): the composition
4
+ * root builds one `WorkspaceFilesystem` and passes it to tool factories.
5
+ *
6
+ * Reads resolve from the analysis's workspace root when the file is present and
7
+ * fall back to an embedder-supplied presigned URL otherwise. The seam writes no
8
+ * provenance — reads don't produce lineage — and does not depend on any
9
+ * sandbox.
10
+ *
11
+ * Scoping is enforced once, here, by `resolveWorkspacePath`: any path that
12
+ * escapes the analysis's resolved workspace root is rejected before any I/O.
13
+ * `read_file` / `grep` / any future reader share the chokepoint.
14
+ *
15
+ * Reads roam the whole tree read-only, so the seam never confines. Relative
16
+ * paths resolve against the caller-supplied `workingDir` (frame-local, per
17
+ * the harness-workspace-tools spec);
18
+ * when omitted they resolve against the analysis root, which is the
19
+ * conversation-agent behaviour. Sandbox read tools pass the step working
20
+ * directory so a relative path reads back what a relative write wrote.
21
+ *
22
+ * Failure is modelled as values (see `lib/fs-result.ts`): the public methods
23
+ * return `ResultAsync<…, FsError>`. The `not_found` / `out_of_scope` /
24
+ * `truncated` outcomes are NOT failures — they ride the OK channel as `.kind`
25
+ * data variants. `err(FsError)` is reserved for a genuine I/O failure
26
+ * (permission, `EISDIR`, a presigned-fetch throw). An `AbortError` raised
27
+ * inside a streamed read is control-flow — the streaming/iteration body is kept
28
+ * OUTSIDE `tryFs`, so only the discrete `fs.open` / `fs.read` / `fs.readFile`
29
+ * calls become `err`.
30
+ */
31
+ import { open as fsOpen, readFile as fsReadFile, readdir as fsReaddir, stat as fsStat } from "node:fs/promises";
32
+ import { createReadStream } from "node:fs";
33
+ import { createInterface } from "node:readline";
34
+ import { join } from "node:path";
35
+ import { ResultAsync, err, errAsync, ok } from "neverthrow";
36
+ import { scopeResource } from "../auth/types.js";
37
+ import { tryFetch, tryFs } from "../lib/fs-result.js";
38
+ import { classifyWithinRoot } from "../lib/fs-helpers.js";
39
+ import { resolveWorkspacePath } from "./paths.js";
40
+ // ── Constructor ───────────────────────────────────────────────────────────
41
+ export function createWorkspaceFilesystem(deps) {
42
+ const { resolveWorkspaceRoot, presignedFallback } = deps;
43
+ /**
44
+ * `ResolveWorkspaceRoot` signals an unresolvable resource by throwing — the contract that
45
+ * makes a resolution failure inside a DBOS body a durably-failed step. This seam is not a
46
+ * DBOS body: it promises `Result`, and the read tools it backs are reachable from a live
47
+ * chat turn whose analysis folder may have been moved or deleted since the turn began.
48
+ * Convert at the boundary so an unresolvable root is a value here, not an exception that
49
+ * only survives because some caller happens to wrap it.
50
+ */
51
+ function resolveFor(session, path, workingDir) {
52
+ const { resourceId: analysisId } = scopeResource(session.scope);
53
+ let workspaceRoot;
54
+ try {
55
+ workspaceRoot = resolveWorkspaceRoot(analysisId);
56
+ }
57
+ catch (cause) {
58
+ return err({ type: "read_failed", op: "workspace.resolveWorkspaceRoot", path: analysisId, cause });
59
+ }
60
+ return ok({ resolved: resolveWorkspacePath({ workspaceRoot, analysisId, path, workingDir }), workspaceRoot });
61
+ }
62
+ /**
63
+ * Lexical resolution PLUS a symlink-following confinement check — the single
64
+ * chokepoint every read tool (`read_file`, `grep`, `list`, `stat`) funnels
65
+ * through. `resolveWorkspacePath` is purely lexical, so a symlink an agent
66
+ * planted in its writable step dir (pointing at a host file outside the tree)
67
+ * would otherwise be read through by this host process. `classifyWithinRoot`
68
+ * follows the link: an `escaped` verdict is downgraded to `out_of_scope`; an
69
+ * `absent` path passes through unchanged so the caller's own not-found /
70
+ * presigned-fallback handling still runs (a non-existent path leaks nothing).
71
+ */
72
+ function confinedResolve(session, path, workingDir) {
73
+ const base = resolveFor(session, path, workingDir);
74
+ if (base.isErr())
75
+ return errAsync(base.error);
76
+ const { resolved, workspaceRoot } = base.value;
77
+ if (resolved.kind === "out_of_scope")
78
+ return okAsync(resolved);
79
+ return ResultAsync.fromPromise(classifyWithinRoot(workspaceRoot, resolved.absolute), (cause) => ({
80
+ type: "read_failed",
81
+ op: "workspace.confineRealpath",
82
+ path: resolved.absolute,
83
+ cause,
84
+ })).map((verdict) => (verdict === "escaped" ? { kind: "out_of_scope" } : resolved));
85
+ }
86
+ return {
87
+ readFile({ session, path, maxBytes, headLines, tailLines, workingDir }) {
88
+ return confinedResolve(session, path, workingDir).andThen((resolved) => {
89
+ if (resolved.kind === "out_of_scope") {
90
+ return okAsync({ kind: "out_of_scope" });
91
+ }
92
+ const absolute = resolved.absolute;
93
+ const relative = resolved.relative;
94
+ return safeStat(absolute).andThen((localStat) => {
95
+ if (localStat?.isFile()) {
96
+ if (headLines !== undefined) {
97
+ return readHeadLines(absolute, headLines, maxBytes);
98
+ }
99
+ if (tailLines !== undefined) {
100
+ return readTailLines(absolute, localStat.size, tailLines, maxBytes);
101
+ }
102
+ return readWithCap(absolute, localStat.size, maxBytes);
103
+ }
104
+ if (presignedFallback) {
105
+ return tryFetch("workspace.presignedFetch", () => presignedFallback.fetch({ session, relativePath: relative }), relative).map((content) => {
106
+ if (content !== null) {
107
+ if (headLines !== undefined)
108
+ return sliceHeadLines(content, headLines, maxBytes);
109
+ if (tailLines !== undefined)
110
+ return sliceTailLines(content, tailLines, maxBytes);
111
+ return capBuffer(content, maxBytes);
112
+ }
113
+ return { kind: "not_found" };
114
+ });
115
+ }
116
+ return okAsync({ kind: "not_found" });
117
+ });
118
+ });
119
+ },
120
+ list({ session, path, workingDir }) {
121
+ return confinedResolve(session, path, workingDir).andThen((resolved) => {
122
+ if (resolved.kind === "out_of_scope") {
123
+ return okAsync({ kind: "out_of_scope" });
124
+ }
125
+ const absolute = resolved.absolute;
126
+ return tryFs("workspace.list", () => fsReaddir(absolute, { withFileTypes: true }), { path: absolute, onAbsent: () => ({ notFound: true }) }).andThen((dirents) => {
127
+ if ("notFound" in dirents)
128
+ return okAsync({ kind: "not_found" });
129
+ return collectEntries(absolute, dirents).map((entries) => ({ kind: "ok", entries }));
130
+ });
131
+ });
132
+ },
133
+ stat({ session, path, workingDir }) {
134
+ return confinedResolve(session, path, workingDir).andThen((resolved) => {
135
+ if (resolved.kind === "out_of_scope") {
136
+ return okAsync({ kind: "out_of_scope" });
137
+ }
138
+ return safeStat(resolved.absolute).map((s) => {
139
+ if (!s)
140
+ return { kind: "not_found" };
141
+ return {
142
+ kind: "ok",
143
+ type: s.isDirectory() ? "directory" : "file",
144
+ size: s.size,
145
+ };
146
+ });
147
+ });
148
+ },
149
+ };
150
+ }
151
+ // ── Helpers ───────────────────────────────────────────────────────────────
152
+ /** A bare `ok(value)` as a `ResultAsync`, with no `fs` call to wrap. */
153
+ function okAsync(value) {
154
+ return new ResultAsync(Promise.resolve(ok(value)));
155
+ }
156
+ /** Stat a path; absence (`ENOENT`/`ENOTDIR`) → `ok(null)`, genuine I/O → `err`. */
157
+ function safeStat(absolute) {
158
+ return tryFs("workspace.stat", () => fsStat(absolute), {
159
+ path: absolute,
160
+ onAbsent: () => null,
161
+ });
162
+ }
163
+ /** Stat each directory entry to attach a size; absence/I/O failures degrade to no size. */
164
+ function collectEntries(dir, dirents) {
165
+ return ResultAsync.combine(dirents.map((d) => {
166
+ if (d.isDirectory())
167
+ return okAsync({ name: d.name, type: "directory" });
168
+ return safeStat(join(dir, d.name)).map((s) => ({ name: d.name, type: "file", size: s?.size ?? undefined }));
169
+ }));
170
+ }
171
+ function readWithCap(absolute, totalSize, maxBytes) {
172
+ if (maxBytes !== undefined && totalSize > maxBytes) {
173
+ return tryFs("workspace.readCapped", async () => {
174
+ const fh = await fsOpen(absolute, "r");
175
+ try {
176
+ const buf = Buffer.alloc(maxBytes);
177
+ await fh.read(buf, 0, maxBytes, 0);
178
+ return { kind: "truncated", content: buf, totalSize };
179
+ }
180
+ finally {
181
+ await fh.close();
182
+ }
183
+ }, { path: absolute });
184
+ }
185
+ return tryFs("workspace.readFile", async () => ({ kind: "ok", content: await fsReadFile(absolute), truncated: false }), { path: absolute });
186
+ }
187
+ function capBuffer(content, maxBytes) {
188
+ if (maxBytes !== undefined && content.length > maxBytes) {
189
+ return {
190
+ kind: "truncated",
191
+ content: content.subarray(0, maxBytes),
192
+ totalSize: content.length,
193
+ };
194
+ }
195
+ return { kind: "ok", content, truncated: false };
196
+ }
197
+ /**
198
+ * Stream the first `headLines` lines from disk, byte-bounded by `maxBytes`.
199
+ * Stops at whichever cap binds first; the stream is destroyed eagerly so
200
+ * we never read past the cap into RAM.
201
+ *
202
+ * The streaming/iteration body is kept OUTSIDE `tryFs` — an `AbortError` raised
203
+ * inside it is control-flow and must propagate, not become `err`. Only the
204
+ * follow-up `safeStat` (a discrete `fs` call) flows the `FsError` channel.
205
+ */
206
+ function readHeadLines(absolute, headLines, maxBytes) {
207
+ return new ResultAsync((async () => {
208
+ const stream = createReadStream(absolute, { highWaterMark: 16 * 1024 });
209
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
210
+ const collected = [];
211
+ let bytes = 0;
212
+ let truncated = false;
213
+ try {
214
+ for await (const line of rl) {
215
+ const lineBytes = Buffer.byteLength(line, "utf8") + 1;
216
+ if (maxBytes !== undefined && bytes + lineBytes > maxBytes) {
217
+ truncated = true;
218
+ break;
219
+ }
220
+ collected.push(line);
221
+ bytes += lineBytes;
222
+ if (collected.length >= headLines)
223
+ break;
224
+ }
225
+ }
226
+ finally {
227
+ rl.close();
228
+ stream.destroy();
229
+ }
230
+ const content = Buffer.from(collected.join("\n"));
231
+ if (truncated) {
232
+ // Total size is unknown without a full stat; report it as a separate read.
233
+ return (await safeStat(absolute)).map((s) => ({
234
+ kind: "truncated",
235
+ content,
236
+ totalSize: s?.size ?? content.length,
237
+ }));
238
+ }
239
+ // Whether the loop exhausted the file or hit the line cap, the agent asked
240
+ // for exactly this window, so this is `ok` not `truncated`. The tool layer
241
+ // reports `mode: "head"` so the agent knows it's a window.
242
+ return ok({ kind: "ok", content, truncated: false });
243
+ })());
244
+ }
245
+ /**
246
+ * Read the last `tailLines` lines via a windowed read from the end. The
247
+ * window size is bounded by `maxBytes` (default cap caller-supplied), so we
248
+ * never page in the whole file. If the window doesn't start at offset 0, the
249
+ * first line in the window is partial and is dropped.
250
+ *
251
+ * The discrete `fs.open` / `fh.read` calls are wrapped in `tryFs`; the buffer
252
+ * slicing is pure and runs inside the same `fn`.
253
+ */
254
+ function readTailLines(absolute, totalSize, tailLines, maxBytes) {
255
+ return tryFs("workspace.readTail", async () => {
256
+ const windowSize = Math.min(totalSize, maxBytes ?? totalSize);
257
+ const offset = totalSize - windowSize;
258
+ const fh = await fsOpen(absolute, "r");
259
+ try {
260
+ const buf = Buffer.alloc(windowSize);
261
+ if (windowSize > 0) {
262
+ await fh.read(buf, 0, windowSize, offset);
263
+ }
264
+ const allLines = buf.toString("utf8").split(/\r?\n/);
265
+ // Drop the partial leading line if the window doesn't cover the file start.
266
+ const candidateLines = offset > 0 ? allLines.slice(1) : allLines;
267
+ const sliced = candidateLines.length > tailLines ? candidateLines.slice(-tailLines) : candidateLines;
268
+ const content = Buffer.from(sliced.join("\n"));
269
+ const gotEnoughLines = sliced.length >= tailLines || offset === 0;
270
+ if (!gotEnoughLines) {
271
+ return { kind: "truncated", content, totalSize };
272
+ }
273
+ return { kind: "ok", content, truncated: false };
274
+ }
275
+ finally {
276
+ await fh.close();
277
+ }
278
+ }, { path: absolute });
279
+ }
280
+ function sliceHeadLines(content, headLines, maxBytes) {
281
+ const capped = maxBytes !== undefined && content.length > maxBytes ? content.subarray(0, maxBytes) : content;
282
+ const lines = capped.toString("utf8").split(/\r?\n/);
283
+ const slice = lines.slice(0, headLines);
284
+ const out = Buffer.from(slice.join("\n"));
285
+ if (maxBytes !== undefined && content.length > maxBytes && slice.length < headLines) {
286
+ return { kind: "truncated", content: out, totalSize: content.length };
287
+ }
288
+ return { kind: "ok", content: out, truncated: false };
289
+ }
290
+ function sliceTailLines(content, tailLines, maxBytes) {
291
+ if (maxBytes === undefined || content.length <= maxBytes) {
292
+ const lines = content.toString("utf8").split(/\r?\n/);
293
+ const slice = lines.length > tailLines ? lines.slice(-tailLines) : lines;
294
+ return { kind: "ok", content: Buffer.from(slice.join("\n")), truncated: false };
295
+ }
296
+ const window = content.subarray(content.length - maxBytes);
297
+ const lines = window.toString("utf8").split(/\r?\n/).slice(1);
298
+ const slice = lines.length > tailLines ? lines.slice(-tailLines) : lines;
299
+ const out = Buffer.from(slice.join("\n"));
300
+ if (slice.length < tailLines) {
301
+ return { kind: "truncated", content: out, totalSize: content.length };
302
+ }
303
+ return { kind: "ok", content: out, truncated: false };
304
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Mount strategy — single source of truth for workspace/pod mount paths.
3
+ *
4
+ * Single-mount model: one workspace mount covers the full analysis tree.
5
+ * Write protection is enforced via K8s RO volumeMount (execute_command) and
6
+ * by the harness write guard at the workspace-filesystem layer. Pod mounts
7
+ * are nested (K8s handles this fine — most-specific path wins).
8
+ */
9
+ /**
10
+ * Canonical paths for a step.
11
+ *
12
+ * ANALYSIS is the single workspace mount (covers the full analysis tree).
13
+ * ARTIFACTS is a subpath within that mount (the step's writable area, used as CWD).
14
+ */
15
+ export declare function buildMountPaths(resourceId: string, runId: string, stepId: string): {
16
+ /** Full analysis tree — single workspace mount. */
17
+ readonly ANALYSIS: `/${string}`;
18
+ /** Step's writable area — subpath within ANALYSIS, used as CWD. */
19
+ readonly ARTIFACTS: `/${string}`;
20
+ };
21
+ export interface PodMount {
22
+ mountPath: string;
23
+ subPath: string;
24
+ readOnly: boolean;
25
+ }
26
+ export interface DockerMount {
27
+ hostPath: string;
28
+ containerPath: string;
29
+ readOnly: boolean;
30
+ }
31
+ /**
32
+ * Build pod volumeMount specs — nested: full analysis (RO) + step area (RW).
33
+ * K8s handles nested mounts — the most-specific path wins.
34
+ */
35
+ export declare function buildPodMounts(opts: {
36
+ resourceId: string;
37
+ runId: string;
38
+ stepId: string;
39
+ }): PodMount[];
40
+ /**
41
+ * Build Docker bind mount specs — same nesting logic as buildPodMounts,
42
+ * but with host paths derived from sessionPath.
43
+ * Docker handles nested mounts — the most-specific path wins.
44
+ */
45
+ export declare function buildDockerMounts(opts: {
46
+ resourceId: string;
47
+ runId: string;
48
+ stepId: string;
49
+ sessionPath: string;
50
+ }): DockerMount[];
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Mount strategy — single source of truth for workspace/pod mount paths.
3
+ *
4
+ * Single-mount model: one workspace mount covers the full analysis tree.
5
+ * Write protection is enforced via K8s RO volumeMount (execute_command) and
6
+ * by the harness write guard at the workspace-filesystem layer. Pod mounts
7
+ * are nested (K8s handles this fine — most-specific path wins).
8
+ */
9
+ import { runStepDir } from "./paths.js";
10
+ import { join } from "node:path";
11
+ // ── Mount Path Builders ──────────────────────────────────────────────────
12
+ /**
13
+ * Canonical paths for a step.
14
+ *
15
+ * ANALYSIS is the single workspace mount (covers the full analysis tree).
16
+ * ARTIFACTS is a subpath within that mount (the step's writable area, used as CWD).
17
+ */
18
+ export function buildMountPaths(resourceId, runId, stepId) {
19
+ return {
20
+ /** Full analysis tree — single workspace mount. */
21
+ ANALYSIS: `/${resourceId}`,
22
+ /** Step's writable area — subpath within ANALYSIS, used as CWD. */
23
+ ARTIFACTS: `/${runStepDir(resourceId, runId, stepId)}`,
24
+ };
25
+ }
26
+ // ── Pod mounts ──────────────────────────────────────────────────────────
27
+ /**
28
+ * Build pod volumeMount specs — nested: full analysis (RO) + step area (RW).
29
+ * K8s handles nested mounts — the most-specific path wins.
30
+ */
31
+ export function buildPodMounts(opts) {
32
+ const mp = buildMountPaths(opts.resourceId, opts.runId, opts.stepId);
33
+ return [
34
+ {
35
+ mountPath: mp.ANALYSIS,
36
+ subPath: opts.resourceId,
37
+ readOnly: true,
38
+ },
39
+ {
40
+ mountPath: mp.ARTIFACTS,
41
+ subPath: runStepDir(opts.resourceId, opts.runId, opts.stepId),
42
+ readOnly: false,
43
+ },
44
+ ];
45
+ }
46
+ // ── Docker bind mounts ─────────────────────────────────────────────────
47
+ /**
48
+ * Build Docker bind mount specs — same nesting logic as buildPodMounts,
49
+ * but with host paths derived from sessionPath.
50
+ * Docker handles nested mounts — the most-specific path wins.
51
+ */
52
+ export function buildDockerMounts(opts) {
53
+ const mp = buildMountPaths(opts.resourceId, opts.runId, opts.stepId);
54
+ const stepRelPath = runStepDir(opts.resourceId, opts.runId, opts.stepId);
55
+ return [
56
+ {
57
+ hostPath: join(opts.sessionPath, opts.resourceId),
58
+ containerPath: mp.ANALYSIS,
59
+ readOnly: true,
60
+ },
61
+ {
62
+ hostPath: join(opts.sessionPath, stepRelPath),
63
+ containerPath: mp.ARTIFACTS,
64
+ readOnly: false,
65
+ },
66
+ ];
67
+ }
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Canonical workspace path resolver — shared between the read surface and
3
+ * the sandbox-gated mutate surface.
4
+ *
5
+ * One module that maps agent-supplied paths to physical workspace-tree
6
+ * locations under the frame-aware path model (see the harness-workspace-tools spec):
7
+ *
8
+ * - A **relative** path resolves against the caller's `workingDir` (the
9
+ * agent's writable working directory; the analysis root when omitted, as
10
+ * for the conversation agent). Frame-local.
11
+ * - An **absolute `/{analysisId}/...`** path resolves against the analysis
12
+ * root regardless of `workingDir`. Frame-independent — the canonical
13
+ * interchange form for paths crossing an agent or frame boundary.
14
+ *
15
+ * The analysis root itself comes from the embedder through the
16
+ * {@link ResolveWorkspaceRoot} seam — the harness owns the layout *inside*
17
+ * the root, the embedder owns *where* the root lives. Host paths carry no
18
+ * `{resourceId}` segment (the resolved root already identifies the resource);
19
+ * the `/{resourceId}/…` form survives only as the container-side view, which
20
+ * bind mounts keep independent of the host location.
21
+ *
22
+ * Both surfaces share this resolver, so a file a step writes is read back at
23
+ * the identical path — agreement is structural, not re-implemented per tool.
24
+ * `resolveForWrite` adds confinement: a resolved path outside `workingDir`
25
+ * comes back `out_of_prefix` (the read surface skips that — it roams the tree
26
+ * read-only).
27
+ */
28
+ /**
29
+ * The workspace-root resolution seam (see the workspace-root-resolution spec).
30
+ *
31
+ * Maps a resource id to the absolute host directory of that resource's
32
+ * workspace tree. Supplied by the embedder at the composition root and closed
33
+ * over once at workflow registration — the *function* is fixed per process,
34
+ * its *result* varies per resource, which is what makes per-resource roots
35
+ * compatible with DBOS's register-once model.
36
+ *
37
+ * Realization contract:
38
+ * - **Injective** — two live resources never resolve to the same root; the
39
+ * harness treats the root as exclusively owned and does not verify this.
40
+ * - **Durable-state-backed** — resolve from host state that survives the
41
+ * process (a DB row, a config map), never process memory, so a recovered
42
+ * workflow on a fresh process resolves correctly.
43
+ * - **Stable while the resource has an active run** — derived paths are
44
+ * recorded in durable step outputs; preventing mid-run moves is the
45
+ * embedder's job.
46
+ * - **Throws on unknown resources** — inside DBOS bodies the failure must
47
+ * cross the step boundary as a throw so the step is durably recorded as
48
+ * failed (see `lib/result.ts` house rules).
49
+ */
50
+ export type ResolveWorkspaceRoot = (resourceId: string) => string;
51
+ /** Result of resolving a workspace path against the canonical layout. */
52
+ export type ResolvedPath = {
53
+ readonly kind: "ok";
54
+ readonly absolute: string;
55
+ readonly relative: string;
56
+ } | {
57
+ readonly kind: "out_of_scope";
58
+ };
59
+ /**
60
+ * Result of resolving a path for a *write*: scope resolution plus confinement
61
+ * to the caller's `workingDir`. `out_of_prefix` (in-tree but outside the
62
+ * working directory) is distinct from `out_of_scope` (escaped the analysis
63
+ * tree) so the model can correct toward its working directory rather than
64
+ * guessing why the write failed. Both are data variants — never throws.
65
+ */
66
+ export type WriteResolvedPath = {
67
+ readonly kind: "ok";
68
+ readonly absolute: string;
69
+ readonly relative: string;
70
+ } | {
71
+ readonly kind: "out_of_scope";
72
+ } | {
73
+ readonly kind: "out_of_prefix";
74
+ };
75
+ /**
76
+ * Resolve an agent-supplied path against the analysis tree under the
77
+ * frame-aware model.
78
+ *
79
+ * - **Relative** (no leading slash) → resolved against `workingDir`
80
+ * (defaults to the analysis root). E.g. with `workingDir` =
81
+ * `…/runs/{runId}/{stepId}`, `"output/x.csv"` → that step's output dir.
82
+ * - **Absolute `/{analysisId}/...`** → resolved against the analysis root,
83
+ * ignoring `workingDir`. Frame-independent.
84
+ *
85
+ * The returned `relative` is always **analysis-root-relative** (used to build
86
+ * the in-sandbox `/{analysisId}/…` path). Returns `out_of_scope` for any input
87
+ * that escapes the resolved workspace root (`..` traversal, absolute host
88
+ * paths outside the tree, `/{otherAnalysisId}/...`).
89
+ */
90
+ export declare function resolveWorkspacePath(args: {
91
+ /** Absolute host root of the analysis's workspace tree (from the embedder's resolver). */
92
+ readonly workspaceRoot: string;
93
+ readonly analysisId: string;
94
+ readonly path: string;
95
+ /** Absolute host base that relative paths resolve against. Defaults to the analysis root. */
96
+ readonly workingDir?: string;
97
+ }): ResolvedPath;
98
+ /**
99
+ * Resolve a path for a write: same frame-aware resolution as
100
+ * `resolveWorkspacePath` (relative → `workingDir`, absolute → analysis root),
101
+ * then confine the result to `workingDir`. A `..` escape from the tree is
102
+ * `out_of_scope`; an in-tree path outside the working directory is
103
+ * `out_of_prefix`. A path equal to `workingDir` itself is in-prefix.
104
+ *
105
+ * `workingDir` is the absolute host path of the agent's writable working
106
+ * directory (for a plannable step, `stepWritePrefix(...)`).
107
+ */
108
+ export declare function resolveForWrite(args: {
109
+ /** Absolute host root of the analysis's workspace tree (from the embedder's resolver). */
110
+ readonly workspaceRoot: string;
111
+ readonly analysisId: string;
112
+ readonly path: string;
113
+ readonly workingDir: string;
114
+ }): WriteResolvedPath;
115
+ /**
116
+ * Derive the canonical writable-prefix absolute path for a sandbox step.
117
+ * Single source of truth — the agent does NOT supply this; it is computed
118
+ * from the workspace root + run/step coordinates the workflow owns.
119
+ */
120
+ export declare function stepWritePrefix(args: {
121
+ readonly workspaceRoot: string;
122
+ readonly runId: string;
123
+ readonly stepId: string;
124
+ }): string;
125
+ /**
126
+ * Map a host-side absolute path within an analysis's workspace tree to its
127
+ * in-sandbox absolute path. The tree is bind-mounted at `/{resourceId}`, so
128
+ * the sandbox path is the resource id plus the root-relative tail — the host
129
+ * location of the root never leaks into the container. Single source of truth
130
+ * for the `execute_command` / `write_file` cwd and the `{{WORKING_DIR}}`
131
+ * prompt substitution (see the harness-workspace-tools spec).
132
+ */
133
+ export declare function toSandboxPath(workspaceRoot: string, resourceId: string, hostAbsPath: string): string;
134
+ /**
135
+ * Parent of every preview, workspace-root-relative. Callers that enumerate
136
+ * previews join this; callers that address one join {@link previewDir}. Both
137
+ * spell the segment through this constant so the tree has one owner.
138
+ */
139
+ export declare const PREVIEWS_ROOT = "previews";
140
+ /**
141
+ * Versioned preview directory, workspace-root-relative. Previews live inside
142
+ * the analysis tree (`previews/{previewId}/v{N}`); the content-token `res`
143
+ * claim keeps the separate `previews/{analysisId}/{previewId}` formula in
144
+ * `contracts/content-url.ts` — that is URL space, not a filesystem sub-path,
145
+ * and hosts that serve previews map one onto the other themselves.
146
+ */
147
+ export declare function previewVersionDir(previewId: string, version: number): string;
148
+ /** Preview root for a specific preview (all versions), workspace-root-relative. */
149
+ export declare function previewDir(previewId: string): string;
150
+ /**
151
+ * Find the highest version number from a list of version directory names.
152
+ * Expects names like "v1", "v2", etc. Returns 0 if no versions found.
153
+ */
154
+ export declare function latestPreviewVersion(dirNames: string[]): number;
155
+ /**
156
+ * True when `value` is a safe single path segment: the `SAFE_ID` charset (word
157
+ * chars, `.`, `-` — no slash, NUL, or shell-hostile char) AND not a pure-dot
158
+ * segment (`.`/`..`), which the charset otherwise admits and which `resolve`/`join`
159
+ * would treat as the current/parent directory and use to climb the tree. The one
160
+ * definition of "safe id", shared by the throwing {@link assertSafeId} at path
161
+ * builders and the plan validator (`validate-plan.ts`), so a stepId is judged the
162
+ * same at plan time and at mount time.
163
+ */
164
+ export declare function isSafeId(value: string): boolean;
165
+ /**
166
+ * Throwing form of {@link isSafeId} for the mount/host-path builders. Ids are
167
+ * harness-minted UUIDs on every trusted path, but `stepId` reaches these builders
168
+ * straight from an LLM-authored plan, so this is the boundary that keeps a crafted
169
+ * id from re-rooting a mount or a host write. Exported so the mount-plan builders
170
+ * (the container-path source of truth) validate the same way.
171
+ */
172
+ export declare function assertSafeId(value: string, label: string): void;
173
+ /** Root directory for a specific workflow run, workspace-root-relative. */
174
+ export declare function runDir(runId: string): string;
175
+ /** Step directory within a run, workspace-root-relative. */
176
+ export declare function runStepDir(runId: string, stepId: string): string;
177
+ /** Step subdirectory for a specific artifact type. */
178
+ export type StepSubdirType = "scripts" | "output" | "figures" | "logs" | "notebooks";
179
+ export declare function stepSubdir(stepBase: string, type: StepSubdirType): string;
180
+ /** Report output directory, workspace-root-relative. */
181
+ export declare function reportDir(reportId: string): string;
182
+ /** All standard subdirectory types for a step. */
183
+ export declare const STEP_SUBDIRS: readonly StepSubdirType[];
184
+ /** Get all subdirectory paths for a step. */
185
+ export declare function allStepSubdirs(stepBase: string): string[];