@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.
- package/README.md +5 -22
- package/THIRD_PARTY_NOTICES.md +0 -4
- package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +1 -1
- package/node_modules/@herbertgao/sol-pi/package.json +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +0 -5
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +3 -1
- package/node_modules/@narumitw/pi-btw/README.md +2 -0
- package/node_modules/@narumitw/pi-btw/dist/index.ts +284 -365
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
- package/node_modules/@narumitw/pi-btw/package.json +52 -53
- package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +494 -547
- package/node_modules/@narumitw/pi-btw/src/btw.ts +814 -856
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +673 -674
- package/node_modules/@narumitw/pi-btw/src/keybindings.ts +228 -270
- package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +309 -318
- package/node_modules/@narumitw/pi-btw/src/menu.ts +416 -454
- package/node_modules/@narumitw/pi-btw/src/settings.ts +203 -219
- package/node_modules/@narumitw/pi-btw/src/side-thread.ts +173 -201
- package/node_modules/@narumitw/pi-btw/src/text.ts +21 -23
- package/node_modules/@narumitw/pi-btw/src/transcript-markdown.ts +65 -0
- package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +611 -662
- package/node_modules/pi-lens/CHANGELOG.md +239 -0
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +3 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +30 -4
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +2 -0
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +26 -0
- package/node_modules/pi-lens/dist/clients/biome-client.js +1 -1
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +403 -35
- package/node_modules/pi-lens/dist/clients/bootstrap.js +6 -1
- package/node_modules/pi-lens/dist/clients/cascade-format.js +200 -4
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +10 -2
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +16 -1
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +12 -1
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +65 -0
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +28 -0
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +9 -2
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +222 -0
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +389 -13
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +175 -25
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +62 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +21 -41
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +6 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +7 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -12
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +2 -21
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +4 -1
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +1 -0
- package/node_modules/pi-lens/dist/clients/effective-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +26 -1
- package/node_modules/pi-lens/dist/clients/file-role.js +21 -21
- package/node_modules/pi-lens/dist/clients/file-utils.js +156 -10
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +56 -9
- package/node_modules/pi-lens/dist/clients/format-service.js +39 -21
- package/node_modules/pi-lens/dist/clients/formatters.js +60 -13
- package/node_modules/pi-lens/dist/clients/generation-guard.js +2 -2
- package/node_modules/pi-lens/dist/clients/git-guard.js +11 -3
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +78 -8
- package/node_modules/pi-lens/dist/clients/installer/index.js +333 -114
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +7 -0
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +20 -10
- package/node_modules/pi-lens/dist/clients/language-profile.js +23 -1
- package/node_modules/pi-lens/dist/clients/language-registry.js +5 -1
- package/node_modules/pi-lens/dist/clients/latency-logger.js +4 -1
- package/node_modules/pi-lens/dist/clients/lens-engine.js +12 -3
- package/node_modules/pi-lens/dist/clients/lens-events.js +2 -1
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +79 -0
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/client.js +25 -21
- package/node_modules/pi-lens/dist/clients/lsp/config.js +2 -2
- package/node_modules/pi-lens/dist/clients/lsp/index.js +7 -0
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +16 -4
- package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -2
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +5 -3
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +12 -8
- package/node_modules/pi-lens/dist/clients/mcp/session.js +36 -4
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +24 -7
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +40 -2
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +23 -3
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +110 -15
- package/node_modules/pi-lens/dist/clients/path-utils.js +123 -3
- package/node_modules/pi-lens/dist/clients/performance-report.js +5 -1
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/pipeline.js +74 -5
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +37 -5
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +145 -18
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +59 -3
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +45 -2
- package/node_modules/pi-lens/dist/clients/read-guard.js +70 -11
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +147 -9
- package/node_modules/pi-lens/dist/clients/ruff-client.js +1 -1
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +33 -5
- package/node_modules/pi-lens/dist/clients/runtime-context.js +6 -2
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +77 -7
- package/node_modules/pi-lens/dist/clients/runtime-session.js +21 -2
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +43 -12
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +330 -85
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -17
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +258 -5
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +6 -0
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +50 -5
- package/node_modules/pi-lens/dist/clients/sg-runner.js +23 -11
- package/node_modules/pi-lens/dist/clients/sgconfig.js +79 -2
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +6 -41
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +43 -0
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +423 -0
- package/node_modules/pi-lens/dist/clients/tool-config.js +50 -0
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +47 -76
- package/node_modules/pi-lens/dist/clients/tool-policy.js +163 -7
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +120 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +127 -189
- package/node_modules/pi-lens/dist/clients/widget-state.js +98 -0
- package/node_modules/pi-lens/dist/clients/word-index.js +5 -2
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +7 -0
- package/node_modules/pi-lens/dist/index.js +27416 -24153
- package/node_modules/pi-lens/dist/mcp/server.js +5 -2
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +7 -1
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +168 -53
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +244 -72
- package/node_modules/pi-lens/docs/audit1.md +5 -5
- package/node_modules/pi-lens/docs/dependencies.md +11 -0
- package/node_modules/pi-lens/docs/dispositions.md +52 -0
- package/node_modules/pi-lens/docs/environment-variables.md +2 -2
- package/node_modules/pi-lens/docs/features.md +4 -4
- package/node_modules/pi-lens/docs/globalconfig.md +3 -1
- package/node_modules/pi-lens/docs/language-coverage.md +1 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +53 -94
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +43 -38
- package/node_modules/pi-lens/docs/pi-lens-retro.md +97 -0
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +53 -66
- package/node_modules/pi-lens/docs/release-qa-baseline.md +22 -0
- package/node_modules/pi-lens/docs/settings.md +7 -4
- package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +1 -1
- package/node_modules/pi-lens/docs/usage.md +2 -0
- package/node_modules/pi-lens/package.json +1 -1
- package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +24 -12
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +40 -0
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +15 -0
- package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +7 -0
- package/package.json +6 -17
- package/examples/pi-footer.json +0 -275
- package/node_modules/@czottmann/pi-automode/CHANGELOG.md +0 -70
- package/node_modules/@czottmann/pi-automode/LICENSE.md +0 -21
- package/node_modules/@czottmann/pi-automode/README.md +0 -215
- package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +0 -39
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +0 -46
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +0 -60
- package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +0 -6
- package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +0 -428
- package/node_modules/@czottmann/pi-automode/docs/configuration.md +0 -171
- package/node_modules/@czottmann/pi-automode/docs/defaults.md +0 -178
- package/node_modules/@czottmann/pi-automode/docs/diagnostics.md +0 -90
- package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +0 -160
- package/node_modules/@czottmann/pi-automode/examples/automode.local.json +0 -44
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +0 -692
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +0 -852
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +0 -904
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +0 -228
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +0 -954
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +0 -429
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/log.ts +0 -173
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model-selector.ts +0 -113
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model.ts +0 -13
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +0 -297
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +0 -623
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/state.ts +0 -102
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/transcript.ts +0 -236
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/types.ts +0 -205
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/utils.ts +0 -54
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +0 -26
- package/node_modules/@czottmann/pi-automode/package.json +0 -61
- package/node_modules/@czottmann/pi-automode/skills/automode-diagnostics/SKILL.md +0 -63
- package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +0 -376
- package/node_modules/@luxusai/pi-hindsight/README.md +0 -92
- package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +0 -56
- package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +0 -169
- package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +0 -107
- package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +0 -89
- package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +0 -189
- package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
- package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
- package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +0 -54
- package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +0 -75
- package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +0 -300
- package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +0 -158
- package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +0 -164
- package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +0 -139
- package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +0 -74
- package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +0 -261
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +0 -151
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +0 -18
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +0 -46
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +0 -383
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +0 -240
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +0 -176
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +0 -178
- package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +0 -41
- package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +0 -386
- package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +0 -39
- package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +0 -34
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +0 -140
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +0 -61
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +0 -925
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +0 -247
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +0 -547
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +0 -480
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +0 -182
- package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +0 -86
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +0 -1010
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +0 -175
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +0 -425
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +0 -210
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +0 -817
- package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +0 -25
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +0 -319
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +0 -196
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +0 -189
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +0 -65
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +0 -260
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +0 -244
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +0 -59
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +0 -82
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +0 -45
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +0 -331
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +0 -354
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +0 -66
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +0 -132
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +0 -228
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +0 -74
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +0 -16
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +0 -648
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +0 -105
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +0 -68
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +0 -71
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +0 -13
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +0 -162
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +0 -131
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +0 -104
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +0 -37
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +0 -893
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +0 -35
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +0 -177
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +0 -7
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +0 -21
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +0 -112
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +0 -111
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +0 -214
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +0 -70
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +0 -392
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +0 -45
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +0 -9
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +0 -860
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +0 -105
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +0 -189
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +0 -299
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +0 -201
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +0 -47
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +0 -239
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +0 -50
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +0 -259
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +0 -77
- package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +0 -534
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +0 -319
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +0 -325
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +0 -42
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +0 -244
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +0 -56
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +0 -50
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +0 -167
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +0 -207
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +0 -120
- package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +0 -8
- package/node_modules/@luxusai/pi-hindsight/package.json +0 -118
- 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
|
-
#
|
|
4
|
-
#
|
|
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:
|
|
7
|
+
severity: error
|
|
10
8
|
category: security
|
|
11
9
|
defect_class: injection
|
|
12
|
-
inline_tier:
|
|
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.
|
|
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.
|
|
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.
|
|
55
|
+
"@narumitw/pi-btw": "0.59.0",
|
|
59
56
|
"@narumitw/pi-caffeinate": "0.49.7",
|
|
60
|
-
"@narumitw/pi-tui-kit": "^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.
|
|
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.
|
|
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
|
]
|
package/examples/pi-footer.json
DELETED
|
@@ -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.
|