@herbertgao/pi-extensions 2026.8.10 → 2026.8.12
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 +18 -11
- package/{node_modules/@herbertgao/pi-inline-skills/LICENSE → THIRD_PARTY_NOTICES.md} +15 -1
- package/node_modules/@czottmann/pi-automode/CHANGELOG.md +15 -0
- package/node_modules/@czottmann/pi-automode/README.md +5 -3
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +2 -0
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +60 -0
- package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +1 -0
- package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +4 -4
- package/node_modules/@czottmann/pi-automode/docs/configuration.md +20 -4
- package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +1 -1
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +692 -0
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +181 -3
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +4 -1
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +143 -36
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +103 -148
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +32 -6
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +344 -22
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +1 -0
- package/node_modules/@czottmann/pi-automode/package.json +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +4 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +21 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +19 -19
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +4 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +10 -2
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +10 -0
- package/node_modules/@herbertgao/pi-subagents/README.md +21 -15
- package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +11 -8
- package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +184 -106
- package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +31 -11
- package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +9 -1
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +156 -31
- package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +17 -0
- package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +14 -0
- package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +8 -0
- package/node_modules/@herbertgao/pi-subagents/src/settings.ts +32 -1
- package/node_modules/@herbertgao/pi-subagents/src/types.ts +17 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +23 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +259 -24
- package/node_modules/{resume-from → @herbertgao/resume-from}/README.md +10 -8
- package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.js +11 -2
- package/node_modules/{resume-from → @herbertgao/resume-from}/package.json +24 -10
- package/node_modules/{resume-from → @herbertgao/resume-from}/shims/pi/extensions/resume-from.js +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
- package/node_modules/@narumitw/pi-btw/package.json +6 -6
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
- package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
- package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
- package/node_modules/@tifan/pi-handoff/package.json +43 -0
- package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
- package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
- package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
- package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
- package/node_modules/@tifan/pi-recap/package.json +42 -0
- package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
- package/node_modules/@tifan/pi-rename/package.json +47 -0
- package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
- package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
- package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
- package/node_modules/pi-lens/CHANGELOG.md +96 -1
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
- package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
- package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
- package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
- package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
- package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
- package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
- package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
- package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
- package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
- package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
- package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
- package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
- package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
- package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
- package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
- package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
- package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
- package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
- package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
- package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
- package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
- package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
- package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
- package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
- package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
- package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
- package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
- package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
- package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
- package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
- package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
- package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
- package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
- package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
- package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
- package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
- package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
- package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
- package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
- package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
- package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
- package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
- package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
- package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
- package/node_modules/pi-lens/dist/i18n.js +13 -5
- package/node_modules/pi-lens/dist/index.js +10797 -8627
- package/node_modules/pi-lens/dist/mcp/server.js +3 -1
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
- package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
- package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
- package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
- package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
- package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
- package/node_modules/pi-lens/package.json +160 -156
- package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
- package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
- package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +34 -0
- package/node_modules/pi-mcp-adapter/README.md +42 -13
- package/node_modules/pi-mcp-adapter/commands.ts +4 -2
- package/node_modules/pi-mcp-adapter/config.ts +35 -5
- package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
- package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
- package/node_modules/pi-mcp-adapter/dist/config.js +1077 -0
- package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
- package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
- package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
- package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
- package/node_modules/pi-mcp-adapter/index.ts +204 -82
- package/node_modules/pi-mcp-adapter/init.ts +36 -29
- package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
- package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
- package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
- package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
- package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
- package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
- package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
- package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
- package/node_modules/pi-mcp-adapter/package.json +24 -6
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
- package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
- package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
- package/node_modules/pi-mcp-adapter/state.ts +1 -3
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
- package/node_modules/pi-mcp-adapter/types.ts +48 -1
- package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
- package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
- package/node_modules/pi-mcp-adapter/utils.ts +21 -19
- package/node_modules/pi-web-access/CHANGELOG.md +26 -0
- package/node_modules/pi-web-access/README.md +71 -14
- package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
- package/node_modules/pi-web-access/credential-source.ts +6 -2
- package/node_modules/pi-web-access/curator-page.ts +5 -3
- package/node_modules/pi-web-access/curator-server.ts +2 -1
- package/node_modules/pi-web-access/extract.ts +89 -9
- package/node_modules/pi-web-access/fetch-params.ts +13 -0
- package/node_modules/pi-web-access/gemini-adc.ts +298 -0
- package/node_modules/pi-web-access/gemini-api.ts +59 -15
- package/node_modules/pi-web-access/gemini-search.ts +58 -18
- package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
- package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
- package/node_modules/pi-web-access/gemini-web.ts +9 -3
- package/node_modules/pi-web-access/github-api.ts +5 -4
- package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
- package/node_modules/pi-web-access/index.ts +403 -297
- package/node_modules/pi-web-access/kimi-search.ts +234 -0
- package/node_modules/pi-web-access/openai-search.ts +118 -21
- package/node_modules/pi-web-access/package.json +3 -2
- package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
- package/node_modules/pi-web-access/utils.ts +307 -1
- package/node_modules/pi-web-access/youtube-extract.ts +2 -2
- package/package.json +44 -41
- package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
- package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
- package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
- package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
- package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
- package/node_modules/@herbertgao/pi-mermaid-open/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
- package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
- package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-recap/package.json +0 -55
- package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
- package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-rename/package.json +0 -63
- package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
- package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
- /package/node_modules/{resume-from → @herbertgao/resume-from}/LICENSE +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.js +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/src/index.ts +0 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* agent-manager.ts — Tracks agents, background execution, resume support.
|
|
3
3
|
*
|
|
4
|
-
* Background
|
|
5
|
-
*
|
|
6
|
-
* Foreground agents bypass the queue (they block the parent anyway), and so do
|
|
7
|
-
* nested children — see `occupiesPoolSlot`.
|
|
4
|
+
* Background and blocking foreground agents use independent concurrency pools.
|
|
5
|
+
* Nested children use neither pool, avoiding parent/child deadlocks.
|
|
8
6
|
*/
|
|
9
7
|
|
|
10
8
|
import { randomUUID } from "node:crypto"
|
|
@@ -17,6 +15,7 @@ import type {
|
|
|
17
15
|
ExtensionContext,
|
|
18
16
|
} from "@earendil-works/pi-coding-agent"
|
|
19
17
|
import { resumeAgent, runAgent, type ToolActivity } from "./agent-runner.js"
|
|
18
|
+
import { describeModel } from "./model-resolver.js"
|
|
20
19
|
import type {
|
|
21
20
|
AgentInvocation,
|
|
22
21
|
AgentRecord,
|
|
@@ -43,6 +42,8 @@ export type CompactionInfo = {
|
|
|
43
42
|
|
|
44
43
|
/** Default max concurrent background agents. */
|
|
45
44
|
const DEFAULT_MAX_CONCURRENT = 10
|
|
45
|
+
/** Default max concurrent blocking agents. 0 means unlimited. */
|
|
46
|
+
const DEFAULT_MAX_CONCURRENT_FOREGROUND = 0
|
|
46
47
|
|
|
47
48
|
/**
|
|
48
49
|
* Validate a caller-supplied SpawnOptions.cwd. `undefined`/`null` mean "unset"
|
|
@@ -85,6 +86,14 @@ function occupiesPoolSlot(
|
|
|
85
86
|
return !!record.isBackground && record.parentAgentId === undefined
|
|
86
87
|
}
|
|
87
88
|
|
|
89
|
+
function occupiesForegroundSlot(
|
|
90
|
+
record: Pick<AgentRecord, "blocking" | "parentAgentId">,
|
|
91
|
+
): boolean {
|
|
92
|
+
return !!record.blocking && record.parentAgentId === undefined
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
type Pool = "background" | "foreground"
|
|
96
|
+
|
|
88
97
|
interface SpawnArgs {
|
|
89
98
|
pi: ExtensionAPI
|
|
90
99
|
ctx: ExtensionContext
|
|
@@ -107,6 +116,8 @@ interface SpawnOptions {
|
|
|
107
116
|
* scheduler so a fired job can't be deferred past its trigger window.
|
|
108
117
|
*/
|
|
109
118
|
bypassQueue?: boolean
|
|
119
|
+
/** Set only by spawnAndWait; detached/RPC spawns do not occupy the foreground pool. */
|
|
120
|
+
blocking?: boolean
|
|
110
121
|
/** Isolation mode — "worktree" creates a temp git worktree for the agent. */
|
|
111
122
|
isolation?: IsolationMode
|
|
112
123
|
/**
|
|
@@ -122,6 +133,10 @@ interface SpawnOptions {
|
|
|
122
133
|
invocation?: AgentInvocation
|
|
123
134
|
/** Parent abort signal — when aborted, the subagent is also stopped. */
|
|
124
135
|
signal?: AbortSignal
|
|
136
|
+
/** Called when this specific record has started and has a promise. */
|
|
137
|
+
onSpawned?: (id: string) => void
|
|
138
|
+
/** Called when this record enters its pool's queue. */
|
|
139
|
+
onQueued?: (id: string, ahead: number) => void
|
|
125
140
|
/** Called on tool start/end with activity info (for streaming progress to UI). */
|
|
126
141
|
onToolActivity?: (activity: ToolActivity) => void
|
|
127
142
|
/** Called on streaming text deltas from the assistant response. */
|
|
@@ -207,14 +222,20 @@ export class AgentManager {
|
|
|
207
222
|
private onCompact?: OnAgentCompact
|
|
208
223
|
private onUsage?: OnAgentUsage
|
|
209
224
|
private maxConcurrent: number
|
|
225
|
+
private maxConcurrentForeground = DEFAULT_MAX_CONCURRENT_FOREGROUND
|
|
210
226
|
/** Base repos worktrees were created from — so dispose() can prune them all,
|
|
211
227
|
* not just the parent repo (caller-supplied cwd can target other repos). */
|
|
212
228
|
private worktreeRepos = new Set<string>()
|
|
213
229
|
|
|
214
|
-
/**
|
|
215
|
-
private queue: {
|
|
216
|
-
|
|
230
|
+
/** Agents waiting on either independent concurrency pool. */
|
|
231
|
+
private queue: {
|
|
232
|
+
id: string
|
|
233
|
+
pool: Pool
|
|
234
|
+
start: () => void
|
|
235
|
+
release: () => void
|
|
236
|
+
}[] = []
|
|
217
237
|
private runningBackground = 0
|
|
238
|
+
private runningForeground = 0
|
|
218
239
|
|
|
219
240
|
constructor(
|
|
220
241
|
onComplete?: OnAgentComplete,
|
|
@@ -244,6 +265,31 @@ export class AgentManager {
|
|
|
244
265
|
return this.maxConcurrent
|
|
245
266
|
}
|
|
246
267
|
|
|
268
|
+
/** Update the max concurrent blocking agents limit. 0 means unlimited. */
|
|
269
|
+
setMaxConcurrentForeground(n: number) {
|
|
270
|
+
this.maxConcurrentForeground = Math.max(0, n)
|
|
271
|
+
this.drainQueue()
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
getMaxConcurrentForeground(): number {
|
|
275
|
+
return this.maxConcurrentForeground
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private poolFor(record: AgentRecord): Pool | undefined {
|
|
279
|
+
if (occupiesPoolSlot(record)) return "background"
|
|
280
|
+
if (this.maxConcurrentForeground > 0 && occupiesForegroundSlot(record)) {
|
|
281
|
+
return "foreground"
|
|
282
|
+
}
|
|
283
|
+
return undefined
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
private poolHasRoom(pool: Pool): boolean {
|
|
287
|
+
return pool === "background"
|
|
288
|
+
? this.runningBackground < this.maxConcurrent
|
|
289
|
+
: this.maxConcurrentForeground === 0 ||
|
|
290
|
+
this.runningForeground < this.maxConcurrentForeground
|
|
291
|
+
}
|
|
292
|
+
|
|
247
293
|
/**
|
|
248
294
|
* Spawn an agent and return its ID immediately (for background use).
|
|
249
295
|
* If the concurrency limit is reached, the agent is queued.
|
|
@@ -278,6 +324,7 @@ export class AgentManager {
|
|
|
278
324
|
// only filter excludes only explicit `false`, so undefined agents — which
|
|
279
325
|
// have no inline surface — stay visible instead of vanishing.
|
|
280
326
|
isBackground: options.isBackground,
|
|
327
|
+
blocking: options.blocking,
|
|
281
328
|
invocation: options.invocation,
|
|
282
329
|
depth: options.depth ?? 1,
|
|
283
330
|
parentAgentId: options.parentAgentId,
|
|
@@ -288,13 +335,24 @@ export class AgentManager {
|
|
|
288
335
|
|
|
289
336
|
const args: SpawnArgs = { pi, ctx, type, prompt, options }
|
|
290
337
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
this.
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
338
|
+
const pool = this.poolFor(record)
|
|
339
|
+
if (pool && !options.bypassQueue && !this.poolHasRoom(pool)) {
|
|
340
|
+
record.status = "queued"
|
|
341
|
+
if (!this.armQueuedAbort(id, options.signal)) return id
|
|
342
|
+
let release!: () => void
|
|
343
|
+
record.startGate = new Promise<void>((resolve) => {
|
|
344
|
+
release = resolve
|
|
345
|
+
})
|
|
346
|
+
this.queue.push({
|
|
347
|
+
id,
|
|
348
|
+
pool,
|
|
349
|
+
start: () => this.startAgent(id, record, args),
|
|
350
|
+
release,
|
|
351
|
+
})
|
|
352
|
+
options.onQueued?.(
|
|
353
|
+
id,
|
|
354
|
+
this.queue.filter((entry) => entry.pool === pool).length - 1,
|
|
355
|
+
)
|
|
298
356
|
return id
|
|
299
357
|
}
|
|
300
358
|
|
|
@@ -309,6 +367,20 @@ export class AgentManager {
|
|
|
309
367
|
return id
|
|
310
368
|
}
|
|
311
369
|
|
|
370
|
+
private armQueuedAbort(id: string, signal?: AbortSignal): boolean {
|
|
371
|
+
if (!signal) return true
|
|
372
|
+
if (signal.aborted) {
|
|
373
|
+
const record = this.agents.get(id)
|
|
374
|
+
if (record) {
|
|
375
|
+
record.status = "stopped"
|
|
376
|
+
record.completedAt = Date.now()
|
|
377
|
+
}
|
|
378
|
+
return false
|
|
379
|
+
}
|
|
380
|
+
signal.addEventListener("abort", () => this.abort(id), { once: true })
|
|
381
|
+
return true
|
|
382
|
+
}
|
|
383
|
+
|
|
312
384
|
/** Actually start an agent (called immediately or from queue drain). */
|
|
313
385
|
private startAgent(
|
|
314
386
|
id: string,
|
|
@@ -349,16 +421,23 @@ export class AgentManager {
|
|
|
349
421
|
|
|
350
422
|
record.status = "running"
|
|
351
423
|
record.startedAt = Date.now()
|
|
352
|
-
|
|
424
|
+
record.startGate = undefined
|
|
425
|
+
const pool = this.poolFor(record)
|
|
426
|
+
if (pool === "background") this.runningBackground++
|
|
427
|
+
else if (pool === "foreground") this.runningForeground++
|
|
353
428
|
this.onStart?.(record)
|
|
354
429
|
|
|
355
430
|
// Wire parent abort signal to stop the subagent when the parent is interrupted
|
|
356
431
|
let detachParentSignal: (() => void) | undefined
|
|
357
432
|
if (options.signal) {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
433
|
+
if (options.signal.aborted) {
|
|
434
|
+
this.abort(id)
|
|
435
|
+
} else {
|
|
436
|
+
const onParentAbort = () => this.abort(id)
|
|
437
|
+
options.signal.addEventListener("abort", onParentAbort, { once: true })
|
|
438
|
+
detachParentSignal = () =>
|
|
439
|
+
options.signal!.removeEventListener("abort", onParentAbort)
|
|
440
|
+
}
|
|
362
441
|
}
|
|
363
442
|
const detach = () => {
|
|
364
443
|
detachParentSignal?.()
|
|
@@ -407,6 +486,18 @@ export class AgentManager {
|
|
|
407
486
|
},
|
|
408
487
|
onSessionCreated: (session) => {
|
|
409
488
|
record.session = session
|
|
489
|
+
if (session.model) {
|
|
490
|
+
record.invocation ??= {}
|
|
491
|
+
const requested =
|
|
492
|
+
record.invocation.requestedThinking ?? record.invocation.thinking
|
|
493
|
+
Object.assign(record.invocation, describeModel(session.model))
|
|
494
|
+
if (session.thinkingLevel) {
|
|
495
|
+
record.invocation.thinking = session.thinkingLevel
|
|
496
|
+
if (requested && requested !== session.thinkingLevel) {
|
|
497
|
+
record.invocation.requestedThinking = requested
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
410
501
|
// Flush any steers that arrived before the session was ready
|
|
411
502
|
if (record.pendingSteers?.length) {
|
|
412
503
|
for (const msg of record.pendingSteers) {
|
|
@@ -468,24 +559,7 @@ export class AgentManager {
|
|
|
468
559
|
|
|
469
560
|
this.abortOwnedChildren(id)
|
|
470
561
|
|
|
471
|
-
|
|
472
|
-
// Mark resultConsumed so the callback skips notifications (result returned inline).
|
|
473
|
-
if (!options.isBackground) {
|
|
474
|
-
record.resultConsumed = true
|
|
475
|
-
try {
|
|
476
|
-
this.onComplete?.(record)
|
|
477
|
-
} catch {
|
|
478
|
-
/* ignore completion side-effect errors */
|
|
479
|
-
}
|
|
480
|
-
} else {
|
|
481
|
-
if (occupiesPoolSlot(record)) this.runningBackground--
|
|
482
|
-
try {
|
|
483
|
-
this.onComplete?.(record)
|
|
484
|
-
} catch {
|
|
485
|
-
/* ignore completion side-effect errors */
|
|
486
|
-
}
|
|
487
|
-
this.drainQueue()
|
|
488
|
-
}
|
|
562
|
+
this.settleRun(record, true, pool)
|
|
489
563
|
return responseText
|
|
490
564
|
})
|
|
491
565
|
.catch((err) => {
|
|
@@ -524,25 +598,35 @@ export class AgentManager {
|
|
|
524
598
|
|
|
525
599
|
this.abortOwnedChildren(id)
|
|
526
600
|
|
|
527
|
-
|
|
528
|
-
// Mark resultConsumed so the callback skips notifications (result returned inline).
|
|
529
|
-
if (!options.isBackground) {
|
|
530
|
-
record.resultConsumed = true
|
|
531
|
-
this.onComplete?.(record)
|
|
532
|
-
} else {
|
|
533
|
-
if (occupiesPoolSlot(record)) this.runningBackground--
|
|
534
|
-
this.onComplete?.(record)
|
|
535
|
-
this.drainQueue()
|
|
536
|
-
}
|
|
601
|
+
this.settleRun(record, false, pool)
|
|
537
602
|
return ""
|
|
538
603
|
})
|
|
539
604
|
|
|
540
605
|
record.promise = promise
|
|
541
606
|
|
|
542
|
-
//
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
607
|
+
// Per-call hook: safe for parallel and deferred foreground starts.
|
|
608
|
+
options.onSpawned?.(id)
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
private settleRun(
|
|
612
|
+
record: AgentRecord,
|
|
613
|
+
guardCallback: boolean,
|
|
614
|
+
pool: Pool | undefined,
|
|
615
|
+
): void {
|
|
616
|
+
if (!record.isBackground) record.resultConsumed = true
|
|
617
|
+
if (pool === "background") this.runningBackground--
|
|
618
|
+
else if (pool === "foreground") this.runningForeground--
|
|
619
|
+
|
|
620
|
+
if (guardCallback) {
|
|
621
|
+
try {
|
|
622
|
+
this.onComplete?.(record)
|
|
623
|
+
} catch {
|
|
624
|
+
/* ignore completion side-effect errors */
|
|
625
|
+
}
|
|
626
|
+
} else {
|
|
627
|
+
this.onComplete?.(record)
|
|
628
|
+
}
|
|
629
|
+
if (record.isBackground || pool) this.drainQueue()
|
|
546
630
|
}
|
|
547
631
|
|
|
548
632
|
/**
|
|
@@ -557,43 +641,41 @@ export class AgentManager {
|
|
|
557
641
|
}
|
|
558
642
|
}
|
|
559
643
|
|
|
560
|
-
/** Start queued
|
|
644
|
+
/** Start the earliest queued agent whose own pool has room. */
|
|
561
645
|
private drainQueue() {
|
|
562
|
-
|
|
563
|
-
this.queue.
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
646
|
+
for (;;) {
|
|
647
|
+
const index = this.queue.findIndex((entry) =>
|
|
648
|
+
this.poolHasRoom(entry.pool),
|
|
649
|
+
)
|
|
650
|
+
if (index === -1) return
|
|
651
|
+
const [next] = this.queue.splice(index, 1)
|
|
567
652
|
const record = this.agents.get(next.id)
|
|
568
|
-
if (record?.status !== "queued") continue
|
|
569
653
|
try {
|
|
570
|
-
next.start()
|
|
654
|
+
if (record?.status === "queued") next.start()
|
|
571
655
|
} catch (err) {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
656
|
+
if (record) {
|
|
657
|
+
if (next.pool === "foreground") record.resultConsumed = true
|
|
658
|
+
record.status = "error"
|
|
659
|
+
record.error = err instanceof Error ? err.message : String(err)
|
|
660
|
+
record.completedAt = Date.now()
|
|
661
|
+
this.onComplete?.(record)
|
|
662
|
+
}
|
|
663
|
+
} finally {
|
|
664
|
+
next.release()
|
|
578
665
|
}
|
|
579
666
|
}
|
|
580
667
|
}
|
|
581
668
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
669
|
+
private dequeue(pred: (entry: { id: string; pool: Pool }) => boolean): void {
|
|
670
|
+
const kept: typeof this.queue = []
|
|
671
|
+
for (const entry of this.queue) {
|
|
672
|
+
if (pred(entry)) entry.release()
|
|
673
|
+
else kept.push(entry)
|
|
674
|
+
}
|
|
675
|
+
this.queue = kept
|
|
676
|
+
}
|
|
588
677
|
|
|
589
|
-
/**
|
|
590
|
-
* Spawn an agent and wait for completion (foreground use).
|
|
591
|
-
* Foreground agents bypass the concurrency queue.
|
|
592
|
-
* Returns { id, record } so callers can access the agent ID.
|
|
593
|
-
*
|
|
594
|
-
* @param onSpawned - Called synchronously after spawn(), before onSessionCreated fires.
|
|
595
|
-
* Use this to set record.outputFile so streamToOutputFile can pick it up.
|
|
596
|
-
*/
|
|
678
|
+
/** Spawn an agent, applying the blocking foreground pool, and await it. */
|
|
597
679
|
async spawnAndWait(
|
|
598
680
|
pi: ExtensionAPI,
|
|
599
681
|
ctx: ExtensionContext,
|
|
@@ -602,23 +684,18 @@ export class AgentManager {
|
|
|
602
684
|
options: Omit<SpawnOptions, "isBackground">,
|
|
603
685
|
onSpawned?: (id: string) => void,
|
|
604
686
|
): Promise<{ id: string; record: AgentRecord }> {
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
// shared hook immediately so unrelated concurrent spawns cannot inherit
|
|
612
|
-
// this foreground caller's callback while its run is awaited.
|
|
613
|
-
id = this.spawn(pi, ctx, type, prompt, {
|
|
614
|
-
...options,
|
|
615
|
-
isBackground: false,
|
|
616
|
-
})
|
|
617
|
-
} finally {
|
|
618
|
-
this.onSpawned = prevOnSpawned
|
|
619
|
-
}
|
|
687
|
+
const id = this.spawn(pi, ctx, type, prompt, {
|
|
688
|
+
...options,
|
|
689
|
+
isBackground: false,
|
|
690
|
+
blocking: true,
|
|
691
|
+
onSpawned,
|
|
692
|
+
})
|
|
620
693
|
const record = this.agents.get(id)!
|
|
621
|
-
await record.
|
|
694
|
+
if (record.status === "queued") await record.startGate
|
|
695
|
+
if (record.promise) await record.promise
|
|
696
|
+
if (!record.promise && record.status === "error") {
|
|
697
|
+
throw new Error(record.error ?? "Agent failed to start")
|
|
698
|
+
}
|
|
622
699
|
return { id, record }
|
|
623
700
|
}
|
|
624
701
|
|
|
@@ -661,12 +738,14 @@ export class AgentManager {
|
|
|
661
738
|
record.status = "queued"
|
|
662
739
|
|
|
663
740
|
const start = () => this.startResume(id, record, prompt, signal, options)
|
|
664
|
-
if (
|
|
665
|
-
|
|
666
|
-
this.
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
741
|
+
if (occupiesPoolSlot(record) && !this.poolHasRoom("background")) {
|
|
742
|
+
// Detached resumes remain on the background pool only.
|
|
743
|
+
this.queue.push({
|
|
744
|
+
id,
|
|
745
|
+
pool: "background",
|
|
746
|
+
start,
|
|
747
|
+
release: () => {},
|
|
748
|
+
})
|
|
670
749
|
} else {
|
|
671
750
|
start()
|
|
672
751
|
}
|
|
@@ -863,9 +942,9 @@ export class AgentManager {
|
|
|
863
942
|
const record = this.agents.get(id)
|
|
864
943
|
if (!record) return false
|
|
865
944
|
|
|
866
|
-
// Remove from queue if queued
|
|
945
|
+
// Remove from queue if queued and release any blocking waiter.
|
|
867
946
|
if (record.status === "queued") {
|
|
868
|
-
this.
|
|
947
|
+
this.dequeue((q) => q.id === id)
|
|
869
948
|
record.status = "stopped"
|
|
870
949
|
record.completedAt = Date.now()
|
|
871
950
|
return true
|
|
@@ -928,7 +1007,7 @@ export class AgentManager {
|
|
|
928
1007
|
count++
|
|
929
1008
|
}
|
|
930
1009
|
}
|
|
931
|
-
this.
|
|
1010
|
+
this.dequeue(() => true)
|
|
932
1011
|
// Abort running agents
|
|
933
1012
|
for (const record of this.agents.values()) {
|
|
934
1013
|
if (record.status === "running") {
|
|
@@ -958,8 +1037,7 @@ export class AgentManager {
|
|
|
958
1037
|
|
|
959
1038
|
async dispose(): Promise<void> {
|
|
960
1039
|
clearInterval(this.cleanupInterval)
|
|
961
|
-
|
|
962
|
-
this.queue = []
|
|
1040
|
+
this.dequeue(() => true)
|
|
963
1041
|
const sessions = [...this.agents.values()].map((record) => record.session)
|
|
964
1042
|
this.agents.clear()
|
|
965
1043
|
await Promise.all(sessions.map((session) => shutdownChildSession(session)))
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { type ModelRegistry, resolveModel } from "./model-resolver.js"
|
|
13
|
+
import { checkModelScope } from "./model-scope.js"
|
|
13
14
|
|
|
14
15
|
/** Minimal event bus interface needed by the RPC handlers. */
|
|
15
16
|
export interface EventBus {
|
|
@@ -104,21 +105,40 @@ export function registerRpcHandlers(deps: RpcDeps): RpcHandle {
|
|
|
104
105
|
// agent's auth lookup doesn't crash with "No API key found for
|
|
105
106
|
// undefined".
|
|
106
107
|
let normalizedOptions = options ?? {}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
const override = normalizedOptions.model
|
|
109
|
+
// null means inherit, matching the runner's `model ?? default` behavior.
|
|
110
|
+
if (override != null) {
|
|
111
|
+
const { modelRegistry, cwd } = ctx as {
|
|
112
|
+
modelRegistry?: ModelRegistry
|
|
113
|
+
cwd?: string
|
|
114
|
+
}
|
|
115
|
+
const label =
|
|
116
|
+
typeof override === "string"
|
|
117
|
+
? override
|
|
118
|
+
: `${override.provider}/${override.id}`
|
|
119
|
+
if (!modelRegistry) {
|
|
110
120
|
throw new Error(
|
|
111
|
-
`Model override "${
|
|
121
|
+
`Model override "${label}" provided but ctx.modelRegistry is unavailable`,
|
|
112
122
|
)
|
|
113
123
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
124
|
+
|
|
125
|
+
let model = override
|
|
126
|
+
if (typeof override === "string") {
|
|
127
|
+
const resolved = resolveModel(override, modelRegistry)
|
|
128
|
+
if (typeof resolved === "string") throw new Error(resolved)
|
|
129
|
+
model = resolved
|
|
130
|
+
normalizedOptions = { ...normalizedOptions, model: resolved }
|
|
120
131
|
}
|
|
121
|
-
|
|
132
|
+
|
|
133
|
+
const verdict = checkModelScope({
|
|
134
|
+
model,
|
|
135
|
+
cwd: cwd ?? process.cwd(),
|
|
136
|
+
modelRegistry,
|
|
137
|
+
callerSupplied: true,
|
|
138
|
+
agentLabel: type,
|
|
139
|
+
modelInput: label,
|
|
140
|
+
})
|
|
141
|
+
if (verdict.kind === "error") throw new Error(verdict.message)
|
|
122
142
|
}
|
|
123
143
|
|
|
124
144
|
return { id: manager.spawn(pi, ctx, type, prompt, normalizedOptions) }
|
|
@@ -141,13 +141,21 @@ function loadFromDir(
|
|
|
141
141
|
* Read and parse one agent file, or warn and return undefined for the caller to
|
|
142
142
|
* skip. Under strict mode the same failure aborts startup while naming the file.
|
|
143
143
|
*/
|
|
144
|
+
export function parseAgentFrontmatter<T extends Record<string, unknown>>(
|
|
145
|
+
content: string,
|
|
146
|
+
): { frontmatter: T; body: string } {
|
|
147
|
+
return parseFrontmatter<T>(
|
|
148
|
+
content.startsWith("\uFEFF") ? content.slice(1) : content,
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
|
|
144
152
|
function readAgentFile(
|
|
145
153
|
path: string,
|
|
146
154
|
strict: boolean,
|
|
147
155
|
warnings: WarningState,
|
|
148
156
|
): { frontmatter: Record<string, unknown>; body: string } | undefined {
|
|
149
157
|
try {
|
|
150
|
-
return
|
|
158
|
+
return parseAgentFrontmatter<Record<string, unknown>>(
|
|
151
159
|
readFileSync(path, "utf-8"),
|
|
152
160
|
)
|
|
153
161
|
} catch (err) {
|