@duckmind/dm-linux-x64 0.65.5 → 0.65.6
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 +0 -8
- package/dm +2 -2
- package/extensions/.dm-extensions.json +677 -44
- package/extensions/dm-lens/clients/actionable-warnings-logger.js +0 -6
- package/extensions/dm-lens/clients/actionable-warnings.js +42 -13
- package/extensions/dm-lens/clients/advisory-provenance.js +129 -41
- package/extensions/dm-lens/clients/agent-behavior-client.js +1 -0
- package/extensions/dm-lens/clients/analysed-root.js +0 -0
- package/extensions/dm-lens/clients/ast-grep-client.js +38 -3
- package/extensions/dm-lens/clients/ast-grep-rule-manager.js +37 -5
- package/extensions/dm-lens/clients/ast-grep-tool-logger.js +1 -7
- package/extensions/dm-lens/clients/bash-file-access.js +138 -1
- package/extensions/dm-lens/clients/biome-client.js +9 -2
- package/extensions/dm-lens/clients/blocker-freshness.js +171 -21
- package/extensions/dm-lens/clients/bootstrap.js +9 -5
- package/extensions/dm-lens/clients/bounded-pid-file-lock.js +1 -1
- package/extensions/dm-lens/clients/bounded-telemetry.js +1 -4
- package/extensions/dm-lens/clients/bundled-resource-health.js +43 -0
- package/extensions/dm-lens/clients/bus-events-logger.js +0 -6
- package/extensions/dm-lens/clients/cache/rule-cache.js +11 -3
- package/extensions/dm-lens/clients/cache-manager.js +29 -5
- package/extensions/dm-lens/clients/cache-observability.js +104 -4
- package/extensions/dm-lens/clients/cargo-manifest.js +6 -3
- package/extensions/dm-lens/clients/cascade-format.js +87 -5
- package/extensions/dm-lens/clients/cascade-logger.js +0 -6
- package/extensions/dm-lens/clients/child-unref.js +5 -9
- package/extensions/dm-lens/clients/code-quality-warnings.js +4 -2
- package/extensions/dm-lens/clients/complexity-client.js +5 -1
- package/extensions/dm-lens/clients/config-core/index.js +2 -68
- package/extensions/dm-lens/clients/config-core/process-spec.js +1 -1
- package/extensions/dm-lens/clients/config-core/provenance.js +1 -2
- package/extensions/dm-lens/clients/config-core/records.js +1 -1
- package/extensions/dm-lens/clients/config-core/schema.js +3 -6
- package/extensions/dm-lens/clients/config-diagnostic-codes.js +5 -3
- package/extensions/dm-lens/clients/config-locations.js +125 -5
- package/extensions/dm-lens/clients/config-resolve.js +12 -6
- package/extensions/dm-lens/clients/config-schema.js +56 -3
- package/extensions/dm-lens/clients/config-warn.js +3 -2
- package/extensions/dm-lens/clients/dead-code-client.js +4 -1
- package/extensions/dm-lens/clients/dead-code-logger.js +0 -3
- package/extensions/dm-lens/clients/degradation-ledger.js +29 -4
- package/extensions/dm-lens/clients/dependency-checker.js +29 -50
- package/extensions/dm-lens/clients/diagnostic-dispositions.js +23 -4
- package/extensions/dm-lens/clients/diagnostic-logger.js +1 -1
- package/extensions/dm-lens/clients/dispatch/ast-grep-catalog.js +19 -0
- package/extensions/dm-lens/clients/dispatch/auxiliary-lsp.js +9 -0
- package/extensions/dm-lens/clients/dispatch/collect-later-tier.js +0 -3
- package/extensions/dm-lens/clients/dispatch/dispatcher.js +30 -27
- package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
- package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +4 -1
- package/extensions/dm-lens/clients/dispatch/finding-policy.js +163 -0
- package/extensions/dm-lens/clients/dispatch/indent-detect.js +213 -13
- package/extensions/dm-lens/clients/dispatch/inline-suppressions.js +20 -1
- package/extensions/dm-lens/clients/dispatch/integration.js +77 -13
- package/extensions/dm-lens/clients/dispatch/lazy.js +0 -3
- package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +1 -1
- package/extensions/dm-lens/clients/dispatch/plan.js +0 -3
- package/extensions/dm-lens/clients/dispatch/rule-ignores.js +21 -0
- package/extensions/dm-lens/clients/dispatch/rules/high-complexity.js +2 -2
- package/extensions/dm-lens/clients/dispatch/rules/high-fan-out.js +1 -1
- package/extensions/dm-lens/clients/dispatch/runners/actionlint.js +25 -29
- package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +8 -32
- package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +39 -23
- package/extensions/dm-lens/clients/dispatch/runners/cpp-check.js +29 -48
- package/extensions/dm-lens/clients/dispatch/runners/credo.js +17 -14
- package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +9 -7
- package/extensions/dm-lens/clients/dispatch/runners/dart-analyze.js +21 -43
- package/extensions/dm-lens/clients/dispatch/runners/detekt.js +11 -5
- package/extensions/dm-lens/clients/dispatch/runners/dotnet-build.js +27 -23
- package/extensions/dm-lens/clients/dispatch/runners/elixir-check.js +23 -38
- package/extensions/dm-lens/clients/dispatch/runners/eslint.js +22 -35
- package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +35 -12
- package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +5 -3
- package/extensions/dm-lens/clients/dispatch/runners/golangci-lint.js +21 -22
- package/extensions/dm-lens/clients/dispatch/runners/hadolint.js +26 -16
- package/extensions/dm-lens/clients/dispatch/runners/helm-lint.js +3 -1
- package/extensions/dm-lens/clients/dispatch/runners/helm-render.js +3 -2
- package/extensions/dm-lens/clients/dispatch/runners/htmlhint.js +18 -9
- package/extensions/dm-lens/clients/dispatch/runners/javac.js +24 -23
- package/extensions/dm-lens/clients/dispatch/runners/ktlint.js +23 -54
- package/extensions/dm-lens/clients/dispatch/runners/lsp.js +17 -7
- package/extensions/dm-lens/clients/dispatch/runners/markdownlint.js +12 -6
- package/extensions/dm-lens/clients/dispatch/runners/mypy.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +24 -7
- package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +26 -17
- package/extensions/dm-lens/clients/dispatch/runners/phpstan.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +10 -11
- package/extensions/dm-lens/clients/dispatch/runners/pyright.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/rubocop.js +22 -18
- package/extensions/dm-lens/clients/dispatch/runners/ruff.js +17 -22
- package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +8 -11
- package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +9 -4
- package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +4 -13
- package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +15 -5
- package/extensions/dm-lens/clients/dispatch/runners/spotbugs.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/sqlfluff.js +10 -4
- package/extensions/dm-lens/clients/dispatch/runners/stylelint.js +9 -4
- package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +11 -3
- package/extensions/dm-lens/clients/dispatch/runners/taplo.js +13 -7
- package/extensions/dm-lens/clients/dispatch/runners/terragrunt.js +2 -1
- package/extensions/dm-lens/clients/dispatch/runners/tflint.js +26 -16
- package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -13
- package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +9 -3
- package/extensions/dm-lens/clients/dispatch/runners/utils/availability-policy.js +5 -0
- package/extensions/dm-lens/clients/dispatch/runners/utils/candidate-probe.js +2 -2
- package/extensions/dm-lens/clients/dispatch/runners/utils/diagnostic-parsers.js +8 -52
- package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +35 -3
- package/extensions/dm-lens/clients/dispatch/runners/utils.js +0 -17
- package/extensions/dm-lens/clients/dispatch/runners/vale.js +12 -4
- package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +2 -20
- package/extensions/dm-lens/clients/dispatch/runners/yamllint.js +16 -4
- package/extensions/dm-lens/clients/dispatch/runners/zig-check.js +26 -38
- package/extensions/dm-lens/clients/dispatch/suppress-writer.js +13 -3
- package/extensions/dm-lens/clients/dispatch/types.js +4 -1
- package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +2 -2
- package/extensions/dm-lens/clients/disposition-logger.js +0 -6
- package/extensions/dm-lens/clients/disposition-publish.js +2 -1
- package/extensions/dm-lens/clients/effective-config.js +14 -4
- package/extensions/dm-lens/clients/event-loop-hold.js +123 -0
- package/extensions/dm-lens/clients/event-loop-monitor.js +2 -2
- package/extensions/dm-lens/clients/extension-log.js +6 -1
- package/extensions/dm-lens/clients/feature-hints.js +2 -1
- package/extensions/dm-lens/clients/file-kinds.js +17 -21
- package/extensions/dm-lens/clients/file-role.js +11 -2
- package/extensions/dm-lens/clients/file-time.js +1 -1
- package/extensions/dm-lens/clients/file-utils.js +93 -6
- package/extensions/dm-lens/clients/finding-delivery-gate.js +22 -26
- package/extensions/dm-lens/clients/format-service.js +33 -16
- package/extensions/dm-lens/clients/formatters.js +129 -92
- package/extensions/dm-lens/clients/generated-artifacts.js +2 -2
- package/extensions/dm-lens/clients/generation-guard.js +4 -0
- package/extensions/dm-lens/clients/git-guard.js +80 -26
- package/extensions/dm-lens/clients/gitleaks-client.js +26 -0
- package/extensions/dm-lens/clients/govulncheck-client.js +34 -6
- package/extensions/dm-lens/clients/gradle-ktfmt-style.js +96 -13
- package/extensions/dm-lens/clients/grammar-source.js +3 -3
- package/extensions/dm-lens/clients/host-edit-normalize.js +1 -1
- package/extensions/dm-lens/clients/indent-retarget.js +35 -5
- package/extensions/dm-lens/clients/inline-blocker-dispositions.js +107 -0
- package/extensions/dm-lens/clients/install-diagnostics.js +8 -6
- package/extensions/dm-lens/clients/installer/index.js +695 -183
- package/extensions/dm-lens/clients/installer/managed-tool-refresh.js +85 -25
- package/extensions/dm-lens/clients/instance-reaper-state.js +3 -0
- package/extensions/dm-lens/clients/instance-reaper.js +23 -16
- package/extensions/dm-lens/clients/instance-registry.js +34 -2
- package/extensions/dm-lens/clients/jscpd-client.js +11 -1
- package/extensions/dm-lens/clients/knip-client.js +2 -1
- package/extensions/dm-lens/clients/language-profile.js +18 -12
- package/extensions/dm-lens/clients/language-registry.js +3 -1
- package/extensions/dm-lens/clients/latency-logger.js +14 -4
- package/extensions/dm-lens/clients/ledger-bounds.js +13 -1
- package/extensions/dm-lens/clients/lens-config.js +74 -7
- package/extensions/dm-lens/clients/lens-engine.js +9 -10
- package/extensions/dm-lens/clients/lens-events.js +1 -1
- package/extensions/dm-lens/clients/lens-flag-registry.js +47 -2
- package/extensions/dm-lens/clients/lens-map.js +1 -1
- package/extensions/dm-lens/clients/log-cleanup.js +0 -28
- package/extensions/dm-lens/clients/lsp/cascade-tier.js +2 -1
- package/extensions/dm-lens/clients/lsp/client.js +70 -30
- package/extensions/dm-lens/clients/lsp/config.js +41 -15
- package/extensions/dm-lens/clients/lsp/content-limits.js +21 -0
- package/extensions/dm-lens/clients/lsp/diagnostic-binding.js +8 -0
- package/extensions/dm-lens/clients/lsp/document-drift.js +72 -1
- package/extensions/dm-lens/clients/lsp/edits.js +3 -3
- package/extensions/dm-lens/clients/lsp/index.js +435 -62
- package/extensions/dm-lens/clients/lsp/inferred-project.js +1 -1
- package/extensions/dm-lens/clients/lsp/language.js +0 -3
- package/extensions/dm-lens/clients/lsp/launch.js +12 -5
- package/extensions/dm-lens/clients/lsp/path-utils.js +0 -2
- package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +0 -1
- package/extensions/dm-lens/clients/lsp/server.js +125 -60
- package/extensions/dm-lens/clients/lsp/session-roots.js +26 -5
- package/extensions/dm-lens/clients/lsp/sync-kind.js +14 -1
- package/extensions/dm-lens/clients/lsp/tsserver-sync.js +5 -7
- package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +3 -0
- package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +31 -2
- package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +26 -4
- package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
- package/extensions/dm-lens/clients/map-with-concurrency.js +7 -3
- package/extensions/dm-lens/clients/mcp/analyze.js +1 -1
- package/extensions/dm-lens/clients/mcp/ipc.js +104 -40
- package/extensions/dm-lens/clients/mcp/review.js +39 -7
- package/extensions/dm-lens/clients/mcp/session.js +38 -4
- package/extensions/dm-lens/clients/metrics-history.js +19 -84
- package/extensions/dm-lens/clients/middle-man-analysis.js +2 -4
- package/extensions/dm-lens/clients/module-report.js +1 -1
- package/extensions/dm-lens/clients/mutating-tool.js +3 -3
- package/extensions/dm-lens/clients/mutation-attribution.js +3 -3
- package/extensions/dm-lens/clients/ndjson-logger.js +17 -9
- package/extensions/dm-lens/clients/observed-mutation.js +42 -11
- package/extensions/dm-lens/clients/opaque-mutation-scan.js +17 -7
- package/extensions/dm-lens/clients/opengrep-client.js +92 -10
- package/extensions/dm-lens/clients/opengrep-config.js +1 -1
- package/extensions/dm-lens/clients/package-manager.js +2 -1
- package/extensions/dm-lens/clients/path-utils.js +199 -3
- package/extensions/dm-lens/clients/performance-report.js +3 -3
- package/extensions/dm-lens/clients/persistent-reverify.js +167 -0
- package/extensions/dm-lens/clients/php-cs-fixer-config.js +9 -4
- package/extensions/dm-lens/clients/pipeline.js +124 -68
- package/extensions/dm-lens/clients/project-changes.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/cache.js +19 -5
- package/extensions/dm-lens/clients/project-diagnostics/extractors.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +150 -18
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -3
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/knip.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/madge.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
- package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/runner-findings.js +19 -2
- package/extensions/dm-lens/clients/project-diagnostics/scanner.js +35 -4
- package/extensions/dm-lens/clients/project-lens-config.js +58 -4
- package/extensions/dm-lens/clients/project-scan-policy.js +0 -46
- package/extensions/dm-lens/clients/python-environment.js +80 -4
- package/extensions/dm-lens/clients/python-provenance.js +551 -0
- package/extensions/dm-lens/clients/read-guard-logger.js +3 -1
- package/extensions/dm-lens/clients/read-guard.js +29 -6
- package/extensions/dm-lens/clients/recent-touches.js +2 -2
- package/extensions/dm-lens/clients/resource-sampler.js +59 -9
- package/extensions/dm-lens/clients/review-graph/builder.js +39 -34
- package/extensions/dm-lens/clients/review-graph/git-identity.js +11 -7
- package/extensions/dm-lens/clients/review-graph/import-resolvers.js +1 -1
- package/extensions/dm-lens/clients/review-graph-logger.js +3 -1
- package/extensions/dm-lens/clients/ruff-client.js +11 -10
- package/extensions/dm-lens/clients/runtime-agent-end.js +41 -5
- package/extensions/dm-lens/clients/runtime-context.js +5 -2
- package/extensions/dm-lens/clients/runtime-coordinator.js +60 -6
- package/extensions/dm-lens/clients/runtime-session.js +52 -8
- package/extensions/dm-lens/clients/runtime-tool-call.js +27 -15
- package/extensions/dm-lens/clients/runtime-tool-result.js +279 -63
- package/extensions/dm-lens/clients/runtime-turn.js +453 -185
- package/extensions/dm-lens/clients/safe-spawn.js +248 -62
- package/extensions/dm-lens/clients/sanitize.js +0 -4
- package/extensions/dm-lens/clients/scan-utils.js +1 -39
- package/extensions/dm-lens/clients/scratch-tree-policy.js +2 -3
- package/extensions/dm-lens/clients/security-scan-client.js +2 -2
- package/extensions/dm-lens/clients/session-event-guard.js +59 -2
- package/extensions/dm-lens/clients/session-summary.js +0 -25
- package/extensions/dm-lens/clients/sg-runner.js +24 -12
- package/extensions/dm-lens/clients/sgconfig.js +58 -6
- package/extensions/dm-lens/clients/shared-checkout-guard.js +1 -1
- package/extensions/dm-lens/clients/situational-tool-telemetry.js +85 -0
- package/extensions/dm-lens/clients/skills-resolver.js +42 -0
- package/extensions/dm-lens/clients/smells-rollup.js +2 -2
- package/extensions/dm-lens/clients/spawn-output-cap.js +29 -0
- package/extensions/dm-lens/clients/startup-scan.js +1 -2
- package/extensions/dm-lens/clients/string-utils.js +3 -0
- package/extensions/dm-lens/clients/test-runner-client.js +118 -57
- package/extensions/dm-lens/clients/test-runner-delivery.js +118 -66
- package/extensions/dm-lens/clients/tool-agreement.js +403 -0
- package/extensions/dm-lens/clients/tool-config.js +218 -0
- package/extensions/dm-lens/clients/tool-cwd.js +248 -0
- package/extensions/dm-lens/clients/tool-definition.js +18 -1
- package/extensions/dm-lens/clients/tool-policy.js +138 -10
- package/extensions/dm-lens/clients/tool-probe.js +5 -0
- package/extensions/dm-lens/clients/tool-set-policy.js +35 -0
- package/extensions/dm-lens/clients/tree-sitter-client.js +201 -80
- package/extensions/dm-lens/clients/tree-sitter-query-loader.js +78 -130
- package/extensions/dm-lens/clients/trivy-client.js +8 -1
- package/extensions/dm-lens/clients/tui-fit.js +0 -3
- package/extensions/dm-lens/clients/turn-context.js +48 -0
- package/extensions/dm-lens/clients/turn-end/lane.js +0 -0
- package/extensions/dm-lens/clients/turn-end/lanes/govulncheck.js +54 -0
- package/extensions/dm-lens/clients/turn-end/lanes/secrets.js +140 -0
- package/extensions/dm-lens/clients/user-notify.js +0 -3
- package/extensions/dm-lens/clients/warm-attach.js +25 -0
- package/extensions/dm-lens/clients/widget-state.js +203 -13
- package/extensions/dm-lens/clients/word-index-logger.js +0 -6
- package/extensions/dm-lens/clients/word-index-store.js +1 -4
- package/extensions/dm-lens/clients/word-index.js +9 -5
- package/extensions/dm-lens/clients/workspace-topology.js +20 -3
- package/extensions/dm-lens/clients/write-ordering-guard.js +6 -0
- package/extensions/dm-lens/clients/zizmor-config.js +15 -11
- package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +8 -2
- package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
- package/extensions/dm-lens/dist/clients/actionable-warnings.js +1014 -0
- package/extensions/dm-lens/dist/clients/advisory-provenance.js +385 -0
- package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
- package/extensions/dm-lens/dist/clients/agent-nudge.js +151 -0
- package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
- package/extensions/dm-lens/dist/clients/ast-grep-client.js +576 -0
- package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +114 -0
- package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
- package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
- package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
- package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
- package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
- package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
- package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
- package/extensions/dm-lens/dist/clients/biome-client.js +221 -0
- package/extensions/dm-lens/dist/clients/blocker-freshness.js +385 -0
- package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
- package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
- package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
- package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +173 -0
- package/extensions/dm-lens/dist/clients/bounded-telemetry.js +104 -0
- package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
- package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
- package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
- package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
- package/extensions/dm-lens/dist/clients/cache/rule-cache.js +103 -0
- package/extensions/dm-lens/dist/clients/cache-manager.js +340 -0
- package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
- package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
- package/extensions/dm-lens/dist/clients/cargo-manifest.js +151 -0
- package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
- package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
- package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
- package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
- package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
- package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
- package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
- package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
- package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
- package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
- package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
- package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
- package/extensions/dm-lens/dist/clients/config-core/normalize.js +217 -0
- package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
- package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
- package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
- package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
- package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
- package/extensions/dm-lens/dist/clients/config-core/schema.js +90 -0
- package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
- package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
- package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
- package/extensions/dm-lens/dist/clients/config-schema.js +128 -0
- package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
- package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
- package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
- package/extensions/dm-lens/dist/clients/dead-code-client.js +342 -0
- package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
- package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
- package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
- package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
- package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
- package/extensions/dm-lens/dist/clients/degradation-ledger.js +272 -0
- package/extensions/dm-lens/dist/clients/demoted-finding-render.js +61 -0
- package/extensions/dm-lens/dist/clients/dependency-checker.js +525 -0
- package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
- package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
- package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
- package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
- package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
- package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
- package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
- package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
- package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
- package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
- package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +144 -0
- package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
- package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
- package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
- package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
- package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
- package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
- package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
- package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +953 -0
- package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
- package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
- package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
- package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
- package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +20 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
- package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
- package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +159 -0
- package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
- package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
- package/extensions/dm-lens/dist/clients/dispatch/integration.js +1463 -0
- package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
- package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +75 -0
- package/extensions/dm-lens/dist/clients/dispatch/plan.js +278 -0
- package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
- package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +42 -0
- package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
- package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +73 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
- package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
- package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +690 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +202 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +167 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +65 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +107 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +51 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +206 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +70 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +56 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +147 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +111 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +81 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +97 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +516 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1067 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +117 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +163 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
- package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
- package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
- package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
- package/extensions/dm-lens/dist/clients/dispatch/types.js +7 -0
- package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +45 -0
- package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
- package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
- package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
- package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
- package/extensions/dm-lens/dist/clients/effective-config.js +160 -0
- package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
- package/extensions/dm-lens/dist/clients/error-class.js +3 -0
- package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
- package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
- package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
- package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
- package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
- package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
- package/extensions/dm-lens/dist/clients/file-kinds.js +304 -0
- package/extensions/dm-lens/dist/clients/file-role.js +50 -0
- package/extensions/dm-lens/dist/clients/file-time.js +112 -0
- package/extensions/dm-lens/dist/clients/file-utils.js +630 -0
- package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +129 -0
- package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
- package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
- package/extensions/dm-lens/dist/clients/format-events-publish.js +230 -0
- package/extensions/dm-lens/dist/clients/format-service.js +154 -0
- package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
- package/extensions/dm-lens/dist/clients/formatters.js +1351 -0
- package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
- package/extensions/dm-lens/dist/clients/freshness.js +8 -0
- package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
- package/extensions/dm-lens/dist/clients/generation-guard.js +105 -0
- package/extensions/dm-lens/dist/clients/git-guard.js +770 -0
- package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
- package/extensions/dm-lens/dist/clients/gitleaks-client.js +282 -0
- package/extensions/dm-lens/dist/clients/go-client.js +47 -0
- package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
- package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
- package/extensions/dm-lens/dist/clients/grammar-source.js +224 -0
- package/extensions/dm-lens/dist/clients/gzip-stage-write.js +85 -0
- package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
- package/extensions/dm-lens/dist/clients/hook-budgets.js +16 -0
- package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
- package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
- package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
- package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
- package/extensions/dm-lens/dist/clients/install-diagnostics.js +123 -0
- package/extensions/dm-lens/dist/clients/installer/index.js +3770 -0
- package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
- package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
- package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
- package/extensions/dm-lens/dist/clients/instance-reaper.js +577 -0
- package/extensions/dm-lens/dist/clients/instance-registry-lock.js +131 -0
- package/extensions/dm-lens/dist/clients/instance-registry.js +452 -0
- package/extensions/dm-lens/dist/clients/jscpd-client.js +252 -0
- package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
- package/extensions/dm-lens/dist/clients/knip-client.js +472 -0
- package/extensions/dm-lens/dist/clients/language-policy.js +242 -0
- package/extensions/dm-lens/dist/clients/language-profile.js +261 -0
- package/extensions/dm-lens/dist/clients/language-registry.js +424 -0
- package/extensions/dm-lens/dist/clients/latency-logger.js +192 -0
- package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
- package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
- package/extensions/dm-lens/dist/clients/lens-config.js +237 -0
- package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
- package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
- package/extensions/dm-lens/dist/clients/lens-flag-registry.js +302 -0
- package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
- package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
- package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
- package/extensions/dm-lens/dist/clients/lsp/aggregation.js +88 -0
- package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +203 -0
- package/extensions/dm-lens/dist/clients/lsp/client.js +2709 -0
- package/extensions/dm-lens/dist/clients/lsp/config.js +252 -0
- package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
- package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
- package/extensions/dm-lens/dist/clients/lsp/document-drift.js +312 -0
- package/extensions/dm-lens/dist/clients/lsp/edits.js +930 -0
- package/extensions/dm-lens/dist/clients/lsp/index.js +4448 -0
- package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
- package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
- package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
- package/extensions/dm-lens/dist/clients/lsp/launch.js +468 -0
- package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
- package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
- package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +90 -0
- package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
- package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
- package/extensions/dm-lens/dist/clients/lsp/server.js +2422 -0
- package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
- package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
- package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
- package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
- package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
- package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +36 -0
- package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
- package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +175 -0
- package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
- package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +267 -0
- package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
- package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
- package/extensions/dm-lens/dist/clients/lsp-budget.js +83 -0
- package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
- package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
- package/extensions/dm-lens/dist/clients/lsp-mutation.js +273 -0
- package/extensions/dm-lens/dist/clients/lsp-status.js +37 -0
- package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
- package/extensions/dm-lens/dist/clients/mcp/analyze.js +251 -0
- package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
- package/extensions/dm-lens/dist/clients/mcp/ipc.js +302 -0
- package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
- package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
- package/extensions/dm-lens/dist/clients/memory-sampler.js +107 -0
- package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
- package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
- package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
- package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
- package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
- package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
- package/extensions/dm-lens/dist/clients/module-report.js +1642 -0
- package/extensions/dm-lens/dist/clients/mutating-tool.js +377 -0
- package/extensions/dm-lens/dist/clients/mutation-attribution.js +168 -0
- package/extensions/dm-lens/dist/clients/mutation-bridge.js +102 -0
- package/extensions/dm-lens/dist/clients/ndjson-logger.js +471 -0
- package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
- package/extensions/dm-lens/dist/clients/observed-mutation.js +709 -0
- package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
- package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +313 -0
- package/extensions/dm-lens/dist/clients/opengrep-client.js +216 -0
- package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
- package/extensions/dm-lens/dist/clients/package-manager.js +303 -0
- package/extensions/dm-lens/dist/clients/package-root.js +25 -0
- package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
- package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
- package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
- package/extensions/dm-lens/dist/clients/path-utils.js +476 -0
- package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
- package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
- package/extensions/dm-lens/dist/clients/persistent-reverify.js +165 -0
- package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
- package/extensions/dm-lens/dist/clients/pipeline.js +1091 -0
- package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
- package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
- package/extensions/dm-lens/dist/clients/probe-home-state.js +62 -0
- package/extensions/dm-lens/dist/clients/process-bridge.js +20 -0
- package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
- package/extensions/dm-lens/dist/clients/process-snapshot.js +22 -0
- package/extensions/dm-lens/dist/clients/project-changes.js +112 -0
- package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +408 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
- package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
- package/extensions/dm-lens/dist/clients/project-lens-config.js +437 -0
- package/extensions/dm-lens/dist/clients/project-report.js +527 -0
- package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
- package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
- package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +39 -0
- package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +14 -0
- package/extensions/dm-lens/dist/clients/project-snapshot.js +1178 -0
- package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
- package/extensions/dm-lens/dist/clients/python-environment.js +120 -0
- package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
- package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
- package/extensions/dm-lens/dist/clients/quiet-window.js +126 -0
- package/extensions/dm-lens/dist/clients/read-bridge.js +46 -0
- package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
- package/extensions/dm-lens/dist/clients/read-guard-logger.js +178 -0
- package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1042 -0
- package/extensions/dm-lens/dist/clients/read-guard.js +1096 -0
- package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
- package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
- package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
- package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
- package/extensions/dm-lens/dist/clients/review-graph/builder.js +3635 -0
- package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
- package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +115 -0
- package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +325 -0
- package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
- package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
- package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
- package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
- package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
- package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
- package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
- package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
- package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
- package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
- package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
- package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
- package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
- package/extensions/dm-lens/dist/clients/runtime-agent-end.js +608 -0
- package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
- package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
- package/extensions/dm-lens/dist/clients/runtime-coordinator.js +817 -0
- package/extensions/dm-lens/dist/clients/runtime-session.js +1625 -0
- package/extensions/dm-lens/dist/clients/runtime-tool-call.js +868 -0
- package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1317 -0
- package/extensions/dm-lens/dist/clients/runtime-turn.js +2333 -0
- package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
- package/extensions/dm-lens/dist/clients/safe-spawn.js +1267 -0
- package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
- package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
- package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +57 -0
- package/extensions/dm-lens/dist/clients/search-read-registration.js +59 -0
- package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
- package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
- package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
- package/extensions/dm-lens/dist/clients/session-lifecycle.js +173 -0
- package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
- package/extensions/dm-lens/dist/clients/session-state-store.js +63 -0
- package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
- package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
- package/extensions/dm-lens/dist/clients/sg-runner.js +627 -0
- package/extensions/dm-lens/dist/clients/sgconfig.js +280 -0
- package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
- package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
- package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
- package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
- package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
- package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
- package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
- package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
- package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
- package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
- package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
- package/extensions/dm-lens/dist/clients/startup-scan.js +222 -0
- package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
- package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
- package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
- package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
- package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
- package/extensions/dm-lens/dist/clients/test-runner-client.js +1504 -0
- package/extensions/dm-lens/dist/clients/test-runner-delivery.js +260 -0
- package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
- package/extensions/dm-lens/dist/clients/tool-agreement.js +377 -0
- package/extensions/dm-lens/dist/clients/tool-config.js +218 -0
- package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
- package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
- package/extensions/dm-lens/dist/clients/tool-event.js +18 -0
- package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
- package/extensions/dm-lens/dist/clients/tool-probe.js +5 -0
- package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
- package/extensions/dm-lens/dist/clients/tool-set-policy.js +70 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-client.js +2787 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +318 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
- package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +957 -0
- package/extensions/dm-lens/dist/clients/trivy-client.js +305 -0
- package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
- package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
- package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
- package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
- package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
- package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
- package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
- package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
- package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
- package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
- package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
- package/extensions/dm-lens/dist/clients/widget-state.js +963 -0
- package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
- package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
- package/extensions/dm-lens/dist/clients/word-index.js +1426 -0
- package/extensions/dm-lens/dist/clients/workspace-topology.js +261 -0
- package/extensions/dm-lens/dist/clients/write-ordering-guard.js +24 -0
- package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
- package/extensions/dm-lens/dist/i18n.js +67 -0
- package/extensions/dm-lens/dist/index.js +1782 -0
- package/extensions/dm-lens/dist/mcp/analyze-cli.js +178 -0
- package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
- package/extensions/dm-lens/dist/mcp/cli.js +78 -0
- package/extensions/dm-lens/dist/mcp/server.js +1208 -0
- package/extensions/dm-lens/dist/mcp/worker.js +33 -0
- package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +256 -0
- package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
- package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +45 -0
- package/extensions/dm-lens/dist/tools/activate-tools.js +61 -0
- package/extensions/dm-lens/dist/tools/ast-grep-outline.js +127 -0
- package/extensions/dm-lens/dist/tools/ast-grep-replace.js +226 -0
- package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
- package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
- package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +240 -0
- package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1484 -0
- package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1088 -0
- package/extensions/dm-lens/dist/tools/lsp-navigation.js +1194 -0
- package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
- package/extensions/dm-lens/dist/tools/module-report.js +332 -0
- package/extensions/dm-lens/dist/tools/project-report.js +72 -0
- package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
- package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
- package/extensions/dm-lens/dist/tools/shared.js +26 -0
- package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
- package/extensions/dm-lens/index.js +278 -101
- package/extensions/dm-lens/mcp/analyze-cli.js +3 -2
- package/extensions/dm-lens/mcp/build-staleness.js +1 -1
- package/extensions/dm-lens/mcp/server.js +144 -73
- package/extensions/dm-lens/package.json +4 -4
- package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
- package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +26 -0
- package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +10 -0
- package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-numeric-parse-python-test.yml +18 -0
- package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +4 -3
- package/extensions/dm-lens/rules/ast-grep-rules/rules/go-no-fmt-println.yml +2 -2
- package/extensions/dm-lens/rules/ast-grep-rules/rules/no-assert-tuple.yml +23 -13
- package/extensions/dm-lens/rules/ast-grep-rules/rules/no-boolean-in-except.yml +7 -3
- package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error-js.yml +2 -2
- package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error.yml +2 -2
- package/extensions/dm-lens/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +12 -7
- package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-numeric-parse-python.yml +44 -0
- package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-throwing-call-python.yml +5 -3
- package/extensions/dm-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
- package/extensions/dm-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
- package/extensions/dm-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
- package/extensions/dm-lens/rules/tree-sitter-queries/typescript/console-statement.yml +2 -2
- package/extensions/dm-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +23 -7
- package/extensions/dm-lens/rules/typos/_typos.toml +4 -2
- package/extensions/dm-lens/scripts/lib/process-scan.mjs +1 -1
- package/extensions/dm-lens/scripts/lib/skills-predicate.mjs +53 -0
- package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +45 -0
- package/extensions/dm-lens/skills/pi-lens-ast-grep/SKILL.md +23 -6
- package/extensions/dm-lens/skills/pi-lens-lsp-navigation/SKILL.md +26 -9
- package/extensions/dm-lens/tools/activate-tools.js +10 -7
- package/extensions/dm-lens/tools/ast-grep-outline.js +2 -6
- package/extensions/dm-lens/tools/ast-grep-replace.js +5 -16
- package/extensions/dm-lens/tools/ast-grep-search.js +83 -38
- package/extensions/dm-lens/tools/effective-config.js +5 -4
- package/extensions/dm-lens/tools/lens-diagnostic-mark.js +5 -3
- package/extensions/dm-lens/tools/lens-diagnostics.js +478 -106
- package/extensions/dm-lens/tools/lsp-diagnostics.js +317 -172
- package/extensions/dm-lens/tools/lsp-navigation.js +26 -56
- package/extensions/dm-lens/tools/lsp-structured-output.js +3 -3
- package/extensions/dm-lens/tools/module-report.js +5 -5
- package/extensions/dm-lens/tools/project-report.js +9 -15
- package/extensions/dm-lens/tools/render-compact.js +220 -1
- package/extensions/dm-lens/tools/symbol-search.js +3 -5
- package/extensions/dm-mcp-adapter/OAUTH.md +368 -2
- package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
- package/extensions/dm-mcp-adapter/agent-plugin-loader.js +73 -30
- package/extensions/dm-mcp-adapter/agent-plugin-provenance.js +26 -0
- package/extensions/dm-mcp-adapter/bearer-command-resolver.js +182 -0
- package/extensions/dm-mcp-adapter/claude-plugin-loader.js +350 -0
- package/extensions/dm-mcp-adapter/cli.js +82 -5
- package/extensions/dm-mcp-adapter/commands.js +89 -15
- package/extensions/dm-mcp-adapter/config.js +283 -33
- package/extensions/dm-mcp-adapter/consent-manager.js +32 -8
- package/extensions/dm-mcp-adapter/direct-tool-surface.js +223 -0
- package/extensions/dm-mcp-adapter/direct-tools.js +21 -216
- package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
- package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +73 -30
- package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
- package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
- package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
- package/extensions/dm-mcp-adapter/dist/config.js +283 -33
- package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
- package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +308 -0
- package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
- package/extensions/dm-mcp-adapter/dist/http-ca.js +71 -0
- package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
- package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
- package/extensions/dm-mcp-adapter/dist/jev-key-store.js +176 -0
- package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
- package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
- package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
- package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
- package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +949 -0
- package/extensions/dm-mcp-adapter/dist/mcp-auth.js +997 -0
- package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +7 -136
- package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +381 -0
- package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +524 -0
- package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
- package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
- package/extensions/dm-mcp-adapter/dist/mcp-trace.js +215 -0
- package/extensions/dm-mcp-adapter/dist/metadata-cache.js +10 -28
- package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
- package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +5 -16
- package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
- package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
- package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
- package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
- package/extensions/dm-mcp-adapter/dist/server-manager.js +1514 -0
- package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
- package/extensions/dm-mcp-adapter/dist/session-recovery.js +82 -0
- package/extensions/dm-mcp-adapter/dist/state.js +1 -0
- package/extensions/dm-mcp-adapter/dist/types.js +39 -0
- package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
- package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
- package/extensions/dm-mcp-adapter/dist/utils.js +84 -9
- package/extensions/dm-mcp-adapter/elicitation-handler.js +27 -22
- package/extensions/dm-mcp-adapter/host-html-template.js +17 -18
- package/extensions/dm-mcp-adapter/http-ca.js +71 -0
- package/extensions/dm-mcp-adapter/index.js +904 -167
- package/extensions/dm-mcp-adapter/init.js +53 -42
- package/extensions/dm-mcp-adapter/jev-client.js +359 -0
- package/extensions/dm-mcp-adapter/jev-contracts.js +0 -0
- package/extensions/dm-mcp-adapter/jev-key-store.js +176 -0
- package/extensions/dm-mcp-adapter/json-schema-validator.js +19 -2
- package/extensions/dm-mcp-adapter/lazy-loader.js +7 -0
- package/extensions/dm-mcp-adapter/lifecycle.js +8 -3
- package/extensions/dm-mcp-adapter/mcp-auth-fetch.js +86 -0
- package/extensions/dm-mcp-adapter/mcp-auth-flow.js +228 -75
- package/extensions/dm-mcp-adapter/mcp-auth.js +312 -47
- package/extensions/dm-mcp-adapter/mcp-bearer-store.js +7 -136
- package/extensions/dm-mcp-adapter/mcp-code.js +151 -20
- package/extensions/dm-mcp-adapter/mcp-install.js +40 -0
- package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +52 -8
- package/extensions/dm-mcp-adapter/mcp-output-guard.js +42 -43
- package/extensions/dm-mcp-adapter/mcp-panel-theme.js +79 -0
- package/extensions/dm-mcp-adapter/mcp-panel.js +294 -286
- package/extensions/dm-mcp-adapter/mcp-references.js +13 -18
- package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +5 -1
- package/extensions/dm-mcp-adapter/mcp-setup-panel.js +317 -282
- package/extensions/dm-mcp-adapter/mcp-status.js +2 -0
- package/extensions/dm-mcp-adapter/mcp-tasks.js +309 -0
- package/extensions/dm-mcp-adapter/metadata-cache.js +11 -28
- package/extensions/dm-mcp-adapter/namespace-tools.js +43 -7
- package/extensions/dm-mcp-adapter/oauth.js +1 -1
- package/extensions/dm-mcp-adapter/package-mcp-loader.js +5 -16
- package/extensions/dm-mcp-adapter/package.json +4 -1
- package/extensions/dm-mcp-adapter/prompts.js +31 -4
- package/extensions/dm-mcp-adapter/proxy-modes.js +394 -199
- package/extensions/dm-mcp-adapter/request-headers-command.js +3 -2
- package/extensions/dm-mcp-adapter/runtime-owner.js +16 -1
- package/extensions/dm-mcp-adapter/sampling-handler.js +16 -25
- package/extensions/dm-mcp-adapter/sandbox-proxy-template.js +14 -90
- package/extensions/dm-mcp-adapter/search-ranking.js +31 -6
- package/extensions/dm-mcp-adapter/secure-keyring.js +191 -0
- package/extensions/dm-mcp-adapter/semantic-search.js +160 -0
- package/extensions/dm-mcp-adapter/server-manager.js +406 -117
- package/extensions/dm-mcp-adapter/session-approvals.js +127 -0
- package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +11 -1
- package/extensions/dm-mcp-adapter/test-runner.mjs +3 -4
- package/extensions/dm-mcp-adapter/tool-approval.js +32 -22
- package/extensions/dm-mcp-adapter/tool-metadata.js +18 -11
- package/extensions/dm-mcp-adapter/tool-registrar.js +7 -4
- package/extensions/dm-mcp-adapter/tool-result-renderer.js +4 -2
- package/extensions/dm-mcp-adapter/types.js +39 -0
- package/extensions/dm-mcp-adapter/ui-server.js +51 -36
- package/extensions/dm-mcp-adapter/ui-session.js +57 -25
- package/extensions/dm-mcp-adapter/utils.js +84 -9
- package/extensions/dm-ponytail/hooks/cursor-hooks.json +17 -0
- package/extensions/dm-ponytail/hooks/ponytail-activate.js +14 -2
- package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +21 -2
- package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -0
- package/extensions/dm-ponytail/package.json +1 -1
- package/extensions/dm-subagents/agents/claude-code-writer.md +1 -0
- package/extensions/dm-subagents/agents/codex-exec-writer.md +1 -0
- package/extensions/dm-subagents/agents/cursor-agent-writer.md +1 -0
- package/extensions/dm-subagents/agents/evidence-auditor.md +34 -0
- package/extensions/dm-subagents/agents/researcher.md +23 -13
- package/extensions/dm-subagents/agents/reviewer.md +6 -4
- package/extensions/dm-subagents/agents/scout.md +1 -1
- package/extensions/dm-subagents/agents/worker.md +3 -2
- package/extensions/dm-subagents/index.js +3 -2
- package/extensions/dm-subagents/inspector-runner.mjs +2 -2
- package/extensions/dm-subagents/install.mjs +1 -2
- package/extensions/dm-subagents/package.json +35 -1
- package/extensions/dm-subagents/prompts/council.md +6 -3
- package/extensions/dm-subagents/prompts/parallel-review.md +1 -1
- package/extensions/dm-subagents/runner-peer-loader.mjs +18 -0
- package/extensions/dm-subagents/runner-peer-preload.mjs +29 -0
- package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +35 -22
- package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +9 -5
- package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +40 -19
- package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +6 -6
- package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +11 -1
- package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +35 -30
- package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +3 -3
- package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +70 -0
- package/extensions/dm-subagents/src/agents/agent-management.js +276 -172
- package/extensions/dm-subagents/src/agents/agent-memory.js +92 -3
- package/extensions/dm-subagents/src/agents/agent-serializer.js +17 -8
- package/extensions/dm-subagents/src/agents/agents.js +389 -207
- package/extensions/dm-subagents/src/agents/builtin-names.js +1 -0
- package/extensions/dm-subagents/src/agents/chain-serializer.js +7 -0
- package/extensions/dm-subagents/src/agents/global-npm-root.js +47 -0
- package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -1
- package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +17 -13
- package/extensions/dm-subagents/src/agents/skills.js +36 -10
- package/extensions/dm-subagents/src/api/capability-ceiling.js +0 -1
- package/extensions/dm-subagents/src/api/child-tool-plan.js +3 -0
- package/extensions/dm-subagents/src/api/preflight.js +75 -64
- package/extensions/dm-subagents/src/api/required-child-extensions.js +3 -0
- package/extensions/dm-subagents/src/api/workflow-resources.js +1 -0
- package/extensions/dm-subagents/src/extension/config.js +27 -18
- package/extensions/dm-subagents/src/extension/doctor.js +10 -13
- package/extensions/dm-subagents/src/extension/fanout-child.js +91 -14
- package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +258 -0
- package/extensions/dm-subagents/src/extension/index.js +202 -66
- package/extensions/dm-subagents/src/extension/public-execution.js +55 -4
- package/extensions/dm-subagents/src/extension/rpc.js +18 -27
- package/extensions/dm-subagents/src/extension/schemas.js +99 -84
- package/extensions/dm-subagents/src/extension/subagent-guide.js +14 -3
- package/extensions/dm-subagents/src/extension/tool-activation.js +157 -0
- package/extensions/dm-subagents/src/extension/tool-description.js +30 -78
- package/extensions/dm-subagents/src/inspectors/actions.js +145 -0
- package/extensions/dm-subagents/src/inspectors/ghostty/actions.js +60 -0
- package/extensions/dm-subagents/src/inspectors/ghostty/plugin.js +17 -0
- package/extensions/dm-subagents/src/inspectors/herdr/actions.js +94 -179
- package/extensions/dm-subagents/src/inspectors/herdr/plugin.js +13 -0
- package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +1 -1
- package/extensions/dm-subagents/src/inspectors/{herdr/inspector-runner.js → inspector-runner.js} +31 -25
- package/extensions/dm-subagents/src/inspectors/plugins.js +5 -0
- package/extensions/dm-subagents/src/inspectors/{herdr/session-roots-codec.js → session-roots-codec.js} +1 -6
- package/extensions/dm-subagents/src/inspectors/types.js +1 -0
- package/extensions/dm-subagents/src/integrations/dm-web-session-liveness.js +50 -0
- package/extensions/dm-subagents/src/intercom/intercom-bridge.js +39 -5
- package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +256 -151
- package/extensions/dm-subagents/src/intercom/result-intercom.js +6 -0
- package/extensions/dm-subagents/src/intercom/supervisor-ui.js +199 -0
- package/extensions/dm-subagents/src/missions/workflow-state.js +30 -17
- package/extensions/dm-subagents/src/policy/authority.js +6 -2
- package/extensions/dm-subagents/src/profiles/profiles.js +10 -5
- package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +28 -35
- package/extensions/dm-subagents/src/runs/background/active-run-index.js +17 -0
- package/extensions/dm-subagents/src/runs/background/async-execution.js +580 -389
- package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +71 -47
- package/extensions/dm-subagents/src/runs/background/async-resume.js +61 -26
- package/extensions/dm-subagents/src/runs/background/async-retention.js +8 -0
- package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +3 -4
- package/extensions/dm-subagents/src/runs/background/async-status.js +90 -13
- package/extensions/dm-subagents/src/runs/background/auto-drain.js +57 -33
- package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +54 -0
- package/extensions/dm-subagents/src/runs/background/chain-append.js +1 -1
- package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -27
- package/extensions/dm-subagents/src/runs/background/control-channel.js +105 -256
- package/extensions/dm-subagents/src/runs/background/fleet-view.js +67 -10
- package/extensions/dm-subagents/src/runs/background/notify.js +252 -17
- package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +33 -2
- package/extensions/dm-subagents/src/runs/background/process-terminal-candidate.js +88 -0
- package/extensions/dm-subagents/src/runs/background/process-terminal.js +29 -87
- package/extensions/dm-subagents/src/runs/background/result-files.js +8 -4
- package/extensions/dm-subagents/src/runs/background/result-watcher.js +15 -3
- package/extensions/dm-subagents/src/runs/background/retained-children.js +3 -2
- package/extensions/dm-subagents/src/runs/background/retained-nested-route-tracker.js +86 -0
- package/extensions/dm-subagents/src/runs/background/run-child-session.js +574 -0
- package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +9 -5
- package/extensions/dm-subagents/src/runs/background/run-status.js +114 -11
- package/extensions/dm-subagents/src/runs/background/runner-aliases.js +129 -0
- package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +62 -0
- package/extensions/dm-subagents/src/runs/background/runner-child-sessions.js +16 -0
- package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +84 -0
- package/extensions/dm-subagents/src/runs/background/runner-startup-failure.js +43 -0
- package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +119 -20
- package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +33 -10
- package/extensions/dm-subagents/src/runs/background/steering.js +24 -3
- package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +238 -0
- package/extensions/dm-subagents/src/runs/background/subagent-runner.js +1008 -1344
- package/extensions/dm-subagents/src/runs/background/subagent-wait.js +156 -26
- package/extensions/dm-subagents/src/runs/background/wait-completions.js +91 -23
- package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +10 -3
- package/extensions/dm-subagents/src/runs/background/wait-tool.js +8 -12
- package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +60 -0
- package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +29 -26
- package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +94 -2
- package/extensions/dm-subagents/src/runs/foreground/execution.js +446 -648
- package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +4 -0
- package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +5 -2
- package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +8 -4
- package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +1337 -445
- package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +10 -5
- package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +65 -90
- package/extensions/dm-subagents/src/runs/shared/acceptance.js +265 -68
- package/extensions/dm-subagents/src/runs/shared/agent-contract.js +1 -1
- package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +133 -76
- package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +4 -2
- package/extensions/dm-subagents/src/runs/shared/child-hooks.js +166 -0
- package/extensions/dm-subagents/src/runs/shared/child-identity.js +10 -2
- package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +19 -2
- package/extensions/dm-subagents/src/runs/shared/child-launch.js +212 -0
- package/extensions/dm-subagents/src/runs/shared/child-lifecycle.js +22 -0
- package/extensions/dm-subagents/src/runs/shared/child-runtime-config.js +31 -0
- package/extensions/dm-subagents/src/runs/shared/child-session.js +378 -0
- package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +299 -0
- package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +1 -1
- package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +148 -32
- package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +6 -4
- package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +19 -0
- package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +6 -1
- package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +14 -2
- package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -7
- package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +60 -0
- package/extensions/dm-subagents/src/runs/shared/git-environment.js +25 -0
- package/extensions/dm-subagents/src/runs/shared/herdr-connection.js +341 -0
- package/extensions/dm-subagents/src/runs/shared/herdr-dm-protocol.js +60 -0
- package/extensions/dm-subagents/src/runs/shared/herdr-external-adapters.js +555 -0
- package/extensions/dm-subagents/src/runs/shared/herdr-machine.js +239 -0
- package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +987 -0
- package/extensions/dm-subagents/src/runs/shared/host-step-status.js +2 -0
- package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +23 -3
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +4 -3
- package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +15 -5
- package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +43 -0
- package/extensions/dm-subagents/src/runs/shared/{model-fallback.js → model-resolution.js} +44 -128
- package/extensions/dm-subagents/src/runs/shared/nested-events.js +39 -49
- package/extensions/dm-subagents/src/runs/shared/nested-path.js +0 -13
- package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +22 -12
- package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +78 -2
- package/extensions/dm-subagents/src/runs/shared/permissions.js +1 -16
- package/extensions/dm-subagents/src/runs/shared/process-signal.js +3 -0
- package/extensions/dm-subagents/src/runs/shared/readonly-drain-observation.js +51 -0
- package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +0 -13
- package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +0 -26
- package/extensions/dm-subagents/src/runs/shared/single-output.js +20 -2
- package/extensions/dm-subagents/src/runs/shared/structured-output.js +263 -10
- package/extensions/dm-subagents/src/runs/shared/subagent-control.js +6 -14
- package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +117 -370
- package/extensions/dm-subagents/src/runs/shared/tool-availability.js +12 -50
- package/extensions/dm-subagents/src/runs/shared/tool-budget.js +10 -13
- package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +1 -1
- package/extensions/dm-subagents/src/runs/shared/usage-reconciliation.js +69 -0
- package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +11 -0
- package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +30 -10
- package/extensions/dm-subagents/src/runs/shared/worktree-setup-command.js +195 -0
- package/extensions/dm-subagents/src/runs/shared/worktree.js +814 -141
- package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
- package/extensions/dm-subagents/src/shared/child-cache-retention.js +19 -0
- package/extensions/dm-subagents/src/shared/fork-context.js +40 -77
- package/extensions/dm-subagents/src/shared/fork-session-cwd.js +24 -0
- package/extensions/dm-subagents/src/shared/jsonl-writer.js +8 -0
- package/extensions/dm-subagents/src/shared/launch-contract.js +37 -6
- package/extensions/dm-subagents/src/shared/model-response-aliases.js +15 -0
- package/extensions/dm-subagents/src/shared/opencode-session-headers.js +15 -0
- package/extensions/dm-subagents/src/shared/pruned-fork.js +83 -76
- package/extensions/dm-subagents/src/shared/required-child-extensions.js +72 -0
- package/extensions/dm-subagents/src/shared/shortcuts.js +0 -2
- package/extensions/dm-subagents/src/shared/thinking-ceiling.js +0 -6
- package/extensions/dm-subagents/src/shared/types.js +16 -12
- package/extensions/dm-subagents/src/shared/utils.js +22 -7
- package/extensions/dm-subagents/src/shared/watch-strategy.js +2 -0
- package/extensions/dm-subagents/src/shared/workflow-child-permit.js +70 -0
- package/extensions/dm-subagents/src/slash/delegation-adapters.js +15 -1
- package/extensions/dm-subagents/src/slash/delegation-request.js +13 -0
- package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +28 -1
- package/extensions/dm-subagents/src/slash/prompt-workflows.js +15 -2
- package/extensions/dm-subagents/src/slash/slash-commands.js +12 -269
- package/extensions/dm-subagents/src/slash/subagent-cost.js +255 -0
- package/extensions/dm-subagents/src/slash/subagents-admin.js +49 -25
- package/extensions/dm-subagents/src/tui/fleet-status.js +224 -23
- package/extensions/dm-subagents/src/tui/fleet.js +38 -25
- package/extensions/dm-subagents/src/tui/render.js +636 -63
- package/extensions/dm-subagents/src/watchdog/child-status.js +42 -23
- package/extensions/dm-subagents/src/watchdog/diff-tool.js +86 -0
- package/extensions/dm-subagents/src/watchdog/emission-guard.js +4 -3
- package/extensions/dm-subagents/src/watchdog/guidance.js +19 -0
- package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +1 -1
- package/extensions/dm-subagents/src/watchdog/model-selection.js +18 -1
- package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +16 -10
- package/extensions/dm-subagents/src/watchdog/register-child.js +39 -26
- package/extensions/dm-subagents/src/watchdog/register-main.js +51 -43
- package/extensions/dm-subagents/src/watchdog/render.js +5 -7
- package/extensions/dm-subagents/src/watchdog/review.js +142 -67
- package/extensions/dm-subagents/src/watchdog/rules.js +55 -0
- package/extensions/dm-subagents/src/watchdog/runtime.js +167 -109
- package/extensions/dm-subagents/src/watchdog/scope.js +1 -9
- package/extensions/dm-subagents/src/watchdog/settings.js +55 -99
- package/extensions/dm-subagents/src/watchdog/tool-actions.js +11 -12
- package/extensions/dm-subagents/src/watchdog/turn-delta.js +30 -5
- package/extensions/dm-subagents/src/watchdog/types.js +2 -4
- package/extensions/dm-subagents/src/watchdog/warning-format.js +2 -3
- package/extensions/dm-subagents/src/workflows/chat-progress.js +4 -4
- package/extensions/dm-subagents/src/workflows/scripted-workflow.js +482 -36
- package/extensions/dm-subagents/src/workflows/workflow-checklist.js +303 -0
- package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +57 -5
- package/extensions/dm-subagents/src/workflows/workflow-preflight.js +27 -1
- package/extensions/dm-subagents/src/workflows/workflow-receipt.js +51 -3
- package/extensions/dm-subagents/src/workflows/workflow-resources.js +226 -0
- package/extensions/dm-subagents/src/workflows/workflow-settlement.js +5 -0
- package/extensions/dm-web-access/abortable.js +19 -0
- package/extensions/dm-web-access/anysearch.js +4 -13
- package/extensions/dm-web-access/baizhi.js +123 -0
- package/extensions/dm-web-access/bocha.js +3 -24
- package/extensions/dm-web-access/brave.js +3 -23
- package/extensions/dm-web-access/brightdata.js +5 -30
- package/extensions/dm-web-access/content-find.js +181 -47
- package/extensions/dm-web-access/crawl4ai.js +166 -0
- package/extensions/dm-web-access/credential-source.js +1 -0
- package/extensions/dm-web-access/curator-page.js +27 -2
- package/extensions/dm-web-access/curator-run.js +36 -0
- package/extensions/dm-web-access/curator-server.js +11 -2
- package/extensions/dm-web-access/domain-filter-normalization.js +17 -0
- package/extensions/dm-web-access/duckduckgo.js +4 -24
- package/extensions/dm-web-access/extract.js +54 -12
- package/extensions/dm-web-access/fetch-params.js +1 -1
- package/extensions/dm-web-access/firecrawl.js +7 -45
- package/extensions/dm-web-access/gemini-search.js +101 -46
- package/extensions/dm-web-access/github-extract.js +2 -11
- package/extensions/dm-web-access/index.js +382 -247
- package/extensions/dm-web-access/jina-search.js +4 -13
- package/extensions/dm-web-access/kagi.js +4 -13
- package/extensions/dm-web-access/kimi-search.js +5 -30
- package/extensions/dm-web-access/mistral-search.js +251 -0
- package/extensions/dm-web-access/ollama.js +2 -7
- package/extensions/dm-web-access/openai-search.js +204 -46
- package/extensions/dm-web-access/opencode-session-headers.js +15 -0
- package/extensions/dm-web-access/package.json +1 -1
- package/extensions/dm-web-access/page-query.js +14 -4
- package/extensions/dm-web-access/parallel.js +1 -17
- package/extensions/dm-web-access/pdf-extract.js +1 -0
- package/extensions/dm-web-access/perplexity.js +10 -1
- package/extensions/dm-web-access/querit.js +5 -34
- package/extensions/dm-web-access/query-rewrite.js +6 -2
- package/extensions/dm-web-access/search-answer-formatting.js +6 -0
- package/extensions/dm-web-access/search-result-count-normalization.js +5 -0
- package/extensions/dm-web-access/search1api.js +5 -34
- package/extensions/dm-web-access/searchinfinity.js +5 -34
- package/extensions/dm-web-access/searxng.js +3 -23
- package/extensions/dm-web-access/serpapi.js +183 -0
- package/extensions/dm-web-access/serpbase.js +3 -24
- package/extensions/dm-web-access/serpdive.js +3 -23
- package/extensions/dm-web-access/serper.js +5 -30
- package/extensions/dm-web-access/serply.js +184 -0
- package/extensions/dm-web-access/source-check.js +10 -46
- package/extensions/dm-web-access/ssrf-protection.js +3 -1
- package/extensions/dm-web-access/storage.js +9 -0
- package/extensions/dm-web-access/summary-review.js +36 -25
- package/extensions/dm-web-access/tavily.js +3 -23
- package/extensions/dm-web-access/tinyfish.js +5 -34
- package/extensions/dm-web-access/tool-activation.js +112 -0
- package/extensions/dm-web-access/utils.js +27 -10
- package/extensions/dm-web-access/valyu.js +5 -30
- package/extensions/dm-web-access/xai-search.js +78 -42
- package/extensions/dm-web-access/xcrawl.js +5 -30
- package/package.json +7 -4
- package/extensions/dm-lens/tools/ast-dump.js +0 -101
- package/extensions/dm-subagents/src/api/dm-args.js +0 -3
- package/extensions/dm-subagents/src/runs/shared/child-protocol.js +0 -447
- package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +0 -40
- package/extensions/dm-subagents/src/runs/shared/completion-guard.js +0 -173
- package/extensions/dm-subagents/src/runs/shared/dm-args.js +0 -581
- package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +0 -190
- package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +0 -207
- package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +0 -50
- package/extensions/dm-subagents/src/runs/shared/task-intent.js +0 -130
- package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +0 -68
- /package/extensions/dm-subagents/src/inspectors/{herdr/shell-command.js → shell-command.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Box, Text, truncateToWidth } from "@duckmind/dm-tui";
|
|
2
2
|
import { Type } from "typebox";
|
|
3
|
-
import
|
|
3
|
+
import pLimit from "p-limit";
|
|
4
4
|
import { normalizeFetchContentParams } from "./fetch-params.js";
|
|
5
5
|
import { resolveAuthFetchProfile } from "./auth-fetch.js";
|
|
6
6
|
import { findContent } from "./content-find.js";
|
|
7
7
|
import { answerFromPage } from "./page-query.js";
|
|
8
8
|
import { rewriteSearchQuery } from "./query-rewrite.js";
|
|
9
9
|
import { clearCloneCache } from "./github-extract.js";
|
|
10
|
-
import { ALL_SEARCH_PROVIDERS, getConfiguredSearchRouting, normalizeSearchProviderSelection,
|
|
11
|
-
import { formatSeconds, getWebSearchConfigDir, getWebSearchConfigPath,
|
|
10
|
+
import { ALL_SEARCH_PROVIDERS, assertSearchProviderSelectionAllowed, getAllowedSearchProviders, getConfiguredSearchRouting, normalizeSearchProviderSelection, providerLabel, RESOLVED_SEARCH_PROVIDERS, search } from "./gemini-search.js";
|
|
11
|
+
import { formatSeconds, getWebSearchConfigDir, getWebSearchConfigPath, resolveCuratorNetworkConfig, runWithProxy } from "./utils.js";
|
|
12
12
|
import {
|
|
13
13
|
clearResults,
|
|
14
14
|
deleteResult,
|
|
@@ -56,20 +56,34 @@ import { isSearXNGAvailable } from "./searxng.js";
|
|
|
56
56
|
import { isDuckDuckGoAvailable } from "./duckduckgo.js";
|
|
57
57
|
import { isAnySearchAvailable } from "./anysearch.js";
|
|
58
58
|
import { isXaiSearchAvailable } from "./xai-search.js";
|
|
59
|
+
import { isMistralAvailable } from "./mistral-search.js";
|
|
59
60
|
import { isKimiSearchAvailable } from "./kimi-search.js";
|
|
60
61
|
import { isBrightDataAvailable } from "./brightdata.js";
|
|
61
62
|
import { isSerpBaseAvailable } from "./serpbase.js";
|
|
63
|
+
import { isSerpApiAvailable } from "./serpapi.js";
|
|
62
64
|
import { isSerperAvailable } from "./serper.js";
|
|
65
|
+
import { isSerplyAvailable } from "./serply.js";
|
|
66
|
+
import { isBaizhiAvailable } from "./baizhi.js";
|
|
63
67
|
import { isValyuAvailable } from "./valyu.js";
|
|
64
68
|
import { isXcrawlAvailable } from "./xcrawl.js";
|
|
65
69
|
import { buildSearchErrorPlan } from "./render-search-error.js";
|
|
66
70
|
import { findModelWithProviderRouting, loadEnabledModelPatterns, modelMatchesEnabledPatterns, splitThinkingSuffix } from "./summary-model-scope.js";
|
|
71
|
+
import { registerCuratorRunLifecycle, resolveWebSearchWorkflow } from "./curator-run.js";
|
|
67
72
|
import {
|
|
68
73
|
buildResearchArtifact,
|
|
69
74
|
withClaimAssessment,
|
|
70
75
|
storeResearchArtifact,
|
|
71
76
|
getResearchArtifact
|
|
72
77
|
} from "./source-check.js";
|
|
78
|
+
import { registerWebToolActivation } from "./tool-activation.js";
|
|
79
|
+
function StringEnum(values, options) {
|
|
80
|
+
return Type.Unsafe({
|
|
81
|
+
type: "string",
|
|
82
|
+
enum: values,
|
|
83
|
+
...options?.description && { description: options.description },
|
|
84
|
+
...options?.default && { default: options.default }
|
|
85
|
+
});
|
|
86
|
+
}
|
|
73
87
|
const WEB_SEARCH_CONFIG_PATH = getWebSearchConfigPath();
|
|
74
88
|
let extractModulePromise;
|
|
75
89
|
async function fetchAllContent(urls, signal, options) {
|
|
@@ -143,10 +157,43 @@ const DEFAULT_CURATOR_TIMEOUT_SECONDS = 20;
|
|
|
143
157
|
const DEFAULT_REMOTE_CURATOR_TIMEOUT_SECONDS = 60;
|
|
144
158
|
const MAX_CURATOR_TIMEOUT_SECONDS = 600;
|
|
145
159
|
const MAX_SUMMARY_GENERATION_DEADLINE_MS = 600000;
|
|
146
|
-
|
|
160
|
+
const SEARCH_QUERY_CONCURRENCY = 3;
|
|
161
|
+
const FETCH_MODES = ["readable", "raw", "answer"];
|
|
162
|
+
const FETCH_MODE_DESCRIPTIONS = {
|
|
163
|
+
readable: "extract readable content as markdown",
|
|
164
|
+
raw: "return the exact textual body using direct HTTP only",
|
|
165
|
+
answer: "answer a prompt using only fetched content"
|
|
166
|
+
};
|
|
167
|
+
function resolveFetchModeConfig(config) {
|
|
168
|
+
const configuredModes = config.fetch?.allowedModes ?? FETCH_MODES;
|
|
169
|
+
if (!Array.isArray(configuredModes) || configuredModes.length === 0 || configuredModes.some((mode) => !FETCH_MODES.includes(mode))) {
|
|
170
|
+
throw new Error(`fetch.allowedModes in ${WEB_SEARCH_CONFIG_PATH} must be a non-empty array containing only "readable", "raw", or "answer"`);
|
|
171
|
+
}
|
|
172
|
+
const allowedModes = configuredModes;
|
|
173
|
+
const duplicateMode = allowedModes.find((mode, index) => allowedModes.indexOf(mode) !== index);
|
|
174
|
+
if (duplicateMode) {
|
|
175
|
+
throw new Error(`fetch.allowedModes in ${WEB_SEARCH_CONFIG_PATH} must not contain duplicates: "${duplicateMode}"`);
|
|
176
|
+
}
|
|
177
|
+
const defaultMode = config.fetch?.defaultMode ?? "readable";
|
|
178
|
+
if (!allowedModes.includes(defaultMode)) {
|
|
179
|
+
throw new Error(`fetch.defaultMode in ${WEB_SEARCH_CONFIG_PATH} must be one of fetch.allowedModes`);
|
|
180
|
+
}
|
|
181
|
+
return { defaultMode, allowedModes };
|
|
182
|
+
}
|
|
183
|
+
function runSearchQueries(queries, run) {
|
|
184
|
+
const limit = pLimit(SEARCH_QUERY_CONCURRENCY);
|
|
185
|
+
return Promise.all(queries.map((query, index) => limit(() => run(query, index))));
|
|
186
|
+
}
|
|
187
|
+
function curatorResultIndex(queryIndex, entryIndex, queryCount) {
|
|
188
|
+
return entryIndex * queryCount + queryIndex;
|
|
189
|
+
}
|
|
190
|
+
function curatorResultIndexCapacity(queryCount) {
|
|
191
|
+
return queryCount * RESOLVED_SEARCH_PROVIDERS.length;
|
|
192
|
+
}
|
|
193
|
+
function searchProviderSchema(description, allowedProviders) {
|
|
147
194
|
return Type.Union([
|
|
148
|
-
StringEnum([...
|
|
149
|
-
Type.Array(StringEnum([...
|
|
195
|
+
StringEnum(["auto", "all", ...allowedProviders]),
|
|
196
|
+
Type.Array(StringEnum([...allowedProviders]), { minItems: 1 })
|
|
150
197
|
], { description });
|
|
151
198
|
}
|
|
152
199
|
function isToolEnabled(config, key) {
|
|
@@ -188,6 +235,8 @@ function resolveToolNames(config) {
|
|
|
188
235
|
const seen = new Map;
|
|
189
236
|
for (const key of registeredKeys) {
|
|
190
237
|
const name = names[key];
|
|
238
|
+
if (name === "web_enable")
|
|
239
|
+
throw new Error(`toolNames.${key} in ${WEB_SEARCH_CONFIG_PATH} uses reserved loader name web_enable`);
|
|
191
240
|
const previous = seen.get(name);
|
|
192
241
|
if (previous)
|
|
193
242
|
throw new Error(`toolNames.${key} duplicates toolNames.${previous} in ${WEB_SEARCH_CONFIG_PATH}`);
|
|
@@ -211,10 +260,14 @@ function normalizeProviderInput(value, label = "provider") {
|
|
|
211
260
|
}
|
|
212
261
|
function resolveRequestedProvider(requested) {
|
|
213
262
|
const normalizedRequested = normalizeProviderInput(requested);
|
|
214
|
-
if (normalizedRequested && normalizedRequested !== "auto")
|
|
263
|
+
if (normalizedRequested && normalizedRequested !== "auto") {
|
|
264
|
+
assertSearchProviderSelectionAllowed(normalizedRequested, "Requested provider");
|
|
215
265
|
return normalizedRequested;
|
|
266
|
+
}
|
|
216
267
|
const config = loadConfig();
|
|
217
|
-
|
|
268
|
+
const provider = normalizeProviderInput(config.searchProvider ?? config.provider, `provider in ${WEB_SEARCH_CONFIG_PATH}`) ?? "auto";
|
|
269
|
+
assertSearchProviderSelectionAllowed(provider, `configured provider in ${WEB_SEARCH_CONFIG_PATH}`);
|
|
270
|
+
return provider;
|
|
218
271
|
}
|
|
219
272
|
function toCuratorProvider(provider) {
|
|
220
273
|
if (Array.isArray(provider))
|
|
@@ -225,9 +278,7 @@ function resolveCuratorSearchProvider(requested, current) {
|
|
|
225
278
|
const normalized = normalizeProviderInput(requested);
|
|
226
279
|
if (!normalized || normalized === "auto")
|
|
227
280
|
return current;
|
|
228
|
-
|
|
229
|
-
return current;
|
|
230
|
-
return normalized;
|
|
281
|
+
return normalized === "all" && Array.isArray(current) ? current : normalized;
|
|
231
282
|
}
|
|
232
283
|
function normalizeRecencyFilter(value) {
|
|
233
284
|
return value === "day" || value === "week" || value === "month" || value === "year" ? value : undefined;
|
|
@@ -240,16 +291,6 @@ function normalizeCuratorTimeoutSeconds(value) {
|
|
|
240
291
|
return;
|
|
241
292
|
return Math.min(normalized, MAX_CURATOR_TIMEOUT_SECONDS);
|
|
242
293
|
}
|
|
243
|
-
function resolveWorkflow(input, hasUI) {
|
|
244
|
-
const normalized = typeof input === "string" ? input.trim().toLowerCase() : "";
|
|
245
|
-
if (normalized === "auto-summary")
|
|
246
|
-
return "auto-summary";
|
|
247
|
-
if (!hasUI)
|
|
248
|
-
return "none";
|
|
249
|
-
if (normalized === "none")
|
|
250
|
-
return "none";
|
|
251
|
-
return "summary-review";
|
|
252
|
-
}
|
|
253
294
|
function normalizeQueryList(queryList) {
|
|
254
295
|
const normalized = [];
|
|
255
296
|
for (const query of queryList) {
|
|
@@ -297,41 +338,45 @@ function shouldAutoOpenCuratorBrowser(config) {
|
|
|
297
338
|
return true;
|
|
298
339
|
}
|
|
299
340
|
async function getProviderAvailability(ctx) {
|
|
300
|
-
const
|
|
301
|
-
const
|
|
341
|
+
const allowedProviders = new Set(getAllowedSearchProviders());
|
|
342
|
+
const geminiWebAvail = allowedProviders.has("gemini") ? await getOptionalGeminiWebAvailability() : null;
|
|
343
|
+
const geminiApiAvail = allowedProviders.has("gemini") && isGeminiApiAvailable();
|
|
302
344
|
const providers = {
|
|
303
|
-
openai: await isOpenAISearchAvailable(ctx),
|
|
304
|
-
brave: isBraveAvailable(),
|
|
305
|
-
parallel: isParallelAvailable(),
|
|
306
|
-
"parallel-mcp": isParallelMcpAvailable(),
|
|
307
|
-
tinyfish: isTinyFishAvailable(),
|
|
308
|
-
search1api: isSearch1APIAvailable(),
|
|
309
|
-
searchinfinity: isSearchinfinityAvailable(),
|
|
310
|
-
querit: isQueritAvailable(),
|
|
311
|
-
tavily: isTavilyAvailable(),
|
|
312
|
-
firecrawl: isFirecrawlAvailable(),
|
|
313
|
-
jina: isJinaSearchAvailable(),
|
|
314
|
-
serpdive: isSerpdiveAvailable(),
|
|
315
|
-
kagi: isKagiAvailable(),
|
|
316
|
-
bocha: isBochaAvailable(),
|
|
317
|
-
ollama: isOllamaAvailable(),
|
|
318
|
-
searxng: isSearXNGAvailable(),
|
|
319
|
-
duckduckgo: isDuckDuckGoAvailable(),
|
|
320
|
-
perplexity: isPerplexityAvailable(),
|
|
321
|
-
exa: isExaAvailable(),
|
|
345
|
+
openai: allowedProviders.has("openai") && await isOpenAISearchAvailable(ctx),
|
|
346
|
+
brave: allowedProviders.has("brave") && isBraveAvailable(),
|
|
347
|
+
parallel: allowedProviders.has("parallel") && isParallelAvailable(),
|
|
348
|
+
"parallel-mcp": allowedProviders.has("parallel-mcp") && isParallelMcpAvailable(),
|
|
349
|
+
tinyfish: allowedProviders.has("tinyfish") && isTinyFishAvailable(),
|
|
350
|
+
search1api: allowedProviders.has("search1api") && isSearch1APIAvailable(),
|
|
351
|
+
searchinfinity: allowedProviders.has("searchinfinity") && isSearchinfinityAvailable(),
|
|
352
|
+
querit: allowedProviders.has("querit") && isQueritAvailable(),
|
|
353
|
+
tavily: allowedProviders.has("tavily") && isTavilyAvailable(),
|
|
354
|
+
firecrawl: allowedProviders.has("firecrawl") && isFirecrawlAvailable(),
|
|
355
|
+
jina: allowedProviders.has("jina") && isJinaSearchAvailable(),
|
|
356
|
+
serpdive: allowedProviders.has("serpdive") && isSerpdiveAvailable(),
|
|
357
|
+
kagi: allowedProviders.has("kagi") && isKagiAvailable(),
|
|
358
|
+
bocha: allowedProviders.has("bocha") && isBochaAvailable(),
|
|
359
|
+
ollama: allowedProviders.has("ollama") && isOllamaAvailable(),
|
|
360
|
+
searxng: allowedProviders.has("searxng") && isSearXNGAvailable(),
|
|
361
|
+
duckduckgo: allowedProviders.has("duckduckgo") && isDuckDuckGoAvailable(),
|
|
362
|
+
perplexity: allowedProviders.has("perplexity") && isPerplexityAvailable(),
|
|
363
|
+
exa: allowedProviders.has("exa") && isExaAvailable(),
|
|
322
364
|
gemini: geminiApiAvail || !!geminiWebAvail,
|
|
323
|
-
kimi: await isKimiSearchAvailable(ctx),
|
|
324
|
-
anysearch: isAnySearchAvailable(),
|
|
325
|
-
xcrawl: isXcrawlAvailable(),
|
|
326
|
-
xai: await isXaiSearchAvailable(ctx),
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
365
|
+
kimi: allowedProviders.has("kimi") && await isKimiSearchAvailable(ctx),
|
|
366
|
+
anysearch: allowedProviders.has("anysearch") && isAnySearchAvailable(),
|
|
367
|
+
xcrawl: allowedProviders.has("xcrawl") && isXcrawlAvailable(),
|
|
368
|
+
xai: allowedProviders.has("xai") && await isXaiSearchAvailable(ctx),
|
|
369
|
+
mistral: allowedProviders.has("mistral") && isMistralAvailable(),
|
|
370
|
+
brightdata: allowedProviders.has("brightdata") && isBrightDataAvailable(),
|
|
371
|
+
serpbase: allowedProviders.has("serpbase") && isSerpBaseAvailable(),
|
|
372
|
+
serpapi: allowedProviders.has("serpapi") && isSerpApiAvailable(),
|
|
373
|
+
serper: allowedProviders.has("serper") && isSerperAvailable(),
|
|
374
|
+
serply: allowedProviders.has("serply") && isSerplyAvailable(),
|
|
375
|
+
baizhi: allowedProviders.has("baizhi") && isBaizhiAvailable(),
|
|
376
|
+
valyu: allowedProviders.has("valyu") && isValyuAvailable()
|
|
331
377
|
};
|
|
332
|
-
const allSearchProviders = new Set(ALL_SEARCH_PROVIDERS);
|
|
333
378
|
return {
|
|
334
|
-
all:
|
|
379
|
+
all: ALL_SEARCH_PROVIDERS.some((provider) => provider === "gemini" ? geminiApiAvail : providers[provider]),
|
|
335
380
|
...providers
|
|
336
381
|
};
|
|
337
382
|
}
|
|
@@ -374,39 +419,14 @@ function firstAvailableProvider(available, preferOpenAI, fallback) {
|
|
|
374
419
|
return "openai";
|
|
375
420
|
if (available.exa)
|
|
376
421
|
return "exa";
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
if (available.search1api)
|
|
386
|
-
return "search1api";
|
|
387
|
-
if (available.searchinfinity)
|
|
388
|
-
return "searchinfinity";
|
|
389
|
-
if (available.querit)
|
|
390
|
-
return "querit";
|
|
391
|
-
if (available.tavily)
|
|
392
|
-
return "tavily";
|
|
393
|
-
if (available.firecrawl)
|
|
394
|
-
return "firecrawl";
|
|
395
|
-
if (available.jina)
|
|
396
|
-
return "jina";
|
|
397
|
-
if (available.serpdive)
|
|
398
|
-
return "serpdive";
|
|
399
|
-
if (available.kagi)
|
|
400
|
-
return "kagi";
|
|
401
|
-
if (available.bocha)
|
|
402
|
-
return "bocha";
|
|
403
|
-
if (available.ollama)
|
|
404
|
-
return "ollama";
|
|
405
|
-
if (available.perplexity)
|
|
406
|
-
return "perplexity";
|
|
407
|
-
if (available.gemini)
|
|
408
|
-
return "gemini";
|
|
409
|
-
return fallback;
|
|
422
|
+
for (const provider of ALL_SEARCH_PROVIDERS) {
|
|
423
|
+
if (provider === "ollama" && available.bocha)
|
|
424
|
+
return "bocha";
|
|
425
|
+
if (available[provider])
|
|
426
|
+
return provider;
|
|
427
|
+
}
|
|
428
|
+
const allowed = getAllowedSearchProviders();
|
|
429
|
+
return allowed.includes(fallback) ? fallback : "auto";
|
|
410
430
|
}
|
|
411
431
|
function resolveProvider(provider, available, options, preferOpenAICodexDefault = false, ctx) {
|
|
412
432
|
if (Array.isArray(provider))
|
|
@@ -425,62 +445,11 @@ function resolveProvider(provider, available, options, preferOpenAICodexDefault
|
|
|
425
445
|
}
|
|
426
446
|
return firstAvailableProvider(available, preferOpenAI, "exa");
|
|
427
447
|
}
|
|
428
|
-
if (provider === "all"
|
|
429
|
-
return firstAvailableProvider(available, preferOpenAI, "exa");
|
|
430
|
-
}
|
|
431
|
-
if (provider === "openai" && !available.openai) {
|
|
432
|
-
return firstAvailableProvider(available, false, "openai");
|
|
433
|
-
}
|
|
434
|
-
if (provider === "brave" && !available.brave) {
|
|
435
|
-
return firstAvailableProvider(available, preferOpenAI, "brave");
|
|
436
|
-
}
|
|
437
|
-
if (provider === "parallel" && !available.parallel) {
|
|
438
|
-
return firstAvailableProvider(available, preferOpenAI, "parallel");
|
|
439
|
-
}
|
|
440
|
-
if (provider === "tinyfish" && !available.tinyfish) {
|
|
441
|
-
return firstAvailableProvider(available, preferOpenAI, "tinyfish");
|
|
442
|
-
}
|
|
443
|
-
if (provider === "search1api" && !available.search1api) {
|
|
444
|
-
return firstAvailableProvider(available, preferOpenAI, "search1api");
|
|
445
|
-
}
|
|
446
|
-
if (provider === "searchinfinity" && !available.searchinfinity) {
|
|
447
|
-
return firstAvailableProvider(available, preferOpenAI, "searchinfinity");
|
|
448
|
-
}
|
|
449
|
-
if (provider === "querit" && !available.querit) {
|
|
450
|
-
return firstAvailableProvider(available, preferOpenAI, "querit");
|
|
451
|
-
}
|
|
452
|
-
if (provider === "tavily" && !available.tavily) {
|
|
453
|
-
return firstAvailableProvider(available, preferOpenAI, "tavily");
|
|
454
|
-
}
|
|
455
|
-
if (provider === "firecrawl" && !available.firecrawl) {
|
|
456
|
-
return firstAvailableProvider(available, preferOpenAI, "firecrawl");
|
|
457
|
-
}
|
|
458
|
-
if (provider === "jina" && !available.jina) {
|
|
459
|
-
return firstAvailableProvider(available, preferOpenAI, "jina");
|
|
460
|
-
}
|
|
461
|
-
if (provider === "serpdive" && !available.serpdive) {
|
|
462
|
-
return firstAvailableProvider(available, preferOpenAI, "serpdive");
|
|
463
|
-
}
|
|
464
|
-
if (provider === "kagi" && !available.kagi) {
|
|
465
|
-
return firstAvailableProvider(available, preferOpenAI, "kagi");
|
|
466
|
-
}
|
|
467
|
-
if (provider === "bocha" && !available.bocha) {
|
|
468
|
-
return firstAvailableProvider(available, preferOpenAI, "bocha");
|
|
469
|
-
}
|
|
470
|
-
if (provider === "ollama" && !available.ollama) {
|
|
471
|
-
return firstAvailableProvider(available, preferOpenAI, "ollama");
|
|
472
|
-
}
|
|
473
|
-
if (provider === "searxng" && !available.searxng) {
|
|
474
|
-
return firstAvailableProvider(available, preferOpenAI, "searxng");
|
|
475
|
-
}
|
|
476
|
-
if (provider === "exa" && !available.exa) {
|
|
477
|
-
return firstAvailableProvider(available, preferOpenAI, "exa");
|
|
478
|
-
}
|
|
479
|
-
if (provider === "perplexity" && !available.perplexity) {
|
|
480
|
-
return firstAvailableProvider(available, preferOpenAI, "perplexity");
|
|
448
|
+
if (provider === "all") {
|
|
449
|
+
return available.all ? "all" : firstAvailableProvider(available, preferOpenAI, "exa");
|
|
481
450
|
}
|
|
482
|
-
if (provider
|
|
483
|
-
return firstAvailableProvider(available, preferOpenAI,
|
|
451
|
+
if (ALL_SEARCH_PROVIDERS.includes(provider) && !available[provider]) {
|
|
452
|
+
return firstAvailableProvider(available, provider === "openai" ? false : preferOpenAI, provider);
|
|
484
453
|
}
|
|
485
454
|
return provider;
|
|
486
455
|
}
|
|
@@ -492,10 +461,11 @@ const pendingCurates = new Map;
|
|
|
492
461
|
const activeCurators = new Map;
|
|
493
462
|
const glimpseWins = new Map;
|
|
494
463
|
const DEFAULT_MAX_INLINE_CONTENT_CHARS = 30000;
|
|
464
|
+
const MIN_INLINE_CONTENT_CHARS = 1000;
|
|
495
465
|
const MAX_INLINE_CONTENT_CHARS = 200000;
|
|
496
466
|
function getMaxInlineContentChars(config = loadConfig()) {
|
|
497
467
|
const value = config.maxInlineContentChars;
|
|
498
|
-
if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value) || value
|
|
468
|
+
if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value) || value < MIN_INLINE_CONTENT_CHARS) {
|
|
499
469
|
return DEFAULT_MAX_INLINE_CONTENT_CHARS;
|
|
500
470
|
}
|
|
501
471
|
return Math.min(value, MAX_INLINE_CONTENT_CHARS);
|
|
@@ -639,6 +609,11 @@ function hasFullInlineCoverage(urls, inlineContent) {
|
|
|
639
609
|
function formatFullResults(queryData) {
|
|
640
610
|
let output = `## Results for: "${queryData.query}"
|
|
641
611
|
|
|
612
|
+
`;
|
|
613
|
+
const providers = queryData.providers ?? (queryData.provider ? [queryData.provider] : []);
|
|
614
|
+
if (providers.length > 0)
|
|
615
|
+
output += `**Provider${providers.length === 1 ? "" : "s"}:** ${providers.join(", ")}
|
|
616
|
+
|
|
642
617
|
`;
|
|
643
618
|
if (queryData.answer) {
|
|
644
619
|
output += `${queryData.answer}
|
|
@@ -649,12 +624,33 @@ function formatFullResults(queryData) {
|
|
|
649
624
|
}
|
|
650
625
|
for (const r of queryData.results) {
|
|
651
626
|
output += `### ${r.title}
|
|
652
|
-
${r.url}
|
|
627
|
+
${r.url}${r.snippet ? `
|
|
628
|
+
|
|
629
|
+
${r.snippet}` : ""}
|
|
653
630
|
|
|
654
631
|
`;
|
|
655
632
|
}
|
|
656
633
|
return output;
|
|
657
634
|
}
|
|
635
|
+
function boundSearchPresentation(text, guidance, truncationGuidance, maxChars) {
|
|
636
|
+
const fullText = `${text}${guidance}`;
|
|
637
|
+
if (fullText.length <= maxChars) {
|
|
638
|
+
return { text: fullText, truncated: false, originalChars: text.length, returnedChars: text.length, omittedChars: 0 };
|
|
639
|
+
}
|
|
640
|
+
const marker = `
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
[Output truncated.]${truncationGuidance}`;
|
|
644
|
+
const prefixLength = maxChars - marker.length;
|
|
645
|
+
const bounded = `${text.slice(0, prefixLength)}${marker}`;
|
|
646
|
+
return {
|
|
647
|
+
text: bounded,
|
|
648
|
+
truncated: true,
|
|
649
|
+
originalChars: text.length,
|
|
650
|
+
returnedChars: prefixLength,
|
|
651
|
+
omittedChars: text.length - prefixLength
|
|
652
|
+
};
|
|
653
|
+
}
|
|
658
654
|
function abortPendingFetches() {
|
|
659
655
|
for (const controller of pendingFetches.values()) {
|
|
660
656
|
controller.abort();
|
|
@@ -873,7 +869,12 @@ function handleSessionChange(ctx) {
|
|
|
873
869
|
}
|
|
874
870
|
export default function dm_web_access_default(pi) {
|
|
875
871
|
const initConfig = loadConfigForExtensionInit();
|
|
876
|
-
|
|
872
|
+
const fetchModeConfig = resolveFetchModeConfig(initConfig);
|
|
873
|
+
const allowedSearchProviders = initConfig.webSearch?.allowedProviders === undefined ? RESOLVED_SEARCH_PROVIDERS : getAllowedSearchProviders();
|
|
874
|
+
const allEligibleProviders = allowedSearchProviders.filter((provider) => ALL_SEARCH_PROVIDERS.includes(provider));
|
|
875
|
+
const allExcludedProviders = allowedSearchProviders.filter((provider) => !ALL_SEARCH_PROVIDERS.includes(provider));
|
|
876
|
+
const allPolicyDescription = allEligibleProviders.length === 0 ? `all has no eligible allowed providers; explicit-only allowed providers (${allExcludedProviders.map(providerLabel).join(", ")}) remain excluded` : allExcludedProviders.length > 0 ? `all searches eligible allowed providers (${allEligibleProviders.map(providerLabel).join(", ")}); explicit-only allowed providers (${allExcludedProviders.map(providerLabel).join(", ")}) remain excluded` : `all searches every eligible allowed provider (${allEligibleProviders.map(providerLabel).join(", ")})`;
|
|
877
|
+
const curatorRunState = registerCuratorRunLifecycle(pi);
|
|
877
878
|
const toolNames = resolveToolNames(initConfig);
|
|
878
879
|
const webSearchEnabled = isToolEnabled(initConfig, "webSearch");
|
|
879
880
|
const sourceCheckEnabled = isToolEnabled(initConfig, "sourceCheck");
|
|
@@ -890,6 +891,7 @@ export default function dm_web_access_default(pi) {
|
|
|
890
891
|
]);
|
|
891
892
|
const searchQueryDescription = webSearchEnabled ? `Get content for this query (${toolNames.webSearch})` : "Get content for a stored search query";
|
|
892
893
|
const fetchContentStorageNote = getSearchContentEnabled ? `Full original content is stored for retrieval with ${toolNames.getSearchContent}.` : "Full original content is stored internally, but the retrieval tool is not registered.";
|
|
894
|
+
const fetchModeDescription = fetchModeConfig.allowedModes.map((mode) => `${mode}${mode === fetchModeConfig.defaultMode ? " (default)" : ""}: ${FETCH_MODE_DESCRIPTIONS[mode]}`).join("; ");
|
|
893
895
|
const curateKey = initConfig.shortcuts?.curate || DEFAULT_SHORTCUTS.curate;
|
|
894
896
|
const activityKey = initConfig.shortcuts?.activity || DEFAULT_SHORTCUTS.activity;
|
|
895
897
|
function startBackgroundFetch(urls, proxy) {
|
|
@@ -898,7 +900,7 @@ export default function dm_web_access_default(pi) {
|
|
|
898
900
|
const fetchId = generateId();
|
|
899
901
|
const controller = new AbortController;
|
|
900
902
|
pendingFetches.set(fetchId, controller);
|
|
901
|
-
runWithProxy(proxy, () => fetchAllContent(urls, controller.signal, withRegisteredFetchOptions(undefined, registeredToolNames, proxy))).then((fetched) => {
|
|
903
|
+
Promise.resolve().then(() => runWithProxy(proxy, () => fetchAllContent(urls, controller.signal, withRegisteredFetchOptions(undefined, registeredToolNames, proxy)))).then((fetched) => {
|
|
902
904
|
if (!sessionActive || !pendingFetches.has(fetchId))
|
|
903
905
|
return;
|
|
904
906
|
const data = {
|
|
@@ -1102,7 +1104,7 @@ export default function dm_web_access_default(pi) {
|
|
|
1102
1104
|
};
|
|
1103
1105
|
}
|
|
1104
1106
|
const selected = filterByQueryIndices(payload.selectedQueryIndices, resultsByIndex).results;
|
|
1105
|
-
const fallbackResults = selected.length > 0 ? selected :
|
|
1107
|
+
const fallbackResults = selected.length > 0 ? selected : orderedSearchResults(resultsByIndex);
|
|
1106
1108
|
const deterministic = buildDeterministicSummary(fallbackResults);
|
|
1107
1109
|
return {
|
|
1108
1110
|
approvedSummary: deterministic.summary,
|
|
@@ -1113,6 +1115,7 @@ export default function dm_web_access_default(pi) {
|
|
|
1113
1115
|
const sc = opts.results.filter((r) => !r.error).length;
|
|
1114
1116
|
const tr = opts.results.reduce((sum, r) => sum + r.results.length, 0);
|
|
1115
1117
|
const hasApprovedSummary = typeof opts.approvedSummary === "string" && opts.approvedSummary.trim().length > 0;
|
|
1118
|
+
const maxInlineContentChars = getMaxInlineContentChars(initConfig);
|
|
1116
1119
|
let output = "";
|
|
1117
1120
|
if (hasApprovedSummary) {
|
|
1118
1121
|
output = opts.approvedSummary.trim();
|
|
@@ -1122,6 +1125,15 @@ export default function dm_web_access_default(pi) {
|
|
|
1122
1125
|
|
|
1123
1126
|
`;
|
|
1124
1127
|
}
|
|
1128
|
+
const providerNames = opts.results.map((result) => {
|
|
1129
|
+
const providers = result.providers ?? (result.provider ? [result.provider] : []);
|
|
1130
|
+
return providers.join(", ") || "unknown";
|
|
1131
|
+
});
|
|
1132
|
+
output += opts.results.length === 1 ? `**Provider:** ${providerNames[0]}
|
|
1133
|
+
|
|
1134
|
+
` : `**Providers used:** ${providerNames.map((name, index) => `Query ${index + 1}: ${name}`).join("; ")}
|
|
1135
|
+
|
|
1136
|
+
`;
|
|
1125
1137
|
const duplicateQueries = opts.curated ? duplicateQuerySet(opts.results) : new Set;
|
|
1126
1138
|
for (const { query, answer, results, error, provider } of opts.results) {
|
|
1127
1139
|
if (opts.queryList.length > 1) {
|
|
@@ -1150,21 +1162,35 @@ export default function dm_web_access_default(pi) {
|
|
|
1150
1162
|
urls: opts.inlineContent
|
|
1151
1163
|
};
|
|
1152
1164
|
pi.appendEntry("web-search-results", storeFetchedContentResult(fetchId, data));
|
|
1153
|
-
if (!hasApprovedSummary) {
|
|
1154
|
-
output += `---
|
|
1155
|
-
Full content for ${opts.inlineContent.length} sources available [${fetchId}].`;
|
|
1156
|
-
}
|
|
1157
1165
|
} else if (opts.includeContent) {
|
|
1158
1166
|
fetchId = startBackgroundFetch(opts.urls, opts.proxy);
|
|
1159
|
-
if (fetchId && !hasApprovedSummary) {
|
|
1160
|
-
output += `---
|
|
1161
|
-
Content fetching in background [${fetchId}]. Will notify when ready.`;
|
|
1162
|
-
}
|
|
1163
1167
|
}
|
|
1164
1168
|
const searchId = storeAndPublishSearch(opts.results);
|
|
1165
1169
|
const isBackgroundFetch = fetchId !== null && !hasInlineReady;
|
|
1170
|
+
const unboundedPresentation = output.trim();
|
|
1171
|
+
const buildGuidance = (forTruncation) => {
|
|
1172
|
+
let value = "";
|
|
1173
|
+
if (hasInlineReady && opts.inlineContent && fetchId) {
|
|
1174
|
+
value += `
|
|
1175
|
+
---
|
|
1176
|
+
Full content for ${opts.inlineContent.length} sources is ready as responseId "${fetchId}". `;
|
|
1177
|
+
value += getSearchContentEnabled ? `Use ${toolNames.getSearchContent}({ responseId: "${fetchId}", urlIndex: 0, offset: 0, limit: ${maxInlineContentChars} }) to retrieve the first bounded page.` : forTruncation ? `Enable ${toolNames.getSearchContent} to retrieve the full stored content.` : "";
|
|
1178
|
+
} else if (isBackgroundFetch && fetchId) {
|
|
1179
|
+
value += `
|
|
1180
|
+
---
|
|
1181
|
+
Content fetching in background as responseId "${fetchId}". Will notify when ready.`;
|
|
1182
|
+
}
|
|
1183
|
+
if (getSearchContentEnabled || forTruncation) {
|
|
1184
|
+
value += `
|
|
1185
|
+
---
|
|
1186
|
+
Full search results are stored as responseId "${searchId}". `;
|
|
1187
|
+
value += getSearchContentEnabled ? `Use ${toolNames.getSearchContent}({ responseId: "${searchId}", queryIndex: 0, offset: 0, limit: ${maxInlineContentChars} }) to retrieve the first bounded page${opts.results.length > 1 ? `; repeat with queryIndex 1 through ${opts.results.length - 1}` : ""}.` : `Enable ${toolNames.getSearchContent} to retrieve the full stored results.`;
|
|
1188
|
+
}
|
|
1189
|
+
return value;
|
|
1190
|
+
};
|
|
1191
|
+
const presentation = hasApprovedSummary ? { text: unboundedPresentation, truncated: false, originalChars: unboundedPresentation.length, returnedChars: unboundedPresentation.length, omittedChars: 0 } : boundSearchPresentation(unboundedPresentation, buildGuidance(false), buildGuidance(true), maxInlineContentChars);
|
|
1166
1192
|
return {
|
|
1167
|
-
content: [{ type: "text", text:
|
|
1193
|
+
content: [{ type: "text", text: presentation.text }],
|
|
1168
1194
|
details: {
|
|
1169
1195
|
queries: opts.queryList,
|
|
1170
1196
|
queryCount: opts.queryList.length,
|
|
@@ -1174,6 +1200,14 @@ Content fetching in background [${fetchId}]. Will notify when ready.`;
|
|
|
1174
1200
|
fetchId,
|
|
1175
1201
|
fetchUrls: isBackgroundFetch ? opts.urls : undefined,
|
|
1176
1202
|
searchId,
|
|
1203
|
+
queryProviders: opts.results.map((result) => ({
|
|
1204
|
+
query: result.query,
|
|
1205
|
+
providers: result.providers ?? (result.provider ? [result.provider] : [])
|
|
1206
|
+
})),
|
|
1207
|
+
truncated: presentation.truncated,
|
|
1208
|
+
originalChars: presentation.originalChars,
|
|
1209
|
+
returnedChars: presentation.returnedChars,
|
|
1210
|
+
omittedChars: presentation.omittedChars,
|
|
1177
1211
|
...opts.curated ? {
|
|
1178
1212
|
curated: true,
|
|
1179
1213
|
curatedFrom: opts.curatedFrom,
|
|
@@ -1216,8 +1250,11 @@ Content fetching in background [${fetchId}]. Will notify when ready.`;
|
|
|
1216
1250
|
}
|
|
1217
1251
|
return { results: filteredResults, urls: filteredUrls };
|
|
1218
1252
|
}
|
|
1253
|
+
function orderedSearchResults(resultsByIndex) {
|
|
1254
|
+
return [...resultsByIndex.entries()].sort(([leftIndex], [rightIndex]) => leftIndex - rightIndex).map(([, result]) => result);
|
|
1255
|
+
}
|
|
1219
1256
|
function collectAllResultsAndUrls(resultsByIndex) {
|
|
1220
|
-
const results =
|
|
1257
|
+
const results = orderedSearchResults(resultsByIndex);
|
|
1221
1258
|
const urls = [];
|
|
1222
1259
|
for (const result of results) {
|
|
1223
1260
|
for (const source of result.results) {
|
|
@@ -1254,6 +1291,7 @@ Open manually: ${handle.url}` }],
|
|
|
1254
1291
|
const sessionToken = randomUUID();
|
|
1255
1292
|
handle = await startCuratorServer({
|
|
1256
1293
|
queries: pc.queryList,
|
|
1294
|
+
initialResultIndexCapacity: curatorResultIndexCapacity(pc.queryList.length),
|
|
1257
1295
|
sessionToken,
|
|
1258
1296
|
timeout: pc.timeoutSeconds,
|
|
1259
1297
|
availableProviders: pc.availableProviders,
|
|
@@ -1283,6 +1321,8 @@ Open manually: ${handle.url}` }],
|
|
|
1283
1321
|
onSubmit(payload) {
|
|
1284
1322
|
if (pendingCurates.get(callId) !== pc)
|
|
1285
1323
|
return;
|
|
1324
|
+
if (payload.autoApproveRemainingSearches)
|
|
1325
|
+
curatorRunState.approveRemainingSearches();
|
|
1286
1326
|
searchAbort.abort();
|
|
1287
1327
|
const filtered = payload.selectedQueryIndices.length > 0 ? filterByQueryIndices(payload.selectedQueryIndices, pc.searchResults) : collectAllResultsAndUrls(pc.searchResults);
|
|
1288
1328
|
const filteredInline = pc.allInlineContent.filter((c) => filtered.urls.includes(c.url));
|
|
@@ -1329,7 +1369,7 @@ Open manually: ${handle.url}` }],
|
|
|
1329
1369
|
} else {
|
|
1330
1370
|
const conn = activeCurators.get(callId)?.getConnectionState();
|
|
1331
1371
|
pc.finish(buildCurationCancelledReturn(reason, {
|
|
1332
|
-
queries:
|
|
1372
|
+
queries: orderedSearchResults(pc.searchResults),
|
|
1333
1373
|
queryCount: pc.queryList.length,
|
|
1334
1374
|
browserConnected: conn?.browserConnected,
|
|
1335
1375
|
lastHeartbeatAgeMs: conn?.lastHeartbeatAgeMs,
|
|
@@ -1501,21 +1541,21 @@ Open manually: ${handle.url}` }],
|
|
|
1501
1541
|
pi.registerTool({
|
|
1502
1542
|
name: toolNames.webSearch,
|
|
1503
1543
|
label: "Web Search",
|
|
1504
|
-
description: `Search the web
|
|
1544
|
+
description: `Search the web with ${allowedSearchProviders.map(providerLabel).join(", ")}. Provider arrays run simultaneously; ${allPolicyDescription}. The default workflow is none: it returns bounded source-linked search results or provider answers without a curator or generated summary, identifies the providers used, and stores full results for retrieval by responseId. For comprehensive research, prefer queries (plural) with 2-4 varied angles over a single query. When includeContent is true, full page content is fetched in the background. Set workflow to "summary-review" to open the curator with an auto-generated summary draft or "auto-summary" to generate a summary without the browser curator. The configured provider is used when provider is omitted or set to auto; omit provider unless explicitly overriding it.`,
|
|
1505
1545
|
promptSnippet: "Use for web research questions. Prefer {queries:[...]} with 2-4 varied angles over a single query for broader coverage. Omit provider unless explicitly overriding the configured default.",
|
|
1506
1546
|
parameters: Type.Object({
|
|
1507
1547
|
query: Type.Optional(Type.String({ description: "Single search query. For research tasks, prefer 'queries' with multiple varied angles instead." })),
|
|
1508
|
-
queries: Type.Optional(Type.Array(Type.String(), { description: "Multiple queries searched
|
|
1548
|
+
queries: Type.Optional(Type.Array(Type.String(), { description: "Multiple queries searched concurrently (up to three at a time), each returning source-linked search results or a provider answer. Prefer this for research — vary phrasing, scope, and angle across 2-4 queries to maximize coverage. Good: ['React vs Vue performance benchmarks 2026', 'React vs Vue developer experience comparison', 'React ecosystem size vs Vue ecosystem']. Bad: ['React vs Vue', 'React vs Vue comparison', 'React vs Vue review'] (too similar, redundant results)." })),
|
|
1509
1549
|
numResults: Type.Optional(Type.Integer({ minimum: 1, maximum: 20, description: "Results per query (default: 5, max: 20)" })),
|
|
1510
1550
|
includeContent: Type.Optional(Type.Boolean({ description: "Fetch full page content (async)" })),
|
|
1511
1551
|
recencyFilter: Type.Optional(StringEnum(["day", "week", "month", "year"], { description: "Filter by recency" })),
|
|
1512
1552
|
domainFilter: Type.Optional(Type.Array(Type.String(), { description: "Limit to domains (prefix with - to exclude)" })),
|
|
1513
|
-
provider: Type.Optional(searchProviderSchema(
|
|
1553
|
+
provider: Type.Optional(searchProviderSchema(`Search provider or non-empty list of allowed providers to search simultaneously; ${allPolicyDescription}; omit this field to use the configured provider, or use auto when none is configured`, allowedSearchProviders)),
|
|
1514
1554
|
workflow: Type.Optional(StringEnum(["none", "summary-review", "auto-summary"], {
|
|
1515
|
-
description: "Search workflow mode: none = no curator, summary-review = open curator with auto summary draft
|
|
1555
|
+
description: "Search workflow mode: none = no curator (default), summary-review = open curator with auto summary draft, auto-summary = generate summary without opening curator"
|
|
1516
1556
|
})),
|
|
1517
1557
|
proxy: Type.Optional(Type.String({
|
|
1518
|
-
description: "http(s) proxy URL (e.g. http://host:port) used for every outbound request in this call (search APIs and content fetches). Node fetch ignores HTTP(S)_PROXY env vars, so set this (or `proxy` in web-search.json) when direct access is blocked; empty string forces direct access."
|
|
1558
|
+
description: "http(s) or socks proxy URL (e.g. http://host:port or socks5h://host:port) used for every outbound request in this call (search APIs and content fetches). Node fetch ignores HTTP(S)_PROXY env vars, so set this (or `proxy` in web-search.json) when direct access is blocked; empty string forces direct access."
|
|
1519
1559
|
}))
|
|
1520
1560
|
}),
|
|
1521
1561
|
async execute(callId, params, signal, onUpdate, ctx) {
|
|
@@ -1523,7 +1563,7 @@ Open manually: ${handle.url}` }],
|
|
|
1523
1563
|
const rawQueryList = Array.isArray(params.queries) ? params.queries : params.query !== undefined ? expandQueryString(params.query) : [];
|
|
1524
1564
|
const queryList = normalizeQueryList(rawQueryList);
|
|
1525
1565
|
const configWorkflow = loadConfigForExtensionInit().workflow;
|
|
1526
|
-
const workflow =
|
|
1566
|
+
const workflow = curatorRunState.resolve(params.workflow, configWorkflow, ctx?.hasUI !== false);
|
|
1527
1567
|
const shouldCurate = workflow === "summary-review";
|
|
1528
1568
|
const recencyFilter = normalizeRecencyFilter(params.recencyFilter);
|
|
1529
1569
|
if (queryList.length === 0) {
|
|
@@ -1548,7 +1588,6 @@ Open manually: ${handle.url}` }],
|
|
|
1548
1588
|
const searchResults = new Map;
|
|
1549
1589
|
const resultSlots = new Map;
|
|
1550
1590
|
const allInlineContent = [];
|
|
1551
|
-
let nextResultIndex = queryList.length;
|
|
1552
1591
|
const searchAbort = new AbortController;
|
|
1553
1592
|
const searchSignal = signal ? AbortSignal.any([signal, searchAbort.signal]) : searchAbort.signal;
|
|
1554
1593
|
let cancelled = false;
|
|
@@ -1565,6 +1604,7 @@ Open manually: ${handle.url}` }],
|
|
|
1565
1604
|
const summaryContext = {
|
|
1566
1605
|
model: ctx.model,
|
|
1567
1606
|
modelRegistry: ctx.modelRegistry,
|
|
1607
|
+
sessionManager: ctx.sessionManager,
|
|
1568
1608
|
cwd: ctx.cwd,
|
|
1569
1609
|
isProjectTrusted: () => ctx.isProjectTrusted()
|
|
1570
1610
|
};
|
|
@@ -1611,7 +1651,7 @@ Open manually: ${handle.url}` }],
|
|
|
1611
1651
|
return;
|
|
1612
1652
|
const conn = activeCurators.get(callId)?.getConnectionState();
|
|
1613
1653
|
finish(buildCurationCancelledReturn(reason, {
|
|
1614
|
-
queries:
|
|
1654
|
+
queries: orderedSearchResults(searchResults),
|
|
1615
1655
|
queryCount: queryList.length,
|
|
1616
1656
|
browserConnected: conn?.browserConnected,
|
|
1617
1657
|
lastHeartbeatAgeMs: conn?.lastHeartbeatAgeMs,
|
|
@@ -1625,16 +1665,17 @@ Open manually: ${handle.url}` }],
|
|
|
1625
1665
|
pendingCurates.set(callId, pc);
|
|
1626
1666
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
1627
1667
|
pc.browserPromise = openCuratorBrowser(callId, pc, ctx, false);
|
|
1628
|
-
|
|
1668
|
+
let completedSearches = 0;
|
|
1669
|
+
await runSearchQueries(queryList, async (query, qi) => {
|
|
1629
1670
|
if (signal?.aborted || cancelled || searchAbort.signal.aborted)
|
|
1630
|
-
|
|
1671
|
+
return;
|
|
1631
1672
|
onUpdate?.({
|
|
1632
|
-
content: [{ type: "text", text: `Searching ${
|
|
1633
|
-
details: { phase: "searching", progress:
|
|
1673
|
+
content: [{ type: "text", text: `Searching "${query}" (${completedSearches}/${queryList.length} complete)...` }],
|
|
1674
|
+
details: { phase: "searching", progress: completedSearches / queryList.length, currentQuery: query }
|
|
1634
1675
|
});
|
|
1635
1676
|
const requestedProvider = pc.searchProvider;
|
|
1636
1677
|
try {
|
|
1637
|
-
const response = await search(
|
|
1678
|
+
const response = await search(query, {
|
|
1638
1679
|
provider: requestedProvider,
|
|
1639
1680
|
numResults: params.numResults,
|
|
1640
1681
|
recencyFilter,
|
|
@@ -1644,42 +1685,50 @@ Open manually: ${handle.url}` }],
|
|
|
1644
1685
|
extensionContext: ctx
|
|
1645
1686
|
});
|
|
1646
1687
|
if (signal?.aborted || cancelled || searchAbort.signal.aborted)
|
|
1647
|
-
|
|
1688
|
+
return;
|
|
1648
1689
|
if (response.inlineContent)
|
|
1649
1690
|
allInlineContent.push(...response.inlineContent);
|
|
1650
1691
|
const entries = toCuratorSearchEntries(response);
|
|
1651
1692
|
const curator = activeCurators.get(callId);
|
|
1652
1693
|
for (let entryIndex = 0;entryIndex < entries.length; entryIndex++) {
|
|
1653
1694
|
const entry = entries[entryIndex];
|
|
1654
|
-
const resultIndex =
|
|
1695
|
+
const resultIndex = curatorResultIndex(qi, entryIndex, queryList.length);
|
|
1655
1696
|
const indexedEntry = {
|
|
1656
1697
|
...entry,
|
|
1657
1698
|
queryIndex: resultIndex,
|
|
1658
|
-
query
|
|
1699
|
+
query
|
|
1659
1700
|
};
|
|
1660
1701
|
searchResults.set(resultIndex, indexedCuratorEntryToQueryResult(indexedEntry));
|
|
1661
1702
|
resultSlots.set(resultIndex, qi);
|
|
1662
1703
|
if (curator) {
|
|
1663
1704
|
if (entry.error) {
|
|
1664
|
-
curator.pushError(resultIndex, entry.error, entry.provider, { query
|
|
1705
|
+
curator.pushError(resultIndex, entry.error, entry.provider, { query, slotIndex: qi });
|
|
1665
1706
|
} else {
|
|
1666
|
-
curator.pushResult(resultIndex, { ...entry, query
|
|
1707
|
+
curator.pushResult(resultIndex, { ...entry, query, slotIndex: qi });
|
|
1667
1708
|
}
|
|
1668
1709
|
}
|
|
1669
1710
|
}
|
|
1670
1711
|
} catch (err) {
|
|
1671
1712
|
if (signal?.aborted || cancelled || searchAbort.signal.aborted)
|
|
1672
|
-
|
|
1713
|
+
return;
|
|
1673
1714
|
const message = err instanceof Error ? err.message : String(err);
|
|
1674
1715
|
const failedProvider = toCuratorProvider(requestedProvider);
|
|
1675
|
-
searchResults.set(qi, { query
|
|
1716
|
+
searchResults.set(qi, { query, answer: "", results: [], error: message, provider: failedProvider });
|
|
1676
1717
|
resultSlots.set(qi, qi);
|
|
1677
1718
|
const curator = activeCurators.get(callId);
|
|
1678
1719
|
if (curator) {
|
|
1679
|
-
curator.pushError(qi, message, failedProvider, { query
|
|
1720
|
+
curator.pushError(qi, message, failedProvider, { query, slotIndex: qi });
|
|
1721
|
+
}
|
|
1722
|
+
} finally {
|
|
1723
|
+
completedSearches++;
|
|
1724
|
+
if (!signal?.aborted && !cancelled && !searchAbort.signal.aborted) {
|
|
1725
|
+
onUpdate?.({
|
|
1726
|
+
content: [{ type: "text", text: `Completed ${completedSearches}/${queryList.length} searches.` }],
|
|
1727
|
+
details: { phase: "searching", progress: completedSearches / queryList.length, currentQuery: query }
|
|
1728
|
+
});
|
|
1680
1729
|
}
|
|
1681
1730
|
}
|
|
1682
|
-
}
|
|
1731
|
+
});
|
|
1683
1732
|
if (signal?.aborted || cancelled || searchAbort.signal.aborted) {
|
|
1684
1733
|
cancel();
|
|
1685
1734
|
return promise;
|
|
@@ -1715,18 +1764,18 @@ Open manually: ${handle.url}` }],
|
|
|
1715
1764
|
}
|
|
1716
1765
|
return promise;
|
|
1717
1766
|
}
|
|
1718
|
-
|
|
1767
|
+
let completedSearches = 0;
|
|
1719
1768
|
const allUrls = [];
|
|
1720
1769
|
const allInlineContent = [];
|
|
1721
1770
|
const resolvedProvider = resolveRequestedProvider(params.provider);
|
|
1722
|
-
|
|
1723
|
-
|
|
1771
|
+
const queryResponses = await runSearchQueries(queryList, async (query) => {
|
|
1772
|
+
signal?.throwIfAborted();
|
|
1724
1773
|
onUpdate?.({
|
|
1725
|
-
content: [{ type: "text", text: `Searching ${
|
|
1726
|
-
details: { phase: "search", progress:
|
|
1774
|
+
content: [{ type: "text", text: `Searching "${query}" (${completedSearches}/${queryList.length} complete)...` }],
|
|
1775
|
+
details: { phase: "search", progress: completedSearches / queryList.length, currentQuery: query }
|
|
1727
1776
|
});
|
|
1728
1777
|
try {
|
|
1729
|
-
const { answer, results, inlineContent, provider } = await search(query, {
|
|
1778
|
+
const { answer, results, inlineContent, provider, providerResponses } = await search(query, {
|
|
1730
1779
|
provider: resolvedProvider,
|
|
1731
1780
|
numResults: params.numResults,
|
|
1732
1781
|
recencyFilter,
|
|
@@ -1735,21 +1784,35 @@ Open manually: ${handle.url}` }],
|
|
|
1735
1784
|
signal,
|
|
1736
1785
|
extensionContext: ctx
|
|
1737
1786
|
});
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
if (!allUrls.includes(r.url)) {
|
|
1741
|
-
allUrls.push(r.url);
|
|
1742
|
-
}
|
|
1743
|
-
}
|
|
1744
|
-
if (inlineContent)
|
|
1745
|
-
allInlineContent.push(...inlineContent);
|
|
1787
|
+
const providers = providerResponses?.map((response) => response.provider) ?? [provider];
|
|
1788
|
+
return { result: { query, answer, results, error: null, provider, providers }, inlineContent };
|
|
1746
1789
|
} catch (err) {
|
|
1747
1790
|
if (signal?.aborted || isAbortError(err))
|
|
1748
1791
|
throw err;
|
|
1749
1792
|
const message = err instanceof Error ? err.message : String(err);
|
|
1750
1793
|
const requestedProvider = toCuratorProvider(resolvedProvider);
|
|
1751
|
-
|
|
1794
|
+
return {
|
|
1795
|
+
result: { query, answer: "", results: [], error: message, provider: requestedProvider },
|
|
1796
|
+
inlineContent: undefined
|
|
1797
|
+
};
|
|
1798
|
+
} finally {
|
|
1799
|
+
completedSearches++;
|
|
1800
|
+
if (!signal?.aborted) {
|
|
1801
|
+
onUpdate?.({
|
|
1802
|
+
content: [{ type: "text", text: `Completed ${completedSearches}/${queryList.length} searches.` }],
|
|
1803
|
+
details: { phase: "search", progress: completedSearches / queryList.length, currentQuery: query }
|
|
1804
|
+
});
|
|
1805
|
+
}
|
|
1752
1806
|
}
|
|
1807
|
+
});
|
|
1808
|
+
const searchResults = queryResponses.map((response) => response.result);
|
|
1809
|
+
for (const response of queryResponses) {
|
|
1810
|
+
for (const result of response.result.results) {
|
|
1811
|
+
if (!allUrls.includes(result.url))
|
|
1812
|
+
allUrls.push(result.url);
|
|
1813
|
+
}
|
|
1814
|
+
if (response.inlineContent)
|
|
1815
|
+
allInlineContent.push(...response.inlineContent);
|
|
1753
1816
|
}
|
|
1754
1817
|
let approvedSummary;
|
|
1755
1818
|
let summaryMeta;
|
|
@@ -1767,6 +1830,7 @@ Open manually: ${handle.url}` }],
|
|
|
1767
1830
|
const summaryContext = {
|
|
1768
1831
|
model: ctx.model,
|
|
1769
1832
|
modelRegistry: ctx.modelRegistry,
|
|
1833
|
+
sessionManager: ctx.sessionManager,
|
|
1770
1834
|
cwd: ctx.cwd,
|
|
1771
1835
|
isProjectTrusted: () => ctx.isProjectTrusted()
|
|
1772
1836
|
};
|
|
@@ -1996,18 +2060,18 @@ Open manually: ${handle.url}` }],
|
|
|
1996
2060
|
pi.registerTool({
|
|
1997
2061
|
name: toolNames.sourceCheck,
|
|
1998
2062
|
label: "Source Check",
|
|
1999
|
-
description: "
|
|
2000
|
-
promptSnippet: "
|
|
2063
|
+
description: "Gather web sources for a claim and return a bounded machine-readable research artifact with exact passage citations for manual review.",
|
|
2064
|
+
promptSnippet: "Gather structured source evidence and passage-level citations for manual semantic review of a claim.",
|
|
2001
2065
|
parameters: Type.Object({
|
|
2002
|
-
claim: Type.String({ description: "The assertion to
|
|
2066
|
+
claim: Type.String({ description: "The assertion to gather web sources for." }),
|
|
2003
2067
|
queries: Type.Optional(Type.Array(Type.String(), { description: "Search queries (default: the claim)." })),
|
|
2004
2068
|
numResults: Type.Optional(Type.Integer({ minimum: 1, maximum: 20, description: "Results per query (default: 5, max: 20)." })),
|
|
2005
2069
|
fetchContent: Type.Optional(Type.Boolean({ description: "Fetch up to 5 result pages for exact passage extraction." })),
|
|
2006
2070
|
recencyFilter: Type.Optional(StringEnum(["day", "week", "month", "year"], { description: "Filter by recency." })),
|
|
2007
2071
|
domainFilter: Type.Optional(Type.Array(Type.String(), { description: "Limit to domains; prefix with - to exclude." })),
|
|
2008
|
-
provider: Type.Optional(searchProviderSchema(
|
|
2072
|
+
provider: Type.Optional(searchProviderSchema(`Search provider or non-empty list of allowed providers to search simultaneously; ${allPolicyDescription}`, allowedSearchProviders)),
|
|
2009
2073
|
proxy: Type.Optional(Type.String({
|
|
2010
|
-
description: "http(s) proxy URL (e.g. http://host:port) used for every outbound request in this call (search APIs and result-page fetches). Empty string forces direct access."
|
|
2074
|
+
description: "http(s) or socks proxy URL (e.g. http://host:port or socks5h://host:port) used for every outbound request in this call (search APIs and result-page fetches). Empty string forces direct access."
|
|
2011
2075
|
}))
|
|
2012
2076
|
}),
|
|
2013
2077
|
async execute(_callId, params, signal, _onUpdate, ctx) {
|
|
@@ -2095,8 +2159,8 @@ Open manually: ${handle.url}` }],
|
|
|
2095
2159
|
pi.registerTool({
|
|
2096
2160
|
name: toolNames.fetchContent,
|
|
2097
2161
|
label: "Fetch Content",
|
|
2098
|
-
description: `Fetch URL(s)
|
|
2099
|
-
promptSnippet: "Use to fetch
|
|
2162
|
+
description: `Fetch URL(s). Available modes: ${fetchModeDescription}. Direct image URLs return resized image content when supported by the selected mode. Supports YouTube transcripts, GitHub repositories, PDFs, and local videos when supported by the selected mode. ${fetchContentStorageNote}`,
|
|
2163
|
+
promptSnippet: "Use to fetch URL content, direct images, GitHub repos, and videos.",
|
|
2100
2164
|
parameters: Type.Object({
|
|
2101
2165
|
url: Type.Optional(Type.String({ description: "Single URL to fetch" })),
|
|
2102
2166
|
urls: Type.Optional(Type.Array(Type.String(), { description: "Multiple URLs (parallel)" })),
|
|
@@ -2104,14 +2168,16 @@ Open manually: ${handle.url}` }],
|
|
|
2104
2168
|
description: "Force cloning large GitHub repositories that exceed the size threshold"
|
|
2105
2169
|
})),
|
|
2106
2170
|
prompt: Type.Optional(Type.String({
|
|
2107
|
-
description: "Question or instruction for video analysis, or the page-local question required by mode
|
|
2108
|
-
})),
|
|
2109
|
-
mode: Type.Optional(StringEnum(["readable", "raw", "answer"], {
|
|
2110
|
-
description: "Fetch mode: readable (default extraction), raw (exact textual HTTP body), or answer (answer prompt using only fetched content)."
|
|
2171
|
+
description: fetchModeConfig.allowedModes.includes("answer") ? "Question or instruction for video analysis, or the page-local question required by answer mode." : "Question or instruction for video analysis."
|
|
2111
2172
|
})),
|
|
2112
|
-
|
|
2113
|
-
description:
|
|
2173
|
+
mode: Type.Optional(StringEnum(fetchModeConfig.allowedModes, {
|
|
2174
|
+
description: `Fetch mode. ${fetchModeDescription}.`
|
|
2114
2175
|
})),
|
|
2176
|
+
...fetchModeConfig.allowedModes.includes("answer") ? {
|
|
2177
|
+
answerModel: Type.Optional(Type.String({
|
|
2178
|
+
description: "Optional provider/model-id override for answer mode. Defaults to fetch.answerProvider + fetch.answerModel when configured, otherwise the current DM model."
|
|
2179
|
+
}))
|
|
2180
|
+
} : {},
|
|
2115
2181
|
timestamp: Type.Optional(Type.String({
|
|
2116
2182
|
description: "Extract video frame(s) at a timestamp or time range. Single: '1:23:45', '23:45', or '85' (seconds). Range: '23:41-25:00' extracts evenly-spaced frames across that span (default 6). Use frames with ranges to control density; single+frames uses a fixed 5s interval. YouTube requires yt-dlp + ffmpeg; local videos require ffmpeg. Use a range when you know the approximate area but not the exact moment — you'll get a contact sheet to visually identify the right frame."
|
|
2117
2183
|
})),
|
|
@@ -2127,7 +2193,7 @@ Open manually: ${handle.url}` }],
|
|
|
2127
2193
|
description: "Opt into an authFetch profile for local browser-cookie fetching. Use a profile name, or true only when exactly one profile exists."
|
|
2128
2194
|
})),
|
|
2129
2195
|
proxy: Type.Optional(Type.String({
|
|
2130
|
-
description: "http(s) proxy URL (e.g. http://host:port) used for this fetch. Needed when the target is unreachable directly; localhost and NO_PROXY hosts always bypass the proxy. Empty string forces direct access."
|
|
2196
|
+
description: "http(s) or socks proxy URL (e.g. http://host:port or socks5h://host:port) used for this fetch. Needed when the target is unreachable directly; localhost and NO_PROXY hosts always bypass the proxy. Empty string forces direct access."
|
|
2131
2197
|
}))
|
|
2132
2198
|
}),
|
|
2133
2199
|
async execute(_toolCallId, params, signal, onUpdate, ctx) {
|
|
@@ -2139,8 +2205,12 @@ Open manually: ${handle.url}` }],
|
|
|
2139
2205
|
return { content: [{ type: "text", text: `Error: ${error}` }], details: { error } };
|
|
2140
2206
|
}
|
|
2141
2207
|
const { urlList, options } = normalized;
|
|
2208
|
+
const mode = options.mode ?? fetchModeConfig.defaultMode;
|
|
2209
|
+
if (!fetchModeConfig.allowedModes.includes(mode)) {
|
|
2210
|
+
const error = `Fetch mode "${mode}" is disabled by fetch.allowedModes.`;
|
|
2211
|
+
return { content: [{ type: "text", text: `Error: ${error}` }], details: { error } };
|
|
2212
|
+
}
|
|
2142
2213
|
return runWithProxy(options.proxy, async () => {
|
|
2143
|
-
const mode = options.mode ?? "readable";
|
|
2144
2214
|
if (mode === "answer" && !options.prompt) {
|
|
2145
2215
|
return { content: [{ type: "text", text: "Error: mode answer requires prompt." }], details: { error: "mode answer requires prompt" } };
|
|
2146
2216
|
}
|
|
@@ -2175,11 +2245,12 @@ Open manually: ${handle.url}` }],
|
|
|
2175
2245
|
content: [{ type: "text", text: `Fetching ${urlList.length} URL(s)...` }],
|
|
2176
2246
|
details: { phase: "fetch", progress: 0 }
|
|
2177
2247
|
});
|
|
2178
|
-
const { answerModel: _answerModel, auth: _auth, ...extractionOptions } = options;
|
|
2179
|
-
const
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2248
|
+
const { answerModel: _answerModel, auth: _auth, ...extractionOptions } = { ...options, mode };
|
|
2249
|
+
const { prompt: _prompt, ...answerExtractionOptions } = extractionOptions;
|
|
2250
|
+
const fetchOptions = {
|
|
2251
|
+
...mode === "answer" ? answerExtractionOptions : extractionOptions,
|
|
2252
|
+
...authFetchProfile ? { authFetchProfile } : {}
|
|
2253
|
+
};
|
|
2183
2254
|
const fetchResults = await fetchAllContent(urlList, signal, withRegisteredFetchOptions(fetchOptions, registeredToolNames, options.proxy));
|
|
2184
2255
|
const presentedResults = mode === "answer" ? await Promise.all(fetchResults.map(async (result) => {
|
|
2185
2256
|
if (result.error)
|
|
@@ -2291,7 +2362,13 @@ Authenticated fetch cache is off; repeat the fetch to read content.`;
|
|
|
2291
2362
|
});
|
|
2292
2363
|
},
|
|
2293
2364
|
renderCall(args, theme) {
|
|
2294
|
-
|
|
2365
|
+
let normalized;
|
|
2366
|
+
try {
|
|
2367
|
+
normalized = normalizeFetchContentParams(args);
|
|
2368
|
+
} catch {
|
|
2369
|
+
return new Text(theme.fg("toolTitle", theme.bold("fetch ")) + theme.fg("error", "(invalid parameters)"), 0, 0);
|
|
2370
|
+
}
|
|
2371
|
+
const { urlList, options } = normalized;
|
|
2295
2372
|
const { prompt, timestamp, frames, model, mode, answerModel, auth } = options;
|
|
2296
2373
|
if (urlList.length === 0) {
|
|
2297
2374
|
return new Text(theme.fg("toolTitle", theme.bold("fetch ")) + theme.fg("error", "(no URL)"), 0, 0);
|
|
@@ -2410,7 +2487,7 @@ Authenticated fetch cache is off; repeat the fetch to read content.`;
|
|
|
2410
2487
|
pi.registerTool({
|
|
2411
2488
|
name: toolNames.getSearchContent,
|
|
2412
2489
|
label: "Get Search Content",
|
|
2413
|
-
description: `Retrieve bounded
|
|
2490
|
+
description: `Retrieve bounded pages of full stored search results or fetched content, or find matching passages, from a previous ${storedContentSources} call.`,
|
|
2414
2491
|
promptSnippet: `Use after ${storedContentSources} to retrieve stored content via responseId. Use findText to locate passages without paging through the full content.`,
|
|
2415
2492
|
parameters: Type.Object({
|
|
2416
2493
|
responseId: Type.String({ description: `The responseId from ${storedContentSources}` }),
|
|
@@ -2418,8 +2495,8 @@ Authenticated fetch cache is off; repeat the fetch to read content.`;
|
|
|
2418
2495
|
queryIndex: Type.Optional(Type.Integer({ minimum: 0, description: "Get content for query at index" })),
|
|
2419
2496
|
url: Type.Optional(Type.String({ description: "Get content for this URL" })),
|
|
2420
2497
|
urlIndex: Type.Optional(Type.Integer({ minimum: 0, description: "Get content for URL at index" })),
|
|
2421
|
-
offset: Type.Optional(Type.Integer({ minimum: 0, description: "Character offset
|
|
2422
|
-
limit: Type.Optional(Type.Integer({ minimum: 1, maximum: maxInlineContentChars, description: "
|
|
2498
|
+
offset: Type.Optional(Type.Integer({ minimum: 0, description: "Character offset in stored search or fetched URL content (default 0). Ignored when findText is supplied." })),
|
|
2499
|
+
limit: Type.Optional(Type.Integer({ minimum: 1, maximum: maxInlineContentChars, description: "Requested maximum stored-content characters (default and max use maxInlineContentChars). Search-page continuation guidance shares the global output cap and may reduce returnedChars. Ignored when findText is supplied." })),
|
|
2423
2500
|
findText: Type.Optional(Type.Union([
|
|
2424
2501
|
Type.String({ minLength: 1, maxLength: 500 }),
|
|
2425
2502
|
Type.Array(Type.String({ minLength: 1, maxLength: 500 }), { minItems: 1, maxItems: 10 })
|
|
@@ -2534,7 +2611,7 @@ Authenticated fetch cache is off; repeat the fetch to read content.`;
|
|
|
2534
2611
|
const { text, ...findDetails } = found;
|
|
2535
2612
|
return {
|
|
2536
2613
|
content: [{ type: "text", text }],
|
|
2537
|
-
details: { query: queryData.query, resultCount: queryData.results.length, findMode: params.findMode ?? "case-insensitive", ...findDetails }
|
|
2614
|
+
details: { responseId: params.responseId, query: queryData.query, resultCount: queryData.results.length, contentLength: fullResults.length, findMode: params.findMode ?? "case-insensitive", ...findDetails }
|
|
2538
2615
|
};
|
|
2539
2616
|
} catch (err) {
|
|
2540
2617
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -2544,9 +2621,57 @@ Authenticated fetch cache is off; repeat the fetch to read content.`;
|
|
|
2544
2621
|
};
|
|
2545
2622
|
}
|
|
2546
2623
|
}
|
|
2624
|
+
const offset = params.offset ?? 0;
|
|
2625
|
+
const limit = params.limit ?? maxInlineContentChars;
|
|
2626
|
+
if (!Number.isInteger(offset) || offset < 0) {
|
|
2627
|
+
return {
|
|
2628
|
+
content: [{ type: "text", text: `Invalid offset: received ${formatInputValue(offset)} for query ${formatInputValue(queryData.query)}; offset must be a non-negative integer. Use 0 or a larger integer.` }],
|
|
2629
|
+
details: { error: "Invalid offset", offset }
|
|
2630
|
+
};
|
|
2631
|
+
}
|
|
2632
|
+
if (!Number.isInteger(limit) || limit <= 0 || limit > maxInlineContentChars) {
|
|
2633
|
+
return {
|
|
2634
|
+
content: [{ type: "text", text: `Invalid limit: received ${formatInputValue(limit)} for query ${formatInputValue(queryData.query)}; limit must be an integer from 1 to ${maxInlineContentChars}. Use a value in that range.` }],
|
|
2635
|
+
details: { error: "Invalid limit", limit, maxLimit: maxInlineContentChars }
|
|
2636
|
+
};
|
|
2637
|
+
}
|
|
2638
|
+
if (offset > fullResults.length) {
|
|
2639
|
+
return {
|
|
2640
|
+
content: [{ type: "text", text: `Offset ${offset} is out of range for query ${formatInputValue(queryData.query)} in responseId ${formatInputValue(params.responseId)}. Received offset ${offset}; valid range is 0-${fullResults.length}. Use an offset within that range.` }],
|
|
2641
|
+
details: { error: "Offset out of range", offset, contentLength: fullResults.length }
|
|
2642
|
+
};
|
|
2643
|
+
}
|
|
2644
|
+
const queryIndex = data.queries.indexOf(queryData);
|
|
2645
|
+
let returnedChars = Math.min(limit, fullResults.length - offset);
|
|
2646
|
+
let endOffset = offset + returnedChars;
|
|
2647
|
+
let continuation = "";
|
|
2648
|
+
while (endOffset < fullResults.length) {
|
|
2649
|
+
continuation = `
|
|
2650
|
+
|
|
2651
|
+
---
|
|
2652
|
+
Showing chars ${offset}-${endOffset} of ${fullResults.length}. Use ${toolNames.getSearchContent}({ responseId: "${params.responseId}", queryIndex: ${queryIndex}, offset: ${endOffset}, limit: ${limit} }) for the next slice.`;
|
|
2653
|
+
const overflow = returnedChars + continuation.length - maxInlineContentChars;
|
|
2654
|
+
if (overflow <= 0)
|
|
2655
|
+
break;
|
|
2656
|
+
returnedChars -= overflow;
|
|
2657
|
+
endOffset = offset + returnedChars;
|
|
2658
|
+
}
|
|
2659
|
+
const resultSlice = fullResults.slice(offset, endOffset);
|
|
2660
|
+
const hasMore = endOffset < fullResults.length;
|
|
2661
|
+
const text = `${resultSlice}${hasMore ? continuation : ""}`;
|
|
2547
2662
|
return {
|
|
2548
|
-
content: [{ type: "text", text
|
|
2549
|
-
details: {
|
|
2663
|
+
content: [{ type: "text", text }],
|
|
2664
|
+
details: {
|
|
2665
|
+
responseId: params.responseId,
|
|
2666
|
+
query: queryData.query,
|
|
2667
|
+
resultCount: queryData.results.length,
|
|
2668
|
+
contentLength: fullResults.length,
|
|
2669
|
+
offset,
|
|
2670
|
+
limit,
|
|
2671
|
+
returnedChars,
|
|
2672
|
+
nextOffset: hasMore ? endOffset : null,
|
|
2673
|
+
truncated: hasMore
|
|
2674
|
+
}
|
|
2550
2675
|
};
|
|
2551
2676
|
}
|
|
2552
2677
|
if (data.type === "fetch" && data.urls) {
|
|
@@ -2721,6 +2846,13 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2721
2846
|
}
|
|
2722
2847
|
});
|
|
2723
2848
|
}
|
|
2849
|
+
const activationTools = [
|
|
2850
|
+
...webSearchEnabled ? [{ name: toolNames.webSearch, capability: "search" }] : [],
|
|
2851
|
+
...sourceCheckEnabled ? [{ name: toolNames.sourceCheck, capability: "source-check" }] : [],
|
|
2852
|
+
...fetchContentEnabled ? [{ name: toolNames.fetchContent, capability: "fetch" }] : [],
|
|
2853
|
+
...getSearchContentEnabled ? [{ name: toolNames.getSearchContent, capability: "stored-content" }] : []
|
|
2854
|
+
];
|
|
2855
|
+
registerWebToolActivation(pi, activationTools);
|
|
2724
2856
|
if (isCommandEnabled(initConfig, "websearch"))
|
|
2725
2857
|
pi.registerCommand("websearch", {
|
|
2726
2858
|
description: "Open web search curator",
|
|
@@ -2748,6 +2880,7 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2748
2880
|
const summaryContext = {
|
|
2749
2881
|
model: ctx.model,
|
|
2750
2882
|
modelRegistry: ctx.modelRegistry,
|
|
2883
|
+
sessionManager: ctx.sessionManager,
|
|
2751
2884
|
cwd: ctx.cwd,
|
|
2752
2885
|
isProjectTrusted: () => ctx.isProjectTrusted()
|
|
2753
2886
|
};
|
|
@@ -2769,6 +2902,7 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2769
2902
|
try {
|
|
2770
2903
|
const handle = await startCuratorServer({
|
|
2771
2904
|
queries,
|
|
2905
|
+
initialResultIndexCapacity: curatorResultIndexCapacity(queries.length),
|
|
2772
2906
|
sessionToken,
|
|
2773
2907
|
timeout: curatorTimeoutSeconds,
|
|
2774
2908
|
availableProviders,
|
|
@@ -2844,19 +2978,21 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2844
2978
|
}
|
|
2845
2979
|
},
|
|
2846
2980
|
async onAddSearch(query, provider) {
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2981
|
+
return runWithProxy(undefined, async () => {
|
|
2982
|
+
if (commandHandle && !isCommandActive()) {
|
|
2983
|
+
throw new Error("Curator session is no longer active.");
|
|
2984
|
+
}
|
|
2985
|
+
const requestedProvider = resolveCuratorSearchProvider(provider, currentSearchProvider);
|
|
2986
|
+
const response = await search(query, {
|
|
2987
|
+
provider: requestedProvider,
|
|
2988
|
+
signal: searchAbort.signal,
|
|
2989
|
+
extensionContext: ctx
|
|
2990
|
+
});
|
|
2991
|
+
if (commandHandle && !isCommandActive()) {
|
|
2992
|
+
throw new Error("Curator session is no longer active.");
|
|
2993
|
+
}
|
|
2994
|
+
return toCuratorSearchEntries(response);
|
|
2855
2995
|
});
|
|
2856
|
-
if (commandHandle && !isCommandActive()) {
|
|
2857
|
-
throw new Error("Curator session is no longer active.");
|
|
2858
|
-
}
|
|
2859
|
-
return toCuratorSearchEntries(response);
|
|
2860
2996
|
},
|
|
2861
2997
|
onAddSearchResults(entries) {
|
|
2862
2998
|
if (commandHandle && !isCommandActive())
|
|
@@ -2913,44 +3049,43 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2913
3049
|
}
|
|
2914
3050
|
if (queries.length > 0) {
|
|
2915
3051
|
(async () => {
|
|
2916
|
-
|
|
2917
|
-
for (let qi = 0;qi < queries.length; qi++) {
|
|
3052
|
+
await runSearchQueries(queries, async (query, qi) => {
|
|
2918
3053
|
if (aborted || !isCommandActive())
|
|
2919
|
-
|
|
3054
|
+
return;
|
|
2920
3055
|
const requestedProvider = currentSearchProvider;
|
|
2921
3056
|
try {
|
|
2922
|
-
const response = await search(
|
|
3057
|
+
const response = await runWithProxy(undefined, () => search(query, {
|
|
2923
3058
|
provider: requestedProvider,
|
|
2924
3059
|
signal: searchAbort.signal,
|
|
2925
3060
|
extensionContext: ctx
|
|
2926
|
-
});
|
|
3061
|
+
}));
|
|
2927
3062
|
if (aborted || !isCommandActive())
|
|
2928
|
-
|
|
3063
|
+
return;
|
|
2929
3064
|
const entries = toCuratorSearchEntries(response);
|
|
2930
3065
|
for (let entryIndex = 0;entryIndex < entries.length; entryIndex++) {
|
|
2931
3066
|
const entry = entries[entryIndex];
|
|
2932
|
-
const resultIndex =
|
|
3067
|
+
const resultIndex = curatorResultIndex(qi, entryIndex, queries.length);
|
|
2933
3068
|
const indexedEntry = {
|
|
2934
3069
|
...entry,
|
|
2935
3070
|
queryIndex: resultIndex,
|
|
2936
|
-
query
|
|
3071
|
+
query
|
|
2937
3072
|
};
|
|
2938
3073
|
collected.set(resultIndex, indexedCuratorEntryToQueryResult(indexedEntry));
|
|
2939
3074
|
if (entry.error) {
|
|
2940
|
-
handle.pushError(resultIndex, entry.error, entry.provider, { query
|
|
3075
|
+
handle.pushError(resultIndex, entry.error, entry.provider, { query, slotIndex: qi });
|
|
2941
3076
|
} else {
|
|
2942
|
-
handle.pushResult(resultIndex, { ...entry, query
|
|
3077
|
+
handle.pushResult(resultIndex, { ...entry, query, slotIndex: qi });
|
|
2943
3078
|
}
|
|
2944
3079
|
}
|
|
2945
3080
|
} catch (err) {
|
|
2946
3081
|
if (aborted || !isCommandActive())
|
|
2947
|
-
|
|
3082
|
+
return;
|
|
2948
3083
|
const message = err instanceof Error ? err.message : String(err);
|
|
2949
3084
|
const failedProvider = toCuratorProvider(requestedProvider);
|
|
2950
|
-
handle.pushError(qi, message, failedProvider, { query
|
|
2951
|
-
collected.set(qi, { query
|
|
3085
|
+
handle.pushError(qi, message, failedProvider, { query, slotIndex: qi });
|
|
3086
|
+
collected.set(qi, { query, answer: "", results: [], error: message, provider: failedProvider });
|
|
2952
3087
|
}
|
|
2953
|
-
}
|
|
3088
|
+
});
|
|
2954
3089
|
if (!aborted && isCommandActive())
|
|
2955
3090
|
handle.searchesDone();
|
|
2956
3091
|
})();
|
|
@@ -2972,7 +3107,7 @@ Showing chars ${offset}-${endOffset} of ${urlData.content.length}.`;
|
|
|
2972
3107
|
const arg = args.trim().toLowerCase();
|
|
2973
3108
|
let newWorkflow;
|
|
2974
3109
|
if (arg.length === 0) {
|
|
2975
|
-
const current =
|
|
3110
|
+
const current = resolveWebSearchWorkflow(loadConfigForExtensionInit().workflow, true);
|
|
2976
3111
|
newWorkflow = current === "none" ? "summary-review" : "none";
|
|
2977
3112
|
} else if (arg === "on") {
|
|
2978
3113
|
newWorkflow = "summary-review";
|