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.
Files changed (133) hide show
  1. package/README.md +123 -79
  2. package/dist/core/baseline.d.ts.map +1 -1
  3. package/dist/core/baseline.js +7 -33
  4. package/dist/core/baseline.js.map +1 -1
  5. package/dist/core/cache.d.ts +15 -20
  6. package/dist/core/cache.d.ts.map +1 -1
  7. package/dist/core/cache.js +11 -50
  8. package/dist/core/cache.js.map +1 -1
  9. package/dist/core/encoding.d.ts +5 -1
  10. package/dist/core/encoding.d.ts.map +1 -1
  11. package/dist/core/encoding.js +119 -18
  12. package/dist/core/encoding.js.map +1 -1
  13. package/dist/core/filter.d.ts +22 -0
  14. package/dist/core/filter.d.ts.map +1 -1
  15. package/dist/core/filter.js +71 -7
  16. package/dist/core/filter.js.map +1 -1
  17. package/dist/core/git-hooks.d.ts +15 -4
  18. package/dist/core/git-hooks.d.ts.map +1 -1
  19. package/dist/core/git-hooks.js +229 -52
  20. package/dist/core/git-hooks.js.map +1 -1
  21. package/dist/core/graph.d.ts +2 -17
  22. package/dist/core/graph.d.ts.map +1 -1
  23. package/dist/core/graph.js +13 -30
  24. package/dist/core/graph.js.map +1 -1
  25. package/dist/core/output.d.ts +4 -0
  26. package/dist/core/output.d.ts.map +1 -1
  27. package/dist/core/output.js +13 -10
  28. package/dist/core/output.js.map +1 -1
  29. package/dist/core/pagerank.d.ts.map +1 -1
  30. package/dist/core/pagerank.js +12 -0
  31. package/dist/core/pagerank.js.map +1 -1
  32. package/dist/core/scanner.d.ts.map +1 -1
  33. package/dist/core/scanner.js +149 -44
  34. package/dist/core/scanner.js.map +1 -1
  35. package/dist/core/treesitter-queries.d.ts +0 -3
  36. package/dist/core/treesitter-queries.d.ts.map +1 -1
  37. package/dist/core/treesitter-queries.js +0 -19
  38. package/dist/core/treesitter-queries.js.map +1 -1
  39. package/dist/core/treesitter.d.ts +1 -2
  40. package/dist/core/treesitter.d.ts.map +1 -1
  41. package/dist/core/treesitter.js +2 -38
  42. package/dist/core/treesitter.js.map +1 -1
  43. package/dist/hooks/before-start.d.ts +13 -2
  44. package/dist/hooks/before-start.d.ts.map +1 -1
  45. package/dist/hooks/before-start.js +52 -18
  46. package/dist/hooks/before-start.js.map +1 -1
  47. package/dist/hooks/pre-edit.d.ts +2 -0
  48. package/dist/hooks/pre-edit.d.ts.map +1 -1
  49. package/dist/hooks/pre-edit.js +71 -28
  50. package/dist/hooks/pre-edit.js.map +1 -1
  51. package/dist/hooks/shazam-guide.d.ts.map +1 -1
  52. package/dist/hooks/shazam-guide.js +2 -26
  53. package/dist/hooks/shazam-guide.js.map +1 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +13 -6
  56. package/dist/index.js.map +1 -1
  57. package/dist/lsp/client.d.ts +46 -10
  58. package/dist/lsp/client.d.ts.map +1 -1
  59. package/dist/lsp/client.js +298 -95
  60. package/dist/lsp/client.js.map +1 -1
  61. package/dist/lsp/manager.d.ts +8 -4
  62. package/dist/lsp/manager.d.ts.map +1 -1
  63. package/dist/lsp/manager.js +87 -37
  64. package/dist/lsp/manager.js.map +1 -1
  65. package/dist/lsp/servers.js +10 -10
  66. package/dist/lsp/servers.js.map +1 -1
  67. package/dist/mcp/entry.js +2 -2
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +36 -17
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/tools/_context.d.ts.map +1 -1
  72. package/dist/tools/_context.js +6 -0
  73. package/dist/tools/_context.js.map +1 -1
  74. package/dist/tools/_factory.d.ts.map +1 -1
  75. package/dist/tools/_factory.js +11 -1
  76. package/dist/tools/_factory.js.map +1 -1
  77. package/dist/tools/call_chain.d.ts.map +1 -1
  78. package/dist/tools/call_chain.js +3 -1
  79. package/dist/tools/call_chain.js.map +1 -1
  80. package/dist/tools/codesearch.d.ts +17 -3
  81. package/dist/tools/codesearch.d.ts.map +1 -1
  82. package/dist/tools/codesearch.js +76 -30
  83. package/dist/tools/codesearch.js.map +1 -1
  84. package/dist/tools/file_detail.d.ts +0 -7
  85. package/dist/tools/file_detail.d.ts.map +1 -1
  86. package/dist/tools/file_detail.js +65 -4
  87. package/dist/tools/file_detail.js.map +1 -1
  88. package/dist/tools/find_tests.d.ts +1 -0
  89. package/dist/tools/find_tests.d.ts.map +1 -1
  90. package/dist/tools/find_tests.js +1 -1
  91. package/dist/tools/find_tests.js.map +1 -1
  92. package/dist/tools/fix.d.ts +1 -0
  93. package/dist/tools/fix.d.ts.map +1 -1
  94. package/dist/tools/fix.js +236 -4
  95. package/dist/tools/fix.js.map +1 -1
  96. package/dist/tools/hover.d.ts +6 -2
  97. package/dist/tools/hover.d.ts.map +1 -1
  98. package/dist/tools/hover.js +179 -6
  99. package/dist/tools/hover.js.map +1 -1
  100. package/dist/tools/impact.d.ts.map +1 -1
  101. package/dist/tools/impact.js +15 -0
  102. package/dist/tools/impact.js.map +1 -1
  103. package/dist/tools/lsp_enrich.d.ts +12 -17
  104. package/dist/tools/lsp_enrich.d.ts.map +1 -1
  105. package/dist/tools/lsp_enrich.js +24 -41
  106. package/dist/tools/lsp_enrich.js.map +1 -1
  107. package/dist/tools/overview.d.ts.map +1 -1
  108. package/dist/tools/overview.js +14 -7
  109. package/dist/tools/overview.js.map +1 -1
  110. package/dist/tools/rename_symbol.d.ts +9 -9
  111. package/dist/tools/rename_symbol.d.ts.map +1 -1
  112. package/dist/tools/rename_symbol.js +167 -14
  113. package/dist/tools/rename_symbol.js.map +1 -1
  114. package/dist/tools/safe_delete.d.ts +1 -0
  115. package/dist/tools/safe_delete.d.ts.map +1 -1
  116. package/dist/tools/safe_delete.js +4 -2
  117. package/dist/tools/safe_delete.js.map +1 -1
  118. package/dist/tools/symbol.d.ts.map +1 -1
  119. package/dist/tools/symbol.js +7 -3
  120. package/dist/tools/symbol.js.map +1 -1
  121. package/dist/tools/type_hierarchy.d.ts +2 -1
  122. package/dist/tools/type_hierarchy.d.ts.map +1 -1
  123. package/dist/tools/type_hierarchy.js +82 -26
  124. package/dist/tools/type_hierarchy.js.map +1 -1
  125. package/dist/tools/verify.d.ts +1 -0
  126. package/dist/tools/verify.d.ts.map +1 -1
  127. package/dist/tools/verify.js +112 -94
  128. package/dist/tools/verify.js.map +1 -1
  129. package/package.json +7 -3
  130. package/dist/hooks/after-write.d.ts +0 -34
  131. package/dist/hooks/after-write.d.ts.map +0 -1
  132. package/dist/hooks/after-write.js +0 -304
  133. package/dist/hooks/after-write.js.map +0 -1
package/README.md CHANGED
@@ -1,129 +1,154 @@
1
1
  # pi-shazam
2
2
 
3
- > Give your AI agent structural awareness of your codebase before it reads a single file.
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
  [![npm version](https://img.shields.io/npm/v/pi-shazam)](https://www.npmjs.com/package/pi-shazam)
6
6
  [![CI](https://github.com/gjczone/pi-shazam/actions/workflows/ci.yml/badge.svg)](https://github.com/gjczone/pi-shazam/actions/workflows/ci.yml)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
8
 
8
- ## What It Solves
9
+ ## What It Does
9
10
 
10
- AI coding agents start blind. They see a file tree, maybe a README. They don't know which files are the "spine" of the project, what depends on what, or which callers will break when a function signature changes. They guess. Sometimes they guess wrong.
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 answers the questions every agent should ask before touching code:
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
- - "What's the structure of this project?" → `shazam_overview`
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
- Under the hood it parses **every source file** with tree-sitter (18 languages), builds a **full dependency graph** (symbols, imports, calls, references), ranks them with **PageRank**, and optionally enriches results with **LSP diagnostics** (6 languages). The agent gets precise, ranked answers in one call — no grep, no guesswork.
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
- ## Primary: Pi Package
23
+ ## Quick Start
22
24
 
23
- pi-shazam is a **Pi coding agent package** the native, first-class experience. Install once, tools appear alongside `read` and `bash`:
25
+ ### Pi Agent (DefaultRecommended)
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
- All 13 analysis tools register as native Pi tools. Automatic hooks inject structural overviews into the system prompt, verify code after every edit, and log tool usage for optimization. This is the recommended setup for Pi users.
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
- pi-shazam ships with an MCP server (`npx pi-shazam-mcp`) so **any MCP-compatible client** can use the same analysis tools. No Pi required.
35
+ ### MCP (For Non-Pi Agents Only)
34
36
 
35
- Supported clients: Cursor, Claude Desktop, Windsurf, Qoder, Kimi Code, and any tool that speaks MCP.
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
- "mcpServers": {
40
- "pi-shazam": {
41
- "command": "npx",
42
- "args": ["pi-shazam-mcp"]
43
- }
44
- }
41
+ "mcpServers": {
42
+ "pi-shazam": {
43
+ "command": "npx",
44
+ "args": ["pi-shazam-mcp"]
45
+ }
46
+ }
45
47
  }
46
48
  ```
47
49
 
48
- The same 13 tools, the same analysis engine, the same output format. MCP tools sync with Pi tools in every release.
50
+ Compatible with any MCP-capable client. Same analysis engine, JSON-based tool interface.
49
51
 
50
52
  ## Tools
51
53
 
52
- ### Query (read-only)
53
-
54
- | Tool | What it tells the agent |
55
- | ----------------------- | ------------------------------------------------------------------------------------------ |
56
- | `shazam_overview` | Project structure, top-10 files by PageRank, key dependencies, recent commits, HTTP routes |
57
- | `shazam_impact` | Every file, symbol, and test affected by your planned changes |
58
- | `shazam_codesearch` | BM25-ranked symbol search — use instead of grep |
59
- | `shazam_symbol` | Definition, kind, signature, callers, callees for any symbol. `mode: "state"` for enums |
60
- | `shazam_hover` | Type signatures and JSDoc via LSP content raw reads miss |
61
- | `shazam_file_detail` | All symbols in a file with signatures, PageRank, call counts, LSP hierarchy |
62
- | `shazam_call_chain` | Full upstream/downstream call graph. `flat: true` for reference list |
63
- | `shazam_find_tests` | Which test files cover a given module |
64
- | `shazam_hotspots` | Files ranked by complexity — where bugs hurt most |
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 | What it tells the agent |
70
- | ---------------------- | ----------------------------------------------------------------------------- |
71
- | `shazam_verify` | Post-edit gate: LSP diagnostics + risk + orphans + graph diff. PASS/WARN/FAIL |
72
- | `shazam_fix` | Auto-fix format issues (prettier, biome, eslint, ruff, gofmt) |
73
- | `shazam_rename_symbol` | Safe project-wide rename via LSP verifies references first |
74
- | `shazam_safe_delete` | Confirms zero incoming references before removing a symbol |
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
- ## Pi-Only Features
103
+ ### npm Auto-Build
77
104
 
78
- These run automatically when installed as a Pi package:
105
+ pi-shazam is published via npm with automatic platform support:
79
106
 
80
- | Hook | When | What it does |
81
- | -------------------- | -------------------- | ------------------------------------------------------------------- |
82
- | `before_agent_start` | Agent starts | Injects project structure overview into system prompt |
83
- | `after_write/edit` | Agent writes/edits | Auto-verifies changes, reports structural impact |
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
- Plus two commands: `/shazam-setup` (LSP server detection) and `/shazam-doctor` (health check).
112
+ > **Note**: Windows is not supported due to path handling differences.
88
113
 
89
- ## Supported Languages
114
+ ### Dependencies
90
115
 
91
- **Tree-sitter parsing (14)**: TypeScript/TSX, JavaScript/JSX, Python, Rust, Go, Java, C, C++, C#, Ruby, CSS, HTML, JSON
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
- **LSP diagnostics (6)**: TypeScript/JavaScript, Python (pyright), Rust (rust-analyzer), Go (gopls), JSON, YAML
118
+ Supported Node.js versions: **>= 18.0.0**
94
119
 
95
- When LSP servers are unavailable, tools fall back to tree-sitter only.
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 extension MCP server
102
- │ index.ts ──tools/*.ts mcp/entry.ts ──mcp/tools.ts
103
- │ │ │ │ │
104
- │ └──── core/ + lsp/ ───────────┘──────────────┘
105
- │ (shared, no duplication)
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 inject overview into prompt
109
- │ ├── after-write.ts auto-verify after edits
110
- │ ├── shazam-guide.ts nudge agent to use tools
111
- │ └── tool-logger.ts usage analytics
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/ pure analysis (zero Pi/MCP imports)
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 (208 tests)
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;AAI5C,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,CA6BjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA8B9G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA4B7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAUvE"}
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"}
@@ -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
- let edgeCount = 0;
45
- for (const [, edges] of graph.outgoing) {
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 + orphan.file, orphan);
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
- let edgeCount = 0;
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 + o.file));
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":"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"}
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../core/baseline.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,12 @@
1
1
  /**
2
2
  * pi-shazam core/cache — Graph baseline save/diff for incremental analysis.
3
3
  *
4
- * Ported from repomap/src/__init__.py (get_project_cache_dir, compare_graph_snapshots,
5
- * IncrementalCache).
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 { serializeGraph, serializeSymbol, serializeEdge, compareGraphSnapshots } from "./graph.js";
11
- import type { RepoGraph, SerializedGraph, GraphDiff } from "./graph.js";
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
- * Save the current graph as a baseline snapshot.
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
- export declare function loadBaseline(projectPath: string): SerializedGraph | null;
33
- /**
34
- * Save the last snapshot (timestamp + metadata only, not full graph).
35
- */
36
- export declare function saveLastSnapshot(projectPath: string, metadata: Record<string, unknown>): string;
26
+ interface BaselineData {
27
+ symbols: SerializedSymbol[];
28
+ edges: SerializedEdge[];
29
+ version: number;
30
+ timestamp: number;
31
+ }
37
32
  /**
38
- * Load the last snapshot metadata.
33
+ * Load a previously saved baseline snapshot (V1 format).
39
34
  */
40
- export declare function loadLastSnapshot(projectPath: string): Record<string, unknown> | null;
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 { serializeGraph, serializeSymbol, serializeEdge, compareGraphSnapshots };
58
+ export { compareGraphSnapshots };
64
59
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACN,cAAc,EACd,eAAe,EACf,aAAa,EAGb,qBAAqB,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAMtF;;;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,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAaxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAS/F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASpF;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,CAkBvE;AAED;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC"}
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"}
@@ -1,17 +1,15 @@
1
1
  /**
2
2
  * pi-shazam core/cache — Graph baseline save/diff for incremental analysis.
3
3
  *
4
- * Ported from repomap/src/__init__.py (get_project_cache_dir, compare_graph_snapshots,
5
- * IncrementalCache).
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 { serializeGraph, serializeSymbol, serializeEdge, serializeGraphV2, deserializeGraphV2, compareGraphSnapshots, } from "./graph.js";
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
- return null;
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 = 7 * 24 * 60 * 60 * 1000;
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 { serializeGraph, serializeSymbol, serializeEdge, compareGraphSnapshots };
115
+ export { compareGraphSnapshots };
155
116
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../core/cache.ts"],"names":[],"mappings":"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"}
@@ -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
- * Ported from repomap's encoding detection pattern.
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;;;;;GAKG;AAOH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBzD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA4BrD;AAiCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/E"}
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"}