@herbertgao/pi-extensions 2026.8.11 → 2026.8.13

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.
Files changed (476) hide show
  1. package/README.md +23 -10
  2. package/{node_modules/@herbertgao/pi-mermaid-open/LICENSE → THIRD_PARTY_NOTICES.md} +19 -1
  3. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +15 -0
  4. package/node_modules/@czottmann/pi-automode/README.md +5 -3
  5. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +2 -0
  6. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +60 -0
  7. package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +1 -0
  8. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +4 -4
  9. package/node_modules/@czottmann/pi-automode/docs/configuration.md +20 -4
  10. package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +1 -1
  11. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +692 -0
  12. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +181 -3
  13. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +4 -1
  14. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +143 -36
  15. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +103 -148
  16. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +32 -6
  17. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +344 -22
  18. package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +1 -0
  19. package/node_modules/@czottmann/pi-automode/package.json +4 -1
  20. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -1
  21. package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -1
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +4 -0
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +21 -1
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +1 -1
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +19 -19
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +4 -2
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +2 -1
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +10 -2
  29. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  30. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +10 -0
  31. package/node_modules/@herbertgao/pi-subagents/README.md +21 -15
  32. package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
  33. package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +11 -8
  34. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +184 -106
  35. package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +31 -11
  36. package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +9 -1
  37. package/node_modules/@herbertgao/pi-subagents/src/index.ts +156 -31
  38. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +17 -0
  39. package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +14 -0
  40. package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +8 -0
  41. package/node_modules/@herbertgao/pi-subagents/src/settings.ts +32 -1
  42. package/node_modules/@herbertgao/pi-subagents/src/types.ts +17 -2
  43. package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +23 -2
  44. package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +259 -24
  45. package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
  46. package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +376 -0
  47. package/node_modules/@luxusai/pi-hindsight/README.md +92 -0
  48. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +56 -0
  49. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +169 -0
  50. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +107 -0
  51. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +89 -0
  52. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +189 -0
  53. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  54. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  55. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +54 -0
  56. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +75 -0
  57. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +300 -0
  58. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +158 -0
  59. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +164 -0
  60. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +139 -0
  61. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +74 -0
  62. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +261 -0
  63. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +151 -0
  64. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +18 -0
  65. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +46 -0
  66. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +383 -0
  67. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +240 -0
  68. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +176 -0
  69. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +178 -0
  70. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +41 -0
  71. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +386 -0
  72. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +39 -0
  73. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +34 -0
  74. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +140 -0
  75. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +61 -0
  76. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +925 -0
  77. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +247 -0
  78. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +547 -0
  79. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +480 -0
  80. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +182 -0
  81. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +86 -0
  82. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +1010 -0
  83. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +175 -0
  84. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +425 -0
  85. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +210 -0
  86. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +817 -0
  87. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +25 -0
  88. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +319 -0
  89. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +196 -0
  90. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +189 -0
  91. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +65 -0
  92. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +260 -0
  93. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +244 -0
  94. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +59 -0
  95. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +82 -0
  96. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +45 -0
  97. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +331 -0
  98. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +354 -0
  99. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +66 -0
  100. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +132 -0
  101. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +228 -0
  102. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +74 -0
  103. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +16 -0
  104. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +648 -0
  105. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +105 -0
  106. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +68 -0
  107. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +71 -0
  108. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +13 -0
  109. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +162 -0
  110. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +131 -0
  111. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +104 -0
  112. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +37 -0
  113. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +893 -0
  114. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +35 -0
  115. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +177 -0
  116. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +7 -0
  117. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +21 -0
  118. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +112 -0
  119. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +111 -0
  120. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +214 -0
  121. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +70 -0
  122. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +392 -0
  123. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +45 -0
  124. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +9 -0
  125. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +860 -0
  126. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +105 -0
  127. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +189 -0
  128. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +299 -0
  129. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +201 -0
  130. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +47 -0
  131. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +239 -0
  132. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +50 -0
  133. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +259 -0
  134. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +77 -0
  135. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +534 -0
  136. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +319 -0
  137. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +325 -0
  138. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +42 -0
  139. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +244 -0
  140. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +56 -0
  141. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +50 -0
  142. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +167 -0
  143. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +207 -0
  144. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +120 -0
  145. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +8 -0
  146. package/node_modules/@luxusai/pi-hindsight/package.json +118 -0
  147. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +75 -0
  148. package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
  149. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  150. package/node_modules/@narumitw/pi-btw/package.json +6 -6
  151. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
  152. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
  153. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
  154. package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
  155. package/node_modules/@tifan/pi-handoff/package.json +43 -0
  156. package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
  157. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
  158. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
  159. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
  160. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
  161. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
  162. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
  163. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
  164. package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
  165. package/node_modules/@tifan/pi-recap/package.json +42 -0
  166. package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
  167. package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
  168. package/node_modules/@tifan/pi-rename/package.json +47 -0
  169. package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
  170. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
  171. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
  172. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
  173. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
  174. package/node_modules/pi-lens/CHANGELOG.md +96 -1
  175. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
  176. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
  177. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
  178. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
  179. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
  180. package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
  181. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
  182. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
  183. package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
  184. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
  185. package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
  186. package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
  187. package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
  188. package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
  189. package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
  190. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
  191. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
  192. package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
  193. package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
  194. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
  195. package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
  196. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
  197. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
  198. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
  199. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
  200. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
  201. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
  202. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
  203. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
  204. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
  205. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
  206. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
  207. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
  208. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
  209. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
  210. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
  211. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
  212. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
  213. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
  214. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
  215. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
  216. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
  217. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
  218. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
  219. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
  220. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
  221. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
  222. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
  223. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
  224. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
  225. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
  226. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
  227. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
  228. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
  229. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
  230. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
  231. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
  232. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
  233. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
  234. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
  235. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
  236. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
  237. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
  238. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
  239. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
  240. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
  241. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
  242. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
  243. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
  244. package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
  245. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
  246. package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
  247. package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
  248. package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
  249. package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
  250. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
  251. package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
  252. package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
  253. package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
  254. package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
  255. package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
  256. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
  257. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
  258. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
  259. package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
  260. package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
  261. package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
  262. package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
  263. package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
  264. package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
  265. package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
  266. package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
  267. package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
  268. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
  269. package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
  270. package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
  271. package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
  272. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
  273. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
  274. package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
  275. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
  276. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
  277. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
  278. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
  279. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
  280. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
  281. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
  282. package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
  283. package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
  284. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
  285. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
  286. package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
  287. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
  288. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
  289. package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
  290. package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
  291. package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
  292. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
  293. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
  294. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
  295. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
  296. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
  297. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
  298. package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
  299. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
  300. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
  301. package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
  302. package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
  303. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
  304. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
  305. package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
  306. package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
  307. package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
  308. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
  309. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
  310. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
  311. package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
  312. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
  313. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
  314. package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
  315. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
  316. package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
  317. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
  318. package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
  319. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
  320. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
  321. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
  322. package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
  323. package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
  324. package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
  325. package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
  326. package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
  327. package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
  328. package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
  329. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
  330. package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
  331. package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
  332. package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
  333. package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
  334. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
  335. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  336. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
  337. package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
  338. package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
  339. package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
  340. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
  341. package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
  342. package/node_modules/pi-lens/dist/i18n.js +13 -5
  343. package/node_modules/pi-lens/dist/index.js +10797 -8627
  344. package/node_modules/pi-lens/dist/mcp/server.js +3 -1
  345. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
  346. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
  347. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
  348. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
  349. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
  350. package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
  351. package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
  352. package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
  353. package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
  354. package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
  355. package/node_modules/pi-lens/package.json +160 -156
  356. package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
  357. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
  358. package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
  359. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
  360. package/node_modules/pi-mcp-adapter/CHANGELOG.md +47 -0
  361. package/node_modules/pi-mcp-adapter/README.md +42 -13
  362. package/node_modules/pi-mcp-adapter/commands.ts +4 -2
  363. package/node_modules/pi-mcp-adapter/config.ts +45 -5
  364. package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
  365. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  366. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  367. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  368. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  369. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  370. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  371. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  372. package/node_modules/pi-mcp-adapter/dist/config.js +1087 -0
  373. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  374. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  375. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  376. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  377. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  378. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  379. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  380. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  381. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  382. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  383. package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
  384. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  385. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  386. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  387. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  388. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  389. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  390. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  391. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  392. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  393. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  394. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  395. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  396. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  397. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  398. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  399. package/node_modules/pi-mcp-adapter/index.ts +204 -82
  400. package/node_modules/pi-mcp-adapter/init.ts +41 -30
  401. package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
  402. package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
  403. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
  404. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  405. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  406. package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
  407. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  408. package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
  409. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  410. package/node_modules/pi-mcp-adapter/package.json +24 -6
  411. package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
  412. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
  413. package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
  414. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  415. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
  416. package/node_modules/pi-mcp-adapter/types.ts +48 -1
  417. package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
  418. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  419. package/node_modules/pi-mcp-adapter/utils.ts +21 -19
  420. package/node_modules/pi-web-access/CHANGELOG.md +26 -0
  421. package/node_modules/pi-web-access/README.md +71 -14
  422. package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
  423. package/node_modules/pi-web-access/credential-source.ts +6 -2
  424. package/node_modules/pi-web-access/curator-page.ts +5 -3
  425. package/node_modules/pi-web-access/curator-server.ts +2 -1
  426. package/node_modules/pi-web-access/extract.ts +89 -9
  427. package/node_modules/pi-web-access/fetch-params.ts +13 -0
  428. package/node_modules/pi-web-access/gemini-adc.ts +298 -0
  429. package/node_modules/pi-web-access/gemini-api.ts +59 -15
  430. package/node_modules/pi-web-access/gemini-search.ts +58 -18
  431. package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
  432. package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
  433. package/node_modules/pi-web-access/gemini-web.ts +9 -3
  434. package/node_modules/pi-web-access/github-api.ts +5 -4
  435. package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
  436. package/node_modules/pi-web-access/index.ts +403 -297
  437. package/node_modules/pi-web-access/kimi-search.ts +234 -0
  438. package/node_modules/pi-web-access/openai-search.ts +118 -21
  439. package/node_modules/pi-web-access/package.json +3 -2
  440. package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
  441. package/node_modules/pi-web-access/utils.ts +307 -1
  442. package/node_modules/pi-web-access/youtube-extract.ts +2 -2
  443. package/package.json +46 -37
  444. package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
  445. package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
  446. package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
  447. package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
  448. package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
  449. package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
  450. package/node_modules/@herbertgao/pi-inline-skills/LICENSE +0 -22
  451. package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
  452. package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
  453. package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
  454. package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
  455. package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
  456. package/node_modules/@herbertgao/pi-recap/package.json +0 -55
  457. package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
  458. package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
  459. package/node_modules/@herbertgao/pi-rename/package.json +0 -63
  460. package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
  461. package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
  462. /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
  463. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
  464. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
  465. /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
  466. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
  467. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
  468. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
  469. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
  470. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
  471. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
  472. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
  473. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
  474. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
  475. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
  476. /package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/src/index.ts +0 -0
@@ -5,6 +5,7 @@ import { getLinterPolicyForCwd } from "../../tool-policy.js";
5
5
  import { PRIORITY } from "../priorities.js";
6
6
  import { createAvailabilityChecker, resolveAvailableOrInstall, } from "./utils/runner-helpers.js";
7
7
  import { spawnFailedWithNoOutput } from "./utils/spawn-outcome.js";
8
+ import { finishParsedRun } from "./utils/tool-failure.js";
8
9
  const terragrunt = createAvailabilityChecker("terragrunt", ".exe");
9
10
  function normalizeSeverity(raw) {
10
11
  if (typeof raw === "number")
@@ -149,15 +150,19 @@ const terragruntRunner = {
149
150
  if (spawnFailedWithNoOutput(result))
150
151
  return SKIPPED;
151
152
  const diagnostics = parseTerragruntOutput(result.stdout || "", ctx.filePath, absPath);
152
- if (diagnostics.length === 0) {
153
- return { status: "succeeded", diagnostics: [], semantic: "none" };
154
- }
155
- const hasErrors = diagnostics.some((d) => d.severity === "error");
156
- return {
157
- status: hasErrors ? "failed" : "succeeded",
153
+ return finishParsedRun({
154
+ tool: "terragrunt",
155
+ ctx,
156
+ result,
158
157
  diagnostics,
159
- semantic: hasErrors ? "blocking" : "warning",
160
- };
158
+ classify: (diagnostics) => {
159
+ const hasErrors = diagnostics.some((d) => d.severity === "error");
160
+ return {
161
+ status: hasErrors ? "failed" : "succeeded",
162
+ semantic: hasErrors ? "blocking" : "warning",
163
+ };
164
+ },
165
+ });
161
166
  },
162
167
  };
163
168
  export default terragruntRunner;
@@ -5,6 +5,7 @@ import { findNearestDirWithAnyBasename } from "../../workspace-topology.js";
5
5
  import { PRIORITY } from "../priorities.js";
6
6
  import { createAvailabilityChecker, resolveAvailableOrInstall, } from "./utils/runner-helpers.js";
7
7
  import { parseToolRun } from "./utils/tool-failure.js";
8
+ import { finishParsedRun } from "./utils/tool-failure.js";
8
9
  const tflint = createAvailabilityChecker("tflint", ".exe");
9
10
  const TFLINT_CONFIG = ".tflint.hcl";
10
11
  /**
@@ -91,15 +92,19 @@ const tflintRunner = {
91
92
  if (run.skipped)
92
93
  return run.skipped;
93
94
  const diagnostics = run.diagnostics;
94
- if (diagnostics.length === 0) {
95
- return { status: "succeeded", diagnostics: [], semantic: "none" };
96
- }
97
- const hasErrors = diagnostics.some((d) => d.severity === "error");
98
- return {
99
- status: hasErrors ? "failed" : "succeeded",
95
+ return finishParsedRun({
96
+ tool: "tflint",
97
+ ctx,
98
+ result,
100
99
  diagnostics,
101
- semantic: hasErrors ? "blocking" : "warning",
102
- };
100
+ classify: (diagnostics) => {
101
+ const hasErrors = diagnostics.some((d) => d.severity === "error");
102
+ return {
103
+ status: hasErrors ? "failed" : "succeeded",
104
+ semantic: hasErrors ? "blocking" : "warning",
105
+ };
106
+ },
107
+ });
103
108
  },
104
109
  };
105
110
  export default tflintRunner;
@@ -300,7 +300,9 @@ const ENTITY_EXTRACTION_LINE_THRESHOLD = 5;
300
300
  */
301
301
  function relativeForIgnoreGlob(filePath, root) {
302
302
  const rel = path.relative(root, filePath);
303
- const normalized = (rel.startsWith("..") ? filePath : rel).split(path.sep).join("/");
303
+ const normalized = (rel.startsWith("..") ? filePath : rel)
304
+ .split(path.sep)
305
+ .join("/");
304
306
  return normalized;
305
307
  }
306
308
  function matchesIgnorePaths(filePath, root, patterns) {
@@ -311,7 +313,17 @@ function matchesIgnorePaths(filePath, root, patterns) {
311
313
  }
312
314
  const treeSitterRunner = {
313
315
  id: "tree-sitter",
314
- appliesTo: ["jsts", "python", "go", "rust", "ruby", "cxx", "csharp", "php", "css"],
316
+ appliesTo: [
317
+ "jsts",
318
+ "python",
319
+ "go",
320
+ "rust",
321
+ "ruby",
322
+ "cxx",
323
+ "csharp",
324
+ "php",
325
+ "css",
326
+ ],
315
327
  priority: PRIORITY.STRUCTURAL_ANALYSIS,
316
328
  enabledByDefault: true,
317
329
  skipTestFiles: false, // Run on test files too (structural issues matter there)
@@ -323,7 +335,9 @@ const treeSitterRunner = {
323
335
  logTreeSitter({
324
336
  phase: "runner_skip",
325
337
  filePath: ctx.filePath,
326
- reason: isTreeSitterWasmAborted() ? "wasm_aborted" : "client_unavailable",
338
+ reason: isTreeSitterWasmAborted()
339
+ ? "wasm_aborted"
340
+ : "client_unavailable",
327
341
  status: "skipped",
328
342
  });
329
343
  return { status: "skipped", diagnostics: [], semantic: "none" };
@@ -80,5 +80,11 @@ export async function probeAvailabilityCandidates(candidates, probeArgs, timeout
80
80
  // above rather than through a thrown spawn.
81
81
  }
82
82
  }
83
- return { foundPath: null, sawTransient, transientCause, hostStallMs, evidence };
83
+ return {
84
+ foundPath: null,
85
+ sawTransient,
86
+ transientCause,
87
+ hostStallMs,
88
+ evidence,
89
+ };
84
90
  }
@@ -19,6 +19,7 @@ import { getServersForFileWithConfig, isServerDisabled, } from "../../../lsp/con
19
19
  import { findGlobalBinary } from "../../../package-manager.js";
20
20
  import { safeSpawnAsync } from "../../../safe-spawn.js";
21
21
  import { getToolCommandSpec, shouldAutoInstallTool, } from "../../../tool-policy.js";
22
+ import { isInSpawnTimeoutCooldown } from "../../../spawn-timeout-cooldown.js";
22
23
  import { classifyProbeFailure, createAvailabilityLatch, describeInstallAttempt, describeProbeEvidence, isLatchingOutcome, logAvailabilityDecision, startHostStallSampler, transientRetryDelayMs, } from "./availability-policy.js";
23
24
  export { createAvailabilityLatch, classifyProbeFailure, describeProbeEvidence, describeUnavailability, isTransientDecision, logAvailabilityDecision, startHostStallSampler, } from "./availability-policy.js";
24
25
  /**
@@ -777,6 +778,27 @@ export function createAvailabilityChecker(command, windowsExt = "", versionArgs
777
778
  return false;
778
779
  }
779
780
  const cmd = await findCommand(resolvedCwd);
781
+ // #1995: a command cooling down after a RUNTIME timeout (lint or
782
+ // autofix lane blew its real budget) must not re-probe on every
783
+ // edit - the positive verdict is effectively cooled. Consult-only:
784
+ // probe timeouts do NOT arm the cooldown here, because a single
785
+ // slow --version under host stall (#1467) is transient evidence,
786
+ // and session-long suppression from it would contradict the
787
+ // #1494 retry ladder this classification exists for.
788
+ if (isInSpawnTimeoutCooldown(cmd)) {
789
+ noteDecision(cache, resolvedCwd, {
790
+ available: false,
791
+ outcome: "transient",
792
+ cause: "probe-timeout",
793
+ elapsedMs: 0,
794
+ classifiedBy: "caller",
795
+ evidence: {
796
+ command: cmd,
797
+ status: null,
798
+ },
799
+ });
800
+ return false;
801
+ }
780
802
  const env = await options.environment?.(resolvedCwd);
781
803
  // The probe budget is enforced by a HOST-side timer, so host event-loop
782
804
  // stalls are charged to the child. Measure the stall that overlapped the
@@ -856,7 +878,8 @@ export function createAvailabilityChecker(command, windowsExt = "", versionArgs
856
878
  outcome: cache.outcome,
857
879
  cause: cache.cause,
858
880
  elapsedMs: cache.elapsedMs,
859
- latched: cache.available !== false || isLatchingOutcome(cache.outcome ?? "missing"),
881
+ latched: cache.available !== false ||
882
+ isLatchingOutcome(cache.outcome ?? "missing"),
860
883
  retryAtMs: cache.retryAtMs,
861
884
  };
862
885
  }
@@ -186,3 +186,38 @@ export function parseToolRun(tool, input, parse, options = {}) {
186
186
  }
187
187
  return { skipped: null, diagnostics, parsedNothing };
188
188
  }
189
+ export function finishParsedRun(input) {
190
+ const raw = `${input.result.stdout ?? ""}${input.result.stderr ?? ""}`;
191
+ const status = input.result.status ?? null;
192
+ if (input.diagnostics.length === 0) {
193
+ if (status !== 0 && raw.trim().length > 0) {
194
+ return {
195
+ status: "failed",
196
+ diagnostics: [
197
+ {
198
+ id: `${input.tool}:parse-error:1`,
199
+ message: `${input.tool} exited ${status} but its output could not be parsed`,
200
+ filePath: input.ctx.filePath,
201
+ line: 1,
202
+ column: 1,
203
+ severity: "warning",
204
+ semantic: "warning",
205
+ tool: input.tool,
206
+ },
207
+ ],
208
+ semantic: "warning",
209
+ };
210
+ }
211
+ return { status: "succeeded", diagnostics: [], semantic: "none" };
212
+ }
213
+ const mapped = input.classify?.(input.diagnostics);
214
+ if (mapped) {
215
+ return { ...mapped, diagnostics: input.diagnostics };
216
+ }
217
+ const hasBlocking = input.diagnostics.some((d) => d.semantic === "blocking");
218
+ return {
219
+ status: hasBlocking ? "failed" : "succeeded",
220
+ diagnostics: input.diagnostics,
221
+ semantic: hasBlocking ? "blocking" : "warning",
222
+ };
223
+ }
@@ -106,9 +106,7 @@ export function loadYamlRulesFresh(ruleDir, severityFilter) {
106
106
  hash.update("\0");
107
107
  }
108
108
  const signature = hash.digest("hex");
109
- const cache = severityFilter === "error"
110
- ? contentBlockingRulesCache
111
- : contentRulesCache;
109
+ const cache = severityFilter === "error" ? contentBlockingRulesCache : contentRulesCache;
112
110
  const cached = cache.get(ruleDir);
113
111
  if (cached?.signature === signature)
114
112
  return cached.rules;
@@ -3,6 +3,7 @@ import { getLinterPolicyForCwd, hasYamllintConfig } 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 yamllint = createAvailabilityChecker("yamllint", ".exe");
7
8
  export { hasYamllintConfig };
8
9
  function parseYamllintParsable(raw, filePath) {
@@ -72,15 +73,12 @@ const yamllintRunner = {
72
73
  if (run.skipped)
73
74
  return run.skipped;
74
75
  const diagnostics = run.diagnostics;
75
- if (diagnostics.length === 0) {
76
- return { status: "succeeded", diagnostics: [], semantic: "none" };
77
- }
78
- const hasBlocking = diagnostics.some((d) => d.semantic === "blocking");
79
- return {
80
- status: hasBlocking ? "failed" : "succeeded",
76
+ return finishParsedRun({
77
+ tool: "yamllint",
78
+ ctx,
79
+ result,
81
80
  diagnostics,
82
- semantic: hasBlocking ? "blocking" : "warning",
83
- };
81
+ });
84
82
  },
85
83
  };
86
84
  export default yamllintRunner;
@@ -48,7 +48,7 @@ const zigCheckRunner = {
48
48
  skipTestFiles: false,
49
49
  async run(ctx) {
50
50
  const cwd = ctx.cwd || process.cwd();
51
- if (!(await (zig.isAvailableAsync(cwd)))) {
51
+ if (!(await zig.isAvailableAsync(cwd))) {
52
52
  return { status: "skipped", diagnostics: [], semantic: "none" };
53
53
  }
54
54
  const cmd = zig.getCommand(cwd);
@@ -56,7 +56,8 @@ export function insertSuppressComment(content, filePath, line, rule) {
56
56
  .filter(Boolean);
57
57
  if (!rules.includes(rule))
58
58
  rules.push(rule);
59
- lines[aboveIdx] = existingAbove.slice(0, match.index) + match[1] + rules.join(", ");
59
+ lines[aboveIdx] =
60
+ existingAbove.slice(0, match.index) + match[1] + rules.join(", ");
60
61
  return lines.join("\n");
61
62
  }
62
63
  // Match the indentation of the flagged line so the inserted comment lines
@@ -10,4 +10,9 @@
10
10
  *
11
11
  * The dispatcher must handle these semantics consistently.
12
12
  */
13
- export {};
13
+ /** Closed telemetry taxonomy for expected runner skips. */
14
+ export const RUNNER_SKIP_REASONS = ["no-files-matched"];
15
+ /** Runtime guard for untyped/plugin-provided runner results. */
16
+ export function isRunnerSkipReason(value) {
17
+ return RUNNER_SKIP_REASONS.some((reason) => reason === value);
18
+ }
@@ -3,9 +3,13 @@ export function convertLspDiagnostics(diags, filePath, options = {}) {
3
3
  return diags
4
4
  .filter((d) => d.range?.start?.line !== undefined)
5
5
  .map((d, idx) => {
6
- const severityMap = { 1: "error", 2: "warning", 4: "hint" };
6
+ const severityMap = {
7
+ 1: "error",
8
+ 2: "warning",
9
+ 4: "hint",
10
+ };
7
11
  const severity = severityMap[d.severity] ?? "info";
8
- const semantic = d.severity === 1 ? "blocking" : (d.severity === 2 ? "warning" : "none");
12
+ const semantic = d.severity === 1 ? "blocking" : d.severity === 2 ? "warning" : "none";
9
13
  const code = String(d.code ?? "unknown");
10
14
  // #692: identity ALWAYS derives from the diagnostic's own source — never
11
15
  // from a caller-supplied scan label (see `scanOrigin`'s doc comment above).
@@ -137,7 +137,7 @@ let moduleLoadWindowOpen = false;
137
137
  * the same as an empty store, so it reads as "no window" rather than throwing.
138
138
  */
139
139
  export function isConsoleCaptureActive() {
140
- return (moduleLoadWindowOpen || consoleCaptureStorage?.getStore() === true);
140
+ return moduleLoadWindowOpen || consoleCaptureStorage?.getStore() === true;
141
141
  }
142
142
  /**
143
143
  * Open the module-evaluation window. Called by `clients/console-guard-install.ts`
@@ -207,7 +207,7 @@ function inCaptureWindow(fn) {
207
207
  * the terminal.
208
208
  */
209
209
  function isCaptureSeam(prop) {
210
- return prop === "on" || (typeof prop === "string" && prop.startsWith("register"));
210
+ return (prop === "on" || (typeof prop === "string" && prop.startsWith("register")));
211
211
  }
212
212
  /**
213
213
  * Wrap every function value found in `value`, in place. Handles the two
@@ -312,7 +312,9 @@ export function withConsoleCaptureWindows(api) {
312
312
  // value instead of tripping that invariant (S2a) — a frozen host API
313
313
  // loses the capture window for that member, but keeps working.
314
314
  const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
315
- if (descriptor && descriptor.writable === false && descriptor.configurable === false) {
315
+ if (descriptor &&
316
+ descriptor.writable === false &&
317
+ descriptor.configurable === false) {
316
318
  return descriptor.value;
317
319
  }
318
320
  const cached = wrapperCache.get(prop);
@@ -81,7 +81,14 @@ export function inferTrustBoundaries(nameOrPath) {
81
81
  boundaries.add("user-input");
82
82
  boundaries.add("process-exec");
83
83
  }
84
- if (hasHintToken(normalized, ["auth", "login", "token", "session", "oauth", "jwt"])) {
84
+ if (hasHintToken(normalized, [
85
+ "auth",
86
+ "login",
87
+ "token",
88
+ "session",
89
+ "oauth",
90
+ "jwt",
91
+ ])) {
85
92
  boundaries.add("auth");
86
93
  boundaries.add("user-input");
87
94
  }
@@ -7,24 +7,10 @@
7
7
  import { basename, extname } from "node:path";
8
8
  // --- Extension Maps ---
9
9
  export const KIND_EXTENSIONS = {
10
- clojure: [
11
- ".clj",
12
- ".cljc",
13
- ".cljs",
14
- ".edn",
15
- ],
16
- cmake: [
17
- ".cmake",
18
- ],
19
- csharp: [
20
- ".cs",
21
- ],
22
- css: [
23
- ".css",
24
- ".less",
25
- ".sass",
26
- ".scss",
27
- ],
10
+ clojure: [".clj", ".cljc", ".cljs", ".edn"],
11
+ cmake: [".cmake"],
12
+ csharp: [".cs"],
13
+ css: [".css", ".less", ".sass", ".scss"],
28
14
  cue: [".cue"],
29
15
  // From llvm-project/clang/lib/Driver/Types.cpp clang::driver::types::lookupTypeForExtension:
30
16
  cxx: [
@@ -61,49 +47,18 @@ export const KIND_EXTENSIONS = {
61
47
  ".cl",
62
48
  ".clcpp",
63
49
  ],
64
- dart: [
65
- ".dart",
66
- ],
67
- docker: [
68
- ".dockerfile",
69
- ],
70
- elixir: [
71
- ".ex",
72
- ".exs",
73
- ],
74
- fish: [
75
- ".fish",
76
- ],
77
- fsharp: [
78
- ".fs",
79
- ".fsi",
80
- ".fsx",
81
- ],
82
- gleam: [
83
- ".gleam",
84
- ],
85
- go: [
86
- ".go",
87
- ],
88
- haskell: [
89
- ".hs",
90
- ".lhs",
91
- ],
92
- "helm-template": [
93
- ".tpl",
94
- ],
95
- html: [
96
- ".htm",
97
- ".html",
98
- ],
99
- java: [
100
- ".java",
101
- ],
102
- json: [
103
- ".json",
104
- ".json5",
105
- ".jsonc",
106
- ],
50
+ dart: [".dart"],
51
+ docker: [".dockerfile"],
52
+ elixir: [".ex", ".exs"],
53
+ fish: [".fish"],
54
+ fsharp: [".fs", ".fsi", ".fsx"],
55
+ gleam: [".gleam"],
56
+ go: [".go"],
57
+ haskell: [".hs", ".lhs"],
58
+ "helm-template": [".tpl"],
59
+ html: [".htm", ".html"],
60
+ java: [".java"],
61
+ json: [".json", ".json5", ".jsonc"],
107
62
  jsts: [
108
63
  ".cjs",
109
64
  ".cts",
@@ -116,75 +71,25 @@ export const KIND_EXTENSIONS = {
116
71
  ".tsx",
117
72
  ".vue",
118
73
  ],
119
- kotlin: [
120
- ".kt",
121
- ".kts",
122
- ],
123
- lua: [
124
- ".lua",
125
- ],
126
- markdown: [
127
- ".md",
128
- ".mdx",
129
- ],
130
- nix: [
131
- ".nix",
132
- ],
133
- ocaml: [
134
- ".ml",
135
- ".mli",
136
- ],
137
- php: [
138
- ".php",
139
- ],
140
- powershell: [
141
- ".ps1",
142
- ".psm1",
143
- ".psd1",
144
- ],
145
- prisma: [
146
- ".prisma",
147
- ],
148
- python: [
149
- ".py",
150
- ".pyi",
151
- ],
152
- ruby: [
153
- ".gemspec",
154
- ".rake",
155
- ".rb",
156
- ".ru",
157
- ],
158
- rust: [
159
- ".rs",
160
- ],
161
- shell: [
162
- ".bash",
163
- ".sh",
164
- ".zsh",
165
- ],
166
- sql: [
167
- ".sql",
168
- ],
169
- swift: [
170
- ".swift",
171
- ],
172
- terraform: [
173
- ".tf",
174
- ".tfvars",
175
- ],
74
+ kotlin: [".kt", ".kts"],
75
+ lua: [".lua"],
76
+ markdown: [".md", ".mdx"],
77
+ nix: [".nix"],
78
+ ocaml: [".ml", ".mli"],
79
+ php: [".php"],
80
+ powershell: [".ps1", ".psm1", ".psd1"],
81
+ prisma: [".prisma"],
82
+ python: [".py", ".pyi"],
83
+ ruby: [".gemspec", ".rake", ".rb", ".ru"],
84
+ rust: [".rs"],
85
+ shell: [".bash", ".sh", ".zsh"],
86
+ sql: [".sql"],
87
+ swift: [".swift"],
88
+ terraform: [".tf", ".tfvars"],
176
89
  terragrunt: [],
177
- toml: [
178
- ".toml",
179
- ],
180
- yaml: [
181
- ".yaml",
182
- ".yml",
183
- ],
184
- zig: [
185
- ".zig",
186
- ".zon",
187
- ],
90
+ toml: [".toml"],
91
+ yaml: [".yaml", ".yml"],
92
+ zig: [".zig", ".zon"],
188
93
  };
189
94
  /** Return whether a path has an extension registered for the given file kind. */
190
95
  export function hasKindExtension(filePath, kind) {
@@ -5,7 +5,8 @@ import * as fs from "node:fs";
5
5
  import * as os from "node:os";
6
6
  import * as path from "node:path";
7
7
  import { minimatch } from "./deps/minimatch.js";
8
- import { collectTrackedFiles, getTrackedFilesSnapshot } from "./git-tracked-ignore.js";
8
+ import { isInSpawnTimeoutCooldown, noteSpawnTimeout, } from "./spawn-timeout-cooldown.js";
9
+ import { collectTrackedFiles, getTrackedFilesSnapshot, } from "./git-tracked-ignore.js";
9
10
  import { getGlobalIgnorePatterns, getPiLensGlobalConfigPath, } from "./lens-config.js";
10
11
  import { normalizeEphemeralMapKey, normalizeFilePath } from "./path-utils.js";
11
12
  import { findPiLensConfigInDir, findPiLensProjectConfig, loadPiLensConfigInDir, loadPiLensProjectConfig, } from "./project-lens-config.js";
@@ -577,12 +578,27 @@ export async function detectFileChangedAfterCommand(filePath, command, args, cwd
577
578
  catch {
578
579
  return 0;
579
580
  }
581
+ // #1995: a command cooling down after a spawn timeout must not be handed
582
+ // a second budget - autofix is one of the lanes that paid twice for a
583
+ // wedged .cmd shim. Return "no fix applied" (an honest not-checked).
584
+ if (isInSpawnTimeoutCooldown(command))
585
+ return 0;
580
586
  const result = await safeSpawnAsync(command, args, {
581
587
  timeout: 30000,
582
588
  cwd,
583
589
  });
584
590
  if (result.error)
585
591
  return 0;
592
+ if (result.failure === "timeout") {
593
+ noteSpawnTimeout({
594
+ tool: path.basename(command).replace(/\.[^.]+$/, ""),
595
+ command,
596
+ phase: "autofix",
597
+ durationMs: 30000,
598
+ teardown: result.timeoutTeardown,
599
+ });
600
+ return 0;
601
+ }
586
602
  if (result.status !== 0 && !ignoreStatuses.includes(result.status ?? -1)) {
587
603
  return 0;
588
604
  }