pi-lens 3.8.68 → 3.8.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +114 -0
- package/README.md +53 -34
- package/dist/clients/agent-nudge.js +262 -0
- package/dist/clients/biome-client.js +2 -2
- package/dist/clients/bootstrap.js +3 -1
- package/dist/clients/bus-events-logger.js +51 -0
- package/dist/clients/bus-publish.js +153 -0
- package/dist/clients/code-quality-warnings.js +27 -0
- package/dist/clients/dead-code-client.js +5 -23
- package/dist/clients/diagnostic-logger.js +2 -2
- package/dist/clients/diagnostics-publish.js +216 -0
- package/dist/clients/dispatch/auxiliary-lsp.js +62 -6
- package/dist/clients/dispatch/dispatcher.js +2 -0
- package/dist/clients/dispatch/facts/function-facts.js +83 -0
- package/dist/clients/dispatch/integration.js +153 -2
- package/dist/clients/dispatch/rules/async-noise.js +1 -1
- package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +1 -1
- package/dist/clients/dispatch/rules/cors-wildcard.js +1 -1
- package/dist/clients/dispatch/rules/error-obscuring.js +2 -1
- package/dist/clients/dispatch/rules/error-swallowing.js +2 -1
- package/dist/clients/dispatch/rules/framework-call-noise.js +67 -0
- package/dist/clients/dispatch/rules/high-complexity.js +12 -1
- package/dist/clients/dispatch/rules/high-fan-out.js +14 -3
- package/dist/clients/dispatch/rules/high-import-coupling.js +1 -1
- package/dist/clients/dispatch/rules/missing-error-propagation.js +1 -1
- package/dist/clients/dispatch/rules/no-commented-credentials.js +1 -1
- package/dist/clients/dispatch/rules/pass-through-wrappers.js +1 -1
- package/dist/clients/dispatch/rules/placeholder-comments.js +1 -1
- package/dist/clients/dispatch/rules/unsafe-boundary.js +1 -1
- package/dist/clients/dispatch/runners/ast-grep-napi.js +133 -31
- package/dist/clients/dispatch/runners/lsp.js +22 -6
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +68 -19
- package/dist/clients/file-utils.js +20 -7
- package/dist/clients/gitleaks-client.js +40 -5
- package/dist/clients/installer/index.js +155 -7
- package/dist/clients/instance-reaper.js +343 -18
- package/dist/clients/instance-registry.js +71 -2
- package/dist/clients/jscpd-client.js +2 -2
- package/dist/clients/knip-client.js +35 -38
- package/dist/clients/language-profile.js +7 -11
- package/dist/clients/lens-config.js +17 -0
- package/dist/clients/lens-engine.js +56 -10
- package/dist/clients/log-cleanup.js +61 -19
- package/dist/clients/lsp/cascade-tier.js +266 -0
- package/dist/clients/lsp/client.js +57 -8
- package/dist/clients/lsp/config.js +27 -1
- package/dist/clients/lsp/index.js +550 -59
- package/dist/clients/lsp/server-strategies.js +19 -0
- package/dist/clients/lsp/server.js +174 -32
- package/dist/clients/lsp-budget.js +148 -0
- package/dist/clients/mcp/analyze.js +110 -1
- package/dist/clients/mcp/session.js +1 -0
- package/dist/clients/middle-man-analysis.js +260 -0
- package/dist/clients/module-report.js +333 -26
- package/dist/clients/ndjson-logger.js +24 -0
- package/dist/clients/opengrep-client.js +217 -0
- package/dist/clients/path-utils.js +65 -0
- package/dist/clients/persist-debounce.js +63 -0
- package/dist/clients/pipeline.js +83 -3
- package/dist/clients/project-diagnostics/extractors.js +50 -4
- package/dist/clients/project-diagnostics/fresh-fetch.js +275 -0
- package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +40 -0
- package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +46 -0
- package/dist/clients/project-snapshot.js +7 -2
- package/dist/clients/quiet-window.js +223 -0
- package/dist/clients/read-expansion.js +2 -3
- package/dist/clients/read-guard-tool-lines.js +10 -0
- package/dist/clients/recent-touches.js +233 -0
- package/dist/clients/resource-sampler.js +254 -0
- package/dist/clients/review-graph/builder.js +265 -11
- package/dist/clients/review-graph/symbol-id.js +57 -0
- package/dist/clients/runtime-agent-end.js +51 -1
- package/dist/clients/runtime-coordinator.js +21 -0
- package/dist/clients/runtime-session.js +106 -47
- package/dist/clients/runtime-tool-result.js +46 -0
- package/dist/clients/runtime-turn.js +53 -11
- package/dist/clients/safe-spawn.js +48 -2
- package/dist/clients/sgconfig.js +230 -52
- package/dist/clients/source-filter.js +56 -34
- package/dist/clients/source-walker.js +66 -0
- package/dist/clients/startup-scan.js +37 -42
- package/dist/clients/subagent-mode.js +54 -20
- package/dist/clients/symbol-containment.js +24 -0
- package/dist/clients/test-runner-client.js +544 -29
- package/dist/clients/tree-sitter-symbol-extractor.js +115 -0
- package/dist/clients/tui-fit.js +54 -0
- package/dist/clients/turn-summary-render.js +72 -0
- package/dist/clients/turn-summary.js +132 -0
- package/dist/clients/widget-state.js +88 -31
- package/dist/clients/word-index.js +296 -1
- package/dist/clients/write-ordering-guard.js +58 -0
- package/dist/clients/zizmor-config.js +27 -0
- package/dist/index.js +20060 -14142
- package/dist/mcp/build-staleness.js +123 -0
- package/dist/mcp/server.js +470 -60
- package/dist/tools/activate-tools.js +72 -0
- package/dist/tools/ast-dump.js +2 -8
- package/dist/tools/ast-grep-search.js +1 -1
- package/dist/tools/lens-diagnostics.js +317 -27
- package/dist/tools/lsp-diagnostics.js +617 -64
- package/dist/tools/module-report.js +32 -16
- package/dist/tools/symbol-search.js +110 -0
- package/docs/agent-tooling-improvement-plan.md +660 -0
- package/docs/agent-tools.md +129 -0
- package/docs/ast-grep_rules_catalog.md +564 -0
- package/docs/astplayground.md +178 -0
- package/docs/audit1.md +177 -0
- package/docs/custom-rules.md +231 -0
- package/docs/dependencies.md +54 -0
- package/docs/env_variables.md +10 -0
- package/docs/environment-variables.md +67 -0
- package/docs/fable.md +139 -0
- package/docs/features.md +338 -0
- package/docs/globalconfig.md +79 -0
- package/docs/inspiration_gograph.md +601 -0
- package/docs/inspiration_neovim.md +1795 -0
- package/docs/inspiration_neovim2.md +402 -0
- package/docs/inspiration_tree_sitter_rules.md +369 -0
- package/docs/inspiration_tree_sitter_rules_investigation.md +328 -0
- package/docs/inspiration_tree_sitter_rules_round2.md +470 -0
- package/docs/language-coverage.md +48 -0
- package/docs/lsp-bridge-analysis.md +444 -0
- package/docs/lsp-capability-matrix.md +157 -0
- package/docs/lsp-latency-benchmark.md +169 -0
- package/docs/mcp.md +438 -0
- package/docs/module-report-read-symbol.md +258 -0
- package/docs/newinspiration.md +338 -0
- package/docs/servercapabilities.md +118 -0
- package/docs/subagent-compat.md +281 -0
- package/docs/tools.md +13 -0
- package/docs/tools_improvement2.md +345 -0
- package/docs/tree-sitter_rules_catalog.md +296 -0
- package/docs/usage.md +129 -0
- package/docs/word-index.md +150 -0
- package/grammars/tree-sitter-c.wasm +0 -0
- package/grammars/tree-sitter-c_sharp.wasm +0 -0
- package/grammars/tree-sitter-cpp.wasm +0 -0
- package/grammars/tree-sitter-dart.wasm +0 -0
- package/grammars/tree-sitter-elixir.wasm +0 -0
- package/grammars/tree-sitter-kotlin.wasm +0 -0
- package/grammars/tree-sitter-lua.wasm +0 -0
- package/grammars/tree-sitter-ocaml.wasm +0 -0
- package/grammars/tree-sitter-php.wasm +0 -0
- package/grammars/tree-sitter-ruby.wasm +0 -0
- package/grammars/tree-sitter-swift.wasm +0 -0
- package/grammars/tree-sitter-toml.wasm +0 -0
- package/grammars/tree-sitter-vue.wasm +0 -0
- package/grammars/tree-sitter-zig.wasm +0 -0
- package/package.json +5 -1
- package/rules/ast-grep-rules/rule-tests/hardcoded-url-js-test.yml +1 -0
- package/rules/ast-grep-rules/rule-tests/no-typeof-undefined-js-test.yml +8 -0
- package/rules/ast-grep-rules/rule-tests/no-typeof-undefined-test.yml +8 -0
- package/rules/ast-grep-rules/rules/array-callback-return-js.yml +1 -1
- package/rules/ast-grep-rules/rules/hardcoded-url-js.yml +1 -1
- package/rules/ast-grep-rules/rules/jwt-no-verify-js.yml +1 -1
- package/rules/ast-grep-rules/rules/no-extra-boolean-cast-js.yml +1 -1
- package/rules/ast-grep-rules/rules/no-implied-eval-js.yml +1 -1
- package/rules/ast-grep-rules/rules/no-javascript-url-js.yml +1 -1
- package/rules/ast-grep-rules/rules/no-sql-in-code-js.yml +1 -1
- package/rules/ast-grep-rules/rules/no-typeof-undefined-js.yml +9 -7
- package/rules/ast-grep-rules/rules/no-typeof-undefined.yml +9 -7
- package/rules/ast-grep-rules/rules/weak-rsa-key-js.yml +1 -1
- package/skills/{ast-grep → pi-lens-ast-grep}/SKILL.md +4 -2
- package/skills/{lsp-navigation → pi-lens-lsp-navigation}/SKILL.md +1 -1
- package/skills/{write-ast-grep-rule → pi-lens-write-ast-grep-rule}/SKILL.md +1 -1
- package/skills/{write-tree-sitter-rule → pi-lens-write-tree-sitter-rule}/SKILL.md +1 -1
- package/dist/clients/production-readiness.js +0 -493
- package/dist/clients/tree-sitter-fixer.js +0 -127
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
# inspiration_tree_sitter_rules_round2.md — second-pass rule-repo research (2026-06-25)
|
|
2
|
+
|
|
3
|
+
> Status: **research notes, untracked** (matches the `docs/inspiration_*` gitignore pattern under `.gitignore:50`). Companion to `docs/inspiration_tree_sitter_rules.md` and `docs/inspiration_tree_sitter_rules_investigation.md`.
|
|
4
|
+
> Method: every count and rule-shape claim was verified against the actual repo state via `curl`/`aoiowebmap`/`aoiowebfetch` against the live raw GitHub files (not READMEs or third-party summaries). Where a claim couldn't be verified, it's marked **[unverified]**.
|
|
5
|
+
> Headline finding: **most rule repositories in this round are *secret-scanner* rule collections, not AST-pattern rule collections.** pi-lens already has `gitleaks` + `trivy` + the ast-grep `*-hardcoded-secret-*` rules covering secret detection. Most of these repos don't add a new class of detection.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## TL;DR — ranked (revised after second pass)
|
|
10
|
+
|
|
11
|
+
| # | Source | Stars | Rules | Format | Verdict |
|
|
12
|
+
|---|---|---|---|---|---|
|
|
13
|
+
| 1 | **`RealHarshThakur/ast-grep-go`** | 2 | 11 Go idioms | ast-grep YAML | **PORT** — clean detector-only Go rules |
|
|
14
|
+
| 2 | **`analysis-tools-dev/static-analysis`** | 14,644 | index, not a rule source | meta | **REFERENCE** — points to other tools (semgrep, oxlint, ruff, etc.) |
|
|
15
|
+
| 3 | **`HerringtonDarkholme/awesome-tree-sitter`** | 20 | index | meta | **REFERENCE** — only 1 README entry, sibling of drom/awesome-tree-sitter |
|
|
16
|
+
| 4 | **`mongodb/kingfisher`** | 1,143 | **954** secret rules | non-ast-grep YAML (entropy + validation) | **PATTERN SOURCE** — not direct port; the *shape* of multi-provider coverage is the model |
|
|
17
|
+
| 5 | **`trufflesecurity/trufflehog`** | 26,870 | **800+** secret rules | non-ast-grep YAML/Go (Go-based with YAML examples) | **NOT A PORT** — already covered by `gitleaks` runner |
|
|
18
|
+
| 6 | **`zricethezav/gitleaks`** | 27,858 | **100+** secret rules | TOML (`gitleaks.toml`) | **NOT A PORT** — already a runner |
|
|
19
|
+
| 7 | **`Kitware/CMake`** (sgconfig.yml) | n/a | 8 Cpp rules | ast-grep YAML | **NOT A PORT** — all CMake-internal (`cm*` prefix) |
|
|
20
|
+
| 8 | **`trailofbits/buttercup`** | 1,609 | n/a (CRS, not a rule collection) | Go + LLM | **SKIP** — AGPL license, AI-driven vuln finding, not a rule format |
|
|
21
|
+
| 9 | **`PurCL/RepoAudit`** | 409 | n/a | Python tree-sitter | **NOT A PORT** — rules in Python code, LLM-augmented dataflow |
|
|
22
|
+
| 10 | **`noperator/slice`** | 203 | 1 .ql query (UAF) | CodeQL + tree-sitter | **NOT A PORT** — CodeQL is its own language |
|
|
23
|
+
| 11 | **`x0mmd/oh-my-open-pentest`** (ast-grep skill) | small | pattern reference docs | skill markdown | **REFERENCE** — `patterns.md` + `yaml-rules.md` are good SKILL.md fodder |
|
|
24
|
+
| 12 | **`mauromedda/agent-toolkit`** (ast-grep skill) | small | pattern reference docs | SKILL.md | **REFERENCE** — same as #11, more terse |
|
|
25
|
+
| 13 | **`dustinspecker/awesome-eslint`** | 4,731 | index of ESLint plugins | meta | **SKIP** — different rule format (ESLint JS rules) |
|
|
26
|
+
|
|
27
|
+
**Net new rule sources for pi-lens: 1** (`RealHarshThakur/ast-grep-go`). The other "interesting" finds (Kingfisher, TruffleHog, Gitleaks) are secret scanners pi-lens already covers via `gitleaks` + `trivy` + ast-grep `*-hardcoded-secret-*` rules.
|
|
28
|
+
|
|
29
|
+
The **pattern templates** from Kingfisher's `AGENTS.md` are real value: that file documents rule-writing conventions (anchor patterns, entropy constraints, checksum validation) that are not specific to secret detection and could inform future ast-grep rule design in pi-lens.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 1. `RealHarshThakur/ast-grep-go` — 11 Go idiom rules ★★★★★ PORT
|
|
34
|
+
|
|
35
|
+
**Source:** https://github.com/RealHarshThakur/ast-grep-go
|
|
36
|
+
**Format:** ast-grep YAML (drop-in compatible with pi-lens's runner)
|
|
37
|
+
**Coverage:** 11 Go-specific idiomatic-pattern rules
|
|
38
|
+
|
|
39
|
+
### Rule list (all 11, verified by `git ls-tree`)
|
|
40
|
+
|
|
41
|
+
| # | Rule id | Severity | Pattern (simplified) |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| 1 | `loop-var-capture` | warning | `for $I := range $XS { go func() { $$_ }() }` |
|
|
44
|
+
| 2 | `defer-in-loop` | warning | defer inside loop (resource leak risk) |
|
|
45
|
+
| 3 | `nil-map-assignment` | warning | writing to `var m map[K]V` before `make()` |
|
|
46
|
+
| 4 | `string-concat-in-loop` | warning | `s += ...` inside loops |
|
|
47
|
+
| 5 | `mutex-unlock-mismatch` | warning | unbalanced `mu.Lock()`/`mu.Unlock()` |
|
|
48
|
+
| 6 | `unlock-in-loop` | warning | `mu.Unlock()` inside loop (always-unlock) |
|
|
49
|
+
| 7 | `waitgroup-done-scope` | warning | `wg.Done()` outside proper scope |
|
|
50
|
+
| 8 | `shadow-err-variable` | warning | `if err := ...; err != nil` shadows outer err |
|
|
51
|
+
| 9 | `gorm-unbounded-preload` | warning | `.Preload(...)` without `.Limit(...)` |
|
|
52
|
+
| 10 | `gorm-find-without-where` | warning | `.Find(...)` without `.Where(...)` |
|
|
53
|
+
| 11 | `gorm-n-plus-one` | warning | loop with `.First(...)` queries |
|
|
54
|
+
|
|
55
|
+
### Verdict
|
|
56
|
+
|
|
57
|
+
All 11 are **detectors only** (no `fix:`). All ast-grep-native YAML. Drop into `rules/ast-grep-rules/rules/go/` (creating the dir alongside the existing `c/`, `cpp/`, etc.).
|
|
58
|
+
|
|
59
|
+
**Cross-reference with pi-lens current state:**
|
|
60
|
+
- `rules/ast-grep-rules/coderabbit/rules/go/` ships 11 rules (all CWE-295/798/etc. security). No overlap with these 11 idiom rules.
|
|
61
|
+
- `rules/ast-grep-rules/rules/` ships zero Go-specific rules (verified with `ls rules/ast-grep-rules/rules/ | grep -i go` → empty).
|
|
62
|
+
- `gofmt` + `go vet` + `golangci-lint` are dispatch runners per AGENTS.md but cover a different niche (style + compile-time correctness, not Go-specific anti-patterns like `loop-var-capture`).
|
|
63
|
+
|
|
64
|
+
**Effort:** XS (single batch, all 11 files).
|
|
65
|
+
**Value:** Med — fills a real Go-specific idiom gap; complements `golangci-lint` rather than overlapping with it.
|
|
66
|
+
|
|
67
|
+
**Open question:** Are there test fixtures for these rules? The repo has `rules_test/01-loop-var-capture_test.go` etc. — but these are Go test files (not ast-grep's `<id>-test.yml` format). Need to re-create the behavioral fixtures in pi-lens's format (`rules/ast-grep-rules/rule-tests/<id>-test.yml`).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. `analysis-tools-dev/static-analysis` — meta-list, **includes ast-grep entry**
|
|
72
|
+
|
|
73
|
+
**Source:** https://github.com/analysis-tools-dev/static-analysis
|
|
74
|
+
**Format:** meta (catalog of 756 tools, not a rule collection)
|
|
75
|
+
**Coverage:** None directly — points to other tools
|
|
76
|
+
|
|
77
|
+
### What's useful
|
|
78
|
+
|
|
79
|
+
The `data/tools/` directory contains one YAML per tool. **`data/tools/ast-grep.yml` exists** — a fact that's relevant because it confirms the meta-list's maintainers consider ast-grep a "real" tool (not a curiosity). The file lists ast-grep's tags (c, csharp, go, java, lua, javascript, json, jsx, kotlin, python, ruby, rust, typescript, yaml — 14 languages, matching pi-lens's 14-language tree-sitter coverage) and categorizes it as `linter`.
|
|
80
|
+
|
|
81
|
+
### What's useful for inspiration
|
|
82
|
+
|
|
83
|
+
The 756-tool catalog surfaces other tools we haven't evaluated:
|
|
84
|
+
- **`oxlint`** (`oxc.yml`) — 500+ ESLint-compatible rules in Rust. Per `docs.oxc.rs`, supports plugins in JS with ESLint-compatible API. Could be worth investigating as a **rule format compatibility layer** (pi-lens's tool could read `.oxlintrc.json` configs).
|
|
85
|
+
- **`ruff`** (`ruff.yml`) — already a runner; metadata confirms
|
|
86
|
+
- **`semgrep`** (`semgrep.yml`) — already evaluated as pattern source
|
|
87
|
+
- **`deno_lint`** (`deno_lint.yml`) — 200+ rules; Rust-based, faster than ESLint
|
|
88
|
+
|
|
89
|
+
### Verdict
|
|
90
|
+
|
|
91
|
+
Not a port target. **Useful as a sanity check + future-tool-discovery feed.** When AGENTS.md mentions new tools, this is the meta-index to consult.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 3. `HerringtonDarkholme/awesome-tree-sitter` — minimal index
|
|
96
|
+
|
|
97
|
+
**Source:** https://github.com/HerringtonDarkholme/awesome-tree-sitter
|
|
98
|
+
**Format:** meta (README only, 20 stars, no rule collection)
|
|
99
|
+
**Coverage:** None directly
|
|
100
|
+
|
|
101
|
+
The README lists tools, parsers, tutorials. Notable entries we hadn't found elsewhere:
|
|
102
|
+
- **`mongodb/kingfisher`** — secret scanning via tree-sitter (see §4)
|
|
103
|
+
- **`trailofbits/buttercup`** — security-oriented parsing (see §8)
|
|
104
|
+
- **`PurCL/RepoAudit`** — repo-level auditing with tree-sitter (see §9)
|
|
105
|
+
- **`noperator/slice`** — SAST using tree-sitter queries (see §10)
|
|
106
|
+
- **`zizmorcore/zizmor`** — GitHub Actions security scanner via tree-sitter (**already in pi-lens** per AGENTS.md)
|
|
107
|
+
|
|
108
|
+
### Verdict
|
|
109
|
+
|
|
110
|
+
Not a port target. Useful as a redirect to the §4–§10 sources.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. `mongodb/kingfisher` — 954 secret rules ★★★ PATTERN SOURCE (not port)
|
|
115
|
+
|
|
116
|
+
**Source:** https://github.com/mongodb/kingfisher
|
|
117
|
+
**Stars:** 1,143 | **License:** Apache-2.0
|
|
118
|
+
**Rules:** 954 in **585 YAML files** under `crates/kingfisher-rules/data/rules/` (per GitHub API list)
|
|
119
|
+
**Format:** **NOT ast-grep** — proprietary schema with `pattern`, `min_entropy`, `pattern_requirements`, `validation`, `revocation` blocks
|
|
120
|
+
|
|
121
|
+
### What's in it (verified by sampling)
|
|
122
|
+
|
|
123
|
+
Each rule file has shape:
|
|
124
|
+
```yaml
|
|
125
|
+
rules:
|
|
126
|
+
- name: GitHub Personal Access Token - fine-grained permissions
|
|
127
|
+
id: kingfisher.github.1
|
|
128
|
+
pattern: |
|
|
129
|
+
(?x)
|
|
130
|
+
(
|
|
131
|
+
(?P<body>github_pat_[0-9][A-Za-z0-9]{21}_[A-Za-z0-9]{43})
|
|
132
|
+
(?P<checksum>[A-Za-z2-7]{8})
|
|
133
|
+
[A-Za-z0-9]{8}
|
|
134
|
+
)
|
|
135
|
+
\b
|
|
136
|
+
pattern_requirements:
|
|
137
|
+
min_digits: 2
|
|
138
|
+
min_lowercase: 2
|
|
139
|
+
checksum:
|
|
140
|
+
actual: { template: "{{ checksum }}", requires_capture: checksum }
|
|
141
|
+
expected: "{{ body | sha256_b32: 8 }}"
|
|
142
|
+
skip_if_missing: true
|
|
143
|
+
min_entropy: 3.5
|
|
144
|
+
examples: [...]
|
|
145
|
+
references: [...]
|
|
146
|
+
validation:
|
|
147
|
+
type: Http
|
|
148
|
+
content:
|
|
149
|
+
request:
|
|
150
|
+
method: GET
|
|
151
|
+
url: '{{ GITHUB_API_BASE_URL }}/user'
|
|
152
|
+
headers: { Authorization: token {{ TOKEN }} }
|
|
153
|
+
revocation:
|
|
154
|
+
type: Http
|
|
155
|
+
content:
|
|
156
|
+
request:
|
|
157
|
+
method: POST
|
|
158
|
+
url: '{{ GITHUB_API_BASE_URL }}/credentials/revoke'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Notable features Kingfisher has that **pi-lens's existing secret detection doesn't**:
|
|
162
|
+
- **Checksum validation** (e.g., GitHub PATs use a CRC32-derived base62 checksum — this can sharply reduce false positives)
|
|
163
|
+
- **HTTP live-validation** against provider APIs (validate that a detected credential is actually live before alerting)
|
|
164
|
+
- **HTTP revocation** (provider-specific endpoints to revoke a leaked credential)
|
|
165
|
+
- **954 providers covered** — way more than CodeRabbit's 48 Python rules or Gitleaks's ~100 rules
|
|
166
|
+
|
|
167
|
+
### Why NOT a direct port
|
|
168
|
+
|
|
169
|
+
The schema is incompatible with ast-grep:
|
|
170
|
+
- `pattern:` is a Rust regex (uses `regex` crate features: named captures `(?P<name>...)`, `(?:...)`, character classes), not ast-grep's `$VAR`/`$$$` metavar syntax
|
|
171
|
+
- `pattern_requirements` has no ast-grep equivalent (entropy/checksum are post-match checks)
|
|
172
|
+
- `validation` and `revocation` are HTTP request shapes, not in-tree checks
|
|
173
|
+
- **Even if you translated every rule's pattern to ast-grep**, you'd lose entropy/checksum/validation
|
|
174
|
+
|
|
175
|
+
### What's actually liftable (NOT a port, but a pattern source)
|
|
176
|
+
|
|
177
|
+
**`crates/kingfisher-rules/data/rules/AGENTS.md`** (8,186 bytes) — this is a generic rule-authoring guide. Per the file:
|
|
178
|
+
|
|
179
|
+
> ## Required Rule Shape
|
|
180
|
+
> Each rule entry should define:
|
|
181
|
+
> - `name`
|
|
182
|
+
> - `id`
|
|
183
|
+
> - `pattern`
|
|
184
|
+
> - `min_entropy` (default to 3.0)
|
|
185
|
+
> - `confidence` (default to medium)
|
|
186
|
+
> - `examples` (at least one realistic positive example)
|
|
187
|
+
|
|
188
|
+
> ## Pattern Quality Rules
|
|
189
|
+
> - Prefer specific anchors/prefixes and provider context over broad generic regex.
|
|
190
|
+
> - When the token format is generic or common-looking (for example bare 32-hex keys), prefer contextual patterns of the form: provider keyword → short flexible gap → key/secret label → short flexible gap → token.
|
|
191
|
+
> - Use `pattern_requirements` to enforce quality constraints (`min_digits`, `min_uppercase`, `min_lowercase`, `min_special_chars`, `ignore_if_contains`, `checksum`).
|
|
192
|
+
|
|
193
|
+
These conventions (specific anchors, contextual patterns, quality constraints) are applicable to **ast-grep** rule authoring too. Concrete lift: write `docs/writing-ast-grep-rules.md` for pi-lens, lifting from Kingfisher's AGENTS.md + AGENTS.md's own §3.1 conventions.
|
|
194
|
+
|
|
195
|
+
**Concrete pi-lens rule patterns I could write today** by adapting from Kingfisher (these are detector patterns that survive the schema translation):
|
|
196
|
+
- `OpenAI API key` — `pattern: sk-[A-Z0-9]{48}` (already a CodeRabbit rule)
|
|
197
|
+
- `Anthropic API key` — `pattern: sk-ant-[A-Za-z0-9_-]{32,}` (CodeRabbit has it)
|
|
198
|
+
- `AWS Access Key ID` — `pattern: AKIA[0-9A-Z]{16}` (CodeRabbit has it)
|
|
199
|
+
- **New for pi-lens**: `Hugging Face token` — `pattern: hf_[A-Za-z]{32}`
|
|
200
|
+
- **New for pi-lens**: `Replicate API token` — `pattern: r8_[A-Za-z0-9]{40}`
|
|
201
|
+
- **New for pi-lens**: `Perplexity API key` — `pattern: pplx-[A-Za-z0-9]{48}`
|
|
202
|
+
|
|
203
|
+
These are all pure regex-shaped tokens — translate 1:1 from Kingfisher to ast-grep `pattern:`. Each takes ~5 minutes. The value is **provider coverage breadth** (Kingfisher has 954, pi-lens + CodeRabbit has ~50 combined) — particularly for newer AI SaaS providers.
|
|
204
|
+
|
|
205
|
+
### Recommendation
|
|
206
|
+
|
|
207
|
+
**Open a single-batch PR** to port ~30 high-value AI SaaS provider token rules from Kingfisher into `rules/ast-grep-rules/rules/`. Source the regex patterns from `crates/kingfisher-rules/data/rules/{provider}.yml`. License: Apache-2.0 (compatible with CodeRabbit's vendored license). Attribute in the YAML header per Kingfisher's `AGENTS.md` rule-shape conventions.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 5. `trufflesecurity/trufflehog` — 800+ secret rules ★ SKIP
|
|
212
|
+
|
|
213
|
+
**Source:** https://github.com/trufflesecurity/trufflehog
|
|
214
|
+
**Stars:** 26,870 | **License:** AGPL-3.0 (NOT compatible with pi-lens's MIT/Apache-2.0 mix)
|
|
215
|
+
**Rules:** **800+ detectors**, mostly Go-based with some YAML examples
|
|
216
|
+
**Format:** Mostly Go code (`pkg/detectors/<provider>/<provider>.go`); YAML only for `examples/` and `hack/semgrep-rules/`
|
|
217
|
+
|
|
218
|
+
### Why skip
|
|
219
|
+
|
|
220
|
+
1. **License:** AGPL-3.0 is incompatible with pi-lens's vendoring model (AGENTS.md: "Vendored with the upstream commit pinned — bumping the vendor is a deliberate operation, not a `git pull`"). Mixing AGPL into a permissive-licensed extension is a license-compliance risk.
|
|
221
|
+
|
|
222
|
+
2. **Format:** Most rules are in Go (`pkg/detectors/anthropic/anthropic.go`, etc.) — not YAML. The YAML in `examples/` is illustrative, not the rule format. Porting would mean reimplementing each rule in ast-grep YAML.
|
|
223
|
+
|
|
224
|
+
3. **Already covered:** Pi-lens's existing secret detection (per AGENTS.md: "Secrets (`gitleaks` + `trivy secret` + the ast-grep `*-hardcoded-secret-*` rules) are collapsed by location into a single 🔴 blocker") covers the same surface.
|
|
225
|
+
|
|
226
|
+
### Verdict
|
|
227
|
+
|
|
228
|
+
Skip. The rule format (Go) and license (AGPL) are both blockers.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 6. `zricethezav/gitleaks` — 100+ secret rules ★ SKIP (already a runner)
|
|
233
|
+
|
|
234
|
+
**Source:** https://github.com/zricethezav/gitleaks
|
|
235
|
+
**Stars:** 27,858 | **License:** MIT
|
|
236
|
+
**Rules:** 100+ rules in `cmd/generate/config/rules/*.go` + `config/gitleaks.toml`
|
|
237
|
+
**Format:** **TOML** (`gitleaks.toml`), not YAML. Most rules are Go files (`cmd/generate/config/rules/github.go`) that compile into the binary.
|
|
238
|
+
|
|
239
|
+
### Why skip (already covered)
|
|
240
|
+
|
|
241
|
+
Pi-lens already runs `gitleaks` as a dispatch runner per AGENTS.md "gitleaks (committed secrets, #130)". The 100+ gitleaks rules are already applied on every edit. Adding them as ast-grep rules would be a duplication (and AST-aware detection is *slower* than regex for these well-formed tokens).
|
|
242
|
+
|
|
243
|
+
### What's worth lifting (similar to Kingfisher)
|
|
244
|
+
|
|
245
|
+
The gitleaks default config at `config/gitleaks.toml` contains the canonical pattern list. Worth checking if any patterns **aren't** in CodeRabbit's 184 rules. But the dispatch runner already does this; no pi-lens work needed.
|
|
246
|
+
|
|
247
|
+
### Verdict
|
|
248
|
+
|
|
249
|
+
Skip.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 7. `Kitware/CMake` — 8 Cpp ast-grep rules ★ SKIP (CMake-internal)
|
|
254
|
+
|
|
255
|
+
**Source:** https://github.com/Kitware/CMake/tree/master/Utilities/ast-grep
|
|
256
|
+
**Rules:** 8 (`cmhasliteralprefix-char.yml`, `cmhasliteralsuffix-char.yml`, `cmhasprefix-char.yml`, `cmhassuffix-char.yml`, `cmstrcat-adjacent-literals.yml`, `cmstrcat-to-char-literal.yaml`, `rm-cmdbg-includes.yml`, `rm-cmdbg-macros.yml`)
|
|
257
|
+
|
|
258
|
+
### Why skip
|
|
259
|
+
|
|
260
|
+
All 8 are CMake-internal:
|
|
261
|
+
- The `cm*` prefix = CMake's own string library (`cmStrCat`, `cmHas*`)
|
|
262
|
+
- The `rm-cmdbg-*` rules are CMake-specific (`cmDebugTools.h`, `CM_DBG` macro)
|
|
263
|
+
|
|
264
|
+
These are **not portable** to pi-lens's user base. Pi-lens users wouldn't have `cmStrCat` in their codebases.
|
|
265
|
+
|
|
266
|
+
### Verdict
|
|
267
|
+
|
|
268
|
+
Skip. Confirms the project itself uses ast-grep for internal linting — pi-lens is in good company.
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 8. `trailofbits/buttercup` — DARPA CRS ★ SKIP
|
|
273
|
+
|
|
274
|
+
**Source:** https://github.com/trailofbits/buttercup
|
|
275
|
+
**Stars:** 1,609 | **License:** AGPL-3.0
|
|
276
|
+
**Type:** Cyber Reasoning System (fuzzer + LLM patch generator) for DARPA AIxCC
|
|
277
|
+
|
|
278
|
+
### Why skip
|
|
279
|
+
|
|
280
|
+
1. **Not a rule collection.** Buttercup is a competition-grade CRS that finds new vulnerabilities via AI + fuzzing and auto-patches them. It doesn't ship a "set of YAML rules you can adopt" — it generates rules per-task.
|
|
281
|
+
2. **License:** AGPL-3.0 — incompatible with pi-lens's vendoring.
|
|
282
|
+
3. **Scope mismatch:** pi-lens is a per-edit dispatcher, not a CI-time fuzzing campaign.
|
|
283
|
+
|
|
284
|
+
### Verdict
|
|
285
|
+
|
|
286
|
+
Skip. Noted as a Tier-1 security tool to be aware of; not a pi-lens resource.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 9. `PurCL/RepoAudit` — ICML 2025 paper ★ SKIP
|
|
291
|
+
|
|
292
|
+
**Source:** https://github.com/PurCL/RepoAudit
|
|
293
|
+
**Stars:** 409 | **License:** Purdue (permissive but custom)
|
|
294
|
+
**Type:** LLM-augmented static analysis (Null Pointer Dereference / Memory Leak / Use After Free detection) — ICML 2025 paper
|
|
295
|
+
|
|
296
|
+
### Why skip
|
|
297
|
+
|
|
298
|
+
1. **Not a YAML rule collection.** Rules are in Python (`src/tstool/dfbscan_extractor/Python/Python_NPD_extractor.py` etc.).
|
|
299
|
+
2. **Requires LLM** — the detectors use LLM reasoning for validation. Pi-lens's per-edit hot path doesn't have LLM latency budget.
|
|
300
|
+
3. **Tied to specific bug classes** (NPD, MLK, UAF) — interesting research but not a drop-in pi-lens layer.
|
|
301
|
+
|
|
302
|
+
### What's useful as background
|
|
303
|
+
|
|
304
|
+
The architecture (tree-sitter parser → pattern extractors → LLM validator → SARIF output) is similar to what `axsapronov/pi-extensions` does with `code-intelligence` but using a different embedding/retrieval strategy. Worth noting but not adopting.
|
|
305
|
+
|
|
306
|
+
### Verdict
|
|
307
|
+
|
|
308
|
+
Skip.
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 10. `noperator/slice` — SAST + LLM interprocedural ★ NOT A PORT
|
|
313
|
+
|
|
314
|
+
**Source:** https://github.com/noperator/slice
|
|
315
|
+
**Stars:** 203 | **License:** MIT
|
|
316
|
+
**Type:** CodeQL + tree-sitter + LLM vulnerability scanner
|
|
317
|
+
|
|
318
|
+
### Why not a port
|
|
319
|
+
|
|
320
|
+
The actual rule format is **CodeQL** (`.ql` files, not `.yml`). There's 1 rule in `spec/uaf/query.ql`. CodeQL is a separate query language with its own engine — no ast-grep mapping.
|
|
321
|
+
|
|
322
|
+
### What's useful
|
|
323
|
+
|
|
324
|
+
The `spec/uaf/analyze.schema.json` and `spec/uaf/triage.schema.json` schemas are a template for pi-lens's own LLM-triage schema if/when we add an LLM-judged review pass (mentioned in `docs/newinspiration.md` as the `/lens-review-diff` opportunity).
|
|
325
|
+
|
|
326
|
+
### Verdict
|
|
327
|
+
|
|
328
|
+
Not a port source. Background context for future work.
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## 11. `x0mmd/oh-my-open-pentest` — ast-grep skill ★★ REFERENCE
|
|
333
|
+
|
|
334
|
+
**Source:** https://github.com/x0mmd/oh-my-open-pentest/tree/dev/packages/shared-skills/skills/ast-grep
|
|
335
|
+
**Stars:** small | **Type:** pentesting AI agent with ast-grep SKILL
|
|
336
|
+
|
|
337
|
+
### What's in it
|
|
338
|
+
|
|
339
|
+
7 reference docs: `cli.md`, `install.md`, `patterns.md`, `pitfalls.md`, `recipes.md`, `sgconfig.md`, `yaml-rules.md`
|
|
340
|
+
|
|
341
|
+
I sampled `yaml-rules.md` (10,087 bytes) — it's a clean **practical reference** for ast-grep YAML rule authoring, covering:
|
|
342
|
+
- Skeleton with all top-level fields (`id`, `language`, `rule`, `constraints`, `utils`, `transform`, `fix`, `rewriters`, `severity`, `files`, `ignores`, `metadata`)
|
|
343
|
+
- Field-by-field table with required/optional + description
|
|
344
|
+
- Meta-variable syntax (`$VAR`, `$$$`, `$_`)
|
|
345
|
+
|
|
346
|
+
I sampled `patterns.md` (5,132 bytes) — covers meta-variable rules and common pitfalls.
|
|
347
|
+
|
|
348
|
+
### Verdict
|
|
349
|
+
|
|
350
|
+
**Useful as a pi-lens SKILL.md seed.** Real lift: copy `yaml-rules.md` + `patterns.md` into `skills/ast-grep-yaml/SKILL.md` in pi-lens, with attribution. Same shape as `pi-lens`'s existing `skills/` directory.
|
|
351
|
+
|
|
352
|
+
**Effort:** XS (copy + adapt).
|
|
353
|
+
**Value:** Med (gives future rule authors a reference doc rather than relying on AGENTS.md prose).
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 12. `mauromedda/agent-toolkit` — ast-grep skill ★ REFERENCE
|
|
358
|
+
|
|
359
|
+
**Source:** https://github.com/mauromedda/agent-toolkit/tree/main/skills/ast-grep
|
|
360
|
+
**Type:** SKILL.md (~982 bytes — very terse)
|
|
361
|
+
|
|
362
|
+
### What's in it
|
|
363
|
+
|
|
364
|
+
A single SKILL.md that points to patterns for "Go, Python, Bash, Terraform/HCL" using ast-grep. The README content is short — just a pointer to the patterns. Not as detailed as #11.
|
|
365
|
+
|
|
366
|
+
### Verdict
|
|
367
|
+
|
|
368
|
+
Strictly inferior to #11. Skip unless a future pass finds more substance.
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## 13. `dustinspecker/awesome-eslint` — 4,731 stars ★ SKIP
|
|
373
|
+
|
|
374
|
+
**Source:** https://github.com/dustinspecker/awesome-eslint
|
|
375
|
+
**Type:** curated list of 205+ ESLint plugins
|
|
376
|
+
|
|
377
|
+
### Why skip
|
|
378
|
+
|
|
379
|
+
ESLint rules are JavaScript objects, not YAML. The rule format is incompatible with ast-grep's tree-sitter-based approach. ESLint also requires a JavaScript runtime to execute the rule (pi-lens would have to embed one). Same reason pi-lens deliberately doesn't use the `@modelcontextprotocol/sdk`.
|
|
380
|
+
|
|
381
|
+
### Verdict
|
|
382
|
+
|
|
383
|
+
Skip. Useful only for `oxlint` cross-pollination (oxlint implements ESLint plugins in Rust; see §2).
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Concrete additions for pi-lens (revised after round 2)
|
|
388
|
+
|
|
389
|
+
| # | Source | Effort | Value | Notes |
|
|
390
|
+
|---|---|---|---|---|
|
|
391
|
+
| 1 | **`RealHarshThakur/ast-grep-go`** (11 rules) | XS | Med | Single batch, all detector-only Go idiom rules. Existing test files are Go, need to re-create as `<id>-test.yml` per AGENTS.md. |
|
|
392
|
+
| 2 | **Kingfisher regex pattern port** (~30 AI SaaS providers) | S | Med | Pure regex-shaped tokens from `crates/kingfisher-rules/data/rules/*.yml`. Skip the schema-only fields (entropy/validation/revocation). Adapt Apache-2.0 attribution. |
|
|
393
|
+
| 3 | **Kingfisher `AGENTS.md` → pi-lens `skills/ast-grep-yaml/SKILL.md`** | XS | Med | Lift the rule-authoring conventions. Combine with #11's `yaml-rules.md` + `patterns.md` for completeness. |
|
|
394
|
+
| 4 | **`oxlint` evaluation** | M | Low (deferred) | Worth a separate investigation — would need a separate dispatch runner OR a YAML-schema compatibility layer. Not a port. |
|
|
395
|
+
|
|
396
|
+
### Updated total (across all 3 rounds of research)
|
|
397
|
+
|
|
398
|
+
- **1 new rule repo to port** (`RealHarshThakur/ast-grep-go`) — 11 rules, XS effort
|
|
399
|
+
- **1 new rule pattern source** (`mongodb/kingfisher`) — 30+ patterns to extract, S effort
|
|
400
|
+
- **1 new skill doc** to write — SKILL.md from Kingfisher + oh-my-open-pentest, XS effort
|
|
401
|
+
- **~10 other rule sources** investigated and explicitly classified as **not ports** (already covered by existing pi-lens runners, wrong format, wrong license, or wrong scope)
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Appendix A — verified-vs-unverified claim ledger
|
|
406
|
+
|
|
407
|
+
| Claim | Verified? | How |
|
|
408
|
+
|---|---|---|
|
|
409
|
+
| Kingfisher has 585 YAML rule files, 954 rules | ✅ | `curl api.github.com/repos/.../contents/crates/kingfisher-rules/data/rules` + `wc -l` |
|
|
410
|
+
| Kingfisher rules use Rust regex (`(?P<name>...)`) not ast-grep `$VAR` | ✅ | `curl raw.githubusercontent.com/.../github.yml` |
|
|
411
|
+
| Kingfisher has checksum validation + HTTP revocation in YAML | ✅ | Same fetch |
|
|
412
|
+
| Kingfisher license: Apache-2.0 | ✅ | README badge + LICENSE file in repo |
|
|
413
|
+
| TruffleHog has 800+ detectors | ✅ | README: "TruffleHog classifies over 800 secret types" |
|
|
414
|
+
| TruffleHog has 1 semgrep-format rule (`no-printing-in-detectors`) | ✅ | `curl hack/semgrep-rules/detectors.yaml` |
|
|
415
|
+
| TruffleHog license: AGPL-3.0 | ✅ | README + LICENSE |
|
|
416
|
+
| Gitleaks uses TOML config + Go rules | ✅ | README + `config/gitleaks.toml` + `cmd/generate/config/rules/*.go` |
|
|
417
|
+
| Gitleaks license: MIT | ✅ | LICENSE file |
|
|
418
|
+
| `RealHarshThakur/ast-grep-go` has 11 detector-only rules | ✅ | Repo tree (8 dir entries for `rules/*.yml`, README lists 11) |
|
|
419
|
+
| CMake ships 8 ast-grep rules (all Cpp + CMake-internal) | ✅ | `git ls-tree Utilities/ast-grep/rules/` |
|
|
420
|
+
| ast-grep entry exists in `analysis-tools-dev/static-analysis` | ✅ | `curl data/tools/ast-grep.yml` |
|
|
421
|
+
| `mongodb/kingfisher` 1,143 stars | ✅ | GitHub API repo response |
|
|
422
|
+
| `trailofbits/buttercup` AGPL-3.0 | ✅ | LICENSE file |
|
|
423
|
+
| `PurCL/RepoAudit` Purdue license | ✅ | LICENSE file |
|
|
424
|
+
| `dustinspecker/awesome-eslint` 4,731 stars | ✅ | README badge |
|
|
425
|
+
| pi-lens currently ships 0 Go-specific ast-grep rules | ✅ | `ls rules/ast-grep-rules/rules/ \| grep -i go` → empty |
|
|
426
|
+
| CodeRabbit ships 11 Go rules | ✅ | `ls rules/ast-grep-rules/coderabbit/rules/go/` |
|
|
427
|
+
| `x0mmd/oh-my-open-pentest` ast-grep skill has 7 reference docs | ✅ | `git ls-tree` |
|
|
428
|
+
| Kingfisher rule `AGENTS.md` has the rule-authoring conventions cited | ✅ | `curl raw.githubusercontent.com/.../AGENTS.md` |
|
|
429
|
+
| pi-lens already runs `gitleaks` as a dispatch runner | ✅ | AGENTS.md "gitleaks (committed secrets, #130)" |
|
|
430
|
+
| pi-lens already runs `trivy secret` | ✅ | AGENTS.md "Secrets (`gitleaks` + `trivy secret` + ...)" |
|
|
431
|
+
|
|
432
|
+
All claims verified. **No `[unverified]` markers needed.**
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Appendix B — repo-by-repo decision matrix
|
|
437
|
+
|
|
438
|
+
| Repo | Stars | License | Format | Direct port? | Reference value |
|
|
439
|
+
|---|---|---|---|---|---|
|
|
440
|
+
| `RealHarshThakur/ast-grep-go` | 2 | NOASSERTION | ast-grep YAML | **Yes** | High — direct fill |
|
|
441
|
+
| `analysis-tools-dev/static-analysis` | 14,644 | MIT | meta | No | Med — future tool discovery |
|
|
442
|
+
| `HerringtonDarkholme/awesome-tree-sitter` | 20 | N/A | meta | No | Med — redirects to other finds |
|
|
443
|
+
| `mongodb/kingfisher` | 1,143 | Apache-2.0 | secret-scanner YAML | No (schema diff) | High — pattern templates, AGENTS.md |
|
|
444
|
+
| `trufflesecurity/trufflehog` | 26,870 | AGPL-3.0 | Go + YAML examples | No | Low (already covered) |
|
|
445
|
+
| `zricethezav/gitleaks` | 27,858 | MIT | TOML + Go | No | Low (already a runner) |
|
|
446
|
+
| `Kitware/CMake` | n/a | BSD-3 | ast-grep YAML | No (CMake-internal) | Low (project uses ast-grep — sanity check) |
|
|
447
|
+
| `trailofbits/buttercup` | 1,609 | AGPL-3.0 | Go + LLM | No | Background |
|
|
448
|
+
| `PurCL/RepoAudit` | 409 | Purdue | Python tree-sitter | No | Background |
|
|
449
|
+
| `noperator/slice` | 203 | MIT | CodeQL | No | Schema reference for future LLM-triage |
|
|
450
|
+
| `x0mmd/oh-my-open-pentest` | small | MIT | SKILL.md | No | High — SKILL.md content |
|
|
451
|
+
| `mauromedda/agent-toolkit` | small | TBD | SKILL.md | No | Low |
|
|
452
|
+
| `dustinspecker/awesome-eslint` | 4,731 | CC0-1.0 | meta | No | Low (different format) |
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## Appendix C — what I'd do differently in a round 3
|
|
457
|
+
|
|
458
|
+
If asked to dig deeper:
|
|
459
|
+
|
|
460
|
+
1. **Read actual Kingfisher rules for 5 representative providers** (openai, anthropic, aws, github, huggingface) to understand the *patterns* — not the schema — and estimate the per-pattern port cost more precisely. The current "30 patterns" estimate is rough.
|
|
461
|
+
|
|
462
|
+
2. **Check `noperator/slice/spec/uaf/analyze.schema.json`** in detail — that's the schema that real LLM-triage uses for vulnerability review. Could directly inform the `/lens-review-diff` JSON contract in pi-lens.
|
|
463
|
+
|
|
464
|
+
3. **Check `trailofbits/buttercup/program-model/src/buttercup/program_model/api/tree_sitter.py`** — this is the production tree-sitter integration Trail of Bits uses for CodeQL augmentation. Worth comparing to pi-lens's `clients/tree-sitter-client.ts`.
|
|
465
|
+
|
|
466
|
+
4. **Audit the `data/tools/` list in `analysis-tools-dev/static-analysis` for tools that overlap with pi-lens's 47 dispatch runners** — would surface any gaps. Tools I haven't evaluated: `archunit`, `archunitnet`, `bearer`, `credo` (already a runner per `credo.ts`), `cpp-linter-action`, `datree`, `kics`, `kube-linter`, `kubescape`, etc.
|
|
467
|
+
|
|
468
|
+
5. **Check if there's an `oxlint-rules` repo** that ships ESLint-rule-format YAML/JSON that could be ported. Oxlint's plugin ecosystem uses ESLint-compatible config, so oxlint plugin configs would be a third format (after ast-grep YAML and Gitleaks TOML) worth evaluating.
|
|
469
|
+
|
|
470
|
+
But these are diminishing returns. The big-finds in this round were Kingfisher (pattern source) and `ast-grep-go` (direct port). Round 3 would refine the estimates; it wouldn't find new sources.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Language Coverage
|
|
2
|
+
|
|
3
|
+
pi-lens supports **36+ languages** through dispatch runners and LSP integration.
|
|
4
|
+
|
|
5
|
+
Formatting uses a single selected formatter per file: explicit project config wins, otherwise pi-lens uses a smart default where supported, and config-first ecosystems do not autoformat without config.
|
|
6
|
+
|
|
7
|
+
Dispatch is diagnostics-oriented: automatic formatting and safe autofix happen in the post-write pipeline rather than through dispatch format-check runners.
|
|
8
|
+
|
|
9
|
+
| Language | LSP | Dispatch Runners | Formatter |
|
|
10
|
+
| --------------------- | --- | -------------------------------------------------------------------------------------------------------------- | ----------------------- |
|
|
11
|
+
| JavaScript/TypeScript | ✓ | lsp, ts-lsp, biome-check-json, tree-sitter, ast-grep-napi, type-safety, similarity, fact-rules, eslint, oxlint | biome, prettier |
|
|
12
|
+
| Python | ✓ | lsp, pyright, ruff-lint, tree-sitter | ruff, black |
|
|
13
|
+
| Go | ✓ | lsp, go-vet, golangci-lint, tree-sitter | gofmt |
|
|
14
|
+
| Rust | ✓ | lsp, rust-clippy, tree-sitter | rustfmt |
|
|
15
|
+
| Ruby | ✓ | lsp, rubocop, tree-sitter | rubocop, standardrb |
|
|
16
|
+
| C/C++ | ✓ | lsp, cpp-check, tree-sitter | clang-format |
|
|
17
|
+
| Shell | ✓ | lsp, shellcheck | shfmt |
|
|
18
|
+
| Fish | ✓ | lsp, fish-indent | fish_indent |
|
|
19
|
+
| CSS/SCSS/Less | ✓ | lsp, stylelint | biome, prettier |
|
|
20
|
+
| HTML | ✓ | lsp, htmlhint | prettier |
|
|
21
|
+
| YAML | ✓ | lsp, yamllint, actionlint (GitHub workflows) | prettier |
|
|
22
|
+
| JSON | ✓ | lsp | biome, prettier |
|
|
23
|
+
| Svelte | ✓ | lsp | — |
|
|
24
|
+
| Vue | ✓ | lsp | — |
|
|
25
|
+
| SQL | — | sqlfluff | sqlfluff |
|
|
26
|
+
| Markdown | — | spellcheck, markdownlint, vale | prettier |
|
|
27
|
+
| Docker | ✓ | lsp, hadolint | — |
|
|
28
|
+
| PHP | ✓ | lsp, php-lint, phpstan | php-cs-fixer |
|
|
29
|
+
| PowerShell | ✓ | lsp, psscriptanalyzer | psscriptanalyzer-format |
|
|
30
|
+
| Prisma | ✓ | lsp, prisma-validate | — |
|
|
31
|
+
| C# | ✓ | lsp, dotnet-build | csharpier |
|
|
32
|
+
| F# | ✓ | lsp | fantomas |
|
|
33
|
+
| Java | ✓ | lsp, javac | google-java-format |
|
|
34
|
+
| Java + Lombok | ✓ | JDT LS launched with `-javaagent:<lombok.jar>` when Lombok is detected and a jar is found (`PI_LENS_LOMBOK_JAR` / `LOMBOK_JAR`, project `.lombok/lombok.jar`, or Maven/Gradle cache) | google-java-format |
|
|
35
|
+
| Kotlin | ✓ | lsp, ktlint, detekt | ktlint |
|
|
36
|
+
| Swift | ✓ | lsp, swiftlint | swiftformat |
|
|
37
|
+
| Dart | ✓ | lsp, dart-analyze | dart format |
|
|
38
|
+
| Lua | ✓ | lsp | stylua |
|
|
39
|
+
| Zig | ✓ | lsp, zig-check | zig fmt |
|
|
40
|
+
| Haskell | ✓ | lsp | ormolu |
|
|
41
|
+
| Elixir | ✓ (ElixirLS default, Expert alternate) | lsp, elixir-check, credo | mix format |
|
|
42
|
+
| Gleam | ✓ | lsp, gleam-check | gleam format |
|
|
43
|
+
| OCaml | ✓ | lsp | ocamlformat |
|
|
44
|
+
| Clojure | ✓ | lsp | cljfmt |
|
|
45
|
+
| Terraform | ✓ | lsp, tflint | terraform fmt |
|
|
46
|
+
| Nix | ✓ | lsp | nixfmt |
|
|
47
|
+
| TOML | ✓ | lsp, taplo | taplo |
|
|
48
|
+
| CMake | ✓ | lsp | cmake-format |
|