@inflexa-ai/harness 0.45.1 → 0.46.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +306 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +32 -7
- package/dist/lib/hooks.js +22 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +160 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +39 -0
- package/dist/loop/turn-credentials.js +90 -0
- package/dist/loop/types.d.ts +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/request-headers.js +12 -3
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +62 -0
- package/dist/testing.js +101 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
* hashes — a thousand rows of sha256 would bury the signal.
|
|
21
21
|
*/
|
|
22
22
|
import { ok } from "neverthrow";
|
|
23
|
+
import { presentGet } from "../../lib/present.js";
|
|
24
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
25
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
23
26
|
import { z } from "zod";
|
|
24
27
|
import { defineTool } from "../define-tool.js";
|
|
25
28
|
import { identityAddress, identityKey, identityOf, parseQuery, resolveQuery, } from "../../sandbox/package-identity.js";
|
|
@@ -99,7 +102,7 @@ export function lockSections(lock) {
|
|
|
99
102
|
.filter(([, packages]) => packages.length > 0)
|
|
100
103
|
.map(([subtree, packages]) => {
|
|
101
104
|
const track = trackOfLockSubtree(subtree);
|
|
102
|
-
return { title: TRACK_TITLES[subtree] ?? subtree, packages,
|
|
105
|
+
return { title: TRACK_TITLES[subtree] ?? subtree, packages, track };
|
|
103
106
|
});
|
|
104
107
|
}
|
|
105
108
|
/**
|
|
@@ -160,7 +163,7 @@ function foldSections(sections) {
|
|
|
160
163
|
open.packages.push(pkg);
|
|
161
164
|
}
|
|
162
165
|
}
|
|
163
|
-
return [...byTitle.values()].map(({ title, track, packages }) => ({ title, packages,
|
|
166
|
+
return [...byTitle.values()].map(({ title, track, packages }) => ({ title, packages, track }));
|
|
164
167
|
}
|
|
165
168
|
/**
|
|
166
169
|
* Default cap on a listing — high enough that the real store is never truncated.
|
|
@@ -196,7 +199,9 @@ const POOL_UNAVAILABLE_NOTE = "Package list not available — the package pool c
|
|
|
196
199
|
*/
|
|
197
200
|
const LANGUAGE_MATCHERS = {
|
|
198
201
|
// `CLI_TITLE` — the conda-installed bioinformatics executables.
|
|
202
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the section heading names the executables section or the standalone word CLI, matched in display text.
|
|
199
203
|
cli: (t) => /system tools|\bcli\b/i.test(t),
|
|
204
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the heading opens with the word node, the display form of the section name.
|
|
200
205
|
node: (t) => /^node\b/i.test(t),
|
|
201
206
|
};
|
|
202
207
|
/** Whether one section answers the `language` filter of a call. */
|
|
@@ -205,7 +210,7 @@ function matchesLanguage(section, language) {
|
|
|
205
210
|
return true;
|
|
206
211
|
if (language === "r" || language === "python")
|
|
207
212
|
return section.track === language;
|
|
208
|
-
return LANGUAGE_MATCHERS
|
|
213
|
+
return presentGet(LANGUAGE_MATCHERS, language, `the heading matcher for ${language}`)(section.title);
|
|
209
214
|
}
|
|
210
215
|
/**
|
|
211
216
|
* The identity names that the Python track and the R track both hold.
|
|
@@ -295,9 +300,9 @@ function presentEntry(requested, row) {
|
|
|
295
300
|
present: true,
|
|
296
301
|
name: row.entry.name,
|
|
297
302
|
section: row.section,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
303
|
+
version: row.entry.version,
|
|
304
|
+
storeDir: row.entry.storeDir,
|
|
305
|
+
hash: row.entry.hash,
|
|
301
306
|
};
|
|
302
307
|
}
|
|
303
308
|
/**
|
|
@@ -365,7 +370,7 @@ export function queryPackages(rawSections, { names, query, language, limit }) {
|
|
|
365
370
|
if (hits.length > 0)
|
|
366
371
|
return hits;
|
|
367
372
|
const suggestion = resolution.kind === "unknown" ? resolution.suggestion : undefined;
|
|
368
|
-
return [{ requested, present: false,
|
|
373
|
+
return [{ requested, present: false, suggestion: suggestion?.name }];
|
|
369
374
|
});
|
|
370
375
|
return { available: true, checked };
|
|
371
376
|
}
|
|
@@ -379,7 +384,7 @@ export function queryPackages(rawSections, { names, query, language, limit }) {
|
|
|
379
384
|
.map((s) => ({
|
|
380
385
|
title: s.title,
|
|
381
386
|
packages: needle ? s.packages.filter((p) => p.name.toLowerCase().includes(needle)) : s.packages,
|
|
382
|
-
|
|
387
|
+
track: s.track,
|
|
383
388
|
}))
|
|
384
389
|
.filter((s) => s.packages.length > 0);
|
|
385
390
|
const total = filtered.reduce((n, s) => n + s.packages.length, 0);
|
|
@@ -422,7 +427,7 @@ export async function readInventorySections(deps, analysisId) {
|
|
|
422
427
|
if (deps.readPoolInventory) {
|
|
423
428
|
const pool = await deps.readPoolInventory().catch((cause) => ({
|
|
424
429
|
kind: "unavailable",
|
|
425
|
-
reason: cause
|
|
430
|
+
reason: errorMessageOf(cause) ?? textOf(cause),
|
|
426
431
|
}));
|
|
427
432
|
if (pool.kind === "unavailable")
|
|
428
433
|
return { kind: "unavailable", reason: pool.reason };
|
|
@@ -449,6 +454,22 @@ export async function readInventorySections(deps, analysisId) {
|
|
|
449
454
|
* host-readable farm `inflexa.lock` otherwise (a sandbox agent). The image
|
|
450
455
|
* record merges into either report.
|
|
451
456
|
*/
|
|
457
|
+
const ListAvailablePackagesInputSchema = z.object({
|
|
458
|
+
names: z
|
|
459
|
+
.array(z.string())
|
|
460
|
+
.max(100)
|
|
461
|
+
.optional()
|
|
462
|
+
.describe("Check these packages for presence. Each entry is a query in the one grammar, `[python:|r:]<name>`. Returns one entry for each track that holds the name: present/absent + the language track it lives in. An absent name carries the spelling the pool holds, where there is one."),
|
|
463
|
+
query: z.string().optional().describe("Case-insensitive substring filter over package names."),
|
|
464
|
+
language: z.enum(["r", "python", "cli", "node"]).optional().describe("Restrict results to one language track."),
|
|
465
|
+
limit: z
|
|
466
|
+
.number()
|
|
467
|
+
.int()
|
|
468
|
+
.min(1)
|
|
469
|
+
.max(DEFAULT_LIMIT)
|
|
470
|
+
.optional()
|
|
471
|
+
.describe(`Cap the packages listed. Omit to get the whole set — the store fits well within the ${DEFAULT_LIMIT} ceiling. Ignored when \`names\` is given.`),
|
|
472
|
+
});
|
|
452
473
|
export function createListAvailablePackagesTool(deps = {}) {
|
|
453
474
|
const readPoolInventory = deps.readPoolInventory;
|
|
454
475
|
// The scope decides the framing sentence: a sandbox agent reads what it can
|
|
@@ -473,22 +494,7 @@ export function createListAvailablePackagesTool(deps = {}) {
|
|
|
473
494
|
"`language`: restrict to one track (r | python | cli | node). " +
|
|
474
495
|
"`limit`: cap the packages listed; the response always carries the true `total` and a `hasMore` flag, so truncation is never silent. " +
|
|
475
496
|
"Each entry renders as `name==version` where the source pins a version, and a `names` check also reports the store directory and the content hash where the source records them.",
|
|
476
|
-
inputSchema:
|
|
477
|
-
names: z
|
|
478
|
-
.array(z.string())
|
|
479
|
-
.max(100)
|
|
480
|
-
.optional()
|
|
481
|
-
.describe("Check these packages for presence. Each entry is a query in the one grammar, `[python:|r:]<name>`. Returns one entry for each track that holds the name: present/absent + the language track it lives in. An absent name carries the spelling the pool holds, where there is one."),
|
|
482
|
-
query: z.string().optional().describe("Case-insensitive substring filter over package names."),
|
|
483
|
-
language: z.enum(["r", "python", "cli", "node"]).optional().describe("Restrict results to one language track."),
|
|
484
|
-
limit: z
|
|
485
|
-
.number()
|
|
486
|
-
.int()
|
|
487
|
-
.min(1)
|
|
488
|
-
.max(DEFAULT_LIMIT)
|
|
489
|
-
.optional()
|
|
490
|
-
.describe(`Cap the packages listed. Omit to get the whole set — the store fits well within the ${DEFAULT_LIMIT} ceiling. Ignored when \`names\` is given.`),
|
|
491
|
-
}),
|
|
497
|
+
inputSchema: ListAvailablePackagesInputSchema,
|
|
492
498
|
// `queryPackages` returns on `names` before it reads another field, thus
|
|
493
499
|
// the presence check comes first. An empty array is not a presence check.
|
|
494
500
|
// `names` are exact identifiers a caller checks for, thus they name the
|
|
@@ -27,9 +27,17 @@
|
|
|
27
27
|
* only ever ENRICHES an entry — a file with no receipt and no catalog match is
|
|
28
28
|
* still returned, because a user-provided store is as valid as a managed one.
|
|
29
29
|
*/
|
|
30
|
+
import { z } from "zod";
|
|
30
31
|
import type { EnvironmentStorePaths } from "../../config/environment-stores.js";
|
|
32
|
+
import { type Tool } from "../define-tool.js";
|
|
33
|
+
declare const ListAvailableRefsInputSchema: z.ZodObject<{
|
|
34
|
+
path: z.ZodOptional<z.ZodString>;
|
|
35
|
+
category: z.ZodOptional<z.ZodString>;
|
|
36
|
+
query: z.ZodOptional<z.ZodString>;
|
|
37
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
}, z.core.$strip>;
|
|
31
39
|
export type ListAvailableRefsDeps = Pick<EnvironmentStorePaths, "refStorePath">;
|
|
32
|
-
export
|
|
40
|
+
export type ReferenceInventoryMetadata = {
|
|
33
41
|
readonly datasetId?: string;
|
|
34
42
|
readonly version?: string;
|
|
35
43
|
readonly title?: string;
|
|
@@ -45,11 +53,11 @@ export interface ReferenceInventoryMetadata {
|
|
|
45
53
|
readonly contents?: string;
|
|
46
54
|
readonly rows?: number;
|
|
47
55
|
readonly endpoint?: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
56
|
+
};
|
|
57
|
+
type ReferenceInventoryEntryBase = {
|
|
50
58
|
readonly path: string;
|
|
51
59
|
readonly metadata?: ReferenceInventoryMetadata;
|
|
52
|
-
}
|
|
60
|
+
};
|
|
53
61
|
/** A bounded, no-follow observation of the reference store. */
|
|
54
62
|
export type ReferenceInventoryEntry = (ReferenceInventoryEntryBase & {
|
|
55
63
|
readonly kind: "file";
|
|
@@ -69,7 +77,7 @@ export type ReferenceInventoryEntry = (ReferenceInventoryEntryBase & {
|
|
|
69
77
|
* is explicit: `returned`/`total`/`hasMore` describe how much of the match set
|
|
70
78
|
* this response carries, and `categories` is the drill-in index.
|
|
71
79
|
*/
|
|
72
|
-
export
|
|
80
|
+
export type ReferenceInventoryResult = {
|
|
73
81
|
readonly available: boolean;
|
|
74
82
|
readonly state: RawScan["state"] | "out_of_scope";
|
|
75
83
|
readonly path: string;
|
|
@@ -81,15 +89,15 @@ export interface ReferenceInventoryResult {
|
|
|
81
89
|
readonly hasMore: boolean;
|
|
82
90
|
readonly categories: readonly string[];
|
|
83
91
|
readonly content: string;
|
|
84
|
-
}
|
|
85
|
-
|
|
92
|
+
};
|
|
93
|
+
type RawScan = {
|
|
86
94
|
readonly state: "unavailable" | "empty" | "populated" | "not_found" | "not_a_directory" | "symlink";
|
|
87
95
|
readonly entries: ReferenceInventoryEntry[];
|
|
88
96
|
readonly scannedEntries: number;
|
|
89
97
|
readonly truncated: boolean;
|
|
90
98
|
readonly receipts?: unknown[];
|
|
91
99
|
readonly legacyEntries?: unknown[];
|
|
92
|
-
}
|
|
100
|
+
};
|
|
93
101
|
/**
|
|
94
102
|
* The dataset ids the install receipts of the store report, for a caller that must know whether a
|
|
95
103
|
* declared dataset is present BEFORE a run starts.
|
|
@@ -112,10 +120,5 @@ export declare function readReferenceInventory(storeRoot: string): Promise<{
|
|
|
112
120
|
readonly available: boolean;
|
|
113
121
|
readonly entries: readonly ReferenceInventoryEntry[];
|
|
114
122
|
}>;
|
|
115
|
-
export declare function createListAvailableRefsTool(deps: ListAvailableRefsDeps):
|
|
116
|
-
path?: string | undefined;
|
|
117
|
-
category?: string | undefined;
|
|
118
|
-
query?: string | undefined;
|
|
119
|
-
limit?: number | undefined;
|
|
120
|
-
}, ReferenceInventoryResult>;
|
|
123
|
+
export declare function createListAvailableRefsTool(deps: ListAvailableRefsDeps): Tool<z.infer<typeof ListAvailableRefsInputSchema>, ReferenceInventoryResult>;
|
|
121
124
|
export {};
|
|
@@ -32,6 +32,10 @@ import { join as hostJoin, posix as posixPath } from "node:path";
|
|
|
32
32
|
import { ok } from "neverthrow";
|
|
33
33
|
import { z } from "zod";
|
|
34
34
|
import { capCodePoints, DETAIL_MAX_LENGTH, DETAIL_NEEDLE_MAX_LENGTH } from "../../loop/tool-detail.js";
|
|
35
|
+
import { errnoOf } from "../../lib/fs-result.js";
|
|
36
|
+
import { parseJsonAs } from "../../lib/parse-json.js";
|
|
37
|
+
import { isUnknownArray } from "../../lib/unknown-array.js";
|
|
38
|
+
import { parseUnknownRecord } from "../../lib/unknown-containers.js";
|
|
35
39
|
import { REFERENCE_DATA_CATALOG } from "../../reference-data/catalog.js";
|
|
36
40
|
import { parseReferenceInstallReceipt } from "../../reference-data/receipt.js";
|
|
37
41
|
import { REFS_CONTAINER_PATH } from "../../sandbox/mount-plan.js";
|
|
@@ -158,6 +162,8 @@ async function summarizeDirectory(directory, scanned) {
|
|
|
158
162
|
const stack = [directory];
|
|
159
163
|
while (stack.length > 0 && scanned < MAX_SCANNED_ENTRIES) {
|
|
160
164
|
const current = stack.pop();
|
|
165
|
+
if (current === undefined)
|
|
166
|
+
break;
|
|
161
167
|
const { values, cut } = await cappedEntries(current, MAX_SCANNED_ENTRIES - scanned);
|
|
162
168
|
truncated = truncated || cut;
|
|
163
169
|
const childDirectories = [];
|
|
@@ -196,7 +202,7 @@ async function readReceipts(root) {
|
|
|
196
202
|
// A shared try would abandon the loop and silently drop every receipt sorting
|
|
197
203
|
// after the bad one, quietly stripping metadata from datasets that are fine.
|
|
198
204
|
try {
|
|
199
|
-
receipts.push(
|
|
205
|
+
receipts.push(parseJsonAs(await readFile(hostJoin(receiptsDirectory, entry.name), "utf-8"), z.json()));
|
|
200
206
|
totalBytes += entry.bytes;
|
|
201
207
|
}
|
|
202
208
|
catch {
|
|
@@ -234,7 +240,7 @@ export async function readInstalledDatasetIds(deps) {
|
|
|
234
240
|
catch (error) {
|
|
235
241
|
// An absent directory is a readable store with nothing installed. Any other failure is the
|
|
236
242
|
// store declining to answer, which is a different fact and gets the honest `undefined`.
|
|
237
|
-
if (error
|
|
243
|
+
if (errnoOf(error) === "ENOENT")
|
|
238
244
|
return new Set();
|
|
239
245
|
return undefined;
|
|
240
246
|
}
|
|
@@ -243,7 +249,7 @@ export async function readInstalledDatasetIds(deps) {
|
|
|
243
249
|
// Per-file, so one malformed receipt costs only its own dataset. A shared try would drop
|
|
244
250
|
// every receipt after the bad one and read as a store that holds almost nothing.
|
|
245
251
|
try {
|
|
246
|
-
const receipt = parseReferenceInstallReceipt(
|
|
252
|
+
const receipt = parseReferenceInstallReceipt(parseJsonAs(await readFile(hostJoin(receiptsDirectory, name), "utf-8"), z.json()));
|
|
247
253
|
if (receipt)
|
|
248
254
|
ids.add(receipt.datasetId);
|
|
249
255
|
}
|
|
@@ -262,21 +268,24 @@ async function readLegacyEntries(root) {
|
|
|
262
268
|
const registryPath = hostJoin(root, "registry.json");
|
|
263
269
|
if ((await lstat(registryPath)).size > MAX_REGISTRY_BYTES)
|
|
264
270
|
return [];
|
|
265
|
-
const registry =
|
|
266
|
-
|
|
271
|
+
const registry = parseJsonAs(await readFile(registryPath, "utf-8"), z.json());
|
|
272
|
+
const registryRecord = parseUnknownRecord(registry);
|
|
273
|
+
if (!registryRecord)
|
|
267
274
|
return [];
|
|
268
|
-
const
|
|
269
|
-
|
|
275
|
+
const files = parseUnknownRecord(registryRecord.files);
|
|
276
|
+
const categories = parseUnknownRecord(files?.by_category);
|
|
277
|
+
if (!categories)
|
|
270
278
|
return [];
|
|
271
|
-
for (const category of Object.keys(
|
|
272
|
-
const values =
|
|
273
|
-
if (!
|
|
279
|
+
for (const category of Object.keys(categories).sort()) {
|
|
280
|
+
const values = categories[category];
|
|
281
|
+
if (!isUnknownArray(values))
|
|
274
282
|
continue;
|
|
275
283
|
for (const item of values) {
|
|
276
284
|
if (legacyEntries.length >= MAX_LEGACY_ENTRIES)
|
|
277
285
|
break;
|
|
278
|
-
|
|
279
|
-
|
|
286
|
+
const itemRecord = parseUnknownRecord(item);
|
|
287
|
+
if (itemRecord && typeof itemRecord.local_path === "string") {
|
|
288
|
+
legacyEntries.push({ ...itemRecord, category });
|
|
280
289
|
}
|
|
281
290
|
}
|
|
282
291
|
}
|
|
@@ -301,6 +310,8 @@ async function collectFiles(directory, relative, budget) {
|
|
|
301
310
|
const stack = [{ path: directory, relative }];
|
|
302
311
|
while (stack.length > 0 && budget.scanned < MAX_SCANNED_ENTRIES) {
|
|
303
312
|
const current = stack.pop();
|
|
313
|
+
if (current === undefined)
|
|
314
|
+
break;
|
|
304
315
|
const { values, cut } = await cappedEntries(current.path, MAX_SCANNED_ENTRIES - budget.scanned);
|
|
305
316
|
truncated = truncated || cut;
|
|
306
317
|
for (const child of values) {
|
|
@@ -439,41 +450,55 @@ function enrichEntries(entries, raw) {
|
|
|
439
450
|
// Per-artifact, not per-dataset: format and contents differ between files of the
|
|
440
451
|
// same dataset (a Seurat object and its Annoy index are read nothing alike).
|
|
441
452
|
const catalogArtifact = dataset?.artifacts.find((candidate) => candidate.path === artifact.path);
|
|
442
|
-
|
|
453
|
+
const managedMetadata = {
|
|
443
454
|
datasetId: receipt.datasetId,
|
|
444
455
|
version: receipt.datasetVersion,
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
456
|
+
};
|
|
457
|
+
if (dataset) {
|
|
458
|
+
managedMetadata.title = dataset.title;
|
|
459
|
+
managedMetadata.description = dataset.description;
|
|
460
|
+
managedMetadata.sourceUrl = dataset.sourceUrl;
|
|
461
|
+
managedMetadata.license = dataset.license.url ?? dataset.license.identifier;
|
|
462
|
+
managedMetadata.category = dataset.recommendation.group;
|
|
463
|
+
if (dataset.organism)
|
|
464
|
+
managedMetadata.organism = dataset.organism;
|
|
465
|
+
}
|
|
466
|
+
if (catalogArtifact) {
|
|
467
|
+
managedMetadata.format = catalogArtifact.format;
|
|
468
|
+
managedMetadata.contents = catalogArtifact.contents;
|
|
469
|
+
}
|
|
470
|
+
metadata.set(`${REFS_ROOT}/managed/${receipt.datasetId}/${receipt.datasetVersion}/${artifact.path}`, managedMetadata);
|
|
457
471
|
}
|
|
458
472
|
}
|
|
459
473
|
for (const value of raw.legacyEntries ?? []) {
|
|
460
|
-
|
|
474
|
+
const item = parseUnknownRecord(value);
|
|
475
|
+
if (!item)
|
|
461
476
|
continue;
|
|
462
|
-
const item = value;
|
|
463
477
|
const localPath = stringValue(item.local_path);
|
|
464
478
|
if (!localPath)
|
|
465
479
|
continue;
|
|
466
480
|
const resolved = resolveRequestedPath(localPath);
|
|
467
481
|
if (!resolved.ok)
|
|
468
482
|
continue;
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
483
|
+
const datasetId = stringValue(item.dataset);
|
|
484
|
+
const category = stringValue(item.category);
|
|
485
|
+
const subtype = stringValue(item.subtype);
|
|
486
|
+
const organism = stringValue(item.organism);
|
|
487
|
+
const rows = numberValue(item.rows);
|
|
488
|
+
const endpoint = stringValue(item.endpoint);
|
|
489
|
+
const legacyMetadata = {};
|
|
490
|
+
if (datasetId)
|
|
491
|
+
legacyMetadata.datasetId = datasetId;
|
|
492
|
+
if (category)
|
|
493
|
+
legacyMetadata.category = category;
|
|
494
|
+
if (subtype)
|
|
495
|
+
legacyMetadata.subtype = subtype;
|
|
496
|
+
if (organism)
|
|
497
|
+
legacyMetadata.organism = organism;
|
|
498
|
+
if (rows !== undefined)
|
|
499
|
+
legacyMetadata.rows = rows;
|
|
500
|
+
if (endpoint)
|
|
501
|
+
legacyMetadata.endpoint = endpoint;
|
|
477
502
|
metadata.set(resolved.path, { ...legacyMetadata, ...metadata.get(resolved.path) });
|
|
478
503
|
}
|
|
479
504
|
return entries.map((entry) => {
|
|
@@ -608,7 +633,7 @@ export function createListAvailableRefsTool(deps) {
|
|
|
608
633
|
// The budget comes off the rendered filter, never off a count of its
|
|
609
634
|
// parts, thus it cannot drift from the template above. One code point
|
|
610
635
|
// pays for the joining space.
|
|
611
|
-
return `${capCodePoints(named, DETAIL_MAX_LENGTH -
|
|
636
|
+
return `${capCodePoints(named, DETAIL_MAX_LENGTH - Array.from(filter).length - 1)} ${filter}`;
|
|
612
637
|
},
|
|
613
638
|
execute: async ({ path, category, query, limit }) => {
|
|
614
639
|
// `category` is shorthand for a top-level path; an explicit `path` wins.
|
|
@@ -10,57 +10,50 @@
|
|
|
10
10
|
* sandbox step agent, the planner (`tools/research/generate-plan.ts`), the
|
|
11
11
|
* run synthesizer (`execution/run-synthesis.ts`) and the analogical reasoner
|
|
12
12
|
* (`tools/research/generate-analogy-report.ts`) — and all four share one id,
|
|
13
|
-
* one input schema and one
|
|
14
|
-
*
|
|
15
|
-
* injects its own `blockedWhen` prose
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* runs in durable steps, so it reads the blocker back from the transcript
|
|
19
|
-
* (`recordedBlocker`) on replay, not only from its cell.
|
|
13
|
+
* one input schema and one result via `createReportBlockerToolFor`. What
|
|
14
|
+
* differs per loop is only what a blocker *means* there, so each call site
|
|
15
|
+
* injects its own `blockedWhen` prose. The result of the call carries the
|
|
16
|
+
* reason, and the driving body selects the blocker from the recorded calls of
|
|
17
|
+
* the run (`blockerOf`). Thus a replay selects the same blocker.
|
|
20
18
|
*/
|
|
21
|
-
import
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
import type { LoopStep } from "../../loop/run-loop.js";
|
|
22
21
|
import { type Tool } from "../define-tool.js";
|
|
23
22
|
export declare const REPORT_BLOCKER_TOOL_ID = "report_blocker";
|
|
24
|
-
export
|
|
23
|
+
export type BlockerOutcome = {
|
|
25
24
|
readonly kind: "blocker";
|
|
26
25
|
readonly reason: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
readonly record: (outcome: BlockerOutcome) => void;
|
|
26
|
+
};
|
|
27
|
+
/** The one input every `report_blocker` takes, wherever it is offered. */
|
|
28
|
+
declare const ReportBlockerInputSchema: z.ZodObject<{
|
|
29
|
+
reason: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
/** The result of a call: the blocker that the call recorded. */
|
|
32
|
+
declare const BlockerResultSchema: z.ZodObject<{
|
|
33
|
+
kind: z.ZodLiteral<"blocker">;
|
|
34
|
+
reason: z.ZodString;
|
|
35
|
+
message: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
type BlockerResult = z.infer<typeof BlockerResultSchema>;
|
|
38
|
+
export type ReportBlockerDeps = {
|
|
41
39
|
/**
|
|
42
40
|
* What a blocker means in THIS loop: which loop the call ends and the
|
|
43
41
|
* conditions that warrant it. Composed into the shared terminal contract,
|
|
44
42
|
* so a description can never promise a loop this instance does not end.
|
|
45
43
|
*/
|
|
46
44
|
readonly blockedWhen: string;
|
|
47
|
-
}
|
|
45
|
+
};
|
|
48
46
|
/**
|
|
49
47
|
* Build the `report_blocker` tool for one loop. The id, the input schema and
|
|
50
48
|
* the terminal contract ("pass a reason, then stop") are fixed here; the call
|
|
51
|
-
* site supplies only the per-loop meaning
|
|
52
|
-
*/
|
|
53
|
-
export declare function createReportBlockerToolFor(deps: ReportBlockerDeps): Tool;
|
|
54
|
-
/**
|
|
55
|
-
* The blocker that a run recorded, read from its transcript: the reason of the
|
|
56
|
-
* first `report_blocker` call, in call order, whose result is ok.
|
|
57
|
-
*
|
|
58
|
-
* A replay returns each tool step's cached result without re-running
|
|
59
|
-
* `execute`, so the in-memory cell is empty on replay; the transcript is not.
|
|
49
|
+
* site supplies only the per-loop meaning.
|
|
60
50
|
*/
|
|
61
|
-
export declare function
|
|
51
|
+
export declare function createReportBlockerToolFor(deps: ReportBlockerDeps): Tool<z.infer<typeof ReportBlockerInputSchema>, BlockerResult>;
|
|
52
|
+
/** The blocker that a run recorded: the reason of the first `report_blocker` call, in call order, whose result is ok. */
|
|
53
|
+
export declare function blockerOf(steps: readonly LoopStep[]): BlockerOutcome | null;
|
|
62
54
|
/**
|
|
63
|
-
* The sandbox step agent's `report_blocker
|
|
64
|
-
*
|
|
55
|
+
* The sandbox step agent's `report_blocker`. A blocker here ends the step with
|
|
56
|
+
* no deliverables and a blocked reason.
|
|
65
57
|
*/
|
|
66
|
-
export declare function createReportBlockerTool(
|
|
58
|
+
export declare function createReportBlockerTool(): Tool;
|
|
59
|
+
export {};
|
|
@@ -10,35 +10,27 @@
|
|
|
10
10
|
* sandbox step agent, the planner (`tools/research/generate-plan.ts`), the
|
|
11
11
|
* run synthesizer (`execution/run-synthesis.ts`) and the analogical reasoner
|
|
12
12
|
* (`tools/research/generate-analogy-report.ts`) — and all four share one id,
|
|
13
|
-
* one input schema and one
|
|
14
|
-
*
|
|
15
|
-
* injects its own `blockedWhen` prose
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* runs in durable steps, so it reads the blocker back from the transcript
|
|
19
|
-
* (`recordedBlocker`) on replay, not only from its cell.
|
|
13
|
+
* one input schema and one result via `createReportBlockerToolFor`. What
|
|
14
|
+
* differs per loop is only what a blocker *means* there, so each call site
|
|
15
|
+
* injects its own `blockedWhen` prose. The result of the call carries the
|
|
16
|
+
* reason, and the driving body selects the blocker from the recorded calls of
|
|
17
|
+
* the run (`blockerOf`). Thus a replay selects the same blocker.
|
|
20
18
|
*/
|
|
21
|
-
import {
|
|
19
|
+
import { ok } from "neverthrow";
|
|
22
20
|
import { z } from "zod";
|
|
23
|
-
import {
|
|
24
|
-
import { toolOutcomeForOutputType } from "../../loop/tool-outcome.js";
|
|
25
|
-
import { degenerateTerminalText } from "../terminal-text.js";
|
|
21
|
+
import { terminalTextSchema } from "../terminal-text.js";
|
|
26
22
|
import { defineTool } from "../define-tool.js";
|
|
27
23
|
export const REPORT_BLOCKER_TOOL_ID = "report_blocker";
|
|
28
|
-
export function createBlockerHolder() {
|
|
29
|
-
return { outcome: null };
|
|
30
|
-
}
|
|
31
24
|
/** The one input every `report_blocker` takes, wherever it is offered. */
|
|
32
25
|
const ReportBlockerInputSchema = z.object({
|
|
33
|
-
reason:
|
|
34
|
-
.string()
|
|
35
|
-
.min(1)
|
|
36
|
-
.describe("What blocks the work, stated as a fact: the missing or unreadable input, or the capability that is not available, and what you tried."),
|
|
26
|
+
reason: terminalTextSchema("What blocks the work, stated as a fact: the missing or unreadable input, or the capability that is not available, and what you tried."),
|
|
37
27
|
});
|
|
28
|
+
/** The result of a call: the blocker that the call recorded. */
|
|
29
|
+
const BlockerResultSchema = z.object({ kind: z.literal("blocker"), reason: z.string(), message: z.string() });
|
|
38
30
|
/**
|
|
39
31
|
* Build the `report_blocker` tool for one loop. The id, the input schema and
|
|
40
32
|
* the terminal contract ("pass a reason, then stop") are fixed here; the call
|
|
41
|
-
* site supplies only the per-loop meaning
|
|
33
|
+
* site supplies only the per-loop meaning.
|
|
42
34
|
*/
|
|
43
35
|
export function createReportBlockerToolFor(deps) {
|
|
44
36
|
return defineTool({
|
|
@@ -46,70 +38,28 @@ export function createReportBlockerToolFor(deps) {
|
|
|
46
38
|
description: `Terminal. ${deps.blockedWhen} Pass a clear reason. Stop immediately after calling — take no further actions.`,
|
|
47
39
|
inputSchema: ReportBlockerInputSchema,
|
|
48
40
|
describeCall: "none",
|
|
49
|
-
execute:
|
|
50
|
-
const degenerate = degenerateTerminalText(input.reason);
|
|
51
|
-
if (degenerate)
|
|
52
|
-
return err({ error: `${degenerate} Give the real reason, or continue the work.`, retryable: true });
|
|
53
|
-
deps.record({ kind: "blocker", reason: input.reason });
|
|
54
|
-
return ok({
|
|
55
|
-
recorded: true,
|
|
56
|
-
message: "Blocker recorded. You are done — stop now and do not take further actions.",
|
|
57
|
-
});
|
|
58
|
-
},
|
|
41
|
+
execute: (input) => Promise.resolve(ok({ kind: "blocker", reason: input.reason, message: "Blocker recorded. You are done — stop now and do not take further actions." })),
|
|
59
42
|
});
|
|
60
43
|
}
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
* `execute`, so the in-memory cell is empty on replay; the transcript is not.
|
|
67
|
-
*/
|
|
68
|
-
export function recordedBlocker(messages) {
|
|
69
|
-
const recorded = new Set();
|
|
70
|
-
for (const message of messages) {
|
|
71
|
-
if (message.role !== "tool")
|
|
72
|
-
continue;
|
|
73
|
-
for (const part of message.content) {
|
|
74
|
-
if (part.type === "tool-result" && part.toolName === REPORT_BLOCKER_TOOL_ID && toolOutcomeForOutputType(part.output.type) === "ok") {
|
|
75
|
-
recorded.add(part.toolCallId);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
for (const message of messages) {
|
|
80
|
-
if (message.role !== "assistant" || typeof message.content === "string")
|
|
81
|
-
continue;
|
|
82
|
-
for (const part of message.content) {
|
|
83
|
-
if (part.type !== "tool-call" || part.toolName !== REPORT_BLOCKER_TOOL_ID || !recorded.has(part.toolCallId))
|
|
44
|
+
/** The blocker that a run recorded: the reason of the first `report_blocker` call, in call order, whose result is ok. */
|
|
45
|
+
export function blockerOf(steps) {
|
|
46
|
+
for (const step of steps) {
|
|
47
|
+
for (const call of step.calls) {
|
|
48
|
+
if (call.toolName !== REPORT_BLOCKER_TOOL_ID || call.output?.outcome !== "ok")
|
|
84
49
|
continue;
|
|
85
|
-
const
|
|
86
|
-
if (
|
|
87
|
-
return { kind: "blocker", reason };
|
|
50
|
+
const result = BlockerResultSchema.safeParse(call.output.value);
|
|
51
|
+
if (result.success)
|
|
52
|
+
return { kind: "blocker", reason: result.data.reason };
|
|
88
53
|
}
|
|
89
54
|
}
|
|
90
55
|
return null;
|
|
91
56
|
}
|
|
92
|
-
/** The reason of a `report_blocker` input, validated as the dispatch validates it. */
|
|
93
|
-
function blockerReason(input) {
|
|
94
|
-
const parsed = ReportBlockerInputSchema.safeParse(input);
|
|
95
|
-
if (parsed.success)
|
|
96
|
-
return parsed.data.reason;
|
|
97
|
-
const repaired = repairToolInput(input, parsed.error);
|
|
98
|
-
if (repaired === undefined)
|
|
99
|
-
return undefined;
|
|
100
|
-
const reparsed = ReportBlockerInputSchema.safeParse(repaired);
|
|
101
|
-
return reparsed.success ? reparsed.data.reason : undefined;
|
|
102
|
-
}
|
|
103
57
|
/**
|
|
104
|
-
* The sandbox step agent's `report_blocker
|
|
105
|
-
*
|
|
58
|
+
* The sandbox step agent's `report_blocker`. A blocker here ends the step with
|
|
59
|
+
* no deliverables and a blocked reason.
|
|
106
60
|
*/
|
|
107
|
-
export function createReportBlockerTool(
|
|
61
|
+
export function createReportBlockerTool() {
|
|
108
62
|
return createReportBlockerToolFor({
|
|
109
|
-
record: (outcome) => {
|
|
110
|
-
if (holder.outcome === null)
|
|
111
|
-
holder.outcome = outcome;
|
|
112
|
-
},
|
|
113
63
|
blockedWhen: "Ends this analysis step with no deliverables. Call it when you cannot " +
|
|
114
64
|
"fulfil the step — required inputs are missing or unreadable, the " +
|
|
115
65
|
"requested analysis is infeasible with the available data/packages, or " +
|