@herbertgao/pi-extensions 2026.9.6 → 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 +3 -8
- package/THIRD_PARTY_NOTICES.md +0 -4
- 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 +5 -11
- 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",
|
|
@@ -46,16 +46,15 @@
|
|
|
46
46
|
"@herbertgao/sol-pi": "0.3.0",
|
|
47
47
|
"@juicesharp/rpiv-ask-user-question": "2.10.1",
|
|
48
48
|
"@juicesharp/rpiv-config": "^2.10.1",
|
|
49
|
-
"@luxusai/pi-hindsight": "0.12.0",
|
|
50
49
|
"@modelcontextprotocol/client": "2.0.0",
|
|
51
50
|
"@modelcontextprotocol/core": "2.0.0",
|
|
52
51
|
"@modelcontextprotocol/ext-apps": "^1.2.2",
|
|
53
52
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
54
53
|
"@mozilla/readability": "^0.6.0",
|
|
55
54
|
"@napi-rs/keyring": "^1.3.0",
|
|
56
|
-
"@narumitw/pi-btw": "0.
|
|
55
|
+
"@narumitw/pi-btw": "0.59.0",
|
|
57
56
|
"@narumitw/pi-caffeinate": "0.49.7",
|
|
58
|
-
"@narumitw/pi-tui-kit": "^0.
|
|
57
|
+
"@narumitw/pi-tui-kit": "^0.64.0",
|
|
59
58
|
"@noble/ed25519": "^3.1.0",
|
|
60
59
|
"@pi-plugins/fast-mode": "0.1.12",
|
|
61
60
|
"@shikijs/cli": "^4.0.2",
|
|
@@ -67,7 +66,6 @@
|
|
|
67
66
|
"@tifan/pi-preferred-thinking": "1.0.2",
|
|
68
67
|
"@tifan/pi-recap": "0.4.7",
|
|
69
68
|
"@tifan/pi-rename": "0.6.0",
|
|
70
|
-
"@vectorize-io/hindsight-client": "^0.9.0",
|
|
71
69
|
"ajv": "^8.17.1",
|
|
72
70
|
"ajv-formats": "^3.0.1",
|
|
73
71
|
"chalk": "^6.0.0",
|
|
@@ -76,10 +74,9 @@
|
|
|
76
74
|
"dbus-native": "^0.15.2",
|
|
77
75
|
"defuddle": "0.19.3",
|
|
78
76
|
"gpt-tokenizer": "^3.4.0",
|
|
79
|
-
"grok-mermaid": "0.2.
|
|
77
|
+
"grok-mermaid": "0.2.3",
|
|
80
78
|
"jiti": "^2.7.0",
|
|
81
79
|
"js-yaml": "^5.2.2",
|
|
82
|
-
"jsonc-parser": "^3.3.1",
|
|
83
80
|
"linkedom": "^0.16.0",
|
|
84
81
|
"minimatch": "^10.2.6",
|
|
85
82
|
"nanoid": "^5.0.0",
|
|
@@ -87,7 +84,7 @@
|
|
|
87
84
|
"p-limit": "^6.1.0",
|
|
88
85
|
"pi-antigravity": "0.7.2",
|
|
89
86
|
"pi-footer": "0.5.1",
|
|
90
|
-
"pi-lens": "4.
|
|
87
|
+
"pi-lens": "4.2.0",
|
|
91
88
|
"pi-mcp-adapter": "2.34.0",
|
|
92
89
|
"pi-web-access": "0.29.0",
|
|
93
90
|
"pidusage": "^4.0.1",
|
|
@@ -117,7 +114,6 @@
|
|
|
117
114
|
"@herbertgao/resume-from",
|
|
118
115
|
"@herbertgao/sol-pi",
|
|
119
116
|
"@juicesharp/rpiv-ask-user-question",
|
|
120
|
-
"@luxusai/pi-hindsight",
|
|
121
117
|
"@narumitw/pi-btw",
|
|
122
118
|
"@narumitw/pi-caffeinate",
|
|
123
119
|
"@pi-plugins/fast-mode",
|
|
@@ -155,7 +151,6 @@
|
|
|
155
151
|
"./node_modules/@herbertgao/pi-subagents/src/index.ts",
|
|
156
152
|
"./node_modules/@juicesharp/rpiv-ask-user-question/index.ts",
|
|
157
153
|
"./node_modules/@herbertgao/pi-bark/src/index.ts",
|
|
158
|
-
"./node_modules/@luxusai/pi-hindsight/extensions/index.ts",
|
|
159
154
|
"./node_modules/@narumitw/pi-btw/dist/index.ts",
|
|
160
155
|
"./node_modules/@narumitw/pi-caffeinate/dist/index.ts",
|
|
161
156
|
"./node_modules/@pi-plugins/fast-mode/dist/index.mjs",
|
|
@@ -172,7 +167,6 @@
|
|
|
172
167
|
],
|
|
173
168
|
"skills": [
|
|
174
169
|
"./node_modules/@dietrichgebert/ponytail/skills",
|
|
175
|
-
"./node_modules/@luxusai/pi-hindsight/skills",
|
|
176
170
|
"./node_modules/pi-mcp-adapter/skills",
|
|
177
171
|
"./node_modules/pi-lens/skills"
|
|
178
172
|
]
|