@inflexa-ai/harness 0.45.0 → 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 +19 -3
- package/dist/agents/conversation-agent.js +49 -30
- 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 +35 -16
- package/dist/agents/sandbox/shared.js +63 -24
- package/dist/agents/sandbox/translational-safety-agent.js +26 -0
- package/dist/agents/sandbox/types.d.ts +26 -3
- 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 +16 -2
- package/dist/agents/sandbox-catalog.js +22 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/approve-plan.d.ts +5 -2
- package/dist/app/approve-plan.js +1 -1
- 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 +125 -99
- 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 +10 -8
- 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 +46 -22
- package/dist/contracts/chat-events.js +1 -1
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +67 -40
- 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 +3 -3
- 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 +45 -6
- package/dist/contracts/schemas/chat-events.js +16 -0
- package/dist/contracts/schemas/chat-parts.d.ts +214 -102
- package/dist/contracts/schemas/chat-parts.js +50 -7
- package/dist/contracts/schemas/index.d.ts +1 -1
- package/dist/contracts/schemas/index.js +1 -1
- 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 +7 -6
- package/dist/execution/dbos-workflow-purger.js +29 -21
- 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 +39 -17
- package/dist/execution/run-canceler.js +137 -28
- package/dist/execution/run-end-record.d.ts +29 -0
- package/dist/execution/run-end-record.js +27 -0
- 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 +25 -24
- package/dist/index.js +36 -37
- 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 +14 -9
- package/dist/loop/compaction.js +17 -0
- 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 +34 -37
- 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 -6
- package/dist/memory/conversation-display-recorder.js +64 -20
- 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 +66 -24
- package/dist/memory/thread-history.js +212 -79
- 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 +63 -9
- package/dist/prompts/briefing.js +130 -3
- package/dist/prompts/planner.js +13 -2
- 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 +24 -19
- package/dist/provenance/seam.js +7 -5
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +303 -458
- 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 +59 -92
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +166 -10
- 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 +209 -231
- 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.d.ts +26 -4
- package/dist/sandbox/image-packages.js +29 -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 +351 -306
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +79 -25
- package/dist/schemas/plan-schemas.js +1 -1
- 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 +127 -14
- package/dist/schemas/workflow-state.js +56 -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 +47 -18
- package/dist/state/artifacts.js +48 -7
- 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 +5 -5
- package/dist/state/index.js +3 -3
- 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 +70 -25
- package/dist/state/runs.js +127 -64
- 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 +29 -8
- package/dist/state/step-executions.js +28 -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 +11 -9
- package/dist/tools/ad-hoc-router.js +80 -51
- 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 +40 -0
- package/dist/tools/capability-data.js +74 -0
- 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 +54 -17
- package/dist/tools/execute-analysis.js +193 -62
- package/dist/tools/knowledge/check.d.ts +182 -0
- package/dist/tools/knowledge/check.js +94 -0
- package/dist/tools/knowledge/client.d.ts +351 -0
- package/dist/tools/knowledge/client.js +319 -0
- package/dist/tools/knowledge/environment.d.ts +78 -0
- package/dist/tools/knowledge/environment.js +116 -0
- package/dist/tools/knowledge/index.d.ts +49 -0
- package/dist/tools/knowledge/index.js +70 -0
- package/dist/tools/knowledge/local-slots.d.ts +62 -0
- package/dist/tools/knowledge/local-slots.js +184 -0
- package/dist/tools/knowledge/pin.d.ts +14 -0
- package/dist/tools/knowledge/pin.js +17 -0
- package/dist/tools/knowledge/recommend.d.ts +67 -0
- package/dist/tools/knowledge/recommend.js +106 -0
- package/dist/tools/knowledge/situation.d.ts +143 -0
- package/dist/tools/knowledge/situation.js +157 -0
- package/dist/tools/knowledge/skeleton.d.ts +69 -0
- package/dist/tools/knowledge/skeleton.js +201 -0
- package/dist/tools/knowledge/template.d.ts +139 -0
- package/dist/tools/knowledge/template.js +273 -0
- 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 +39 -16
- package/dist/tools/research/generate-plan.js +565 -338
- package/dist/tools/research/guarded-address.d.ts +20 -0
- package/dist/tools/research/guarded-address.js +149 -0
- 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 +40 -0
- package/dist/tools/research/searxng-engine.js +122 -0
- package/dist/tools/research/web-fetch.d.ts +127 -0
- package/dist/tools/research/web-fetch.js +618 -0
- package/dist/tools/research/web-search.d.ts +84 -0
- package/dist/tools/research/web-search.js +117 -0
- 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 +24 -12
- package/dist/tools/sandbox/list-available-packages.js +43 -29
- package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
- package/dist/tools/sandbox/list-available-refs.js +119 -37
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +22 -68
- 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 +14 -0
- package/dist/tools/terminal-text.js +51 -0
- package/dist/tools/workspace/decision-record.d.ts +81 -0
- package/dist/tools/workspace/decision-record.js +127 -0
- package/dist/tools/workspace/edit-file.d.ts +59 -18
- package/dist/tools/workspace/edit-file.js +98 -15
- package/dist/tools/workspace/execute-command.d.ts +31 -12
- package/dist/tools/workspace/execute-command.js +37 -8
- 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/index.d.ts +1 -0
- package/dist/tools/workspace/index.js +1 -0
- 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 +100 -76
- package/dist/workflows/execute-analysis.js +380 -247
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +50 -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 +25 -22
- 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 -236
- package/dist/loop/run-agent.js +0 -1110
- 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 -90
- 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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The local slots of a template: the slots whose value is a fact of the
|
|
3
|
+
* machine (a path, a column name, a level label, a design formula). The
|
|
4
|
+
* service renders such a slot as its marker `{{name}}` and never sees its
|
|
5
|
+
* value; the host binds the value here, after the render and before the
|
|
6
|
+
* write, thus the value never leaves the machine.
|
|
7
|
+
*
|
|
8
|
+
* `bindLocalSlots` is a copy of the reference implementation the knowledge
|
|
9
|
+
* service exports (`src/render/render.ts` of the service). The two must give
|
|
10
|
+
* the same bytes: a marked render bound here equals a full render of the
|
|
11
|
+
* service for the same values. Keep the literal rules in step with the
|
|
12
|
+
* service when a slot type is added.
|
|
13
|
+
*/
|
|
14
|
+
import type { TemplateParameter } from "./client.js";
|
|
15
|
+
/** A slot value: a scalar, or a list of strings. */
|
|
16
|
+
export type LocalSlotValue = string | number | boolean | readonly string[];
|
|
17
|
+
/** One refusal of a local value, in the shape of a render rejection issue. */
|
|
18
|
+
export type LocalSlotIssue = {
|
|
19
|
+
readonly slot: string;
|
|
20
|
+
readonly reason: string;
|
|
21
|
+
readonly permitted?: readonly string[];
|
|
22
|
+
};
|
|
23
|
+
/** One bound slot as the decision record keeps it: the value, its source, and the lines that carried its marker. */
|
|
24
|
+
export type BoundLocalSlot = {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly value: LocalSlotValue;
|
|
27
|
+
readonly source: "caller" | "default";
|
|
28
|
+
readonly adaptable: true;
|
|
29
|
+
readonly default_source?: string;
|
|
30
|
+
readonly lines: readonly number[];
|
|
31
|
+
/** The `read` flag the service computed for the slot on the marked render, when it has a `when` condition. */
|
|
32
|
+
readonly read?: boolean;
|
|
33
|
+
};
|
|
34
|
+
export type BindLocalSlotsResult = {
|
|
35
|
+
readonly ok: false;
|
|
36
|
+
readonly issues: readonly LocalSlotIssue[];
|
|
37
|
+
} | {
|
|
38
|
+
readonly ok: true;
|
|
39
|
+
readonly script: string;
|
|
40
|
+
readonly slots: readonly BoundLocalSlot[];
|
|
41
|
+
};
|
|
42
|
+
/** The local slots of a contract, in the order the template declares them. */
|
|
43
|
+
export declare function localParameters(parameters: readonly TemplateParameter[]): TemplateParameter[];
|
|
44
|
+
/** Check one caller value against the contract of its slot, as the renderer of the service does. */
|
|
45
|
+
export declare function validateLocalSlot(parameter: TemplateParameter, value: unknown): LocalSlotIssue | undefined;
|
|
46
|
+
/** The marker of a slot as the service leaves it in a marked render. */
|
|
47
|
+
export declare function slotMarker(name: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Bind the local values into a marked script. Each local marker takes the
|
|
50
|
+
* literal of its value, else of the default of the slot, else the absent
|
|
51
|
+
* literal when the slot is optional. A required local slot with no value
|
|
52
|
+
* and no default is an issue, and so is a value the contract refuses. The
|
|
53
|
+
* report names the source of each bound slot and keeps the `read` flag of
|
|
54
|
+
* the marked report of the service.
|
|
55
|
+
*/
|
|
56
|
+
export declare function bindLocalSlots(template: {
|
|
57
|
+
readonly language: string;
|
|
58
|
+
readonly parameters: readonly TemplateParameter[];
|
|
59
|
+
}, script: string, localValues: Readonly<Record<string, unknown>>, marked?: readonly {
|
|
60
|
+
readonly name: string;
|
|
61
|
+
readonly read?: boolean;
|
|
62
|
+
}[]): BindLocalSlotsResult;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The local slots of a template: the slots whose value is a fact of the
|
|
3
|
+
* machine (a path, a column name, a level label, a design formula). The
|
|
4
|
+
* service renders such a slot as its marker `{{name}}` and never sees its
|
|
5
|
+
* value; the host binds the value here, after the render and before the
|
|
6
|
+
* write, thus the value never leaves the machine.
|
|
7
|
+
*
|
|
8
|
+
* `bindLocalSlots` is a copy of the reference implementation the knowledge
|
|
9
|
+
* service exports (`src/render/render.ts` of the service). The two must give
|
|
10
|
+
* the same bytes: a marked render bound here equals a full render of the
|
|
11
|
+
* service for the same values. Keep the literal rules in step with the
|
|
12
|
+
* service when a slot type is added.
|
|
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())]);
|
|
17
|
+
/** The local slots of a contract, in the order the template declares them. */
|
|
18
|
+
export function localParameters(parameters) {
|
|
19
|
+
return parameters.filter((parameter) => parameter.local === true);
|
|
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.
|
|
22
|
+
const FORMULA_PATTERN = /^~\s*[A-Za-z0-9_.+*:()\s-]+$/;
|
|
23
|
+
/** Check one caller value against the contract of its slot, as the renderer of the service does. */
|
|
24
|
+
export function validateLocalSlot(parameter, value) {
|
|
25
|
+
const slot = parameter.name;
|
|
26
|
+
const permitted = parameter.enum;
|
|
27
|
+
switch (parameter.type) {
|
|
28
|
+
case "string":
|
|
29
|
+
case "formula": {
|
|
30
|
+
if (typeof value !== "string" || value.length === 0)
|
|
31
|
+
return { slot, reason: "a non-empty string is required" };
|
|
32
|
+
if (parameter.type === "formula" && !FORMULA_PATTERN.test(value))
|
|
33
|
+
return { slot, reason: "a formula must start with ~ and hold only names, +, :, *, and parentheses" };
|
|
34
|
+
if (permitted && !permitted.includes(value))
|
|
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.
|
|
37
|
+
if (parameter.pattern && !new RegExp(parameter.pattern).test(value))
|
|
38
|
+
return { slot, reason: `the value must match ${parameter.pattern}` };
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
case "number":
|
|
42
|
+
case "integer": {
|
|
43
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
44
|
+
return { slot, reason: "a number is required" };
|
|
45
|
+
if (parameter.type === "integer" && !Number.isInteger(value))
|
|
46
|
+
return { slot, reason: "an integer is required" };
|
|
47
|
+
if (parameter.minimum !== undefined && value < parameter.minimum)
|
|
48
|
+
return { slot, reason: `the value must be at least ${parameter.minimum}` };
|
|
49
|
+
if (parameter.maximum !== undefined && value > parameter.maximum)
|
|
50
|
+
return { slot, reason: `the value must be at most ${parameter.maximum}` };
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
case "boolean":
|
|
54
|
+
return typeof value === "boolean" ? undefined : { slot, reason: "a boolean is required" };
|
|
55
|
+
case "string_list": {
|
|
56
|
+
if (!Array.isArray(value) || !value.every((item) => typeof item === "string"))
|
|
57
|
+
return { slot, reason: "a list of strings is required" };
|
|
58
|
+
if (permitted) {
|
|
59
|
+
const bad = value.find((item) => !permitted.includes(item));
|
|
60
|
+
if (bad !== undefined)
|
|
61
|
+
return { slot, reason: `the value "${bad}" is not permitted`, permitted };
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
default:
|
|
66
|
+
// The contract is a loose object of the wire, thus a type this host does not know is possible. It is
|
|
67
|
+
// refused, never rendered as text, because a wrong literal is a wrong script.
|
|
68
|
+
return { slot, reason: `the slot type ${parameter.type} is not one this host renders` };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** A slot value as a literal of the language: R gives `TRUE` and `c(...)`, Python gives `True` and `[...]`. */
|
|
72
|
+
function literal(language, parameter, value) {
|
|
73
|
+
const python = language === "python";
|
|
74
|
+
switch (parameter.type) {
|
|
75
|
+
case "string":
|
|
76
|
+
return JSON.stringify(String(value));
|
|
77
|
+
case "formula":
|
|
78
|
+
return String(value);
|
|
79
|
+
case "number":
|
|
80
|
+
case "integer":
|
|
81
|
+
return String(value);
|
|
82
|
+
case "boolean":
|
|
83
|
+
return python ? (value ? "True" : "False") : value ? "TRUE" : "FALSE";
|
|
84
|
+
case "string_list": {
|
|
85
|
+
const items = Array.isArray(value) ? value : [String(value)];
|
|
86
|
+
const rendered = items.map((item) => JSON.stringify(String(item))).join(", ");
|
|
87
|
+
return python ? `[${rendered}]` : `c(${rendered})`;
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
throw new Error(`unhandled slot type: ${parameter.type}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** The literal of an optional slot that has no value: R keeps the type of the slot, Python has one absent scalar and an empty list. */
|
|
94
|
+
function absentLiteral(language, type) {
|
|
95
|
+
if (language === "python")
|
|
96
|
+
return type === "string_list" ? "[]" : "None";
|
|
97
|
+
switch (type) {
|
|
98
|
+
case "string":
|
|
99
|
+
return "NA_character_";
|
|
100
|
+
case "integer":
|
|
101
|
+
return "NA_integer_";
|
|
102
|
+
case "number":
|
|
103
|
+
return "NA_real_";
|
|
104
|
+
case "boolean":
|
|
105
|
+
return "NA";
|
|
106
|
+
case "string_list":
|
|
107
|
+
return "character(0)";
|
|
108
|
+
default:
|
|
109
|
+
return "NULL";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** The marker of a slot as the service leaves it in a marked render. */
|
|
113
|
+
export function slotMarker(name) {
|
|
114
|
+
return `{{${name}}}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Bind the local values into a marked script. Each local marker takes the
|
|
118
|
+
* literal of its value, else of the default of the slot, else the absent
|
|
119
|
+
* literal when the slot is optional. A required local slot with no value
|
|
120
|
+
* and no default is an issue, and so is a value the contract refuses. The
|
|
121
|
+
* report names the source of each bound slot and keeps the `read` flag of
|
|
122
|
+
* the marked report of the service.
|
|
123
|
+
*/
|
|
124
|
+
export function bindLocalSlots(template, script, localValues, marked = []) {
|
|
125
|
+
const issues = [];
|
|
126
|
+
const locals = localParameters(template.parameters);
|
|
127
|
+
const byName = new Map(locals.map((parameter) => [parameter.name, parameter]));
|
|
128
|
+
for (const name of Object.keys(localValues)) {
|
|
129
|
+
if (!byName.has(name))
|
|
130
|
+
issues.push({ slot: name, reason: "the template has no such local slot", permitted: [...byName.keys()] });
|
|
131
|
+
}
|
|
132
|
+
const values = new Map();
|
|
133
|
+
const slots = [];
|
|
134
|
+
for (const parameter of locals) {
|
|
135
|
+
const given = localValues[parameter.name];
|
|
136
|
+
if (given !== undefined) {
|
|
137
|
+
const issue = validateLocalSlot(parameter, given);
|
|
138
|
+
if (issue) {
|
|
139
|
+
issues.push(issue);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Validated above: a string, a finite number, a boolean, or a list of strings.
|
|
143
|
+
const value = LocalSlotValueSchema.parse(given);
|
|
144
|
+
values.set(parameter.name, value);
|
|
145
|
+
slots.push({ name: parameter.name, value, source: "caller", adaptable: true, lines: [] });
|
|
146
|
+
}
|
|
147
|
+
else if (parameter.default !== undefined) {
|
|
148
|
+
// The contract is loose on the wire; a default is a scalar or a list of strings by the contract of the service,
|
|
149
|
+
// and the service renders whatever it holds, thus only an absent default is absent here too.
|
|
150
|
+
const value = parameter.default;
|
|
151
|
+
values.set(parameter.name, value);
|
|
152
|
+
slots.push({
|
|
153
|
+
name: parameter.name,
|
|
154
|
+
value,
|
|
155
|
+
source: "default",
|
|
156
|
+
adaptable: true,
|
|
157
|
+
default_source: parameter.default_source,
|
|
158
|
+
lines: [],
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else if (parameter.required !== false) {
|
|
162
|
+
issues.push({ slot: parameter.name, reason: "the local slot is required and has no value" });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (issues.length > 0)
|
|
166
|
+
return { ok: false, issues };
|
|
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) => {
|
|
170
|
+
const parameter = byName.get(name);
|
|
171
|
+
if (!parameter)
|
|
172
|
+
return whole;
|
|
173
|
+
const value = values.get(name);
|
|
174
|
+
return value === undefined ? absentLiteral(template.language, parameter.type) : literal(template.language, parameter, value);
|
|
175
|
+
});
|
|
176
|
+
const lines = bound.split("\n");
|
|
177
|
+
const readByName = new Map(marked.flatMap((entry) => (entry.read === undefined ? [] : [[entry.name, entry.read]])));
|
|
178
|
+
const located = slots.map((entry) => ({
|
|
179
|
+
...entry,
|
|
180
|
+
lines: script.split("\n").flatMap((line, index) => (line.includes(slotMarker(entry.name)) && index < lines.length ? [index + 1] : [])),
|
|
181
|
+
read: readByName.get(entry.name),
|
|
182
|
+
}));
|
|
183
|
+
return { ok: true, script: bound, slots: located };
|
|
184
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release a plan pins. The planner tools of one plan generation share
|
|
3
|
+
* one pin: the first recommend answer sets it, and every later call of the
|
|
4
|
+
* service inside that plan carries it as `expected_snapshot`. A service that
|
|
5
|
+
* moved to another release between two calls then refuses the call, and the
|
|
6
|
+
* plan never mixes two releases in silence.
|
|
7
|
+
*/
|
|
8
|
+
export type SnapshotPin = {
|
|
9
|
+
/** The pinned release digest, or `undefined` before the first answer. */
|
|
10
|
+
get(): string | undefined;
|
|
11
|
+
/** Pin the release of the first answer. A later call with another digest changes nothing: the first release is the plan's. */
|
|
12
|
+
set(digest: string): void;
|
|
13
|
+
};
|
|
14
|
+
export declare function createSnapshotPin(): SnapshotPin;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release a plan pins. The planner tools of one plan generation share
|
|
3
|
+
* one pin: the first recommend answer sets it, and every later call of the
|
|
4
|
+
* service inside that plan carries it as `expected_snapshot`. A service that
|
|
5
|
+
* moved to another release between two calls then refuses the call, and the
|
|
6
|
+
* plan never mixes two releases in silence.
|
|
7
|
+
*/
|
|
8
|
+
export function createSnapshotPin() {
|
|
9
|
+
let pinned;
|
|
10
|
+
return {
|
|
11
|
+
get: () => pinned,
|
|
12
|
+
set: (digest) => {
|
|
13
|
+
if (pinned === undefined)
|
|
14
|
+
pinned = digest;
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `knowledge_recommend` — one typed situation in, one plan skeleton out.
|
|
3
|
+
*
|
|
4
|
+
* The description is the whole contract with the planner: when to call, what
|
|
5
|
+
* to send, and where the answer goes (the `grounding` field of each method
|
|
6
|
+
* step). No prompt names this tool. Whether a model calls it from the
|
|
7
|
+
* description alone is a Phase 0 measurement.
|
|
8
|
+
*
|
|
9
|
+
* The model receives one representation. The procedure of the service is
|
|
10
|
+
* folded into `plan_skeleton` (the shape `submit_plan` accepts), and the
|
|
11
|
+
* claims ride beside it, cited by id from the steps. The procedure itself
|
|
12
|
+
* stays out of the tool result: the same fact would otherwise reach the
|
|
13
|
+
* model three times, as a procedure step, as a claim view, and as a skeleton
|
|
14
|
+
* step.
|
|
15
|
+
*/
|
|
16
|
+
import type { z } from "zod";
|
|
17
|
+
import type { EnvironmentStorePaths } from "../../config/environment-stores.js";
|
|
18
|
+
import { type Tool, type WithToolCallRecord } from "../define-tool.js";
|
|
19
|
+
import type { KnowledgeClient, KnowledgeRejected, KnowledgeSnapshotMismatch, KnowledgeUnavailable, RecommendResponse } from "./client.js";
|
|
20
|
+
import type { SnapshotPin } from "./pin.js";
|
|
21
|
+
import { type EnvironmentPaths, type RecommendWithEnvironment } from "./environment.js";
|
|
22
|
+
import { SituationFieldsSchema } from "./situation.js";
|
|
23
|
+
import { type SkeletonStep } from "./skeleton.js";
|
|
24
|
+
export type KnowledgeRecommendDeps = Omit<EnvironmentPaths, "farmLockFile"> & {
|
|
25
|
+
readonly client: KnowledgeClient;
|
|
26
|
+
/** Host path of the farm `inflexa.lock`, or its resolver for each analysis. Absent, the packages read as unknown. */
|
|
27
|
+
readonly farmLockFile?: EnvironmentStorePaths["farmLockFile"];
|
|
28
|
+
/**
|
|
29
|
+
* Receives each answer the planner saw, after the round of its call, on the
|
|
30
|
+
* first run and on each replay alike. The planner keeps the skeleton of the
|
|
31
|
+
* invocation, thus `submit_plan` can restore a grounding field that the
|
|
32
|
+
* model dropped when it copied a skeleton step.
|
|
33
|
+
*/
|
|
34
|
+
readonly onAnswer?: (answer: KnowledgeRecommendAnswer) => void;
|
|
35
|
+
/**
|
|
36
|
+
* The release of the plan. The first answer sets it after the round of its
|
|
37
|
+
* call, and each later call of this tool and of `knowledge_check` sends it,
|
|
38
|
+
* thus a service that moved to another release between two calls refuses
|
|
39
|
+
* instead of mixing releases.
|
|
40
|
+
*/
|
|
41
|
+
readonly pin?: SnapshotPin;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The model-facing answer of the tool: the skeleton and the claims, with the
|
|
45
|
+
* envelope of the service and the environment source. Never the procedure.
|
|
46
|
+
*/
|
|
47
|
+
export type KnowledgeRecommendAnswer = {
|
|
48
|
+
readonly match: RecommendResponse["match"];
|
|
49
|
+
readonly snapshot: RecommendResponse["snapshot"];
|
|
50
|
+
/** The situation as the service normalized it. */
|
|
51
|
+
readonly situation?: Readonly<Record<string, unknown>>;
|
|
52
|
+
readonly flags: RecommendResponse["flags"];
|
|
53
|
+
/** The step types a flag removed. Absent when none. */
|
|
54
|
+
dropped?: readonly string[];
|
|
55
|
+
readonly uncovered: readonly string[];
|
|
56
|
+
/** The step types whose method has no eligible template: covered by the knowledge, not by a vetted script. Absent when none. */
|
|
57
|
+
unrealized?: readonly string[];
|
|
58
|
+
readonly environment_source?: RecommendWithEnvironment["environment_source"];
|
|
59
|
+
readonly plan_skeleton: readonly SkeletonStep[];
|
|
60
|
+
readonly claims: RecommendResponse["claims"];
|
|
61
|
+
nearest?: RecommendResponse["nearest"];
|
|
62
|
+
reason?: string;
|
|
63
|
+
};
|
|
64
|
+
export type KnowledgeRecommendOutput = WithToolCallRecord<KnowledgeRecommendAnswer, KnowledgeRecommendAnswer> | KnowledgeUnavailable | KnowledgeRejected | KnowledgeSnapshotMismatch;
|
|
65
|
+
/** The one representation: the envelope, the skeleton, and the claims. The procedure stays host-side. */
|
|
66
|
+
export declare function toPlannerAnswer(joined: RecommendWithEnvironment): KnowledgeRecommendAnswer;
|
|
67
|
+
export declare function createKnowledgeRecommendTool(deps: KnowledgeRecommendDeps): Tool<z.infer<typeof SituationFieldsSchema>, KnowledgeRecommendOutput>;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `knowledge_recommend` — one typed situation in, one plan skeleton out.
|
|
3
|
+
*
|
|
4
|
+
* The description is the whole contract with the planner: when to call, what
|
|
5
|
+
* to send, and where the answer goes (the `grounding` field of each method
|
|
6
|
+
* step). No prompt names this tool. Whether a model calls it from the
|
|
7
|
+
* description alone is a Phase 0 measurement.
|
|
8
|
+
*
|
|
9
|
+
* The model receives one representation. The procedure of the service is
|
|
10
|
+
* folded into `plan_skeleton` (the shape `submit_plan` accepts), and the
|
|
11
|
+
* claims ride beside it, cited by id from the steps. The procedure itself
|
|
12
|
+
* stays out of the tool result: the same fact would otherwise reach the
|
|
13
|
+
* model three times, as a procedure step, as a claim view, and as a skeleton
|
|
14
|
+
* step.
|
|
15
|
+
*/
|
|
16
|
+
import { ok } from "neverthrow";
|
|
17
|
+
import { parseUnknownRecord } from "../../lib/unknown-containers.js";
|
|
18
|
+
import { defineTool, withToolCallRecord } from "../define-tool.js";
|
|
19
|
+
import { joinEnvironment } from "./environment.js";
|
|
20
|
+
import { SITUATION_EXAMPLE, SituationFieldsSchema, toPreferences, toSituation } from "./situation.js";
|
|
21
|
+
import { buildPlanSkeleton } from "./skeleton.js";
|
|
22
|
+
function stringList(value) {
|
|
23
|
+
return Array.isArray(value) ? value.flatMap((item) => (typeof item === "string" ? [item] : [])) : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** The one representation: the envelope, the skeleton, and the claims. The procedure stays host-side. */
|
|
26
|
+
export function toPlannerAnswer(joined) {
|
|
27
|
+
const answer = {
|
|
28
|
+
match: joined.match,
|
|
29
|
+
snapshot: joined.snapshot,
|
|
30
|
+
situation: parseUnknownRecord(joined.situation),
|
|
31
|
+
flags: joined.flags,
|
|
32
|
+
uncovered: joined.uncovered,
|
|
33
|
+
environment_source: joined.environment_source,
|
|
34
|
+
plan_skeleton: buildPlanSkeleton(joined),
|
|
35
|
+
claims: joined.claims,
|
|
36
|
+
};
|
|
37
|
+
const dropped = stringList(joined.dropped);
|
|
38
|
+
const unrealized = stringList(joined.unrealized);
|
|
39
|
+
if (dropped)
|
|
40
|
+
answer.dropped = dropped;
|
|
41
|
+
if (unrealized && unrealized.length > 0)
|
|
42
|
+
answer.unrealized = unrealized;
|
|
43
|
+
if (joined.nearest)
|
|
44
|
+
answer.nearest = joined.nearest;
|
|
45
|
+
if (joined.reason !== undefined)
|
|
46
|
+
answer.reason = joined.reason;
|
|
47
|
+
return answer;
|
|
48
|
+
}
|
|
49
|
+
export function createKnowledgeRecommendTool(deps) {
|
|
50
|
+
return defineTool({
|
|
51
|
+
id: "knowledge_recommend",
|
|
52
|
+
description: "Get the cited, versioned procedure for a bulk RNA-seq analysis situation from the Inflexa knowledge service, folded into plan steps: " +
|
|
53
|
+
"which method for each step (QC, filter, normalize, model, test, shrinkage, multiple testing, enrichment, report), " +
|
|
54
|
+
"its settings with their sources, a tested script template per step, the rules that select them, and the evidence. " +
|
|
55
|
+
"Call it BEFORE you draft a method step for bulk RNA-seq differential expression, enrichment, or QC. " +
|
|
56
|
+
"Fill the situation from the Data Context (the design, the replicate counts, the batch structure, the data state, the quality concerns); never send a sample name or a file path. " +
|
|
57
|
+
`Example input: ${SITUATION_EXAMPLE}. ` +
|
|
58
|
+
"The answer holds one representation: `plan_skeleton`, the plan steps with the id, the name, the track, the agent, the packages, the dependencies, " +
|
|
59
|
+
"the caveats, the `alternatives`, the `forbids`, the `disputed` sides, the `environment`, and the `grounding` " +
|
|
60
|
+
"(the status, the snapshot, the claim ids, the template, the `settings`, and the reason) filled. " +
|
|
61
|
+
"`claims` holds one view per claim id the steps cite; cite a claim by its id, and never copy its text into the plan. " +
|
|
62
|
+
"Read the answer this way. `match: applicable`: copy each skeleton step into `submit_plan` as it is, including `grounding.settings`, " +
|
|
63
|
+
"then add the question, the acceptance criteria, the resources, and the step budget from the data profile. " +
|
|
64
|
+
"A skeleton step is the vetted default, not the only permitted method. When the design or the question does not fit its method, plan the step with your method: " +
|
|
65
|
+
"set `grounding.status: ungrounded`, keep the snapshot digest, cite no claim, and give the reason for the departure in `grounding.reason`. A departure the plan states is not a fault; a silent one is. " +
|
|
66
|
+
"`match: flag`: a rule changes the outcome (for example no replication, or a batch confounded with the condition); " +
|
|
67
|
+
"the skeleton step carries `status: flagged`, the rule id in its reason, and the flag message as its first caveat; obey the flag `outcome`. " +
|
|
68
|
+
"`dropped` lists the steps the procedure removed, because a flag removed inference or because the script of the test runs no such step (the shrinkage of limma and edgeR); do not plan them. " +
|
|
69
|
+
"`unrealized` lists the steps whose method has no vetted script template for this design; the skeleton step keeps the method and the claims, its caveat names the gap, " +
|
|
70
|
+
"and the plan states that the step runs without a vetted template instead of an invented one. " +
|
|
71
|
+
"`match: none`: no rule covers the central step; plan that step from your own knowledge with `status: ungrounded` and the reason, and keep the skeleton steps the answer holds. " +
|
|
72
|
+
"`match: unavailable`: the service did not answer; plan as usual and set `status: ungrounded`. " +
|
|
73
|
+
"`match: rejected`: a field was invalid; the answer names the field and the permitted values, so correct the call once. " +
|
|
74
|
+
"A step with `disputed` sides: choose one side and state the choice in the step. " +
|
|
75
|
+
"The `alternatives` of a step are also vetted methods; `forbids` names the method ids the rules forbid for the step, and a forbidden method stays forbidden. " +
|
|
76
|
+
"A caveat is one of: a warn flag; a parameter conflict between two rules (the step omits that parameter, so state the value you choose and both rule ids); " +
|
|
77
|
+
"a substitution (the template runs a substitute of the method of record, and the step method, package, and template are the substitute; the plan states it); " +
|
|
78
|
+
"a language limit (the requested language has no template that realizes the method for this design, or its template refuses a value of the rules; the step keeps the named template, and the plan states the limit). " +
|
|
79
|
+
"A step carries `environment` when the host bound the stores: `package.present` and its version from the packages installed in the sandbox, and `collection.present` with its path in the reference store. " +
|
|
80
|
+
"That is the environment answer; do not call the listing tools for a package or a collection the answer already reports. " +
|
|
81
|
+
"Call it once per situation; a second call with the same situation gives the same answer.",
|
|
82
|
+
inputSchema: SituationFieldsSchema,
|
|
83
|
+
describeCall: ({ question, n_per_group_min, n_per_group_max, batch }) => `${question}: ${n_per_group_min}-${n_per_group_max} per group, batch ${batch}`,
|
|
84
|
+
describeResult: (_input, result) => result.match === "applicable" ? `${result.plan_skeleton.length} steps, ${result.claims.length} claims` : result.match,
|
|
85
|
+
execute: async (input, ctx) => {
|
|
86
|
+
const answer = await deps.client.recommend(toSituation(input), "concise", toPreferences(input), deps.pin?.get());
|
|
87
|
+
if (answer.match === "unavailable" || answer.match === "rejected" || answer.match === "snapshot_mismatch")
|
|
88
|
+
return ok(answer);
|
|
89
|
+
deps.pin?.set(answer.snapshot.digest);
|
|
90
|
+
const farmLockFile = typeof deps.farmLockFile === "function" ? deps.farmLockFile(ctx.session.scope.analysisId) : deps.farmLockFile;
|
|
91
|
+
const joined = await joinEnvironment(answer, {
|
|
92
|
+
farmLockFile,
|
|
93
|
+
imagePackagesFile: deps.imagePackagesFile,
|
|
94
|
+
refStorePath: deps.refStorePath,
|
|
95
|
+
});
|
|
96
|
+
const planner = toPlannerAnswer(joined);
|
|
97
|
+
// The answer rides as the call record too. The pin and the memory of the planner
|
|
98
|
+
// fold it after the round, thus a replay that returns the recorded result sets both.
|
|
99
|
+
return ok(withToolCallRecord(planner, planner));
|
|
100
|
+
},
|
|
101
|
+
foldCallRecord: (answer) => {
|
|
102
|
+
deps.pin?.set(answer.snapshot.digest);
|
|
103
|
+
deps.onAnswer?.(answer);
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The situation fields as a flat tool input. Each `.describe()` is the whole
|
|
3
|
+
* of what the model knows about a field, thus the descriptions carry the
|
|
4
|
+
* definitions of the terms, and they tell the planner where in the Data
|
|
5
|
+
* Context each value comes from.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import type { KnowledgeSituation, KnowledgePreferences } from "./client.js";
|
|
9
|
+
export declare const SituationFieldsSchema: z.ZodObject<{
|
|
10
|
+
question: z.ZodEnum<{
|
|
11
|
+
clustering: "clustering";
|
|
12
|
+
coexpression: "coexpression";
|
|
13
|
+
deconvolution: "deconvolution";
|
|
14
|
+
differential_expression: "differential_expression";
|
|
15
|
+
enrichment: "enrichment";
|
|
16
|
+
full_plan: "full_plan";
|
|
17
|
+
qc: "qc";
|
|
18
|
+
signature_scoring: "signature_scoring";
|
|
19
|
+
survival: "survival";
|
|
20
|
+
tf_activity: "tf_activity";
|
|
21
|
+
}>;
|
|
22
|
+
modality: z.ZodLiteral<"bulk_rna_seq">;
|
|
23
|
+
data_state: z.ZodEnum<{
|
|
24
|
+
counts: "counts";
|
|
25
|
+
fastq: "fastq";
|
|
26
|
+
log_normalized: "log_normalized";
|
|
27
|
+
tpm_or_fpkm: "tpm_or_fpkm";
|
|
28
|
+
}>;
|
|
29
|
+
count_source: z.ZodOptional<z.ZodEnum<{
|
|
30
|
+
kallisto: "kallisto";
|
|
31
|
+
rsem: "rsem";
|
|
32
|
+
salmon: "salmon";
|
|
33
|
+
star_featurecounts: "star_featurecounts";
|
|
34
|
+
unknown: "unknown";
|
|
35
|
+
}>>;
|
|
36
|
+
import_state: z.ZodOptional<z.ZodEnum<{
|
|
37
|
+
corrected_counts: "corrected_counts";
|
|
38
|
+
estimated_counts_with_lengths: "estimated_counts_with_lengths";
|
|
39
|
+
integer_counts: "integer_counts";
|
|
40
|
+
quantifications: "quantifications";
|
|
41
|
+
unknown: "unknown";
|
|
42
|
+
}>>;
|
|
43
|
+
organism: z.ZodEnum<{
|
|
44
|
+
human: "human";
|
|
45
|
+
mouse: "mouse";
|
|
46
|
+
other: "other";
|
|
47
|
+
}>;
|
|
48
|
+
n_groups: z.ZodNumber;
|
|
49
|
+
n_per_group_min: z.ZodNumber;
|
|
50
|
+
n_per_group_max: z.ZodNumber;
|
|
51
|
+
n_samples: z.ZodOptional<z.ZodNumber>;
|
|
52
|
+
n_events: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
paired: z.ZodBoolean;
|
|
54
|
+
blocking_factor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
55
|
+
cell_line: "cell_line";
|
|
56
|
+
individual: "individual";
|
|
57
|
+
litter: "litter";
|
|
58
|
+
other: "other";
|
|
59
|
+
pair: "pair";
|
|
60
|
+
site: "site";
|
|
61
|
+
}>>>;
|
|
62
|
+
block_structure: z.ZodOptional<z.ZodEnum<{
|
|
63
|
+
crossed: "crossed";
|
|
64
|
+
nested: "nested";
|
|
65
|
+
}>>;
|
|
66
|
+
batch: z.ZodEnum<{
|
|
67
|
+
known_balanced: "known_balanced";
|
|
68
|
+
known_confounded: "known_confounded";
|
|
69
|
+
known_unbalanced: "known_unbalanced";
|
|
70
|
+
none: "none";
|
|
71
|
+
suspected: "suspected";
|
|
72
|
+
}>;
|
|
73
|
+
covariates: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
74
|
+
age: "age";
|
|
75
|
+
clinical: "clinical";
|
|
76
|
+
other: "other";
|
|
77
|
+
sex: "sex";
|
|
78
|
+
technical: "technical";
|
|
79
|
+
}>>>;
|
|
80
|
+
n_timepoints: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
81
|
+
continuous_predictor: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
82
|
+
age: "age";
|
|
83
|
+
dose: "dose";
|
|
84
|
+
other: "other";
|
|
85
|
+
score: "score";
|
|
86
|
+
time: "time";
|
|
87
|
+
}>>>;
|
|
88
|
+
technical_replicates: z.ZodOptional<z.ZodBoolean>;
|
|
89
|
+
sample_exclusions: z.ZodOptional<z.ZodBoolean>;
|
|
90
|
+
feature_level: z.ZodOptional<z.ZodEnum<{
|
|
91
|
+
exon: "exon";
|
|
92
|
+
gene: "gene";
|
|
93
|
+
transcript: "transcript";
|
|
94
|
+
}>>;
|
|
95
|
+
library_type: z.ZodOptional<z.ZodEnum<{
|
|
96
|
+
polyA: "polyA";
|
|
97
|
+
three_prime: "three_prime";
|
|
98
|
+
total: "total";
|
|
99
|
+
unknown: "unknown";
|
|
100
|
+
}>>;
|
|
101
|
+
strandedness: z.ZodOptional<z.ZodEnum<{
|
|
102
|
+
declared_unverified: "declared_unverified";
|
|
103
|
+
unknown: "unknown";
|
|
104
|
+
verified: "verified";
|
|
105
|
+
}>>;
|
|
106
|
+
interaction: z.ZodOptional<z.ZodBoolean>;
|
|
107
|
+
classifier: z.ZodOptional<z.ZodBoolean>;
|
|
108
|
+
extra_analyses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
109
|
+
annotation: "annotation";
|
|
110
|
+
clustering: "clustering";
|
|
111
|
+
coexpression: "coexpression";
|
|
112
|
+
deconvolution: "deconvolution";
|
|
113
|
+
pathway_activity: "pathway_activity";
|
|
114
|
+
signature_scoring: "signature_scoring";
|
|
115
|
+
survival: "survival";
|
|
116
|
+
tf_activity: "tf_activity";
|
|
117
|
+
transcript_level: "transcript_level";
|
|
118
|
+
variance_partition: "variance_partition";
|
|
119
|
+
}>>>;
|
|
120
|
+
preferred_language: z.ZodOptional<z.ZodEnum<{
|
|
121
|
+
R: "R";
|
|
122
|
+
python: "python";
|
|
123
|
+
}>>;
|
|
124
|
+
enrichment_input: z.ZodOptional<z.ZodEnum<{
|
|
125
|
+
gene_list: "gene_list";
|
|
126
|
+
ranked_list: "ranked_list";
|
|
127
|
+
sample_scores: "sample_scores";
|
|
128
|
+
}>>;
|
|
129
|
+
quality_flags: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
130
|
+
degraded_rna: "degraded_rna";
|
|
131
|
+
high_duplication: "high_duplication";
|
|
132
|
+
low_depth_sample: "low_depth_sample";
|
|
133
|
+
outlier_sample: "outlier_sample";
|
|
134
|
+
sample_identity_doubt: "sample_identity_doubt";
|
|
135
|
+
}>>>;
|
|
136
|
+
}, z.core.$strip>;
|
|
137
|
+
export type SituationFields = z.infer<typeof SituationFieldsSchema>;
|
|
138
|
+
/** The situation as the client sends it: the fields as given, with the caller preference held out of the situation fields. */
|
|
139
|
+
export declare function toSituation(fields: SituationFields): KnowledgeSituation;
|
|
140
|
+
/** The preferences of the caller, beside the situation: the language of the template. */
|
|
141
|
+
export declare function toPreferences(fields: SituationFields): KnowledgePreferences | undefined;
|
|
142
|
+
/** One worked example, in the descriptions of the two planner tools. Examples raise complex-parameter accuracy. */
|
|
143
|
+
export declare const SITUATION_EXAMPLE: string;
|