@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
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* parses.
|
|
19
19
|
*/
|
|
20
20
|
import { z } from "zod";
|
|
21
|
+
import type { SituationFieldsSchema } from "./situation.js";
|
|
21
22
|
/** The role of the blocking factor. A role and never a column name, because the situation leaves the machine. */
|
|
22
23
|
export type BlockingRole = "individual" | "cell_line" | "litter" | "site" | "pair" | "other";
|
|
23
24
|
/** The role of a covariate of the design. A role and never a column name. */
|
|
@@ -25,48 +26,12 @@ export type CovariateRole = "sex" | "age" | "clinical" | "technical" | "other";
|
|
|
25
26
|
/** The role of the numeric variable of interest when the question is a trend, not a comparison of groups. */
|
|
26
27
|
export type PredictorRole = "dose" | "time" | "age" | "score" | "other";
|
|
27
28
|
/** The typed description of one analysis situation. Never a sample row, never an identifier, and never a column name. */
|
|
28
|
-
export
|
|
29
|
-
readonly question: "differential_expression" | "enrichment" | "qc" | "full_plan";
|
|
30
|
-
readonly modality: "bulk_rna_seq";
|
|
31
|
-
readonly data_state: "fastq" | "counts" | "tpm_or_fpkm" | "log_normalized";
|
|
32
|
-
readonly count_source?: "salmon" | "kallisto" | "star_featurecounts" | "rsem" | "unknown";
|
|
33
|
-
/** Whether the length correction of a quantifier occurred. Never required: the service sets `unknown` on counts. */
|
|
34
|
-
readonly import_state?: "quantifications" | "estimated_counts_with_lengths" | "corrected_counts" | "integer_counts" | "unknown";
|
|
35
|
-
readonly organism: "human" | "mouse" | "other";
|
|
36
|
-
readonly n_groups: number;
|
|
37
|
-
readonly n_per_group_min: number;
|
|
38
|
-
readonly n_per_group_max: number;
|
|
39
|
-
/** The total number of biological samples. Never required. */
|
|
40
|
-
readonly n_samples?: number;
|
|
41
|
-
/** The number of samples with an observed event, for a survival question. Never required. */
|
|
42
|
-
readonly n_events?: number;
|
|
43
|
-
readonly paired: boolean;
|
|
44
|
-
/** The role of the blocking factor, or null. The column name stays on the machine. */
|
|
45
|
-
readonly blocking_factor?: BlockingRole | null;
|
|
46
|
-
/** How the blocking factor relates to the condition: crossed, or nested inside one condition. */
|
|
47
|
-
readonly block_structure?: "crossed" | "nested";
|
|
48
|
-
readonly batch: "none" | "known_balanced" | "known_confounded" | "known_unbalanced" | "suspected";
|
|
49
|
-
/** The role of each covariate of the design, one entry per covariate. The column names stay on the machine. */
|
|
50
|
-
readonly covariates?: readonly CovariateRole[];
|
|
51
|
-
readonly n_timepoints?: number | null;
|
|
52
|
-
/** The role of the numeric variable of interest when the question is a trend over it; then `n_groups` is 1. The column name stays on the machine. */
|
|
53
|
-
readonly continuous_predictor?: PredictorRole | null;
|
|
54
|
-
/** True when some columns of the count table are technical replicates of one biological sample. */
|
|
55
|
-
readonly technical_replicates?: boolean;
|
|
56
|
-
/** The row unit of the count table. Absent for a gene-level table. */
|
|
57
|
-
readonly feature_level?: "gene" | "exon" | "transcript";
|
|
58
|
-
readonly library_type?: "polyA" | "total" | "three_prime" | "unknown";
|
|
59
|
-
readonly strandedness?: "verified" | "declared_unverified" | "unknown";
|
|
60
|
-
readonly interaction?: boolean;
|
|
61
|
-
/** True for a classifier of the samples into classes; absent for a per-sample score. */
|
|
62
|
-
readonly classifier?: boolean;
|
|
63
|
-
readonly quality_flags?: readonly ("low_depth_sample" | "outlier_sample" | "sample_identity_doubt" | "high_duplication" | "degraded_rna")[];
|
|
64
|
-
}
|
|
29
|
+
export type KnowledgeSituation = z.infer<typeof SituationFieldsSchema>;
|
|
65
30
|
export declare const RecommendResponseSchema: z.ZodObject<{
|
|
66
31
|
match: z.ZodEnum<{
|
|
67
|
-
none: "none";
|
|
68
32
|
applicable: "applicable";
|
|
69
33
|
flag: "flag";
|
|
34
|
+
none: "none";
|
|
70
35
|
}>;
|
|
71
36
|
snapshot: z.ZodObject<{
|
|
72
37
|
date: z.ZodString;
|
|
@@ -98,14 +63,14 @@ export declare const RecommendResponseSchema: z.ZodObject<{
|
|
|
98
63
|
}, z.core.$loose>>;
|
|
99
64
|
parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
100
65
|
name: z.ZodString;
|
|
101
|
-
value: z.
|
|
66
|
+
value: z.ZodJSONSchema;
|
|
102
67
|
default_source: z.ZodOptional<z.ZodString>;
|
|
103
68
|
}, z.core.$loose>>>;
|
|
104
69
|
conflicts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
105
70
|
parameter: z.ZodString;
|
|
106
71
|
entries: z.ZodArray<z.ZodObject<{
|
|
107
72
|
rule: z.ZodString;
|
|
108
|
-
value: z.
|
|
73
|
+
value: z.ZodJSONSchema;
|
|
109
74
|
}, z.core.$loose>>;
|
|
110
75
|
}, z.core.$loose>>>;
|
|
111
76
|
substitution: z.ZodOptional<z.ZodObject<{
|
|
@@ -132,6 +97,10 @@ export declare const RecommendResponseSchema: z.ZodObject<{
|
|
|
132
97
|
why: z.ZodString;
|
|
133
98
|
}, z.core.$loose>>;
|
|
134
99
|
}, z.core.$loose>>;
|
|
100
|
+
package: z.ZodOptional<z.ZodObject<{
|
|
101
|
+
name: z.ZodString;
|
|
102
|
+
}, z.core.$loose>>;
|
|
103
|
+
forbids: z.ZodOptional<z.ZodJSONSchema>;
|
|
135
104
|
}, z.core.$loose>>;
|
|
136
105
|
uncovered: z.ZodArray<z.ZodString>;
|
|
137
106
|
unrealized: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -211,7 +180,7 @@ export declare const RenderResponseSchema: z.ZodObject<{
|
|
|
211
180
|
script: z.ZodString;
|
|
212
181
|
slots: z.ZodArray<z.ZodObject<{
|
|
213
182
|
name: z.ZodString;
|
|
214
|
-
value: z.ZodOptional<z.
|
|
183
|
+
value: z.ZodOptional<z.ZodJSONSchema>;
|
|
215
184
|
source: z.ZodString;
|
|
216
185
|
adaptable: z.ZodBoolean;
|
|
217
186
|
lines: z.ZodArray<z.ZodNumber>;
|
|
@@ -229,7 +198,7 @@ export declare const RenderResponseSchema: z.ZodObject<{
|
|
|
229
198
|
path: z.ZodString;
|
|
230
199
|
description: z.ZodOptional<z.ZodString>;
|
|
231
200
|
}, z.core.$loose>>;
|
|
232
|
-
decision_record: z.ZodRecord<z.ZodString, z.
|
|
201
|
+
decision_record: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
|
|
233
202
|
}, z.core.$loose>;
|
|
234
203
|
export type RenderResponse = z.infer<typeof RenderResponseSchema>;
|
|
235
204
|
/**
|
|
@@ -245,7 +214,7 @@ declare const TemplateParameterSchema: z.ZodObject<{
|
|
|
245
214
|
adaptable: z.ZodBoolean;
|
|
246
215
|
local: z.ZodOptional<z.ZodBoolean>;
|
|
247
216
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
248
|
-
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean
|
|
217
|
+
default: z.ZodOptional<z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodString>]>>>, z.ZodTransform<string | number | boolean | string[] | undefined, string | number | boolean | string[] | null | undefined>>>;
|
|
249
218
|
default_source: z.ZodOptional<z.ZodString>;
|
|
250
219
|
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
251
220
|
pattern: z.ZodOptional<z.ZodString>;
|
|
@@ -274,7 +243,7 @@ export declare const TemplateContractSchema: z.ZodObject<{
|
|
|
274
243
|
adaptable: z.ZodBoolean;
|
|
275
244
|
local: z.ZodOptional<z.ZodBoolean>;
|
|
276
245
|
required: z.ZodOptional<z.ZodBoolean>;
|
|
277
|
-
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean
|
|
246
|
+
default: z.ZodOptional<z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>, z.ZodArray<z.ZodString>]>>>, z.ZodTransform<string | number | boolean | string[] | undefined, string | number | boolean | string[] | null | undefined>>>;
|
|
278
247
|
default_source: z.ZodOptional<z.ZodString>;
|
|
279
248
|
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
280
249
|
pattern: z.ZodOptional<z.ZodString>;
|
|
@@ -295,11 +264,11 @@ export declare const TemplateContractSchema: z.ZodObject<{
|
|
|
295
264
|
}, z.core.$loose>;
|
|
296
265
|
export type TemplateContract = z.infer<typeof TemplateContractSchema>;
|
|
297
266
|
/** The preferences of the caller: the language of the template the answer names. */
|
|
298
|
-
export
|
|
267
|
+
export type KnowledgePreferences = {
|
|
299
268
|
readonly language?: "R" | "python";
|
|
300
|
-
}
|
|
269
|
+
};
|
|
301
270
|
/** What a drafted step carries into the check. */
|
|
302
|
-
export
|
|
271
|
+
export type DraftedStep = {
|
|
303
272
|
readonly step_type: string;
|
|
304
273
|
readonly method: string;
|
|
305
274
|
/** The catalog id of the method (`M-dddd`), copied from the recommendation. An exact match wins over the wording. */
|
|
@@ -311,22 +280,22 @@ export interface DraftedStep {
|
|
|
311
280
|
}[];
|
|
312
281
|
/** The outcome the step states when the design forbids inference, for example `descriptive_only`. */
|
|
313
282
|
readonly outcome?: string;
|
|
314
|
-
}
|
|
315
|
-
export
|
|
283
|
+
};
|
|
284
|
+
export type FarmPackage = {
|
|
316
285
|
readonly name: string;
|
|
317
286
|
readonly version: string;
|
|
318
|
-
}
|
|
287
|
+
};
|
|
319
288
|
/** The service could not answer after the retry policy. The run continues from the prose skills. */
|
|
320
|
-
export
|
|
289
|
+
export type KnowledgeUnavailable = {
|
|
321
290
|
readonly match: "unavailable";
|
|
322
291
|
readonly reason: string;
|
|
323
|
-
}
|
|
292
|
+
};
|
|
324
293
|
/**
|
|
325
294
|
* The service serves another release than the one the plan pinned, and it
|
|
326
295
|
* did no work. A plan is not moved to a new release in silence: the caller
|
|
327
296
|
* proceeds as with an unavailable service, and it states the two digests.
|
|
328
297
|
*/
|
|
329
|
-
export
|
|
298
|
+
export type KnowledgeSnapshotMismatch = {
|
|
330
299
|
readonly match: "snapshot_mismatch";
|
|
331
300
|
readonly message: string;
|
|
332
301
|
readonly expected: string;
|
|
@@ -334,9 +303,9 @@ export interface KnowledgeSnapshotMismatch {
|
|
|
334
303
|
readonly date: string;
|
|
335
304
|
readonly digest: string;
|
|
336
305
|
};
|
|
337
|
-
}
|
|
306
|
+
};
|
|
338
307
|
/** The service refused the request and named the field or the slot and the permitted values. */
|
|
339
|
-
export
|
|
308
|
+
export type KnowledgeRejected = {
|
|
340
309
|
readonly match: "rejected";
|
|
341
310
|
readonly message: string;
|
|
342
311
|
readonly issues: readonly {
|
|
@@ -346,17 +315,17 @@ export interface KnowledgeRejected {
|
|
|
346
315
|
readonly reason?: string;
|
|
347
316
|
readonly permitted?: readonly string[];
|
|
348
317
|
}[];
|
|
349
|
-
}
|
|
318
|
+
};
|
|
350
319
|
/** What a render call carries beside the template and the slots. */
|
|
351
|
-
export
|
|
320
|
+
export type RenderCallOptions = {
|
|
352
321
|
/** The id of the plan step that runs the script. */
|
|
353
322
|
readonly step?: string;
|
|
354
323
|
/** The claims of the plan step that selected the template. Each must resolve in the served snapshot. */
|
|
355
324
|
readonly claims?: readonly string[];
|
|
356
325
|
/** The release digest the plan pinned. The service refuses another release with `snapshot_mismatch`. */
|
|
357
326
|
readonly expectedSnapshot?: string;
|
|
358
|
-
}
|
|
359
|
-
export
|
|
327
|
+
};
|
|
328
|
+
export type KnowledgeClient = {
|
|
360
329
|
/** `expectedSnapshot` pins the release of an earlier answer of the same plan; the first call of a plan has none. */
|
|
361
330
|
recommend(situation: KnowledgeSituation, responseFormat?: "concise" | "detailed", preferences?: KnowledgePreferences, expectedSnapshot?: string): Promise<RecommendResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch>;
|
|
362
331
|
check(situation: KnowledgeSituation, steps: readonly DraftedStep[], expectedSnapshot?: string): Promise<CheckResponse | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch>;
|
|
@@ -369,14 +338,14 @@ export interface KnowledgeClient {
|
|
|
369
338
|
* unknown template is `rejected` with the field `template`.
|
|
370
339
|
*/
|
|
371
340
|
contract(template: string): Promise<TemplateContract | KnowledgeUnavailable | KnowledgeRejected>;
|
|
372
|
-
}
|
|
373
|
-
export
|
|
341
|
+
};
|
|
342
|
+
export type HttpKnowledgeClientConfig = {
|
|
374
343
|
/** The service origin, for example `https://knowledge.inflexa.ai`. */
|
|
375
344
|
readonly baseUrl: string;
|
|
376
345
|
/** The bearer key. The license of the service. */
|
|
377
346
|
readonly apiKey: string;
|
|
378
347
|
readonly timeoutMs?: number;
|
|
379
348
|
readonly maxRetries?: number;
|
|
380
|
-
}
|
|
349
|
+
};
|
|
381
350
|
export declare function createHttpKnowledgeClient(config: HttpKnowledgeClientConfig): KnowledgeClient;
|
|
382
351
|
export {};
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { z } from "zod";
|
|
21
21
|
import { apiFetchValidated, describeApiError } from "../lib/api-utils.js";
|
|
22
|
+
import { parseJsonAs, safeParseJsonAs } from "../../lib/parse-json.js";
|
|
23
|
+
import { parseUnknownRecord } from "../../lib/unknown-containers.js";
|
|
22
24
|
// ── The answers, as the harness reads them ──────────────────────────
|
|
23
25
|
const SnapshotRefSchema = z.object({ date: z.string(), digest: z.string() });
|
|
24
26
|
/** A method of the catalog by id and label. */
|
|
@@ -26,7 +28,7 @@ const MethodRefSchema = z.looseObject({ id: z.string(), label: z.string() });
|
|
|
26
28
|
/** Two rules of equal specificity and strength disagree on a parameter. The step omits the parameter and names both. */
|
|
27
29
|
const ProcedureConflictSchema = z.looseObject({
|
|
28
30
|
parameter: z.string(),
|
|
29
|
-
entries: z.array(z.looseObject({ rule: z.string(), value: z.
|
|
31
|
+
entries: z.array(z.looseObject({ rule: z.string(), value: z.json() })),
|
|
30
32
|
});
|
|
31
33
|
/** The step method is a declared substitute: `for` names the method of record it stands in for. */
|
|
32
34
|
const ProcedureSubstitutionSchema = z.looseObject({ for: z.string(), label: z.string(), template: z.string() });
|
|
@@ -52,11 +54,15 @@ const ProcedureStepSchema = z.looseObject({
|
|
|
52
54
|
flags: z.array(z.looseObject({ rule: z.string(), severity: z.string(), message: z.string(), outcome: z.string().optional() })).optional(),
|
|
53
55
|
alternatives: z.array(z.looseObject({ method: z.string(), label: z.string(), when: z.string(), rules: z.array(z.string()) })).optional(),
|
|
54
56
|
disputed: z.looseObject({ rule: z.string(), sides: z.array(z.string()) }).optional(),
|
|
55
|
-
parameters: z.array(z.looseObject({ name: z.string(), value: z.
|
|
57
|
+
parameters: z.array(z.looseObject({ name: z.string(), value: z.json(), default_source: z.string().optional() })).optional(),
|
|
56
58
|
conflicts: z.array(ProcedureConflictSchema).optional(),
|
|
57
59
|
substitution: ProcedureSubstitutionSchema.optional(),
|
|
58
60
|
limit: ProcedureLimitSchema.optional(),
|
|
59
61
|
unrealized: ProcedureUnrealizedSchema.optional(),
|
|
62
|
+
/** The runtime package the step installs, when the service names one. */
|
|
63
|
+
package: z.looseObject({ name: z.string() }).optional(),
|
|
64
|
+
/** The forbidden method ids, read defensively by the grounding report. */
|
|
65
|
+
forbids: z.json().optional(),
|
|
60
66
|
});
|
|
61
67
|
const ClaimSchema = z.looseObject({
|
|
62
68
|
id: z.string(),
|
|
@@ -111,7 +117,7 @@ export const RenderResponseSchema = z.looseObject({
|
|
|
111
117
|
/** A local slot entry has no value: the host binds it. */
|
|
112
118
|
slots: z.array(z.looseObject({
|
|
113
119
|
name: z.string(),
|
|
114
|
-
value: z.
|
|
120
|
+
value: z.json().optional(),
|
|
115
121
|
source: z.string(),
|
|
116
122
|
adaptable: z.boolean(),
|
|
117
123
|
lines: z.array(z.number()),
|
|
@@ -122,12 +128,13 @@ export const RenderResponseSchema = z.looseObject({
|
|
|
122
128
|
environment: z.looseObject({ match: z.string() }),
|
|
123
129
|
syntax: z.looseObject({ status: z.string() }),
|
|
124
130
|
outputs: z.array(z.looseObject({ name: z.string(), path: z.string(), description: z.string().optional() })),
|
|
125
|
-
decision_record: z.record(z.string(), z.
|
|
131
|
+
decision_record: z.record(z.string(), z.json()),
|
|
126
132
|
});
|
|
127
133
|
// ── The template contract ───────────────────────────────────────────
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
/** A scalar on the wire. */
|
|
135
|
+
const SlotScalarSchema = z.union([z.string(), z.number(), z.boolean()]);
|
|
136
|
+
/** A slot value on the wire: a scalar, or a list of strings — the contract the service states for a default. */
|
|
137
|
+
const SlotValueSchema = z.union([SlotScalarSchema, z.array(z.string())]);
|
|
131
138
|
/**
|
|
132
139
|
* One slot of a template with the constraint a caller value must obey.
|
|
133
140
|
* `adaptable: false` marks a pinned slot: the render refuses a caller value
|
|
@@ -142,7 +149,10 @@ const TemplateParameterSchema = z.looseObject({
|
|
|
142
149
|
/** True for a slot whose value is a fact of the machine (a path, a column name, a level label, a formula): the host binds it, and the service never sees it. */
|
|
143
150
|
local: z.boolean().optional(),
|
|
144
151
|
required: z.boolean().optional(),
|
|
145
|
-
default:
|
|
152
|
+
/** A `null` default is a slot with no default: it parses to an absent value. */
|
|
153
|
+
default: SlotValueSchema.nullish()
|
|
154
|
+
.transform((value) => value ?? undefined)
|
|
155
|
+
.optional(),
|
|
146
156
|
default_source: z.string().optional(),
|
|
147
157
|
enum: z.array(z.string()).optional(),
|
|
148
158
|
pattern: z.string().optional(),
|
|
@@ -185,12 +195,21 @@ const ValidationFailureSchema = z.looseObject({
|
|
|
185
195
|
permitted: z.array(z.string()).optional(),
|
|
186
196
|
})),
|
|
187
197
|
});
|
|
198
|
+
/** The runtime shape of that answer, for the paths whose type says it cannot arrive. */
|
|
199
|
+
const SnapshotMismatchAnswerSchema = z.looseObject({
|
|
200
|
+
match: z.literal("snapshot_mismatch"),
|
|
201
|
+
message: z.string(),
|
|
202
|
+
});
|
|
203
|
+
/** True when `call` answered a mismatch envelope on a route whose type says it cannot carry one. */
|
|
204
|
+
function isSnapshotMismatchAnswer(answer) {
|
|
205
|
+
return SnapshotMismatchAnswerSchema.safeParse(answer).success;
|
|
206
|
+
}
|
|
188
207
|
/** The `message` of an error envelope, or the body itself when it is not one. */
|
|
189
208
|
function messageOf(body) {
|
|
190
209
|
try {
|
|
191
|
-
const
|
|
192
|
-
if (
|
|
193
|
-
return
|
|
210
|
+
const message = parseUnknownRecord(parseJsonAs(body, z.json()))?.["message"];
|
|
211
|
+
if (typeof message === "string")
|
|
212
|
+
return message;
|
|
194
213
|
}
|
|
195
214
|
catch {
|
|
196
215
|
// Not JSON: the body is the message.
|
|
@@ -223,28 +242,26 @@ function refusalOf(error, notFoundField) {
|
|
|
223
242
|
return { match: "rejected", message, issues: [{ field: notFoundField, message }] };
|
|
224
243
|
}
|
|
225
244
|
if (error.status === 409) {
|
|
226
|
-
let
|
|
245
|
+
let parsed;
|
|
227
246
|
try {
|
|
228
|
-
|
|
247
|
+
parsed = safeParseJsonAs(error.body, SnapshotMismatchSchema);
|
|
229
248
|
}
|
|
230
249
|
catch {
|
|
231
250
|
return undefined;
|
|
232
251
|
}
|
|
233
|
-
const parsed = SnapshotMismatchSchema.safeParse(raw);
|
|
234
252
|
if (!parsed.success)
|
|
235
253
|
return undefined;
|
|
236
254
|
return { match: "snapshot_mismatch", message: parsed.data.message, expected: parsed.data.expected, served: parsed.data.served };
|
|
237
255
|
}
|
|
238
256
|
if (error.status !== 400)
|
|
239
257
|
return undefined;
|
|
240
|
-
let
|
|
258
|
+
let parsed;
|
|
241
259
|
try {
|
|
242
|
-
|
|
260
|
+
parsed = safeParseJsonAs(error.body, ValidationFailureSchema);
|
|
243
261
|
}
|
|
244
262
|
catch {
|
|
245
263
|
return { match: "rejected", message: error.body || "the service refused the request", issues: [] };
|
|
246
264
|
}
|
|
247
|
-
const parsed = ValidationFailureSchema.safeParse(raw);
|
|
248
265
|
if (!parsed.success)
|
|
249
266
|
return { match: "rejected", message: error.body, issues: [] };
|
|
250
267
|
return { match: "rejected", message: parsed.data.message, issues: parsed.data.issues };
|
|
@@ -263,7 +280,7 @@ export function createHttpKnowledgeClient(config) {
|
|
|
263
280
|
...policy,
|
|
264
281
|
method,
|
|
265
282
|
headers,
|
|
266
|
-
|
|
283
|
+
body: JSON.stringify(body),
|
|
267
284
|
});
|
|
268
285
|
if (result.isOk())
|
|
269
286
|
return result.value;
|
|
@@ -276,7 +293,7 @@ export function createHttpKnowledgeClient(config) {
|
|
|
276
293
|
async function lookup(path, schema, notFoundField) {
|
|
277
294
|
const answer = await call("GET", path, undefined, schema, notFoundField);
|
|
278
295
|
// A GET without a body has no pin, thus a 409 is not among its answers; the guard keeps the type honest.
|
|
279
|
-
if (
|
|
296
|
+
if (isSnapshotMismatchAnswer(answer)) {
|
|
280
297
|
return { match: "unavailable", reason: answer.message };
|
|
281
298
|
}
|
|
282
299
|
return answer;
|
|
@@ -284,18 +301,18 @@ export function createHttpKnowledgeClient(config) {
|
|
|
284
301
|
return {
|
|
285
302
|
recommend: (situation, responseFormat, preferences, expectedSnapshot) => call("POST", "/v1/recommend", {
|
|
286
303
|
situation,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
304
|
+
response_format: responseFormat,
|
|
305
|
+
preferences,
|
|
306
|
+
expected_snapshot: expectedSnapshot,
|
|
290
307
|
}, RecommendResponseSchema),
|
|
291
|
-
check: (situation, steps, expectedSnapshot) => call("POST", "/v1/check", { situation, steps,
|
|
308
|
+
check: (situation, steps, expectedSnapshot) => call("POST", "/v1/check", { situation, steps, expected_snapshot: expectedSnapshot }, CheckResponseSchema),
|
|
292
309
|
render: (template, slots, farm, options) => call("POST", "/v1/template/render", {
|
|
293
310
|
template,
|
|
294
311
|
slots,
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
312
|
+
farm,
|
|
313
|
+
step: options?.step,
|
|
314
|
+
claims: options?.claims,
|
|
315
|
+
expected_snapshot: options?.expectedSnapshot,
|
|
299
316
|
}, RenderResponseSchema),
|
|
300
317
|
contract: (template) => lookup(`/v1/templates/${encodeURIComponent(templateIdOf(template))}`, TemplateContractSchema, "template"),
|
|
301
318
|
};
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
* fills a gap and never names a path it did not read.
|
|
21
21
|
*/
|
|
22
22
|
import type { FarmPackage, RecommendResponse } from "./client.js";
|
|
23
|
-
export
|
|
23
|
+
export type EnvironmentPaths = {
|
|
24
24
|
/** Host path of the farm `inflexa.lock`. Absent, the packages read as unknown. */
|
|
25
25
|
readonly farmLockFile?: string;
|
|
26
26
|
/** Host path of the `image-packages.json` of the store. Absent, the packages the image ships are unknown. */
|
|
27
27
|
readonly imagePackagesFile?: string;
|
|
28
28
|
/** Host path of the reference store. Absent, the collection reads as unknown. */
|
|
29
29
|
readonly refStorePath?: string;
|
|
30
|
-
}
|
|
31
|
-
export
|
|
30
|
+
};
|
|
31
|
+
export type StepEnvironment = {
|
|
32
32
|
readonly package?: {
|
|
33
33
|
readonly name: string;
|
|
34
34
|
readonly present: boolean;
|
|
@@ -40,14 +40,14 @@ export interface StepEnvironment {
|
|
|
40
40
|
readonly path?: string;
|
|
41
41
|
readonly title?: string;
|
|
42
42
|
};
|
|
43
|
-
}
|
|
43
|
+
};
|
|
44
44
|
/** Where each fact of the environment came from: a record the host read, or nothing. */
|
|
45
|
-
export
|
|
45
|
+
export type EnvironmentSource = {
|
|
46
46
|
readonly farm: "lock" | "unknown";
|
|
47
47
|
/** `record` when the store carries the `image-packages.json` of the sandbox image. */
|
|
48
48
|
readonly image: "record" | "unknown";
|
|
49
49
|
readonly references: "store" | "unknown";
|
|
50
|
-
}
|
|
50
|
+
};
|
|
51
51
|
/** The recommend answer with an `environment` per step. */
|
|
52
52
|
export type RecommendWithEnvironment = RecommendResponse & {
|
|
53
53
|
readonly environment_source?: EnvironmentSource;
|
|
@@ -54,10 +54,21 @@ export function installedPackages(paths) {
|
|
|
54
54
|
return { packages, farm: lock ? "lock" : "unknown", image: record ? "record" : "unknown" };
|
|
55
55
|
}
|
|
56
56
|
function tokens(text) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const tokens = [];
|
|
58
|
+
let token = "";
|
|
59
|
+
const flush = () => {
|
|
60
|
+
if (token.length > 1)
|
|
61
|
+
tokens.push(token);
|
|
62
|
+
token = "";
|
|
63
|
+
};
|
|
64
|
+
for (const char of text.toLowerCase()) {
|
|
65
|
+
if ((char >= "a" && char <= "z") || (char >= "0" && char <= "9"))
|
|
66
|
+
token += char;
|
|
67
|
+
else
|
|
68
|
+
flush();
|
|
69
|
+
}
|
|
70
|
+
flush();
|
|
71
|
+
return tokens;
|
|
61
72
|
}
|
|
62
73
|
/** A collection term of the tree (`msigdb_hallmark_human`) matches an entry whose labels hold every token of the term. */
|
|
63
74
|
function findCollection(term, entries) {
|
|
@@ -83,7 +94,7 @@ export async function joinEnvironment(answer, paths) {
|
|
|
83
94
|
const pkg = step.package;
|
|
84
95
|
if (pkg && farm) {
|
|
85
96
|
const version = farm.get(pkg.name.toLowerCase());
|
|
86
|
-
environment.package = { name: pkg.name, present: version !== undefined,
|
|
97
|
+
environment.package = { name: pkg.name, present: version !== undefined, version };
|
|
87
98
|
}
|
|
88
99
|
const collection = step.parameters?.find((parameter) => parameter.name === "gene_set_collection");
|
|
89
100
|
if (collection && typeof collection.value === "string" && entries) {
|
|
@@ -91,8 +102,8 @@ export async function joinEnvironment(answer, paths) {
|
|
|
91
102
|
environment.collection = {
|
|
92
103
|
name: collection.value,
|
|
93
104
|
present: found !== undefined,
|
|
94
|
-
|
|
95
|
-
|
|
105
|
+
path: found?.path,
|
|
106
|
+
title: found?.metadata?.title,
|
|
96
107
|
};
|
|
97
108
|
}
|
|
98
109
|
return Object.keys(environment).length > 0 ? { ...step, environment } : step;
|
|
@@ -21,7 +21,7 @@ export * from "./check.js";
|
|
|
21
21
|
export * from "./recommend.js";
|
|
22
22
|
export * from "./situation.js";
|
|
23
23
|
export * from "./template.js";
|
|
24
|
-
export
|
|
24
|
+
export type KnowledgeToolsDeps = {
|
|
25
25
|
readonly client?: KnowledgeClient;
|
|
26
26
|
/** Host path of the farm `inflexa.lock`, or its resolver for each analysis, for the environment join of the recommend answer. */
|
|
27
27
|
readonly farmLockFile?: EnvironmentStorePaths["farmLockFile"];
|
|
@@ -31,7 +31,7 @@ export interface KnowledgeToolsDeps {
|
|
|
31
31
|
readonly refStorePath?: string;
|
|
32
32
|
/** Receives each recommend answer the planner sees; see `KnowledgeRecommendDeps.onAnswer`. */
|
|
33
33
|
readonly onRecommend?: KnowledgeRecommendDeps["onAnswer"];
|
|
34
|
-
}
|
|
34
|
+
};
|
|
35
35
|
/**
|
|
36
36
|
* The planner tools: `knowledge_recommend` and `knowledge_check`, or an empty
|
|
37
37
|
* list with no client. The two share one pin: the first recommend answer
|
|
@@ -35,24 +35,24 @@ export function createKnowledgeTools(deps) {
|
|
|
35
35
|
createKnowledgeRecommendTool({
|
|
36
36
|
client: deps.client,
|
|
37
37
|
pin,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
farmLockFile: deps.farmLockFile,
|
|
39
|
+
imagePackagesFile: deps.imagePackagesFile,
|
|
40
|
+
refStorePath: deps.refStorePath,
|
|
41
|
+
onAnswer: deps.onRecommend,
|
|
42
42
|
}),
|
|
43
43
|
createKnowledgeCheckTool({ client: deps.client, pin }),
|
|
44
44
|
];
|
|
45
45
|
}
|
|
46
46
|
/** A client that answers nothing: the definitions of the tools do not depend on the answers. */
|
|
47
47
|
const NO_CLIENT = {
|
|
48
|
-
recommend:
|
|
49
|
-
check:
|
|
50
|
-
render:
|
|
51
|
-
contract:
|
|
48
|
+
recommend: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
|
|
49
|
+
check: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
|
|
50
|
+
render: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
|
|
51
|
+
contract: () => Promise.resolve({ match: "unavailable", reason: "no service" }),
|
|
52
52
|
};
|
|
53
53
|
/** A mutator that writes nothing: the definition of the template tool does not depend on the workspace. */
|
|
54
54
|
const NO_MUTATOR = {
|
|
55
|
-
writeFile:
|
|
55
|
+
writeFile: ({ path }) => Promise.resolve({ status: "out_of_scope", path }),
|
|
56
56
|
recordWrite: () => undefined,
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
@@ -15,13 +15,13 @@ import type { TemplateParameter } from "./client.js";
|
|
|
15
15
|
/** A slot value: a scalar, or a list of strings. */
|
|
16
16
|
export type LocalSlotValue = string | number | boolean | readonly string[];
|
|
17
17
|
/** One refusal of a local value, in the shape of a render rejection issue. */
|
|
18
|
-
export
|
|
18
|
+
export type LocalSlotIssue = {
|
|
19
19
|
readonly slot: string;
|
|
20
20
|
readonly reason: string;
|
|
21
21
|
readonly permitted?: readonly string[];
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
/** One bound slot as the decision record keeps it: the value, its source, and the lines that carried its marker. */
|
|
24
|
-
export
|
|
24
|
+
export type BoundLocalSlot = {
|
|
25
25
|
readonly name: string;
|
|
26
26
|
readonly value: LocalSlotValue;
|
|
27
27
|
readonly source: "caller" | "default";
|
|
@@ -30,7 +30,7 @@ export interface BoundLocalSlot {
|
|
|
30
30
|
readonly lines: readonly number[];
|
|
31
31
|
/** The `read` flag the service computed for the slot on the marked render, when it has a `when` condition. */
|
|
32
32
|
readonly read?: boolean;
|
|
33
|
-
}
|
|
33
|
+
};
|
|
34
34
|
export type BindLocalSlotsResult = {
|
|
35
35
|
readonly ok: false;
|
|
36
36
|
readonly issues: readonly LocalSlotIssue[];
|
|
@@ -11,10 +11,14 @@
|
|
|
11
11
|
* service for the same values. Keep the literal rules in step with the
|
|
12
12
|
* service when a slot type is added.
|
|
13
13
|
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
/** The contract of a validated local slot value, as `validateLocalSlot` accepts it. */
|
|
16
|
+
const LocalSlotValueSchema = z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]);
|
|
14
17
|
/** The local slots of a contract, in the order the template declares them. */
|
|
15
18
|
export function localParameters(parameters) {
|
|
16
19
|
return parameters.filter((parameter) => parameter.local === true);
|
|
17
20
|
}
|
|
21
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- a formula starts with ~ and holds only formula name characters; the shape is the slot contract.
|
|
18
22
|
const FORMULA_PATTERN = /^~\s*[A-Za-z0-9_.+*:()\s-]+$/;
|
|
19
23
|
/** Check one caller value against the contract of its slot, as the renderer of the service does. */
|
|
20
24
|
export function validateLocalSlot(parameter, value) {
|
|
@@ -29,6 +33,7 @@ export function validateLocalSlot(parameter, value) {
|
|
|
29
33
|
return { slot, reason: "a formula must start with ~ and hold only names, +, :, *, and parentheses" };
|
|
30
34
|
if (permitted && !permitted.includes(value))
|
|
31
35
|
return { slot, reason: `the value "${value}" is not permitted`, permitted };
|
|
36
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the pattern arrives as contract data from the template author, not from this module.
|
|
32
37
|
if (parameter.pattern && !new RegExp(parameter.pattern).test(value))
|
|
33
38
|
return { slot, reason: `the value must match ${parameter.pattern}` };
|
|
34
39
|
return undefined;
|
|
@@ -135,7 +140,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
|
|
|
135
140
|
continue;
|
|
136
141
|
}
|
|
137
142
|
// Validated above: a string, a finite number, a boolean, or a list of strings.
|
|
138
|
-
const value = given;
|
|
143
|
+
const value = LocalSlotValueSchema.parse(given);
|
|
139
144
|
values.set(parameter.name, value);
|
|
140
145
|
slots.push({ name: parameter.name, value, source: "caller", adaptable: true, lines: [] });
|
|
141
146
|
}
|
|
@@ -149,7 +154,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
|
|
|
149
154
|
value,
|
|
150
155
|
source: "default",
|
|
151
156
|
adaptable: true,
|
|
152
|
-
|
|
157
|
+
default_source: parameter.default_source,
|
|
153
158
|
lines: [],
|
|
154
159
|
});
|
|
155
160
|
}
|
|
@@ -159,7 +164,9 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
|
|
|
159
164
|
}
|
|
160
165
|
if (issues.length > 0)
|
|
161
166
|
return { ok: false, issues };
|
|
162
|
-
const bound =
|
|
167
|
+
const bound =
|
|
168
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the {{name}} placeholders are the template grammar of the contract; the capture names the slot to bind.
|
|
169
|
+
script.replace(/\{\{([a-z][a-z0-9_]*)\}\}/g, (whole, name) => {
|
|
163
170
|
const parameter = byName.get(name);
|
|
164
171
|
if (!parameter)
|
|
165
172
|
return whole;
|
|
@@ -171,7 +178,7 @@ export function bindLocalSlots(template, script, localValues, marked = []) {
|
|
|
171
178
|
const located = slots.map((entry) => ({
|
|
172
179
|
...entry,
|
|
173
180
|
lines: script.split("\n").flatMap((line, index) => (line.includes(slotMarker(entry.name)) && index < lines.length ? [index + 1] : [])),
|
|
174
|
-
|
|
181
|
+
read: readByName.get(entry.name),
|
|
175
182
|
}));
|
|
176
183
|
return { ok: true, script: bound, slots: located };
|
|
177
184
|
}
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* moved to another release between two calls then refuses the call, and the
|
|
6
6
|
* plan never mixes two releases in silence.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export type SnapshotPin = {
|
|
9
9
|
/** The pinned release digest, or `undefined` before the first answer. */
|
|
10
10
|
get(): string | undefined;
|
|
11
11
|
/** Pin the release of the first answer. A later call with another digest changes nothing: the first release is the plan's. */
|
|
12
12
|
set(digest: string): void;
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
export declare function createSnapshotPin(): SnapshotPin;
|