@herbertgao/pi-extensions 2026.8.4 → 2026.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +11 -3
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +11 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +24 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +91 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +7 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +74 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +7 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +21 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +4 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/markdown-enhance.ts +53 -14
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +22 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/result.ts +2 -4
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +18 -0
- package/node_modules/@herbertgao/pi-subagents/package.json +8 -4
- package/node_modules/@herbertgao/pi-subagents/src/agent-color.ts +72 -67
- package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +255 -0
- package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +191 -3
- package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +20 -4
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +289 -113
- package/node_modules/@herbertgao/pi-subagents/src/output-file.ts +24 -1
- package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +24 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/fleet-list.ts +15 -6
- package/node_modules/@herbertgao/pi-subagents/src/ui/schedule-menu.ts +9 -8
- package/node_modules/@herbertgao/pi-subagents/src/ui/select-item.ts +48 -0
- package/node_modules/@herbertgao/pi-subagents/src/worktree.ts +9 -5
- package/node_modules/@juicesharp/rpiv-ask-user-question/README.md +2 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +20 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/hosts.md +6 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/keyboard.md +7 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/build-questionnaire.ts +7 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/key-router.ts +16 -5
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/questionnaire-session.ts +4 -2
- package/node_modules/@narumitw/pi-btw/README.md +32 -24
- package/node_modules/@narumitw/pi-btw/package.json +6 -6
- package/node_modules/@narumitw/pi-btw/src/btw.ts +4 -2
- package/node_modules/@narumitw/pi-btw/src/menu.ts +34 -13
- package/node_modules/@narumitw/pi-btw/src/settings.ts +22 -2
- package/node_modules/pi-lens/CHANGELOG.md +2535 -954
- package/node_modules/pi-lens/README.md +13 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +73 -18
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +314 -0
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +21 -4
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +14 -7
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +68 -16
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +37 -10
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +63 -0
- package/node_modules/pi-lens/dist/clients/atomic-write.js +114 -14
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +193 -23
- package/node_modules/pi-lens/dist/clients/biome-client.js +136 -24
- package/node_modules/pi-lens/dist/clients/bootstrap.js +11 -2
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +34 -0
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.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 +19 -4
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +47 -5
- package/node_modules/pi-lens/dist/clients/cache-manager.js +97 -9
- package/node_modules/pi-lens/dist/clients/cache-observability.js +301 -14
- package/node_modules/pi-lens/dist/clients/call-graph.js +449 -117
- package/node_modules/pi-lens/dist/clients/cascade-format.js +57 -2
- package/node_modules/pi-lens/dist/clients/child-unref.js +85 -0
- package/node_modules/pi-lens/dist/clients/codebase-model.js +52 -23
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +40 -0
- package/node_modules/pi-lens/dist/clients/complexity-client.js +2 -1
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +26 -0
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +42 -0
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +137 -31
- package/node_modules/pi-lens/dist/clients/debug-handles.js +206 -0
- package/node_modules/pi-lens/dist/clients/debug-heap.js +167 -0
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +153 -0
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +361 -77
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +65 -13
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +18 -4
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +176 -29
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +23 -7
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +8 -18
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +8 -5
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +35 -0
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +17 -8
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +1172 -683
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +14 -0
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +11 -1
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +50 -0
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +135 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +23 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +5 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +3 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +154 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +3 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +5 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +47 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +4 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +9 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +4 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +2 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +163 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +37 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +13 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +226 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +69 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +3 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +473 -42
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +22 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +97 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +5 -4
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +18 -4
- package/node_modules/pi-lens/dist/clients/durable-store.js +97 -0
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +17 -0
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +94 -3
- package/node_modules/pi-lens/dist/clients/extension-log.js +432 -0
- package/node_modules/pi-lens/dist/clients/extension-mode.js +73 -0
- package/node_modules/pi-lens/dist/clients/file-kinds.js +57 -0
- package/node_modules/pi-lens/dist/clients/file-role.js +18 -3
- package/node_modules/pi-lens/dist/clients/file-utils.js +56 -34
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +5 -1
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +51 -7
- package/node_modules/pi-lens/dist/clients/format-service.js +24 -8
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +8 -0
- package/node_modules/pi-lens/dist/clients/formatters.js +358 -61
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +148 -15
- package/node_modules/pi-lens/dist/clients/git-guard.js +678 -11
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +4 -0
- package/node_modules/pi-lens/dist/clients/go-client.js +23 -40
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +124 -7
- package/node_modules/pi-lens/dist/clients/grammar-source.js +12 -4
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +21 -3
- package/node_modules/pi-lens/dist/clients/host-ports.js +31 -0
- package/node_modules/pi-lens/dist/clients/installer/index.js +395 -100
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +142 -172
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +27 -55
- package/node_modules/pi-lens/dist/clients/knip-client.js +58 -42
- package/node_modules/pi-lens/dist/clients/language-policy.js +14 -2
- package/node_modules/pi-lens/dist/clients/language-profile.js +13 -7
- package/node_modules/pi-lens/dist/clients/latency-logger.js +72 -1
- package/node_modules/pi-lens/dist/clients/lens-config.js +12 -1
- package/node_modules/pi-lens/dist/clients/lens-engine.js +86 -17
- package/node_modules/pi-lens/dist/clients/lens-events.js +63 -9
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +16 -0
- package/node_modules/pi-lens/dist/clients/lens-map.js +94 -19
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +73 -0
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +30 -4
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +59 -14
- package/node_modules/pi-lens/dist/clients/lsp/client.js +662 -56
- package/node_modules/pi-lens/dist/clients/lsp/config.js +13 -2
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +115 -0
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +1012 -121
- package/node_modules/pi-lens/dist/clients/lsp/index.js +2025 -800
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +32 -26
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +1 -1
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +83 -0
- package/node_modules/pi-lens/dist/clients/lsp/server.js +437 -86
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +96 -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 +18 -3
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +28 -4
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +8 -0
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +248 -0
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +127 -32
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +157 -24
- package/node_modules/pi-lens/dist/clients/mcp/session.js +235 -14
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +115 -0
- package/node_modules/pi-lens/dist/clients/metrics-client.js +2 -1
- package/node_modules/pi-lens/dist/clients/metrics-history.js +2 -1
- package/node_modules/pi-lens/dist/clients/model-provider.js +53 -0
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +5 -0
- package/node_modules/pi-lens/dist/clients/module-report.js +168 -3
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +319 -118
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +1 -1
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +120 -5
- package/node_modules/pi-lens/dist/clients/path-utils.js +110 -9
- package/node_modules/pi-lens/dist/clients/pipeline.js +76 -15
- package/node_modules/pi-lens/dist/clients/print-mode.js +21 -0
- package/node_modules/pi-lens/dist/clients/project-changes.js +40 -0
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +3 -2
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +1 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +8 -0
- 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/scanner.js +21 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +86 -9
- package/node_modules/pi-lens/dist/clients/project-report.js +27 -13
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +175 -20
- package/node_modules/pi-lens/dist/clients/project-trust.js +181 -0
- package/node_modules/pi-lens/dist/clients/quiet-window.js +18 -4
- package/node_modules/pi-lens/dist/clients/read-bridge.js +147 -0
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +159 -1
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +150 -29
- package/node_modules/pi-lens/dist/clients/read-guard.js +185 -4
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +70 -84
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +1122 -221
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +2 -1
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +21 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +24 -0
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +46 -0
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +57 -6
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +51 -3
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +30 -1
- package/node_modules/pi-lens/dist/clients/ruff-client.js +27 -44
- package/node_modules/pi-lens/dist/clients/run-duration.js +55 -0
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +257 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +129 -12
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +242 -26
- package/node_modules/pi-lens/dist/clients/runtime-session.js +428 -117
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +71 -48
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +342 -33
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +619 -93
- package/node_modules/pi-lens/dist/clients/rust-client.js +23 -38
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +777 -62
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +90 -6
- package/node_modules/pi-lens/dist/clients/session-state-store.js +3 -2
- package/node_modules/pi-lens/dist/clients/sg-runner.js +424 -196
- package/node_modules/pi-lens/dist/clients/slow-fs.js +2 -1
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +231 -0
- package/node_modules/pi-lens/dist/clients/source-filter.js +184 -20
- package/node_modules/pi-lens/dist/clients/source-walker.js +66 -10
- package/node_modules/pi-lens/dist/clients/startup-scan.js +15 -16
- package/node_modules/pi-lens/dist/clients/startup-timing.js +7 -1
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +469 -32
- package/node_modules/pi-lens/dist/clients/tool-event.js +35 -0
- package/node_modules/pi-lens/dist/clients/tool-policy.js +390 -39
- package/node_modules/pi-lens/dist/clients/tool-render.js +155 -0
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +76 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +6 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +419 -50
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +21 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +7 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +7 -2
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +44 -7
- package/node_modules/pi-lens/dist/clients/user-notify.js +51 -0
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +57 -0
- package/node_modules/pi-lens/dist/clients/warm-attach.js +50 -13
- package/node_modules/pi-lens/dist/clients/widget-state.js +300 -43
- package/node_modules/pi-lens/dist/clients/word-index.js +680 -81
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +89 -6
- package/node_modules/pi-lens/dist/index.js +51785 -36118
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +182 -29
- package/node_modules/pi-lens/dist/mcp/server.js +219 -46
- 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/ast-grep-search.js +93 -27
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +5 -2
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +203 -38
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +210 -42
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +46 -3
- package/node_modules/pi-lens/dist/tools/module-report.js +9 -0
- package/node_modules/pi-lens/dist/tools/symbol-search.js +1 -1
- package/node_modules/pi-lens/docs/agent-guide.md +40 -15
- package/node_modules/pi-lens/docs/agent-tools.md +21 -10
- package/node_modules/pi-lens/docs/analysisall.md +192 -0
- package/node_modules/pi-lens/docs/api-ports-inventory.md +165 -0
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +14 -3
- package/node_modules/pi-lens/docs/durable-store-audit-1202.md +32 -0
- package/node_modules/pi-lens/docs/environment-variables.md +44 -0
- package/node_modules/pi-lens/docs/fable.md +27 -0
- package/node_modules/pi-lens/docs/features.md +45 -3
- package/node_modules/pi-lens/docs/globalconfig.md +56 -1
- package/node_modules/pi-lens/docs/language-coverage.md +4 -3
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +2 -2
- package/node_modules/pi-lens/docs/mcp.md +37 -4
- package/node_modules/pi-lens/docs/servercapabilities.md +3 -3
- package/node_modules/pi-lens/docs/settings.md +18 -1
- package/node_modules/pi-lens/docs/tools.md +4 -1
- package/node_modules/pi-lens/docs/usage.md +41 -5
- package/node_modules/pi-lens/docs/word-index.md +35 -0
- package/node_modules/pi-lens/package.json +10 -10
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-bare-except-test.yml +49 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-bare-host-path-in-win32-branch-test.yml +87 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-chained-type-assertions-test.yml +8 -0
- 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-nested-links-test.yml +11 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-raw-json-store-write-test.yml +17 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-js-test.yml +7 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-test.yml +7 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-js-test.yml +8 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-test.yml +8 -0
- 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-win32-isabsolute-for-qualification-test.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-except.yml +3 -15
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-host-path-in-win32-branch.yml +25 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-chained-type-assertions.yml +21 -0
- 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-nested-links.yml +7 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-raw-json-store-write.yml +30 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply-js.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get-js.yml +13 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-laundering.yml +27 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-win32-isabsolute-for-qualification.yml +23 -0
- package/node_modules/pi-lens/rules/tree-sitter-queries/tsx/no-nested-links.yml +4 -6
- package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/duplicate-function-arg.yml +2 -2
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +134 -2
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +10 -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 +8 -114
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/reference.md +129 -0
- package/node_modules/pi-lens/skills/pi-lens-write-tree-sitter-rule/SKILL.md +3 -1
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +38 -0
- package/node_modules/pi-mcp-adapter/README.md +38 -4
- package/node_modules/pi-mcp-adapter/agent-dir.ts +12 -4
- package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +1 -1
- package/node_modules/pi-mcp-adapter/cli.js +25 -4
- package/node_modules/pi-mcp-adapter/commands.ts +15 -7
- package/node_modules/pi-mcp-adapter/config.ts +4 -4
- package/node_modules/pi-mcp-adapter/direct-tools.ts +58 -8
- package/node_modules/pi-mcp-adapter/host-html-template.ts +0 -8
- package/node_modules/pi-mcp-adapter/index.ts +8 -3
- package/node_modules/pi-mcp-adapter/init.ts +29 -5
- package/node_modules/pi-mcp-adapter/lifecycle.ts +0 -4
- package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +1 -2
- package/node_modules/pi-mcp-adapter/mcp-auth.ts +60 -2
- package/node_modules/pi-mcp-adapter/mcp-panel.ts +45 -9
- package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +22 -20
- package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +2 -1
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +37 -4
- package/node_modules/pi-mcp-adapter/npx-resolver.ts +81 -26
- package/node_modules/pi-mcp-adapter/package.json +4 -3
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +108 -26
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +336 -0
- package/node_modules/pi-mcp-adapter/search-ranking.ts +86 -7
- package/node_modules/pi-mcp-adapter/server-manager.ts +41 -7
- package/node_modules/pi-mcp-adapter/session-recovery.ts +8 -2
- package/node_modules/pi-mcp-adapter/tool-approval.ts +48 -7
- package/node_modules/pi-mcp-adapter/tool-metadata.ts +62 -4
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +138 -12
- package/node_modules/pi-mcp-adapter/types.ts +176 -27
- package/node_modules/pi-mcp-adapter/ui-server.ts +20 -1
- package/node_modules/pi-web-access/CHANGELOG.md +14 -0
- package/node_modules/pi-web-access/README.md +18 -12
- package/node_modules/pi-web-access/auth-fetch.ts +148 -0
- package/node_modules/pi-web-access/chrome-cookies.ts +110 -23
- 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 +106 -34
- 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 +18 -4
- package/node_modules/pi-web-access/index.ts +120 -48
- package/node_modules/pi-web-access/package.json +2 -2
- package/node_modules/pi-web-access/summary-review.ts +11 -5
- package/node_modules/pi-web-access/youtube-extract.ts +2 -2
- package/package.json +12 -13
- package/node_modules/pi-lens/dist/clients/ast-grep-parser.js +0 -86
- package/node_modules/pi-lens/dist/clients/lsp/interactive-install.js +0 -367
- package/node_modules/pi-lens/dist/clients/lsp/lsp-index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/server-strategies.js +0 -5
- package/node_modules/pi-lens/dist/clients/project-metadata.js +0 -690
- package/node_modules/pi-lens/dist/clients/source-groups.js +0 -96
- package/node_modules/pi-lens/dist/clients/startup-marker.js +0 -6
- package/node_modules/pi-lens/dist/clients/types.js +0 -11
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in compact one-line tool-result rendering (#1327).
|
|
3
|
+
*
|
|
4
|
+
* pi renders a tool call as two rows by default: the tool-name/args row
|
|
5
|
+
* (`renderCall`) and the result row (`renderResult`). Most pi-lens tools
|
|
6
|
+
* already supply a `renderResult` via `tools/render-compact.ts`'s
|
|
7
|
+
* `compactRenderResult` — a collapsed one-line summary (brand-blue) plus the
|
|
8
|
+
* full output when expanded. This module adds a further, OPT-IN layer that
|
|
9
|
+
* collapses those two rows into ONE — `<status glyph> <name> — <summary>` —
|
|
10
|
+
* by reusing each tool's EXISTING collapsed summary text verbatim (never
|
|
11
|
+
* inventing new strings) and re-styling it through semantic `Theme` tokens
|
|
12
|
+
* instead of a fixed color.
|
|
13
|
+
*
|
|
14
|
+
* Applied generically at the registration seam (index.ts's registerTool
|
|
15
|
+
* loop), not as a per-tool copy: `wrapToolForCompactLine` decorates any
|
|
16
|
+
* `ToolDefinition` that already defines `renderResult`; tools without one are
|
|
17
|
+
* returned untouched. Callers gate the whole thing behind the `ui.compactToolLine`
|
|
18
|
+
* flag (`clients/lens-flag-registry.ts`) — when it is off, the ORIGINAL tool
|
|
19
|
+
* array is registered unwrapped, so behavior is byte-identical to today (no
|
|
20
|
+
* `renderCall`/`renderResult` are added or altered).
|
|
21
|
+
*
|
|
22
|
+
* `clients/` intentionally does NOT import `tools/render-compact.ts` (tools/
|
|
23
|
+
* depends on clients/, never the reverse — see AGENTS.md's seam discipline),
|
|
24
|
+
* so `fullTextOf` is duplicated here in miniature rather than inverting that
|
|
25
|
+
* dependency.
|
|
26
|
+
*
|
|
27
|
+
* API limitation vs the issue's ask: `ToolRenderResultOptions` (the type pi
|
|
28
|
+
* hands `renderResult`) exposes only `{ expanded, isPartial }` — no
|
|
29
|
+
* `outputPad`. `outputPad` exists solely on the unrelated `MessageRenderOptions`
|
|
30
|
+
* (custom message renderers, e.g. clients/turn-summary-render.ts), not on the
|
|
31
|
+
* tool-result render path. There is nothing to honor here; the collapsed line
|
|
32
|
+
* still respects the render width via `fitLines` so it never overflows the
|
|
33
|
+
* terminal (#513's crash class).
|
|
34
|
+
*/
|
|
35
|
+
import { stripAnsi } from "./sanitize.js";
|
|
36
|
+
import { fitLines } from "./tui-fit.js";
|
|
37
|
+
const EMPTY_COMPONENT = {
|
|
38
|
+
render: () => [],
|
|
39
|
+
invalidate: () => { },
|
|
40
|
+
};
|
|
41
|
+
function fullTextOf(result) {
|
|
42
|
+
return (result.content ?? [])
|
|
43
|
+
.filter((c) => c.type === "text" && typeof c.text === "string")
|
|
44
|
+
.map((c) => c.text)
|
|
45
|
+
.join("\n");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build the collapsed compact line from a tool's ALREADY-COMPUTED summary
|
|
49
|
+
* text (verbatim reuse — see module doc). `summaryText` is expected in the
|
|
50
|
+
* `<name/hint> — <detail>` shape every pi-lens summarizer already produces
|
|
51
|
+
* (e.g. `lens_diagnostics all — 3 blocking · 3 errors · 2 warnings (1 file)`);
|
|
52
|
+
* when the separator is absent the whole string is styled as one span
|
|
53
|
+
* instead of guessing a split point.
|
|
54
|
+
*
|
|
55
|
+
* Pure and theme-driven: a status glyph (success/error tokens), the name
|
|
56
|
+
* portion (`toolTitle`, bold), and the detail portion (`error`/`toolOutput`)
|
|
57
|
+
* are each styled through semantic `Theme.fg` tokens — never a fixed color.
|
|
58
|
+
*/
|
|
59
|
+
export function buildCompactToolLine(summaryText, isError, theme) {
|
|
60
|
+
const glyph = isError ? theme.fg("error", "✗") : theme.fg("success", "✓");
|
|
61
|
+
const detailColor = isError ? "error" : "toolOutput";
|
|
62
|
+
const sepIndex = summaryText.indexOf(" — ");
|
|
63
|
+
if (sepIndex === -1) {
|
|
64
|
+
return `${glyph} ${theme.fg(detailColor, summaryText)}`;
|
|
65
|
+
}
|
|
66
|
+
const namePart = summaryText.slice(0, sepIndex);
|
|
67
|
+
const detailPart = summaryText.slice(sepIndex + " — ".length);
|
|
68
|
+
const styledName = theme.fg("toolTitle", theme.bold(namePart));
|
|
69
|
+
const styledDash = theme.fg("dim", "—");
|
|
70
|
+
const styledDetail = theme.fg(detailColor, detailPart);
|
|
71
|
+
return `${glyph} ${styledName} ${styledDash} ${styledDetail}`;
|
|
72
|
+
}
|
|
73
|
+
/** Render a component at a wide probe width to capture its full text,
|
|
74
|
+
* stripped of ANSI — the collapsed summary is re-styled through this
|
|
75
|
+
* module's own theme tokens rather than carrying over fixed-color escapes
|
|
76
|
+
* (e.g. tools/render-compact.ts's brand-blue). */
|
|
77
|
+
function captureComponentText(component) {
|
|
78
|
+
try {
|
|
79
|
+
const lines = component.render(4096);
|
|
80
|
+
return stripAnsi(lines.join(" ")).trim();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return "";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Decorate a single tool definition with the opt-in compact-line renderers.
|
|
88
|
+
* Tools with no `renderResult` are returned UNCHANGED (nothing to compact).
|
|
89
|
+
* Call this only when the `ui.compactToolLine` flag is already known to be
|
|
90
|
+
* on — the caller (index.ts) skips the wrap entirely when it is off, which
|
|
91
|
+
* is what keeps the off path byte-identical to today rather than this
|
|
92
|
+
* function branching on a live flag read per render.
|
|
93
|
+
*/
|
|
94
|
+
export function wrapToolForCompactLine(tool) {
|
|
95
|
+
const originalRenderResult = tool.renderResult;
|
|
96
|
+
if (!originalRenderResult)
|
|
97
|
+
return tool;
|
|
98
|
+
const originalRenderCall = tool.renderCall;
|
|
99
|
+
const renderCall = (args, theme, context) => {
|
|
100
|
+
// Only blank the call row once a settled (non-partial) result exists —
|
|
101
|
+
// `renderResult` is about to paint the single combined line. While the
|
|
102
|
+
// tool is still running/streaming, keep showing the normal call row
|
|
103
|
+
// (mirrors the host's own createCallFallback) so the UI isn't blank.
|
|
104
|
+
if (!context.expanded && context.isPartial === false) {
|
|
105
|
+
return EMPTY_COMPONENT;
|
|
106
|
+
}
|
|
107
|
+
if (originalRenderCall)
|
|
108
|
+
return originalRenderCall(args, theme, context);
|
|
109
|
+
// Mirrors the host's own createCallFallback exactly: styled `tool.name`
|
|
110
|
+
// (the registered name, e.g. "lens_diagnostics"), not the display label.
|
|
111
|
+
const line = theme.fg("toolTitle", theme.bold(tool.name));
|
|
112
|
+
return {
|
|
113
|
+
render: (width) => fitLines([line], width),
|
|
114
|
+
invalidate: () => { },
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const renderResult = (result, options, theme, context) => {
|
|
118
|
+
if (options.expanded) {
|
|
119
|
+
return originalRenderResult(result, options, theme, context);
|
|
120
|
+
}
|
|
121
|
+
let summaryText;
|
|
122
|
+
try {
|
|
123
|
+
// Probe the tool's OWN collapsed renderer to capture its already-built
|
|
124
|
+
// summary text; `lastComponent` is cleared so the probe never reuses
|
|
125
|
+
// (and thereby mutates) the real row's retained component.
|
|
126
|
+
const probeContext = { ...context, lastComponent: undefined };
|
|
127
|
+
const component = originalRenderResult(result, { ...options, expanded: false }, theme, probeContext);
|
|
128
|
+
summaryText = captureComponentText(component);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
summaryText = "";
|
|
132
|
+
}
|
|
133
|
+
const resultLike = result;
|
|
134
|
+
if (!summaryText) {
|
|
135
|
+
summaryText = stripAnsi(fullTextOf(resultLike).split("\n")[0] ?? "").trim();
|
|
136
|
+
}
|
|
137
|
+
// pi invokes tool renderers with `{ content, details }` -- the failure
|
|
138
|
+
// bit lives on `context.isError`, not the result (#1341 review). Keep
|
|
139
|
+
// `result.isError` as a fallback for direct/legacy callers.
|
|
140
|
+
const contextIsError = context?.isError;
|
|
141
|
+
const isError = contextIsError ?? resultLike.isError === true;
|
|
142
|
+
const line = buildCompactToolLine(summaryText, isError === true, theme);
|
|
143
|
+
return {
|
|
144
|
+
render: (width) => fitLines([line], width),
|
|
145
|
+
invalidate: () => { },
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
return { ...tool, renderCall, renderResult };
|
|
149
|
+
}
|
|
150
|
+
/** Wrap every tool in an array — tools without `renderResult` pass through
|
|
151
|
+
* unchanged. Used by index.ts's registerTool loop, only when the
|
|
152
|
+
* `ui.compactToolLine` flag resolved on for this session. */
|
|
153
|
+
export function wrapToolsForCompactLine(tools) {
|
|
154
|
+
return tools.map((tool) => wrapToolForCompactLine(tool));
|
|
155
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { logLatency } from "./latency-logger.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether the host will send this model deferred (searchable) tool
|
|
4
|
+
* definitions rather than the full inline list.
|
|
5
|
+
*
|
|
6
|
+
* Read the host's own decision off `ctx.model.compat` — pi resolves that
|
|
7
|
+
* flag from the model config (`core/model-config`, `compat.supportsToolReferences`)
|
|
8
|
+
* and it is the only capability signal a consumer can honestly observe.
|
|
9
|
+
* A missing flag means "unknown", which we report as false: this value only
|
|
10
|
+
* annotates the `tool_set_mutation` log line, so guessing high would make the
|
|
11
|
+
* log lie, while guessing low merely under-claims.
|
|
12
|
+
*/
|
|
13
|
+
export function supportsDeferredTools(model) {
|
|
14
|
+
return model?.compat?.supportsToolReferences === true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A fresh logical conversation — the only reasons that start with an empty
|
|
18
|
+
* activation memory. `undefined` is included because older hosts fire
|
|
19
|
+
* `session_start` with no `reason` at all.
|
|
20
|
+
*
|
|
21
|
+
* Every OTHER reason (fork/reload/resume) is a session REBUILD: the host
|
|
22
|
+
* constructs a brand-new AgentSession with `includeAllExtensionTools: true`
|
|
23
|
+
* (pi `core/agent-session.js`), so every registered pi-lens tool is active
|
|
24
|
+
* again by the time our handler runs, while pi-lens's own extension closure
|
|
25
|
+
* state survives. Those reasons must RESTORE the previous posture, not skip.
|
|
26
|
+
*/
|
|
27
|
+
export function isFreshSessionStart(reason) {
|
|
28
|
+
return reason === undefined || reason === "startup" || reason === "new";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compute the active-tool set pi-lens wants: everything currently active that
|
|
32
|
+
* is not a lazy tool, plus exactly the lazy tools the model activated in this
|
|
33
|
+
* logical session (`remembered`).
|
|
34
|
+
*
|
|
35
|
+
* On startup/new `remembered` is empty and this is the plain baseline shrink.
|
|
36
|
+
* On fork/reload/resume the host has just re-activated all registered tools,
|
|
37
|
+
* and this restores the parent's posture character-for-character — which both
|
|
38
|
+
* preserves the model's activations and keeps the advertised tool list equal
|
|
39
|
+
* to the one the prompt cache prefix was built from.
|
|
40
|
+
*/
|
|
41
|
+
export function planToolSet(active, lazyNames, remembered) {
|
|
42
|
+
const desired = active.filter(
|
|
43
|
+
// Lazy tools are dropped here and re-appended below in REMEMBERED
|
|
44
|
+
// (= activation) order. Keeping them in the host's registration
|
|
45
|
+
// position would restore the right SET in the wrong ARRAY order, and
|
|
46
|
+
// the active-tools array is what serializes into the request's tool
|
|
47
|
+
// block — a transposition is a changed prefix, i.e. a cache miss.
|
|
48
|
+
(name) => !lazyNames.has(name));
|
|
49
|
+
// A remembered tool the host did not list as active still belongs in the
|
|
50
|
+
// set (defensive: the host controls what `getActiveTools` returns).
|
|
51
|
+
const desiredSet = new Set(desired);
|
|
52
|
+
for (const name of remembered) {
|
|
53
|
+
if (!desiredSet.has(name)) {
|
|
54
|
+
desired.push(name);
|
|
55
|
+
desiredSet.add(name);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const activeSet = new Set(active);
|
|
59
|
+
const removedCount = active.filter((name) => !desiredSet.has(name)).length;
|
|
60
|
+
const addedCount = desired.filter((name) => !activeSet.has(name)).length;
|
|
61
|
+
return {
|
|
62
|
+
desired,
|
|
63
|
+
addedCount,
|
|
64
|
+
removedCount,
|
|
65
|
+
changed: addedCount > 0 || removedCount > 0,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function recordToolSetMutation(mutation) {
|
|
69
|
+
logLatency({
|
|
70
|
+
type: "phase",
|
|
71
|
+
filePath: "<pi-lens>",
|
|
72
|
+
phase: "tool_set_mutation",
|
|
73
|
+
durationMs: 0,
|
|
74
|
+
metadata: { ...mutation },
|
|
75
|
+
});
|
|
76
|
+
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* the Map's first key removes the least-recently-used file, not merely the
|
|
12
12
|
* oldest insertion, and hot per-edit files survive scan traffic (#890).
|
|
13
13
|
*/
|
|
14
|
+
import { logTreeSitterDiagnostic } from "./tree-sitter-logger.js";
|
|
14
15
|
import * as crypto from "node:crypto";
|
|
15
16
|
import * as fs from "node:fs";
|
|
16
17
|
import { normalizeFilePath } from "./path-utils.js";
|
|
@@ -47,7 +48,11 @@ export class TreeCache {
|
|
|
47
48
|
this.counterObserver = counterObserver;
|
|
48
49
|
this.treeErrorObserver = treeErrorObserver;
|
|
49
50
|
this.debug = debug
|
|
50
|
-
? (msg) =>
|
|
51
|
+
? (msg) => logTreeSitterDiagnostic({
|
|
52
|
+
subsystem: "tree-cache",
|
|
53
|
+
level: "debug",
|
|
54
|
+
message: msg,
|
|
55
|
+
})
|
|
51
56
|
: () => { };
|
|
52
57
|
}
|
|
53
58
|
recordCounter(key, amount = 1) {
|