@herbertgao/pi-extensions 2026.8.6 → 2026.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +19 -7
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +30 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +272 -22
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +94 -77
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/message-display.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +14 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +55 -17
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/layout.ts +41 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-renderer.ts +75 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/types.ts +7 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +64 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
- package/node_modules/@herbertgao/pi-subagents/README.md +30 -22
- package/node_modules/@herbertgao/pi-subagents/examples/agent-tool-description.md +5 -5
- package/node_modules/@herbertgao/pi-subagents/package.json +7 -7
- package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +7 -1
- package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +48 -19
- package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +17 -13
- package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +26 -2
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +219 -40
- package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +101 -3
- package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +18 -4
- package/node_modules/@herbertgao/pi-subagents/src/settings.ts +99 -0
- package/node_modules/@herbertgao/pi-subagents/src/types.ts +22 -3
- package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +51 -3
- package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +20 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/fleet-list.ts +21 -6
- package/node_modules/@herbertgao/pi-subagents/src/usage.ts +129 -1
- package/node_modules/@herbertgao/pi-subagents/src/worktree.ts +20 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/README.md +1 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +26 -10
- package/node_modules/@juicesharp/rpiv-ask-user-question/config.ts +25 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/configuration.md +13 -4
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/hosts.md +2 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/docs/localization.md +3 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/locales/en.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/locales/zh.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +3 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/build-questionnaire.ts +10 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/key-router.ts +3 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/questionnaire-session.ts +30 -7
- package/node_modules/@juicesharp/rpiv-ask-user-question/state/state.ts +14 -6
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/dialog-builder.ts +30 -4
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/tab-content-strategy.ts +26 -5
- package/node_modules/@narumitw/pi-btw/README.md +120 -111
- package/node_modules/@narumitw/pi-btw/dist/index.ts +2898 -0
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +7 -0
- package/node_modules/@narumitw/pi-btw/package.json +10 -6
- package/node_modules/@narumitw/pi-btw/src/btw.ts +36 -40
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +55 -10
- package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +390 -0
- package/node_modules/@narumitw/pi-btw/src/menu.ts +45 -2
- package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +136 -45
- package/node_modules/pi-lens/CHANGELOG.md +909 -0
- package/node_modules/pi-lens/README.md +11 -3
- package/node_modules/pi-lens/config/ruff/core.toml +42 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +130 -27
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +126 -13
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +67 -11
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +9 -3
- package/node_modules/pi-lens/dist/clients/atomic-write.js +9 -3
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +285 -8
- package/node_modules/pi-lens/dist/clients/biome-client.js +61 -30
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +428 -0
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +119 -0
- package/node_modules/pi-lens/dist/clients/bootstrap.js +12 -1
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +12 -3
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +192 -0
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +196 -0
- package/node_modules/pi-lens/dist/clients/cascade-format.js +20 -1
- package/node_modules/pi-lens/dist/clients/cascade-types.js +9 -1
- package/node_modules/pi-lens/dist/clients/child-unref.js +54 -6
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +76 -24
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +123 -31
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +8 -1
- package/node_modules/pi-lens/dist/clients/debug-handles.js +5 -0
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +62 -13
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +25 -3
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +147 -33
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +298 -0
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +52 -2
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +256 -88
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +7 -4
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +5 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +234 -18
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +187 -19
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +6 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +11 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +398 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +11 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +12 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +18 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +895 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +4 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +16 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +60 -53
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +16 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +23 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +331 -55
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +38 -5
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +97 -19
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +14 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +20 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +22 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +10 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +18 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +73 -12
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +275 -13
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +21 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +260 -27
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +734 -64
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +86 -11
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +72 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +9 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +9 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +18 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +4 -2
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +28 -5
- package/node_modules/pi-lens/dist/clients/extension-log.js +22 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +8 -2
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +294 -0
- package/node_modules/pi-lens/dist/clients/finding-identity.js +88 -0
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +3 -2
- package/node_modules/pi-lens/dist/clients/formatters.js +500 -115
- package/node_modules/pi-lens/dist/clients/generation-guard.js +216 -0
- package/node_modules/pi-lens/dist/clients/git-guard.js +31 -0
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +181 -8
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +109 -9
- package/node_modules/pi-lens/dist/clients/grammar-source.js +333 -10
- package/node_modules/pi-lens/dist/clients/host-ports.js +8 -0
- package/node_modules/pi-lens/dist/clients/installer/index.js +1114 -100
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +58 -0
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +715 -0
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +643 -97
- package/node_modules/pi-lens/dist/clients/instance-registry.js +87 -17
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +82 -6
- package/node_modules/pi-lens/dist/clients/knip-client.js +310 -10
- package/node_modules/pi-lens/dist/clients/language-policy.js +8 -2
- package/node_modules/pi-lens/dist/clients/language-profile.js +2 -0
- package/node_modules/pi-lens/dist/clients/latency-logger.js +440 -11
- package/node_modules/pi-lens/dist/clients/lazy-import.js +21 -0
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +21 -0
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +8 -0
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +102 -7
- package/node_modules/pi-lens/dist/clients/lsp/client.js +1516 -159
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +83 -1
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +389 -0
- package/node_modules/pi-lens/dist/clients/lsp/index.js +2274 -147
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +215 -0
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +146 -14
- package/node_modules/pi-lens/dist/clients/lsp/language.js +48 -4
- package/node_modules/pi-lens/dist/clients/lsp/server.js +277 -16
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +22 -0
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +43 -0
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +79 -3
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +43 -0
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +422 -28
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +30 -0
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +175 -0
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +3 -2
- package/node_modules/pi-lens/dist/clients/mcp/session.js +10 -2
- package/node_modules/pi-lens/dist/clients/module-report.js +8 -0
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +15 -1
- package/node_modules/pi-lens/dist/clients/package-manager.js +170 -14
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +27 -0
- package/node_modules/pi-lens/dist/clients/path-utils.js +160 -0
- package/node_modules/pi-lens/dist/clients/pipeline.js +154 -33
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +37 -0
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +17 -3
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +89 -22
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +84 -14
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +15 -3
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +50 -2
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -0
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +3 -0
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +299 -0
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +47 -0
- package/node_modules/pi-lens/dist/clients/quiet-window.js +11 -25
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +1 -1
- package/node_modules/pi-lens/dist/clients/read-guard.js +184 -10
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +49 -17
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +50 -11
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +52 -4
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +96 -7
- package/node_modules/pi-lens/dist/clients/runtime-context.js +8 -1
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +308 -45
- package/node_modules/pi-lens/dist/clients/runtime-session.js +332 -9
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +217 -22
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +212 -79
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +575 -67
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +220 -7
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +161 -0
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +34 -6
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +157 -24
- package/node_modules/pi-lens/dist/clients/sg-runner.js +116 -22
- package/node_modules/pi-lens/dist/clients/single-flight.js +158 -0
- package/node_modules/pi-lens/dist/clients/stale-marker.js +17 -0
- package/node_modules/pi-lens/dist/clients/startup-timing.js +19 -1
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +151 -16
- package/node_modules/pi-lens/dist/clients/tool-event.js +56 -5
- package/node_modules/pi-lens/dist/clients/tool-policy.js +125 -20
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +75 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +769 -64
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +11 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +90 -0
- package/node_modules/pi-lens/dist/clients/trivy-client.js +19 -1
- package/node_modules/pi-lens/dist/clients/widget-state.js +336 -36
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +214 -14
- package/node_modules/pi-lens/dist/index.js +67738 -55739
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +466 -54
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +132 -43
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +46 -7
- package/node_modules/pi-lens/docs/agent-guide.md +6 -1
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +515 -506
- package/node_modules/pi-lens/docs/dispositions.md +21 -0
- package/node_modules/pi-lens/docs/features.md +19 -5
- package/node_modules/pi-lens/docs/globalconfig.md +3 -0
- package/node_modules/pi-lens/docs/language-coverage.md +71 -5
- package/node_modules/pi-lens/docs/mcp.md +2 -2
- package/node_modules/pi-lens/docs/servercapabilities.md +4 -1
- package/node_modules/pi-lens/docs/settings.md +19 -1
- package/node_modules/pi-lens/docs/usage.md +1 -0
- package/node_modules/pi-lens/package.json +10 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/no-reflect-get-js-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/no-reflect-get-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/__snapshots__/ts-void-zero-snapshot.yml +23 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-bare-object-param-test.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-chained-type-assertions-test.yml +15 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-compile-call-test.yml +29 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-dupe-class-members-test.yml +33 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-inner-html-js-test.yml +7 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-inner-html-test.yml +7 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-known-value-widening-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-non-null-assertion-test.yml +216 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-js-test.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-apply-test.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-js-test.yml +2 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-reflect-get-test.yml +2 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-return-value-in-generator-test.yml +12 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-runtime-typeof-test.yml +33 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-server-bind-wildcard-test.yml +9 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-shape-in-symbol-names-test.yml +13 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-sql-in-code-js-test.yml +5 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-sql-in-code-test.yml +5 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unknown-parameters-test.yml +12 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unknown-returns-test.yml +16 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unsafe-dictionary-any-test.yml +10 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-unsafe-dictionary-unknown-test.yml +8 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/redundant-unsafe-function-test.yml +35 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/require-safety-comment-for-as-unknown-as-test.yml +177 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/ts-void-zero-test.yml +1 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-await-expression-member-js.yml +13 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-await-expression-member.yml +13 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-host-path-in-win32-branch.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-bare-object-param.yml +60 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-chained-type-assertions.yml +57 -12
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-compile-call.yml +63 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-dupe-class-members.yml +52 -8
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-inner-html-js.yml +27 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-inner-html.yml +27 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-known-value-widening.yml +71 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-non-null-assertion.yml +316 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-raw-json-store-write.yml +7 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply-js.yml +22 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-apply.yml +23 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get-js.yml +33 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-reflect-get.yml +34 -8
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-return-value-in-generator.yml +22 -5
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-runtime-typeof.yml +121 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-server-bind-wildcard.yml +23 -7
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-shape-in-symbol-names.yml +68 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-sql-in-code-js.yml +41 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-sql-in-code.yml +41 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-laundering.yml +6 -1
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-parameters.yml +67 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unknown-returns.yml +106 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unsafe-dictionary-any.yml +50 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-unsafe-dictionary-unknown.yml +56 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-win32-isabsolute-for-qualification.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/redundant-unsafe-function.yml +32 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/require-safety-comment-for-as-unknown-as.yml +184 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/ts-void-zero.yml +5 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/self-scan-baseline.json +5 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +53 -1
- package/node_modules/pi-lens/scripts/download-grammars.js +25 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +9 -0
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +2 -0
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/SKILL.md +80 -3
- package/node_modules/pi-lens/skills/pi-lens-write-ast-grep-rule/reference.md +41 -0
- package/node_modules/pi-lens/vendor/grammars/tree-sitter-cue.wasm +0 -0
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +36 -0
- package/node_modules/pi-mcp-adapter/README.md +47 -5
- package/node_modules/pi-mcp-adapter/cli.js +163 -1
- package/node_modules/pi-mcp-adapter/commands.ts +128 -22
- package/node_modules/pi-mcp-adapter/config.ts +25 -7
- package/node_modules/pi-mcp-adapter/direct-tools.ts +5 -4
- package/node_modules/pi-mcp-adapter/index.ts +219 -32
- package/node_modules/pi-mcp-adapter/init.ts +36 -4
- package/node_modules/pi-mcp-adapter/lifecycle.ts +315 -24
- package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +39 -6
- package/node_modules/pi-mcp-adapter/mcp-bearer-store.ts +387 -0
- package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +27 -3
- package/node_modules/pi-mcp-adapter/mcp-code.ts +4 -0
- package/node_modules/pi-mcp-adapter/mcp-panel.ts +42 -13
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +32 -21
- package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +168 -0
- package/node_modules/pi-mcp-adapter/package.json +3 -1
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +5 -4
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +31 -37
- package/node_modules/pi-mcp-adapter/search-ranking.ts +92 -22
- package/node_modules/pi-mcp-adapter/server-manager.ts +140 -2
- package/node_modules/pi-mcp-adapter/session-recovery.ts +7 -0
- package/node_modules/pi-mcp-adapter/tool-approval.ts +15 -2
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +44 -4
- package/node_modules/pi-mcp-adapter/types.ts +2 -0
- package/node_modules/pi-mcp-adapter/ui-server.ts +18 -16
- package/node_modules/pi-mcp-adapter/utils.ts +70 -0
- package/node_modules/pi-web-access/CHANGELOG.md +23 -0
- package/node_modules/pi-web-access/README.md +27 -9
- package/node_modules/pi-web-access/anysearch.ts +4 -2
- package/node_modules/pi-web-access/brave.ts +16 -4
- package/node_modules/pi-web-access/curator-page.ts +6 -3
- package/node_modules/pi-web-access/curator-server.ts +4 -1
- package/node_modules/pi-web-access/exa.ts +18 -7
- package/node_modules/pi-web-access/extract.ts +28 -3
- package/node_modules/pi-web-access/gemini-search.ts +16 -4
- package/node_modules/pi-web-access/index.ts +41 -57
- package/node_modules/pi-web-access/package.json +1 -1
- package/node_modules/pi-web-access/page-query.ts +4 -2
- package/node_modules/pi-web-access/parallel-mcp.ts +249 -0
- package/node_modules/pi-web-access/parallel.ts +2 -2
- package/node_modules/pi-web-access/query-rewrite.ts +51 -0
- package/node_modules/pi-web-access/serper.ts +211 -0
- package/node_modules/pi-web-access/summary-model-scope.ts +12 -4
- package/node_modules/pi-web-access/summary-review.ts +44 -22
- package/node_modules/pi-web-access/tavily.ts +16 -4
- package/node_modules/pi-web-access/utils.ts +87 -0
- package/node_modules/pi-web-access/valyu.ts +199 -0
- package/package.json +13 -13
|
@@ -53,6 +53,14 @@ export function computeTransitiveImpact(graph, seedFile, options) {
|
|
|
53
53
|
continue;
|
|
54
54
|
if (visited.has(edge.from))
|
|
55
55
|
continue;
|
|
56
|
+
if (hits.length >= maxHits) {
|
|
57
|
+
return {
|
|
58
|
+
seedFile: normalized,
|
|
59
|
+
hits,
|
|
60
|
+
truncated: true,
|
|
61
|
+
maxDepthReached,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
56
64
|
visited.add(edge.from);
|
|
57
65
|
const dependent = graph.nodes.get(edge.from);
|
|
58
66
|
const hitDepth = node.depth + 1;
|
|
@@ -63,9 +71,6 @@ export function computeTransitiveImpact(graph, seedFile, options) {
|
|
|
63
71
|
depth: hitDepth,
|
|
64
72
|
relation: edge.kind,
|
|
65
73
|
});
|
|
66
|
-
if (hits.length >= maxHits) {
|
|
67
|
-
return { seedFile: normalized, hits, truncated: true, maxDepthReached };
|
|
68
|
-
}
|
|
69
74
|
next.push({ id: edge.from, depth: hitDepth });
|
|
70
75
|
}
|
|
71
76
|
}
|
|
@@ -73,6 +78,44 @@ export function computeTransitiveImpact(graph, seedFile, options) {
|
|
|
73
78
|
}
|
|
74
79
|
return { seedFile: normalized, hits, truncated: false, maxDepthReached };
|
|
75
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* #1550: evidence for a `missing_node` verdict — the node id sought and the
|
|
83
|
+
* nearest thing the graph actually held. Runs ONLY on the miss path (one pass
|
|
84
|
+
* over `fileNodes`, which the same call already consulted), so the hot path is
|
|
85
|
+
* untouched. Keys are compared as the graph keys them (`normalizeMapKey`), so a
|
|
86
|
+
* key-shape divergence shows up as "nearest is the same path" rather than
|
|
87
|
+
* hiding behind a bare "missing".
|
|
88
|
+
*/
|
|
89
|
+
function describeMissingNode(graph, normalizedFile) {
|
|
90
|
+
const lastSlash = normalizedFile.lastIndexOf("/");
|
|
91
|
+
const dir = lastSlash === -1 ? "" : normalizedFile.slice(0, lastSlash);
|
|
92
|
+
const base = normalizedFile.slice(lastSlash + 1);
|
|
93
|
+
const stem = base.replace(/\.[^./]*$/, "");
|
|
94
|
+
let sameDirFileCount = 0;
|
|
95
|
+
let sameDirSibling;
|
|
96
|
+
let sameStemTwin;
|
|
97
|
+
for (const known of graph.fileNodes.keys()) {
|
|
98
|
+
const knownLastSlash = known.lastIndexOf("/");
|
|
99
|
+
const knownDir = knownLastSlash === -1 ? "" : known.slice(0, knownLastSlash);
|
|
100
|
+
const knownBase = known.slice(knownLastSlash + 1);
|
|
101
|
+
if (knownDir === dir) {
|
|
102
|
+
sameDirFileCount += 1;
|
|
103
|
+
sameDirSibling ??= known;
|
|
104
|
+
// A same-stem twin in the same directory is the strongest hint —
|
|
105
|
+
// an extension/compiled-twin resolution miss rather than an absent file.
|
|
106
|
+
if (sameStemTwin === undefined && knownBase.replace(/\.[^./]*$/, "") === stem) {
|
|
107
|
+
sameStemTwin = known;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
soughtNodeId: `file:${normalizedFile}`,
|
|
113
|
+
graphFileCount: graph.fileNodes.size,
|
|
114
|
+
symbolNodeCount: graph.symbolNodesByFile.get(normalizedFile)?.length ?? 0,
|
|
115
|
+
sameDirFileCount,
|
|
116
|
+
nearestFile: sameStemTwin ?? sameDirSibling,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
76
119
|
export function computeImpactCascade(graph, changedFile, moduleGraph) {
|
|
77
120
|
const normalizedFile = normalizeMapKey(changedFile);
|
|
78
121
|
const fileNodeId = graph.fileNodes.get(normalizedFile);
|
|
@@ -111,7 +154,12 @@ export function computeImpactCascade(graph, changedFile, moduleGraph) {
|
|
|
111
154
|
directCallers: [],
|
|
112
155
|
neighborFiles: [],
|
|
113
156
|
riskFlags: [],
|
|
114
|
-
indeterminate: {
|
|
157
|
+
indeterminate: {
|
|
158
|
+
reason: "missing_node",
|
|
159
|
+
// #1550: the reason alone forced a manual re-derivation on every
|
|
160
|
+
// occurrence. Attach the evidence (log-only — see the type doc).
|
|
161
|
+
diagnostic: describeMissingNode(graph, normalizedFile),
|
|
162
|
+
},
|
|
115
163
|
};
|
|
116
164
|
}
|
|
117
165
|
const changedSymbols = graph.changedSymbolsByFile.get(normalizedFile) ?? [];
|
|
@@ -5,6 +5,7 @@ import { publishFilesTouched } from "./bus-publish.js";
|
|
|
5
5
|
import { publishAutofixStart, publishFormatStart, } from "./format-events-publish.js";
|
|
6
6
|
import { logLatency } from "./latency-logger.js";
|
|
7
7
|
import { isPathIgnoredByProject } from "./file-utils.js";
|
|
8
|
+
import { admitBounded, emitBounded } from "./bounded-telemetry.js";
|
|
8
9
|
import { newLspMutationCorrelationId } from "./lsp-mutation.js";
|
|
9
10
|
import { getGlobalActionableWarningMaxFixes, } from "./lens-config.js";
|
|
10
11
|
import { resyncLspFile, runAutofix, runFormatPhase } from "./pipeline.js";
|
|
@@ -46,7 +47,7 @@ export async function handleAgentEnd({ ctxCwd, getFlag, getFlagSource, notify, d
|
|
|
46
47
|
// session (e.g. a concurrent in-process secondary/subagent) stay queued
|
|
47
48
|
// for their owner's own agent_end, unless they've been stale long enough
|
|
48
49
|
// to fall back to "claim as orphaned" (see claimDeferredFormatFiles).
|
|
49
|
-
const { claimed, staleClaimed, deferredToOwner } = runtime.claimDeferredMutations(currentSessionId, Date.now(), staleAfterMs);
|
|
50
|
+
const { claimed, staleClaimed, deferredToOwner, droppedOrphans } = runtime.claimDeferredMutations(currentSessionId, Date.now(), staleAfterMs, ctxCwd ?? runtime.projectRoot);
|
|
50
51
|
const records = [...claimed, ...staleClaimed];
|
|
51
52
|
const requeuedKinds = new Set();
|
|
52
53
|
// S2d (gap 4, #1432 review): the aggregate `agent_end_deferred_mutation_drain`
|
|
@@ -85,13 +86,84 @@ export async function handleAgentEnd({ ctxCwd, getFlag, getFlagSource, notify, d
|
|
|
85
86
|
runtime.requeueDeferredMutations(pending);
|
|
86
87
|
};
|
|
87
88
|
const rootActionableAutofixEnabled = !!getFlag("lens-actionable-warning-autofix");
|
|
89
|
+
// The actionable-warnings cache is only ever written when the
|
|
90
|
+
// "lens-actionable-warnings" writer flag is on (clients/runtime-turn.ts).
|
|
91
|
+
// A reader that ignores this gate always misses in a host where the
|
|
92
|
+
// writer is off and logs "cache missing or expired" at every agent_end,
|
|
93
|
+
// misdirecting the debug log toward a bogus cache problem instead of the
|
|
94
|
+
// real cause: the feature that populates the cache is disabled (#1607).
|
|
95
|
+
const actionableWarningsWriterEnabled = !!getFlag("lens-actionable-warnings");
|
|
88
96
|
// A path-aware source resolver signals that nested configs may re-enable
|
|
89
97
|
// actionable autofix even when the root default is off. Legacy/test hosts
|
|
90
98
|
// without that resolver keep the old fast exit and avoid a cache read.
|
|
91
|
-
const inspectActionableReport =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
99
|
+
const inspectActionableReport = actionableWarningsWriterEnabled &&
|
|
100
|
+
typeof cacheManager.readCache === "function" &&
|
|
101
|
+
(rootActionableAutofixEnabled || getFlagSource !== undefined);
|
|
102
|
+
if (droppedOrphans.length > 0) {
|
|
103
|
+
// #1642 F3: a stale/foreign record whose origin (the cwd/worktree it
|
|
104
|
+
// was actually queued under) does NOT match this flush's own
|
|
105
|
+
// workspace/worktree is left queued and NEVER formatted by this
|
|
106
|
+
// flush — claiming it would be the same worktree→parent
|
|
107
|
+
// re-attribution the reported incident hit, just via the orphan
|
|
108
|
+
// fallback instead of tool_result's path resolution. It stays in
|
|
109
|
+
// `_pendingDeferredMutations` (not deleted) so a flush whose origin
|
|
110
|
+
// actually matches can still claim it later; a genuinely abandoned
|
|
111
|
+
// origin will keep surfacing this record on every subsequent
|
|
112
|
+
// agent_end, which is the deliberately safer trade-off over silently
|
|
113
|
+
// losing it forever.
|
|
114
|
+
dbg(`agent_end deferred_format: left ${droppedOrphans.length} orphaned file(s) queued due to a mismatched origin (unclaimed >${staleAfterMs}ms, not formatted by this flush): ${droppedOrphans
|
|
115
|
+
.map((r) => `${r.filePath} origin=${r.originCwd}`)
|
|
116
|
+
.join(", ")}`);
|
|
117
|
+
// #1678 item 1: a genuinely abandoned origin re-surfaces the SAME
|
|
118
|
+
// record on every subsequent agent_end for as long as the queued
|
|
119
|
+
// entry lives — by design (see the comment above), but the repo
|
|
120
|
+
// invariant is that a repeated degradation goes through the ledger's
|
|
121
|
+
// counting path instead of accumulating as unbounded raw log lines.
|
|
122
|
+
// The ledger is the single source of truth for whether THIS is a
|
|
123
|
+
// record's first appearance (its return value): the detailed forensic
|
|
124
|
+
// record below names only the orphans on that rising edge, with file
|
|
125
|
+
// identity/origin/age. Every later repeat of
|
|
126
|
+
// the same record is counted ONLY by the ledger's running count —
|
|
127
|
+
// no second raw event, no parallel "already logged" latch to
|
|
128
|
+
// maintain here.
|
|
129
|
+
// #1743: `admitBounded` IS that ledger call, plus the registry
|
|
130
|
+
// membership the bounded-telemetry sweep checks. This site admits PER
|
|
131
|
+
// ORPHAN and then writes ONE batched record naming the admitted ones,
|
|
132
|
+
// which is why it uses `admitBounded` directly instead of a per-record
|
|
133
|
+
// `emitBounded` — the per-call form would turn one log line into N.
|
|
134
|
+
const firstSeenOrphans = [];
|
|
135
|
+
for (const record of droppedOrphans) {
|
|
136
|
+
const isFirstOccurrence = admitBounded("agent_end_deferred_format_orphan_origin_mismatch", record.filePath, {
|
|
137
|
+
ledgerKind: "path-attribution-orphan-unresolved",
|
|
138
|
+
risingEdgePer: "identity",
|
|
139
|
+
reason: `origin=${record.originCwd} unclaimed >${staleAfterMs}ms`,
|
|
140
|
+
});
|
|
141
|
+
if (isFirstOccurrence)
|
|
142
|
+
firstSeenOrphans.push(record);
|
|
143
|
+
}
|
|
144
|
+
if (firstSeenOrphans.length > 0) {
|
|
145
|
+
// Already admitted above, one orphan at a time — hence no bounding
|
|
146
|
+
// options here. The batch's own identity is the origin this flush ran
|
|
147
|
+
// under; per-file identity rides in `metadata.files`.
|
|
148
|
+
emitBounded("agent_end_deferred_format_orphan_origin_mismatch", ctxCwd ?? runtime.projectRoot, {
|
|
149
|
+
type: "phase",
|
|
150
|
+
toolName: "agent_end",
|
|
151
|
+
durationMs: 0,
|
|
152
|
+
metadata: {
|
|
153
|
+
fileCount: firstSeenOrphans.length,
|
|
154
|
+
staleAfterMs,
|
|
155
|
+
currentOriginCwd: ctxCwd ?? runtime.projectRoot,
|
|
156
|
+
files: firstSeenOrphans.map((r) => ({
|
|
157
|
+
filePath: r.filePath,
|
|
158
|
+
originCwd: r.originCwd,
|
|
159
|
+
ownerSessionId: r.ownerSessionId,
|
|
160
|
+
queuedTurnIndex: r.queuedTurnIndex,
|
|
161
|
+
ageMs: Date.now() - r.lastTouchedAt,
|
|
162
|
+
})),
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
95
167
|
if (records.length === 0 && !inspectActionableReport)
|
|
96
168
|
return undefined;
|
|
97
169
|
if (deferredToOwner.length > 0) {
|
|
@@ -402,9 +474,26 @@ export async function handleAgentEnd({ ctxCwd, getFlag, getFlagSource, notify, d
|
|
|
402
474
|
await resyncLspFile(changedPath, content, true, false, getFlag, dbg);
|
|
403
475
|
}
|
|
404
476
|
if (inspectActionableReport) {
|
|
405
|
-
const
|
|
477
|
+
const actionCwd = ctxCwd ?? runtime.projectRoot;
|
|
478
|
+
const actionableWarningsMaxAgeMs = 10 * 60_000;
|
|
479
|
+
const actionReport = cacheManager.readCache("actionable-warnings", actionCwd, actionableWarningsMaxAgeMs);
|
|
406
480
|
if (!actionReport?.data) {
|
|
407
|
-
|
|
481
|
+
// Distinguish "no cache file was ever written" from "a cache file
|
|
482
|
+
// exists but its TTL elapsed" (#1607) — both used to collapse into
|
|
483
|
+
// one "cache missing or expired" line, which doesn't tell a reader
|
|
484
|
+
// whether the writer ran and produced a stale file, or never ran.
|
|
485
|
+
const inspection = typeof cacheManager.inspectCache === "function"
|
|
486
|
+
? cacheManager.inspectCache("actionable-warnings", actionCwd, actionableWarningsMaxAgeMs)
|
|
487
|
+
: undefined;
|
|
488
|
+
if (inspection === "missing") {
|
|
489
|
+
dbg("agent_end actionable_warnings_autofix: cache absent, skipping fixes");
|
|
490
|
+
}
|
|
491
|
+
else if (inspection === "stale") {
|
|
492
|
+
dbg("agent_end actionable_warnings_autofix: cache expired, skipping fixes");
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
dbg(`agent_end actionable_warnings_autofix: cache missing or expired${inspection ? ` (${inspection})` : ""}, skipping fixes`);
|
|
496
|
+
}
|
|
408
497
|
}
|
|
409
498
|
else {
|
|
410
499
|
const enabledFiles = actionReport.data.files.filter((file) => {
|
|
@@ -147,7 +147,14 @@ export function consumeSessionStartGuidance(cacheManager, cwd) {
|
|
|
147
147
|
const guidance = cacheManager.readCache("session-start-guidance", cwd);
|
|
148
148
|
if (!guidance?.data?.content)
|
|
149
149
|
return;
|
|
150
|
-
|
|
150
|
+
// Consume by writing empty guidance, not by casting `null` into the entry's
|
|
151
|
+
// own type. `writeCache` infers its type parameter from `data`, so the cast
|
|
152
|
+
// bought nothing and claimed the file held a `{ content: string }` when it
|
|
153
|
+
// held JSON `null`. The producer (`runtime-session.ts`) always writes
|
|
154
|
+
// `{ content }`, and this reader gates on `data?.content` being non-empty,
|
|
155
|
+
// so an empty string is the same "already consumed" signal with the type
|
|
156
|
+
// the entry actually has. Same idiom as `acknowledgeTestFindings` above.
|
|
157
|
+
cacheManager.writeCache("session-start-guidance", { content: "" }, cwd);
|
|
151
158
|
return {
|
|
152
159
|
messages: [
|
|
153
160
|
{
|