@herbertgao/pi-extensions 2026.8.6 → 2026.8.8
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 +8 -6
- 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 +320 -22
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +94 -77
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/message-display.ts +79 -17
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +27 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +66 -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 +6 -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 +17 -13
- 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 +21 -6
- package/node_modules/@herbertgao/pi-subagents/src/usage.ts +129 -1
- package/node_modules/@herbertgao/pi-subagents/src/worktree.ts +20 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/README.md +5 -4
- package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +174 -100
- 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 +5 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/keyboard.md +10 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/localization.md +10 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/tool-schema.md +11 -5
- package/node_modules/@juicesharp/rpiv-ask-user-question/locales/en.json +5 -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 +140 -97
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/questionnaire-session.ts +63 -28
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/selectors/projections.ts +22 -15
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/state-reducer.ts +11 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/state.ts +14 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/tool/response-envelope.ts +11 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/tool/types.ts +11 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/multi-select-view.ts +31 -17
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/preview-block-renderer.ts +15 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/wrapping-select.ts +15 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/dialog-builder.ts +86 -38
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/tab-content-strategy.ts +76 -9
- package/node_modules/@narumitw/pi-btw/README.md +120 -111
- 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 +10 -6
- package/node_modules/@narumitw/pi-btw/src/btw.ts +36 -40
- 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 +45 -2
- package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +136 -45
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +44 -1856
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/package.json +4 -6
- package/node_modules/pi-lens/CHANGELOG.md +999 -0
- package/node_modules/pi-lens/README.md +117 -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 +126 -13
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +67 -11
- 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 +381 -13
- package/node_modules/pi-lens/dist/clients/biome-client.js +61 -30
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +428 -0
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +129 -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 +206 -0
- package/node_modules/pi-lens/dist/clients/cache-observability.js +353 -76
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +196 -0
- package/node_modules/pi-lens/dist/clients/cascade-format.js +20 -1
- 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/dead-code-client.js +123 -31
- 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 +84 -14
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +155 -0
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +25 -3
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +8 -2
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +8 -3
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +147 -33
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +298 -0
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +52 -2
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +256 -88
- 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/detekt.js +9 -6
- 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/hadolint.js +9 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +895 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +8 -6
- 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 +60 -53
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +16 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +25 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +20 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +44 -11
- 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 +17 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +32 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +47 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +14 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +127 -28
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +12 -7
- 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 +275 -13
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +21 -6
- 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 +734 -64
- 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 +188 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +9 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +21 -10
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +18 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +4 -2
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +28 -5
- package/node_modules/pi-lens/dist/clients/extension-log.js +22 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +8 -2
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +316 -0
- package/node_modules/pi-lens/dist/clients/finding-identity.js +88 -0
- 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 +31 -0
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +181 -8
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +109 -9
- package/node_modules/pi-lens/dist/clients/grammar-source.js +333 -10
- package/node_modules/pi-lens/dist/clients/host-ports.js +8 -0
- package/node_modules/pi-lens/dist/clients/installer/index.js +1114 -100
- 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 +87 -8
- package/node_modules/pi-lens/dist/clients/knip-client.js +310 -10
- package/node_modules/pi-lens/dist/clients/language-policy.js +8 -2
- package/node_modules/pi-lens/dist/clients/language-profile.js +9 -2
- package/node_modules/pi-lens/dist/clients/latency-logger.js +440 -11
- 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-flag-registry.js +8 -0
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +128 -8
- package/node_modules/pi-lens/dist/clients/lsp/client.js +1660 -164
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +83 -1
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +389 -0
- package/node_modules/pi-lens/dist/clients/lsp/index.js +2423 -151
- 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 +277 -16
- 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 +79 -3
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +43 -0
- 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/session.js +10 -2
- package/node_modules/pi-lens/dist/clients/module-report.js +22 -1
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +114 -23
- 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 +154 -33
- 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 +84 -14
- 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/trivy.js +50 -2
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +23 -9
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +3 -0
- package/node_modules/pi-lens/dist/clients/project-report.js +62 -27
- 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 +8 -3
- package/node_modules/pi-lens/dist/clients/read-guard.js +253 -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/builder.js +194 -31
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +52 -4
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +21 -0
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +6 -3
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +96 -7
- package/node_modules/pi-lens/dist/clients/runtime-context.js +8 -1
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +352 -45
- package/node_modules/pi-lens/dist/clients/runtime-session.js +373 -9
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +217 -22
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +212 -79
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +620 -67
- 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 +157 -24
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +184 -0
- package/node_modules/pi-lens/dist/clients/sg-runner.js +116 -22
- package/node_modules/pi-lens/dist/clients/single-flight.js +158 -0
- package/node_modules/pi-lens/dist/clients/source-filter.js +6 -2
- package/node_modules/pi-lens/dist/clients/stale-marker.js +17 -0
- package/node_modules/pi-lens/dist/clients/startup-scan.js +5 -2
- package/node_modules/pi-lens/dist/clients/startup-timing.js +19 -1
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +151 -16
- package/node_modules/pi-lens/dist/clients/tool-event.js +56 -5
- package/node_modules/pi-lens/dist/clients/tool-policy.js +125 -20
- 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-logger.js +1 -0
- 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/widget-state.js +336 -36
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +214 -14
- package/node_modules/pi-lens/dist/index.js +61407 -48577
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +476 -57
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +132 -43
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +46 -7
- package/node_modules/pi-lens/docs/agent-guide.md +6 -1
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +515 -506
- package/node_modules/pi-lens/docs/dispositions.md +21 -0
- package/node_modules/pi-lens/docs/features.md +19 -5
- package/node_modules/pi-lens/docs/globalconfig.md +3 -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 +19 -1
- package/node_modules/pi-lens/docs/usage.md +1 -0
- package/node_modules/pi-lens/package.json +27 -10
- 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 +15 -1
- 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-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 +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-test.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-js-test.yml +2 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-test.yml +2 -1
- 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-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 +57 -12
- 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-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 +22 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply.yml +23 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get-js.yml +33 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get.yml +34 -8
- 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 +6 -1
- 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 +53 -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/scripts/install-selftest.mjs +99 -11
- package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +75 -0
- package/node_modules/pi-lens/scripts/lib/warm-loader-cache.mjs +285 -0
- package/node_modules/pi-lens/scripts/warm-loader-cache.mjs +233 -0
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +2 -0
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/SKILL.md +80 -3
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/reference.md +41 -0
- package/node_modules/pi-lens/vendor/grammars/tree-sitter-cue.wasm +0 -0
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +36 -0
- package/node_modules/pi-mcp-adapter/README.md +47 -5
- package/node_modules/pi-mcp-adapter/cli.js +163 -1
- package/node_modules/pi-mcp-adapter/commands.ts +128 -22
- package/node_modules/pi-mcp-adapter/config.ts +25 -7
- package/node_modules/pi-mcp-adapter/direct-tools.ts +5 -4
- 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/metadata-cache.ts +32 -21
- package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +168 -0
- package/node_modules/pi-mcp-adapter/package.json +3 -1
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +5 -4
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +31 -37
- package/node_modules/pi-mcp-adapter/search-ranking.ts +92 -22
- package/node_modules/pi-mcp-adapter/server-manager.ts +140 -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-result-renderer.ts +44 -4
- package/node_modules/pi-mcp-adapter/types.ts +2 -0
- 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 +32 -13
- package/node_modules/pi-web-access/anysearch.ts +4 -2
- package/node_modules/pi-web-access/brave.ts +16 -4
- package/node_modules/pi-web-access/chrome-cookies.ts +86 -15
- package/node_modules/pi-web-access/curator-page.ts +6 -3
- package/node_modules/pi-web-access/curator-server.ts +4 -1
- package/node_modules/pi-web-access/data-uri-sanitize.ts +406 -0
- package/node_modules/pi-web-access/exa.ts +18 -7
- package/node_modules/pi-web-access/extract.ts +40 -5
- package/node_modules/pi-web-access/firecrawl.ts +18 -2
- package/node_modules/pi-web-access/gemini-search.ts +16 -4
- package/node_modules/pi-web-access/github-extract.ts +65 -36
- package/node_modules/pi-web-access/index.ts +60 -61
- package/node_modules/pi-web-access/openai-search.ts +17 -6
- package/node_modules/pi-web-access/package.json +1 -1
- 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/pdf-extract.ts +18 -5
- 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/ssrf-protection.ts +12 -2
- package/node_modules/pi-web-access/summary-model-scope.ts +12 -4
- package/node_modules/pi-web-access/summary-review.ts +44 -22
- 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/package.json +14 -14
|
@@ -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.
|
|
@@ -1030,9 +1036,7 @@ export async function runAgent(
|
|
|
1030
1036
|
|
|
1031
1037
|
// Track turns for graceful max_turns enforcement
|
|
1032
1038
|
let turnCount = 0
|
|
1033
|
-
const maxTurns =
|
|
1034
|
-
options.maxTurns ?? agentConfig?.maxTurns ?? defaultMaxTurns,
|
|
1035
|
-
)
|
|
1039
|
+
const maxTurns = resolveEffectiveMaxTurns(type, options.maxTurns)
|
|
1036
1040
|
let softLimitReached = false
|
|
1037
1041
|
let aborted = false
|
|
1038
1042
|
|
|
@@ -1079,6 +1083,8 @@ export async function runAgent(
|
|
|
1079
1083
|
input: u.input ?? 0,
|
|
1080
1084
|
output: u.output ?? 0,
|
|
1081
1085
|
cacheWrite: u.cacheWrite ?? 0,
|
|
1086
|
+
cacheRead: u.cacheRead ?? 0,
|
|
1087
|
+
cost: u.cost?.total ?? 0,
|
|
1082
1088
|
})
|
|
1083
1089
|
}
|
|
1084
1090
|
if (event.type === "compaction_end" && !event.aborted && event.result) {
|
|
@@ -1133,11 +1139,7 @@ export async function resumeAgent(
|
|
|
1133
1139
|
onToolActivity?: (activity: ToolActivity) => void
|
|
1134
1140
|
/** Called at the end of each resumed agentic turn with the 1-based count. */
|
|
1135
1141
|
onTurnEnd?: (turnCount: number) => void
|
|
1136
|
-
onAssistantUsage?: (usage:
|
|
1137
|
-
input: number
|
|
1138
|
-
output: number
|
|
1139
|
-
cacheWrite: number
|
|
1140
|
-
}) => void
|
|
1142
|
+
onAssistantUsage?: (usage: LifetimeUsage) => void
|
|
1141
1143
|
onCompaction?: (info: {
|
|
1142
1144
|
reason: "manual" | "threshold" | "overflow"
|
|
1143
1145
|
tokensBefore: number
|
|
@@ -1180,6 +1182,8 @@ export async function resumeAgent(
|
|
|
1180
1182
|
input: u.input ?? 0,
|
|
1181
1183
|
output: u.output ?? 0,
|
|
1182
1184
|
cacheWrite: u.cacheWrite ?? 0,
|
|
1185
|
+
cacheRead: u.cacheRead ?? 0,
|
|
1186
|
+
cost: u.cost?.total ?? 0,
|
|
1183
1187
|
})
|
|
1184
1188
|
}
|
|
1185
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.
|