@herbertgao/pi-extensions 2026.8.4 → 2026.8.5
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 +4 -4
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +10 -2
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +10 -2
- 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/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 +5 -8
- 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 +8 -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 +15 -2
- 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/schedule-menu.ts +9 -8
- package/node_modules/@herbertgao/pi-subagents/src/ui/select-item.ts +48 -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 +8 -7
- package/node_modules/@narumitw/pi-btw/package.json +2 -2
- package/node_modules/@narumitw/pi-btw/src/menu.ts +1 -0
- package/node_modules/pi-lens/CHANGELOG.md +2440 -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/agent-behavior-client.js +21 -4
- 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 +29 -25
- 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-publish.js +10 -3
- 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/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 +14 -0
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +42 -0
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +2 -1
- 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 +347 -75
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +61 -11
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +10 -3
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +63 -20
- 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 +1085 -681
- 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 +14 -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/lazy-installer.js +3 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +277 -26
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +22 -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 +10 -3
- package/node_modules/pi-lens/dist/clients/durable-store.js +97 -0
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +94 -3
- package/node_modules/pi-lens/dist/clients/extension-log.js +139 -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/format-events-publish.js +16 -3
- 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 +681 -11
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +4 -0
- package/node_modules/pi-lens/dist/clients/go-client.js +2 -1
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +8 -0
- 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 +390 -99
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +142 -172
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +31 -54
- package/node_modules/pi-lens/dist/clients/knip-client.js +15 -36
- 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 +23 -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 +27 -4
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +8 -0
- package/node_modules/pi-lens/dist/clients/lens-map.js +94 -19
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +30 -0
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +1 -1
- package/node_modules/pi-lens/dist/clients/lsp/client.js +493 -48
- package/node_modules/pi-lens/dist/clients/lsp/config.js +13 -2
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +86 -0
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +1012 -121
- package/node_modules/pi-lens/dist/clients/lsp/index.js +1807 -780
- 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 +196 -32
- 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 +123 -32
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +157 -24
- package/node_modules/pi-lens/dist/clients/mcp/session.js +216 -8
- 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/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 +47 -13
- 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/runner-adapters/call-graph-impact.js +8 -0
- 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/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/runtime-agent-end.js +107 -73
- package/node_modules/pi-lens/dist/clients/runtime-context.js +36 -12
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +74 -6
- package/node_modules/pi-lens/dist/clients/runtime-session.js +405 -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 +218 -23
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +237 -64
- package/node_modules/pi-lens/dist/clients/rust-client.js +2 -1
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +777 -62
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +2 -1
- package/node_modules/pi-lens/dist/clients/session-state-store.js +3 -2
- package/node_modules/pi-lens/dist/clients/sg-runner.js +284 -174
- package/node_modules/pi-lens/dist/clients/slow-fs.js +2 -1
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +224 -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 +1 -1
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +38 -8
- package/node_modules/pi-lens/dist/clients/tool-event.js +35 -0
- package/node_modules/pi-lens/dist/clients/tool-policy.js +388 -39
- package/node_modules/pi-lens/dist/clients/tool-render.js +155 -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 +33 -13
- package/node_modules/pi-lens/dist/clients/widget-state.js +300 -43
- package/node_modules/pi-lens/dist/clients/word-index.js +391 -64
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +89 -6
- package/node_modules/pi-lens/dist/index.js +49361 -36888
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +182 -29
- package/node_modules/pi-lens/dist/mcp/server.js +211 -44
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +93 -27
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +200 -36
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +153 -40
- 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/docs/agent-guide.md +2 -2
- 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 +5 -2
- 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 +31 -2
- package/node_modules/pi-lens/docs/globalconfig.md +45 -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 +12 -1
- package/node_modules/pi-lens/docs/tools.md +4 -1
- package/node_modules/pi-lens/docs/usage.md +18 -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-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-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-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-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 +55 -2
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +25 -0
- package/node_modules/pi-mcp-adapter/README.md +34 -3
- package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +1 -1
- package/node_modules/pi-mcp-adapter/commands.ts +15 -7
- package/node_modules/pi-mcp-adapter/direct-tools.ts +54 -7
- 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/metadata-cache.ts +27 -4
- package/node_modules/pi-mcp-adapter/npx-resolver.ts +81 -26
- package/node_modules/pi-mcp-adapter/package.json +3 -3
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +108 -26
- package/node_modules/pi-mcp-adapter/search-ranking.ts +86 -7
- package/node_modules/pi-mcp-adapter/server-manager.ts +36 -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 +42 -4
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +138 -12
- package/node_modules/pi-mcp-adapter/types.ts +93 -27
- package/node_modules/pi-mcp-adapter/ui-server.ts +20 -1
- package/package.json +11 -12
- 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
|
+
}
|
|
@@ -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) {
|