@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
|
@@ -70,13 +70,14 @@
|
|
|
70
70
|
import { logBusEvent } from "./bus-events-logger.js";
|
|
71
71
|
import { isBusPublishEnabled } from "./bus-publish.js";
|
|
72
72
|
import { normalizeFilePath } from "./path-utils.js";
|
|
73
|
+
import { createLiveBusEmitter, recordStaleBusFailure, } from "./live-bus-emitter.js";
|
|
73
74
|
export const BUS_FORMAT_QUEUED_EVENT = "pilens:format:queued";
|
|
74
75
|
export const BUS_FORMAT_QUEUED_VERSION = 1;
|
|
75
76
|
export const BUS_FORMAT_START_EVENT = "pilens:format:start";
|
|
76
77
|
export const BUS_FORMAT_START_VERSION = 1;
|
|
77
78
|
export const BUS_AUTOFIX_START_EVENT = "pilens:autofix:start";
|
|
78
79
|
export const BUS_AUTOFIX_START_VERSION = 1;
|
|
79
|
-
|
|
80
|
+
const liveEmitter = createLiveBusEmitter();
|
|
80
81
|
let hasLoggedQueuedFailure = false;
|
|
81
82
|
let hasLoggedQueuedUnwired = false;
|
|
82
83
|
let hasLoggedQueuedDisabled = false;
|
|
@@ -93,11 +94,14 @@ let hasLoggedAutofixStartDisabled = false;
|
|
|
93
94
|
* identical `pi.events.emit` binding, wired separately per producer.
|
|
94
95
|
*/
|
|
95
96
|
export function wireFormatEventsBusEmitter(emitFn) {
|
|
96
|
-
|
|
97
|
+
liveEmitter.wire(emitFn);
|
|
98
|
+
}
|
|
99
|
+
export function wireFormatEventsBusEmitterGetter(getter) {
|
|
100
|
+
liveEmitter.wireGetter(getter);
|
|
97
101
|
}
|
|
98
102
|
/** Test-only: reset module state between test files. */
|
|
99
103
|
export function _resetFormatEventsPublishForTests() {
|
|
100
|
-
|
|
104
|
+
liveEmitter.reset();
|
|
101
105
|
hasLoggedQueuedFailure = false;
|
|
102
106
|
hasLoggedQueuedUnwired = false;
|
|
103
107
|
hasLoggedQueuedDisabled = false;
|
|
@@ -127,6 +131,7 @@ export function publishFormatQueued(args) {
|
|
|
127
131
|
}
|
|
128
132
|
return;
|
|
129
133
|
}
|
|
134
|
+
const busEmit = liveEmitter.get();
|
|
130
135
|
if (!busEmit) {
|
|
131
136
|
if (!hasLoggedQueuedUnwired) {
|
|
132
137
|
hasLoggedQueuedUnwired = true;
|
|
@@ -147,6 +152,7 @@ export function publishFormatQueued(args) {
|
|
|
147
152
|
tool: args.tool,
|
|
148
153
|
};
|
|
149
154
|
busEmit(BUS_FORMAT_QUEUED_EVENT, payload);
|
|
155
|
+
hasLoggedQueuedFailure = false;
|
|
150
156
|
logBusEvent({
|
|
151
157
|
event: BUS_FORMAT_QUEUED_EVENT,
|
|
152
158
|
outcome: "emitted",
|
|
@@ -163,6 +169,7 @@ export function publishFormatQueued(args) {
|
|
|
163
169
|
});
|
|
164
170
|
if (!hasLoggedQueuedFailure) {
|
|
165
171
|
hasLoggedQueuedFailure = true;
|
|
172
|
+
recordStaleBusFailure(BUS_FORMAT_QUEUED_EVENT, err);
|
|
166
173
|
args.dbg?.(`format-events-publish: pilens:format:queued emit failed (further failures suppressed): ${err}`);
|
|
167
174
|
}
|
|
168
175
|
}
|
|
@@ -189,6 +196,7 @@ export function publishFormatStart(args) {
|
|
|
189
196
|
}
|
|
190
197
|
return;
|
|
191
198
|
}
|
|
199
|
+
const busEmit = liveEmitter.get();
|
|
192
200
|
if (!busEmit) {
|
|
193
201
|
if (!hasLoggedStartUnwired) {
|
|
194
202
|
hasLoggedStartUnwired = true;
|
|
@@ -210,6 +218,7 @@ export function publishFormatStart(args) {
|
|
|
210
218
|
fileCount: paths.length,
|
|
211
219
|
};
|
|
212
220
|
busEmit(BUS_FORMAT_START_EVENT, payload);
|
|
221
|
+
hasLoggedStartFailure = false;
|
|
213
222
|
logBusEvent({
|
|
214
223
|
event: BUS_FORMAT_START_EVENT,
|
|
215
224
|
outcome: "emitted",
|
|
@@ -226,6 +235,7 @@ export function publishFormatStart(args) {
|
|
|
226
235
|
});
|
|
227
236
|
if (!hasLoggedStartFailure) {
|
|
228
237
|
hasLoggedStartFailure = true;
|
|
238
|
+
recordStaleBusFailure(BUS_FORMAT_START_EVENT, err);
|
|
229
239
|
args.dbg?.(`format-events-publish: pilens:format:start emit failed (further failures suppressed): ${err}`);
|
|
230
240
|
}
|
|
231
241
|
}
|
|
@@ -255,6 +265,7 @@ export function publishAutofixStart(args) {
|
|
|
255
265
|
}
|
|
256
266
|
return;
|
|
257
267
|
}
|
|
268
|
+
const busEmit = liveEmitter.get();
|
|
258
269
|
if (!busEmit) {
|
|
259
270
|
if (!hasLoggedAutofixStartUnwired) {
|
|
260
271
|
hasLoggedAutofixStartUnwired = true;
|
|
@@ -277,6 +288,7 @@ export function publishAutofixStart(args) {
|
|
|
277
288
|
eligibleCount: args.eligibleCount,
|
|
278
289
|
};
|
|
279
290
|
busEmit(BUS_AUTOFIX_START_EVENT, payload);
|
|
291
|
+
hasLoggedAutofixStartFailure = false;
|
|
280
292
|
logBusEvent({
|
|
281
293
|
event: BUS_AUTOFIX_START_EVENT,
|
|
282
294
|
outcome: "emitted",
|
|
@@ -293,6 +305,7 @@ export function publishAutofixStart(args) {
|
|
|
293
305
|
});
|
|
294
306
|
if (!hasLoggedAutofixStartFailure) {
|
|
295
307
|
hasLoggedAutofixStartFailure = true;
|
|
308
|
+
recordStaleBusFailure(BUS_AUTOFIX_START_EVENT, err);
|
|
296
309
|
args.dbg?.(`format-events-publish: pilens:autofix:start emit failed (further failures suppressed): ${err}`);
|
|
297
310
|
}
|
|
298
311
|
}
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* - FileTime integration for safety
|
|
11
11
|
* - Explicit config wins; otherwise smart defaults apply
|
|
12
12
|
*/
|
|
13
|
+
import { logExtension } from "./extension-log.js";
|
|
13
14
|
import * as path from "node:path";
|
|
14
15
|
import { recordFormatter } from "./widget-state.js";
|
|
15
16
|
import { FileTime } from "./file-time.js";
|
|
16
|
-
import {
|
|
17
|
+
import { loadFormatters } from "./formatters-lazy.js";
|
|
17
18
|
// --- Configuration ---
|
|
18
19
|
/** Reserved for future batching; formatting currently runs one selected formatter per file. */
|
|
19
20
|
const DEFAULT_FORMATTER_CONCURRENCY = 1;
|
|
@@ -42,7 +43,12 @@ export class FormatService {
|
|
|
42
43
|
}
|
|
43
44
|
// Check if file was modified externally (safety check)
|
|
44
45
|
if (this.fileTime.hasChanged(absolutePath)) {
|
|
45
|
-
|
|
46
|
+
logExtension({
|
|
47
|
+
subsystem: "format",
|
|
48
|
+
level: "warn",
|
|
49
|
+
message: `File ${absolutePath} modified externally, skipping format`,
|
|
50
|
+
metadata: { filePath: absolutePath },
|
|
51
|
+
});
|
|
46
52
|
return {
|
|
47
53
|
filePath: absolutePath,
|
|
48
54
|
formatters: [],
|
|
@@ -53,7 +59,7 @@ export class FormatService {
|
|
|
53
59
|
// Get formatters for this file
|
|
54
60
|
const formatters = options.formatters
|
|
55
61
|
? await this.getFormattersByName(options.formatters)
|
|
56
|
-
: await getFormattersForFile(absolutePath, cwd);
|
|
62
|
+
: await (await loadFormatters()).getFormattersForFile(absolutePath, cwd);
|
|
57
63
|
if (formatters.length === 0) {
|
|
58
64
|
return {
|
|
59
65
|
filePath: absolutePath,
|
|
@@ -90,13 +96,19 @@ export class FormatService {
|
|
|
90
96
|
async runFormattersWithConcurrency(filePath, formatters, _concurrency = DEFAULT_FORMATTER_CONCURRENCY) {
|
|
91
97
|
const results = [];
|
|
92
98
|
for (const formatter of formatters) {
|
|
99
|
+
// #1097: keep the timer handle so it can be cleared once the race
|
|
100
|
+
// settles. An uncleared, REF'D 30s setTimeout that outlives a fast
|
|
101
|
+
// `formatFile` win would keep a one-shot `pi --print` process alive for
|
|
102
|
+
// up to 30s after completion (same uncleared-race-timeout class as the
|
|
103
|
+
// LSP client-wait leak fixed in clients/lsp/index.ts).
|
|
104
|
+
let formatTimer;
|
|
93
105
|
try {
|
|
94
106
|
const timeoutMs = 30000;
|
|
95
107
|
const timeoutPromise = new Promise((_, reject) => {
|
|
96
|
-
setTimeout(() => reject(new Error(`Formatter ${formatter.name} timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
108
|
+
formatTimer = setTimeout(() => reject(new Error(`Formatter ${formatter.name} timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
97
109
|
});
|
|
98
110
|
const result = await Promise.race([
|
|
99
|
-
formatFile(filePath, formatter),
|
|
111
|
+
loadFormatters().then(({ formatFile }) => formatFile(filePath, formatter)),
|
|
100
112
|
timeoutPromise,
|
|
101
113
|
]);
|
|
102
114
|
results.push(result);
|
|
@@ -108,6 +120,10 @@ export class FormatService {
|
|
|
108
120
|
error: error instanceof Error ? error.message : String(error),
|
|
109
121
|
});
|
|
110
122
|
}
|
|
123
|
+
finally {
|
|
124
|
+
if (formatTimer)
|
|
125
|
+
clearTimeout(formatTimer);
|
|
126
|
+
}
|
|
111
127
|
}
|
|
112
128
|
return results;
|
|
113
129
|
}
|
|
@@ -115,7 +131,7 @@ export class FormatService {
|
|
|
115
131
|
* Get formatters by name (for explicit formatter selection)
|
|
116
132
|
*/
|
|
117
133
|
async getFormattersByName(names) {
|
|
118
|
-
const { listAllFormatters, ...formatters } = await
|
|
134
|
+
const { listAllFormatters, ...formatters } = await loadFormatters();
|
|
119
135
|
const allNames = listAllFormatters();
|
|
120
136
|
return names
|
|
121
137
|
.filter((name) => allNames.includes(name))
|
|
@@ -151,7 +167,7 @@ export class FormatService {
|
|
|
151
167
|
* Clear detection cache
|
|
152
168
|
*/
|
|
153
169
|
clearCache() {
|
|
154
|
-
clearFormatterRuntimeState();
|
|
170
|
+
void loadFormatters().then(({ clearFormatterRuntimeState }) => clearFormatterRuntimeState());
|
|
155
171
|
}
|
|
156
172
|
}
|
|
157
173
|
// --- Singleton Instance ---
|
|
@@ -169,7 +185,7 @@ export function getFormatService(sessionID, enabled = true) {
|
|
|
169
185
|
return globalFormatService;
|
|
170
186
|
}
|
|
171
187
|
export function resetFormatService() {
|
|
172
|
-
clearFormatterRuntimeState();
|
|
188
|
+
void loadFormatters().then(({ clearFormatterRuntimeState }) => clearFormatterRuntimeState());
|
|
173
189
|
globalFormatService = null;
|
|
174
190
|
currentSessionID = null;
|
|
175
191
|
}
|