pi-lens 4.3.0 → 4.4.1
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/CHANGELOG.md +1159 -0
- package/README.md +116 -25
- package/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/dist/chunk-2BEMIWEW.js +51 -0
- package/dist/chunk-2EECBNC5.js +89 -0
- package/dist/chunk-2FQ62SPM.js +83 -0
- package/dist/chunk-2UMYMRI3.js +118 -0
- package/dist/chunk-34OCDWOS.js +48 -0
- package/dist/chunk-3FERWMCH.js +144 -0
- package/dist/chunk-3JL6IFD7.js +97 -0
- package/dist/chunk-3JSEWUWI.js +327 -0
- package/dist/chunk-3MED75HT.js +37 -0
- package/dist/chunk-3MRXIJ6I.js +79 -0
- package/dist/chunk-3P4PF2BX.js +2250 -0
- package/dist/chunk-3PNFWVHT.js +201 -0
- package/dist/chunk-3TTPKMEF.js +162 -0
- package/dist/chunk-5JHXUETW.js +326 -0
- package/dist/chunk-5W3R6LFT.js +24 -0
- package/dist/chunk-64LU2OVH.js +341 -0
- package/dist/chunk-6B5I6ICN.js +44 -0
- package/dist/chunk-6P54TMWL.js +274 -0
- package/dist/chunk-6UYA642J.js +145 -0
- package/dist/chunk-6XX5HCLK.js +398 -0
- package/dist/chunk-7AXO3ZDF.js +30 -0
- package/dist/chunk-7BX5DWSA.js +1907 -0
- package/dist/chunk-7ELY2CSM.js +902 -0
- package/dist/chunk-7M4T5N3V.js +38 -0
- package/dist/chunk-7U2IDNXN.js +37 -0
- package/dist/chunk-ABBOA7UD.js +157 -0
- package/dist/chunk-AFZYMAIV.js +756 -0
- package/dist/chunk-ALQRYH6O.js +112 -0
- package/dist/chunk-AXKPQ6ZI.js +1610 -0
- package/dist/chunk-BHWHXMQ2.js +62 -0
- package/dist/chunk-BJF25SUG.js +22 -0
- package/dist/chunk-BNKLYOOO.js +18 -0
- package/dist/chunk-BW5KFIQC.js +59 -0
- package/dist/chunk-CBD2B5CP.js +599 -0
- package/dist/chunk-CFYISHUW.js +42 -0
- package/dist/chunk-CMU4RMJB.js +30 -0
- package/dist/chunk-CULQYFLU.js +14 -0
- package/dist/chunk-D65GOCJB.js +289 -0
- package/dist/chunk-D6YF5HKX.js +59 -0
- package/dist/chunk-DMS52BEP.js +342 -0
- package/dist/chunk-ELVWJYRV.js +211 -0
- package/dist/chunk-EUT3B22Y.js +27 -0
- package/dist/chunk-F5VLZHUW.js +146 -0
- package/dist/chunk-FC4RP4I2.js +12 -0
- package/dist/chunk-FGALODG3.js +55 -0
- package/dist/chunk-G3RLJYA2.js +2358 -0
- package/dist/chunk-GAYGGICG.js +32 -0
- package/dist/chunk-H2W2AXD3.js +419 -0
- package/dist/chunk-H5EV3VMF.js +114 -0
- package/dist/chunk-HREZQCT3.js +106 -0
- package/dist/chunk-HSIRMK2D.js +517 -0
- package/dist/chunk-IMSQR4WO.js +184 -0
- package/dist/chunk-IQZXOZ7S.js +4816 -0
- package/dist/chunk-IR6XFA5P.js +37 -0
- package/dist/chunk-IUKPRZER.js +78 -0
- package/dist/chunk-IUR76K6A.js +262 -0
- package/dist/chunk-J3FZR3YY.js +98 -0
- package/dist/chunk-J6DFZDFA.js +562 -0
- package/dist/chunk-J7WJZ6W7.js +50 -0
- package/dist/chunk-JONGANYH.js +202 -0
- package/dist/chunk-KJCWXUUS.js +425 -0
- package/dist/chunk-KJN4IOEJ.js +17 -0
- package/dist/chunk-KMGPUKFD.js +25 -0
- package/dist/chunk-LD7WFTRX.js +4533 -0
- package/dist/chunk-LJDODBBZ.js +78 -0
- package/dist/chunk-LNOMA3MP.js +169 -0
- package/dist/chunk-MGIWSROG.js +2334 -0
- package/dist/chunk-MQA2YBAH.js +308 -0
- package/dist/chunk-MTDRLSI7.js +21720 -0
- package/dist/chunk-N2IRDBZI.js +2355 -0
- package/dist/chunk-N77WFUL7.js +50 -0
- package/dist/chunk-N7YNJE5R.js +466 -0
- package/dist/chunk-NABLC7W3.js +148 -0
- package/dist/chunk-NFXP47RV.js +999 -0
- package/dist/chunk-NJF2X5XF.js +45 -0
- package/dist/chunk-NXL4FFQQ.js +47 -0
- package/dist/chunk-O7HZX7CA.js +309 -0
- package/dist/chunk-OC7LYAU5.js +708 -0
- package/dist/chunk-OEX24ECI.js +348 -0
- package/dist/chunk-OYOB3ZFG.js +78 -0
- package/dist/chunk-OYTMZXRF.js +41 -0
- package/dist/chunk-OZJINN4O.js +84 -0
- package/dist/chunk-PCHDGUKT.js +23 -0
- package/dist/chunk-QOZXJ4NA.js +3364 -0
- package/dist/chunk-QYF5S6P6.js +45 -0
- package/dist/chunk-RJFED73B.js +79 -0
- package/dist/chunk-RTQNRM5X.js +27 -0
- package/dist/chunk-S6AMWKPC.js +189 -0
- package/dist/chunk-T4QZ6FEH.js +308 -0
- package/dist/chunk-T54VJRAD.js +5456 -0
- package/dist/chunk-TA5L5KWQ.js +167 -0
- package/dist/chunk-TQFBZVCG.js +27 -0
- package/dist/chunk-U52SAGRM.js +62 -0
- package/dist/chunk-UEAHAMEI.js +5814 -0
- package/dist/chunk-UGSMCQ4D.js +327 -0
- package/dist/chunk-UOPVJQ4N.js +103 -0
- package/dist/chunk-USHG4DLH.js +459 -0
- package/dist/chunk-UXVNL3D7.js +23 -0
- package/dist/chunk-V5MEBST3.js +4139 -0
- package/dist/chunk-VGEVL5EQ.js +29 -0
- package/dist/chunk-VPWKF3GN.js +87 -0
- package/dist/chunk-VSMJK3ZJ.js +1250 -0
- package/dist/chunk-VYKKMYVT.js +560 -0
- package/dist/chunk-VZHJS6DR.js +442 -0
- package/dist/chunk-WATC3IQR.js +213 -0
- package/dist/chunk-WPE5FPGR.js +54 -0
- package/dist/chunk-WSEWKCXU.js +188 -0
- package/dist/chunk-WW5BLB74.js +659 -0
- package/dist/chunk-XGUL4SLQ.js +406 -0
- package/dist/chunk-XHSCVSOL.js +170 -0
- package/dist/chunk-XIMYZ3JA.js +27 -0
- package/dist/chunk-YLN4K6WD.js +385 -0
- package/dist/chunk-Z3CCVDUB.js +76 -0
- package/dist/chunk-Z54ZSOBZ.js +61 -0
- package/dist/chunk-Z6BB4JLQ.js +478 -0
- package/dist/chunk-Z7QQA2KT.js +27 -0
- package/dist/chunk-ZETYB3XG.js +2626 -0
- package/dist/chunk-ZMOMPX2Z.js +87 -0
- package/dist/chunk-ZOEYVXSV.js +149 -0
- package/dist/chunk-ZZUFZUQZ.js +12120 -0
- package/dist/index.js +39712 -29876
- package/dist/mcp/analyze-cli.js +186 -232
- package/dist/mcp/cli.js +137 -98
- package/dist/mcp/server.js +22688 -1573
- package/dist/mcp/worker.js +97 -38
- package/dist/probes/installer.js +135 -0
- package/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/dist/workers/review-graph-persist-worker.js +15 -0
- package/docs/agent-guide.md +13 -4
- package/docs/agent-tools.md +42 -0
- package/docs/ast-grep_rules_catalog.md +5 -4
- package/docs/configuration.md +28 -2
- package/docs/custom-rules.md +25 -2
- package/docs/environment-variables.md +86 -8
- package/docs/features.md +45 -5
- package/docs/globalconfig.md +2 -1
- package/docs/io-bridge-v2-migration.md +94 -0
- package/docs/lsp-capability-matrix.md +37 -4
- package/docs/lsp-idle-eviction.md +124 -0
- package/docs/mcp.md +21 -5
- package/docs/merge-queue-rollout.md +77 -0
- package/docs/pi-lens-fixer.md +160 -88
- package/docs/pi-lens-investigator.md +74 -26
- package/docs/pi-lens-merge-policy.md +736 -0
- package/docs/pi-lens-monitor.md +75 -7
- package/docs/pi-lens-retro.md +6 -4
- package/docs/pi-lens-reviewer.md +189 -48
- package/docs/pi-lens-subagent.md +246 -45
- package/docs/pi-lens-warden.md +18 -7
- package/docs/public-api-stability.md +55 -0
- package/docs/release-qa-baseline.md +84 -17
- package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/docs/schema/pi-lens-config-v1.json +530 -0
- package/docs/servercapabilities.md +56 -49
- package/docs/settings.md +1 -0
- package/docs/usage.md +5 -1
- package/docs/word-index.md +6 -0
- package/grammars/tree-sitter-bash.wasm +0 -0
- package/grammars/tree-sitter-bash.wasm.json +3 -3
- package/package.json +19 -7
- package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
- package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
- package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
- package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
- package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
- package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
- package/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/scripts/download-grammars.js +5 -0
- package/scripts/grammars.lock.json +6 -1
- package/scripts/install-selftest.mjs +33 -34
- package/scripts/lib/host-provided-deps.mjs +13 -4
- package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/dist/clients/actionable-warnings-logger.js +0 -35
- package/dist/clients/actionable-warnings.js +0 -1610
- package/dist/clients/advisory-provenance.js +0 -593
- package/dist/clients/agent-behavior-client.js +0 -147
- package/dist/clients/agent-nudge.js +0 -325
- package/dist/clients/analysed-root.js +0 -1
- package/dist/clients/ast-grep-client.js +0 -731
- package/dist/clients/ast-grep-rule-manager.js +0 -146
- package/dist/clients/ast-grep-tool-logger.js +0 -118
- package/dist/clients/ast-grep-types.js +0 -10
- package/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/dist/clients/atomic-write-staging.js +0 -75
- package/dist/clients/atomic-write.js +0 -189
- package/dist/clients/availability-probe-flight.js +0 -12
- package/dist/clients/bash-file-access.js +0 -1056
- package/dist/clients/biome-client.js +0 -357
- package/dist/clients/blocker-freshness.js +0 -837
- package/dist/clients/blocker-past-eof.js +0 -129
- package/dist/clients/bootstrap.js +0 -569
- package/dist/clients/bounded-cache.js +0 -190
- package/dist/clients/bounded-pid-file-lock.js +0 -202
- package/dist/clients/bounded-telemetry.js +0 -295
- package/dist/clients/build-identity.js +0 -95
- package/dist/clients/bundled-resource-health.js +0 -113
- package/dist/clients/bus-events-logger.js +0 -105
- package/dist/clients/bus-publish.js +0 -171
- package/dist/clients/cache/rule-cache.js +0 -190
- package/dist/clients/cache-manager.js +0 -524
- package/dist/clients/cache-observability.js +0 -1313
- package/dist/clients/call-graph.js +0 -852
- package/dist/clients/cargo-manifest.js +0 -422
- package/dist/clients/cascade-budget.js +0 -196
- package/dist/clients/cascade-format.js +0 -315
- package/dist/clients/cascade-logger.js +0 -31
- package/dist/clients/cascade-types.js +0 -9
- package/dist/clients/child-unref.js +0 -124
- package/dist/clients/code-quality-warnings.js +0 -286
- package/dist/clients/codebase-model.js +0 -173
- package/dist/clients/collateral-test-role.js +0 -40
- package/dist/clients/complexity-client.js +0 -462
- package/dist/clients/config-core/deny.js +0 -221
- package/dist/clients/config-core/index.js +0 -50
- package/dist/clients/config-core/merge.js +0 -357
- package/dist/clients/config-core/normalize.js +0 -340
- package/dist/clients/config-core/process-spec.js +0 -248
- package/dist/clients/config-core/provenance.js +0 -164
- package/dist/clients/config-core/records.js +0 -218
- package/dist/clients/config-core/resolve.js +0 -125
- package/dist/clients/config-core/safe-object.js +0 -78
- package/dist/clients/config-core/schema.js +0 -165
- package/dist/clients/config-diagnostic-codes.js +0 -285
- package/dist/clients/config-locations.js +0 -388
- package/dist/clients/config-resolve.js +0 -798
- package/dist/clients/config-schema.js +0 -251
- package/dist/clients/config-warn.js +0 -407
- package/dist/clients/console-guard-install.js +0 -26
- package/dist/clients/cooperative-budget.js +0 -42
- package/dist/clients/dead-code-client.js +0 -510
- package/dist/clients/dead-code-logger.js +0 -30
- package/dist/clients/deadline-utils.js +0 -280
- package/dist/clients/debug-handles.js +0 -211
- package/dist/clients/debug-heap.js +0 -174
- package/dist/clients/deferred-lsp-work.js +0 -106
- package/dist/clients/degradation-ledger.js +0 -426
- package/dist/clients/demoted-finding-render.js +0 -169
- package/dist/clients/dependency-checker.js +0 -885
- package/dist/clients/deps/ast-grep-napi.js +0 -22
- package/dist/clients/deps/js-yaml.js +0 -9
- package/dist/clients/deps/minimatch.js +0 -4
- package/dist/clients/deps/pi-tui.js +0 -14
- package/dist/clients/deps/typebox.js +0 -14
- package/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/dist/clients/deps/web-tree-sitter.js +0 -24
- package/dist/clients/diagnostic-dispositions.js +0 -630
- package/dist/clients/diagnostic-line-freshness.js +0 -305
- package/dist/clients/diagnostic-logger.js +0 -73
- package/dist/clients/diagnostic-tracker.js +0 -105
- package/dist/clients/diagnostics-publish.js +0 -230
- package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/dist/clients/dispatch/dispatcher.js +0 -1269
- package/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/dist/clients/dispatch/fact-runner.js +0 -30
- package/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/dist/clients/dispatch/fact-store.js +0 -377
- package/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/dist/clients/dispatch/facts/file-content.js +0 -19
- package/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/dist/clients/dispatch/finding-policy.js +0 -339
- package/dist/clients/dispatch/indent-detect.js +0 -417
- package/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/dist/clients/dispatch/integration.js +0 -2377
- package/dist/clients/dispatch/lazy.js +0 -11
- package/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/dist/clients/dispatch/plan.js +0 -278
- package/dist/clients/dispatch/priorities.js +0 -20
- package/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/dist/clients/dispatch/rule-ignores.js +0 -69
- package/dist/clients/dispatch/rule-policy.js +0 -135
- package/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/dist/clients/dispatch/runner-context.js +0 -52
- package/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/dist/clients/dispatch/runners/credo.js +0 -82
- package/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/dist/clients/dispatch/runners/detekt.js +0 -176
- package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/dist/clients/dispatch/runners/eslint.js +0 -137
- package/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/dist/clients/dispatch/runners/index.js +0 -108
- package/dist/clients/dispatch/runners/javac.js +0 -99
- package/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/dist/clients/dispatch/runners/lsp.js +0 -379
- package/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/dist/clients/dispatch/runners/mypy.js +0 -102
- package/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/dist/clients/dispatch/runners/pyright.js +0 -169
- package/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/dist/clients/dispatch/runners/ruff.js +0 -88
- package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/dist/clients/dispatch/runners/taplo.js +0 -174
- package/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/dist/clients/dispatch/runners/tflint.js +0 -125
- package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/dist/clients/dispatch/runners/utils.js +0 -15
- package/dist/clients/dispatch/runners/vale.js +0 -128
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/dist/clients/dispatch/suppress-writer.js +0 -79
- package/dist/clients/dispatch/tool-profile.js +0 -30
- package/dist/clients/dispatch/types.js +0 -21
- package/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/dist/clients/disposition-logger.js +0 -32
- package/dist/clients/disposition-publish.js +0 -124
- package/dist/clients/durable-store.js +0 -97
- package/dist/clients/effective-config.js +0 -415
- package/dist/clients/env-utils.js +0 -83
- package/dist/clients/error-class.js +0 -23
- package/dist/clients/eval-timestamp.js +0 -17
- package/dist/clients/event-loop-hold.js +0 -274
- package/dist/clients/event-loop-monitor.js +0 -250
- package/dist/clients/extension-log.js +0 -504
- package/dist/clients/extension-mode.js +0 -73
- package/dist/clients/feature-hints.js +0 -103
- package/dist/clients/file-kinds.js +0 -412
- package/dist/clients/file-role.js +0 -134
- package/dist/clients/file-time.js +0 -160
- package/dist/clients/file-utils.js +0 -1032
- package/dist/clients/finding-delivery-gate.js +0 -494
- package/dist/clients/finding-identity.js +0 -88
- package/dist/clients/fix-worklog.js +0 -103
- package/dist/clients/format-events-publish.js +0 -343
- package/dist/clients/format-service.js +0 -222
- package/dist/clients/formatters-lazy.js +0 -9
- package/dist/clients/formatters.js +0 -2032
- package/dist/clients/freshness-cadence.js +0 -17
- package/dist/clients/freshness.js +0 -38
- package/dist/clients/generated-artifacts.js +0 -394
- package/dist/clients/generation-guard.js +0 -215
- package/dist/clients/git-guard.js +0 -1136
- package/dist/clients/git-tracked-ignore.js +0 -243
- package/dist/clients/gitleaks-client.js +0 -509
- package/dist/clients/go-client.js +0 -104
- package/dist/clients/govulncheck-client.js +0 -605
- package/dist/clients/gradle-ktfmt-style.js +0 -348
- package/dist/clients/grammar-source.js +0 -465
- package/dist/clients/gzip-stage-write.js +0 -135
- package/dist/clients/hashline-anchor.js +0 -424
- package/dist/clients/hook-budgets.js +0 -76
- package/dist/clients/host-edit-normalize.js +0 -140
- package/dist/clients/host-ports.js +0 -39
- package/dist/clients/indent-retarget.js +0 -154
- package/dist/clients/inline-blocker-dispositions.js +0 -186
- package/dist/clients/install-diagnostics.js +0 -156
- package/dist/clients/installer/index.js +0 -5416
- package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/dist/clients/instance-reaper-state.js +0 -7
- package/dist/clients/instance-reaper.js +0 -1137
- package/dist/clients/instance-registry-lock.js +0 -145
- package/dist/clients/instance-registry.js +0 -773
- package/dist/clients/jscpd-client.js +0 -378
- package/dist/clients/json-cache-read.js +0 -65
- package/dist/clients/knip-client.js +0 -788
- package/dist/clients/language-policy.js +0 -252
- package/dist/clients/language-profile.js +0 -361
- package/dist/clients/language-registry.js +0 -603
- package/dist/clients/latency-logger.js +0 -727
- package/dist/clients/lazy-import.js +0 -21
- package/dist/clients/ledger-bounds.js +0 -54
- package/dist/clients/lens-config.js +0 -404
- package/dist/clients/lens-engine.js +0 -358
- package/dist/clients/lens-events.js +0 -125
- package/dist/clients/lens-flag-registry.js +0 -467
- package/dist/clients/lens-map.js +0 -1156
- package/dist/clients/live-bus-emitter.js +0 -74
- package/dist/clients/log-cleanup.js +0 -222
- package/dist/clients/lsp/aggregation.js +0 -178
- package/dist/clients/lsp/cascade-tier.js +0 -421
- package/dist/clients/lsp/client.js +0 -4593
- package/dist/clients/lsp/config.js +0 -691
- package/dist/clients/lsp/content-limits.js +0 -41
- package/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/dist/clients/lsp/document-drift.js +0 -467
- package/dist/clients/lsp/edits.js +0 -1219
- package/dist/clients/lsp/index.js +0 -8305
- package/dist/clients/lsp/inferred-project.js +0 -216
- package/dist/clients/lsp/jvm-runtime.js +0 -298
- package/dist/clients/lsp/language.js +0 -63
- package/dist/clients/lsp/launch.js +0 -746
- package/dist/clients/lsp/lombok.js +0 -158
- package/dist/clients/lsp/path-utils.js +0 -5
- package/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/dist/clients/lsp/position-encoding.js +0 -61
- package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/dist/clients/lsp/server.js +0 -3290
- package/dist/clients/lsp/session-roots.js +0 -192
- package/dist/clients/lsp/spawn-history.js +0 -17
- package/dist/clients/lsp/sync-kind.js +0 -56
- package/dist/clients/lsp/tsserver-sync.js +0 -332
- package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/dist/clients/lsp/wait-policy/index.js +0 -10
- package/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/dist/clients/lsp/watch-queue.js +0 -61
- package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/dist/clients/lsp-budget.js +0 -186
- package/dist/clients/lsp-document-symbols.js +0 -110
- package/dist/clients/lsp-lazy.js +0 -9
- package/dist/clients/lsp-mutation.js +0 -396
- package/dist/clients/lsp-status.js +0 -59
- package/dist/clients/map-with-concurrency.js +0 -40
- package/dist/clients/mcp/analyze.js +0 -420
- package/dist/clients/mcp/host-shim.js +0 -31
- package/dist/clients/mcp/ipc.js +0 -523
- package/dist/clients/mcp/review.js +0 -197
- package/dist/clients/mcp/session.js +0 -412
- package/dist/clients/memory-sampler.js +0 -208
- package/dist/clients/message-end-attribution.js +0 -30
- package/dist/clients/metrics-client.js +0 -107
- package/dist/clients/metrics-history.js +0 -327
- package/dist/clients/middle-man-analysis.js +0 -263
- package/dist/clients/model-provider.js +0 -53
- package/dist/clients/module-report-lsp.js +0 -189
- package/dist/clients/module-report.js +0 -2150
- package/dist/clients/mutating-tool.js +0 -651
- package/dist/clients/mutation-attribution.js +0 -368
- package/dist/clients/mutation-bridge.js +0 -240
- package/dist/clients/ndjson-logger.js +0 -734
- package/dist/clients/observed-mutation-sources.js +0 -101
- package/dist/clients/observed-mutation.js +0 -1253
- package/dist/clients/oldtext-autopatch.js +0 -128
- package/dist/clients/opaque-mutation-scan.js +0 -496
- package/dist/clients/opengrep-client.js +0 -333
- package/dist/clients/opengrep-config.js +0 -76
- package/dist/clients/package-manager.js +0 -607
- package/dist/clients/package-root.js +0 -38
- package/dist/clients/partial-edit-apply.js +0 -439
- package/dist/clients/path-attribution-telemetry.js +0 -43
- package/dist/clients/path-keyed-map.js +0 -108
- package/dist/clients/path-utils.js +0 -1244
- package/dist/clients/performance-report.js +0 -331
- package/dist/clients/persist-debounce.js +0 -70
- package/dist/clients/persistent-reverify.js +0 -271
- package/dist/clients/php-cs-fixer-config.js +0 -119
- package/dist/clients/pipeline.js +0 -1480
- package/dist/clients/post-autofix-notice.js +0 -37
- package/dist/clients/print-mode.js +0 -21
- package/dist/clients/probe-home-state.js +0 -228
- package/dist/clients/process-bridge.js +0 -66
- package/dist/clients/process-singletons.js +0 -210
- package/dist/clients/process-snapshot.js +0 -68
- package/dist/clients/project-changes.js +0 -181
- package/dist/clients/project-conventions.js +0 -171
- package/dist/clients/project-diagnostics/cache.js +0 -137
- package/dist/clients/project-diagnostics/extractors.js +0 -109
- package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/dist/clients/project-diagnostics/scanner.js +0 -520
- package/dist/clients/project-diagnostics/types.js +0 -1
- package/dist/clients/project-lens-config.js +0 -807
- package/dist/clients/project-report.js +0 -701
- package/dist/clients/project-scale.js +0 -237
- package/dist/clients/project-scan-policy.js +0 -11
- package/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/dist/clients/project-snapshot.js +0 -1653
- package/dist/clients/project-trust.js +0 -181
- package/dist/clients/python-environment.js +0 -217
- package/dist/clients/python-provenance.js +0 -639
- package/dist/clients/quiet-window-config.js +0 -47
- package/dist/clients/quiet-window.js +0 -236
- package/dist/clients/read-bridge.js +0 -139
- package/dist/clients/read-expansion.js +0 -266
- package/dist/clients/read-guard-logger.js +0 -251
- package/dist/clients/read-guard-tool-lines.js +0 -1306
- package/dist/clients/read-guard.js +0 -1561
- package/dist/clients/recent-touches.js +0 -240
- package/dist/clients/redact/secrets.js +0 -449
- package/dist/clients/resource-sampler.js +0 -628
- package/dist/clients/reverse-deps.js +0 -270
- package/dist/clients/review-graph/builder.js +0 -5126
- package/dist/clients/review-graph/format.js +0 -33
- package/dist/clients/review-graph/git-identity.js +0 -163
- package/dist/clients/review-graph/import-resolvers.js +0 -481
- package/dist/clients/review-graph/persist-worker.js +0 -10
- package/dist/clients/review-graph/query.js +0 -244
- package/dist/clients/review-graph/revision-drift.js +0 -21
- package/dist/clients/review-graph/service.js +0 -96
- package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/dist/clients/review-graph/symbol-id.js +0 -103
- package/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/dist/clients/review-graph/types.js +0 -1
- package/dist/clients/review-graph/workspace-modules.js +0 -449
- package/dist/clients/review-graph-logger.js +0 -81
- package/dist/clients/ruff-client.js +0 -179
- package/dist/clients/rules-scanner.js +0 -131
- package/dist/clients/run-duration.js +0 -55
- package/dist/clients/runtime-agent-end.js +0 -746
- package/dist/clients/runtime-config.js +0 -77
- package/dist/clients/runtime-context.js +0 -211
- package/dist/clients/runtime-coordinator.js +0 -1324
- package/dist/clients/runtime-session.js +0 -2485
- package/dist/clients/runtime-tool-call.js +0 -1295
- package/dist/clients/runtime-tool-result.js +0 -2049
- package/dist/clients/runtime-turn.js +0 -3767
- package/dist/clients/rust-client.js +0 -97
- package/dist/clients/safe-spawn.js +0 -2357
- package/dist/clients/sanitize.js +0 -286
- package/dist/clients/scan-utils.js +0 -25
- package/dist/clients/scratch-tree-policy.js +0 -165
- package/dist/clients/search-read-registration.js +0 -94
- package/dist/clients/secret-findings.js +0 -114
- package/dist/clients/security-scan-client.js +0 -352
- package/dist/clients/session-event-guard.js +0 -297
- package/dist/clients/session-lifecycle.js +0 -484
- package/dist/clients/session-start-observability.js +0 -94
- package/dist/clients/session-state-store.js +0 -101
- package/dist/clients/session-summary.js +0 -15
- package/dist/clients/sessionstart-logger.js +0 -27
- package/dist/clients/sg-runner.js +0 -876
- package/dist/clients/sgconfig.js +0 -347
- package/dist/clients/shared-checkout-guard.js +0 -338
- package/dist/clients/single-flight.js +0 -158
- package/dist/clients/situational-tool-telemetry.js +0 -108
- package/dist/clients/skills-resolver.js +0 -141
- package/dist/clients/slow-fs.js +0 -138
- package/dist/clients/smells-rollup.js +0 -231
- package/dist/clients/source-filter.js +0 -596
- package/dist/clients/source-walker.js +0 -211
- package/dist/clients/spawn-output-cap.js +0 -120
- package/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/dist/clients/stale-marker.js +0 -17
- package/dist/clients/startup-scan.js +0 -400
- package/dist/clients/startup-timing.js +0 -130
- package/dist/clients/string-utils.js +0 -33
- package/dist/clients/subagent-mode.js +0 -111
- package/dist/clients/symbol-containment.js +0 -24
- package/dist/clients/symbol-types.js +0 -5
- package/dist/clients/test-runner-client.js +0 -2507
- package/dist/clients/test-runner-delivery.js +0 -287
- package/dist/clients/todo-scanner.js +0 -229
- package/dist/clients/tool-agreement.js +0 -423
- package/dist/clients/tool-config.js +0 -249
- package/dist/clients/tool-cwd.js +0 -270
- package/dist/clients/tool-definition.js +0 -47
- package/dist/clients/tool-event.js +0 -105
- package/dist/clients/tool-policy.js +0 -2755
- package/dist/clients/tool-probe.js +0 -53
- package/dist/clients/tool-render.js +0 -156
- package/dist/clients/tool-set-policy.js +0 -118
- package/dist/clients/tree-sitter-cache.js +0 -364
- package/dist/clients/tree-sitter-client.js +0 -4195
- package/dist/clients/tree-sitter-logger.js +0 -100
- package/dist/clients/tree-sitter-navigator.js +0 -269
- package/dist/clients/tree-sitter-query-loader.js +0 -569
- package/dist/clients/tree-sitter-shared.js +0 -158
- package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/dist/clients/trivy-client.js +0 -467
- package/dist/clients/tui-fit.js +0 -50
- package/dist/clients/turn-context.js +0 -52
- package/dist/clients/turn-end/lane.js +0 -51
- package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/dist/clients/turn-summary-render.js +0 -72
- package/dist/clients/turn-summary.js +0 -132
- package/dist/clients/typos-config.js +0 -29
- package/dist/clients/user-notify.js +0 -51
- package/dist/clients/vanished-instance-marker.js +0 -57
- package/dist/clients/warm-attach.js +0 -305
- package/dist/clients/widget-state.js +0 -1808
- package/dist/clients/word-index-logger.js +0 -49
- package/dist/clients/word-index-store.js +0 -459
- package/dist/clients/word-index.js +0 -2080
- package/dist/clients/workspace-topology.js +0 -443
- package/dist/clients/write-ordering-guard.js +0 -65
- package/dist/clients/zizmor-config.js +0 -340
- package/dist/i18n.js +0 -69
- package/dist/mcp/build-staleness.js +0 -124
- package/dist/scripts/lib/process-scan.mjs +0 -583
- package/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/dist/tools/activate-tools.js +0 -87
- package/dist/tools/ast-grep-outline.js +0 -137
- package/dist/tools/ast-grep-replace.js +0 -244
- package/dist/tools/ast-grep-search.js +0 -762
- package/dist/tools/effective-config.js +0 -90
- package/dist/tools/lens-diagnostic-mark.js +0 -375
- package/dist/tools/lens-diagnostics.js +0 -2571
- package/dist/tools/lsp-diagnostics.js +0 -1745
- package/dist/tools/lsp-navigation.js +0 -1367
- package/dist/tools/lsp-structured-output.js +0 -294
- package/dist/tools/module-report.js +0 -382
- package/dist/tools/project-report.js +0 -86
- package/dist/tools/render-compact.js +0 -374
- package/dist/tools/scan-progress.js +0 -53
- package/dist/tools/shared.js +0 -29
- package/dist/tools/symbol-search.js +0 -155
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ruff Client for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Fast Python linting and formatting via Ruff CLI.
|
|
5
|
-
* Replaces flake8, pylint, isort, black, pyupgrade.
|
|
6
|
-
*
|
|
7
|
-
* Requires: pip install ruff
|
|
8
|
-
* Docs: https://docs.astral.sh/ruff/
|
|
9
|
-
*/
|
|
10
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
11
|
-
import * as fs from "node:fs";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
import { createAvailabilityChecker, resolveAvailableOrInstall, } from "./dispatch/runners/utils/runner-helpers.js";
|
|
14
|
-
import { isFileKind } from "./file-kinds.js";
|
|
15
|
-
import { pathsEqual } from "./path-utils.js";
|
|
16
|
-
import { safeSpawnAsync } from "./safe-spawn.js";
|
|
17
|
-
import { resolveToolCwd } from "./tool-cwd.js";
|
|
18
|
-
import { ruffConfigArgs } from "./tool-policy.js";
|
|
19
|
-
// --- Client ---
|
|
20
|
-
const ruffAvailability = createAvailabilityChecker("ruff", ".exe");
|
|
21
|
-
export class RuffClient {
|
|
22
|
-
ruffCommand = "ruff";
|
|
23
|
-
log;
|
|
24
|
-
constructor(verbose = false) {
|
|
25
|
-
this.log = verbose ? createSubsystemLogger("ruff") : () => { };
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Check if ruff CLI is available, auto-install if not.
|
|
29
|
-
*
|
|
30
|
-
* Re-entrancy safe: the shared availability seam deduplicates the complete
|
|
31
|
-
* probe/auto-install transaction per cwd and tool, so concurrent callers do
|
|
32
|
-
* not duplicate installation attempts.
|
|
33
|
-
*/
|
|
34
|
-
async ensureAvailable() {
|
|
35
|
-
const resolved = await resolveAvailableOrInstall(ruffAvailability, "ruff", process.cwd());
|
|
36
|
-
if (!resolved)
|
|
37
|
-
return false;
|
|
38
|
-
this.ruffCommand = resolved;
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Check if a file is a Python file
|
|
43
|
-
*/
|
|
44
|
-
isPythonFile(filePath) {
|
|
45
|
-
return isFileKind(filePath, "python");
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Async auto-fix variant for pipeline use (non-blocking spawn).
|
|
49
|
-
* `cwd` is the dispatch language root. It is the seam's starting point,
|
|
50
|
-
* not the answer: `resolveToolCwd` walks from the file to the nearest
|
|
51
|
-
* `pyproject.toml`/`ruff.toml`/`.ruff.toml` at or above it, capped inside
|
|
52
|
-
* `cwd` (and at `$HOME` when there is none), so a file in a nested package
|
|
53
|
-
* gets that package's config rather than the workspace-root one.
|
|
54
|
-
*/
|
|
55
|
-
async fixFileAsync(filePath, cwd) {
|
|
56
|
-
if (!(await this.ensureAvailable())) {
|
|
57
|
-
return {
|
|
58
|
-
success: false,
|
|
59
|
-
changed: false,
|
|
60
|
-
fixed: 0,
|
|
61
|
-
error: "Ruff not available",
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
const absolutePath = path.resolve(filePath);
|
|
65
|
-
if (!fs.existsSync(absolutePath)) {
|
|
66
|
-
return {
|
|
67
|
-
success: false,
|
|
68
|
-
changed: false,
|
|
69
|
-
fixed: 0,
|
|
70
|
-
error: "File not found",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
try {
|
|
74
|
-
const before = await fs.promises.readFile(absolutePath, "utf-8");
|
|
75
|
-
// #2894: the root ruff resolves its config from now comes from the
|
|
76
|
-
// shared seam, not a local `cwd ?? path.dirname(file)`. `tool-policy.ts`
|
|
77
|
-
// requires the lint runner (`ruff.ts`, on `resolveRunnerCwd`) and this
|
|
78
|
-
// autofix path to consume the SAME policy; deriving the root two
|
|
79
|
-
// different ways is how they drift, and the hand-rolled form ignored a
|
|
80
|
-
// nested `pyproject.toml` whenever the caller passed a workspace root.
|
|
81
|
-
const ruffCwd = resolveToolCwd("runner", "ruff", absolutePath, {
|
|
82
|
-
...(cwd !== undefined && { cwd }),
|
|
83
|
-
}).cwd;
|
|
84
|
-
// Shared config-args seam (#1247): the lint runner consumes the same
|
|
85
|
-
// builder, so `check --fix` can never drift to ruff's default rule
|
|
86
|
-
// set when the project lacks its own config and the package-owned
|
|
87
|
-
// core.toml fallback applies.
|
|
88
|
-
const configArgs = ruffConfigArgs(ruffCwd);
|
|
89
|
-
const pre = await safeSpawnAsync(this.ruffCommand, [
|
|
90
|
-
"check",
|
|
91
|
-
"--output-format",
|
|
92
|
-
"json",
|
|
93
|
-
"--target-version",
|
|
94
|
-
"py310",
|
|
95
|
-
...configArgs,
|
|
96
|
-
absolutePath,
|
|
97
|
-
], { timeout: 10000, cwd: ruffCwd });
|
|
98
|
-
const beforeDiags = pre.stdout?.trim()
|
|
99
|
-
? this.parseOutput(pre.stdout, ruffCwd, absolutePath)
|
|
100
|
-
: [];
|
|
101
|
-
const fixableCount = beforeDiags.filter((d) => d.fixable).length;
|
|
102
|
-
const fix = await safeSpawnAsync(this.ruffCommand, ["check", "--fix", ...configArgs, absolutePath], { timeout: 15000, cwd: ruffCwd });
|
|
103
|
-
if (fix.error) {
|
|
104
|
-
return {
|
|
105
|
-
success: false,
|
|
106
|
-
changed: false,
|
|
107
|
-
fixed: 0,
|
|
108
|
-
error: fix.error.message,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
const after = await fs.promises.readFile(absolutePath, "utf-8");
|
|
112
|
-
const changed = before !== after;
|
|
113
|
-
if (changed) {
|
|
114
|
-
this.log(`Fixed ${fixableCount} issue(s) in ${path.basename(filePath)}`);
|
|
115
|
-
}
|
|
116
|
-
return { success: true, changed, fixed: fixableCount };
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
return { success: false, changed: false, fixed: 0, error: err.message };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// --- Internal ---
|
|
123
|
-
/**
|
|
124
|
-
* `cwd` is the directory ruff RAN in, and it is REQUIRED: a default would
|
|
125
|
-
* hide the wrong base at a call site that forgot it (#3284's D11).
|
|
126
|
-
*
|
|
127
|
-
* ruff's JSON `filename` is the `SourceFile`'s name verbatim — the JSON
|
|
128
|
-
* renderer reads `span.file().path(resolver)` (ruff 0.16.8
|
|
129
|
-
* `crates/ruff_db/src/diagnostic/render/json.rs:58,120`), which for a ruff
|
|
130
|
-
* (not `ty`) diagnostic is `file.name()` (`crates/ruff_db/src/diagnostic/
|
|
131
|
-
* mod.rs:1187-1193`), NOT the cwd-relative `relative_path` the text
|
|
132
|
-
* renderers use (`mod.rs:1195-1204`). That name is
|
|
133
|
-
* `SourceFileBuilder::new(path.to_string_lossy(), …)`
|
|
134
|
-
* (`crates/ruff_linter/src/linter.rs:1049`) over a path the resolver has
|
|
135
|
-
* already absolutized ("Normalize every path (e.g., convert from relative to
|
|
136
|
-
* absolute)", `crates/ruff_workspace/src/resolver.rs:484`). So ruff echoes
|
|
137
|
-
* the absolute path we hand it as argv: the BASE was already right here and
|
|
138
|
-
* the fold deletes a `path.resolve` with no base — which silently meant the
|
|
139
|
-
* EXTENSION's `process.cwd()`, not ruff's — rather than leaving it for a
|
|
140
|
-
* future relative invocation to re-enable.
|
|
141
|
-
*/
|
|
142
|
-
parseOutput(output, cwd, filterFile) {
|
|
143
|
-
if (!output.trim())
|
|
144
|
-
return [];
|
|
145
|
-
try {
|
|
146
|
-
const items = JSON.parse(output);
|
|
147
|
-
const diagnostics = [];
|
|
148
|
-
for (const item of items) {
|
|
149
|
-
// Filter to single file if requested. #3278/#3286: one seam answers
|
|
150
|
-
// "is this reported diagnostic about the file I ran for?" — resolve
|
|
151
|
-
// the tool's spelling against the cwd the tool RAN in and compare
|
|
152
|
-
// through `pathsEqual`, the repo's on-disk identity predicate. A bare
|
|
153
|
-
// `!==` treats a spelling that differs only in case (the SAME file on
|
|
154
|
-
// Windows and on a case-folding POSIX mount) as a different file and
|
|
155
|
-
// drops every finding for the edited file (#209, #3277).
|
|
156
|
-
if (filterFile &&
|
|
157
|
-
!pathsEqual(path.resolve(cwd, item.filename), filterFile))
|
|
158
|
-
continue;
|
|
159
|
-
diagnostics.push({
|
|
160
|
-
line: item.location.row - 1, // ruff is 1-indexed
|
|
161
|
-
column: item.location.column - 1,
|
|
162
|
-
endLine: item.end_location.row - 1,
|
|
163
|
-
endColumn: item.end_location.column - 1,
|
|
164
|
-
severity: item.code?.startsWith("E") ? "error" : "warning",
|
|
165
|
-
message: item.message,
|
|
166
|
-
rule: item.code || "unknown",
|
|
167
|
-
file: item.filename,
|
|
168
|
-
fixable: item.fix !== null,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
return diagnostics;
|
|
172
|
-
}
|
|
173
|
-
catch (err) {
|
|
174
|
-
void err;
|
|
175
|
-
this.log("Failed to parse ruff JSON output");
|
|
176
|
-
return [];
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project rules scanner for pi-lens.
|
|
3
|
-
*
|
|
4
|
-
* Scans for rule files that other tools/agents may have left:
|
|
5
|
-
* - .claude/rules/ — Claude Code rule files
|
|
6
|
-
* - .agents/rules/ — Generic agent rule files
|
|
7
|
-
* - .cursorrules — Cursor IDE rules
|
|
8
|
-
* - CLAUDE.md — Claude Code project context
|
|
9
|
-
* - AGENTS.md — Generic agent context
|
|
10
|
-
*
|
|
11
|
-
* These are surfaced in the system prompt so the agent knows
|
|
12
|
-
* to read them when relevant.
|
|
13
|
-
*/
|
|
14
|
-
import * as fs from "node:fs";
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
const RULE_DIRS = [
|
|
17
|
-
{ dir: ".claude/rules", source: ".claude/rules" },
|
|
18
|
-
{ dir: ".agents/rules", source: ".agents/rules" },
|
|
19
|
-
];
|
|
20
|
-
const RULE_FILES = [
|
|
21
|
-
{ file: "CLAUDE.md", source: "root" },
|
|
22
|
-
{ file: "AGENTS.md", source: "root" },
|
|
23
|
-
{ file: ".cursorrules", source: "root" },
|
|
24
|
-
];
|
|
25
|
-
const PROMPT_RULES_MAX_TOTAL = 12;
|
|
26
|
-
const PROMPT_RULES_MAX_PER_SOURCE = 4;
|
|
27
|
-
const PROMPT_RULES_MAX_CHARS = 900;
|
|
28
|
-
// #250/#747 class: this walk is scoped to `.claude/rules`/`.agents/rules`
|
|
29
|
-
// subtrees, so it never walks the whole cwd — but it's still unbounded
|
|
30
|
-
// recursion. A small depth/file cap guards a pathologically deep or huge rules
|
|
31
|
-
// directory (or a symlink loop) without needing the full home ceiling the
|
|
32
|
-
// project-wide walkers use. Rules trees are shallow and small in practice, so
|
|
33
|
-
// these bounds never trim a legitimate layout.
|
|
34
|
-
const RULES_SCAN_MAX_DEPTH = 8;
|
|
35
|
-
const RULES_SCAN_MAX_FILES = 500;
|
|
36
|
-
function findMarkdownFiles(dir, baseDir, depth = 0, collected = { count: 0 }) {
|
|
37
|
-
const results = [];
|
|
38
|
-
if (depth > RULES_SCAN_MAX_DEPTH)
|
|
39
|
-
return results;
|
|
40
|
-
if (!fs.existsSync(dir))
|
|
41
|
-
return results;
|
|
42
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
43
|
-
for (const entry of entries) {
|
|
44
|
-
if (collected.count >= RULES_SCAN_MAX_FILES)
|
|
45
|
-
break;
|
|
46
|
-
const fullPath = path.join(dir, entry.name);
|
|
47
|
-
if (entry.isDirectory()) {
|
|
48
|
-
results.push(...findMarkdownFiles(fullPath, baseDir, depth + 1, collected));
|
|
49
|
-
}
|
|
50
|
-
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
51
|
-
collected.count += 1;
|
|
52
|
-
results.push({
|
|
53
|
-
source: path.relative(baseDir, dir) || path.basename(baseDir),
|
|
54
|
-
name: entry.name,
|
|
55
|
-
filePath: fullPath,
|
|
56
|
-
relativePath: path.relative(baseDir, fullPath).replace(/\\/g, "/"),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return results;
|
|
61
|
-
}
|
|
62
|
-
export function scanProjectRules(cwd) {
|
|
63
|
-
const rules = [];
|
|
64
|
-
// Scan rule directories
|
|
65
|
-
for (const { dir, source } of RULE_DIRS) {
|
|
66
|
-
const dirPath = path.join(cwd, dir);
|
|
67
|
-
if (fs.existsSync(dirPath)) {
|
|
68
|
-
const found = findMarkdownFiles(dirPath, path.join(cwd, dir));
|
|
69
|
-
for (const rule of found) {
|
|
70
|
-
rules.push({
|
|
71
|
-
source,
|
|
72
|
-
name: rule.name,
|
|
73
|
-
filePath: rule.filePath,
|
|
74
|
-
relativePath: `${dir}/${rule.relativePath}`,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Check for root-level rule files
|
|
80
|
-
for (const { file, source } of RULE_FILES) {
|
|
81
|
-
const filePath = path.join(cwd, file);
|
|
82
|
-
if (fs.existsSync(filePath)) {
|
|
83
|
-
rules.push({
|
|
84
|
-
source,
|
|
85
|
-
name: file,
|
|
86
|
-
filePath,
|
|
87
|
-
relativePath: file,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
rules,
|
|
93
|
-
hasCustomRules: rules.length > 0,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
export function formatRulesForPrompt(result) {
|
|
97
|
-
if (!result.hasCustomRules)
|
|
98
|
-
return "";
|
|
99
|
-
// Group by source
|
|
100
|
-
const bySource = new Map();
|
|
101
|
-
for (const rule of result.rules) {
|
|
102
|
-
const existing = bySource.get(rule.source) ?? [];
|
|
103
|
-
existing.push(rule);
|
|
104
|
-
bySource.set(rule.source, existing);
|
|
105
|
-
}
|
|
106
|
-
const sections = [];
|
|
107
|
-
let emittedTotal = 0;
|
|
108
|
-
const sortedSources = [...bySource.keys()].sort((a, b) => a.localeCompare(b));
|
|
109
|
-
for (const source of sortedSources) {
|
|
110
|
-
if (emittedTotal >= PROMPT_RULES_MAX_TOTAL)
|
|
111
|
-
break;
|
|
112
|
-
const rules = bySource.get(source) ?? [];
|
|
113
|
-
const sortedRules = [...rules].sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
114
|
-
const remainingBudget = PROMPT_RULES_MAX_TOTAL - emittedTotal;
|
|
115
|
-
const shown = sortedRules.slice(0, Math.min(PROMPT_RULES_MAX_PER_SOURCE, remainingBudget));
|
|
116
|
-
emittedTotal += shown.length;
|
|
117
|
-
const list = shown.map((r) => `- \`${r.relativePath}\``);
|
|
118
|
-
if (sortedRules.length > shown.length) {
|
|
119
|
-
list.push(`- ... and ${sortedRules.length - shown.length} more in ${source}`);
|
|
120
|
-
}
|
|
121
|
-
sections.push(`From ${source}/:\n${list.join("\n")}`);
|
|
122
|
-
}
|
|
123
|
-
const hidden = result.rules.length - emittedTotal;
|
|
124
|
-
if (hidden > 0) {
|
|
125
|
-
sections.push(`... and ${hidden} additional rule file(s) not listed.`);
|
|
126
|
-
}
|
|
127
|
-
const full = sections.join("\n\n");
|
|
128
|
-
if (full.length <= PROMPT_RULES_MAX_CHARS)
|
|
129
|
-
return full;
|
|
130
|
-
return `${full.slice(0, PROMPT_RULES_MAX_CHARS)}\n... (truncated)`;
|
|
131
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* #1479/#1480: one place decides whether a test run was actually timed, and
|
|
3
|
-
* one place renders the answer.
|
|
4
|
-
*
|
|
5
|
-
* `TestResult.duration` is optional, and the two states are different facts.
|
|
6
|
-
* A present number is a MEASUREMENT — including `0`, because pytest really
|
|
7
|
-
* does print `in 0.00s` and a suite whose `startTime` equals its `endTime`
|
|
8
|
-
* really did run in under a millisecond. An absent value means no
|
|
9
|
-
* runner-reported figure was found at all.
|
|
10
|
-
*
|
|
11
|
-
* That contract was written down once, in the doc comment on
|
|
12
|
-
* `TestResult.duration`, and then re-derived at every site that reads or
|
|
13
|
-
* produces a duration. A reader of any one of those sites cannot see the
|
|
14
|
-
* contract, and a producer that reaches for `0` when it means "did not
|
|
15
|
-
* measure" reintroduces exactly the defect #1479 removed. These three
|
|
16
|
-
* functions are the contract in executable form: `isMeasuredDuration`
|
|
17
|
-
* classifies, `toMeasuredDurationMs` normalises a freshly parsed figure into
|
|
18
|
-
* it, and `formatRunDurationMs` renders it.
|
|
19
|
-
*
|
|
20
|
-
* NOTE FOR ANYONE EDITING `isMeasuredDuration`: the predicate is `>= 0`, not
|
|
21
|
-
* `> 0`. A measured zero is real. `> 0` looks like a harmless tightening and
|
|
22
|
-
* is the single change that would silently restore the bug.
|
|
23
|
-
*
|
|
24
|
-
* Kept in its own module rather than exported from `test-runner-client.ts`:
|
|
25
|
-
* `runtime-turn.ts` needs it on the hot turn-end path, and the client is
|
|
26
|
-
* deliberately loaded lazily (`bootstrap.ts` dynamic-imports it), so a value
|
|
27
|
-
* import from there would drag the whole runner into startup.
|
|
28
|
-
*/
|
|
29
|
-
/**
|
|
30
|
-
* True only for a value that represents a real measurement.
|
|
31
|
-
*
|
|
32
|
-
* `0` is measured. `undefined`, `null`, `NaN`, the infinities, and a negative
|
|
33
|
-
* figure are not: the last three can only come from a garbled parse, and a
|
|
34
|
-
* garbled parse must degrade to "we did not measure this", never to a wrong
|
|
35
|
-
* number.
|
|
36
|
-
*/
|
|
37
|
-
export function isMeasuredDuration(duration) {
|
|
38
|
-
return (typeof duration === "number" && Number.isFinite(duration) && duration >= 0);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Normalise a parsed elapsed time to the `TestResult.duration` contract.
|
|
42
|
-
*
|
|
43
|
-
* Returns whole milliseconds for a real reading — `0` included — and
|
|
44
|
-
* `undefined` for anything that is not one, so a producer never has to spell
|
|
45
|
-
* out the absent case itself.
|
|
46
|
-
*/
|
|
47
|
-
export function toMeasuredDurationMs(duration) {
|
|
48
|
-
return isMeasuredDuration(duration) ? Math.round(duration) : undefined;
|
|
49
|
-
}
|
|
50
|
-
/** Render a duration for a log line: `123ms`, or `unmeasured` when absent. */
|
|
51
|
-
export function formatRunDurationMs(duration) {
|
|
52
|
-
return isMeasuredDuration(duration)
|
|
53
|
-
? `${Math.round(duration)}ms`
|
|
54
|
-
: "unmeasured";
|
|
55
|
-
}
|