@herbertgao/pi-extensions 2026.8.5 → 2026.8.7
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 +5 -5
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +19 -7
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +30 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +272 -22
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +74 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +94 -77
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/markdown-enhance.ts +48 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/message-display.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +14 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +55 -17
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/layout.ts +41 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-renderer.ts +75 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/types.ts +7 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +64 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +16 -0
- package/node_modules/@herbertgao/pi-subagents/README.md +30 -22
- package/node_modules/@herbertgao/pi-subagents/examples/agent-tool-description.md +5 -5
- package/node_modules/@herbertgao/pi-subagents/package.json +7 -7
- package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +7 -1
- package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +48 -19
- package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +22 -15
- package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +26 -2
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +219 -40
- package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +101 -3
- package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +18 -4
- package/node_modules/@herbertgao/pi-subagents/src/settings.ts +99 -0
- package/node_modules/@herbertgao/pi-subagents/src/types.ts +22 -3
- package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +51 -3
- package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +20 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/fleet-list.ts +34 -10
- package/node_modules/@herbertgao/pi-subagents/src/usage.ts +129 -1
- package/node_modules/@herbertgao/pi-subagents/src/worktree.ts +29 -5
- package/node_modules/@juicesharp/rpiv-ask-user-question/README.md +3 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +46 -10
- package/node_modules/@juicesharp/rpiv-ask-user-question/config.ts +25 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/configuration.md +13 -4
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/hosts.md +8 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/localization.md +3 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/locales/en.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/locales/zh.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +3 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/build-questionnaire.ts +10 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/key-router.ts +3 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/questionnaire-session.ts +30 -7
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/state.ts +14 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/dialog-builder.ts +30 -4
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/tab-content-strategy.ts +26 -5
- package/node_modules/@narumitw/pi-btw/README.md +119 -103
- package/node_modules/@narumitw/pi-btw/dist/index.ts +2898 -0
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +7 -0
- package/node_modules/@narumitw/pi-btw/package.json +13 -9
- package/node_modules/@narumitw/pi-btw/src/btw.ts +40 -42
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +55 -10
- package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +390 -0
- package/node_modules/@narumitw/pi-btw/src/menu.ts +78 -15
- package/node_modules/@narumitw/pi-btw/src/settings.ts +22 -2
- package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +136 -45
- package/node_modules/pi-lens/CHANGELOG.md +1004 -0
- package/node_modules/pi-lens/README.md +11 -3
- package/node_modules/pi-lens/config/ruff/core.toml +42 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +130 -27
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +427 -0
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +79 -16
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +9 -3
- package/node_modules/pi-lens/dist/clients/atomic-write.js +9 -3
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +285 -8
- package/node_modules/pi-lens/dist/clients/biome-client.js +176 -37
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +428 -0
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +119 -0
- package/node_modules/pi-lens/dist/clients/bootstrap.js +12 -1
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +12 -3
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +192 -0
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +62 -6
- package/node_modules/pi-lens/dist/clients/bus-publish.js +11 -3
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +196 -0
- package/node_modules/pi-lens/dist/clients/cascade-format.js +76 -2
- package/node_modules/pi-lens/dist/clients/cascade-types.js +9 -1
- package/node_modules/pi-lens/dist/clients/child-unref.js +54 -6
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +76 -24
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +16 -4
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +249 -52
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +8 -1
- package/node_modules/pi-lens/dist/clients/debug-handles.js +5 -0
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +62 -13
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +43 -9
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +153 -37
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +298 -0
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +10 -3
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +165 -11
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +325 -72
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +7 -4
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +5 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +234 -18
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +187 -19
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +6 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +11 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +398 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +11 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +12 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +18 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +895 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +4 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +16 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +81 -41
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +16 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +23 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +331 -55
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +38 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +97 -19
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +14 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +20 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +22 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +10 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +18 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +73 -12
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +488 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +84 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +260 -27
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +943 -93
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +86 -11
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +72 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +106 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +9 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +18 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +4 -2
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +10 -3
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +17 -0
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +28 -5
- package/node_modules/pi-lens/dist/clients/extension-log.js +317 -3
- package/node_modules/pi-lens/dist/clients/file-kinds.js +8 -2
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +294 -0
- package/node_modules/pi-lens/dist/clients/finding-identity.js +88 -0
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +5 -1
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +39 -8
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +3 -2
- package/node_modules/pi-lens/dist/clients/formatters.js +500 -115
- package/node_modules/pi-lens/dist/clients/generation-guard.js +216 -0
- package/node_modules/pi-lens/dist/clients/git-guard.js +49 -21
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +181 -8
- package/node_modules/pi-lens/dist/clients/go-client.js +21 -39
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +219 -10
- package/node_modules/pi-lens/dist/clients/grammar-source.js +333 -10
- package/node_modules/pi-lens/dist/clients/host-ports.js +9 -1
- package/node_modules/pi-lens/dist/clients/installer/index.js +1119 -101
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +58 -0
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +715 -0
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +643 -97
- package/node_modules/pi-lens/dist/clients/instance-registry.js +87 -17
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +86 -15
- package/node_modules/pi-lens/dist/clients/knip-client.js +361 -24
- package/node_modules/pi-lens/dist/clients/language-policy.js +8 -2
- package/node_modules/pi-lens/dist/clients/language-profile.js +2 -0
- package/node_modules/pi-lens/dist/clients/latency-logger.js +487 -9
- package/node_modules/pi-lens/dist/clients/lazy-import.js +21 -0
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +21 -0
- package/node_modules/pi-lens/dist/clients/lens-events.js +56 -25
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +16 -0
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +45 -2
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +30 -4
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +160 -20
- package/node_modules/pi-lens/dist/clients/lsp/client.js +1666 -148
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +111 -0
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +389 -0
- package/node_modules/pi-lens/dist/clients/lsp/index.js +2496 -171
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +215 -0
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +146 -14
- package/node_modules/pi-lens/dist/clients/lsp/language.js +48 -4
- package/node_modules/pi-lens/dist/clients/lsp/server.js +517 -69
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +22 -0
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +43 -0
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +172 -0
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +21 -5
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +61 -3
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +422 -28
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +30 -0
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +175 -0
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +3 -2
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +4 -0
- package/node_modules/pi-lens/dist/clients/mcp/session.js +39 -18
- package/node_modules/pi-lens/dist/clients/model-provider.js +53 -0
- package/node_modules/pi-lens/dist/clients/module-report.js +8 -0
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +15 -1
- package/node_modules/pi-lens/dist/clients/package-manager.js +170 -14
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +27 -0
- package/node_modules/pi-lens/dist/clients/path-utils.js +160 -0
- package/node_modules/pi-lens/dist/clients/pipeline.js +178 -30
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +37 -0
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +17 -3
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +89 -22
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +85 -15
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +15 -3
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +23 -2
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +50 -2
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -0
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +3 -0
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +299 -0
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +47 -0
- package/node_modules/pi-lens/dist/clients/quiet-window.js +11 -25
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +1 -1
- package/node_modules/pi-lens/dist/clients/read-guard.js +184 -10
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +49 -17
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +50 -11
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +76 -4
- package/node_modules/pi-lens/dist/clients/run-duration.js +55 -0
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +248 -13
- package/node_modules/pi-lens/dist/clients/runtime-context.js +112 -12
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +472 -61
- package/node_modules/pi-lens/dist/clients/runtime-session.js +359 -13
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +217 -22
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +269 -22
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +948 -87
- package/node_modules/pi-lens/dist/clients/rust-client.js +21 -37
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +220 -7
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +161 -0
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +34 -6
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +224 -8
- package/node_modules/pi-lens/dist/clients/sg-runner.js +249 -37
- package/node_modules/pi-lens/dist/clients/single-flight.js +158 -0
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +18 -11
- package/node_modules/pi-lens/dist/clients/stale-marker.js +17 -0
- package/node_modules/pi-lens/dist/clients/startup-timing.js +26 -2
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +574 -32
- package/node_modules/pi-lens/dist/clients/tool-event.js +56 -5
- package/node_modules/pi-lens/dist/clients/tool-policy.js +127 -20
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +76 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +75 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +769 -64
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +11 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +90 -0
- package/node_modules/pi-lens/dist/clients/trivy-client.js +19 -1
- package/node_modules/pi-lens/dist/clients/warm-attach.js +17 -0
- package/node_modules/pi-lens/dist/clients/widget-state.js +336 -36
- package/node_modules/pi-lens/dist/clients/word-index.js +305 -33
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +214 -14
- package/node_modules/pi-lens/dist/index.js +64677 -49484
- package/node_modules/pi-lens/dist/mcp/server.js +8 -2
- package/node_modules/pi-lens/dist/tools/activate-tools.js +17 -5
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +9 -4
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +5 -2
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +469 -56
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +190 -46
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +46 -7
- package/node_modules/pi-lens/dist/tools/symbol-search.js +1 -1
- package/node_modules/pi-lens/docs/agent-guide.md +44 -14
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +518 -501
- package/node_modules/pi-lens/docs/dispositions.md +21 -0
- package/node_modules/pi-lens/docs/features.md +33 -6
- package/node_modules/pi-lens/docs/globalconfig.md +14 -0
- package/node_modules/pi-lens/docs/language-coverage.md +71 -5
- package/node_modules/pi-lens/docs/mcp.md +2 -2
- package/node_modules/pi-lens/docs/servercapabilities.md +4 -1
- package/node_modules/pi-lens/docs/settings.md +25 -1
- package/node_modules/pi-lens/docs/usage.md +24 -5
- package/node_modules/pi-lens/docs/word-index.md +35 -0
- package/node_modules/pi-lens/package.json +10 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/no-reflect-get-js-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/no-reflect-get-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/ts-void-zero-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-bare-object-param-test.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-chained-type-assertions-test.yml +22 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-compile-call-test.yml +29 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-conditional-empty-object-spread-js-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-conditional-empty-object-spread-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-dupe-class-members-test.yml +33 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-inner-html-js-test.yml +7 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-inner-html-test.yml +7 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-known-value-widening-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-non-null-assertion-test.yml +216 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-js-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-js-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-return-value-in-generator-test.yml +12 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-runtime-typeof-test.yml +33 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-server-bind-wildcard-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-shape-in-symbol-names-test.yml +13 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-sql-in-code-js-test.yml +5 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-sql-in-code-test.yml +5 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unknown-laundering-test.yml +11 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unknown-parameters-test.yml +12 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unknown-returns-test.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unsafe-dictionary-any-test.yml +10 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unsafe-dictionary-unknown-test.yml +8 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/redundant-unsafe-function-test.yml +35 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/require-safety-comment-for-as-unknown-as-test.yml +177 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/ts-void-zero-test.yml +1 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-await-expression-member-js.yml +13 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-await-expression-member.yml +13 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-host-path-in-win32-branch.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-object-param.yml +60 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-chained-type-assertions.yml +66 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-compile-call.yml +63 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-conditional-empty-object-spread-js.yml +21 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-conditional-empty-object-spread.yml +29 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-dupe-class-members.yml +52 -8
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-inner-html-js.yml +27 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-inner-html.yml +27 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-known-value-widening.yml +71 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-non-null-assertion.yml +316 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-raw-json-store-write.yml +7 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply-js.yml +29 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply.yml +30 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get-js.yml +41 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get.yml +42 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-return-value-in-generator.yml +22 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-runtime-typeof.yml +121 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-server-bind-wildcard.yml +23 -7
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-shape-in-symbol-names.yml +68 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-sql-in-code-js.yml +41 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-sql-in-code.yml +41 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-laundering.yml +32 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-parameters.yml +67 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-returns.yml +106 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unsafe-dictionary-any.yml +50 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unsafe-dictionary-unknown.yml +56 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-win32-isabsolute-for-qualification.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/redundant-unsafe-function.yml +32 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/require-safety-comment-for-as-unknown-as.yml +184 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/ts-void-zero.yml +5 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/self-scan-baseline.json +5 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +132 -1
- package/node_modules/pi-lens/scripts/download-grammars.js +25 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +9 -0
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +12 -11
- package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +22 -22
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/SKILL.md +87 -116
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/reference.md +170 -0
- package/node_modules/pi-lens/skills/pi-lens-write-tree-sitter-rule/SKILL.md +3 -1
- package/node_modules/pi-lens/vendor/grammars/tree-sitter-cue.wasm +0 -0
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +49 -0
- package/node_modules/pi-mcp-adapter/README.md +51 -6
- package/node_modules/pi-mcp-adapter/agent-dir.ts +12 -4
- package/node_modules/pi-mcp-adapter/cli.js +188 -5
- package/node_modules/pi-mcp-adapter/commands.ts +128 -22
- package/node_modules/pi-mcp-adapter/config.ts +28 -10
- package/node_modules/pi-mcp-adapter/direct-tools.ts +23 -19
- package/node_modules/pi-mcp-adapter/index.ts +219 -32
- package/node_modules/pi-mcp-adapter/init.ts +36 -4
- package/node_modules/pi-mcp-adapter/lifecycle.ts +315 -24
- package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +39 -6
- package/node_modules/pi-mcp-adapter/mcp-bearer-store.ts +387 -0
- package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +27 -3
- package/node_modules/pi-mcp-adapter/mcp-code.ts +4 -0
- package/node_modules/pi-mcp-adapter/mcp-panel.ts +42 -13
- package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +2 -1
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +46 -25
- package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +168 -0
- package/node_modules/pi-mcp-adapter/package.json +4 -1
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +5 -4
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +330 -0
- package/node_modules/pi-mcp-adapter/search-ranking.ts +92 -22
- package/node_modules/pi-mcp-adapter/server-manager.ts +145 -2
- package/node_modules/pi-mcp-adapter/session-recovery.ts +7 -0
- package/node_modules/pi-mcp-adapter/tool-approval.ts +15 -2
- package/node_modules/pi-mcp-adapter/tool-metadata.ts +38 -18
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +44 -4
- package/node_modules/pi-mcp-adapter/types.ts +95 -10
- package/node_modules/pi-mcp-adapter/ui-server.ts +18 -16
- package/node_modules/pi-mcp-adapter/utils.ts +70 -0
- package/node_modules/pi-web-access/CHANGELOG.md +37 -0
- package/node_modules/pi-web-access/README.md +38 -14
- package/node_modules/pi-web-access/anysearch.ts +4 -2
- package/node_modules/pi-web-access/auth-fetch.ts +148 -0
- package/node_modules/pi-web-access/brave.ts +16 -4
- package/node_modules/pi-web-access/chrome-cookies.ts +110 -23
- package/node_modules/pi-web-access/curator-page.ts +8 -3
- package/node_modules/pi-web-access/curator-server.ts +5 -1
- package/node_modules/pi-web-access/exa.ts +18 -7
- package/node_modules/pi-web-access/extract.ts +134 -37
- package/node_modules/pi-web-access/fetch-params.ts +17 -3
- package/node_modules/pi-web-access/firecrawl.ts +172 -12
- package/node_modules/pi-web-access/gemini-search.ts +33 -7
- package/node_modules/pi-web-access/index.ts +160 -104
- package/node_modules/pi-web-access/package.json +2 -2
- package/node_modules/pi-web-access/page-query.ts +4 -2
- package/node_modules/pi-web-access/parallel-mcp.ts +249 -0
- package/node_modules/pi-web-access/parallel.ts +2 -2
- package/node_modules/pi-web-access/query-rewrite.ts +51 -0
- package/node_modules/pi-web-access/serper.ts +211 -0
- package/node_modules/pi-web-access/summary-model-scope.ts +12 -4
- package/node_modules/pi-web-access/summary-review.ts +51 -23
- package/node_modules/pi-web-access/tavily.ts +16 -4
- package/node_modules/pi-web-access/utils.ts +87 -0
- package/node_modules/pi-web-access/valyu.ts +199 -0
- package/node_modules/pi-web-access/youtube-extract.ts +2 -2
- package/package.json +13 -13
|
@@ -24,19 +24,25 @@ import type {
|
|
|
24
24
|
SubagentType,
|
|
25
25
|
ThinkingLevel,
|
|
26
26
|
} from "./types.js"
|
|
27
|
-
import { addUsage } from "./usage.js"
|
|
28
|
-
import {
|
|
27
|
+
import { addUsage, type LifetimeUsage } from "./usage.js"
|
|
28
|
+
import {
|
|
29
|
+
cleanupWorktree,
|
|
30
|
+
createWorktree,
|
|
31
|
+
isWorktreeIsolationEnabled,
|
|
32
|
+
pruneWorktrees,
|
|
33
|
+
} from "./worktree.js"
|
|
29
34
|
|
|
30
35
|
export type OnAgentComplete = (record: AgentRecord) => void
|
|
31
36
|
export type OnAgentStart = (record: AgentRecord) => void
|
|
32
37
|
export type OnAgentCompact = (record: AgentRecord, info: CompactionInfo) => void
|
|
38
|
+
export type OnAgentUsage = (record: AgentRecord, usage: LifetimeUsage) => void
|
|
33
39
|
export type CompactionInfo = {
|
|
34
40
|
reason: "manual" | "threshold" | "overflow"
|
|
35
41
|
tokensBefore: number
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
/** Default max concurrent background agents. */
|
|
39
|
-
const DEFAULT_MAX_CONCURRENT =
|
|
45
|
+
const DEFAULT_MAX_CONCURRENT = 10
|
|
40
46
|
|
|
41
47
|
/**
|
|
42
48
|
* Validate a caller-supplied SpawnOptions.cwd. `undefined`/`null` mean "unset"
|
|
@@ -125,11 +131,7 @@ interface SpawnOptions {
|
|
|
125
131
|
/** Called at the end of each agentic turn with the cumulative count. */
|
|
126
132
|
onTurnEnd?: (turnCount: number) => void
|
|
127
133
|
/** Called once per assistant message_end with that message's usage delta. */
|
|
128
|
-
onAssistantUsage?: (usage:
|
|
129
|
-
input: number
|
|
130
|
-
output: number
|
|
131
|
-
cacheWrite: number
|
|
132
|
-
}) => void
|
|
134
|
+
onAssistantUsage?: (usage: LifetimeUsage) => void
|
|
133
135
|
/** Called when the session successfully compacts. */
|
|
134
136
|
onCompaction?: (info: CompactionInfo) => void
|
|
135
137
|
/** Nesting depth: top-level subagent = 1. */
|
|
@@ -158,11 +160,7 @@ interface ResumeOptions {
|
|
|
158
160
|
/** Called at the end of each resumed agentic turn with the cumulative count. */
|
|
159
161
|
onTurnEnd?: (turnCount: number) => void
|
|
160
162
|
/** Called once per assistant message_end with that message's usage delta. */
|
|
161
|
-
onAssistantUsage?: (usage:
|
|
162
|
-
input: number
|
|
163
|
-
output: number
|
|
164
|
-
cacheWrite: number
|
|
165
|
-
}) => void
|
|
163
|
+
onAssistantUsage?: (usage: LifetimeUsage) => void
|
|
166
164
|
/** Called when the session successfully compacts. */
|
|
167
165
|
onCompaction?: (info: CompactionInfo) => void
|
|
168
166
|
/**
|
|
@@ -176,12 +174,38 @@ interface ResumeOptions {
|
|
|
176
174
|
onStarted?: () => void
|
|
177
175
|
}
|
|
178
176
|
|
|
177
|
+
const CHILD_SHUTDOWN_TIMEOUT_MS = 3_000
|
|
178
|
+
|
|
179
|
+
async function shutdownChildSession(
|
|
180
|
+
session: AgentSession | undefined,
|
|
181
|
+
): Promise<void> {
|
|
182
|
+
try {
|
|
183
|
+
const runner = session?.extensionRunner
|
|
184
|
+
if (runner?.hasHandlers?.("session_shutdown")) {
|
|
185
|
+
await Promise.race([
|
|
186
|
+
runner.emit({ type: "session_shutdown", reason: "quit" }),
|
|
187
|
+
new Promise<void>((resolve) =>
|
|
188
|
+
setTimeout(resolve, CHILD_SHUTDOWN_TIMEOUT_MS).unref(),
|
|
189
|
+
),
|
|
190
|
+
])
|
|
191
|
+
}
|
|
192
|
+
} catch {
|
|
193
|
+
/* best-effort lifecycle cleanup */
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
session?.dispose?.()
|
|
197
|
+
} catch {
|
|
198
|
+
/* ignore */
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
179
202
|
export class AgentManager {
|
|
180
203
|
private agents = new Map<string, AgentRecord>()
|
|
181
204
|
private cleanupInterval: ReturnType<typeof setInterval>
|
|
182
205
|
private onComplete?: OnAgentComplete
|
|
183
206
|
private onStart?: OnAgentStart
|
|
184
207
|
private onCompact?: OnAgentCompact
|
|
208
|
+
private onUsage?: OnAgentUsage
|
|
185
209
|
private maxConcurrent: number
|
|
186
210
|
/** Base repos worktrees were created from — so dispose() can prune them all,
|
|
187
211
|
* not just the parent repo (caller-supplied cwd can target other repos). */
|
|
@@ -197,10 +221,12 @@ export class AgentManager {
|
|
|
197
221
|
maxConcurrent = DEFAULT_MAX_CONCURRENT,
|
|
198
222
|
onStart?: OnAgentStart,
|
|
199
223
|
onCompact?: OnAgentCompact,
|
|
224
|
+
onUsage?: OnAgentUsage,
|
|
200
225
|
) {
|
|
201
226
|
this.onComplete = onComplete
|
|
202
227
|
this.onStart = onStart
|
|
203
228
|
this.onCompact = onCompact
|
|
229
|
+
this.onUsage = onUsage
|
|
204
230
|
this.maxConcurrent = maxConcurrent
|
|
205
231
|
// Cleanup completed agents after 10 minutes (but keep sessions for resume)
|
|
206
232
|
this.cleanupInterval = setInterval(() => this.cleanup(), 60_000)
|
|
@@ -302,7 +328,7 @@ export class AgentManager {
|
|
|
302
328
|
// fail loud if not possible (no silent fallback to main tree). Done
|
|
303
329
|
// BEFORE state mutation so a throw doesn't leave the record half-running.
|
|
304
330
|
let worktreeCwd: string | undefined
|
|
305
|
-
if (options.isolation === "worktree") {
|
|
331
|
+
if (options.isolation === "worktree" && isWorktreeIsolationEnabled()) {
|
|
306
332
|
const wt = createWorktree(baseCwd, id)
|
|
307
333
|
if (!wt) {
|
|
308
334
|
throw new Error(
|
|
@@ -365,6 +391,7 @@ export class AgentManager {
|
|
|
365
391
|
onTextDelta: options.onTextDelta,
|
|
366
392
|
onAssistantUsage: (usage) => {
|
|
367
393
|
addUsage(record.lifetimeUsage, usage)
|
|
394
|
+
this.onUsage?.(record, usage)
|
|
368
395
|
options.onAssistantUsage?.(usage)
|
|
369
396
|
},
|
|
370
397
|
onCompaction: (info) => {
|
|
@@ -662,6 +689,7 @@ export class AgentManager {
|
|
|
662
689
|
onTurnEnd: options?.onTurnEnd,
|
|
663
690
|
onAssistantUsage: (usage) => {
|
|
664
691
|
addUsage(record.lifetimeUsage, usage)
|
|
692
|
+
this.onUsage?.(record, usage)
|
|
665
693
|
options?.onAssistantUsage?.(usage)
|
|
666
694
|
},
|
|
667
695
|
onCompaction: (info) => {
|
|
@@ -766,6 +794,7 @@ export class AgentManager {
|
|
|
766
794
|
onTurnEnd: options.onTurnEnd,
|
|
767
795
|
onAssistantUsage: (usage) => {
|
|
768
796
|
addUsage(record.lifetimeUsage, usage)
|
|
797
|
+
this.onUsage?.(record, usage)
|
|
769
798
|
options.onAssistantUsage?.(usage)
|
|
770
799
|
},
|
|
771
800
|
onCompaction: (info) => {
|
|
@@ -851,9 +880,10 @@ export class AgentManager {
|
|
|
851
880
|
|
|
852
881
|
/** Dispose a record's session and remove it from the map. */
|
|
853
882
|
private removeRecord(id: string, record: AgentRecord): void {
|
|
854
|
-
record.session
|
|
883
|
+
const session = record.session
|
|
855
884
|
record.session = undefined
|
|
856
885
|
this.agents.delete(id)
|
|
886
|
+
void shutdownChildSession(session)
|
|
857
887
|
}
|
|
858
888
|
|
|
859
889
|
private cleanup() {
|
|
@@ -926,14 +956,13 @@ export class AgentManager {
|
|
|
926
956
|
}
|
|
927
957
|
}
|
|
928
958
|
|
|
929
|
-
dispose() {
|
|
959
|
+
async dispose(): Promise<void> {
|
|
930
960
|
clearInterval(this.cleanupInterval)
|
|
931
961
|
// Clear queue
|
|
932
962
|
this.queue = []
|
|
933
|
-
|
|
934
|
-
record.session?.dispose()
|
|
935
|
-
}
|
|
963
|
+
const sessions = [...this.agents.values()].map((record) => record.session)
|
|
936
964
|
this.agents.clear()
|
|
965
|
+
await Promise.all(sessions.map((session) => shutdownChildSession(session)))
|
|
937
966
|
// Prune any orphaned git worktrees (crash recovery)
|
|
938
967
|
try {
|
|
939
968
|
pruneWorktrees(process.cwd())
|
|
@@ -41,6 +41,7 @@ import {
|
|
|
41
41
|
import { buildAgentPrompt, type PromptExtras } from "./prompts.js"
|
|
42
42
|
import { preloadSkills } from "./skill-loader.js"
|
|
43
43
|
import type { SubagentType, ThinkingLevel } from "./types.js"
|
|
44
|
+
import type { LifetimeUsage } from "./usage.js"
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
47
|
* Tool names registered by THIS extension. Single source of truth so the
|
|
@@ -349,6 +350,15 @@ export function setDefaultMaxTurns(n: number | undefined): void {
|
|
|
349
350
|
defaultMaxTurns = normalizeMaxTurns(n)
|
|
350
351
|
}
|
|
351
352
|
|
|
353
|
+
export function resolveEffectiveMaxTurns(
|
|
354
|
+
type: string,
|
|
355
|
+
explicit?: number,
|
|
356
|
+
): number | undefined {
|
|
357
|
+
return normalizeMaxTurns(
|
|
358
|
+
explicit ?? getAgentConfig(type)?.maxTurns ?? defaultMaxTurns,
|
|
359
|
+
)
|
|
360
|
+
}
|
|
361
|
+
|
|
352
362
|
/** Additional turns allowed after the soft limit steer message. */
|
|
353
363
|
let graceTurns = 5
|
|
354
364
|
|
|
@@ -442,11 +452,7 @@ export interface RunOptions {
|
|
|
442
452
|
* Lets callers maintain a lifetime accumulator that survives compaction
|
|
443
453
|
* (which replaces session.state.messages and resets stats-derived sums).
|
|
444
454
|
*/
|
|
445
|
-
onAssistantUsage?: (usage:
|
|
446
|
-
input: number
|
|
447
|
-
output: number
|
|
448
|
-
cacheWrite: number
|
|
449
|
-
}) => void
|
|
455
|
+
onAssistantUsage?: (usage: LifetimeUsage) => void
|
|
450
456
|
/**
|
|
451
457
|
* Called when the session successfully compacts. `tokensBefore` is upstream's
|
|
452
458
|
* pre-compaction context size estimate. Aborted compactions don't fire.
|
|
@@ -958,18 +964,21 @@ export async function runAgent(
|
|
|
958
964
|
type SessionOptions = NonNullable<Parameters<typeof createAgentSession>[0]>
|
|
959
965
|
const parentModelRuntime = (
|
|
960
966
|
ctx.modelRegistry as unknown as {
|
|
961
|
-
runtime?:
|
|
967
|
+
runtime?: unknown
|
|
962
968
|
}
|
|
963
969
|
).runtime
|
|
964
970
|
const sessionOpts: SessionOptions & {
|
|
965
971
|
modelRegistry: ExtensionContext["modelRegistry"]
|
|
972
|
+
modelRuntime?: unknown
|
|
966
973
|
} = {
|
|
967
974
|
cwd: effectiveCwd,
|
|
968
975
|
agentDir,
|
|
969
976
|
sessionManager,
|
|
970
977
|
settingsManager,
|
|
971
978
|
modelRegistry: ctx.modelRegistry,
|
|
972
|
-
...(parentModelRuntime != null && {
|
|
979
|
+
...(parentModelRuntime != null && {
|
|
980
|
+
modelRuntime: parentModelRuntime as never,
|
|
981
|
+
}),
|
|
973
982
|
model,
|
|
974
983
|
tools: sessionTools,
|
|
975
984
|
customTools: nestedTools,
|
|
@@ -1027,9 +1036,7 @@ export async function runAgent(
|
|
|
1027
1036
|
|
|
1028
1037
|
// Track turns for graceful max_turns enforcement
|
|
1029
1038
|
let turnCount = 0
|
|
1030
|
-
const maxTurns =
|
|
1031
|
-
options.maxTurns ?? agentConfig?.maxTurns ?? defaultMaxTurns,
|
|
1032
|
-
)
|
|
1039
|
+
const maxTurns = resolveEffectiveMaxTurns(type, options.maxTurns)
|
|
1033
1040
|
let softLimitReached = false
|
|
1034
1041
|
let aborted = false
|
|
1035
1042
|
|
|
@@ -1076,6 +1083,8 @@ export async function runAgent(
|
|
|
1076
1083
|
input: u.input ?? 0,
|
|
1077
1084
|
output: u.output ?? 0,
|
|
1078
1085
|
cacheWrite: u.cacheWrite ?? 0,
|
|
1086
|
+
cacheRead: u.cacheRead ?? 0,
|
|
1087
|
+
cost: u.cost?.total ?? 0,
|
|
1079
1088
|
})
|
|
1080
1089
|
}
|
|
1081
1090
|
if (event.type === "compaction_end" && !event.aborted && event.result) {
|
|
@@ -1130,11 +1139,7 @@ export async function resumeAgent(
|
|
|
1130
1139
|
onToolActivity?: (activity: ToolActivity) => void
|
|
1131
1140
|
/** Called at the end of each resumed agentic turn with the 1-based count. */
|
|
1132
1141
|
onTurnEnd?: (turnCount: number) => void
|
|
1133
|
-
onAssistantUsage?: (usage:
|
|
1134
|
-
input: number
|
|
1135
|
-
output: number
|
|
1136
|
-
cacheWrite: number
|
|
1137
|
-
}) => void
|
|
1142
|
+
onAssistantUsage?: (usage: LifetimeUsage) => void
|
|
1138
1143
|
onCompaction?: (info: {
|
|
1139
1144
|
reason: "manual" | "threshold" | "overflow"
|
|
1140
1145
|
tokensBefore: number
|
|
@@ -1177,6 +1182,8 @@ export async function resumeAgent(
|
|
|
1177
1182
|
input: u.input ?? 0,
|
|
1178
1183
|
output: u.output ?? 0,
|
|
1179
1184
|
cacheWrite: u.cacheWrite ?? 0,
|
|
1185
|
+
cacheRead: u.cacheRead ?? 0,
|
|
1186
|
+
cost: u.cost?.total ?? 0,
|
|
1180
1187
|
})
|
|
1181
1188
|
}
|
|
1182
1189
|
if (
|
|
@@ -6,7 +6,12 @@ import { existsSync, readdirSync, readFileSync } from "node:fs"
|
|
|
6
6
|
import { basename, join } from "node:path"
|
|
7
7
|
import { getAgentDir, parseFrontmatter } from "@earendil-works/pi-coding-agent"
|
|
8
8
|
import { BUILTIN_TOOL_NAMES } from "./agent-types.js"
|
|
9
|
-
import type {
|
|
9
|
+
import type {
|
|
10
|
+
AgentConfig,
|
|
11
|
+
IsolationMode,
|
|
12
|
+
MemoryScope,
|
|
13
|
+
ThinkingLevel,
|
|
14
|
+
} from "./types.js"
|
|
10
15
|
|
|
11
16
|
interface WarningState {
|
|
12
17
|
previous: Set<string>
|
|
@@ -124,7 +129,7 @@ function loadFromDir(
|
|
|
124
129
|
: undefined,
|
|
125
130
|
isolated: fm.isolated != null ? fm.isolated === true : undefined,
|
|
126
131
|
memory: parseMemory(fm.memory),
|
|
127
|
-
isolation: fm.isolation
|
|
132
|
+
isolation: parseIsolation(fm.isolation),
|
|
128
133
|
enabled: fm.enabled !== false, // default true; explicitly false disables
|
|
129
134
|
source,
|
|
130
135
|
sourcePath: path,
|
|
@@ -270,6 +275,25 @@ function parseMemory(val: unknown): MemoryScope | undefined {
|
|
|
270
275
|
return undefined
|
|
271
276
|
}
|
|
272
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Parse the `isolation` frontmatter field.
|
|
280
|
+
*
|
|
281
|
+
* `off` is kept as a value rather than folded into `undefined` because the two
|
|
282
|
+
* do not mean the same thing here: agent config outranks tool-call params, so
|
|
283
|
+
* `off` vetoes a caller's `worktree` while an absent field lets it through.
|
|
284
|
+
*
|
|
285
|
+
* pi's frontmatter parser is not YAML 1.1 — bare `off` and `no` arrive as
|
|
286
|
+
* strings and only `false` becomes a boolean — so all three spellings are
|
|
287
|
+
* accepted rather than leaving an author's intent silently dropped. Anything
|
|
288
|
+
* else stays `undefined`, as before.
|
|
289
|
+
*/
|
|
290
|
+
function parseIsolation(val: unknown): IsolationMode | undefined {
|
|
291
|
+
if (val === "worktree") return "worktree"
|
|
292
|
+
if (val === "off" || val === "none" || val === "no" || val === false)
|
|
293
|
+
return "off"
|
|
294
|
+
return undefined
|
|
295
|
+
}
|
|
296
|
+
|
|
273
297
|
/**
|
|
274
298
|
* Parse an inherit field (extensions, skills).
|
|
275
299
|
* omitted/true → true (inherit all); false/"none"/empty → false; csv → listed names.
|