@inflexa-ai/harness 0.45.1 → 0.46.2
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 +306 -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 +32 -7
- package/dist/lib/hooks.js +22 -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 +160 -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 +39 -0
- package/dist/loop/turn-credentials.js +90 -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/request-headers.js +12 -3
- 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 +62 -0
- package/dist/testing.js +101 -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
|
@@ -84,7 +84,7 @@ function mapInteraction(raw, perspective, inputSide, includeAttributes) {
|
|
|
84
84
|
const pmids = (raw.publications ?? []).map((p) => (p.pmid != null ? String(p.pmid) : "")).filter(Boolean);
|
|
85
85
|
const types = (raw.interactionTypes ?? []).map((t) => ({
|
|
86
86
|
type: t.type ?? "",
|
|
87
|
-
|
|
87
|
+
directionality: t.directionality ?? undefined,
|
|
88
88
|
}));
|
|
89
89
|
const geneName = perspective === "gene" ? (inputSide.geneName ?? "") : (raw.gene?.name ?? "");
|
|
90
90
|
const drugName = perspective === "drug" ? (inputSide.drugName ?? "") : (raw.drug?.name ?? "");
|
|
@@ -92,21 +92,19 @@ function mapInteraction(raw, perspective, inputSide, includeAttributes) {
|
|
|
92
92
|
return {
|
|
93
93
|
geneName,
|
|
94
94
|
drugName,
|
|
95
|
-
|
|
95
|
+
drugConceptId,
|
|
96
96
|
interactionTypes: types,
|
|
97
|
-
|
|
97
|
+
interactionScore: raw.interactionScore ?? undefined,
|
|
98
98
|
sourceCount: sources.length,
|
|
99
99
|
sources,
|
|
100
100
|
publicationCount: pmids.length,
|
|
101
101
|
pmids: pmids.slice(0, MAX_PMIDS),
|
|
102
|
-
|
|
103
|
-
? {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
: {}),
|
|
102
|
+
attributes: includeAttributes
|
|
103
|
+
? (raw.interactionAttributes ?? []).slice(0, MAX_ATTRIBUTES).map((a) => ({
|
|
104
|
+
name: a.name ?? "",
|
|
105
|
+
value: (a.value ?? "").slice(0, MAX_ATTRIBUTE_CHARS),
|
|
106
|
+
}))
|
|
107
|
+
: undefined,
|
|
110
108
|
};
|
|
111
109
|
}
|
|
112
110
|
function applyFilters(interactions, filters) {
|
|
@@ -144,7 +142,7 @@ export async function searchDgidb(inputs, searchType, filters = {}, onPartialErr
|
|
|
144
142
|
if (res.isErr())
|
|
145
143
|
throw new Error(describeApiError(res.error));
|
|
146
144
|
const body = res.value;
|
|
147
|
-
if (!body
|
|
145
|
+
if (!body.data)
|
|
148
146
|
throw new Error("DGIdb returned no data");
|
|
149
147
|
if (body.errors?.length)
|
|
150
148
|
onPartialErrors?.(body.errors.slice(0, 3));
|
|
@@ -122,16 +122,16 @@ export type DisgenetSearchType = "gene" | "disease";
|
|
|
122
122
|
*/
|
|
123
123
|
export declare const DISGENET_SOURCES: readonly ["ALL", "BIOBANK", "CHEMBL", "CLINICALTRIALS", "CLINGEN", "CLINPGX", "CLINVAR", "CURATED", "FINNGEN", "GENCC", "GWASCAT", "HPO", "INFERRED", "MGD_HUMAN", "MGD_MOUSE", "MODELS", "ORPHANET", "PHEWASCAT", "PSYGENET", "RGD_HUMAN", "RGD_RAT", "TEXTMINING_HUMAN", "TEXTMINING_MODELS", "UKBIOBANK", "UNIPROT"];
|
|
124
124
|
export type DisgenetSource = (typeof DISGENET_SOURCES)[number];
|
|
125
|
-
export
|
|
125
|
+
export type DisgenetSearchOptions = {
|
|
126
126
|
minScore?: number;
|
|
127
127
|
source?: DisgenetSource;
|
|
128
128
|
limit?: number;
|
|
129
|
-
}
|
|
129
|
+
};
|
|
130
130
|
/** The result of one GDA query: the records of the first page, and the count of the whole query. */
|
|
131
|
-
export
|
|
131
|
+
export type DisgenetSearchResult = {
|
|
132
132
|
records: Gda[];
|
|
133
133
|
totalFound: number;
|
|
134
|
-
}
|
|
134
|
+
};
|
|
135
135
|
/**
|
|
136
136
|
* Gene-disease associations for a gene symbol or for a disease.
|
|
137
137
|
*
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* `.optional()`.
|
|
14
14
|
*/
|
|
15
15
|
import { z } from "zod";
|
|
16
|
-
export
|
|
16
|
+
export type EmaReferral = {
|
|
17
17
|
category: string;
|
|
18
18
|
referralName: string;
|
|
19
19
|
inn: string;
|
|
@@ -33,7 +33,7 @@ export interface EmaReferral {
|
|
|
33
33
|
firstPublishedDate: string;
|
|
34
34
|
lastUpdatedDate: string;
|
|
35
35
|
referralUrl: string;
|
|
36
|
-
}
|
|
36
|
+
};
|
|
37
37
|
/** The catalogue file. It is exported so that the golden-fixture table drives it. */
|
|
38
38
|
export declare const ReferralFileSchema: z.ZodObject<{
|
|
39
39
|
meta: z.ZodOptional<z.ZodObject<{
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* an explicit `null`. Thus a maybe-absent field carries `.optional()`, not
|
|
8
8
|
* `.nullable()`.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export type GeneInfo = {
|
|
11
11
|
symbol: string;
|
|
12
12
|
id: string;
|
|
13
13
|
displayName: string;
|
|
@@ -18,10 +18,10 @@ export interface GeneInfo {
|
|
|
18
18
|
strand: number;
|
|
19
19
|
assemblyName: string;
|
|
20
20
|
seqRegionName: string;
|
|
21
|
-
}
|
|
22
|
-
export
|
|
21
|
+
};
|
|
22
|
+
export type LookupOptions = {
|
|
23
23
|
species?: string;
|
|
24
|
-
}
|
|
24
|
+
};
|
|
25
25
|
/**
|
|
26
26
|
* Look up genes by symbol. Gene-level only: `RawGeneSchema`/`mapGene` model the
|
|
27
27
|
* gene record itself, so there is no transcript or exon detail to ask for.
|
|
@@ -48,15 +48,16 @@ function mapGene(symbol, raw) {
|
|
|
48
48
|
*/
|
|
49
49
|
export async function lookupGenes(symbols, options = {}) {
|
|
50
50
|
const species = options.species ?? "homo_sapiens";
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const [singleSymbol] = symbols;
|
|
52
|
+
if (symbols.length === 1 && singleSymbol !== undefined) {
|
|
53
|
+
const result = await apiFetchValidated(`${ENSEMBL_BASE}/lookup/symbol/${species}/${singleSymbol}`, RawGeneSchema, { headers: HEADERS });
|
|
53
54
|
if (result.isErr()) {
|
|
54
55
|
if (result.error.type === "http_status" && result.error.status === 400) {
|
|
55
|
-
return { genes: [], notFound: [
|
|
56
|
+
return { genes: [], notFound: [singleSymbol] };
|
|
56
57
|
}
|
|
57
58
|
throw new Error(describeApiError(result.error));
|
|
58
59
|
}
|
|
59
|
-
return { genes: [mapGene(
|
|
60
|
+
return { genes: [mapGene(singleSymbol, result.value)], notFound: [] };
|
|
60
61
|
}
|
|
61
62
|
const result = await apiFetchValidated(`${ENSEMBL_BASE}/lookup/symbol/${species}`, z.record(z.string(), RawGeneSchema), {
|
|
62
63
|
method: "POST",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* only when the projection that the request named excludes it.
|
|
12
12
|
*/
|
|
13
13
|
import { z } from "zod";
|
|
14
|
-
export
|
|
14
|
+
export type GwasAssociation = {
|
|
15
15
|
rsId: string;
|
|
16
16
|
pValue: number;
|
|
17
17
|
pValueMantissa: number;
|
|
@@ -25,7 +25,7 @@ export interface GwasAssociation {
|
|
|
25
25
|
studyAccession: string;
|
|
26
26
|
pubmedId: string;
|
|
27
27
|
sampleSize: string;
|
|
28
|
-
}
|
|
28
|
+
};
|
|
29
29
|
export type GwasSearchType = "gene" | "trait" | "variant" | "study";
|
|
30
30
|
declare const RawGwasAssociationSchema: z.ZodObject<{
|
|
31
31
|
_snpRsId: z.ZodOptional<z.ZodString>;
|
|
@@ -113,10 +113,10 @@ export declare const GwasSnpSearchResponseSchema: z.ZodObject<{
|
|
|
113
113
|
}, z.core.$strip>>;
|
|
114
114
|
}, z.core.$strip>;
|
|
115
115
|
export declare function mapAssociation(a: RawGwasAssociation): GwasAssociation;
|
|
116
|
-
export
|
|
116
|
+
export type GwasSearchOptions = {
|
|
117
117
|
pValueThreshold?: number;
|
|
118
118
|
limit?: number;
|
|
119
|
-
}
|
|
119
|
+
};
|
|
120
120
|
export declare function searchGwasCatalog(query: string, searchType: GwasSearchType, options?: GwasSearchOptions): Promise<{
|
|
121
121
|
totalFound: number;
|
|
122
122
|
associations: GwasAssociation[];
|
|
@@ -72,26 +72,26 @@ export const GwasSnpSearchResponseSchema = z.object({
|
|
|
72
72
|
});
|
|
73
73
|
export function mapAssociation(a) {
|
|
74
74
|
const loci = a.loci ?? [];
|
|
75
|
-
const riskAlleles = loci.flatMap((l) => l.strongestRiskAlleles?.map((ra) =>
|
|
76
|
-
const genes = loci.flatMap((l) => l.authorReportedGenes?.map((g) =>
|
|
77
|
-
const traits = (a.efoTraits ?? []).map((t) =>
|
|
75
|
+
const riskAlleles = loci.flatMap((l) => l.strongestRiskAlleles?.map((ra) => ra.riskAlleleName ?? "") ?? []);
|
|
76
|
+
const genes = loci.flatMap((l) => l.authorReportedGenes?.map((g) => g.geneName ?? "") ?? []);
|
|
77
|
+
const traits = (a.efoTraits ?? []).map((t) => t.trait ?? "");
|
|
78
78
|
const study = a.study ?? {};
|
|
79
79
|
const pMantissa = a.pvalueMantissa ?? 0;
|
|
80
80
|
const pExponent = a.pvalueExponent ?? 0;
|
|
81
81
|
return {
|
|
82
|
-
rsId:
|
|
82
|
+
rsId: a._snpRsId ?? riskAlleles[0]?.split("-")[0] ?? "",
|
|
83
83
|
pValue: pMantissa * Math.pow(10, pExponent),
|
|
84
84
|
pValueMantissa: pMantissa,
|
|
85
85
|
pValueExponent: pExponent,
|
|
86
86
|
riskAllele: riskAlleles.join(", "),
|
|
87
|
-
riskFrequency:
|
|
88
|
-
orBeta:
|
|
89
|
-
ci:
|
|
87
|
+
riskFrequency: a.riskFrequency ?? "",
|
|
88
|
+
orBeta: a.orPerCopyNum ?? a.betaNum ?? null,
|
|
89
|
+
ci: a.range ?? "",
|
|
90
90
|
trait: traits.join("; "),
|
|
91
91
|
mappedGenes: [...new Set(genes)],
|
|
92
|
-
studyAccession:
|
|
93
|
-
pubmedId:
|
|
94
|
-
sampleSize:
|
|
92
|
+
studyAccession: study.accessionId ?? "",
|
|
93
|
+
pubmedId: study.publicationInfo?.pubmedId ?? "",
|
|
94
|
+
sampleSize: study.initialSampleSize ?? "",
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
/** Max SNPs whose associations the 'gene' path walks; each is one request. */
|
|
@@ -104,15 +104,15 @@ export async function searchGwasCatalog(query, searchType, options = {}) {
|
|
|
104
104
|
const snpRes = await apiFetchValidated(url, GwasSnpSearchResponseSchema, { headers: GWAS_HEADERS });
|
|
105
105
|
if (snpRes.isErr())
|
|
106
106
|
throw new Error(describeApiError(snpRes.error));
|
|
107
|
-
const snps = snpRes.value
|
|
107
|
+
const snps = snpRes.value._embedded?.singleNucleotidePolymorphisms ?? [];
|
|
108
108
|
const allAssocs = [];
|
|
109
109
|
for (const snp of snps.slice(0, Math.min(limit, GENE_PATH_MAX_SNPS))) {
|
|
110
|
-
const assocLink = snp
|
|
110
|
+
const assocLink = snp._links?.associations?.href;
|
|
111
111
|
if (!assocLink)
|
|
112
112
|
continue;
|
|
113
113
|
const aRes = await apiFetchValidated(assocLink, GwasEmbeddedSchema, { headers: GWAS_HEADERS });
|
|
114
114
|
if (aRes.isOk()) {
|
|
115
|
-
for (const a of aRes.value
|
|
115
|
+
for (const a of aRes.value._embedded?.associations ?? []) {
|
|
116
116
|
a._snpRsId = snp.rsId;
|
|
117
117
|
allAssocs.push(a);
|
|
118
118
|
}
|
|
@@ -143,10 +143,10 @@ export async function searchGwasCatalog(query, searchType, options = {}) {
|
|
|
143
143
|
});
|
|
144
144
|
if (traitRes.isErr())
|
|
145
145
|
throw new Error(describeApiError(traitRes.error));
|
|
146
|
-
const traitUri = (traitRes.value
|
|
146
|
+
const traitUri = (traitRes.value._embedded?.efoTraits ?? [])[0]?._links?.self?.href;
|
|
147
147
|
if (!traitUri)
|
|
148
148
|
return { totalFound: 0, associations: [] };
|
|
149
|
-
associationsUrl = `${GWAS_BASE}/efoTraits/${traitUri.split("/").pop()}/associations?size=${limit}`;
|
|
149
|
+
associationsUrl = `${GWAS_BASE}/efoTraits/${String(traitUri.split("/").pop())}/associations?size=${limit}`;
|
|
150
150
|
}
|
|
151
151
|
const res = await apiFetchValidated(associationsUrl, GwasEmbeddedSchema, { headers: GWAS_HEADERS });
|
|
152
152
|
if (res.isErr()) {
|
|
@@ -156,8 +156,8 @@ export async function searchGwasCatalog(query, searchType, options = {}) {
|
|
|
156
156
|
return { totalFound: 0, associations: [] };
|
|
157
157
|
throw new Error(describeApiError(res.error));
|
|
158
158
|
}
|
|
159
|
-
const rawAssocs = res.value
|
|
160
|
-
const totalFound = res.value
|
|
159
|
+
const rawAssocs = res.value._embedded?.associations ?? [];
|
|
160
|
+
const totalFound = res.value.page?.totalElements ?? rawAssocs.length;
|
|
161
161
|
const filtered = rawAssocs.filter((a) => (a.pvalueMantissa ?? 1) * Math.pow(10, a.pvalueExponent ?? 0) <= pValueThreshold).slice(0, limit);
|
|
162
162
|
return { totalFound, associations: filtered.map(mapAssociation) };
|
|
163
163
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip each `<...>` run to its first closing bracket. One pass already
|
|
3
|
+
* reaches the fixpoint: a span's interior holds no `>`, so a removal cannot
|
|
4
|
+
* form a new `<...>` pair.
|
|
5
|
+
*/
|
|
6
|
+
export function stripHtmlTags(text) {
|
|
7
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- an HTML tag run to the first closing bracket; a quoted `>` inside an attribute is deliberately not seen.
|
|
8
|
+
return text.replace(/<[^>]+>/g, "");
|
|
9
|
+
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { z } from "zod";
|
|
20
20
|
import type { Logger } from "../../lib/logger.js";
|
|
21
|
-
export
|
|
21
|
+
export type ResolvedTarget = {
|
|
22
22
|
/** Canonical id used as the entity-resolution anchor — preferred order: HGNC, then Ensembl. */
|
|
23
23
|
canonicalId: string;
|
|
24
24
|
/** What ontology produced the canonical id ("hgnc" or "ensembl"). */
|
|
@@ -48,7 +48,7 @@ export interface ResolvedTarget {
|
|
|
48
48
|
ensembl: boolean;
|
|
49
49
|
chembl: boolean;
|
|
50
50
|
};
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
export declare const HgncResponseSchema: z.ZodObject<{
|
|
53
53
|
response: z.ZodOptional<z.ZodObject<{
|
|
54
54
|
docs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -69,7 +69,7 @@ export declare const HgncResponseSchema: z.ZodObject<{
|
|
|
69
69
|
* @throws when the input cannot be mapped to any human gene/protein.
|
|
70
70
|
*/
|
|
71
71
|
export declare function resolveTarget(input: string, logger?: Logger): Promise<ResolvedTarget>;
|
|
72
|
-
export
|
|
72
|
+
export type AutocompleteCandidate = {
|
|
73
73
|
/** Approved HGNC symbol when known, otherwise the input symbol. */
|
|
74
74
|
symbol: string;
|
|
75
75
|
/** Full gene/protein name. */
|
|
@@ -79,7 +79,7 @@ export interface AutocompleteCandidate {
|
|
|
79
79
|
uniprotId: string | null;
|
|
80
80
|
/** Sorted synonyms across HGNC + UniProt. */
|
|
81
81
|
synonyms: string[];
|
|
82
|
-
}
|
|
82
|
+
};
|
|
83
83
|
/**
|
|
84
84
|
* Resolve a single gene-symbol query for the autocomplete UI by fanning
|
|
85
85
|
* out HGNC + UniProt + Ensembl in parallel and merging into one canonical
|
|
@@ -26,9 +26,13 @@ const HGNC_BASE = "https://rest.genenames.org/fetch";
|
|
|
26
26
|
const UNIPROT_BASE = "https://rest.uniprot.org/uniprotkb/search";
|
|
27
27
|
const HGNC_HEADERS = { Accept: "application/json" };
|
|
28
28
|
const UNIPROT_HEADERS = { Accept: "application/json" };
|
|
29
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- Ensembl gene ids are ENSG plus 11 digits; the fixed shape is the identifier rule.
|
|
29
30
|
const ENSG_RE = /^ENSG\d{11}$/;
|
|
31
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the UniProt accession shape with its optional isoform suffix (-<n>).
|
|
30
32
|
const UNIPROT_RE = /^[A-Z][0-9][A-Z0-9]{3}[0-9](-\d+)?$/;
|
|
33
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- ChEMBL ids carry the fixed CHEMBL<n> shape.
|
|
31
34
|
const CHEMBL_RE = /^CHEMBL\d+$/;
|
|
35
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- HGNC ids are the HGNC: prefix plus digits.
|
|
32
36
|
const HGNC_RE = /^HGNC:\d+$/;
|
|
33
37
|
// HGNC search payload, validated at the fetch boundary. Every field is optional
|
|
34
38
|
// because the API omits absent values; each read below is optional-chained /
|
|
@@ -166,7 +170,7 @@ export async function resolveTarget(input, logger) {
|
|
|
166
170
|
}
|
|
167
171
|
}
|
|
168
172
|
else if (seedHgncId) {
|
|
169
|
-
hgncDoc = await fetchHgncBy("hgnc_id", seedHgncId.
|
|
173
|
+
hgncDoc = await fetchHgncBy("hgnc_id", seedHgncId.startsWith("HGNC:") ? seedHgncId.slice("HGNC:".length) : seedHgncId);
|
|
170
174
|
}
|
|
171
175
|
else if (seedEnsemblId) {
|
|
172
176
|
hgncDoc = await fetchHgncBy("ensembl_gene_id", seedEnsemblId);
|
|
@@ -230,9 +234,9 @@ export async function resolveTarget(input, logger) {
|
|
|
230
234
|
}
|
|
231
235
|
const synonyms = new Set();
|
|
232
236
|
for (const s of hgncDoc?.alias_symbol ?? [])
|
|
233
|
-
synonyms.add(
|
|
237
|
+
synonyms.add(s);
|
|
234
238
|
for (const s of hgncDoc?.prev_symbol ?? [])
|
|
235
|
-
synonyms.add(
|
|
239
|
+
synonyms.add(s);
|
|
236
240
|
for (const g of uniprotDoc?.genes ?? []) {
|
|
237
241
|
for (const syn of g.synonyms ?? []) {
|
|
238
242
|
if (syn.value)
|
|
@@ -8,27 +8,27 @@
|
|
|
8
8
|
* sends an explicit `null`. Thus a maybe-absent field carries `.optional()`,
|
|
9
9
|
* not `.nullable()`.
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export type MpTerm = {
|
|
12
12
|
id: string;
|
|
13
13
|
term: string;
|
|
14
14
|
bestPValue: number | null;
|
|
15
|
-
}
|
|
16
|
-
export
|
|
15
|
+
};
|
|
16
|
+
export type PhenotypeProfile = {
|
|
17
17
|
mpTerms: MpTerm[];
|
|
18
18
|
organSystems: string[];
|
|
19
19
|
sexDimorphic: boolean;
|
|
20
20
|
phenotypeCount: number;
|
|
21
|
-
}
|
|
22
|
-
export
|
|
21
|
+
};
|
|
22
|
+
export type ViabilityCall = {
|
|
23
23
|
zygosity: string;
|
|
24
24
|
parameterStableId: string;
|
|
25
25
|
mpTerm: {
|
|
26
26
|
id: string;
|
|
27
27
|
name: string;
|
|
28
28
|
} | null;
|
|
29
|
-
}
|
|
29
|
+
};
|
|
30
30
|
export type ViabilityCategory = "lethal_pre_weaning" | "subviable" | "viable" | null;
|
|
31
|
-
export
|
|
31
|
+
export type KoPhenotypeProfile = {
|
|
32
32
|
geneSymbol: string;
|
|
33
33
|
mouseMarkerSymbol: string | null;
|
|
34
34
|
mgiAccessionId: string | null;
|
|
@@ -40,7 +40,7 @@ export interface KoPhenotypeProfile {
|
|
|
40
40
|
phenotypeCount: number;
|
|
41
41
|
phenotypeDocsTotal: number;
|
|
42
42
|
phenotypesTruncated: boolean;
|
|
43
|
-
}
|
|
43
|
+
};
|
|
44
44
|
export declare function parsePhenotypeResponse(raw: unknown): PhenotypeProfile;
|
|
45
45
|
export declare function buildViabilityCalls(docsB: unknown, docsC: unknown): ViabilityCall[];
|
|
46
46
|
export declare function derivedViability(calls: ViabilityCall[]): ViabilityCategory;
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
* not `.nullable()`.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from "zod";
|
|
12
|
+
import { isUnknownArray } from "../../lib/unknown-array.js";
|
|
13
|
+
import { presentGet } from "../../lib/present.js";
|
|
14
|
+
import { parseUnknownRecord } from "../../lib/unknown-containers.js";
|
|
12
15
|
import { apiFetchValidated, describeApiError, isUnexpectedApiError } from "./api-utils.js";
|
|
13
16
|
const IMPC_BASE = "https://www.ebi.ac.uk/mi/impc/solr";
|
|
14
17
|
const PHENOTYPE_ROW_CAP = 500;
|
|
@@ -40,14 +43,14 @@ const ORGAN_SYSTEM_MAP = {
|
|
|
40
43
|
"embryo phenotype": "growth",
|
|
41
44
|
};
|
|
42
45
|
// A single IMPC Solr document — fields vary by core; all optional. `top_level_mp_term_name`
|
|
43
|
-
// and `sex`
|
|
46
|
+
// and `sex` ride as JSON values: the code reads them defensively (`Array.isArray`,
|
|
44
47
|
// `typeof === "string"`) rather than trusting a wire type.
|
|
45
48
|
const ImpcSolrDocSchema = z.object({
|
|
46
49
|
mp_term_id: z.string().optional(),
|
|
47
50
|
mp_term_name: z.string().optional(),
|
|
48
51
|
p_value: z.number().optional(),
|
|
49
|
-
top_level_mp_term_name: z.
|
|
50
|
-
sex: z.
|
|
52
|
+
top_level_mp_term_name: z.json().optional(),
|
|
53
|
+
sex: z.json().optional(),
|
|
51
54
|
parameter_stable_id: z.string().optional(),
|
|
52
55
|
parameter_name: z.string().optional(),
|
|
53
56
|
marker_symbol: z.string().optional(),
|
|
@@ -57,14 +60,21 @@ const ImpcSolrDocSchema = z.object({
|
|
|
57
60
|
const ImpcSolrResponseSchema = z.object({
|
|
58
61
|
response: z.object({ docs: z.array(ImpcSolrDocSchema).optional(), numFound: z.number().optional() }).optional(),
|
|
59
62
|
});
|
|
63
|
+
import { hasWhitespace } from "../../lib/text.js";
|
|
60
64
|
function escapeSolrValue(value) {
|
|
61
|
-
|
|
65
|
+
const specials = '+-&|!(){}[]^"~*?:\\/';
|
|
66
|
+
let out = "";
|
|
67
|
+
for (const char of value) {
|
|
68
|
+
if (specials.includes(char) || hasWhitespace(char))
|
|
69
|
+
out += "\\" + char;
|
|
70
|
+
else
|
|
71
|
+
out += char;
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
62
74
|
}
|
|
63
75
|
export function parsePhenotypeResponse(raw) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const docs = raw?.response?.docs ?? [];
|
|
67
|
-
if (!Array.isArray(docs) || docs.length === 0) {
|
|
76
|
+
const docs = solrDocsOf(raw);
|
|
77
|
+
if (docs.length === 0) {
|
|
68
78
|
return { mpTerms: [], organSystems: [], sexDimorphic: false, phenotypeCount: 0 };
|
|
69
79
|
}
|
|
70
80
|
const byMp = new Map();
|
|
@@ -72,13 +82,13 @@ export function parsePhenotypeResponse(raw) {
|
|
|
72
82
|
const mpToSexes = new Map();
|
|
73
83
|
const allSexes = new Set();
|
|
74
84
|
for (const doc of docs) {
|
|
75
|
-
const mpId = doc
|
|
85
|
+
const mpId = readString(doc, "mp_term_id");
|
|
76
86
|
if (!mpId)
|
|
77
87
|
continue;
|
|
78
88
|
const newP = typeof doc.p_value === "number" && Number.isFinite(doc.p_value) ? doc.p_value : null;
|
|
79
89
|
const existing = byMp.get(mpId);
|
|
80
90
|
if (!existing) {
|
|
81
|
-
byMp.set(mpId, { id: mpId, term: doc
|
|
91
|
+
byMp.set(mpId, { id: mpId, term: readString(doc, "mp_term_name") ?? "", bestPValue: newP });
|
|
82
92
|
}
|
|
83
93
|
else if (newP !== null && (existing.bestPValue === null || newP < existing.bestPValue)) {
|
|
84
94
|
existing.bestPValue = newP;
|
|
@@ -97,7 +107,7 @@ export function parsePhenotypeResponse(raw) {
|
|
|
97
107
|
allSexes.add(sex);
|
|
98
108
|
if (!mpToSexes.has(mpId))
|
|
99
109
|
mpToSexes.set(mpId, new Set());
|
|
100
|
-
mpToSexes
|
|
110
|
+
presentGet(mpToSexes, mpId, "the sex set of the phenotype").add(sex);
|
|
101
111
|
}
|
|
102
112
|
}
|
|
103
113
|
const mpTerms = [...byMp.values()].sort((a, b) => {
|
|
@@ -110,33 +120,34 @@ export function parsePhenotypeResponse(raw) {
|
|
|
110
120
|
const sexDimorphic = bothSexesTested && [...mpToSexes.values()].some((sexes) => (sexes.has("male") && !sexes.has("female")) || (sexes.has("female") && !sexes.has("male")));
|
|
111
121
|
return { mpTerms, organSystems, sexDimorphic, phenotypeCount: byMp.size };
|
|
112
122
|
}
|
|
123
|
+
function readString(record, key) {
|
|
124
|
+
const value = record[key];
|
|
125
|
+
return typeof value === "string" ? value : undefined;
|
|
126
|
+
}
|
|
127
|
+
/** The `.response.docs` of a Solr envelope, each doc as the record its fields are read off; a non-record doc is skipped. */
|
|
128
|
+
function solrDocsOf(raw) {
|
|
129
|
+
const docs = parseUnknownRecord(parseUnknownRecord(raw)?.response)?.docs;
|
|
130
|
+
if (!isUnknownArray(docs))
|
|
131
|
+
return [];
|
|
132
|
+
return docs.flatMap((doc) => {
|
|
133
|
+
const record = parseUnknownRecord(doc);
|
|
134
|
+
return record === undefined ? [] : [record];
|
|
135
|
+
});
|
|
136
|
+
}
|
|
113
137
|
export function buildViabilityCalls(docsB, docsC) {
|
|
114
|
-
// `docsB`/`docsC` are untyped IMPC Solr responses; the `.response.docs` reach is
|
|
115
|
-
// optional-chained + defaulted, so a shape mismatch degrades to an empty result.
|
|
116
|
-
const bDocs = docsB?.response?.docs ?? [];
|
|
117
|
-
const cDocs = docsC?.response?.docs ?? [];
|
|
118
138
|
const seen = new Set();
|
|
119
139
|
const out = [];
|
|
120
|
-
for (const d of
|
|
121
|
-
const pid = d
|
|
122
|
-
if (!pid || seen.has(pid))
|
|
123
|
-
continue;
|
|
124
|
-
seen.add(pid);
|
|
125
|
-
out.push({
|
|
126
|
-
zygosity: d.parameter_name ?? "",
|
|
127
|
-
parameterStableId: pid,
|
|
128
|
-
mpTerm: d.mp_term_id && d.mp_term_name ? { id: d.mp_term_id, name: d.mp_term_name } : null,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
for (const d of cDocs) {
|
|
132
|
-
const pid = d.parameter_stable_id;
|
|
140
|
+
for (const d of [...solrDocsOf(docsB), ...solrDocsOf(docsC)]) {
|
|
141
|
+
const pid = readString(d, "parameter_stable_id");
|
|
133
142
|
if (!pid || seen.has(pid))
|
|
134
143
|
continue;
|
|
135
144
|
seen.add(pid);
|
|
145
|
+
const mpId = readString(d, "mp_term_id");
|
|
146
|
+
const mpName = readString(d, "mp_term_name");
|
|
136
147
|
out.push({
|
|
137
|
-
zygosity: d
|
|
148
|
+
zygosity: readString(d, "parameter_name") ?? "",
|
|
138
149
|
parameterStableId: pid,
|
|
139
|
-
mpTerm: null,
|
|
150
|
+
mpTerm: mpId && mpName ? { id: mpId, name: mpName } : null,
|
|
140
151
|
});
|
|
141
152
|
}
|
|
142
153
|
return out;
|
|
@@ -159,15 +170,15 @@ async function resolveImpcGene(humanSymbol) {
|
|
|
159
170
|
throw new Error(describeApiError(res.error));
|
|
160
171
|
return null;
|
|
161
172
|
}
|
|
162
|
-
const docs = res.value
|
|
173
|
+
const docs = res.value.response?.docs ?? [];
|
|
163
174
|
if (!Array.isArray(docs) || docs.length === 0)
|
|
164
175
|
return null;
|
|
165
176
|
const doc = docs[0];
|
|
166
|
-
if (!doc.marker_symbol || !doc.mgi_accession_id)
|
|
177
|
+
if (doc === undefined || !doc.marker_symbol || !doc.mgi_accession_id)
|
|
167
178
|
return null;
|
|
168
179
|
return {
|
|
169
|
-
mouseMarkerSymbol:
|
|
170
|
-
mgiAccessionId:
|
|
180
|
+
mouseMarkerSymbol: doc.marker_symbol,
|
|
181
|
+
mgiAccessionId: doc.mgi_accession_id,
|
|
171
182
|
};
|
|
172
183
|
}
|
|
173
184
|
async function fetchPhenotypes(mouseSym) {
|
|
@@ -179,7 +190,7 @@ async function fetchPhenotypes(mouseSym) {
|
|
|
179
190
|
throw new Error(describeApiError(res.error));
|
|
180
191
|
return { raw: { response: { docs: [] } }, numFound: 0 };
|
|
181
192
|
}
|
|
182
|
-
const numFound =
|
|
193
|
+
const numFound = res.value.response?.numFound ?? 0;
|
|
183
194
|
return { raw: res.value, numFound };
|
|
184
195
|
}
|
|
185
196
|
async function fetchAssignedViability(mouseSym) {
|
|
@@ -19,14 +19,14 @@ export declare const IupharTargetSchema: z.ZodObject<{
|
|
|
19
19
|
subunitType: z.ZodOptional<z.ZodString>;
|
|
20
20
|
}, z.core.$strip>;
|
|
21
21
|
export type IupharTarget = z.infer<typeof IupharTargetSchema>;
|
|
22
|
-
export
|
|
22
|
+
export type IupharHeterodimer = {
|
|
23
23
|
/** Complex target record (e.g., the AMY1 receptor). */
|
|
24
24
|
complex: IupharTarget;
|
|
25
25
|
/** All subunits of the complex, including the primary protein and accessory(ies). */
|
|
26
26
|
subunits: IupharTarget[];
|
|
27
27
|
/** Accessory-protein subunits only (type === "AccessoryProtein"). */
|
|
28
28
|
accessories: IupharTarget[];
|
|
29
|
-
}
|
|
29
|
+
};
|
|
30
30
|
export declare function findTargetByGeneSymbol(geneSymbol: string): Promise<IupharTarget | null>;
|
|
31
31
|
export declare function findTargetByUniprot(accession: string): Promise<IupharTarget | null>;
|
|
32
32
|
/**
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
12
|
+
import { presentAt } from "../../lib/present.js";
|
|
13
|
+
import { stripHtmlTags } from "./html-text.js";
|
|
12
14
|
import { apiFetchValidated, describeApiError, isUnexpectedApiError } from "./api-utils.js";
|
|
13
15
|
import { IUPHAR_BASE, IUPHAR_HEADERS as HEADERS } from "./iuphar-config.js";
|
|
14
16
|
// Validated at the fetch boundary. GtoPdb serves the target record in three
|
|
@@ -36,19 +38,8 @@ export const IupharTargetSchema = z.object({
|
|
|
36
38
|
complexIds: z.array(z.number()).optional(),
|
|
37
39
|
subunitType: z.string().optional(),
|
|
38
40
|
});
|
|
41
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the issued UniProt accession shape is the identifier rule of the target records.
|
|
39
42
|
const UNIPROT_ACCESSION_RE = /^[A-Z][0-9][A-Z0-9]{3}[0-9]$/;
|
|
40
|
-
function stripHtml(name) {
|
|
41
|
-
// Strip tags to a fixpoint: a single pass can leave a `<…>` behind when
|
|
42
|
-
// removing an inner tag lets the surrounding angle brackets form a new one,
|
|
43
|
-
// so repeat until the string stops changing.
|
|
44
|
-
let out = name;
|
|
45
|
-
let prev;
|
|
46
|
-
do {
|
|
47
|
-
prev = out;
|
|
48
|
-
out = out.replace(/<[^>]+>/g, "");
|
|
49
|
-
} while (out !== prev);
|
|
50
|
-
return out;
|
|
51
|
-
}
|
|
52
43
|
function notFound(error) {
|
|
53
44
|
return error.type === "http_status" && (error.status === 404 || error.status === 204);
|
|
54
45
|
}
|
|
@@ -123,9 +114,9 @@ export async function getFamilyHeterodimers(uniprotOrGeneSymbol) {
|
|
|
123
114
|
const batch = complexes.slice(i, i + concurrency);
|
|
124
115
|
const subunitLists = await Promise.all(batch.map((c) => getSubunits(c.targetId)));
|
|
125
116
|
for (let j = 0; j < batch.length; j++) {
|
|
126
|
-
const complex = batch
|
|
127
|
-
const subunits = subunitLists
|
|
128
|
-
const cleanedSubunits = subunits.map((s) => ({ ...s, name:
|
|
117
|
+
const complex = presentAt(batch, j, "the complex of the batch");
|
|
118
|
+
const subunits = presentAt(subunitLists, j, "the subunits of the complex");
|
|
119
|
+
const cleanedSubunits = subunits.map((s) => ({ ...s, name: stripHtmlTags(s.name) }));
|
|
129
120
|
// Only a shape B row reaches this filter, because `getSubunits`
|
|
130
121
|
// calls `/targets/{id}/subunits`. Shape B is the one shape that
|
|
131
122
|
// names the kind of a target as `AccessoryProtein`, and the
|
|
@@ -134,7 +125,7 @@ export async function getFamilyHeterodimers(uniprotOrGeneSymbol) {
|
|
|
134
125
|
// row or a single-target row would match nothing.
|
|
135
126
|
const accessories = cleanedSubunits.filter((s) => (s.type ?? "").toLowerCase() === "accessoryprotein");
|
|
136
127
|
results.push({
|
|
137
|
-
complex: { ...complex, name:
|
|
128
|
+
complex: { ...complex, name: stripHtmlTags(complex.name) },
|
|
138
129
|
subunits: cleanedSubunits,
|
|
139
130
|
accessories,
|
|
140
131
|
});
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* field carries `.nullish()` exactly.
|
|
18
18
|
*/
|
|
19
19
|
/** A curated human phenotype attributed to variation in the gene. */
|
|
20
|
-
export
|
|
20
|
+
export type MonarchPhenotypeAssociation = {
|
|
21
21
|
/** HPO term id, e.g. `HP:0001392`. */
|
|
22
22
|
readonly hpoId: string;
|
|
23
23
|
readonly label: string;
|
|
@@ -30,12 +30,12 @@ export interface MonarchPhenotypeAssociation {
|
|
|
30
30
|
/** Share of affected individuals showing the phenotype, when annotated. */
|
|
31
31
|
readonly frequencyPercent: number | null;
|
|
32
32
|
readonly primaryKnowledgeSource: string | null;
|
|
33
|
-
}
|
|
34
|
-
export
|
|
33
|
+
};
|
|
34
|
+
export type MonarchGeneProfile = {
|
|
35
35
|
/** The curie the gene was queried by, e.g. `HGNC:1097`. */
|
|
36
36
|
readonly geneCurie: string;
|
|
37
37
|
readonly phenotypes: MonarchPhenotypeAssociation[];
|
|
38
|
-
}
|
|
38
|
+
};
|
|
39
39
|
/**
|
|
40
40
|
* Curated human phenotype associations for one gene.
|
|
41
41
|
*
|