@herbertgao/pi-extensions 2026.9.5 → 2026.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +5 -22
  2. package/THIRD_PARTY_NOTICES.md +0 -4
  3. package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +1 -1
  4. package/node_modules/@herbertgao/sol-pi/package.json +1 -1
  5. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +0 -5
  6. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +3 -1
  7. package/node_modules/@narumitw/pi-btw/README.md +2 -0
  8. package/node_modules/@narumitw/pi-btw/dist/index.ts +284 -365
  9. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  10. package/node_modules/@narumitw/pi-btw/package.json +52 -53
  11. package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +494 -547
  12. package/node_modules/@narumitw/pi-btw/src/btw.ts +814 -856
  13. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +673 -674
  14. package/node_modules/@narumitw/pi-btw/src/keybindings.ts +228 -270
  15. package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +309 -318
  16. package/node_modules/@narumitw/pi-btw/src/menu.ts +416 -454
  17. package/node_modules/@narumitw/pi-btw/src/settings.ts +203 -219
  18. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +173 -201
  19. package/node_modules/@narumitw/pi-btw/src/text.ts +21 -23
  20. package/node_modules/@narumitw/pi-btw/src/transcript-markdown.ts +65 -0
  21. package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +611 -662
  22. package/node_modules/pi-lens/CHANGELOG.md +239 -0
  23. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +3 -0
  24. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +30 -4
  25. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +2 -0
  26. package/node_modules/pi-lens/dist/clients/bash-file-access.js +26 -0
  27. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -1
  28. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +403 -35
  29. package/node_modules/pi-lens/dist/clients/bootstrap.js +6 -1
  30. package/node_modules/pi-lens/dist/clients/cascade-format.js +200 -4
  31. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +10 -2
  32. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +16 -1
  33. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +12 -1
  34. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +65 -0
  35. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +28 -0
  36. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +9 -2
  37. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +222 -0
  38. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +389 -13
  39. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +175 -25
  40. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +62 -0
  41. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +21 -41
  42. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +6 -1
  43. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +7 -7
  44. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -12
  45. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +2 -21
  46. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1 -1
  47. package/node_modules/pi-lens/dist/clients/dispatch/types.js +4 -1
  48. package/node_modules/pi-lens/dist/clients/disposition-publish.js +1 -0
  49. package/node_modules/pi-lens/dist/clients/effective-config.js +1 -1
  50. package/node_modules/pi-lens/dist/clients/file-kinds.js +26 -1
  51. package/node_modules/pi-lens/dist/clients/file-role.js +21 -21
  52. package/node_modules/pi-lens/dist/clients/file-utils.js +156 -10
  53. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +56 -9
  54. package/node_modules/pi-lens/dist/clients/format-service.js +39 -21
  55. package/node_modules/pi-lens/dist/clients/formatters.js +60 -13
  56. package/node_modules/pi-lens/dist/clients/generation-guard.js +2 -2
  57. package/node_modules/pi-lens/dist/clients/git-guard.js +11 -3
  58. package/node_modules/pi-lens/dist/clients/indent-retarget.js +78 -8
  59. package/node_modules/pi-lens/dist/clients/installer/index.js +333 -114
  60. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +7 -0
  61. package/node_modules/pi-lens/dist/clients/instance-reaper.js +20 -10
  62. package/node_modules/pi-lens/dist/clients/language-profile.js +23 -1
  63. package/node_modules/pi-lens/dist/clients/language-registry.js +5 -1
  64. package/node_modules/pi-lens/dist/clients/latency-logger.js +4 -1
  65. package/node_modules/pi-lens/dist/clients/lens-engine.js +12 -3
  66. package/node_modules/pi-lens/dist/clients/lens-events.js +2 -1
  67. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +79 -0
  68. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +2 -1
  69. package/node_modules/pi-lens/dist/clients/lsp/client.js +25 -21
  70. package/node_modules/pi-lens/dist/clients/lsp/config.js +2 -2
  71. package/node_modules/pi-lens/dist/clients/lsp/index.js +7 -0
  72. package/node_modules/pi-lens/dist/clients/lsp/launch.js +16 -4
  73. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -2
  74. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +2 -1
  75. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +5 -3
  76. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +12 -8
  77. package/node_modules/pi-lens/dist/clients/mcp/session.js +36 -4
  78. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +24 -7
  79. package/node_modules/pi-lens/dist/clients/observed-mutation.js +40 -2
  80. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +23 -3
  81. package/node_modules/pi-lens/dist/clients/opengrep-client.js +110 -15
  82. package/node_modules/pi-lens/dist/clients/path-utils.js +123 -3
  83. package/node_modules/pi-lens/dist/clients/performance-report.js +5 -1
  84. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +1 -1
  85. package/node_modules/pi-lens/dist/clients/pipeline.js +74 -5
  86. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +37 -5
  87. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +145 -18
  88. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  89. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +59 -3
  90. package/node_modules/pi-lens/dist/clients/project-lens-config.js +45 -2
  91. package/node_modules/pi-lens/dist/clients/read-guard.js +70 -11
  92. package/node_modules/pi-lens/dist/clients/resource-sampler.js +147 -9
  93. package/node_modules/pi-lens/dist/clients/ruff-client.js +1 -1
  94. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +33 -5
  95. package/node_modules/pi-lens/dist/clients/runtime-context.js +6 -2
  96. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +77 -7
  97. package/node_modules/pi-lens/dist/clients/runtime-session.js +21 -2
  98. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +43 -12
  99. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +330 -85
  100. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -17
  101. package/node_modules/pi-lens/dist/clients/safe-spawn.js +258 -5
  102. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +6 -0
  103. package/node_modules/pi-lens/dist/clients/session-event-guard.js +50 -5
  104. package/node_modules/pi-lens/dist/clients/sg-runner.js +23 -11
  105. package/node_modules/pi-lens/dist/clients/sgconfig.js +79 -2
  106. package/node_modules/pi-lens/dist/clients/test-runner-client.js +6 -41
  107. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +43 -0
  108. package/node_modules/pi-lens/dist/clients/tool-agreement.js +423 -0
  109. package/node_modules/pi-lens/dist/clients/tool-config.js +50 -0
  110. package/node_modules/pi-lens/dist/clients/tool-cwd.js +47 -76
  111. package/node_modules/pi-lens/dist/clients/tool-policy.js +163 -7
  112. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +120 -0
  113. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +127 -189
  114. package/node_modules/pi-lens/dist/clients/widget-state.js +98 -0
  115. package/node_modules/pi-lens/dist/clients/word-index.js +5 -2
  116. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +7 -0
  117. package/node_modules/pi-lens/dist/index.js +27416 -24153
  118. package/node_modules/pi-lens/dist/mcp/server.js +5 -2
  119. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +7 -1
  120. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +168 -53
  121. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +244 -72
  122. package/node_modules/pi-lens/docs/audit1.md +5 -5
  123. package/node_modules/pi-lens/docs/dependencies.md +11 -0
  124. package/node_modules/pi-lens/docs/dispositions.md +52 -0
  125. package/node_modules/pi-lens/docs/environment-variables.md +2 -2
  126. package/node_modules/pi-lens/docs/features.md +4 -4
  127. package/node_modules/pi-lens/docs/globalconfig.md +3 -1
  128. package/node_modules/pi-lens/docs/language-coverage.md +1 -0
  129. package/node_modules/pi-lens/docs/pi-lens-fixer.md +53 -94
  130. package/node_modules/pi-lens/docs/pi-lens-investigator.md +43 -38
  131. package/node_modules/pi-lens/docs/pi-lens-retro.md +97 -0
  132. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +53 -66
  133. package/node_modules/pi-lens/docs/release-qa-baseline.md +22 -0
  134. package/node_modules/pi-lens/docs/settings.md +7 -4
  135. package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +1 -1
  136. package/node_modules/pi-lens/docs/usage.md +2 -0
  137. package/node_modules/pi-lens/package.json +1 -1
  138. package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +24 -12
  139. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +40 -0
  140. package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +15 -0
  141. package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +7 -0
  142. package/package.json +6 -17
  143. package/examples/pi-footer.json +0 -275
  144. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +0 -70
  145. package/node_modules/@czottmann/pi-automode/LICENSE.md +0 -21
  146. package/node_modules/@czottmann/pi-automode/README.md +0 -215
  147. package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +0 -39
  148. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +0 -46
  149. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +0 -60
  150. package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +0 -6
  151. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +0 -428
  152. package/node_modules/@czottmann/pi-automode/docs/configuration.md +0 -171
  153. package/node_modules/@czottmann/pi-automode/docs/defaults.md +0 -178
  154. package/node_modules/@czottmann/pi-automode/docs/diagnostics.md +0 -90
  155. package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +0 -160
  156. package/node_modules/@czottmann/pi-automode/examples/automode.local.json +0 -44
  157. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +0 -692
  158. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +0 -852
  159. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +0 -904
  160. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +0 -228
  161. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +0 -954
  162. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +0 -429
  163. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/log.ts +0 -173
  164. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model-selector.ts +0 -113
  165. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model.ts +0 -13
  166. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +0 -297
  167. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +0 -623
  168. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/state.ts +0 -102
  169. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/transcript.ts +0 -236
  170. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/types.ts +0 -205
  171. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/utils.ts +0 -54
  172. package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +0 -26
  173. package/node_modules/@czottmann/pi-automode/package.json +0 -61
  174. package/node_modules/@czottmann/pi-automode/skills/automode-diagnostics/SKILL.md +0 -63
  175. package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +0 -376
  176. package/node_modules/@luxusai/pi-hindsight/README.md +0 -92
  177. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +0 -56
  178. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +0 -169
  179. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +0 -107
  180. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +0 -89
  181. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +0 -189
  182. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  183. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  184. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +0 -54
  185. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +0 -75
  186. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +0 -300
  187. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +0 -158
  188. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +0 -164
  189. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +0 -139
  190. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +0 -74
  191. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +0 -261
  192. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +0 -151
  193. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +0 -18
  194. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +0 -46
  195. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +0 -383
  196. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +0 -240
  197. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +0 -176
  198. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +0 -178
  199. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +0 -41
  200. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +0 -386
  201. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +0 -39
  202. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +0 -34
  203. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +0 -140
  204. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +0 -61
  205. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +0 -925
  206. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +0 -247
  207. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +0 -547
  208. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +0 -480
  209. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +0 -182
  210. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +0 -86
  211. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +0 -1010
  212. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +0 -175
  213. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +0 -425
  214. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +0 -210
  215. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +0 -817
  216. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +0 -25
  217. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +0 -319
  218. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +0 -196
  219. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +0 -189
  220. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +0 -65
  221. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +0 -260
  222. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +0 -244
  223. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +0 -59
  224. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +0 -82
  225. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +0 -45
  226. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +0 -331
  227. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +0 -354
  228. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +0 -66
  229. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +0 -132
  230. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +0 -228
  231. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +0 -74
  232. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +0 -16
  233. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +0 -648
  234. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +0 -105
  235. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +0 -68
  236. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +0 -71
  237. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +0 -13
  238. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +0 -162
  239. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +0 -131
  240. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +0 -104
  241. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +0 -37
  242. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +0 -893
  243. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +0 -35
  244. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +0 -177
  245. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +0 -7
  246. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +0 -21
  247. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +0 -112
  248. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +0 -111
  249. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +0 -214
  250. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +0 -70
  251. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +0 -392
  252. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +0 -45
  253. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +0 -9
  254. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +0 -860
  255. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +0 -105
  256. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +0 -189
  257. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +0 -299
  258. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +0 -201
  259. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +0 -47
  260. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +0 -239
  261. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +0 -50
  262. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +0 -259
  263. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +0 -77
  264. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +0 -534
  265. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +0 -319
  266. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +0 -325
  267. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +0 -42
  268. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +0 -244
  269. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +0 -56
  270. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +0 -50
  271. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +0 -167
  272. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +0 -207
  273. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +0 -120
  274. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +0 -8
  275. package/node_modules/@luxusai/pi-hindsight/package.json +0 -118
  276. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +0 -75
@@ -1,15 +1,13 @@
1
1
  # SQL Injection Detection
2
2
  # Detects unsafe interpolation in SQL-like template literals.
3
- # Demoted from error/blocking to warning on 2026-09-10 (maintainer): the
4
- # query keys on the callee NAME only (query|execute|exec|run), so any
5
- # `run(`…${x}…`)` / `exec(`…`)` in non-SQL code fires — too many false
6
- # positives to block on. A real SQL sink needs a receiver/type signal.
3
+ # The structural query keeps the common callee set, while the TypeScript-aware
4
+ # post-filter requires a receiver bound to a known DB client or a SQL-leading template.
7
5
  id: sql-injection
8
6
  name: SQL Injection Risk
9
- severity: warning
7
+ severity: error
10
8
  category: security
11
9
  defect_class: injection
12
- inline_tier: warning
10
+ inline_tier: blocking
13
11
  language: typescript
14
12
 
15
13
  message: "SQL injection risk — use parameterized queries, never interpolate into SQL"
@@ -30,18 +28,32 @@ description: |
30
28
 
31
29
  query: |
32
30
  (call_expression
33
- function: [
34
- (identifier) @SQL_FUNC
35
- (member_expression property: (property_identifier) @SQL_FUNC)
36
- ]
31
+ function: (identifier) @SQL_FUNC
37
32
  arguments: (arguments
38
- (template_string (template_substitution) @INTERPOLATION))
39
- (#match? @SQL_FUNC "^(query|execute|exec|run)$"))
33
+ (template_string (template_substitution) @INTERPOLATION) @TEMPLATE)
34
+ (#match? @SQL_FUNC "^(query|execute|exec|run|\\$queryRaw|\\$executeRaw|\\$queryRawUnsafe|\\$executeRawUnsafe|raw|prepare)$"))
35
+ (call_expression
36
+ function: (member_expression
37
+ object: (_) @OBJ
38
+ property: (property_identifier) @SQL_FUNC)
39
+ arguments: (arguments
40
+ (template_string (template_substitution) @INTERPOLATION) @TEMPLATE)
41
+ (#match? @SQL_FUNC "^(query|execute|exec|run|\\$queryRaw|\\$executeRaw|\\$queryRawUnsafe|\\$executeRawUnsafe|raw|prepare)$"))
42
+ (call_expression
43
+ function: (member_expression
44
+ object: (_) @OBJ
45
+ property: (property_identifier) @SQL_FUNC)
46
+ arguments: (template_string (template_substitution) @INTERPOLATION) @TEMPLATE
47
+ (#match? @SQL_FUNC "^(query|execute|exec|run|\\$queryRaw|\\$executeRaw|\\$queryRawUnsafe|\\$executeRawUnsafe|raw|prepare)$"))
40
48
 
41
49
  metavars:
42
50
  - SQL_FUNC
51
+ - OBJ
52
+ - TEMPLATE
43
53
  - INTERPOLATION
44
54
 
55
+ post_filter: ts_sql_injection_sink
56
+
45
57
  has_fix: false
46
58
 
47
59
  tags:
@@ -195,6 +195,7 @@ function createState(files) {
195
195
  projects: counter(),
196
196
  smellTotals: counter(),
197
197
  latency: {
198
+ testRunnerVerdicts: new Map(),
198
199
  runnerStatus: counter(),
199
200
  runnerFailureKinds: counter(),
200
201
  runnerBlockingFindings: counter(),
@@ -381,6 +382,22 @@ async function analyzeLatency(files, state) {
381
382
  const phase = entry.phase ?? "unknown";
382
383
  state.latency.phaseCounts.inc(phase);
383
384
  if (phase.endsWith("_timeout")) state.latency.phaseTimeouts.inc(phase);
385
+ if (phase === "test_runner_verdict_delivery") {
386
+ const sessionId = entry.metadata?.sessionId ?? "unknown";
387
+ const summary = state.latency.testRunnerVerdicts.get(sessionId) ?? {
388
+ total: 0,
389
+ stale: 0,
390
+ unknown: 0,
391
+ };
392
+ const verdictCount = entry.metadata?.verdictCount;
393
+ const staleCount = entry.metadata?.staleCount;
394
+ const unknownCount = entry.metadata?.unknownCount;
395
+ summary.total += typeof verdictCount === "number" ? verdictCount : 1;
396
+ if (typeof staleCount === "number") summary.stale += staleCount;
397
+ else if (entry.metadata?.stale === true) summary.stale += 1;
398
+ if (typeof unknownCount === "number") summary.unknown += unknownCount;
399
+ state.latency.testRunnerVerdicts.set(sessionId, summary);
400
+ }
384
401
  if (phase === "config_resolved") {
385
402
  // #2526. Counted here rather than derived from phaseCounts so the
386
403
  // legacy/record cross-check reads the same row it counts.
@@ -1481,6 +1498,18 @@ function buildReport(state) {
1481
1498
  shownInlineShownAgentUnresolved: state.diagnostics.shownInline.toJSON(),
1482
1499
  },
1483
1500
  latency: {
1501
+ testRunnerVerdicts: Object.fromEntries(
1502
+ [...state.latency.testRunnerVerdicts.entries()].map(
1503
+ ([sessionId, summary]) => [
1504
+ sessionId,
1505
+ {
1506
+ ...summary,
1507
+ denominator: summary.total,
1508
+ rate: summary.total ? summary.stale / summary.total : 0,
1509
+ },
1510
+ ],
1511
+ ),
1512
+ ),
1484
1513
  runnerStatus: state.latency.runnerStatus.top(limit * 2),
1485
1514
  runnerFailureKinds: state.latency.runnerFailureKinds.top(limit * 2),
1486
1515
  runnerBlockingFindings: state.latency.runnerBlockingFindings.toJSON(),
@@ -1672,6 +1701,17 @@ function printReport(report) {
1672
1701
  report.latency.runnerFailureKinds,
1673
1702
  (x) => `${x.count.toString().padStart(5)} ${x.key}`,
1674
1703
  );
1704
+ const verdictSessions = Object.entries(
1705
+ report.latency.testRunnerVerdicts ?? {},
1706
+ );
1707
+ if (verdictSessions.length) {
1708
+ console.log("\nTest-runner stale verdicts per session");
1709
+ for (const [sessionId, summary] of verdictSessions) {
1710
+ console.log(
1711
+ ` ${sessionId}: ${summary.stale}/${summary.total} stale (${(summary.rate * 100).toFixed(1)}%)`,
1712
+ );
1713
+ }
1714
+ }
1675
1715
 
1676
1716
  const a = report.actionable;
1677
1717
  if (a.reports || a.advisoriesInjected) {
@@ -9,6 +9,21 @@ Use `ast_grep_search` and `ast_grep_replace` for semantic code search/replace. a
9
9
 
10
10
  These tools (plus `ast_grep_outline`, `lsp_navigation`) are registered but inactive by default on hosts that support pi's dynamic tooling. If a call to one of them isn't recognized, activate it first: `pi_lens_activate_tools tools=["ast_grep_search", "ast_grep_replace"]`.
11
11
 
12
+ On hosts that aggregate pi-lens behind a single `lens` tool, the `ast_grep_*` tools and `pi_lens_activate_tools` may not be registered at all. There, fall back to the `ast-grep` CLI (alias `sg`) — patterns, metavariables, and YAML rules are identical:
13
+
14
+ ```bash
15
+ # search (≈ ast_grep_search)
16
+ ast-grep run -p 'fetchMetrics($$$ARGS)' -l ts src/
17
+
18
+ # rewrite (≈ ast_grep_replace; -U applies all)
19
+ ast-grep run -p 'var $X' -r 'let $X' -l js src/ -U
20
+
21
+ # full YAML rule (≈ the rule: parameter)
22
+ ast-grep scan --rule my-rule.yml src/
23
+ ```
24
+
25
+ Structural-intent parameters map to YAML constraints: `insideKind` → `inside: { kind: ..., stopBy: end }`, `hasKind`/`hasDescendantKind` → `has: { kind: ... }`, `follows` → `follows: { pattern: ... }`, `precedes` → `precedes: { pattern: ... }`.
26
+
12
27
  ## When to Use
13
28
 
14
29
  - Function calls, imports, class methods (structured code)
@@ -7,6 +7,13 @@ description: Navigate code with IDE features and run proactive LSP diagnostics o
7
7
 
8
8
  Use `lsp_navigation` as **PRIMARY** for code intelligence. Use `lens_diagnostics` with `source=lsp` as **PRIMARY** for proactive type/error checks. Do NOT use grep/glob/ast-grep first for code intelligence.
9
9
 
10
+ ## Aggregate-tool hosts
11
+
12
+ Some hosts expose pi-lens through a single aggregate tool — `lens(action=...)` — instead of registering the standalone names below. On those hosts:
13
+
14
+ - Proactive checks: `lens({ action: "lsp_diagnostics", ... })` — same parameters as the table below; the cached-report entry point maps to `lens({ action: "diagnostics", ... })`.
15
+ - If `lsp_navigation` is not among the aggregate's actions, do not call the standalone name: use the host's structural search funnel (`symbol_search` → `module_report` → `read_symbol`) or the `ast-grep` CLI for navigation instead.
16
+
10
17
  ## Diagnostics
11
18
 
12
19
  Use `lens_diagnostics` with `source=lsp` before builds/tests or after touching several files:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herbertgao/pi-extensions",
3
- "version": "2026.9.5",
3
+ "version": "2026.9.7",
4
4
  "description": "Aggregate installer for HerbertGao-maintained Pi extensions.",
5
5
  "keywords": [
6
6
  "extensions",
@@ -20,7 +20,6 @@
20
20
  "directory": "packages/pi-extensions"
21
21
  },
22
22
  "files": [
23
- "examples/pi-footer.json",
24
23
  "README.md",
25
24
  "LICENSE",
26
25
  "THIRD_PARTY_NOTICES.md"
@@ -37,7 +36,6 @@
37
36
  "dependencies": {
38
37
  "@ast-grep/cli": "^0.45.0",
39
38
  "@ast-grep/napi": "^0.45.0",
40
- "@czottmann/pi-automode": "1.16.0",
41
39
  "@dietrichgebert/ponytail": "4.10.0",
42
40
  "@earendil-works/pi-coding-agent": "^0.84.4",
43
41
  "@earendil-works/pi-tui": "^0.84.4",
@@ -45,19 +43,18 @@
45
43
  "@herbertgao/pi-cc-extensions": "0.9.2",
46
44
  "@herbertgao/pi-subagents": "0.17.1",
47
45
  "@herbertgao/resume-from": "0.2.0",
48
- "@herbertgao/sol-pi": "0.2.0",
46
+ "@herbertgao/sol-pi": "0.3.0",
49
47
  "@juicesharp/rpiv-ask-user-question": "2.10.1",
50
48
  "@juicesharp/rpiv-config": "^2.10.1",
51
- "@luxusai/pi-hindsight": "0.12.0",
52
49
  "@modelcontextprotocol/client": "2.0.0",
53
50
  "@modelcontextprotocol/core": "2.0.0",
54
51
  "@modelcontextprotocol/ext-apps": "^1.2.2",
55
52
  "@modelcontextprotocol/sdk": "^1.29.0",
56
53
  "@mozilla/readability": "^0.6.0",
57
54
  "@napi-rs/keyring": "^1.3.0",
58
- "@narumitw/pi-btw": "0.58.1",
55
+ "@narumitw/pi-btw": "0.59.0",
59
56
  "@narumitw/pi-caffeinate": "0.49.7",
60
- "@narumitw/pi-tui-kit": "^0.59.0",
57
+ "@narumitw/pi-tui-kit": "^0.64.0",
61
58
  "@noble/ed25519": "^3.1.0",
62
59
  "@pi-plugins/fast-mode": "0.1.12",
63
60
  "@shikijs/cli": "^4.0.2",
@@ -69,7 +66,6 @@
69
66
  "@tifan/pi-preferred-thinking": "1.0.2",
70
67
  "@tifan/pi-recap": "0.4.7",
71
68
  "@tifan/pi-rename": "0.6.0",
72
- "@vectorize-io/hindsight-client": "^0.9.0",
73
69
  "ajv": "^8.17.1",
74
70
  "ajv-formats": "^3.0.1",
75
71
  "chalk": "^6.0.0",
@@ -78,10 +74,9 @@
78
74
  "dbus-native": "^0.15.2",
79
75
  "defuddle": "0.19.3",
80
76
  "gpt-tokenizer": "^3.4.0",
81
- "grok-mermaid": "0.2.2",
77
+ "grok-mermaid": "0.2.3",
82
78
  "jiti": "^2.7.0",
83
79
  "js-yaml": "^5.2.2",
84
- "jsonc-parser": "^3.3.1",
85
80
  "linkedom": "^0.16.0",
86
81
  "minimatch": "^10.2.6",
87
82
  "nanoid": "^5.0.0",
@@ -89,7 +84,7 @@
89
84
  "p-limit": "^6.1.0",
90
85
  "pi-antigravity": "0.7.2",
91
86
  "pi-footer": "0.5.1",
92
- "pi-lens": "4.1.6",
87
+ "pi-lens": "4.2.0",
93
88
  "pi-mcp-adapter": "2.34.0",
94
89
  "pi-web-access": "0.29.0",
95
90
  "pidusage": "^4.0.1",
@@ -112,7 +107,6 @@
112
107
  "web-tree-sitter": "0.25.10"
113
108
  },
114
109
  "bundledDependencies": [
115
- "@czottmann/pi-automode",
116
110
  "@dietrichgebert/ponytail",
117
111
  "@herbertgao/pi-bark",
118
112
  "@herbertgao/pi-cc-extensions",
@@ -120,7 +114,6 @@
120
114
  "@herbertgao/resume-from",
121
115
  "@herbertgao/sol-pi",
122
116
  "@juicesharp/rpiv-ask-user-question",
123
- "@luxusai/pi-hindsight",
124
117
  "@narumitw/pi-btw",
125
118
  "@narumitw/pi-caffeinate",
126
119
  "@pi-plugins/fast-mode",
@@ -158,7 +151,6 @@
158
151
  "./node_modules/@herbertgao/pi-subagents/src/index.ts",
159
152
  "./node_modules/@juicesharp/rpiv-ask-user-question/index.ts",
160
153
  "./node_modules/@herbertgao/pi-bark/src/index.ts",
161
- "./node_modules/@luxusai/pi-hindsight/extensions/index.ts",
162
154
  "./node_modules/@narumitw/pi-btw/dist/index.ts",
163
155
  "./node_modules/@narumitw/pi-caffeinate/dist/index.ts",
164
156
  "./node_modules/@pi-plugins/fast-mode/dist/index.mjs",
@@ -167,7 +159,6 @@
167
159
  "./node_modules/pi-web-access/index.ts",
168
160
  "./node_modules/pi-antigravity/src/index.ts",
169
161
  "./node_modules/remote-pi/dist/index.js",
170
- "./node_modules/@czottmann/pi-automode/extensions/auto-mode.ts",
171
162
  "./node_modules/pi-footer/src/index.ts"
172
163
  ],
173
164
  "themes": [
@@ -175,9 +166,7 @@
175
166
  "./node_modules/@herbertgao/pi-cc-extensions/themes/cc-light.json"
176
167
  ],
177
168
  "skills": [
178
- "./node_modules/@czottmann/pi-automode/skills",
179
169
  "./node_modules/@dietrichgebert/ponytail/skills",
180
- "./node_modules/@luxusai/pi-hindsight/skills",
181
170
  "./node_modules/pi-mcp-adapter/skills",
182
171
  "./node_modules/pi-lens/skills"
183
172
  ]
@@ -1,275 +0,0 @@
1
- {
2
- "version": 1,
3
- "enabled": true,
4
- "preset": "pi-footer",
5
- "lines": [
6
- [
7
- {
8
- "id": "core-cwd",
9
- "type": "cwd",
10
- "enabled": true,
11
- "options": {
12
- "raw": true,
13
- "fg": "pi:dim",
14
- "cwdDisplayStyle": "full-home"
15
- }
16
- },
17
- {
18
- "id": "core-branch",
19
- "type": "git-branch",
20
- "enabled": true,
21
- "options": {
22
- "raw": true,
23
- "fg": "pi:dim",
24
- "hideWhenEmpty": true,
25
- "gitBranchDisplayStyle": "round-brackets"
26
- }
27
- },
28
- {
29
- "id": "core-session",
30
- "type": "session-name",
31
- "enabled": true,
32
- "options": {
33
- "raw": true,
34
- "fg": "pi:dim",
35
- "hideWhenEmpty": true
36
- }
37
- }
38
- ],
39
- [
40
- {
41
- "id": "core-tokens",
42
- "type": "tokens",
43
- "enabled": true,
44
- "options": {
45
- "raw": true,
46
- "fg": "pi:dim",
47
- "tokenFormatStyle": "compact"
48
- }
49
- },
50
- {
51
- "id": "core-cache-read",
52
- "type": "cache-read",
53
- "enabled": true,
54
- "options": {
55
- "icon": "R",
56
- "fg": "pi:dim",
57
- "tokenFormatStyle": "compact",
58
- "hideWhenZero": true
59
- }
60
- },
61
- {
62
- "id": "core-cache-write",
63
- "type": "cache-write",
64
- "enabled": true,
65
- "options": {
66
- "icon": "W",
67
- "fg": "pi:dim",
68
- "tokenFormatStyle": "compact",
69
- "hideWhenZero": true
70
- }
71
- },
72
- {
73
- "id": "core-cache-hit",
74
- "type": "cache-hit-rate",
75
- "enabled": true,
76
- "options": {
77
- "icon": "CH",
78
- "fg": "pi:dim",
79
- "hideWhenZero": true,
80
- "cacheHitSource": "turn"
81
- }
82
- },
83
- {
84
- "id": "core-cost",
85
- "type": "cost",
86
- "enabled": true,
87
- "options": {
88
- "raw": true,
89
- "fg": "pi:dim",
90
- "costFormatStyle": "compact",
91
- "showSubscription": true
92
- }
93
- },
94
- {
95
- "id": "core-context",
96
- "type": "context",
97
- "enabled": true,
98
- "options": {
99
- "raw": true,
100
- "fg": "pi:dim",
101
- "contextConditionalColors": true,
102
- "warningFg": "pi:warning",
103
- "dangerFg": "pi:error"
104
- }
105
- },
106
- {
107
- "id": "core-context-slash",
108
- "type": "separator",
109
- "enabled": true,
110
- "options": {
111
- "separator": "custom",
112
- "text": "/",
113
- "fg": "pi:dim"
114
- }
115
- },
116
- {
117
- "id": "core-context-window",
118
- "type": "context-window",
119
- "enabled": true,
120
- "options": {
121
- "raw": true,
122
- "fg": "pi:dim",
123
- "contextConditionalColors": true,
124
- "warningFg": "pi:warning",
125
- "dangerFg": "pi:error",
126
- "tokenFormatStyle": "compact"
127
- }
128
- },
129
- {
130
- "id": "core-flex",
131
- "type": "flex-separator",
132
- "enabled": true,
133
- "options": {}
134
- },
135
- {
136
- "id": "core-model",
137
- "type": "model",
138
- "enabled": true,
139
- "options": {
140
- "raw": true,
141
- "fg": "pi:dim"
142
- }
143
- },
144
- {
145
- "id": "core-thinking",
146
- "type": "thinking-level",
147
- "enabled": true,
148
- "options": {
149
- "raw": true,
150
- "fg": "pi:dim",
151
- "hideWhenEmpty": true
152
- }
153
- }
154
- ],
155
- [
156
- {
157
- "id": "status-mcp",
158
- "type": "external-status",
159
- "enabled": true,
160
- "options": {
161
- "externalStatusKey": "mcp",
162
- "icon": "🔌 ",
163
- "hideWhenEmpty": true
164
- }
165
- },
166
- {
167
- "id": "status-auto",
168
- "type": "external-status",
169
- "enabled": true,
170
- "options": {
171
- "externalStatusKey": "pi-automode",
172
- "icon": "🤖 Auto ",
173
- "trimValue": 2,
174
- "preserveTrimStyles": true,
175
- "hideWhenEmpty": true
176
- }
177
- }
178
- ],
179
- [
180
- {
181
- "id": "status-lsp",
182
- "type": "external-status",
183
- "enabled": true,
184
- "options": {
185
- "externalStatusKey": "pi-lens-lsp",
186
- "icon": "🧩 LSP ",
187
- "trimValue": 4,
188
- "preserveTrimStyles": true,
189
- "hideWhenEmpty": true
190
- }
191
- },
192
- {
193
- "id": "status-ponytail",
194
- "type": "external-status",
195
- "enabled": true,
196
- "options": {
197
- "externalStatusKey": "ponytail",
198
- "trimValue": 2,
199
- "preserveTrimStyles": false,
200
- "hideWhenEmpty": true
201
- }
202
- }
203
- ],
204
- [
205
- {
206
- "id": "status-remote-session",
207
- "type": "external-status",
208
- "enabled": true,
209
- "options": {
210
- "externalStatusKey": "remote-pi:session",
211
- "hideWhenEmpty": true
212
- }
213
- },
214
- {
215
- "id": "status-remote-relay",
216
- "type": "external-status",
217
- "enabled": true,
218
- "options": {
219
- "externalStatusKey": "remote-pi:relay",
220
- "hideWhenEmpty": true
221
- }
222
- },
223
- {
224
- "id": "status-remote-peer",
225
- "type": "external-status",
226
- "enabled": true,
227
- "options": {
228
- "externalStatusKey": "remote-pi:peer-active",
229
- "hideWhenEmpty": true
230
- }
231
- },
232
- {
233
- "id": "status-subagents",
234
- "type": "external-status",
235
- "enabled": true,
236
- "options": {
237
- "externalStatusKey": "subagents",
238
- "icon": "👥 ",
239
- "hideWhenEmpty": true
240
- }
241
- }
242
- ]
243
- ],
244
- "separator": "dot",
245
- "separatorFg": "brightBlack",
246
- "separatorBg": "default",
247
- "iconMode": "text",
248
- "minimalist": false,
249
- "terminal": {
250
- "widthMode": "full",
251
- "colorLevel": "ansi256"
252
- },
253
- "extensionStatusRow": {
254
- "hiddenKeys": [
255
- "mcp",
256
- "pi-automode",
257
- "pi-lens-lsp",
258
- "ponytail",
259
- "remote-pi:peer-active",
260
- "remote-pi:relay",
261
- "remote-pi:session",
262
- "subagents"
263
- ],
264
- "knownKeys": [
265
- "mcp",
266
- "pi-automode",
267
- "pi-lens-lsp",
268
- "ponytail",
269
- "remote-pi:peer-active",
270
- "remote-pi:relay",
271
- "remote-pi:session",
272
- "subagents"
273
- ]
274
- }
275
- }
@@ -1,70 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project are documented in this file.
4
-
5
- ## [Unreleased]
6
-
7
- ## [1.16.0] - 2026-09-07
8
-
9
- ## New features
10
-
11
- - **[Bounded existing-file authorization](docs/defaults.md#soft_deny)** — Allow user authorization for pre-existing local-file changes that names task, worktree, path scope, and allowed operation. (#32)
12
-
13
- ## Bug fixes
14
-
15
- - **OpenCode classifier routing** — Add OpenCode session headers to every classifier completion path. Preserve Pi's header precedence and exact host matching. (#35)
16
- - **OMP 18 project trust compatibility** — Treat runtimes without `isProjectTrusted()` as untrusted. Prevent startup and configuration commands from throwing. (#34)
17
-
18
- ## [1.15.0] - 2026-08-28
19
-
20
- ## Bug fixes
21
-
22
- - **OMP 18 classifier compatibility** — Support OMP 18 model registries that lack `complete()` and `getProvider()`. Load the legacy completion API only for these registries. Keep current Pi on its runtime registry path so extension-registered providers remain available. Thanks, @NarryG! (#29)
23
-
24
- ## [1.14.0] - 2026-08-27
25
-
26
- ## Bug fixes
27
-
28
- - **Classifier stream timeout** — Apply `classifierTimeoutMs` to the full response stream. Provider behavior cannot keep classifier calls pending after the deadline. Parent cancellation remains active. Reject values above the Node.js timer limit. (#30)
29
- - **OS temp-directory deletes** — Stop hard-denying recursive-delete subtrees under `os.tmpdir()` and `/tmp`. On macOS these resolve into `/private/tmp` and `/private/var/folders`, which matched the `/private` system root and blocked every temp cleanup. Deleting a temp root itself stays blocked. (#31)
30
- - **Validated temp-root declarations** — Derive the exempt temp roots only from launcher-declared values that stay safe: reject values such as `/`, empty strings, aliases of `HOME`, `/`, or a system root, and ancestors of `HOME`. Without validation, a malformed `TMPDIR` could disable deterministic denials for protected targets, and a broad `permissions.allow` rule could then allow the action without classifier review. Recompute candidates when the effective tmpdir changes. (#31)
31
-
32
- ## [1.13.0] - 2026-08-25
33
-
34
- ## New features
35
-
36
- - **Bash AST analysis** — Replace handwritten shell parsing with `unbash`. Permission and hard-deny checks now inspect command structure, nested commands, wrappers, redirects, and malformed input. Bash allow rules require complete structural coverage and fail closed when analysis is unsafe. (#26)
37
- - **Extension-owned global config** — Store global settings at `~/.pi/agent/extensions/pi-automode/config.json`. Migrate the legacy file automatically, preserve a safe fallback after migration errors, and report conflicts through notifications and diagnostics. (#27)
38
-
39
- ## Bug fixes
40
-
41
- - **Conservative permission rules** — Malformed deny and ask patterns block actions. Malformed patterns do not expand allow rules. Permission checks examine each Bash subcommand and normalize whitespace. Path checks resolve symlinks and normalize `file://` and Windows paths. (#22)
42
- - **Recursive deletion hard-deny** — Detect uppercase flags and GNU abbreviations for recursive `rm`, including commands behind `command`, `exec`, and `env`. Parse the `--` delimiter and shell tilde expansion. Protect Linux and macOS system roots without blocking active-home subdirectories, `/opt`, or `/srv`. (#23)
43
- - **Global Pi safety-control paths** — Hard-deny direct writes and edits to `~/.pi/agent/extensions/`, `~/.pi/agent/settings.json`, and `~/.pi/agent/settings/`. Resolve case variants and symlink targets before matching. (#24)
44
- - **Case-insensitive protected paths** — Match protected paths without case distinctions and normalize Unicode spellings. This closes path bypasses on case-insensitive filesystems. (#25)
45
-
46
- ## [1.12.0] - 2026-08-23
47
-
48
- ## New features
49
-
50
- - **Deterministic permission allows** — Add user-owned `permissions.allow` patterns that skip classifier review after deterministic checks pass. Accepted ask rules still require classifier review. Thank you, @sergeykonkin! (#14)
51
- - **Configurable classifier request timeout** — new `autoMode.classifierTimeoutMs` setting. The default is 20000 ms. The timeout applies to each classifier request. The fast stage and the detailed stage each have their own budget. A request that exceeds the timeout is aborted. Auto mode fails closed and blocks the action.
52
- - **Read-only agent diagnostics** — Add `automode_inspect` tool for status, configuration, defaults, and recent denial metadata. Thank you, @blalor! (#11)
53
-
54
- ## Bug fixes
55
-
56
- - **Reject invalid config values** — Invalid boolean and log config values (e.g. `enabled: 0`, `log.enabled: 1`) are now rejected at merge time instead of being applied with diagnostics only. (#20)
57
- - **Preserve defaults for malformed rule lists** — A malformed `hard_deny` entry like `[42]` no longer strips all built-in hard-deny rules. Malformed entries are rejected and defaults preserved conservatively. (#21)
58
- - **Runtime classifier providers** — Dispatch classifier calls through Pi's runtime model registry so providers registered with `pi.registerProvider()` work immediately. Preserve normalized reasoning and header-only authentication on the temporary simple-completion bridge. (#15)
59
- - **Bounded wildcard matching** — Replace regex-based permission and denied-path globs with a linear-time matcher. Reject oversized patterns and fail closed for oversized runtime inputs. (#19)
60
- - **Complete classifier action input** — Send the exact current tool input to both classifier stages in a dedicated message. Block the action if it cannot fit without truncation. (#17)
61
- - **Path policy normalization** — Use Pi-compatible resolution for file-tool paths, including file URLs, `@` and tilde aliases, and read fallback names. Enforce denied paths across omitted and recursive search scopes and both sides of symlink aliases. (#18)
62
- - **Project config trust gate** — Ignore `.pi/automode.local.json` and `.pi/automode.json` until Pi trusts the project. Apply the trust gate during startup and config reloads. (#16)
63
- - **In-memory observability logs** — Write logs to an extension-owned directory (`~/.pi/agent/extensions/pi-automode/logs/`) instead of the launching project directory. Thanks, @HerbertGao! (#13)
64
-
65
- [Unreleased]: https://github.com/czottmann/pi-automode/compare/v1.16.0...HEAD
66
- [1.16.0]: https://github.com/czottmann/pi-automode/compare/v1.15.0...v1.16.0
67
- [1.15.0]: https://github.com/czottmann/pi-automode/compare/v1.14.0...v1.15.0
68
- [1.14.0]: https://github.com/czottmann/pi-automode/compare/v1.13.0...v1.14.0
69
- [1.13.0]: https://github.com/czottmann/pi-automode/compare/v1.12.0...v1.13.0
70
- [1.12.0]: https://github.com/czottmann/pi-automode/compare/v1.11.0...v1.12.0
@@ -1,21 +0,0 @@
1
- # MIT License
2
-
3
- Copyright (c) 2026 Carlo Zottmann
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.