@inflexa-ai/harness 0.45.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* One URL in, extracted text out: HTML becomes Markdown (Readability over a
|
|
5
5
|
* `linkedom` DOM, then Turndown, with the body text as the fallback), a PDF
|
|
6
6
|
* becomes the text of its first 100 pages through `pdf-parse`, and a text or
|
|
7
|
-
* JSON body passes through. A bad scheme,
|
|
7
|
+
* JSON body passes through. A bad scheme, an internal address, an HTTP error, an
|
|
8
8
|
* oversized body, a redirect chain past the limit, and a body the tool cannot
|
|
9
9
|
* extract are all normal results on the ok channel — never a failure of the
|
|
10
10
|
* turn.
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
* runs no name lookup for a literal — and a name classifies inside the `lookup`
|
|
16
16
|
* hook of `node:http`/`node:https`, over every address of the resolution,
|
|
17
17
|
* because the connect layer falls back to a later address after an earlier one
|
|
18
|
-
* fails. A guarded hop is destroyed before
|
|
19
|
-
*
|
|
18
|
+
* fails. A guarded hop is destroyed before it connects, and the call gives a
|
|
19
|
+
* refusal that names the origin. The tool asks nothing.
|
|
20
20
|
*/
|
|
21
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
22
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
21
23
|
import { lookup as dnsLookup } from "node:dns";
|
|
22
24
|
import { request as httpRequest } from "node:http";
|
|
23
25
|
import { request as httpsRequest } from "node:https";
|
|
@@ -28,8 +30,9 @@ import { Readability } from "@mozilla/readability";
|
|
|
28
30
|
import { parseHTML } from "linkedom";
|
|
29
31
|
import TurndownService from "turndown";
|
|
30
32
|
import { z } from "zod";
|
|
33
|
+
import { presentLast } from "../../lib/present.js";
|
|
34
|
+
import { hasWhitespace } from "../../lib/text.js";
|
|
31
35
|
import { keptTextOf, pairSafeIndex, TOOL_RESULT_CAP, toolOutputRef } from "../../loop/tool-output.js";
|
|
32
|
-
import { AskRejectedError } from "../approval/contract.js";
|
|
33
36
|
import { defineTool } from "../define-tool.js";
|
|
34
37
|
import { HARNESS_USER_AGENT } from "../lib/api-utils.js";
|
|
35
38
|
import { isGuardedAddress } from "./guarded-address.js";
|
|
@@ -66,7 +69,7 @@ function hopTimeoutError(url) {
|
|
|
66
69
|
function isAbort(error, ctx) {
|
|
67
70
|
return error.name === "AbortError" || ctx.signal.aborted;
|
|
68
71
|
}
|
|
69
|
-
/** The origin of
|
|
72
|
+
/** The origin of a URL: scheme, host, and the port the connection uses, with the default filled in. */
|
|
70
73
|
function originOf(url) {
|
|
71
74
|
const port = url.port !== "" ? url.port : url.protocol === "https:" ? "443" : "80";
|
|
72
75
|
return `${url.protocol}//${url.hostname}:${port}`;
|
|
@@ -100,37 +103,17 @@ function withoutCredentials(url) {
|
|
|
100
103
|
clean.password = "";
|
|
101
104
|
return clean;
|
|
102
105
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
detail: `The address of ${url.hostname} is in a guarded range (loopback, private, link-local, or reserved). ` +
|
|
109
|
-
`An "always" answer approves every later web_fetch of the origin ${origin}; a "once" answer approves this call only.`,
|
|
106
|
+
function refusedGuarded(url) {
|
|
107
|
+
return {
|
|
108
|
+
status: "refused",
|
|
109
|
+
text: `web_fetch did not read ${url.toString()}: the origin ${originOf(url)} has an internal address ` +
|
|
110
|
+
`(loopback, private, link-local, or reserved), and web_fetch reads no internal address.`,
|
|
110
111
|
};
|
|
111
|
-
try {
|
|
112
|
-
await ctx.ask(request);
|
|
113
|
-
return { kind: "approved" };
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
if (error instanceof AskRejectedError) {
|
|
117
|
-
return {
|
|
118
|
-
kind: "denied",
|
|
119
|
-
output: {
|
|
120
|
-
status: "refused",
|
|
121
|
-
text: `web_fetch did not read ${url.toString()}: the guarded address ${url.hostname} was not approved.`,
|
|
122
|
-
...(error.feedback !== undefined ? { feedback: error.feedback } : {}),
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
112
|
}
|
|
129
113
|
/**
|
|
130
114
|
* Send one hop. The `lookup` hook classifies every address of each resolution
|
|
131
|
-
* before the connect can use any of it: when a guarded address appears
|
|
132
|
-
*
|
|
133
|
-
* no socket opens while the user reads the prompt.
|
|
115
|
+
* before the connect can use any of it: when a guarded address appears, the hook
|
|
116
|
+
* answers nothing and destroys the request, so no socket opens.
|
|
134
117
|
*/
|
|
135
118
|
function sendHop(url, state) {
|
|
136
119
|
return new Promise((resolve, reject) => {
|
|
@@ -169,8 +152,7 @@ function sendHop(url, state) {
|
|
|
169
152
|
callback(error, "");
|
|
170
153
|
return;
|
|
171
154
|
}
|
|
172
|
-
|
|
173
|
-
if (guarded && !state.approvedOrigins.has(originOf(url))) {
|
|
155
|
+
if (addresses.some((entry) => isGuardedAddress(entry.address))) {
|
|
174
156
|
// With no callback the connect never starts, and the destroy
|
|
175
157
|
// carries the signal out through the error event.
|
|
176
158
|
request.destroy(new GuardedHopSignal());
|
|
@@ -193,6 +175,7 @@ function sendHop(url, state) {
|
|
|
193
175
|
},
|
|
194
176
|
});
|
|
195
177
|
// The socket-idle timeout below does not bound a server that trickles bytes, so a wall clock bounds the whole hop.
|
|
178
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- a guard, not a wait: it destroys the in-flight hop at the wall clock, unrefs so it never holds the process, and the settle disposes it.
|
|
196
179
|
const deadline = setTimeout(() => {
|
|
197
180
|
const error = hopTimeoutError(url);
|
|
198
181
|
liveResponse?.destroy(error);
|
|
@@ -289,6 +272,16 @@ const MAX_HTML_NESTING = 512;
|
|
|
289
272
|
const VOID_TAGS = new Set(["area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr"]);
|
|
290
273
|
/** Elements whose content is raw text: the scanner skips to their close tag, because markup inside them is not structure. */
|
|
291
274
|
const RAW_TEXT_TAGS = new Set(["script", "style", "textarea", "title", "xmp", "noscript", "iframe", "noembed"]);
|
|
275
|
+
/** A raw-text close repeats the element name in any letter case and ends at whitespace, a slash, or the bracket. */
|
|
276
|
+
function isRawTextClose(html, at, name) {
|
|
277
|
+
if (html.slice(at + 2, at + 2 + name.length).toLowerCase() !== name)
|
|
278
|
+
return false;
|
|
279
|
+
const next = html.charAt(at + 2 + name.length);
|
|
280
|
+
return next === ">" || next === "/" || hasWhitespace(next);
|
|
281
|
+
}
|
|
282
|
+
function isTagNameChar(char) {
|
|
283
|
+
return (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9") || char === ":" || char === "-";
|
|
284
|
+
}
|
|
292
285
|
/** An opening tag in a family closes its open peers before it nests — the implied-end rules that keep a list or a table row of any length flat. */
|
|
293
286
|
const IMPLIED_CLOSE_PEERS = {
|
|
294
287
|
li: new Set(["li"]),
|
|
@@ -316,10 +309,17 @@ const IMPLIED_CLOSE_PEERS = {
|
|
|
316
309
|
export function htmlNestingDepth(html) {
|
|
317
310
|
let max = 0;
|
|
318
311
|
const stack = [];
|
|
319
|
-
const tagName = (start, end) =>
|
|
320
|
-
.slice(start, end)
|
|
321
|
-
.
|
|
322
|
-
|
|
312
|
+
const tagName = (start, end) => {
|
|
313
|
+
const text = html.slice(start, end);
|
|
314
|
+
const first = text.charAt(0);
|
|
315
|
+
const isLetter = (first >= "a" && first <= "z") || (first >= "A" && first <= "Z");
|
|
316
|
+
if (!isLetter)
|
|
317
|
+
return "";
|
|
318
|
+
let at = 1;
|
|
319
|
+
while (at < text.length && isTagNameChar(text.charAt(at)))
|
|
320
|
+
at++;
|
|
321
|
+
return text.slice(0, at).toLowerCase();
|
|
322
|
+
};
|
|
323
323
|
let i = 0;
|
|
324
324
|
while (i < html.length) {
|
|
325
325
|
if (html[i] !== "<") {
|
|
@@ -372,17 +372,17 @@ export function htmlNestingDepth(html) {
|
|
|
372
372
|
if (name === "")
|
|
373
373
|
continue;
|
|
374
374
|
if (RAW_TEXT_TAGS.has(name)) {
|
|
375
|
-
|
|
376
|
-
close
|
|
377
|
-
|
|
378
|
-
i =
|
|
375
|
+
let close = html.indexOf("</", i);
|
|
376
|
+
while (close !== -1 && !isRawTextClose(html, close, name))
|
|
377
|
+
close = html.indexOf("</", close + 1);
|
|
378
|
+
i = close === -1 ? html.length : close + 2 + name.length;
|
|
379
379
|
continue;
|
|
380
380
|
}
|
|
381
381
|
if (selfClosed || VOID_TAGS.has(name))
|
|
382
382
|
continue;
|
|
383
383
|
const peers = IMPLIED_CLOSE_PEERS[name];
|
|
384
384
|
if (peers !== undefined) {
|
|
385
|
-
while (stack.length > 0 && peers.has(stack
|
|
385
|
+
while (stack.length > 0 && peers.has(presentLast(stack, "the top of the tag stack")))
|
|
386
386
|
stack.pop();
|
|
387
387
|
}
|
|
388
388
|
stack.push(name);
|
|
@@ -399,7 +399,7 @@ function htmlToMarkdown(body) {
|
|
|
399
399
|
const article = new Readability(dom.document).parse();
|
|
400
400
|
if (article?.content)
|
|
401
401
|
return markdownConverter.turndown(article.content).trim();
|
|
402
|
-
return
|
|
402
|
+
return dom.document.body.textContent.trim();
|
|
403
403
|
}
|
|
404
404
|
/** Hostile HTML can throw inside the extraction stack; the body text, then the status union, catch the throw. A page that nests past the bound never reaches a parser, because the parse itself is the stall. */
|
|
405
405
|
function htmlExtractionOf(body) {
|
|
@@ -413,7 +413,7 @@ function htmlExtractionOf(body) {
|
|
|
413
413
|
catch {
|
|
414
414
|
try {
|
|
415
415
|
const dom = parseHTML(html);
|
|
416
|
-
return { kind: "text", text:
|
|
416
|
+
return { kind: "text", text: dom.document.body.textContent.trim() };
|
|
417
417
|
}
|
|
418
418
|
catch {
|
|
419
419
|
return { kind: "unextractable", detail: "the HTML extraction failed" };
|
|
@@ -436,7 +436,7 @@ async function extractBody(contentType, body) {
|
|
|
436
436
|
return { kind: "text", text: result.text.trim(), pdfCut };
|
|
437
437
|
}
|
|
438
438
|
catch (error) {
|
|
439
|
-
return { kind: "unextractable", detail: `the PDF parser failed: ${error
|
|
439
|
+
return { kind: "unextractable", detail: `the PDF parser failed: ${errorMessageOf(error) ?? textOf(error)}` };
|
|
440
440
|
}
|
|
441
441
|
finally {
|
|
442
442
|
await parser.destroy();
|
|
@@ -449,13 +449,15 @@ async function extractBody(contentType, body) {
|
|
|
449
449
|
}
|
|
450
450
|
/** Build the ok result for one returned text, so the serialized-cap shrink rebuilds the same fields each round. */
|
|
451
451
|
function okResultOf(base, fullText, kept, shown) {
|
|
452
|
-
|
|
452
|
+
const result = {
|
|
453
453
|
...base,
|
|
454
|
-
|
|
454
|
+
kept,
|
|
455
455
|
text: shown,
|
|
456
456
|
cut: shown.length < fullText.length,
|
|
457
|
-
...(shown.length < fullText.length && kept === undefined ? { remainderNotKept: true } : {}),
|
|
458
457
|
};
|
|
458
|
+
if (shown.length < fullText.length && kept === undefined)
|
|
459
|
+
result.remainderNotKept = true;
|
|
460
|
+
return result;
|
|
459
461
|
}
|
|
460
462
|
async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
461
463
|
let parsed;
|
|
@@ -465,11 +467,9 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
|
465
467
|
catch {
|
|
466
468
|
return { status: "invalid_url", text: `web_fetch cannot read ${rawUrl}: it is not a valid URL.` };
|
|
467
469
|
}
|
|
468
|
-
const approvedOrigins = new Set();
|
|
469
470
|
const state = {
|
|
470
471
|
lookup: deps.lookup ?? dnsLookup,
|
|
471
472
|
hopRequest: deps.hopRequest ?? defaultHopRequest,
|
|
472
|
-
approvedOrigins,
|
|
473
473
|
ctx,
|
|
474
474
|
};
|
|
475
475
|
let redirects = 0;
|
|
@@ -479,24 +479,14 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
|
479
479
|
}
|
|
480
480
|
if (current.username !== "" || current.password !== "")
|
|
481
481
|
current = withoutCredentials(current);
|
|
482
|
-
const origin = originOf(current);
|
|
483
482
|
const literal = stripAddressBrackets(current.hostname);
|
|
484
|
-
if (isIP(literal) !== 0 && isGuardedAddress(literal)
|
|
485
|
-
|
|
486
|
-
if (asked.kind === "denied")
|
|
487
|
-
return asked.output;
|
|
488
|
-
approvedOrigins.add(origin);
|
|
489
|
-
}
|
|
483
|
+
if (isIP(literal) !== 0 && isGuardedAddress(literal))
|
|
484
|
+
return refusedGuarded(current);
|
|
490
485
|
const hop = await sendHop(current, state);
|
|
491
486
|
if (hop.kind === "failed")
|
|
492
487
|
return hop.output;
|
|
493
|
-
if (hop.kind === "guarded")
|
|
494
|
-
|
|
495
|
-
if (asked.kind === "denied")
|
|
496
|
-
return asked.output;
|
|
497
|
-
approvedOrigins.add(origin);
|
|
498
|
-
continue;
|
|
499
|
-
}
|
|
488
|
+
if (hop.kind === "guarded")
|
|
489
|
+
return refusedGuarded(current);
|
|
500
490
|
const response = hop.response;
|
|
501
491
|
try {
|
|
502
492
|
const status = response.statusCode ?? 0;
|
|
@@ -565,7 +555,7 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
|
565
555
|
status: "unextractable",
|
|
566
556
|
contentType,
|
|
567
557
|
text: `web_fetch cannot extract text from the content type ${named}.`,
|
|
568
|
-
|
|
558
|
+
detail: extracted.detail,
|
|
569
559
|
};
|
|
570
560
|
}
|
|
571
561
|
const fullText = extracted.text.trim();
|
|
@@ -575,7 +565,7 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
|
575
565
|
finalUrl: current.toString(),
|
|
576
566
|
contentType,
|
|
577
567
|
totalLength: fullText.length,
|
|
578
|
-
|
|
568
|
+
pdfCut: extracted.pdfCut,
|
|
579
569
|
};
|
|
580
570
|
let output = okResultOf(base, fullText, undefined, shown);
|
|
581
571
|
while (JSON.stringify(output).length > RESULT_BUDGET && shown.length > 0) {
|
|
@@ -593,20 +583,23 @@ async function fetchOneUrl(rawUrl, deps, ctx) {
|
|
|
593
583
|
ref,
|
|
594
584
|
toolName: "web_fetch",
|
|
595
585
|
toolCallId: ctx.invocationId,
|
|
596
|
-
|
|
586
|
+
threadId: ctx.session.scope.threadId,
|
|
597
587
|
content,
|
|
598
588
|
totalLength: fullText.length,
|
|
599
589
|
});
|
|
600
590
|
if (put.isOk())
|
|
601
591
|
kept = { ref, keptLength: content.length };
|
|
602
592
|
}
|
|
603
|
-
return okResultOf(
|
|
593
|
+
return okResultOf(base, fullText, kept, shown);
|
|
604
594
|
}
|
|
605
595
|
finally {
|
|
606
596
|
hop.dispose();
|
|
607
597
|
}
|
|
608
598
|
}
|
|
609
599
|
}
|
|
600
|
+
const WebFetchInputSchema = z.object({
|
|
601
|
+
url: z.string().min(1).max(2048).describe("The http or https URL of one page to read, for example a page a web_search result named."),
|
|
602
|
+
});
|
|
610
603
|
export function createWebFetchTool(deps = {}) {
|
|
611
604
|
return defineTool({
|
|
612
605
|
id: "web_fetch",
|
|
@@ -615,12 +608,10 @@ export function createWebFetchTool(deps = {}) {
|
|
|
615
608
|
"The tool returns at most 30,000 characters; a longer text is cut, and the result carries a reference " +
|
|
616
609
|
"through which `read_tool_output` reads the remainder when the harness kept it.\n" +
|
|
617
610
|
"ABSENCE AND FAILURE ARE NORMAL: the statuses invalid_url (a URL the tool cannot parse), " +
|
|
618
|
-
"unsupported_scheme (a scheme that is not http or https), refused (
|
|
619
|
-
"
|
|
611
|
+
"unsupported_scheme (a scheme that is not http or https), refused (an internal address: loopback, " +
|
|
612
|
+
"private, link-local, or reserved), http_error, redirect_limit, body_too_large, unextractable, and request_failed each name what " +
|
|
620
613
|
"happened. Report the status and continue, do not retry unchanged.",
|
|
621
|
-
inputSchema:
|
|
622
|
-
url: z.string().min(1).max(2048).describe("The http or https URL of one page to read, for example a page a web_search result named."),
|
|
623
|
-
}),
|
|
614
|
+
inputSchema: WebFetchInputSchema,
|
|
624
615
|
describeCall: ({ url }) => url,
|
|
625
616
|
execute: async ({ url }, ctx) => ok(await fetchOneUrl(url, deps, ctx)),
|
|
626
617
|
});
|
|
@@ -9,15 +9,17 @@
|
|
|
9
9
|
* never as an error of the turn.
|
|
10
10
|
*/
|
|
11
11
|
import { type Result } from "neverthrow";
|
|
12
|
-
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { type Tool } from "../define-tool.js";
|
|
14
|
+
export type WebSearchAnswer = {
|
|
13
15
|
readonly answer?: string;
|
|
14
16
|
readonly url?: string;
|
|
15
|
-
}
|
|
16
|
-
export
|
|
17
|
+
};
|
|
18
|
+
export type WebSearchResult = {
|
|
17
19
|
readonly title: string;
|
|
18
20
|
readonly url: string;
|
|
19
21
|
readonly snippet?: string;
|
|
20
|
-
}
|
|
22
|
+
};
|
|
21
23
|
export type WebSearchOutput = {
|
|
22
24
|
readonly status: "ok";
|
|
23
25
|
readonly answers: readonly WebSearchAnswer[];
|
|
@@ -39,11 +41,11 @@ export type WebSearchOutput = {
|
|
|
39
41
|
readonly detail?: string;
|
|
40
42
|
};
|
|
41
43
|
/** One query with its terms already composed: the engine adds transport, not semantics. */
|
|
42
|
-
export
|
|
44
|
+
export type WebSearchRequest = {
|
|
43
45
|
/** The final query text, `site:` / `-site:` terms included. */
|
|
44
46
|
readonly query: string;
|
|
45
47
|
readonly recencyFilter?: "day" | "week" | "month" | "year";
|
|
46
|
-
}
|
|
48
|
+
};
|
|
47
49
|
/** What one query returned: the mapped answers and the mapped result rows. */
|
|
48
50
|
export type WebSearchPage = {
|
|
49
51
|
readonly answers: readonly WebSearchAnswer[];
|
|
@@ -59,17 +61,24 @@ export type WebSearchEngineError = Exclude<WebSearchOutput, {
|
|
|
59
61
|
* query terms and the optional recency filter, and resolves to the page or to
|
|
60
62
|
* the error variant that names the failure.
|
|
61
63
|
*/
|
|
62
|
-
export
|
|
64
|
+
export type WebSearchEngine = {
|
|
63
65
|
search(request: WebSearchRequest): Promise<Result<WebSearchPage, WebSearchEngineError>>;
|
|
64
|
-
}
|
|
65
|
-
export
|
|
66
|
+
};
|
|
67
|
+
export type WebSearchToolDeps = {
|
|
66
68
|
/** The web-search engine the embedder injected. */
|
|
67
69
|
readonly engine: WebSearchEngine;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
recencyFilter
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
};
|
|
71
|
+
declare const WebSearchInputSchema: z.ZodObject<{
|
|
72
|
+
query: z.ZodOptional<z.ZodString>;
|
|
73
|
+
queries: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
74
|
+
numResults: z.ZodDefault<z.ZodNumber>;
|
|
75
|
+
recencyFilter: z.ZodOptional<z.ZodEnum<{
|
|
76
|
+
day: "day";
|
|
77
|
+
month: "month";
|
|
78
|
+
week: "week";
|
|
79
|
+
year: "year";
|
|
80
|
+
}>>;
|
|
81
|
+
domainFilter: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
export declare function createWebSearchTool(deps: WebSearchToolDeps): Tool<z.infer<typeof WebSearchInputSchema>, WebSearchOutput>;
|
|
84
|
+
export {};
|
|
@@ -50,6 +50,22 @@ function applyDomainFilter(results, filter) {
|
|
|
50
50
|
return filter.include ? matches : !matches;
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
+
const WebSearchInputSchema = z
|
|
54
|
+
.object({
|
|
55
|
+
query: z.string().min(1).optional().describe("One free-text search, for example a method name with its domain."),
|
|
56
|
+
queries: z
|
|
57
|
+
.array(z.string().min(1))
|
|
58
|
+
.min(1)
|
|
59
|
+
.max(5)
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("Up to 5 searches that run in one pass. Answers and results merge into one bounded list."),
|
|
62
|
+
numResults: z.number().int().min(1).max(20).default(5).describe("Maximum merged results (1–20, default 5)."),
|
|
63
|
+
recencyFilter: z.enum(["day", "week", "month", "year"]).optional().describe("Keep only results from this recency."),
|
|
64
|
+
domainFilter: z.string().optional().describe('One domain the search stays in, for example "nih.gov". A leading "-" excludes the domain instead.'),
|
|
65
|
+
})
|
|
66
|
+
.refine((input) => (input.query !== undefined) !== (input.queries !== undefined), {
|
|
67
|
+
message: "Give exactly one of `query` or `queries`.",
|
|
68
|
+
});
|
|
53
69
|
export function createWebSearchTool(deps) {
|
|
54
70
|
return defineTool({
|
|
55
71
|
id: "web_search",
|
|
@@ -60,31 +76,20 @@ export function createWebSearchTool(deps) {
|
|
|
60
76
|
"week, month, or year. Read one of the returned pages with `web_fetch`.\n" +
|
|
61
77
|
"ABSENCE IS NORMAL: an empty results array means no page matched, and a status of http_error, retryable_status, " +
|
|
62
78
|
"schema_mismatch, or not_json names a search that did not answer. Report either one and continue, do not retry unchanged.",
|
|
63
|
-
inputSchema:
|
|
64
|
-
.object({
|
|
65
|
-
query: z.string().min(1).optional().describe("One free-text search, for example a method name with its domain."),
|
|
66
|
-
queries: z
|
|
67
|
-
.array(z.string().min(1))
|
|
68
|
-
.min(1)
|
|
69
|
-
.max(5)
|
|
70
|
-
.optional()
|
|
71
|
-
.describe("Up to 5 searches that run in one pass. Answers and results merge into one bounded list."),
|
|
72
|
-
numResults: z.number().int().min(1).max(20).default(5).describe("Maximum merged results (1–20, default 5)."),
|
|
73
|
-
recencyFilter: z.enum(["day", "week", "month", "year"]).optional().describe("Keep only results from this recency."),
|
|
74
|
-
domainFilter: z
|
|
75
|
-
.string()
|
|
76
|
-
.optional()
|
|
77
|
-
.describe('One domain the search stays in, for example "nih.gov". A leading "-" excludes the domain instead.'),
|
|
78
|
-
})
|
|
79
|
-
.refine((input) => (input.query !== undefined) !== (input.queries !== undefined), {
|
|
80
|
-
message: "Give exactly one of `query` or `queries`.",
|
|
81
|
-
}),
|
|
79
|
+
inputSchema: WebSearchInputSchema,
|
|
82
80
|
describeCall: "none",
|
|
83
81
|
execute: async ({ query, queries, numResults, recencyFilter, domainFilter }) => {
|
|
84
82
|
const filter = parseDomainFilter(domainFilter);
|
|
85
83
|
// The input refine guarantees exactly one of `query` and `queries`.
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
let queryList;
|
|
85
|
+
if (queries !== undefined)
|
|
86
|
+
queryList = queries;
|
|
87
|
+
else {
|
|
88
|
+
if (query === undefined)
|
|
89
|
+
throw new Error("search requires query");
|
|
90
|
+
queryList = [query];
|
|
91
|
+
}
|
|
92
|
+
const requests = queryList.map((raw) => deps.engine.search({ query: queryTerms(raw, filter), recencyFilter }));
|
|
88
93
|
const responses = [];
|
|
89
94
|
for (const response of await Promise.all(requests)) {
|
|
90
95
|
// An engine failure is the data-status variant the tool reports, not a turn error.
|
|
@@ -14,22 +14,26 @@
|
|
|
14
14
|
* the prompt layer.
|
|
15
15
|
*/
|
|
16
16
|
import { type Result } from "neverthrow";
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { type Tool } from "../define-tool.js";
|
|
17
19
|
import { type PackageQuery } from "../../sandbox/package-identity.js";
|
|
18
20
|
import type { ExtendAnalysisFarm, PackageRequestOutcome } from "../../sandbox/types.js";
|
|
19
|
-
export
|
|
21
|
+
export type LinkPackagesDeps = {
|
|
20
22
|
readonly extendAnalysisFarm: ExtendAnalysisFarm;
|
|
21
23
|
readonly analysisId: string;
|
|
22
|
-
}
|
|
24
|
+
};
|
|
23
25
|
/** The tool result: one outcome per requested query, index-aligned. */
|
|
24
|
-
export
|
|
26
|
+
export type LinkPackagesResult = {
|
|
25
27
|
readonly outcomes: readonly PackageRequestOutcome[];
|
|
26
|
-
}
|
|
28
|
+
};
|
|
27
29
|
/**
|
|
28
30
|
* Call the seam, and give the outcomes or the one reason that the call gave
|
|
29
31
|
* no answer. An `err` and a rejected realization each give that reason, thus
|
|
30
32
|
* no call site sees a throw.
|
|
31
33
|
*/
|
|
32
34
|
export declare function callExtendAnalysisFarm(extendAnalysisFarm: ExtendAnalysisFarm, analysisId: string, queries: readonly PackageQuery[]): Promise<Result<readonly PackageRequestOutcome[], string>>;
|
|
33
|
-
|
|
34
|
-
packages:
|
|
35
|
-
},
|
|
35
|
+
declare const LinkPackagesInputSchema: z.ZodObject<{
|
|
36
|
+
packages: z.ZodArray<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export declare function createLinkPackagesTool(deps: LinkPackagesDeps): Tool<z.infer<typeof LinkPackagesInputSchema>, LinkPackagesResult>;
|
|
39
|
+
export {};
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* capability, thus the agent learns one grammar for the plan, the tool, and
|
|
14
14
|
* the prompt layer.
|
|
15
15
|
*/
|
|
16
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
17
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
16
18
|
import { err, ok } from "neverthrow";
|
|
17
19
|
import { z } from "zod";
|
|
18
20
|
import { defineTool } from "../define-tool.js";
|
|
@@ -44,9 +46,16 @@ export async function callExtendAnalysisFarm(extendAnalysisFarm, analysisId, que
|
|
|
44
46
|
return (await extendAnalysisFarm(analysisId, queries)).mapErr((failure) => failure.reason);
|
|
45
47
|
}
|
|
46
48
|
catch (cause) {
|
|
47
|
-
return err(cause
|
|
49
|
+
return err(errorMessageOf(cause) ?? textOf(cause));
|
|
48
50
|
}
|
|
49
51
|
}
|
|
52
|
+
const LinkPackagesInputSchema = z.object({
|
|
53
|
+
packages: z
|
|
54
|
+
.array(z.string().min(1))
|
|
55
|
+
.min(1)
|
|
56
|
+
.max(50)
|
|
57
|
+
.describe('The packages to link into the farm, each as `[python:|r:]<name>[==<version>]`, for example ["scanpy", "r:Seurat", "numpy==1.26.4"]. A bare name searches both tracks.'),
|
|
58
|
+
});
|
|
50
59
|
export function createLinkPackagesTool(deps) {
|
|
51
60
|
return defineTool({
|
|
52
61
|
id: "link_packages",
|
|
@@ -60,13 +69,7 @@ export function createLinkPackagesTool(deps) {
|
|
|
60
69
|
"or `unavailable` (the link pass itself could not answer — the `reason` says why; it says nothing about the package's presence, so report the reason and do not re-request packages). " +
|
|
61
70
|
"After a `collision` of one name that BOTH tracks hold, call this tool again for that package with the prefixed form, `python:<name>` or `r:<name>`. " +
|
|
62
71
|
"A collision is terminal only after that second call also refuses, or when it names two versions of one distribution — then report it and continue without the package.",
|
|
63
|
-
inputSchema:
|
|
64
|
-
packages: z
|
|
65
|
-
.array(z.string().min(1))
|
|
66
|
-
.min(1)
|
|
67
|
-
.max(50)
|
|
68
|
-
.describe('The packages to link into the farm, each as `[python:|r:]<name>[==<version>]`, for example ["scanpy", "r:Seurat", "numpy==1.26.4"]. A bare name searches both tracks.'),
|
|
69
|
-
}),
|
|
72
|
+
inputSchema: LinkPackagesInputSchema,
|
|
70
73
|
describeCall: ({ packages }) => packages.join(", "),
|
|
71
74
|
execute: async (input) => {
|
|
72
75
|
// Every entry parses before any link lands. A partial link over a
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
* content hash where the source records them. A full listing carries no
|
|
20
20
|
* hashes — a thousand rows of sha256 would bury the signal.
|
|
21
21
|
*/
|
|
22
|
+
import { z } from "zod";
|
|
23
|
+
import { type Tool } from "../define-tool.js";
|
|
22
24
|
import type { EnvironmentStorePaths, PoolInventoryPackage, PoolInventorySection } from "../../config/environment-stores.js";
|
|
23
25
|
import { type Track } from "../../sandbox/package-identity.js";
|
|
24
26
|
import { type FarmLock } from "../../sandbox/farm.js";
|
|
@@ -100,12 +102,12 @@ export type PackagesResult = {
|
|
|
100
102
|
readonly content: string;
|
|
101
103
|
};
|
|
102
104
|
/** The tool's input, as parsed from `inputSchema`. */
|
|
103
|
-
export
|
|
105
|
+
export type PackagesQuery = {
|
|
104
106
|
readonly names?: readonly string[];
|
|
105
107
|
readonly query?: string;
|
|
106
108
|
readonly language?: "r" | "python" | "cli" | "node";
|
|
107
109
|
readonly limit?: number;
|
|
108
|
-
}
|
|
110
|
+
};
|
|
109
111
|
/**
|
|
110
112
|
* Answer a packages query against a parsed catalog. Pure — the tool's `execute`
|
|
111
113
|
* is only the file read plus this call.
|
|
@@ -150,9 +152,16 @@ export declare function readInventorySections(deps: ListAvailablePackagesDeps, a
|
|
|
150
152
|
* host-readable farm `inflexa.lock` otherwise (a sandbox agent). The image
|
|
151
153
|
* record merges into either report.
|
|
152
154
|
*/
|
|
153
|
-
|
|
154
|
-
names
|
|
155
|
-
query
|
|
156
|
-
language
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
declare const ListAvailablePackagesInputSchema: z.ZodObject<{
|
|
156
|
+
names: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
157
|
+
query: z.ZodOptional<z.ZodString>;
|
|
158
|
+
language: z.ZodOptional<z.ZodEnum<{
|
|
159
|
+
cli: "cli";
|
|
160
|
+
node: "node";
|
|
161
|
+
python: "python";
|
|
162
|
+
r: "r";
|
|
163
|
+
}>>;
|
|
164
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
165
|
+
}, z.core.$strip>;
|
|
166
|
+
export declare function createListAvailablePackagesTool(deps?: ListAvailablePackagesDeps): Tool<z.infer<typeof ListAvailablePackagesInputSchema>, PackagesResult>;
|
|
167
|
+
export {};
|