pi-shazam 0.4.0 → 0.5.0
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 +123 -79
- package/dist/core/baseline.d.ts.map +1 -1
- package/dist/core/baseline.js +7 -33
- package/dist/core/baseline.js.map +1 -1
- package/dist/core/cache.d.ts +15 -20
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +11 -50
- package/dist/core/cache.js.map +1 -1
- package/dist/core/encoding.d.ts +5 -1
- package/dist/core/encoding.d.ts.map +1 -1
- package/dist/core/encoding.js +119 -18
- package/dist/core/encoding.js.map +1 -1
- package/dist/core/filter.d.ts +22 -0
- package/dist/core/filter.d.ts.map +1 -1
- package/dist/core/filter.js +71 -7
- package/dist/core/filter.js.map +1 -1
- package/dist/core/git-hooks.d.ts +15 -4
- package/dist/core/git-hooks.d.ts.map +1 -1
- package/dist/core/git-hooks.js +229 -52
- package/dist/core/git-hooks.js.map +1 -1
- package/dist/core/graph.d.ts +2 -17
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +13 -30
- package/dist/core/graph.js.map +1 -1
- package/dist/core/output.d.ts +4 -0
- package/dist/core/output.d.ts.map +1 -1
- package/dist/core/output.js +13 -10
- package/dist/core/output.js.map +1 -1
- package/dist/core/pagerank.d.ts.map +1 -1
- package/dist/core/pagerank.js +12 -0
- package/dist/core/pagerank.js.map +1 -1
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +149 -44
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/treesitter-queries.d.ts +0 -3
- package/dist/core/treesitter-queries.d.ts.map +1 -1
- package/dist/core/treesitter-queries.js +0 -19
- package/dist/core/treesitter-queries.js.map +1 -1
- package/dist/core/treesitter.d.ts +1 -2
- package/dist/core/treesitter.d.ts.map +1 -1
- package/dist/core/treesitter.js +2 -38
- package/dist/core/treesitter.js.map +1 -1
- package/dist/hooks/before-start.d.ts +13 -2
- package/dist/hooks/before-start.d.ts.map +1 -1
- package/dist/hooks/before-start.js +52 -18
- package/dist/hooks/before-start.js.map +1 -1
- package/dist/hooks/pre-edit.d.ts +2 -0
- package/dist/hooks/pre-edit.d.ts.map +1 -1
- package/dist/hooks/pre-edit.js +71 -28
- package/dist/hooks/pre-edit.js.map +1 -1
- package/dist/hooks/shazam-guide.d.ts.map +1 -1
- package/dist/hooks/shazam-guide.js +2 -26
- package/dist/hooks/shazam-guide.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/dist/lsp/client.d.ts +46 -10
- package/dist/lsp/client.d.ts.map +1 -1
- package/dist/lsp/client.js +298 -95
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/manager.d.ts +8 -4
- package/dist/lsp/manager.d.ts.map +1 -1
- package/dist/lsp/manager.js +87 -37
- package/dist/lsp/manager.js.map +1 -1
- package/dist/lsp/servers.js +10 -10
- package/dist/lsp/servers.js.map +1 -1
- package/dist/mcp/entry.js +2 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +36 -17
- package/dist/mcp/tools.js.map +1 -1
- package/dist/tools/_context.d.ts.map +1 -1
- package/dist/tools/_context.js +6 -0
- package/dist/tools/_context.js.map +1 -1
- package/dist/tools/_factory.d.ts.map +1 -1
- package/dist/tools/_factory.js +11 -1
- package/dist/tools/_factory.js.map +1 -1
- package/dist/tools/call_chain.d.ts.map +1 -1
- package/dist/tools/call_chain.js +3 -1
- package/dist/tools/call_chain.js.map +1 -1
- package/dist/tools/codesearch.d.ts +17 -3
- package/dist/tools/codesearch.d.ts.map +1 -1
- package/dist/tools/codesearch.js +76 -30
- package/dist/tools/codesearch.js.map +1 -1
- package/dist/tools/file_detail.d.ts +0 -7
- package/dist/tools/file_detail.d.ts.map +1 -1
- package/dist/tools/file_detail.js +65 -4
- package/dist/tools/file_detail.js.map +1 -1
- package/dist/tools/find_tests.d.ts +1 -0
- package/dist/tools/find_tests.d.ts.map +1 -1
- package/dist/tools/find_tests.js +1 -1
- package/dist/tools/find_tests.js.map +1 -1
- package/dist/tools/fix.d.ts +1 -0
- package/dist/tools/fix.d.ts.map +1 -1
- package/dist/tools/fix.js +236 -4
- package/dist/tools/fix.js.map +1 -1
- package/dist/tools/hover.d.ts +6 -2
- package/dist/tools/hover.d.ts.map +1 -1
- package/dist/tools/hover.js +179 -6
- package/dist/tools/hover.js.map +1 -1
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +15 -0
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/lsp_enrich.d.ts +12 -17
- package/dist/tools/lsp_enrich.d.ts.map +1 -1
- package/dist/tools/lsp_enrich.js +24 -41
- package/dist/tools/lsp_enrich.js.map +1 -1
- package/dist/tools/overview.d.ts.map +1 -1
- package/dist/tools/overview.js +14 -7
- package/dist/tools/overview.js.map +1 -1
- package/dist/tools/rename_symbol.d.ts +9 -9
- package/dist/tools/rename_symbol.d.ts.map +1 -1
- package/dist/tools/rename_symbol.js +167 -14
- package/dist/tools/rename_symbol.js.map +1 -1
- package/dist/tools/safe_delete.d.ts +1 -0
- package/dist/tools/safe_delete.d.ts.map +1 -1
- package/dist/tools/safe_delete.js +4 -2
- package/dist/tools/safe_delete.js.map +1 -1
- package/dist/tools/symbol.d.ts.map +1 -1
- package/dist/tools/symbol.js +7 -3
- package/dist/tools/symbol.js.map +1 -1
- package/dist/tools/type_hierarchy.d.ts +2 -1
- package/dist/tools/type_hierarchy.d.ts.map +1 -1
- package/dist/tools/type_hierarchy.js +82 -26
- package/dist/tools/type_hierarchy.js.map +1 -1
- package/dist/tools/verify.d.ts +1 -0
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +112 -94
- package/dist/tools/verify.js.map +1 -1
- package/package.json +7 -3
- package/dist/hooks/after-write.d.ts +0 -34
- package/dist/hooks/after-write.d.ts.map +0 -1
- package/dist/hooks/after-write.js +0 -304
- package/dist/hooks/after-write.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,129 +1,154 @@
|
|
|
1
1
|
# pi-shazam
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **Pi coding agent native codebase awareness toolkit** — 14 structural analysis tools built natively for Pi agent. MCP support available for non-Pi agents (Cursor, Claude Desktop, Windsurf, etc.)
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/pi-shazam)
|
|
6
6
|
[](https://github.com/gjczone/pi-shazam/actions/workflows/ci.yml)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
8
|
|
|
8
|
-
## What It
|
|
9
|
+
## What It Does
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
**pi-shazam** is a native codebase analysis toolkit built for the **Pi coding agent**. It provides 14 structural analysis tools that help AI agents understand project architecture before reading code.
|
|
11
12
|
|
|
12
|
-
pi-shazam
|
|
13
|
+
For non-Pi agents, pi-shazam also exposes the same tools via **MCP (Model Context Protocol)**. Supported MCP clients include Cursor, Claude Desktop, Windsurf, Qoder, Kimi Code, and more. **Note: the MCP interface is a compatibility layer — the primary and recommended deployment model is as a native Pi extension.**
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
- "What will break if I change this file?" → `shazam_impact`
|
|
16
|
-
- "Who calls this function?" → `shazam_call_chain`
|
|
17
|
-
- "Did my edit introduce errors?" → `shazam_verify`
|
|
15
|
+
## Core Capabilities
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
- **Tree-sitter parsing** — 14 programming languages, full symbol dependency graph
|
|
18
|
+
- **PageRank ranking** — Identify core files and key symbols
|
|
19
|
+
- **LSP integration** — Type checking, diagnostics, type hierarchy (5 languages)
|
|
20
|
+
- **Incremental analysis** — Baseline comparison, focus on changes
|
|
21
|
+
- **Smart verification** — Post-edit verification with PASS/WARN/FAIL verdict
|
|
20
22
|
|
|
21
|
-
##
|
|
23
|
+
## Quick Start
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
### Pi Agent (Default — Recommended)
|
|
26
|
+
|
|
27
|
+
**This is the primary installation method.** pi-shazam is designed and optimized for Pi agent first.
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
30
|
pi install npm:pi-shazam
|
|
27
31
|
```
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## Also: MCP Server
|
|
33
|
+
After installation, all 14 analysis tools register as native Pi tools alongside `read`, `write`, and `bash`. Automatic hooks inject project structure into system prompts, verify code after edits, and log tool usage. **Full hook lifecycle (before_agent_start, session_start, session_shutdown, tool_call, tool_result) available only in Pi mode.**
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
### MCP (For Non-Pi Agents Only)
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
Use this only if you are **not** using Pi agent. The MCP interface provides the same 14 tools but without Pi-specific hooks and lifecycle integration.
|
|
36
38
|
|
|
37
39
|
```json
|
|
38
40
|
{
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
"mcpServers": {
|
|
42
|
+
"pi-shazam": {
|
|
43
|
+
"command": "npx",
|
|
44
|
+
"args": ["pi-shazam-mcp"]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
45
47
|
}
|
|
46
48
|
```
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
Compatible with any MCP-capable client. Same analysis engine, JSON-based tool interface.
|
|
49
51
|
|
|
50
52
|
## Tools
|
|
51
53
|
|
|
52
|
-
### Query (
|
|
53
|
-
|
|
54
|
-
| Tool
|
|
55
|
-
|
|
56
|
-
| `shazam_overview`
|
|
57
|
-
| `shazam_impact`
|
|
58
|
-
| `shazam_codesearch`
|
|
59
|
-
| `shazam_symbol`
|
|
60
|
-
| `shazam_hover`
|
|
61
|
-
| `shazam_file_detail`
|
|
62
|
-
| `shazam_call_chain`
|
|
63
|
-
| `shazam_find_tests`
|
|
64
|
-
| `shazam_hotspots`
|
|
65
|
-
| `shazam_type_hierarchy` | Class/interface inheritance chain
|
|
54
|
+
### Query (Read-Only)
|
|
55
|
+
|
|
56
|
+
| Tool | What It Does |
|
|
57
|
+
|------|--------------|
|
|
58
|
+
| `shazam_overview` | Project structure, top-10 core files by PageRank, key dependencies, recent commits |
|
|
59
|
+
| `shazam_impact` | Change impact analysis: affected files, symbols, tests |
|
|
60
|
+
| `shazam_codesearch` | BM25 symbol search — ranked alternative to grep |
|
|
61
|
+
| `shazam_symbol` | Symbol definition, signature, callers, callees |
|
|
62
|
+
| `shazam_hover` | Type signatures and JSDoc — rich info from LSP |
|
|
63
|
+
| `shazam_file_detail` | All symbols in a file: signatures, PageRank, call counts, LSP hierarchy |
|
|
64
|
+
| `shazam_call_chain` | Full upstream/downstream call graph |
|
|
65
|
+
| `shazam_find_tests` | Find test files covering a module |
|
|
66
|
+
| `shazam_hotspots` | Files ranked by complexity — where bugs hurt most |
|
|
67
|
+
| `shazam_type_hierarchy` | Class/interface inheritance chain |
|
|
66
68
|
|
|
67
69
|
### Write & Verify
|
|
68
70
|
|
|
69
|
-
| Tool
|
|
70
|
-
|
|
71
|
-
| `shazam_verify`
|
|
72
|
-
| `shazam_fix`
|
|
73
|
-
| `shazam_rename_symbol` | Safe project-wide rename
|
|
74
|
-
| `shazam_safe_delete`
|
|
71
|
+
| Tool | What It Does |
|
|
72
|
+
|------|--------------|
|
|
73
|
+
| `shazam_verify` | Post-edit verification: LSP diagnostics + risk assessment + orphan detection |
|
|
74
|
+
| `shazam_fix` | Auto-fix format issues (prettier, biome, eslint, ruff, gofmt) |
|
|
75
|
+
| `shazam_rename_symbol` | Safe project-wide rename — verify references first |
|
|
76
|
+
| `shazam_safe_delete` | Delete with zero-reference confirmation |
|
|
77
|
+
|
|
78
|
+
## Platform Support
|
|
79
|
+
|
|
80
|
+
### Pi Agent Features
|
|
81
|
+
|
|
82
|
+
| Hook | Trigger | What It Does |
|
|
83
|
+
|------|---------|--------------|
|
|
84
|
+
| `before_agent_start` | Agent starts | Inject project structure overview into system prompt |
|
|
85
|
+
| `shazam-guide` | Key lifecycle | Guide agent to use tools at the right moments |
|
|
86
|
+
| `pre-edit-guard` | Before write | Detect multi-file edits, suggest `shazam_impact` first |
|
|
87
|
+
|
|
88
|
+
Additional commands: `/shazam-setup`, `/shazam-doctor`, `/shazam-install-git-hooks`, etc.
|
|
89
|
+
|
|
90
|
+
### MCP Client Support
|
|
91
|
+
|
|
92
|
+
pi-shazam's MCP server supports all MCP-compatible clients:
|
|
93
|
+
|
|
94
|
+
- **Cursor** — Built-in MCP support
|
|
95
|
+
- **Claude Desktop** — Via configuration file
|
|
96
|
+
- **Windsurf** — Native MCP support
|
|
97
|
+
- **Qoder** — AI coding assistant
|
|
98
|
+
- **Kimi Code** — Moonshot AI coding assistant
|
|
99
|
+
- **Others** — Any tool implementing MCP protocol
|
|
100
|
+
|
|
101
|
+
## Platform & Build
|
|
75
102
|
|
|
76
|
-
|
|
103
|
+
### npm Auto-Build
|
|
77
104
|
|
|
78
|
-
|
|
105
|
+
pi-shazam is published via npm with automatic platform support:
|
|
79
106
|
|
|
80
|
-
|
|
|
81
|
-
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
| `shazam-guide` | Key lifecycle events | Nudges agent to use shazam tools at the right moments |
|
|
85
|
-
| `tool-logger` | Every shazam call | Logs usage to `~/.pi/hooks/audit/shazam-calls.log` for optimization |
|
|
107
|
+
| Platform | Architecture | Status |
|
|
108
|
+
|----------|--------------|--------|
|
|
109
|
+
| **Linux** | x64, arm64 | Fully supported |
|
|
110
|
+
| **macOS** | x64 (Intel), arm64 (Apple Silicon) | Fully supported |
|
|
86
111
|
|
|
87
|
-
|
|
112
|
+
> **Note**: Windows is not supported due to path handling differences.
|
|
88
113
|
|
|
89
|
-
|
|
114
|
+
### Dependencies
|
|
90
115
|
|
|
91
|
-
|
|
116
|
+
pi-shazam uses `tree-sitter` for code parsing, a native Node.js module. npm automatically compiles binaries for your platform during installation — no manual steps required.
|
|
92
117
|
|
|
93
|
-
|
|
118
|
+
Supported Node.js versions: **>= 18.0.0**
|
|
94
119
|
|
|
95
|
-
|
|
120
|
+
### Community Format/Version Support
|
|
121
|
+
|
|
122
|
+
- **TypeScript/JavaScript**: `.ts`, `.tsx`, `.mts`, `.cts`, `.js`, `.jsx`, `.mjs`, `.cjs`
|
|
123
|
+
- **Python**: `.py`, `.pyi`, `.pyx`, `.pxd`
|
|
124
|
+
- **Rust**: `.rs`
|
|
125
|
+
- **Go**: `.go`
|
|
126
|
+
- **Java**: `.java`
|
|
127
|
+
- **C/C++**: `.c`, `.cpp`, `.h`, `.hpp`
|
|
128
|
+
- **C#**: `.cs`
|
|
129
|
+
- **Ruby**: `.rb`
|
|
130
|
+
- **Web**: `.css`, `.html`
|
|
131
|
+
- **Data formats**: `.json`, `.yaml`, `.yml`
|
|
96
132
|
|
|
97
133
|
## Architecture
|
|
98
134
|
|
|
99
135
|
```
|
|
100
136
|
pi-shazam (npm package)
|
|
101
|
-
├── Pi
|
|
102
|
-
│ index.ts ──tools/*.ts
|
|
103
|
-
│ │ │
|
|
104
|
-
│ └──── core/ + lsp/
|
|
105
|
-
│ (shared,
|
|
137
|
+
├── Pi Extension MCP Server
|
|
138
|
+
│ index.ts ──tools/*.ts mcp/entry.ts ──mcp/tools.ts
|
|
139
|
+
│ │ │ │ │
|
|
140
|
+
│ └──── core/ + lsp/ ───────────────┘──────────────┘
|
|
141
|
+
│ (shared core, zero duplication)
|
|
106
142
|
│
|
|
107
|
-
├── hooks/
|
|
108
|
-
│ ├── before-start.ts
|
|
109
|
-
│ ├──
|
|
110
|
-
│ ├── shazam-guide.ts
|
|
111
|
-
│ └── tool-logger.ts
|
|
143
|
+
├── hooks/ Automatic hooks
|
|
144
|
+
│ ├── before-start.ts Inject project overview
|
|
145
|
+
│ ├── pre-edit.ts Multi-file edit protection
|
|
146
|
+
│ ├── shazam-guide.ts Tool usage guidance
|
|
147
|
+
│ └── tool-logger.ts Usage analytics
|
|
112
148
|
│
|
|
113
|
-
└── core/ + lsp/
|
|
149
|
+
└── core/ + lsp/ Pure analysis engine (zero Pi/MCP dependencies)
|
|
114
150
|
```
|
|
115
151
|
|
|
116
|
-
## MCP Sync Discipline
|
|
117
|
-
|
|
118
|
-
Pi and MCP tools ship in the same package, from the same codebase. When Pi tools change, MCP tools must update in the same PR:
|
|
119
|
-
|
|
120
|
-
| Pi change | MCP action |
|
|
121
|
-
| ------------------- | ------------------------------------ |
|
|
122
|
-
| New tool | Add `registerTool` in `mcp/tools.ts` |
|
|
123
|
-
| Tool deleted | Remove from `mcp/tools.ts` |
|
|
124
|
-
| Schema changed | Update Zod schema |
|
|
125
|
-
| Description updated | Sync to MCP tool description |
|
|
126
|
-
|
|
127
152
|
## Development
|
|
128
153
|
|
|
129
154
|
```bash
|
|
@@ -133,10 +158,29 @@ npm install --legacy-peer-deps
|
|
|
133
158
|
|
|
134
159
|
npm run dev # tsc --watch
|
|
135
160
|
npm run typecheck # tsc --noEmit
|
|
136
|
-
npm test # vitest
|
|
161
|
+
npm test # vitest
|
|
137
162
|
npm run build # tsc → dist/
|
|
138
163
|
```
|
|
139
164
|
|
|
165
|
+
## LSP Support
|
|
166
|
+
|
|
167
|
+
| Language | LSP Server | Status |
|
|
168
|
+
|----------|-----------|--------|
|
|
169
|
+
| TypeScript/JavaScript | typescript-language-server | Supported |
|
|
170
|
+
| Python | pyright-langserver / pylsp | Supported |
|
|
171
|
+
| Go | gopls | Supported |
|
|
172
|
+
| Rust | rust-analyzer | Supported |
|
|
173
|
+
| YAML | yaml-language-server | Supported |
|
|
174
|
+
|
|
175
|
+
When LSP servers are unavailable, tools automatically fall back to tree-sitter mode.
|
|
176
|
+
|
|
140
177
|
## License
|
|
141
178
|
|
|
142
179
|
MIT
|
|
180
|
+
|
|
181
|
+
## Links
|
|
182
|
+
|
|
183
|
+
- [npm](https://www.npmjs.com/package/pi-shazam)
|
|
184
|
+
- [GitHub](https://github.com/gjczone/pi-shazam)
|
|
185
|
+
- [Pi Agent](https://pi.dev)
|
|
186
|
+
- [MCP Protocol](https://modelcontextprotocol.io)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../core/baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../core/baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACnB;AAOD;;GAEG;AACH,wBAAgB,WAAW,IAAI,eAAe,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,eAAe,CA0BjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA2B9G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA4B7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAUvE"}
|
package/dist/core/baseline.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* resets on branch switch. If LSP is not ready at session start, the
|
|
10
10
|
* baseline is deferred to the first edit trigger.
|
|
11
11
|
*/
|
|
12
|
+
import { getGraphEdgeCount } from "./graph.js";
|
|
13
|
+
import { findOrphans } from "./filter.js";
|
|
12
14
|
// ── Session baseline state (in-memory) ────────────────────────────────────────
|
|
13
15
|
let _baseline = null;
|
|
14
16
|
let _previousOrphans = new Map();
|
|
@@ -41,11 +43,8 @@ export function hasBaseline() {
|
|
|
41
43
|
* Create a baseline from the current graph state and LSP data.
|
|
42
44
|
*/
|
|
43
45
|
export function createBaseline(graph, lspErrors, lspWarnings, branch, commit) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
edgeCount += edges.length;
|
|
47
|
-
}
|
|
48
|
-
const orphanCount = countOrphans(graph);
|
|
46
|
+
const edgeCount = getGraphEdgeCount(graph);
|
|
47
|
+
const orphanCount = findOrphans(graph).length;
|
|
49
48
|
const baseline = {
|
|
50
49
|
branch,
|
|
51
50
|
commit,
|
|
@@ -61,7 +60,7 @@ export function createBaseline(graph, lspErrors, lspWarnings, branch, commit) {
|
|
|
61
60
|
// Cache current orphan set for future diff
|
|
62
61
|
_previousOrphans = new Map();
|
|
63
62
|
for (const orphan of findOrphans(graph)) {
|
|
64
|
-
_previousOrphans.set(orphan.name
|
|
63
|
+
_previousOrphans.set(`${orphan.name}::${orphan.file}`, orphan);
|
|
65
64
|
}
|
|
66
65
|
return baseline;
|
|
67
66
|
}
|
|
@@ -72,14 +71,11 @@ export function createBaseline(graph, lspErrors, lspWarnings, branch, commit) {
|
|
|
72
71
|
export function diffFromBaseline(graph, lspErrors, lspWarnings) {
|
|
73
72
|
if (!_baseline)
|
|
74
73
|
return null;
|
|
75
|
-
|
|
76
|
-
for (const [, edges] of graph.outgoing) {
|
|
77
|
-
edgeCount += edges.length;
|
|
78
|
-
}
|
|
74
|
+
const edgeCount = getGraphEdgeCount(graph);
|
|
79
75
|
const currentOrphans = findOrphans(graph);
|
|
80
76
|
const currentOrphanCount = currentOrphans.length;
|
|
81
77
|
// Find new orphans (not in previous baseline)
|
|
82
|
-
const newOrphans = currentOrphans.filter((o) => !_previousOrphans.has(o.name
|
|
78
|
+
const newOrphans = currentOrphans.filter((o) => !_previousOrphans.has(`${o.name}::${o.file}`));
|
|
83
79
|
// Count edge changes
|
|
84
80
|
const previousEdges = _baseline.graphEdges;
|
|
85
81
|
const addedEdges = edgeCount > previousEdges ? edgeCount - previousEdges : 0;
|
|
@@ -144,26 +140,4 @@ export function formatBaselineSummary(baseline) {
|
|
|
144
140
|
lines.push("");
|
|
145
141
|
return lines.join("\n");
|
|
146
142
|
}
|
|
147
|
-
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
148
|
-
function countOrphans(graph) {
|
|
149
|
-
return findOrphans(graph).length;
|
|
150
|
-
}
|
|
151
|
-
function findOrphans(graph) {
|
|
152
|
-
const orphans = [];
|
|
153
|
-
for (const sym of graph.symbols.values()) {
|
|
154
|
-
if (sym.file.includes("node_modules") || sym.file.includes(".git"))
|
|
155
|
-
continue;
|
|
156
|
-
const incoming = graph.incoming.get(sym.id);
|
|
157
|
-
if (!incoming || incoming.length === 0) {
|
|
158
|
-
if (sym.visibility === "exported" && sym.pagerank > 0.01)
|
|
159
|
-
continue;
|
|
160
|
-
if (sym.kind === "anonymous_function")
|
|
161
|
-
continue;
|
|
162
|
-
if (sym.file.includes("tests/") || sym.file.includes(".test."))
|
|
163
|
-
continue;
|
|
164
|
-
orphans.push({ name: sym.name, kind: sym.kind, file: sym.file, line: sym.line });
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return orphans;
|
|
168
|
-
}
|
|
169
143
|
//# sourceMappingURL=baseline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../core/baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../core/baseline.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pi-shazam core/cache — Graph baseline save/diff for incremental analysis.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Uses Node.js fs + path for file I/O, matching repomap's convention of
|
|
8
|
-
* storing cache under ~/.cache/repomap/<project-slug>.
|
|
4
|
+
* Provides persistent graph caching with mtime-based invalidation.
|
|
5
|
+
* Stores cache under ~/.cache/repomap/<project-slug> for process-isolated
|
|
6
|
+
* cache directories. Supports V2 serialization with file-level data.
|
|
9
7
|
*/
|
|
10
|
-
import {
|
|
11
|
-
import type { RepoGraph,
|
|
8
|
+
import { compareGraphSnapshots } from "./graph.js";
|
|
9
|
+
import type { RepoGraph, GraphDiff, SerializedSymbol, SerializedEdge } from "./graph.js";
|
|
12
10
|
/**
|
|
13
11
|
* Get the cache directory for a specific project.
|
|
14
12
|
* Uses MD5 hash of canonical path for isolation.
|
|
@@ -23,21 +21,18 @@ export declare function getCachePaths(projectPath: string): {
|
|
|
23
21
|
lastSnapshot: string;
|
|
24
22
|
};
|
|
25
23
|
/**
|
|
26
|
-
*
|
|
27
|
-
*/
|
|
28
|
-
export declare function saveBaseline(graph: RepoGraph, projectPath: string): string;
|
|
29
|
-
/**
|
|
30
|
-
* Load a previously saved baseline snapshot.
|
|
24
|
+
* V1 baseline data format (kept for reading legacy baseline files).
|
|
31
25
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
interface BaselineData {
|
|
27
|
+
symbols: SerializedSymbol[];
|
|
28
|
+
edges: SerializedEdge[];
|
|
29
|
+
version: number;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
}
|
|
37
32
|
/**
|
|
38
|
-
* Load
|
|
33
|
+
* Load a previously saved baseline snapshot (V1 format).
|
|
39
34
|
*/
|
|
40
|
-
export declare function
|
|
35
|
+
export declare function loadBaseline(projectPath: string): BaselineData | null;
|
|
41
36
|
/**
|
|
42
37
|
* Compute the difference between the current graph and a saved baseline.
|
|
43
38
|
* Returns a structured diff with added/removed/modified symbols and edges.
|
|
@@ -60,5 +55,5 @@ export declare function loadGraphCache(cachePath: string): GraphCacheData | null
|
|
|
60
55
|
/**
|
|
61
56
|
* Re-export serialization helpers for convenience.
|
|
62
57
|
*/
|
|
63
|
-
export {
|
|
58
|
+
export { compareGraphSnapshots };
|
|
64
59
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/core/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAGN,qBAAqB,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAgB,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMvG;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACrB,CAOA;AAID;;GAEG;AACH,UAAU,YAAY;IACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAcrE;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAapF;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIzG;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAmBvE;AAED;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/core/cache.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* pi-shazam core/cache — Graph baseline save/diff for incremental analysis.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Uses Node.js fs + path for file I/O, matching repomap's convention of
|
|
8
|
-
* storing cache under ~/.cache/repomap/<project-slug>.
|
|
4
|
+
* Provides persistent graph caching with mtime-based invalidation.
|
|
5
|
+
* Stores cache under ~/.cache/repomap/<project-slug> for process-isolated
|
|
6
|
+
* cache directories. Supports V2 serialization with file-level data.
|
|
9
7
|
*/
|
|
10
8
|
import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
11
9
|
import { join, dirname } from "node:path";
|
|
12
10
|
import { homedir } from "node:os";
|
|
13
11
|
import { createHash } from "node:crypto";
|
|
14
|
-
import {
|
|
12
|
+
import { serializeGraphV2, deserializeGraphV2, compareGraphSnapshots, } from "./graph.js";
|
|
15
13
|
// ── Cache directory management ───────────────────────────────────────────────
|
|
16
14
|
const CACHE_ROOT = join(homedir(), ".cache", "repomap");
|
|
17
15
|
/**
|
|
@@ -37,19 +35,8 @@ export function getCachePaths(projectPath) {
|
|
|
37
35
|
lastSnapshot: join(dir, "last_snapshot.json"),
|
|
38
36
|
};
|
|
39
37
|
}
|
|
40
|
-
// ── Baseline save/load ───────────────────────────────────────────────────────
|
|
41
|
-
/**
|
|
42
|
-
* Save the current graph as a baseline snapshot.
|
|
43
|
-
*/
|
|
44
|
-
export function saveBaseline(graph, projectPath) {
|
|
45
|
-
const { symbols } = getCachePaths(projectPath);
|
|
46
|
-
const serialized = serializeGraph(graph);
|
|
47
|
-
mkdirSync(dirname(symbols), { recursive: true });
|
|
48
|
-
writeFileSync(symbols, JSON.stringify(serialized, null, 2), "utf-8");
|
|
49
|
-
return symbols;
|
|
50
|
-
}
|
|
51
38
|
/**
|
|
52
|
-
* Load a previously saved baseline snapshot.
|
|
39
|
+
* Load a previously saved baseline snapshot (V1 format).
|
|
53
40
|
*/
|
|
54
41
|
export function loadBaseline(projectPath) {
|
|
55
42
|
const { symbols } = getCachePaths(projectPath);
|
|
@@ -63,35 +50,8 @@ export function loadBaseline(projectPath) {
|
|
|
63
50
|
}
|
|
64
51
|
return data;
|
|
65
52
|
}
|
|
66
|
-
catch {
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Save the last snapshot (timestamp + metadata only, not full graph).
|
|
72
|
-
*/
|
|
73
|
-
export function saveLastSnapshot(projectPath, metadata) {
|
|
74
|
-
const { lastSnapshot } = getCachePaths(projectPath);
|
|
75
|
-
const data = {
|
|
76
|
-
timestamp: Date.now(),
|
|
77
|
-
...metadata,
|
|
78
|
-
};
|
|
79
|
-
mkdirSync(dirname(lastSnapshot), { recursive: true });
|
|
80
|
-
writeFileSync(lastSnapshot, JSON.stringify(data, null, 2), "utf-8");
|
|
81
|
-
return lastSnapshot;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Load the last snapshot metadata.
|
|
85
|
-
*/
|
|
86
|
-
export function loadLastSnapshot(projectPath) {
|
|
87
|
-
const { lastSnapshot } = getCachePaths(projectPath);
|
|
88
|
-
if (!existsSync(lastSnapshot))
|
|
89
|
-
return null;
|
|
90
|
-
try {
|
|
91
|
-
const raw = readFileSync(lastSnapshot, "utf-8");
|
|
92
|
-
return JSON.parse(raw);
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.warn(`[pi-shazam] loadBaseline: failed to parse baseline cache: ${err}`);
|
|
95
55
|
return null;
|
|
96
56
|
}
|
|
97
57
|
}
|
|
@@ -114,7 +74,7 @@ export function diffBaseline(graph, projectPath) {
|
|
|
114
74
|
return compareGraphSnapshots(currentSymbols, currentEdges, baseline.symbols, baseline.edges);
|
|
115
75
|
}
|
|
116
76
|
// ── Persistent graph cache (V2) ──────────────────────────────────────────────
|
|
117
|
-
const CACHE_MAX_AGE_MS =
|
|
77
|
+
const CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 1 day — prevents stale cache in active projects (fixes #100)
|
|
118
78
|
/**
|
|
119
79
|
* Save the full graph + file mtimes to a persistent cache file.
|
|
120
80
|
*/
|
|
@@ -144,12 +104,13 @@ export function loadGraphCache(cachePath) {
|
|
|
144
104
|
}
|
|
145
105
|
return { graph, fileMtimes, timestamp: data.timestamp };
|
|
146
106
|
}
|
|
147
|
-
catch {
|
|
107
|
+
catch (err) {
|
|
108
|
+
console.warn(`[pi-shazam] loadGraphCache: failed to parse graph cache: ${err}`);
|
|
148
109
|
return null;
|
|
149
110
|
}
|
|
150
111
|
}
|
|
151
112
|
/**
|
|
152
113
|
* Re-export serialization helpers for convenience.
|
|
153
114
|
*/
|
|
154
|
-
export {
|
|
115
|
+
export { compareGraphSnapshots };
|
|
155
116
|
//# sourceMappingURL=cache.js.map
|
package/dist/core/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/core/encoding.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* pi-shazam core/encoding — Adaptive file encoding reader.
|
|
3
3
|
*
|
|
4
4
|
* Reads files with UTF-8 → GBK → GB2312 fallback.
|
|
5
|
-
*
|
|
5
|
+
* Includes OOM protection via file size limits (2MB max) and
|
|
6
|
+
* encoding validation on first 64KB chunk to reduce memory pressure.
|
|
6
7
|
*/
|
|
7
8
|
/**
|
|
8
9
|
* Read a file with adaptive encoding fallback:
|
|
@@ -11,6 +12,9 @@
|
|
|
11
12
|
* 3. Try GB2312
|
|
12
13
|
*
|
|
13
14
|
* Returns the decoded string content.
|
|
15
|
+
* Throws if the file exceeds MAX_FILE_SIZE (2MB) to prevent OOM.
|
|
16
|
+
* For encoding detection, validates only the first 64KB to avoid
|
|
17
|
+
* allocating huge strings during multi-encoding fallback.
|
|
14
18
|
*/
|
|
15
19
|
export declare function readFileAdaptive(filePath: string): string;
|
|
16
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../core/encoding.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../core/encoding.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA0CzD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA4BrD;AAiGD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/E"}
|