@inflexa-ai/harness 0.45.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -1,82 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `ask` is the per-turn seam an embedder binds: a conversation tool's `ctx.ask`
|
|
7
|
-
* pauses on it. The database is the single source of truth for ask state — `ask`
|
|
8
|
-
* inserts a `pending` ledger row, emits the `data-ask` part, and polls that row to
|
|
9
|
-
* a terminal status; there is no in-memory resolver map. `answer` is one guarded
|
|
10
|
-
* write. See the poll site below for why.
|
|
2
|
+
* The tool-approval gateway: the ask ledger over the Postgres pool of an
|
|
3
|
+
* embedder. A turn workflow raises an ask under a known id and waits for the
|
|
4
|
+
* answer itself. `answer` is one guarded write, and `pending` and the boot-time
|
|
5
|
+
* `sweepExpired` read and expire the ledger.
|
|
11
6
|
*/
|
|
12
7
|
import { unwrapOrThrow } from "../../lib/result.js";
|
|
13
|
-
import {
|
|
14
|
-
import { answerAsk, insertGrantedAsk, insertPendingAsk, markAborted, selectAskResolution, selectGrant, selectPending, sweepExpired as sweepExpiredRows, } from "./queries.js";
|
|
15
|
-
import { uuidv7 } from "./uuidv7.js";
|
|
16
|
-
/** Fixed poll cadence — imperceptible against human decision speed, low chatter. */
|
|
17
|
-
const POLL_INTERVAL_MS = 200;
|
|
8
|
+
import { answerAsk, insertGrantedAsk, insertPendingAsk, markAborted, markExpired, selectGrant, selectPending, sweepExpired as sweepExpiredRows, } from "./queries.js";
|
|
18
9
|
/**
|
|
19
10
|
* Pending rows older than this are treated as orphans of a dead process. Far
|
|
20
11
|
* beyond any plausible live turn, so a boot sweep during a rolling deployment
|
|
21
|
-
* cannot expire an ask another pod is still
|
|
12
|
+
* cannot expire an ask another pod is still waiting on.
|
|
22
13
|
*/
|
|
23
14
|
export const DEFAULT_SWEEP_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
24
15
|
export function createAskGateway(deps) {
|
|
25
16
|
const { pool } = deps;
|
|
26
|
-
async function
|
|
27
|
-
const id = uuidv7();
|
|
17
|
+
async function raise(id, request, scope) {
|
|
28
18
|
const now = new Date().toISOString();
|
|
29
19
|
const row = {
|
|
30
20
|
id,
|
|
31
|
-
analysisId:
|
|
32
|
-
userId:
|
|
33
|
-
threadId:
|
|
21
|
+
analysisId: scope.analysisId,
|
|
22
|
+
userId: scope.userId,
|
|
23
|
+
threadId: scope.threadId ?? null,
|
|
34
24
|
title: request.title,
|
|
35
25
|
command: request.command,
|
|
36
26
|
detail: request.detail ?? null,
|
|
37
27
|
grantKey: request.grantKey ?? null,
|
|
38
28
|
createdAt: now,
|
|
39
29
|
};
|
|
40
|
-
|
|
41
|
-
// unless the tool supplied a broader key — short-circuits the prompt: record
|
|
42
|
-
// the invocation as `resolved` for the audit trail and return without pausing.
|
|
43
|
-
// The one part it emits is already settled, so no surface prompts, and the
|
|
44
|
-
// transcript still shows that a standing grant approved the call.
|
|
45
|
-
if (unwrapOrThrow(await selectGrant(pool, ctx.analysisId, ctx.userId, request.grantKey ?? request.command))) {
|
|
30
|
+
if (unwrapOrThrow(await selectGrant(pool, scope.analysisId, scope.userId, request.grantKey ?? request.command))) {
|
|
46
31
|
unwrapOrThrow(await insertGrantedAsk(pool, row, now));
|
|
47
|
-
|
|
48
|
-
return { kind: "always" };
|
|
32
|
+
return "granted";
|
|
49
33
|
}
|
|
50
34
|
unwrapOrThrow(await insertPendingAsk(pool, row));
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
// and can be erased later with LISTEN/NOTIFY.
|
|
59
|
-
// TODO(refine): these ask records might move into provenance later.
|
|
60
|
-
for (;;) {
|
|
61
|
-
if (ctx.signal.aborted) {
|
|
62
|
-
unwrapOrThrow(await markAborted(pool, id, new Date().toISOString()));
|
|
63
|
-
await emitAskPart(ctx.emit, id, request, "aborted");
|
|
64
|
-
throwAbort(ctx.signal);
|
|
65
|
-
}
|
|
66
|
-
const resolution = unwrapOrThrow(await selectAskResolution(pool, id));
|
|
67
|
-
if (resolution === null) {
|
|
68
|
-
// The row vanished out from under the poll — nothing can answer it
|
|
69
|
-
// now, so deny rather than spin forever. Not reachable through the
|
|
70
|
-
// ordinary status machine (rows are only ever updated, never deleted).
|
|
71
|
-
await emitAskPart(ctx.emit, id, request, "expired");
|
|
72
|
-
throw new AskRejectedError("approval request is no longer available");
|
|
73
|
-
}
|
|
74
|
-
if (resolution.status !== "pending") {
|
|
75
|
-
await emitAskPart(ctx.emit, id, request, resolution.status, replyKindOf(resolution.status, resolution.reply));
|
|
76
|
-
return settle(resolution.status, resolution.reply, ctx.signal);
|
|
77
|
-
}
|
|
78
|
-
await sleepUntil(POLL_INTERVAL_MS, ctx.signal);
|
|
79
|
-
}
|
|
35
|
+
return "pending";
|
|
36
|
+
}
|
|
37
|
+
async function expire(id) {
|
|
38
|
+
unwrapOrThrow(await markExpired(pool, id, new Date().toISOString()));
|
|
39
|
+
}
|
|
40
|
+
async function abort(id) {
|
|
41
|
+
unwrapOrThrow(await markAborted(pool, id, new Date().toISOString()));
|
|
80
42
|
}
|
|
81
43
|
async function answer(id, reply) {
|
|
82
44
|
return unwrapOrThrow(await answerAsk(pool, id, reply, new Date().toISOString()));
|
|
@@ -88,79 +50,20 @@ export function createAskGateway(deps) {
|
|
|
88
50
|
const now = Date.now();
|
|
89
51
|
return unwrapOrThrow(await sweepExpiredRows(pool, new Date(now).toISOString(), new Date(now - maxAgeMs).toISOString()));
|
|
90
52
|
}
|
|
91
|
-
return {
|
|
53
|
+
return { raise, expire, abort, answer, pending, sweepExpired };
|
|
92
54
|
}
|
|
93
|
-
/**
|
|
94
|
-
function
|
|
95
|
-
|
|
55
|
+
/** The `data-ask` part of an ask in one status. Each status of one ask reconciles under the same id. */
|
|
56
|
+
export function askPartOf(id, request, status, reply) {
|
|
57
|
+
const part = {
|
|
96
58
|
type: "data-ask",
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* The kind of reply the terminal part shows: the kind that `settle` acts on for a `resolved` or `rejected` row,
|
|
109
|
-
* and none for any other status. It never reads the feedback of a rejection, which is for the model.
|
|
110
|
-
*/
|
|
111
|
-
function replyKindOf(status, reply) {
|
|
112
|
-
switch (status) {
|
|
113
|
-
case "resolved":
|
|
114
|
-
return approvalOf(reply).kind;
|
|
115
|
-
case "rejected":
|
|
116
|
-
return "reject";
|
|
117
|
-
case "expired":
|
|
118
|
-
case "aborted":
|
|
119
|
-
return undefined;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/** The approval that a `resolved` row grants. */
|
|
123
|
-
function approvalOf(reply) {
|
|
124
|
-
// Only `once` / `always` reach `resolved`; guard the JSONB round-trip and
|
|
125
|
-
// default to the narrowest approval if a malformed reply ever slipped in.
|
|
126
|
-
return reply && (reply.kind === "once" || reply.kind === "always") ? reply : { kind: "once" };
|
|
127
|
-
}
|
|
128
|
-
/** Resolve an approval or throw the terminal denial the ledger recorded. */
|
|
129
|
-
function settle(status, reply, signal) {
|
|
130
|
-
switch (status) {
|
|
131
|
-
case "resolved":
|
|
132
|
-
return approvalOf(reply);
|
|
133
|
-
case "rejected":
|
|
134
|
-
throw new AskRejectedError(reply && reply.kind === "reject" ? reply.feedback : undefined);
|
|
135
|
-
case "expired":
|
|
136
|
-
throw new AskRejectedError("approval request expired unanswered");
|
|
137
|
-
case "aborted":
|
|
138
|
-
throwAbort(signal);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Re-raise the turn's cancellation verbatim — `signal.reason` IS the loop's own
|
|
143
|
-
* cancellation, so its existing turn-abort path recognizes it unchanged. The
|
|
144
|
-
* fallback covers a signal aborted with no explicit reason.
|
|
145
|
-
*/
|
|
146
|
-
function throwAbort(signal) {
|
|
147
|
-
throw signal.reason ?? new DOMException("The operation was aborted", "AbortError");
|
|
148
|
-
}
|
|
149
|
-
/** Delay `ms`, resolving early if `signal` aborts, leaving no dangling timer. */
|
|
150
|
-
function sleepUntil(ms, signal) {
|
|
151
|
-
return new Promise((resolve) => {
|
|
152
|
-
if (signal.aborted) {
|
|
153
|
-
resolve();
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const onAbort = () => {
|
|
157
|
-
clearTimeout(timer);
|
|
158
|
-
resolve();
|
|
159
|
-
};
|
|
160
|
-
const timer = setTimeout(() => {
|
|
161
|
-
signal.removeEventListener("abort", onAbort);
|
|
162
|
-
resolve();
|
|
163
|
-
}, ms);
|
|
164
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
165
|
-
});
|
|
59
|
+
id,
|
|
60
|
+
title: request.title,
|
|
61
|
+
command: request.command,
|
|
62
|
+
status,
|
|
63
|
+
};
|
|
64
|
+
if (request.detail !== undefined)
|
|
65
|
+
part.detail = request.detail;
|
|
66
|
+
if (reply !== undefined)
|
|
67
|
+
part.reply = reply;
|
|
68
|
+
return part;
|
|
166
69
|
}
|
|
@@ -18,7 +18,7 @@ export type AskStatus = "pending" | "resolved" | "rejected" | "aborted" | "expir
|
|
|
18
18
|
/** The discriminated outcome of an out-of-band `answer` against a ledger row. */
|
|
19
19
|
export type AnswerOutcome = "applied" | "not_found" | "already_terminal";
|
|
20
20
|
/** An unresolved ask, as enumerated by `pending()`. */
|
|
21
|
-
export
|
|
21
|
+
export type PendingAsk = {
|
|
22
22
|
readonly id: string;
|
|
23
23
|
readonly analysisId: string;
|
|
24
24
|
readonly userId: string;
|
|
@@ -27,14 +27,9 @@ export interface PendingAsk {
|
|
|
27
27
|
readonly command: string;
|
|
28
28
|
readonly detail: string | null;
|
|
29
29
|
readonly createdAt: string;
|
|
30
|
-
}
|
|
31
|
-
/** The status + recorded reply a poll reads to observe a decision. */
|
|
32
|
-
export interface AskResolution {
|
|
33
|
-
readonly status: AskStatus;
|
|
34
|
-
readonly reply: AskReply | null;
|
|
35
|
-
}
|
|
30
|
+
};
|
|
36
31
|
/** Column payload shared by the pending insert and the grant short-circuit insert. */
|
|
37
|
-
export
|
|
32
|
+
export type AskRow = {
|
|
38
33
|
readonly id: string;
|
|
39
34
|
readonly analysisId: string;
|
|
40
35
|
readonly userId: string;
|
|
@@ -45,7 +40,7 @@ export interface AskRow {
|
|
|
45
40
|
/** Grant key an `always` keys its standing grant under; `null` falls back to `command`. */
|
|
46
41
|
readonly grantKey: string | null;
|
|
47
42
|
readonly createdAt: string;
|
|
48
|
-
}
|
|
43
|
+
};
|
|
49
44
|
/** Insert a fresh `pending` ask before its decision is awaited. */
|
|
50
45
|
export declare function insertPendingAsk(querier: Querier, row: AskRow): ResultAsync<void, DbError>;
|
|
51
46
|
/**
|
|
@@ -56,8 +51,8 @@ export declare function insertPendingAsk(querier: Querier, row: AskRow): ResultA
|
|
|
56
51
|
export declare function insertGrantedAsk(querier: Querier, row: AskRow, resolvedAt: string): ResultAsync<void, DbError>;
|
|
57
52
|
/** Does a standing grant cover `(analysisId, userId, grantKey)` for this person? */
|
|
58
53
|
export declare function selectGrant(querier: Querier, analysisId: string, userId: string, grantKey: string): ResultAsync<boolean, DbError>;
|
|
59
|
-
/**
|
|
60
|
-
export declare function
|
|
54
|
+
/** Mark a still-`pending` row `expired`. A row that an answer settled does not change. */
|
|
55
|
+
export declare function markExpired(querier: Querier, id: string, resolvedAt: string): ResultAsync<void, DbError>;
|
|
61
56
|
/**
|
|
62
57
|
* Mark a still-`pending` row `aborted`. Guarded by `WHERE status = 'pending'`, so
|
|
63
58
|
* a row already answered out of band is left untouched.
|
|
@@ -9,14 +9,29 @@
|
|
|
9
9
|
* seam boundary.
|
|
10
10
|
*/
|
|
11
11
|
import { okAsync } from "neverthrow";
|
|
12
|
+
import { z } from "zod";
|
|
12
13
|
import { tryMutation, tryQuery, withTransaction } from "../../lib/db-result.js";
|
|
14
|
+
/** The columns of the pending enumeration, as the SELECT spells them. */
|
|
15
|
+
const PendingAskRowSchema = z.object({
|
|
16
|
+
id: z.string(),
|
|
17
|
+
analysis_id: z.string(),
|
|
18
|
+
user_id: z.string(),
|
|
19
|
+
thread_id: z.string().nullable(),
|
|
20
|
+
title: z.string(),
|
|
21
|
+
command: z.string(),
|
|
22
|
+
detail: z.string().nullable(),
|
|
23
|
+
created_at: z.string(),
|
|
24
|
+
});
|
|
25
|
+
/** The columns the guarded UPDATE returns for the standing-grant insert. */
|
|
26
|
+
const GrantedRowSchema = z.object({ analysis_id: z.string(), user_id: z.string(), grant_key: z.string() });
|
|
13
27
|
/** Insert a fresh `pending` ask before its decision is awaited. */
|
|
14
28
|
export function insertPendingAsk(querier, row) {
|
|
15
29
|
return tryMutation("asks.insertPending", async () => {
|
|
16
30
|
await querier.query({
|
|
17
31
|
text: `INSERT INTO cortex_asks
|
|
18
32
|
(id, analysis_id, user_id, thread_id, title, command, detail, grant_key, status, created_at)
|
|
19
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'pending', $9)
|
|
33
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'pending', $9)
|
|
34
|
+
ON CONFLICT (id) DO NOTHING`,
|
|
20
35
|
values: [row.id, row.analysisId, row.userId, row.threadId, row.title, row.command, row.detail, row.grantKey ?? row.command, row.createdAt],
|
|
21
36
|
});
|
|
22
37
|
});
|
|
@@ -31,7 +46,8 @@ export function insertGrantedAsk(querier, row, resolvedAt) {
|
|
|
31
46
|
await querier.query({
|
|
32
47
|
text: `INSERT INTO cortex_asks
|
|
33
48
|
(id, analysis_id, user_id, thread_id, title, command, detail, grant_key, status, reply, created_at, resolved_at)
|
|
34
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'resolved', $9::jsonb, $10, $11)
|
|
49
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'resolved', $9::jsonb, $10, $11)
|
|
50
|
+
ON CONFLICT (id) DO NOTHING`,
|
|
35
51
|
values: [
|
|
36
52
|
row.id,
|
|
37
53
|
row.analysisId,
|
|
@@ -58,17 +74,13 @@ export function selectGrant(querier, analysisId, userId, grantKey) {
|
|
|
58
74
|
return (result.rowCount ?? 0) > 0;
|
|
59
75
|
});
|
|
60
76
|
}
|
|
61
|
-
/**
|
|
62
|
-
export function
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
text: `
|
|
66
|
-
values: [id],
|
|
77
|
+
/** Mark a still-`pending` row `expired`. A row that an answer settled does not change. */
|
|
78
|
+
export function markExpired(querier, id, resolvedAt) {
|
|
79
|
+
return tryMutation("asks.markExpired", async () => {
|
|
80
|
+
await querier.query({
|
|
81
|
+
text: `UPDATE cortex_asks SET status = 'expired', resolved_at = $2 WHERE id = $1 AND status = 'pending'`,
|
|
82
|
+
values: [id, resolvedAt],
|
|
67
83
|
});
|
|
68
|
-
const row = result.rows[0];
|
|
69
|
-
if (!row)
|
|
70
|
-
return null;
|
|
71
|
-
return { status: row.status, reply: row.reply ?? null };
|
|
72
84
|
});
|
|
73
85
|
}
|
|
74
86
|
/**
|
|
@@ -90,16 +102,19 @@ export function selectPending(querier) {
|
|
|
90
102
|
text: `SELECT id, analysis_id, COALESCE(user_id, '') AS user_id, thread_id, title, command, detail, created_at
|
|
91
103
|
FROM cortex_asks WHERE status = 'pending' ORDER BY created_at ASC`,
|
|
92
104
|
});
|
|
93
|
-
return result.rows.map((row) =>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
return result.rows.map((row) => {
|
|
106
|
+
const parsed = PendingAskRowSchema.parse(row);
|
|
107
|
+
return {
|
|
108
|
+
id: parsed.id,
|
|
109
|
+
analysisId: parsed.analysis_id,
|
|
110
|
+
userId: parsed.user_id,
|
|
111
|
+
threadId: parsed.thread_id ?? null,
|
|
112
|
+
title: parsed.title,
|
|
113
|
+
command: parsed.command,
|
|
114
|
+
detail: parsed.detail ?? null,
|
|
115
|
+
createdAt: parsed.created_at,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
103
118
|
});
|
|
104
119
|
}
|
|
105
120
|
/**
|
|
@@ -142,14 +157,13 @@ export function answerAsk(pool, id, reply, now) {
|
|
|
142
157
|
return discriminateMiss(client, id);
|
|
143
158
|
if (reply.kind !== "always")
|
|
144
159
|
return okAsync("applied");
|
|
145
|
-
// The
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
// `
|
|
150
|
-
// row that predates the column, and that identity matches no real user.
|
|
151
|
-
const granted = updated.rows[0];
|
|
160
|
+
// The COALESCEs make every returned field non-null: each insert writes
|
|
161
|
+
// grant_key (command when the tool supplied none) and user_id (empty
|
|
162
|
+
// string when the row predates the column), so the row schema below can
|
|
163
|
+
// demand all three strings; a row that misses one is refused through the
|
|
164
|
+
// transaction's `DbError` channel.
|
|
152
165
|
return tryMutation("asks.answer:grant", async () => {
|
|
166
|
+
const granted = GrantedRowSchema.parse(updated.rows[0]);
|
|
153
167
|
await client.query({
|
|
154
168
|
text: `INSERT INTO cortex_ask_grants (analysis_id, user_id, grant_key, created_at)
|
|
155
169
|
VALUES ($1, $2, $3, $4) ON CONFLICT (analysis_id, user_id, grant_key) DO NOTHING`,
|
|
@@ -18,8 +18,8 @@ export function uuidv7() {
|
|
|
18
18
|
// in 48 bits well past the year 10000, so writeUIntBE never overflows.
|
|
19
19
|
bytes.writeUIntBE(Date.now(), 0, 6);
|
|
20
20
|
// Version 7 in the high nibble of byte 6; variant 0b10 in the top bits of byte 8.
|
|
21
|
-
bytes
|
|
22
|
-
bytes
|
|
21
|
+
bytes.writeUInt8((bytes.readUInt8(6) & 0x0f) | 0x70, 6);
|
|
22
|
+
bytes.writeUInt8((bytes.readUInt8(8) & 0x3f) | 0x80, 8);
|
|
23
23
|
const hex = bytes.toString("hex");
|
|
24
24
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
25
25
|
}
|
|
@@ -28,11 +28,11 @@ export type ChemblOutput = {
|
|
|
28
28
|
readonly targets: ChemblTarget[];
|
|
29
29
|
};
|
|
30
30
|
export declare const chemblTool: import("../define-tool.js").Tool<{
|
|
31
|
-
action: "
|
|
31
|
+
action: "bioactivity" | "compounds" | "drug" | "mechanism" | "targets";
|
|
32
32
|
query?: string | undefined;
|
|
33
|
-
searchType?: "
|
|
33
|
+
searchType?: "compound" | "smiles" | "target" | undefined;
|
|
34
34
|
chemblId?: string | undefined;
|
|
35
|
-
idType?: "
|
|
35
|
+
idType?: "assay" | "compound" | "target" | undefined;
|
|
36
36
|
activityType?: string | undefined;
|
|
37
37
|
limit?: number | undefined;
|
|
38
38
|
}, ChemblOutput>;
|
package/dist/tools/bio/chembl.js
CHANGED
|
@@ -131,14 +131,24 @@ export const chemblTool = defineTool({
|
|
|
131
131
|
execute: async ({ action, query, searchType, chemblId, idType, activityType, limit }) => {
|
|
132
132
|
switch (action) {
|
|
133
133
|
case "compounds":
|
|
134
|
+
if (query === undefined || searchType === undefined)
|
|
135
|
+
throw new Error("compounds requires query and searchType");
|
|
134
136
|
return ok({ compounds: await searchCompounds(query, searchType, limit ?? LIMITS.wideDefault) });
|
|
135
137
|
case "drug":
|
|
138
|
+
if (query === undefined)
|
|
139
|
+
throw new Error("drug requires query");
|
|
136
140
|
return ok({ drugs: await getDrugInfo(query, limit ?? LIMITS.narrowDefault) });
|
|
137
141
|
case "mechanism":
|
|
142
|
+
if (chemblId === undefined)
|
|
143
|
+
throw new Error("mechanism requires chemblId");
|
|
138
144
|
return ok({ mechanisms: await getMechanism(chemblId) });
|
|
139
145
|
case "bioactivity":
|
|
146
|
+
if (chemblId === undefined || idType === undefined)
|
|
147
|
+
throw new Error("bioactivity requires chemblId and idType");
|
|
140
148
|
return ok({ activities: await getBioactivity(chemblId, idType, { activityType, limit: limit ?? LIMITS.wideDefault }) });
|
|
141
149
|
case "targets":
|
|
150
|
+
if (query === undefined)
|
|
151
|
+
throw new Error("targets requires query");
|
|
142
152
|
return ok({ targets: await searchTargets(query, limit ?? LIMITS.narrowDefault) });
|
|
143
153
|
}
|
|
144
154
|
},
|
|
@@ -14,7 +14,31 @@
|
|
|
14
14
|
* dataset (a 'toxval' under dataset 'exposure' would otherwise silently fetch
|
|
15
15
|
* nothing) and a limit above the dataset's own ceiling.
|
|
16
16
|
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { type Tool } from "../define-tool.js";
|
|
17
19
|
import { type ChemicalDetail, type CtxExposureData, type CtxHazardData, type PropertySummary, type ToxcastBioactivity } from "../lib/ctx-ops.js";
|
|
20
|
+
declare const inputSchema: z.ZodObject<{
|
|
21
|
+
dataset: z.ZodEnum<{
|
|
22
|
+
chemical: "chemical";
|
|
23
|
+
exposure: "exposure";
|
|
24
|
+
hazard: "hazard";
|
|
25
|
+
toxcast: "toxcast";
|
|
26
|
+
}>;
|
|
27
|
+
query: z.ZodString;
|
|
28
|
+
dataType: z.ZodOptional<z.ZodEnum<{
|
|
29
|
+
all: "all";
|
|
30
|
+
cancer: "cancer";
|
|
31
|
+
"functional-use": "functional-use";
|
|
32
|
+
genetox: "genetox";
|
|
33
|
+
httk: "httk";
|
|
34
|
+
"product-data": "product-data";
|
|
35
|
+
seem: "seem";
|
|
36
|
+
toxval: "toxval";
|
|
37
|
+
}>>;
|
|
38
|
+
activeOnly: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
includeProperties: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
}, z.core.$strip>;
|
|
18
42
|
type ComptoxOutput = {
|
|
19
43
|
found: false;
|
|
20
44
|
query: string;
|
|
@@ -39,12 +63,5 @@ type ComptoxOutput = {
|
|
|
39
63
|
} & CtxExposureData);
|
|
40
64
|
export declare function createComptoxTool(deps: {
|
|
41
65
|
apiKey: string;
|
|
42
|
-
}):
|
|
43
|
-
dataset: "toxcast" | "hazard" | "chemical" | "exposure";
|
|
44
|
-
query: string;
|
|
45
|
-
dataType?: "toxval" | "genetox" | "cancer" | "all" | "seem" | "httk" | "functional-use" | "product-data" | undefined;
|
|
46
|
-
activeOnly?: boolean | undefined;
|
|
47
|
-
includeProperties?: boolean | undefined;
|
|
48
|
-
limit?: number | undefined;
|
|
49
|
-
}, ComptoxOutput>;
|
|
66
|
+
}): Tool<z.infer<typeof inputSchema>, ComptoxOutput>;
|
|
50
67
|
export {};
|
|
@@ -21,11 +21,13 @@ import { fetchCtxChemicalDetail, fetchCtxChemicalProperties, fetchCtxExposureDat
|
|
|
21
21
|
import { getEpaCcteHeaders } from "../lib/toxcast-config.js";
|
|
22
22
|
const HAZARD_DATA_TYPES = ["toxval", "genetox", "cancer", "all"];
|
|
23
23
|
const EXPOSURE_DATA_TYPES = ["seem", "httk", "functional-use", "product-data", "all"];
|
|
24
|
+
const HAZARD_DATA_TYPE_IDS = new Set(HAZARD_DATA_TYPES);
|
|
25
|
+
const EXPOSURE_DATA_TYPE_IDS = new Set(EXPOSURE_DATA_TYPES);
|
|
24
26
|
function isHazardDataType(value) {
|
|
25
|
-
return value !== undefined &&
|
|
27
|
+
return value !== undefined && HAZARD_DATA_TYPE_IDS.has(value);
|
|
26
28
|
}
|
|
27
29
|
function isExposureDataType(value) {
|
|
28
|
-
return value !== undefined &&
|
|
30
|
+
return value !== undefined && EXPOSURE_DATA_TYPE_IDS.has(value);
|
|
29
31
|
}
|
|
30
32
|
const inputSchema = z
|
|
31
33
|
.object({
|
|
@@ -16,49 +16,59 @@
|
|
|
16
16
|
* Each source runs independently and reports its own outcome in `perSource`, so
|
|
17
17
|
* a missing DrugBank key degrades that corpus rather than the whole call.
|
|
18
18
|
*/
|
|
19
|
+
import { z } from "zod";
|
|
19
20
|
import type { Logger } from "../../lib/logger.js";
|
|
21
|
+
import { type Tool } from "../define-tool.js";
|
|
20
22
|
import { type DgidbResult } from "../lib/dgidb-client.js";
|
|
21
23
|
import { type PharmgkbAnnotation } from "../lib/pharmgkb-client.js";
|
|
22
24
|
declare const SOURCES: readonly ["dgidb", "drugbank", "pharmgkb"];
|
|
23
25
|
type Source = (typeof SOURCES)[number];
|
|
24
|
-
|
|
26
|
+
type SourceOutcome = {
|
|
25
27
|
source: Source;
|
|
26
28
|
status: "ok" | "no_data" | "unavailable";
|
|
27
29
|
returned: number;
|
|
28
30
|
detail?: string;
|
|
29
|
-
}
|
|
31
|
+
};
|
|
30
32
|
/**
|
|
31
33
|
* A DrugBank record projected for context. `includeDrugRecord` decides whether
|
|
32
34
|
* the description arrives whole or as a preview — a 500-character field across
|
|
33
35
|
* ten records is narrative that a drug-vs-gene question rarely needs.
|
|
34
36
|
*/
|
|
35
|
-
|
|
37
|
+
type ProjectedDrug = {
|
|
36
38
|
drugbankId: string;
|
|
37
39
|
name: string;
|
|
38
40
|
type: string;
|
|
39
41
|
groups: string[];
|
|
40
42
|
description: string;
|
|
41
43
|
proseTruncated: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
+
};
|
|
45
|
+
declare const inputSchema: z.ZodObject<{
|
|
46
|
+
query: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
47
|
+
direction: z.ZodEnum<{
|
|
48
|
+
drug_to_genes: "drug_to_genes";
|
|
49
|
+
gene_to_drugs: "gene_to_drugs";
|
|
50
|
+
}>;
|
|
51
|
+
sources: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
52
|
+
dgidb: "dgidb";
|
|
53
|
+
drugbank: "drugbank";
|
|
54
|
+
pharmgkb: "pharmgkb";
|
|
55
|
+
}>>>;
|
|
56
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
interactionTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
58
|
+
sourceDbs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
59
|
+
minSources: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
includeAttributes: z.ZodOptional<z.ZodBoolean>;
|
|
61
|
+
includeDrugRecord: z.ZodOptional<z.ZodBoolean>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
type DrugGeneOutput = {
|
|
44
64
|
direction: "gene_to_drugs" | "drug_to_genes";
|
|
45
65
|
perSource: SourceOutcome[];
|
|
46
66
|
dgidb?: DgidbResult[];
|
|
47
67
|
drugbank?: ProjectedDrug[];
|
|
48
68
|
pharmgkb?: PharmgkbAnnotation[];
|
|
49
|
-
}
|
|
69
|
+
};
|
|
50
70
|
export declare function createDrugGeneInteractionsTool(deps: {
|
|
51
71
|
drugbankApiKey: string;
|
|
52
72
|
logger?: Logger;
|
|
53
|
-
}):
|
|
54
|
-
query: string | string[];
|
|
55
|
-
direction: "gene_to_drugs" | "drug_to_genes";
|
|
56
|
-
sources?: ("dgidb" | "drugbank" | "pharmgkb")[] | undefined;
|
|
57
|
-
limit?: number | undefined;
|
|
58
|
-
interactionTypes?: string[] | undefined;
|
|
59
|
-
sourceDbs?: string[] | undefined;
|
|
60
|
-
minSources?: number | undefined;
|
|
61
|
-
includeAttributes?: boolean | undefined;
|
|
62
|
-
includeDrugRecord?: boolean | undefined;
|
|
63
|
-
}, DrugGeneOutput>;
|
|
73
|
+
}): Tool<z.infer<typeof inputSchema>, DrugGeneOutput>;
|
|
64
74
|
export {};
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
* Each source runs independently and reports its own outcome in `perSource`, so
|
|
17
17
|
* a missing DrugBank key degrades that corpus rather than the whole call.
|
|
18
18
|
*/
|
|
19
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
20
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
19
21
|
import { ok } from "neverthrow";
|
|
22
|
+
import { presentFirst } from "../../lib/present.js";
|
|
20
23
|
import { z } from "zod";
|
|
21
24
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
22
25
|
import { defineTool } from "../define-tool.js";
|
|
@@ -94,7 +97,7 @@ async function runSource(source, fetch) {
|
|
|
94
97
|
}
|
|
95
98
|
catch (error) {
|
|
96
99
|
return {
|
|
97
|
-
outcome: { source, status: "unavailable", returned: 0, detail: error
|
|
100
|
+
outcome: { source, status: "unavailable", returned: 0, detail: errorMessageOf(error) ?? textOf(error) },
|
|
98
101
|
records: [],
|
|
99
102
|
};
|
|
100
103
|
}
|
|
@@ -126,30 +129,30 @@ export function createDrugGeneInteractionsTool(deps) {
|
|
|
126
129
|
selected.includes("dgidb")
|
|
127
130
|
? runSource("dgidb", () => searchDgidb(inputs, isGeneSide ? "gene" : "drug", {
|
|
128
131
|
limit,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
interactionTypes: input.interactionTypes ? input.interactionTypes : undefined,
|
|
133
|
+
sourceDbs: input.sourceDbs ? input.sourceDbs : undefined,
|
|
134
|
+
minSources: input.minSources,
|
|
135
|
+
includeAttributes: input.includeAttributes,
|
|
133
136
|
}, (errors) => logger.warn("dgidb partial errors alongside data", { errors })))
|
|
134
137
|
: null,
|
|
135
138
|
selected.includes("drugbank")
|
|
136
139
|
? runSource("drugbank", async () => {
|
|
137
140
|
if (!deps.drugbankApiKey)
|
|
138
141
|
throw new Error("DRUGBANK_API_KEY is not configured");
|
|
139
|
-
const drugs = await searchDrugbank(deps.drugbankApiKey, inputs
|
|
142
|
+
const drugs = await searchDrugbank(deps.drugbankApiKey, presentFirst(inputs, "the first input"), isGeneSide ? "target" : "drug", limit);
|
|
140
143
|
return drugs.map((d) => projectDrug(d, input.includeDrugRecord ?? false));
|
|
141
144
|
})
|
|
142
145
|
: null,
|
|
143
146
|
selected.includes("pharmgkb")
|
|
144
147
|
? runSource("pharmgkb", async () => {
|
|
145
|
-
const res = await searchPharmgkb(inputs
|
|
148
|
+
const res = await searchPharmgkb(presentFirst(inputs, "the first input"), isGeneSide ? "gene" : "drug", limit);
|
|
146
149
|
return res.annotations;
|
|
147
150
|
})
|
|
148
151
|
: null,
|
|
149
152
|
]);
|
|
150
153
|
// DrugBank and PharmGKB take one identifier per call; say so on the
|
|
151
154
|
// outcome rather than letting the extra inputs vanish silently.
|
|
152
|
-
const skipped = inputs.length > 1 ? `read only '${inputs[0]}' — this source takes one identifier per call` : "";
|
|
155
|
+
const skipped = inputs.length > 1 ? `read only '${String(inputs[0])}' — this source takes one identifier per call` : "";
|
|
153
156
|
const noteSkipped = (outcome) => {
|
|
154
157
|
const detail = [outcome.detail, skipped].filter(Boolean).join("; ");
|
|
155
158
|
return detail ? { ...outcome, detail } : outcome;
|