@herbertgao/pi-extensions 2026.8.10 → 2026.8.12
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 +18 -11
- package/{node_modules/@herbertgao/pi-inline-skills/LICENSE → THIRD_PARTY_NOTICES.md} +15 -1
- package/node_modules/@czottmann/pi-automode/CHANGELOG.md +15 -0
- package/node_modules/@czottmann/pi-automode/README.md +5 -3
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +2 -0
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +60 -0
- package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +1 -0
- package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +4 -4
- package/node_modules/@czottmann/pi-automode/docs/configuration.md +20 -4
- package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +1 -1
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +692 -0
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +181 -3
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +4 -1
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +143 -36
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +103 -148
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +32 -6
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +344 -22
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +1 -0
- package/node_modules/@czottmann/pi-automode/package.json +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +4 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +21 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +19 -19
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +4 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +10 -2
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +10 -0
- package/node_modules/@herbertgao/pi-subagents/README.md +21 -15
- package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
- package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +11 -8
- package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +184 -106
- package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +31 -11
- package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +9 -1
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +156 -31
- package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +17 -0
- package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +14 -0
- package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +8 -0
- package/node_modules/@herbertgao/pi-subagents/src/settings.ts +32 -1
- package/node_modules/@herbertgao/pi-subagents/src/types.ts +17 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +23 -2
- package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +259 -24
- package/node_modules/{resume-from → @herbertgao/resume-from}/README.md +10 -8
- package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.js +11 -2
- package/node_modules/{resume-from → @herbertgao/resume-from}/package.json +24 -10
- package/node_modules/{resume-from → @herbertgao/resume-from}/shims/pi/extensions/resume-from.js +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
- package/node_modules/@narumitw/pi-btw/package.json +6 -6
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
- package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
- package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
- package/node_modules/@tifan/pi-handoff/package.json +43 -0
- package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
- package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
- package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
- package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
- package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
- package/node_modules/@tifan/pi-recap/package.json +42 -0
- package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
- package/node_modules/@tifan/pi-rename/package.json +47 -0
- package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
- package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
- package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
- package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
- package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
- package/node_modules/pi-lens/CHANGELOG.md +96 -1
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
- package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
- package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
- package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
- package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
- package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
- package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
- package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
- package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
- package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
- package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
- package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
- package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
- package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
- package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
- package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
- package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
- package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
- package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
- package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
- package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
- package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
- package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
- package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
- package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
- package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
- package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
- package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
- package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
- package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
- package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
- package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
- package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
- package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
- package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
- package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
- package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
- package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
- package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
- package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
- package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
- package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
- package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
- package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
- package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
- package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
- package/node_modules/pi-lens/dist/i18n.js +13 -5
- package/node_modules/pi-lens/dist/index.js +10797 -8627
- package/node_modules/pi-lens/dist/mcp/server.js +3 -1
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
- package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
- package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
- package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
- package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
- package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
- package/node_modules/pi-lens/package.json +160 -156
- package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
- package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
- package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +34 -0
- package/node_modules/pi-mcp-adapter/README.md +42 -13
- package/node_modules/pi-mcp-adapter/commands.ts +4 -2
- package/node_modules/pi-mcp-adapter/config.ts +35 -5
- package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
- package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
- package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
- package/node_modules/pi-mcp-adapter/dist/config.js +1077 -0
- package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
- package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
- package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
- package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
- package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
- package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
- package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
- package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
- package/node_modules/pi-mcp-adapter/index.ts +204 -82
- package/node_modules/pi-mcp-adapter/init.ts +36 -29
- package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
- package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
- package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
- package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
- package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
- package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
- package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
- package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
- package/node_modules/pi-mcp-adapter/package.json +24 -6
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
- package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
- package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
- package/node_modules/pi-mcp-adapter/state.ts +1 -3
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
- package/node_modules/pi-mcp-adapter/types.ts +48 -1
- package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
- package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
- package/node_modules/pi-mcp-adapter/utils.ts +21 -19
- package/node_modules/pi-web-access/CHANGELOG.md +26 -0
- package/node_modules/pi-web-access/README.md +71 -14
- package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
- package/node_modules/pi-web-access/credential-source.ts +6 -2
- package/node_modules/pi-web-access/curator-page.ts +5 -3
- package/node_modules/pi-web-access/curator-server.ts +2 -1
- package/node_modules/pi-web-access/extract.ts +89 -9
- package/node_modules/pi-web-access/fetch-params.ts +13 -0
- package/node_modules/pi-web-access/gemini-adc.ts +298 -0
- package/node_modules/pi-web-access/gemini-api.ts +59 -15
- package/node_modules/pi-web-access/gemini-search.ts +58 -18
- package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
- package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
- package/node_modules/pi-web-access/gemini-web.ts +9 -3
- package/node_modules/pi-web-access/github-api.ts +5 -4
- package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
- package/node_modules/pi-web-access/index.ts +403 -297
- package/node_modules/pi-web-access/kimi-search.ts +234 -0
- package/node_modules/pi-web-access/openai-search.ts +118 -21
- package/node_modules/pi-web-access/package.json +3 -2
- package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
- package/node_modules/pi-web-access/utils.ts +307 -1
- package/node_modules/pi-web-access/youtube-extract.ts +2 -2
- package/package.json +44 -41
- package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
- package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
- package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
- package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
- package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
- package/node_modules/@herbertgao/pi-mermaid-open/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
- package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
- package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-recap/package.json +0 -55
- package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
- package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
- package/node_modules/@herbertgao/pi-rename/package.json +0 -63
- package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
- package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
- /package/node_modules/{resume-from → @herbertgao/resume-from}/LICENSE +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.js +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.d.ts +0 -0
- /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.js +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
- /package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/src/index.ts +0 -0
|
@@ -54,7 +54,7 @@ const javacRunner = {
|
|
|
54
54
|
ctx.log?.("javac: skipped — file is inside a Maven/Gradle project; a classpath-less compile would emit false positives");
|
|
55
55
|
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
56
56
|
}
|
|
57
|
-
if (!(await
|
|
57
|
+
if (!(await javac.isAvailableAsync(cwd))) {
|
|
58
58
|
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
59
59
|
}
|
|
60
60
|
const cmd = javac.getCommand(cwd);
|
|
@@ -23,7 +23,7 @@ import { demoteInferredProjectDiagnostics } from "../../lsp/inferred-project.js"
|
|
|
23
23
|
import { enabledAuxiliaryLspServerIds, retagAuxiliaryDiagnostics, } from "../auxiliary-lsp.js";
|
|
24
24
|
import { readFileContent } from "./utils.js";
|
|
25
25
|
import { tryWarmAttachedCodeActions, tryWarmAttachedDiagnostics, } from "../../warm-attach.js";
|
|
26
|
-
import { contentHash, WARM_CODE_ACTION_LOOKUP_LIMIT
|
|
26
|
+
import { contentHash, WARM_CODE_ACTION_LOOKUP_LIMIT } from "../../mcp/ipc.js";
|
|
27
27
|
const LSP_MAX_FILE_BYTES = RUNTIME_CONFIG.pipeline.lspMaxFileBytes;
|
|
28
28
|
const LSP_MAX_FILE_LINES = RUNTIME_CONFIG.pipeline.lspMaxFileLines;
|
|
29
29
|
const LSP_SPAWN_BUDGET_MS = RUNTIME_CONFIG.pipeline.lspSpawnBudgetMs;
|
|
@@ -3,6 +3,8 @@ import { getLinterPolicyForCwd, markdownlintConfigArgs, } from "../../tool-polic
|
|
|
3
3
|
import { PRIORITY } from "../priorities.js";
|
|
4
4
|
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
5
5
|
import { parseToolRun } from "./utils/tool-failure.js";
|
|
6
|
+
import { isInSpawnTimeoutCooldown, noteSpawnTimeout, } from "../../spawn-timeout-cooldown.js";
|
|
7
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
6
8
|
const markdownlint = createAvailabilityChecker("markdownlint-cli2", ".cmd");
|
|
7
9
|
// markdownlint-cli2 exit codes (its README's "Exit Codes" section): 0 = no
|
|
8
10
|
// findings, 1 = lint findings, 2 = unexpected error (unreadable config, bad
|
|
@@ -106,6 +108,13 @@ const markdownlintRunner = {
|
|
|
106
108
|
}
|
|
107
109
|
if (!cmd)
|
|
108
110
|
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
111
|
+
// #1995: a command cooling down after a spawn timeout already consumed
|
|
112
|
+
// its budget in another lane (availability verify, autofix --fix). Skip
|
|
113
|
+
// without spawning — "not checked", never re-reported as clean.
|
|
114
|
+
if (isInSpawnTimeoutCooldown(cmd)) {
|
|
115
|
+
ctx.log(`markdownlint: ${cmd} is cooling down after a spawn timeout — skipping (one bounded failure budget per edit)`);
|
|
116
|
+
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
117
|
+
}
|
|
109
118
|
// Shared config-args seam (#1247): the autofix path consumes the same
|
|
110
119
|
// builder, so the package-owned fallback config can never drift.
|
|
111
120
|
const configArgs = markdownlintConfigArgs(cwd);
|
|
@@ -113,6 +122,18 @@ const markdownlintRunner = {
|
|
|
113
122
|
timeout: 15000,
|
|
114
123
|
cwd,
|
|
115
124
|
});
|
|
125
|
+
// #1995: a timeout is negative runtime evidence. Arm the cooldown so
|
|
126
|
+
// the autofix and availability lanes cannot hand this command a second
|
|
127
|
+
// budget within the same session.
|
|
128
|
+
if (result.failure === "timeout") {
|
|
129
|
+
noteSpawnTimeout({
|
|
130
|
+
tool: "markdownlint",
|
|
131
|
+
command: cmd,
|
|
132
|
+
phase: "lint",
|
|
133
|
+
durationMs: 15000,
|
|
134
|
+
teardown: result.timeoutTeardown,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
116
137
|
// #1816: this runner read `result.status` zero times, so an exit-2
|
|
117
138
|
// config error with an empty stdout parsed to zero diagnostics and was
|
|
118
139
|
// reported as a clean Markdown file. An empty result must distinguish
|
|
@@ -124,10 +145,13 @@ const markdownlintRunner = {
|
|
|
124
145
|
if (run.skipped)
|
|
125
146
|
return run.skipped;
|
|
126
147
|
const diagnostics = run.diagnostics;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
148
|
+
return finishParsedRun({
|
|
149
|
+
tool: "markdownlint",
|
|
150
|
+
ctx,
|
|
151
|
+
result,
|
|
152
|
+
diagnostics,
|
|
153
|
+
classify: () => ({ status: "succeeded", semantic: "warning" }),
|
|
154
|
+
});
|
|
131
155
|
},
|
|
132
156
|
};
|
|
133
157
|
export default markdownlintRunner;
|
|
@@ -4,6 +4,7 @@ import { hasMypyConfig } from "../../tool-policy.js";
|
|
|
4
4
|
import { PRIORITY } from "../priorities.js";
|
|
5
5
|
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
6
6
|
import { parseToolRun } from "./utils/tool-failure.js";
|
|
7
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
7
8
|
const mypy = createAvailabilityChecker("mypy", "");
|
|
8
9
|
// mypy exit codes: 0 = no type errors, 1 = type errors found, 2 = a blocking
|
|
9
10
|
// error. 2 is NOT a rejected invocation on its own — mypy reports a source
|
|
@@ -89,15 +90,12 @@ const mypyRunner = {
|
|
|
89
90
|
if (run.skipped)
|
|
90
91
|
return run.skipped;
|
|
91
92
|
const diagnostics = run.diagnostics;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return {
|
|
97
|
-
status: hasBlocking ? "failed" : "succeeded",
|
|
93
|
+
return finishParsedRun({
|
|
94
|
+
tool: "mypy",
|
|
95
|
+
ctx,
|
|
96
|
+
result,
|
|
98
97
|
diagnostics,
|
|
99
|
-
|
|
100
|
-
};
|
|
98
|
+
});
|
|
101
99
|
},
|
|
102
100
|
};
|
|
103
101
|
export default mypyRunner;
|
|
@@ -13,6 +13,17 @@ import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
|
13
13
|
import { getJstsLintPolicyForCwd, hasVitePlusConfig, } from "../../tool-policy.js";
|
|
14
14
|
import { PRIORITY } from "../priorities.js";
|
|
15
15
|
import { resolveToolCommand, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
16
|
+
import { finishParsedRun, parseToolRun } from "./utils/tool-failure.js";
|
|
17
|
+
const OXLINT_NO_FILES = Symbol("oxlint-no-files");
|
|
18
|
+
const OXLINT_NO_FILES_UNCONFIRMED = Symbol("oxlint-no-files-unconfirmed");
|
|
19
|
+
const OXLINT_NO_FILES_BANNER = "No files found to lint. Please check your paths and ignore patterns.";
|
|
20
|
+
const OXLINT_NO_FILES_REPORT_KEYS = new Set([
|
|
21
|
+
"diagnostics",
|
|
22
|
+
"number_of_files",
|
|
23
|
+
"number_of_rules",
|
|
24
|
+
"threads_count",
|
|
25
|
+
"start_time",
|
|
26
|
+
]);
|
|
16
27
|
function resolveLocalVp(cwd) {
|
|
17
28
|
const isWin = process.platform === "win32";
|
|
18
29
|
for (const dir of walkUpDirs(cwd)) {
|
|
@@ -89,14 +100,71 @@ const oxlintRunner = {
|
|
|
89
100
|
// unavailable.
|
|
90
101
|
const stdout = result.stdout ?? "";
|
|
91
102
|
const stderr = result.stderr ?? "";
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
103
|
+
const parsedOutput = stdout + stderr;
|
|
104
|
+
const noFilesDecision = decideOxlintNoFiles(result, stdout, stderr);
|
|
105
|
+
// #1994's shared gate classifies invocation and parsed-output failures.
|
|
106
|
+
// The private markers preserve one legitimate nonzero/empty shape and
|
|
107
|
+
// force a status-0 lookalike away from clean. Neither escapes this runner.
|
|
108
|
+
// parseToolRun checks process failures before invoking this parser, so
|
|
109
|
+
// spawn/timeout/killed/signal precedence remains owned by #1994.
|
|
110
|
+
const parsedRun = parseToolRun("oxlint", { result, output: parsedOutput }, () => {
|
|
111
|
+
if (noFilesDecision.kind === "expected-no-files") {
|
|
112
|
+
return [OXLINT_NO_FILES];
|
|
113
|
+
}
|
|
114
|
+
if (noFilesDecision.kind === "unconfirmed-no-files" &&
|
|
115
|
+
result.status === 0) {
|
|
116
|
+
return [OXLINT_NO_FILES_UNCONFIRMED];
|
|
117
|
+
}
|
|
118
|
+
let parsed = parseOxlintJson(stdout, ctx.filePath);
|
|
119
|
+
if (parsed.length === 0 && stdout.length > 0) {
|
|
120
|
+
parsed = parseOxlintUnix(parsedOutput, ctx.filePath);
|
|
121
|
+
}
|
|
122
|
+
return parsed;
|
|
123
|
+
}, { parseOutput: parsedOutput });
|
|
124
|
+
if (parsedRun.skipped)
|
|
125
|
+
return parsedRun.skipped;
|
|
126
|
+
if (parsedRun.diagnostics.includes(OXLINT_NO_FILES)) {
|
|
127
|
+
// Real captured bytes show oxlint exits
|
|
128
|
+
// 1 with "No files found" + number_of_files: 0 when a config excludes
|
|
129
|
+
// the target, so "nonzero exit" alone cannot mean "unreadable report
|
|
130
|
+
// of problems" until the no-files shape is ruled out.
|
|
131
|
+
// Read BEFORE reporting "succeeded" — a config (root's or a nested
|
|
132
|
+
// one nearer the file, per oxlint's own discovery) that ignores this
|
|
133
|
+
// file reports the same empty diagnostics array a clean file does.
|
|
134
|
+
// "succeeded"/"none" would say "we checked, it's clean"; this file
|
|
135
|
+
// was never checked at all.
|
|
136
|
+
return {
|
|
137
|
+
status: "skipped",
|
|
138
|
+
diagnostics: [],
|
|
139
|
+
semantic: "none",
|
|
140
|
+
skipReason: "no-files-matched",
|
|
141
|
+
};
|
|
95
142
|
}
|
|
96
|
-
if (diagnostics.
|
|
97
|
-
|
|
143
|
+
if (parsedRun.diagnostics.includes(OXLINT_NO_FILES_UNCONFIRMED)) {
|
|
144
|
+
const reason = noFilesDecision.kind === "unconfirmed-no-files"
|
|
145
|
+
? noFilesDecision.reason
|
|
146
|
+
: "status-zero";
|
|
147
|
+
return {
|
|
148
|
+
status: "failed",
|
|
149
|
+
diagnostics: [
|
|
150
|
+
{
|
|
151
|
+
id: `oxlint:no-files-unconfirmed:${reason}`,
|
|
152
|
+
message: `oxlint no-files report was not canonical (${reason})`,
|
|
153
|
+
filePath: ctx.filePath,
|
|
154
|
+
line: 1,
|
|
155
|
+
column: 1,
|
|
156
|
+
severity: "warning",
|
|
157
|
+
semantic: "warning",
|
|
158
|
+
tool: "oxlint",
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
semantic: "warning",
|
|
162
|
+
failureKind: "unconfirmed_output",
|
|
163
|
+
failureMessage: `no-files-${reason}`,
|
|
164
|
+
};
|
|
98
165
|
}
|
|
99
|
-
const
|
|
166
|
+
const diagnostics = parsedRun.diagnostics.filter((diagnostic) => diagnostic !== OXLINT_NO_FILES &&
|
|
167
|
+
diagnostic !== OXLINT_NO_FILES_UNCONFIRMED);
|
|
100
168
|
// A warning-only result on exit 0 is oxlint's normal outcome, not a
|
|
101
169
|
// failure: exit 0 means nothing hit ERROR severity. `status: "failed"`
|
|
102
170
|
// here would stop this arm from reporting "succeeded", which breaks two
|
|
@@ -109,13 +177,144 @@ const oxlintRunner = {
|
|
|
109
177
|
// off the tool's raw exit code. The findings themselves still reach the
|
|
110
178
|
// delivery pipeline regardless of `status` — dispatcher.ts buckets by
|
|
111
179
|
// each diagnostic's own `semantic`, so a warning stays a warning.
|
|
112
|
-
return {
|
|
113
|
-
|
|
180
|
+
return finishParsedRun({
|
|
181
|
+
tool: "oxlint",
|
|
182
|
+
ctx,
|
|
183
|
+
result,
|
|
114
184
|
diagnostics,
|
|
115
|
-
|
|
116
|
-
|
|
185
|
+
classify: (diagnostics) => {
|
|
186
|
+
const hasBlocking = diagnostics.some((d) => d.semantic === "blocking");
|
|
187
|
+
return {
|
|
188
|
+
status: !hasBlocking && result.status === 0 ? "succeeded" : "failed",
|
|
189
|
+
semantic: hasBlocking ? "blocking" : "warning",
|
|
190
|
+
};
|
|
191
|
+
},
|
|
192
|
+
});
|
|
117
193
|
},
|
|
118
194
|
};
|
|
195
|
+
function oxlintProcessState(result) {
|
|
196
|
+
const failureKind = result.spawnFailure?.kind;
|
|
197
|
+
if (result.signal || result.failure === "signal")
|
|
198
|
+
return "signal";
|
|
199
|
+
if (result.failure === "timeout" || failureKind === "timeout")
|
|
200
|
+
return "timeout";
|
|
201
|
+
if (result.failure === "aborted" || failureKind === "killed")
|
|
202
|
+
return "killed";
|
|
203
|
+
if (result.failure === "spawn" || result.error)
|
|
204
|
+
return "spawn";
|
|
205
|
+
if (result.outputTruncated)
|
|
206
|
+
return "truncated";
|
|
207
|
+
return "normal";
|
|
208
|
+
}
|
|
209
|
+
function isNonnegativeInteger(value) {
|
|
210
|
+
return Number.isInteger(value) && value >= 0;
|
|
211
|
+
}
|
|
212
|
+
function isPositiveInteger(value) {
|
|
213
|
+
return Number.isInteger(value) && value >= 1;
|
|
214
|
+
}
|
|
215
|
+
function isNonnegativeFinite(value) {
|
|
216
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* One decision seam for every oxlint no-files axis (#1998).
|
|
220
|
+
*
|
|
221
|
+
* Real oxlint 1.79.0 establishes the only expected shape: a normal completed
|
|
222
|
+
* process, exit 1, empty stderr, the exact no-files banner, and a JSON object
|
|
223
|
+
* containing exactly the five captured summary fields with canonical types
|
|
224
|
+
* and ranges. Diagnostics must be empty and `number_of_files` must be zero.
|
|
225
|
+
*
|
|
226
|
+
* Any process-control evidence wins before report bytes. Any no-files
|
|
227
|
+
* lookalike that differs on status, stderr, banner, JSON syntax/schema,
|
|
228
|
+
* diagnostics, or file count is unconfirmed rather than clean. A report with
|
|
229
|
+
* no no-files evidence remains an ordinary oxlint report for the normal parser.
|
|
230
|
+
*/
|
|
231
|
+
export function decideOxlintNoFiles(result, stdout, stderr) {
|
|
232
|
+
const processState = oxlintProcessState(result);
|
|
233
|
+
if (processState !== "normal") {
|
|
234
|
+
return {
|
|
235
|
+
kind: "unconfirmed-no-files",
|
|
236
|
+
reason: `process-${processState}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const jsonStart = stdout.indexOf("{");
|
|
240
|
+
const bannerText = (jsonStart === -1 ? stdout : stdout.slice(0, jsonStart)).trim();
|
|
241
|
+
const banner = bannerText === OXLINT_NO_FILES_BANNER
|
|
242
|
+
? "exact"
|
|
243
|
+
: /no files found.+lint/i.test(bannerText)
|
|
244
|
+
? "near"
|
|
245
|
+
: "missing";
|
|
246
|
+
let report;
|
|
247
|
+
let jsonMalformed = jsonStart === -1;
|
|
248
|
+
if (jsonStart !== -1) {
|
|
249
|
+
try {
|
|
250
|
+
const parsed = JSON.parse(stdout.slice(jsonStart));
|
|
251
|
+
if (typeof parsed === "object" &&
|
|
252
|
+
parsed !== null &&
|
|
253
|
+
!Array.isArray(parsed)) {
|
|
254
|
+
report = parsed;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
jsonMalformed = true;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
jsonMalformed = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const hasFileCount = report !== undefined &&
|
|
265
|
+
Object.prototype.hasOwnProperty.call(report, "number_of_files");
|
|
266
|
+
const fileCount = report?.number_of_files;
|
|
267
|
+
const hasNoFilesEvidence = banner !== "missing" ||
|
|
268
|
+
(hasFileCount && (fileCount === 0 || !isNonnegativeInteger(fileCount)));
|
|
269
|
+
if (!hasNoFilesEvidence)
|
|
270
|
+
return { kind: "ordinary-report" };
|
|
271
|
+
if (result.status == null) {
|
|
272
|
+
return { kind: "unconfirmed-no-files", reason: "status-null" };
|
|
273
|
+
}
|
|
274
|
+
if (result.status === 0) {
|
|
275
|
+
return { kind: "unconfirmed-no-files", reason: "status-zero" };
|
|
276
|
+
}
|
|
277
|
+
if (result.status !== 1) {
|
|
278
|
+
return { kind: "unconfirmed-no-files", reason: "status-other" };
|
|
279
|
+
}
|
|
280
|
+
if (stderr.trim().length > 0) {
|
|
281
|
+
return { kind: "unconfirmed-no-files", reason: "stderr-nonempty" };
|
|
282
|
+
}
|
|
283
|
+
if (banner === "near") {
|
|
284
|
+
return { kind: "unconfirmed-no-files", reason: "banner-near" };
|
|
285
|
+
}
|
|
286
|
+
if (banner === "missing") {
|
|
287
|
+
return { kind: "unconfirmed-no-files", reason: "banner-missing" };
|
|
288
|
+
}
|
|
289
|
+
if (jsonMalformed || !report) {
|
|
290
|
+
return { kind: "unconfirmed-no-files", reason: "json-malformed" };
|
|
291
|
+
}
|
|
292
|
+
const keys = Object.keys(report);
|
|
293
|
+
if (keys.some((key) => !OXLINT_NO_FILES_REPORT_KEYS.has(key))) {
|
|
294
|
+
return { kind: "unconfirmed-no-files", reason: "json-unknown-key" };
|
|
295
|
+
}
|
|
296
|
+
if (OXLINT_NO_FILES_REPORT_KEYS.size !== keys.length ||
|
|
297
|
+
[...OXLINT_NO_FILES_REPORT_KEYS].some((key) => !Object.prototype.hasOwnProperty.call(report, key))) {
|
|
298
|
+
return { kind: "unconfirmed-no-files", reason: "json-missing-key" };
|
|
299
|
+
}
|
|
300
|
+
if (!Array.isArray(report.diagnostics) ||
|
|
301
|
+
!isNonnegativeInteger(report.number_of_files) ||
|
|
302
|
+
!isNonnegativeInteger(report.number_of_rules) ||
|
|
303
|
+
!isPositiveInteger(report.threads_count) ||
|
|
304
|
+
!isNonnegativeFinite(report.start_time)) {
|
|
305
|
+
return {
|
|
306
|
+
kind: "unconfirmed-no-files",
|
|
307
|
+
reason: "json-known-field-invalid",
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
if (report.diagnostics.length > 0) {
|
|
311
|
+
return { kind: "unconfirmed-no-files", reason: "diagnostics-nonempty" };
|
|
312
|
+
}
|
|
313
|
+
if (report.number_of_files !== 0) {
|
|
314
|
+
return { kind: "unconfirmed-no-files", reason: "files-nonzero" };
|
|
315
|
+
}
|
|
316
|
+
return { kind: "expected-no-files" };
|
|
317
|
+
}
|
|
119
318
|
// Oxlint codes look like "eslint(no-debugger)" or "oxc(approx-constant)".
|
|
120
319
|
// Strip the plugin prefix so the rule lines up with what users expect.
|
|
121
320
|
// indexOf-based extraction avoids a regex hot-spot Sonar flagged for
|
|
@@ -142,8 +341,10 @@ function parseOxlintJson(raw, filePath) {
|
|
|
142
341
|
catch {
|
|
143
342
|
return [];
|
|
144
343
|
}
|
|
344
|
+
if (!Array.isArray(parsed.diagnostics))
|
|
345
|
+
return [];
|
|
145
346
|
const diagnostics = [];
|
|
146
|
-
for (const d of parsed.diagnostics
|
|
347
|
+
for (const d of parsed.diagnostics) {
|
|
147
348
|
const rule = extractOxlintRule(d.code);
|
|
148
349
|
const label = d.labels?.[0]?.span;
|
|
149
350
|
const lineNum = label?.line ?? 1;
|
|
@@ -33,7 +33,7 @@ const phpLintRunner = {
|
|
|
33
33
|
skipTestFiles: false,
|
|
34
34
|
async run(ctx) {
|
|
35
35
|
const cwd = ctx.cwd || process.cwd();
|
|
36
|
-
if (!(await
|
|
36
|
+
if (!(await php.isAvailableAsync(cwd))) {
|
|
37
37
|
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
38
38
|
}
|
|
39
39
|
const cmd = php.getCommand(cwd);
|
|
@@ -4,6 +4,7 @@ import { getLinterPolicyForCwd, hasPhpstanConfig } from "../../tool-policy.js";
|
|
|
4
4
|
import { PRIORITY } from "../priorities.js";
|
|
5
5
|
import { createAvailabilityChecker, resolveVendorToolCommand, } from "./utils/runner-helpers.js";
|
|
6
6
|
import { parseToolRun } from "./utils/tool-failure.js";
|
|
7
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
7
8
|
// phpstan's documented exit codes: 0 = no errors, 1 = errors found, 2 = a
|
|
8
9
|
// fatal/internal error that stopped the analysis. Only 1 is a run that carries
|
|
9
10
|
// findings.
|
|
@@ -107,10 +108,13 @@ const phpstanRunner = {
|
|
|
107
108
|
if (run.skipped)
|
|
108
109
|
return run.skipped;
|
|
109
110
|
const diagnostics = run.diagnostics;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
return finishParsedRun({
|
|
112
|
+
tool: "phpstan",
|
|
113
|
+
ctx,
|
|
114
|
+
result,
|
|
115
|
+
diagnostics,
|
|
116
|
+
classify: () => ({ status: "failed", semantic: "blocking" }),
|
|
117
|
+
});
|
|
114
118
|
},
|
|
115
119
|
};
|
|
116
120
|
export default phpstanRunner;
|
|
@@ -244,7 +244,11 @@ function parsePSAnalyzerOutput(raw, filePath) {
|
|
|
244
244
|
.filter((item) => item.Message && item.Line)
|
|
245
245
|
.map((item) => {
|
|
246
246
|
const sev = (item.Severity ?? "Warning").toLowerCase();
|
|
247
|
-
const severity =
|
|
247
|
+
const severity = sev === "error" || sev === "parseerror"
|
|
248
|
+
? "error"
|
|
249
|
+
: sev === "information"
|
|
250
|
+
? "info"
|
|
251
|
+
: "warning";
|
|
248
252
|
const rule = item.RuleName ?? "PSScriptAnalyzer";
|
|
249
253
|
return {
|
|
250
254
|
id: `psscriptanalyzer-${rule}-${item.Line}`,
|
|
@@ -295,8 +299,10 @@ const psScriptAnalyzerRunner = {
|
|
|
295
299
|
const result = await spawnPs(cmd, [
|
|
296
300
|
"-NoProfile",
|
|
297
301
|
"-NonInteractive",
|
|
298
|
-
"-File",
|
|
299
|
-
|
|
302
|
+
"-File",
|
|
303
|
+
tmpScript,
|
|
304
|
+
"-FilePath",
|
|
305
|
+
absPath,
|
|
300
306
|
]);
|
|
301
307
|
const hostStallMs = sampler.stop();
|
|
302
308
|
const elapsedMs = Date.now() - startedAt;
|
|
@@ -396,9 +402,7 @@ const psScriptAnalyzerRunner = {
|
|
|
396
402
|
// than latched. It must still never be read as a clean file
|
|
397
403
|
// (#1598): empty/malformed stdout on a successful exit is a lost
|
|
398
404
|
// or truncated write, not evidence of zero diagnostics.
|
|
399
|
-
const unreadableReason = result.stdout.trim()
|
|
400
|
-
? "unparseable"
|
|
401
|
-
: "empty";
|
|
405
|
+
const unreadableReason = result.stdout.trim() ? "unparseable" : "empty";
|
|
402
406
|
logAvailabilityDecision({
|
|
403
407
|
tool: "psscriptanalyzer-stdout",
|
|
404
408
|
verdict: "unavailable",
|
|
@@ -11,6 +11,7 @@ import { getLSPService } from "../../lsp/index.js";
|
|
|
11
11
|
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
12
12
|
import { PRIORITY } from "../priorities.js";
|
|
13
13
|
import { createAvailabilityChecker, resolveAvailableOrInstall, } from "./utils/runner-helpers.js";
|
|
14
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
14
15
|
const pyright = createAvailabilityChecker("pyright", ".exe");
|
|
15
16
|
const pyrightRunner = {
|
|
16
17
|
id: "pyright",
|
|
@@ -31,7 +32,7 @@ const pyrightRunner = {
|
|
|
31
32
|
// Get pyright command - try multiple strategies
|
|
32
33
|
let cmd = null;
|
|
33
34
|
// Strategy 1: Check cached availability (fast path)
|
|
34
|
-
if (await
|
|
35
|
+
if (await pyright.isAvailableAsync(cwd)) {
|
|
35
36
|
cmd = pyright.getCommand(cwd);
|
|
36
37
|
}
|
|
37
38
|
// Strategy 2: use the shared availability taxonomy and install suppression.
|
|
@@ -64,24 +65,32 @@ const pyrightRunner = {
|
|
|
64
65
|
}
|
|
65
66
|
const output = (result.stdout || "").trim();
|
|
66
67
|
if (!output) {
|
|
67
|
-
|
|
68
|
+
// Empty stdout with a nonzero exit and stderr chatter is an unreadable
|
|
69
|
+
// report of problems, never clean (#1839). The helper turns that into
|
|
70
|
+
// failed + parse-error; exit 0 stays clean.
|
|
71
|
+
return finishParsedRun({
|
|
72
|
+
tool: "pyright",
|
|
73
|
+
ctx,
|
|
74
|
+
result,
|
|
75
|
+
diagnostics: [],
|
|
76
|
+
});
|
|
68
77
|
}
|
|
69
78
|
try {
|
|
70
79
|
const data = JSON.parse(output);
|
|
71
80
|
const diagnostics = parsePyrightOutput(data, ctx.filePath);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
status: hasErrors ? "failed" : "succeeded",
|
|
81
|
+
return finishParsedRun({
|
|
82
|
+
tool: "pyright",
|
|
83
|
+
ctx,
|
|
84
|
+
result,
|
|
78
85
|
diagnostics,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
? "
|
|
83
|
-
: "
|
|
84
|
-
|
|
86
|
+
classify: (diagnostics) => {
|
|
87
|
+
const hasErrors = diagnostics.some((d) => d.severity === "error");
|
|
88
|
+
return {
|
|
89
|
+
status: hasErrors ? "failed" : "succeeded",
|
|
90
|
+
semantic: hasErrors ? "blocking" : "warning",
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
});
|
|
85
94
|
// pi-lens-ignore: missing-error-propagation
|
|
86
95
|
}
|
|
87
96
|
catch {
|
|
@@ -32,7 +32,7 @@ const makeClippyProbe = (cargoExe) => createCwdCachedProbe((cwd) => safeSpawnAsy
|
|
|
32
32
|
}), { tool: "clippy", budgetMs: CLIPPY_PROBE_BUDGET_MS });
|
|
33
33
|
const clippyAvailabilityByCargo = new Map();
|
|
34
34
|
function getClippyProbe(cargoExe) {
|
|
35
|
-
return clippyAvailabilityByCargo.get(cargoExe) ?? refreshClippyProbe(cargoExe);
|
|
35
|
+
return (clippyAvailabilityByCargo.get(cargoExe) ?? refreshClippyProbe(cargoExe));
|
|
36
36
|
}
|
|
37
37
|
/** Replace the cached probe so a post-install state is observed. */
|
|
38
38
|
function refreshClippyProbe(cargoExe) {
|
|
@@ -24,6 +24,7 @@ import * as path from "node:path";
|
|
|
24
24
|
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
25
25
|
import { PRIORITY } from "../priorities.js";
|
|
26
26
|
import { createAvailabilityChecker, lspPrimaryCoversFile, resolveAvailableOrInstall, } from "./utils/runner-helpers.js";
|
|
27
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
27
28
|
const shellcheck = createAvailabilityChecker("shellcheck", ".exe");
|
|
28
29
|
function findShellcheckConfig(cwd) {
|
|
29
30
|
const local = path.join(cwd, ".shellcheckrc");
|
|
@@ -122,7 +123,7 @@ const shellcheckRunner = {
|
|
|
122
123
|
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
123
124
|
}
|
|
124
125
|
let cmd = null;
|
|
125
|
-
if (await
|
|
126
|
+
if (await shellcheck.isAvailableAsync(cwd)) {
|
|
126
127
|
cmd = shellcheck.getCommand(cwd);
|
|
127
128
|
}
|
|
128
129
|
else {
|
|
@@ -157,15 +158,12 @@ const shellcheckRunner = {
|
|
|
157
158
|
// Parse diagnostics
|
|
158
159
|
const raw = result.stdout + result.stderr;
|
|
159
160
|
const diagnostics = parseShellcheckOutput(raw, ctx.filePath);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return {
|
|
165
|
-
status: hasBlocking ? "failed" : "succeeded",
|
|
161
|
+
return finishParsedRun({
|
|
162
|
+
tool: "shellcheck",
|
|
163
|
+
ctx,
|
|
164
|
+
result,
|
|
166
165
|
diagnostics,
|
|
167
|
-
|
|
168
|
-
};
|
|
166
|
+
});
|
|
169
167
|
},
|
|
170
168
|
};
|
|
171
169
|
export default shellcheckRunner;
|
|
@@ -34,7 +34,7 @@ const shfmtRunner = {
|
|
|
34
34
|
async run(ctx) {
|
|
35
35
|
const cwd = ctx.cwd || process.cwd();
|
|
36
36
|
let cmd = null;
|
|
37
|
-
if (await
|
|
37
|
+
if (await shfmt.isAvailableAsync(cwd)) {
|
|
38
38
|
cmd = shfmt.getCommand(cwd);
|
|
39
39
|
}
|
|
40
40
|
else {
|
|
@@ -79,7 +79,10 @@ const shfmtRunner = {
|
|
|
79
79
|
// .editorconfig — otherwise this nags on every shell write against shfmt's
|
|
80
80
|
// defaults (#211). Parse errors (above) are always reported.
|
|
81
81
|
if (!hasEditorConfig(cwd)) {
|
|
82
|
-
|
|
82
|
+
// #211: without project opt-in, do not nag about formatting. But
|
|
83
|
+
// shfmt DID exit 1 — differences exist — so this is "chose not to
|
|
84
|
+
// check", reported as skipped, never as a clean result (#1839).
|
|
85
|
+
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
83
86
|
}
|
|
84
87
|
// Extract first changed line from diff if possible
|
|
85
88
|
const diffOutput = result.stdout ?? result.stderr ?? "";
|
|
@@ -3,6 +3,7 @@ import { getLinterPolicyForCwd, hasSqlfluffConfig } from "../../tool-policy.js";
|
|
|
3
3
|
import { PRIORITY } from "../priorities.js";
|
|
4
4
|
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
5
5
|
import { parseToolRun } from "./utils/tool-failure.js";
|
|
6
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
6
7
|
const sqlfluff = createAvailabilityChecker("sqlfluff", ".exe");
|
|
7
8
|
// sqlfluff exit codes (its CLI docs): 0 = clean, 1 = violations found, 2 = a
|
|
8
9
|
// user error that stopped the lint (unknown dialect, unreadable config).
|
|
@@ -161,14 +162,13 @@ const sqlfluffRunner = {
|
|
|
161
162
|
if (run.skipped)
|
|
162
163
|
return run.skipped;
|
|
163
164
|
const diagnostics = run.diagnostics;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
status: "failed",
|
|
165
|
+
return finishParsedRun({
|
|
166
|
+
tool: "sqlfluff",
|
|
167
|
+
ctx,
|
|
168
|
+
result,
|
|
169
169
|
diagnostics,
|
|
170
|
-
semantic: "warning",
|
|
171
|
-
};
|
|
170
|
+
classify: () => ({ status: "failed", semantic: "warning" }),
|
|
171
|
+
});
|
|
172
172
|
},
|
|
173
173
|
};
|
|
174
174
|
export default sqlfluffRunner;
|
|
@@ -4,6 +4,7 @@ import { getLinterPolicyForCwd, hasStylelintConfig, } from "../../tool-policy.js
|
|
|
4
4
|
import { PRIORITY } from "../priorities.js";
|
|
5
5
|
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
6
6
|
import { parseToolRun } from "./utils/tool-failure.js";
|
|
7
|
+
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
7
8
|
const stylelint = createAvailabilityChecker("stylelint", ".cmd");
|
|
8
9
|
// stylelint exit codes (its "Exit codes" docs page): 0 = no problems, 1 = a
|
|
9
10
|
// fatal error, 2 = lint problems found, 78 = a configuration error.
|
|
@@ -146,15 +147,12 @@ const stylelintRunner = {
|
|
|
146
147
|
if (run.skipped)
|
|
147
148
|
return run.skipped;
|
|
148
149
|
const diagnostics = run.diagnostics;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return {
|
|
154
|
-
status: hasBlocking ? "failed" : "succeeded",
|
|
150
|
+
return finishParsedRun({
|
|
151
|
+
tool: "stylelint",
|
|
152
|
+
ctx,
|
|
153
|
+
result,
|
|
155
154
|
diagnostics,
|
|
156
|
-
|
|
157
|
-
};
|
|
155
|
+
});
|
|
158
156
|
},
|
|
159
157
|
};
|
|
160
158
|
export default stylelintRunner;
|