@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
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { errorMessageOf } from "../lib/thrown.js";
|
|
2
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
3
|
+
import { ok } from "neverthrow";
|
|
2
4
|
import { z } from "zod";
|
|
3
5
|
import { PLANNABLE_AGENT_CATALOG } from "../agents/sandbox-catalog.js";
|
|
6
|
+
import { SANDBOX_AGENT_META } from "../agents/sandbox/index.js";
|
|
4
7
|
import { forSubAgent } from "../auth/types.js";
|
|
5
8
|
import { DATA_PROFILE_ORIENTATION_MAX_CHARS, buildDataProfileOrientation } from "../app/data-profile-orientation.js";
|
|
6
|
-
import { createNoopUsageRecorder } from "../billing/noop-usage-recorder.js";
|
|
7
9
|
import { createNoopLogger } from "../lib/console-logger.js";
|
|
8
|
-
import { unwrapOrThrow } from "../lib/result.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
10
|
+
import { toThrowable, unwrapOrThrow } from "../lib/result.js";
|
|
11
|
+
import { parseUnknownRecord } from "../lib/unknown-containers.js";
|
|
12
|
+
import { runLoop } from "../loop/run-loop.js";
|
|
11
13
|
import { packagesSection, resourceEstimationSection } from "../prompts/planner.js";
|
|
12
14
|
import { effectiveDeadlineMs } from "../providers/types.js";
|
|
13
15
|
import { formatQuery, parseQuery } from "../sandbox/package-identity.js";
|
|
14
16
|
import { loadDataProfileStatus } from "../state/index.js";
|
|
17
|
+
import { defineTool } from "./define-tool.js";
|
|
15
18
|
export const AD_HOC_ROUTER_AGENT_ID = "adhoc-router";
|
|
16
19
|
export const AD_HOC_ROUTER_TIMEOUT_MS = 10_000;
|
|
17
20
|
export const AD_HOC_FALLBACK_AGENT_ID = "scientific-executor";
|
|
18
|
-
|
|
19
|
-
const AD_HOC_ROUTE_CALL_NAME = "adhoc-route";
|
|
21
|
+
const SUBMIT_ROUTE_TOOL_ID = "submit_route";
|
|
20
22
|
const resourcesSchema = z.object({
|
|
21
23
|
cpu: z.number().positive(),
|
|
22
24
|
memoryGb: z.number().positive(),
|
|
@@ -24,6 +26,7 @@ const resourcesSchema = z.object({
|
|
|
24
26
|
});
|
|
25
27
|
const routeSchema = z.object({
|
|
26
28
|
agentId: z.string().optional().describe("The id of one specialist from the eligible catalog, copied exactly."),
|
|
29
|
+
capability: z.string().optional().describe("The one capability phrase of that specialist which this request uses, copied exactly from its capabilities."),
|
|
27
30
|
resources: resourcesSchema
|
|
28
31
|
.optional()
|
|
29
32
|
.describe("The sandbox resources of the step, inside the stated ranges. Omit to take the defaults; a value outside the ranges is replaced by the defaults."),
|
|
@@ -68,7 +71,7 @@ async function profileOrientation(pool, analysisId, logger) {
|
|
|
68
71
|
return buildDataProfileOrientation(status.result, analysisId, DATA_PROFILE_ORIENTATION_MAX_CHARS);
|
|
69
72
|
}
|
|
70
73
|
catch (error) {
|
|
71
|
-
logger.warn("could not load data profile for ad hoc routing", { error: error
|
|
74
|
+
logger.warn("could not load data profile for ad hoc routing", { error: errorMessageOf(error) ?? textOf(error) });
|
|
72
75
|
return "The persisted data profile could not be loaded; route from the request alone.";
|
|
73
76
|
}
|
|
74
77
|
}
|
|
@@ -96,7 +99,7 @@ async function routePackages(raw, resolve, logger) {
|
|
|
96
99
|
const seen = new Set();
|
|
97
100
|
for (const element of entries) {
|
|
98
101
|
if (typeof element !== "string") {
|
|
99
|
-
droppedPackages.push({ entry:
|
|
102
|
+
droppedPackages.push({ entry: textOf(element), reason: "unparsable" });
|
|
100
103
|
continue;
|
|
101
104
|
}
|
|
102
105
|
const entry = element.trim();
|
|
@@ -121,7 +124,7 @@ async function routePackages(raw, resolve, logger) {
|
|
|
121
124
|
catch (error) {
|
|
122
125
|
// A resolution that throws is the same condition as an inventory that
|
|
123
126
|
// reports itself unavailable: it says nothing about the packages.
|
|
124
|
-
logger.warn("ad hoc package resolution failed", { error: error
|
|
127
|
+
logger.warn("ad hoc package resolution failed", { error: errorMessageOf(error) ?? textOf(error) });
|
|
125
128
|
rows = null;
|
|
126
129
|
}
|
|
127
130
|
if (rows === null)
|
|
@@ -152,13 +155,15 @@ async function routePackages(raw, resolve, logger) {
|
|
|
152
155
|
}
|
|
153
156
|
return { packages, droppedPackages };
|
|
154
157
|
}
|
|
158
|
+
/** The one tool of the router. The route is the input of its call, thus the call itself records nothing. */
|
|
155
159
|
function routeTool() {
|
|
156
|
-
return {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
return defineTool({
|
|
161
|
+
id: SUBMIT_ROUTE_TOOL_ID,
|
|
162
|
+
description: "Submit the single specialist, the resource recommendation, and the packages of the step. This is the only valid response.",
|
|
163
|
+
inputSchema: routeSchema,
|
|
164
|
+
describeCall: "none",
|
|
165
|
+
execute: () => Promise.resolve(ok({ recorded: true })),
|
|
166
|
+
});
|
|
162
167
|
}
|
|
163
168
|
export async function routeAdHocRequest(deps, input) {
|
|
164
169
|
const logger = (deps.logger ?? createNoopLogger()).named("adhoc-router").with({ analysisId: input.analysisId, model: deps.model });
|
|
@@ -166,14 +171,15 @@ export async function routeAdHocRequest(deps, input) {
|
|
|
166
171
|
const catalog = PLANNABLE_AGENT_CATALOG.map((agent) => `- ${agent.id}: capabilities [${agent.capabilities.join(", ")}]; suitable for [${agent.suitableFor.join(", ")}]`).join("\n");
|
|
167
172
|
const orientation = await profileOrientation(deps.pool, input.analysisId, logger);
|
|
168
173
|
const controller = new AbortController();
|
|
174
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- a guard, not a wait: it aborts the routing controller at the deadline while the provider call runs, and the finally clears it.
|
|
169
175
|
const timer = setTimeout(() => controller.abort(new Error("ad hoc routing timed out")), effectiveDeadlineMs(deps.provider, AD_HOC_ROUTER_TIMEOUT_MS, deps.timeoutMs));
|
|
170
176
|
const signal = AbortSignal.any([input.signal, controller.signal]);
|
|
171
177
|
let raw;
|
|
172
178
|
let failure;
|
|
173
179
|
try {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
180
|
+
const router = {
|
|
181
|
+
id: AD_HOC_ROUTER_AGENT_ID,
|
|
182
|
+
systemPrompt: [
|
|
177
183
|
"Select exactly one specialist for a targeted one-step analysis, estimate its sandbox resources, and name the packages that the step imports.",
|
|
178
184
|
"Choose only from the supplied catalog. Do not create a plan, reject the request, or select scientific-executor.",
|
|
179
185
|
resourceEstimationSection(deps.resourcePolicy),
|
|
@@ -182,45 +188,54 @@ export async function routeAdHocRequest(deps, input) {
|
|
|
182
188
|
"You hold no package census. For a name that both ecosystems hold, the language of the specialist you select and the wording of the request decide the track.",
|
|
183
189
|
"Respond only by calling submit_route.",
|
|
184
190
|
].join("\n\n"),
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
191
|
+
model: deps.model,
|
|
192
|
+
tools: [routeTool()],
|
|
193
|
+
// One request: the route is the input of the call, thus no second request is due.
|
|
194
|
+
maxIterations: 1,
|
|
195
|
+
};
|
|
196
|
+
const run = await runLoop(router, [
|
|
197
|
+
{
|
|
198
|
+
role: "user",
|
|
199
|
+
content: `Request:\n${input.request}\n\nPersisted data-profile orientation:\n${orientation}\n\nEligible specialists:\n${catalog}`,
|
|
200
|
+
},
|
|
201
|
+
], routerSession, {
|
|
202
|
+
provider: deps.provider,
|
|
203
|
+
signal,
|
|
204
|
+
emit: () => undefined,
|
|
205
|
+
// One request reads no cache back, thus a cache write is a cost with no return.
|
|
206
|
+
promptCache: "off",
|
|
207
|
+
logger: deps.logger,
|
|
208
|
+
usageRecorder: deps.usageRecorder,
|
|
209
|
+
// The router call folds its usage into the turn total, and the turn root reports it.
|
|
210
|
+
turnUsage: input.turnUsage ?? {},
|
|
211
|
+
invocationId: input.invocationId,
|
|
212
|
+
stopWhen: (steps) => steps.some((step) => step.calls.some((call) => call.toolName === SUBMIT_ROUTE_TOOL_ID)),
|
|
206
213
|
});
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
214
|
+
if (run.finish.reason === "aborted") {
|
|
215
|
+
if (input.signal.aborted)
|
|
216
|
+
throw toThrowable(input.signal.reason);
|
|
217
|
+
failure = "timeout";
|
|
218
|
+
logger.warn("ad hoc route fell back", { failure });
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// No forced tool choice: some Claude models reject it with a 400. A reply
|
|
222
|
+
// without the call falls back below as `malformed`.
|
|
223
|
+
const call = run.steps.flatMap((step) => step.calls).find((entry) => entry.toolName === SUBMIT_ROUTE_TOOL_ID);
|
|
224
|
+
raw = call?.input;
|
|
225
|
+
if (!call)
|
|
226
|
+
failure = "malformed";
|
|
227
|
+
}
|
|
213
228
|
}
|
|
214
229
|
catch (error) {
|
|
215
230
|
if (input.signal.aborted)
|
|
216
231
|
throw error;
|
|
217
|
-
failure = controller.signal.aborted
|
|
218
|
-
logger.warn("ad hoc route fell back", { failure, error: error
|
|
232
|
+
failure = controller.signal.aborted ? "timeout" : "provider_error";
|
|
233
|
+
logger.warn("ad hoc route fell back", { failure, error: errorMessageOf(error) ?? textOf(error) });
|
|
219
234
|
}
|
|
220
235
|
finally {
|
|
221
236
|
clearTimeout(timer);
|
|
222
237
|
}
|
|
223
|
-
const candidate = raw
|
|
238
|
+
const candidate = parseUnknownRecord(raw) ?? {};
|
|
224
239
|
const requestedAgent = typeof candidate.agentId === "string" ? candidate.agentId : undefined;
|
|
225
240
|
const validAgent = requestedAgent !== undefined && PLANNABLE_AGENT_CATALOG.some((agent) => agent.id === requestedAgent);
|
|
226
241
|
const agentId = validAgent ? requestedAgent : AD_HOC_FALLBACK_AGENT_ID;
|
|
@@ -241,6 +256,20 @@ export async function routeAdHocRequest(deps, input) {
|
|
|
241
256
|
// never becomes a `fallbackClass`, because that class describes the route
|
|
242
257
|
// as a whole and a step agent reads it as "the routing itself fell back".
|
|
243
258
|
const { packages, droppedPackages } = await routePackages(candidate.packages, deps.resolvePackages, logger);
|
|
244
|
-
|
|
245
|
-
|
|
259
|
+
// Kept only when the chosen agent really advertises it. A phrase that no agent advertises
|
|
260
|
+
// resolves no data requirement anyway, and carrying it would put a fabricated capability into
|
|
261
|
+
// the step and into the run record. An absent phrase is a normal answer, not a fallback class:
|
|
262
|
+
// most requests use a capability that declares nothing.
|
|
263
|
+
const requestedCapability = typeof candidate.capability === "string" ? candidate.capability.trim() : "";
|
|
264
|
+
const capability = (SANDBOX_AGENT_META[agentId]?.capabilities ?? []).includes(requestedCapability) ? requestedCapability : undefined;
|
|
265
|
+
logger.info("ad hoc route selected", { agentId, resources, rationale, failure, packages, droppedPackages, capability });
|
|
266
|
+
return {
|
|
267
|
+
agentId,
|
|
268
|
+
resources,
|
|
269
|
+
rationale,
|
|
270
|
+
packages,
|
|
271
|
+
droppedPackages,
|
|
272
|
+
capability,
|
|
273
|
+
fallbackClass: failure,
|
|
274
|
+
};
|
|
246
275
|
}
|
|
@@ -2,3 +2,10 @@
|
|
|
2
2
|
export declare function adHocPlanId(analysisId: string, invocationId: string): string;
|
|
3
3
|
/** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
|
|
4
4
|
export declare function adHocRunId(analysisId: string, invocationId: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
|
|
7
|
+
* gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
|
|
8
|
+
*/
|
|
9
|
+
export declare function callRunId(callKey: string): string;
|
|
10
|
+
/** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
|
|
11
|
+
export declare function durableCallKey(toolCallId: string): string | undefined;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { DBOS } from "@dbos-inc/dbos-sdk";
|
|
1
2
|
import { createHash } from "node:crypto";
|
|
2
3
|
const TOOL_ID = "execute_analysis";
|
|
3
|
-
function digest(
|
|
4
|
-
return createHash("sha256")
|
|
4
|
+
function digest(...parts) {
|
|
5
|
+
return createHash("sha256")
|
|
6
|
+
.update([TOOL_ID, ...parts].join("\0"), "utf8")
|
|
7
|
+
.digest();
|
|
5
8
|
}
|
|
6
9
|
/** Deterministic internal plan id in the existing persistence shape. */
|
|
7
10
|
export function adHocPlanId(analysisId, invocationId) {
|
|
@@ -9,9 +12,30 @@ export function adHocPlanId(analysisId, invocationId) {
|
|
|
9
12
|
}
|
|
10
13
|
/** Deterministic RFC-4122 UUID used as both cortex run id and DBOS workflow id. */
|
|
11
14
|
export function adHocRunId(analysisId, invocationId) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
return uuidOf(digest(analysisId, invocationId));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The run id of a plan launch from a tool call, a version-5 UUID of the key of the call. The same call
|
|
19
|
+
* gives the same id, thus a rerun of the call reserves and launches the run of its first attempt.
|
|
20
|
+
*/
|
|
21
|
+
export function callRunId(callKey) {
|
|
22
|
+
return uuidOf(digest("plan", callKey));
|
|
23
|
+
}
|
|
24
|
+
/** The key of a tool call inside a workflow, `${workflowId}:${toolCallId}`, or `undefined` outside one, where nothing reruns. */
|
|
25
|
+
export function durableCallKey(toolCallId) {
|
|
26
|
+
const workflowId = DBOS.workflowID;
|
|
27
|
+
return workflowId === undefined ? undefined : `${workflowId}:${toolCallId}`;
|
|
28
|
+
}
|
|
29
|
+
function uuidOf(hash) {
|
|
30
|
+
const bytes = Buffer.from(hash.subarray(4, 20));
|
|
31
|
+
const versionByte = bytes[6];
|
|
32
|
+
if (versionByte === undefined)
|
|
33
|
+
throw new Error("the digest is shorter than the UUID layout");
|
|
34
|
+
bytes[6] = (versionByte & 0x0f) | 0x50;
|
|
35
|
+
const variantByte = bytes[8];
|
|
36
|
+
if (variantByte === undefined)
|
|
37
|
+
throw new Error("the digest is shorter than the UUID layout");
|
|
38
|
+
bytes[8] = (variantByte & 0x3f) | 0x80;
|
|
15
39
|
const hex = bytes.toString("hex");
|
|
16
40
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
17
41
|
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The tool-approval
|
|
3
|
-
* the decision the user returns
|
|
4
|
-
* hosts that wire no interactive surface.
|
|
2
|
+
* The tool-approval contract: the request that the approval hook of a tool gives,
|
|
3
|
+
* and the decision that the user returns.
|
|
5
4
|
*
|
|
6
|
-
* The
|
|
5
|
+
* The contract is generic — nothing here names a tool or a domain. A tool describes
|
|
7
6
|
* the concrete action it needs approved (`AskRequest`); a surface renders it, the
|
|
8
|
-
* user decides, and the
|
|
9
|
-
* `AskRejectedError` throw on denial.
|
|
7
|
+
* user decides, and the loop runs the call on an approval or denies it.
|
|
10
8
|
*
|
|
11
|
-
* These are standalone types so `define-tool.ts` can type-import them
|
|
12
|
-
*
|
|
9
|
+
* These are standalone types so `define-tool.ts` can type-import them without an
|
|
10
|
+
* import cycle back through the tools layer.
|
|
13
11
|
*/
|
|
14
12
|
/**
|
|
15
13
|
* The human-facing content a surface renders to describe the exact action being
|
|
@@ -17,7 +15,7 @@
|
|
|
17
15
|
* they saw is precisely what is granted, nothing broader. No tool- or
|
|
18
16
|
* domain-specific fields: the harness stays agnostic to what is being approved.
|
|
19
17
|
*/
|
|
20
|
-
export
|
|
18
|
+
export type AskRequest = {
|
|
21
19
|
readonly title: string;
|
|
22
20
|
readonly command: string;
|
|
23
21
|
readonly detail?: string;
|
|
@@ -29,15 +27,12 @@ export interface AskRequest {
|
|
|
29
27
|
* field, and the surface never renders it. Absent, the grant keys on `command`.
|
|
30
28
|
*/
|
|
31
29
|
readonly grantKey?: string;
|
|
32
|
-
}
|
|
30
|
+
};
|
|
33
31
|
/**
|
|
34
32
|
* A user's decision on an approval request — three distinct outcomes, never a
|
|
35
33
|
* boolean. `once` approves the single pending invocation; `always` approves it
|
|
36
34
|
* AND records a standing grant for the matched action; `reject` denies and MAY
|
|
37
35
|
* carry model-facing feedback.
|
|
38
|
-
*
|
|
39
|
-
* This full three-variant union is the wire type the outward `answer` API takes;
|
|
40
|
-
* `ctx.ask` itself resolves only with the `AskApproval` subset (denial throws).
|
|
41
36
|
*/
|
|
42
37
|
export type AskReply = {
|
|
43
38
|
readonly kind: "once";
|
|
@@ -47,42 +42,3 @@ export type AskReply = {
|
|
|
47
42
|
readonly kind: "reject";
|
|
48
43
|
readonly feedback?: string;
|
|
49
44
|
};
|
|
50
|
-
/**
|
|
51
|
-
* The subset of `AskReply` `ctx.ask` may resolve with. Denial never returns — it
|
|
52
|
-
* throws `AskRejectedError` — so a resolved approval is only ever `once` or
|
|
53
|
-
* `always`, and a caller never has to inspect for a reject variant.
|
|
54
|
-
*/
|
|
55
|
-
export type AskApproval = Exclude<AskReply, {
|
|
56
|
-
kind: "reject";
|
|
57
|
-
}>;
|
|
58
|
-
/**
|
|
59
|
-
* The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
|
|
60
|
-
* model-facing feedback.
|
|
61
|
-
*
|
|
62
|
-
* Denial is a throw rather than a returned reject variant so a tool never has to
|
|
63
|
-
* inspect the reply to learn it was denied: only asks throw, so the throw itself
|
|
64
|
-
* is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
|
|
65
|
-
* the caught error to an execution-denied tool result and stops the turn.
|
|
66
|
-
*/
|
|
67
|
-
export declare class AskRejectedError extends Error {
|
|
68
|
-
readonly feedback?: string;
|
|
69
|
-
constructor(feedback?: string);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* The user-approval seam. `ask` pauses on an approval request and resolves with
|
|
73
|
-
* the approval decision, or throws `AskRejectedError` when the user denies.
|
|
74
|
-
* Realizations are wired by the embedder; an unwired host resolves to
|
|
75
|
-
* `UnavailableAsk`.
|
|
76
|
-
*/
|
|
77
|
-
export interface Ask {
|
|
78
|
-
ask(request: AskRequest): Promise<AskApproval>;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Deny-by-default realization — the shipped `Ask` for hosts that wire no
|
|
82
|
-
* interactive surface (workflow contexts, headless embedders). Every request is
|
|
83
|
-
* denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
|
|
84
|
-
* rather than left waiting on a surface that will never respond.
|
|
85
|
-
*/
|
|
86
|
-
export declare class UnavailableAsk implements Ask {
|
|
87
|
-
ask(_request: AskRequest): Promise<AskApproval>;
|
|
88
|
-
}
|
|
@@ -1,41 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The tool-approval
|
|
3
|
-
* the decision the user returns
|
|
4
|
-
* hosts that wire no interactive surface.
|
|
2
|
+
* The tool-approval contract: the request that the approval hook of a tool gives,
|
|
3
|
+
* and the decision that the user returns.
|
|
5
4
|
*
|
|
6
|
-
* The
|
|
5
|
+
* The contract is generic — nothing here names a tool or a domain. A tool describes
|
|
7
6
|
* the concrete action it needs approved (`AskRequest`); a surface renders it, the
|
|
8
|
-
* user decides, and the
|
|
9
|
-
* `AskRejectedError` throw on denial.
|
|
7
|
+
* user decides, and the loop runs the call on an approval or denies it.
|
|
10
8
|
*
|
|
11
|
-
* These are standalone types so `define-tool.ts` can type-import them
|
|
12
|
-
*
|
|
9
|
+
* These are standalone types so `define-tool.ts` can type-import them without an
|
|
10
|
+
* import cycle back through the tools layer.
|
|
13
11
|
*/
|
|
14
|
-
|
|
15
|
-
* The throw a `reject` reply raises out of `ctx.ask`, carrying the optional
|
|
16
|
-
* model-facing feedback.
|
|
17
|
-
*
|
|
18
|
-
* Denial is a throw rather than a returned reject variant so a tool never has to
|
|
19
|
-
* inspect the reply to learn it was denied: only asks throw, so the throw itself
|
|
20
|
-
* is the denial signal, and the loop needs no per-tool "was denied" flag — it maps
|
|
21
|
-
* the caught error to an execution-denied tool result and stops the turn.
|
|
22
|
-
*/
|
|
23
|
-
export class AskRejectedError extends Error {
|
|
24
|
-
feedback;
|
|
25
|
-
constructor(feedback) {
|
|
26
|
-
super(feedback ? `approval rejected: ${feedback}` : "approval rejected");
|
|
27
|
-
this.name = "AskRejectedError";
|
|
28
|
-
this.feedback = feedback;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Deny-by-default realization — the shipped `Ask` for hosts that wire no
|
|
33
|
-
* interactive surface (workflow contexts, headless embedders). Every request is
|
|
34
|
-
* denied, so a tool that calls `ctx.ask` where nothing can answer is rejected
|
|
35
|
-
* rather than left waiting on a surface that will never respond.
|
|
36
|
-
*/
|
|
37
|
-
export class UnavailableAsk {
|
|
38
|
-
async ask(_request) {
|
|
39
|
-
throw new AskRejectedError("approval is unavailable in this environment");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
12
|
+
export {};
|
|
@@ -1,48 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `ask` is the per-turn seam an embedder binds: a conversation tool's `ctx.ask`
|
|
7
|
-
* pauses on it. The database is the single source of truth for ask state — `ask`
|
|
8
|
-
* inserts a `pending` ledger row, emits the `data-ask` part, and polls that row to
|
|
9
|
-
* a terminal status; there is no in-memory resolver map. `answer` is one guarded
|
|
10
|
-
* write. See the poll site below for why.
|
|
2
|
+
* The tool-approval gateway: the ask ledger over the Postgres pool of an
|
|
3
|
+
* embedder. A turn workflow raises an ask under a known id and waits for the
|
|
4
|
+
* answer itself. `answer` is one guarded write, and `pending` and the boot-time
|
|
5
|
+
* `sweepExpired` read and expire the ledger.
|
|
11
6
|
*/
|
|
12
7
|
import type { Pool } from "pg";
|
|
13
|
-
import type {
|
|
14
|
-
import
|
|
15
|
-
import { type AnswerOutcome, type PendingAsk } from "./queries.js";
|
|
8
|
+
import type { AskPart } from "../../contracts/chat-parts.js";
|
|
9
|
+
import type { AskReply, AskRequest } from "./contract.js";
|
|
10
|
+
import { type AnswerOutcome, type AskStatus, type PendingAsk } from "./queries.js";
|
|
16
11
|
export type { AnswerOutcome, PendingAsk } from "./queries.js";
|
|
17
12
|
/** Construction deps: the harness application pool the ledger lives in. */
|
|
18
|
-
export
|
|
13
|
+
export type AskGatewayDeps = {
|
|
19
14
|
readonly pool: Pool;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
* analysis/thread and to one user, carries the turn's abort `signal`, and supplies
|
|
24
|
-
* the `emit` sink the `data-ask` part flows through.
|
|
25
|
-
*/
|
|
26
|
-
export interface AskContext {
|
|
15
|
+
};
|
|
16
|
+
/** Who an ask goes to and where it belongs. */
|
|
17
|
+
export type AskScope = {
|
|
27
18
|
readonly analysisId: string;
|
|
28
19
|
/** The opaque identity of the person the ask goes to. The harness never reads it. */
|
|
29
20
|
readonly userId: string;
|
|
30
21
|
readonly threadId?: string;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
};
|
|
23
|
+
/** The gateway surface: the raise of a turn and the outward embedder-driven API. */
|
|
24
|
+
export type AskGateway = {
|
|
25
|
+
/**
|
|
26
|
+
* Raise an ask under a known id, for a turn workflow that waits for the answer itself. A standing grant settles
|
|
27
|
+
* it at once as `resolved`. Else the row waits as `pending`. A second raise of the same id changes nothing.
|
|
28
|
+
*/
|
|
29
|
+
raise(id: string, request: AskRequest, scope: AskScope): Promise<"granted" | "pending">;
|
|
30
|
+
/** Mark a pending ask `expired`. */
|
|
31
|
+
expire(id: string): Promise<void>;
|
|
32
|
+
/** Mark a pending ask `aborted`. */
|
|
33
|
+
abort(id: string): Promise<void>;
|
|
37
34
|
answer(id: string, reply: AskReply): Promise<AnswerOutcome>;
|
|
38
35
|
pending(): Promise<PendingAsk[]>;
|
|
39
36
|
/** Expire pending asks older than `maxAgeMs` (default {@link DEFAULT_SWEEP_MAX_AGE_MS}). */
|
|
40
37
|
sweepExpired(maxAgeMs?: number): Promise<number>;
|
|
41
|
-
}
|
|
38
|
+
};
|
|
42
39
|
/**
|
|
43
40
|
* Pending rows older than this are treated as orphans of a dead process. Far
|
|
44
41
|
* beyond any plausible live turn, so a boot sweep during a rolling deployment
|
|
45
|
-
* cannot expire an ask another pod is still
|
|
42
|
+
* cannot expire an ask another pod is still waiting on.
|
|
46
43
|
*/
|
|
47
44
|
export declare const DEFAULT_SWEEP_MAX_AGE_MS: number;
|
|
48
45
|
export declare function createAskGateway(deps: AskGatewayDeps): AskGateway;
|
|
46
|
+
/** The `data-ask` part of an ask in one status. Each status of one ask reconciles under the same id. */
|
|
47
|
+
export declare function askPartOf(id: string, request: AskRequest, status: AskStatus, reply?: AskReply["kind"]): AskPart;
|