pi-shazam 0.15.3 → 0.17.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 +1 -1
- package/dist/core/audit-log.d.ts +5 -5
- package/dist/core/audit-log.d.ts.map +1 -1
- package/dist/core/audit-log.js +11 -9
- package/dist/core/audit-log.js.map +1 -1
- package/dist/core/baseline.d.ts +1 -1
- package/dist/core/baseline.js +2 -2
- package/dist/core/cache.d.ts +1 -1
- package/dist/core/cache.js +4 -4
- package/dist/core/encoding.d.ts +3 -3
- package/dist/core/encoding.js +11 -11
- package/dist/core/encoding.js.map +1 -1
- package/dist/core/filter.d.ts +4 -4
- package/dist/core/filter.js +12 -12
- package/dist/core/filter.js.map +1 -1
- package/dist/core/formatters.d.ts +1 -1
- package/dist/core/formatters.js +2 -2
- package/dist/core/formatters.js.map +1 -1
- package/dist/core/git-hooks.d.ts +1 -1
- package/dist/core/git-hooks.js +13 -13
- package/dist/core/git-hooks.js.map +1 -1
- package/dist/core/git-utils.d.ts +36 -34
- package/dist/core/git-utils.d.ts.map +1 -1
- package/dist/core/git-utils.js +49 -46
- package/dist/core/git-utils.js.map +1 -1
- package/dist/core/graph.d.ts +2 -2
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +5 -5
- package/dist/core/output.d.ts +5 -5
- package/dist/core/output.d.ts.map +1 -1
- package/dist/core/output.js +12 -11
- package/dist/core/output.js.map +1 -1
- package/dist/core/pagerank.d.ts +1 -1
- package/dist/core/pagerank.js +1 -1
- package/dist/core/redact.d.ts +2 -2
- package/dist/core/redact.d.ts.map +1 -1
- package/dist/core/redact.js +7 -3
- package/dist/core/redact.js.map +1 -1
- package/dist/core/risk.d.ts +17 -17
- package/dist/core/risk.d.ts.map +1 -1
- package/dist/core/risk.js +20 -20
- package/dist/core/risk.js.map +1 -1
- package/dist/core/scanner.d.ts +1 -1
- package/dist/core/scanner.js +21 -21
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/treesitter-queries.d.ts +1 -1
- package/dist/core/treesitter-queries.js +2 -2
- package/dist/core/treesitter-queries.js.map +1 -1
- package/dist/core/treesitter.d.ts +20 -17
- package/dist/core/treesitter.d.ts.map +1 -1
- package/dist/core/treesitter.js +42 -41
- package/dist/core/treesitter.js.map +1 -1
- package/dist/hooks/_bash-utils.d.ts +2 -2
- package/dist/hooks/_bash-utils.js +6 -6
- package/dist/hooks/_bash-utils.js.map +1 -1
- package/dist/hooks/agent-context-guard.d.ts +1 -1
- package/dist/hooks/agent-context-guard.js +3 -3
- package/dist/hooks/agent-context-guard.js.map +1 -1
- package/dist/hooks/before-start.d.ts +1 -1
- package/dist/hooks/before-start.d.ts.map +1 -1
- package/dist/hooks/before-start.js +14 -12
- package/dist/hooks/before-start.js.map +1 -1
- package/dist/hooks/failure-recovery.d.ts +1 -1
- package/dist/hooks/failure-recovery.js +2 -2
- package/dist/hooks/failure-recovery.js.map +1 -1
- package/dist/hooks/impact-state.d.ts +2 -2
- package/dist/hooks/impact-state.js +5 -5
- package/dist/hooks/impact-state.js.map +1 -1
- package/dist/hooks/issue-guard.d.ts +1 -1
- package/dist/hooks/issue-guard.js +1 -1
- package/dist/hooks/pre-edit.d.ts +1 -1
- package/dist/hooks/pre-edit.js +2 -2
- package/dist/hooks/pre-edit.js.map +1 -1
- package/dist/hooks/safety.d.ts +3 -3
- package/dist/hooks/safety.d.ts.map +1 -1
- package/dist/hooks/safety.js +14 -14
- package/dist/hooks/safety.js.map +1 -1
- package/dist/hooks/shazam-guide.d.ts.map +1 -1
- package/dist/hooks/shazam-guide.js +11 -10
- package/dist/hooks/shazam-guide.js.map +1 -1
- package/dist/hooks/stop-verify.d.ts +1 -1
- package/dist/hooks/stop-verify.d.ts.map +1 -1
- package/dist/hooks/stop-verify.js +6 -2
- package/dist/hooks/stop-verify.js.map +1 -1
- package/dist/hooks/tool-logger.d.ts.map +1 -1
- package/dist/hooks/tool-logger.js +5 -3
- package/dist/hooks/tool-logger.js.map +1 -1
- package/dist/hooks/verify-state.d.ts +13 -2
- package/dist/hooks/verify-state.d.ts.map +1 -1
- package/dist/hooks/verify-state.js +31 -4
- package/dist/hooks/verify-state.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -21
- package/dist/index.js.map +1 -1
- package/dist/lsp/client.d.ts +17 -15
- package/dist/lsp/client.d.ts.map +1 -1
- package/dist/lsp/client.js +74 -65
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.d.ts.map +1 -1
- package/dist/lsp/manager.js +51 -25
- package/dist/lsp/manager.js.map +1 -1
- package/dist/lsp/servers.d.ts +2 -2
- package/dist/lsp/servers.d.ts.map +1 -1
- package/dist/lsp/servers.js +13 -13
- package/dist/lsp/servers.js.map +1 -1
- package/dist/lsp/setup.d.ts +1 -1
- package/dist/lsp/setup.js +4 -4
- package/dist/mcp/entry.js +7 -5
- package/dist/mcp/entry.js.map +1 -1
- package/dist/mcp/tools.d.ts +2 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +38 -6
- package/dist/mcp/tools.js.map +1 -1
- package/dist/tools/_context.d.ts +7 -2
- package/dist/tools/_context.d.ts.map +1 -1
- package/dist/tools/_context.js +12 -5
- package/dist/tools/_context.js.map +1 -1
- package/dist/tools/_factory.d.ts +4 -4
- package/dist/tools/_factory.d.ts.map +1 -1
- package/dist/tools/_factory.js +11 -9
- package/dist/tools/_factory.js.map +1 -1
- package/dist/tools/changes.d.ts +1 -1
- package/dist/tools/changes.js +3 -3
- package/dist/tools/definitions.d.ts +2 -2
- package/dist/tools/definitions.js +10 -10
- package/dist/tools/find_tests.js +2 -2
- package/dist/tools/format.d.ts +3 -3
- package/dist/tools/format.d.ts.map +1 -1
- package/dist/tools/format.js +116 -102
- package/dist/tools/format.js.map +1 -1
- package/dist/tools/impact.d.ts +1 -1
- package/dist/tools/impact.d.ts.map +1 -1
- package/dist/tools/impact.js +18 -12
- package/dist/tools/impact.js.map +1 -1
- package/dist/tools/lookup.d.ts +1 -1
- package/dist/tools/lookup.d.ts.map +1 -1
- package/dist/tools/lookup.js +99 -72
- package/dist/tools/lookup.js.map +1 -1
- package/dist/tools/lsp_enrich.d.ts +3 -1
- package/dist/tools/lsp_enrich.d.ts.map +1 -1
- package/dist/tools/lsp_enrich.js +54 -28
- package/dist/tools/lsp_enrich.js.map +1 -1
- package/dist/tools/overview.d.ts +1 -1
- package/dist/tools/overview.d.ts.map +1 -1
- package/dist/tools/overview.js +25 -20
- package/dist/tools/overview.js.map +1 -1
- package/dist/tools/rename_symbol.d.ts +1 -1
- package/dist/tools/rename_symbol.d.ts.map +1 -1
- package/dist/tools/rename_symbol.js +29 -18
- package/dist/tools/rename_symbol.js.map +1 -1
- package/dist/tools/safe_delete.d.ts +1 -1
- package/dist/tools/safe_delete.js +1 -1
- package/dist/tools/verify.d.ts +4 -4
- package/dist/tools/verify.js +33 -33
- package/dist/tools/verify.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Use this only if you are **not** using Pi agent. The MCP interface provides the
|
|
|
43
43
|
"mcpServers": {
|
|
44
44
|
"pi-shazam": {
|
|
45
45
|
"command": "npx",
|
|
46
|
-
"args": ["-y", "-p", "pi-shazam", "pi-shazam-mcp"]
|
|
46
|
+
"args": ["-y", "-p", "pi-shazam@latest", "pi-shazam-mcp"]
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
package/dist/core/audit-log.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/audit-log
|
|
2
|
+
* pi-shazam core/audit-log -- Unified audit log rotation.
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for audit log retention policy.
|
|
5
5
|
* Both mcp/tools.ts and hooks/tool-logger.ts delegate to rotateAuditLog().
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Max 10 MB per log file before rotation
|
|
9
9
|
* - Keep up to 5 archived copies (shazam-calls.log.1 through .5)
|
|
10
10
|
* - Max 30 days age for any single log file
|
|
11
|
-
* - On rotation: cascade-rename .4
|
|
11
|
+
* - On rotation: cascade-rename .4->.5, .3->.4, …, .log->.log.1
|
|
12
12
|
* - On age: delete the entire log file (content older than 30 days is stale)
|
|
13
13
|
*/
|
|
14
14
|
/** Default directory for shazam audit logs. */
|
|
@@ -22,9 +22,9 @@ export declare const MAX_AUDIT_LOG_AGE_MS: number;
|
|
|
22
22
|
/**
|
|
23
23
|
* Rotate the audit log at `logPath`.
|
|
24
24
|
*
|
|
25
|
-
* - If file size exceeds MAX_AUDIT_LOG_SIZE
|
|
26
|
-
* (log.4
|
|
27
|
-
* - If file age exceeds MAX_AUDIT_LOG_AGE_MS
|
|
25
|
+
* - If file size exceeds MAX_AUDIT_LOG_SIZE -> cascade-rename archived copies
|
|
26
|
+
* (log.4->log.5, …, log->log.1) and let a new log file be created on next write.
|
|
27
|
+
* - If file age exceeds MAX_AUDIT_LOG_AGE_MS -> delete the file (it will be
|
|
28
28
|
* recreated on next write with fresh content).
|
|
29
29
|
*/
|
|
30
30
|
export declare function rotateAuditLog(logPath: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,aAAa,QAA2C,CAAC;AAEtE,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AAEnD,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,QAA2B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,aAAa,QAA2C,CAAC;AAEtE,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AAEnD,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,QAA2B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnE"}
|
package/dist/core/audit-log.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/audit-log
|
|
2
|
+
* pi-shazam core/audit-log -- Unified audit log rotation.
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for audit log retention policy.
|
|
5
5
|
* Both mcp/tools.ts and hooks/tool-logger.ts delegate to rotateAuditLog().
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Max 10 MB per log file before rotation
|
|
9
9
|
* - Keep up to 5 archived copies (shazam-calls.log.1 through .5)
|
|
10
10
|
* - Max 30 days age for any single log file
|
|
11
|
-
* - On rotation: cascade-rename .4
|
|
11
|
+
* - On rotation: cascade-rename .4->.5, .3->.4, …, .log->.log.1
|
|
12
12
|
* - On age: delete the entire log file (content older than 30 days is stale)
|
|
13
13
|
*/
|
|
14
14
|
import { stat, rename, unlink } from "node:fs/promises";
|
|
@@ -25,9 +25,9 @@ export const MAX_AUDIT_LOG_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
|
25
25
|
/**
|
|
26
26
|
* Rotate the audit log at `logPath`.
|
|
27
27
|
*
|
|
28
|
-
* - If file size exceeds MAX_AUDIT_LOG_SIZE
|
|
29
|
-
* (log.4
|
|
30
|
-
* - If file age exceeds MAX_AUDIT_LOG_AGE_MS
|
|
28
|
+
* - If file size exceeds MAX_AUDIT_LOG_SIZE -> cascade-rename archived copies
|
|
29
|
+
* (log.4->log.5, …, log->log.1) and let a new log file be created on next write.
|
|
30
|
+
* - If file age exceeds MAX_AUDIT_LOG_AGE_MS -> delete the file (it will be
|
|
31
31
|
* recreated on next write with fresh content).
|
|
32
32
|
*/
|
|
33
33
|
export async function rotateAuditLog(logPath) {
|
|
@@ -43,20 +43,22 @@ export async function rotateAuditLog(logPath) {
|
|
|
43
43
|
try {
|
|
44
44
|
await rename(src, dst);
|
|
45
45
|
}
|
|
46
|
-
catch {
|
|
46
|
+
catch (err) {
|
|
47
47
|
// file may not exist yet
|
|
48
|
+
console.warn(`[pi-shazam] rotateAuditLog: rename ${src} -> ${dst} failed`, err);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
// Move current log to .1
|
|
51
52
|
await rename(logPath, `${logPath}.1`);
|
|
52
53
|
}
|
|
53
54
|
else if (tooOld) {
|
|
54
|
-
// Delete the entire log
|
|
55
|
+
// Delete the entire log -- it will be recreated on next write
|
|
55
56
|
await unlink(logPath);
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
|
-
catch {
|
|
59
|
-
// File may not exist yet
|
|
59
|
+
catch (err) {
|
|
60
|
+
// File may not exist yet -- first write creates it
|
|
61
|
+
console.warn(`[pi-shazam] rotateAuditLog: stat/unlink failed for ${logPath}`, err);
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
//# sourceMappingURL=audit-log.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEtE,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IACnD,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,GAAG,oBAAoB,CAAC;QAE9D,IAAI,MAAM,EAAE,CAAC;YACZ,2CAA2C;YAC3C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxB,CAAC;gBAAC,
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../core/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEtE,iDAAiD;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IACnD,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,GAAG,oBAAoB,CAAC;QAE9D,IAAI,MAAM,EAAE,CAAC;YACZ,2CAA2C;YAC3C,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,yBAAyB;oBACzB,OAAO,CAAC,IAAI,CAAC,sCAAsC,GAAG,OAAO,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;gBACjF,CAAC;YACF,CAAC;YACD,yBAAyB;YACzB,MAAM,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YACnB,8DAA8D;YAC9D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,sDAAsD,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;AACF,CAAC"}
|
package/dist/core/baseline.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/baseline
|
|
2
|
+
* pi-shazam core/baseline -- In-memory session baseline for diff-aware verify.
|
|
3
3
|
*
|
|
4
4
|
* Captures project health at session start (LSP errors/warnings, orphan
|
|
5
5
|
* symbols, graph edges) so post-edit verify output can show what changed
|
package/dist/core/baseline.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/baseline
|
|
2
|
+
* pi-shazam core/baseline -- In-memory session baseline for diff-aware verify.
|
|
3
3
|
*
|
|
4
4
|
* Captures project health at session start (LSP errors/warnings, orphan
|
|
5
5
|
* symbols, graph edges) so post-edit verify output can show what changed
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { getGraphEdgeCount } from "./graph.js";
|
|
13
13
|
import { findOrphans } from "./filter.js";
|
|
14
|
-
//
|
|
14
|
+
// -- Session baseline state (in-memory) ----------------------------------------
|
|
15
15
|
let _baseline = null;
|
|
16
16
|
let _previousOrphans = new Map();
|
|
17
17
|
/**
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/cache
|
|
2
|
+
* pi-shazam core/cache -- Graph baseline save/diff for incremental analysis.
|
|
3
3
|
*
|
|
4
4
|
* Provides persistent graph caching with mtime-based invalidation.
|
|
5
5
|
* Stores cache under ~/.cache/repomap/<project-slug> for process-isolated
|
package/dist/core/cache.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/cache
|
|
2
|
+
* pi-shazam core/cache -- Graph baseline save/diff for incremental analysis.
|
|
3
3
|
*
|
|
4
4
|
* Provides persistent graph caching with mtime-based invalidation.
|
|
5
5
|
* Stores cache under ~/.cache/repomap/<project-slug> for process-isolated
|
|
@@ -10,7 +10,7 @@ import { join, dirname } from "node:path";
|
|
|
10
10
|
import { homedir } from "node:os";
|
|
11
11
|
import { createHash } from "node:crypto";
|
|
12
12
|
import { serializeGraphV2, deserializeGraphV2 } from "./graph.js";
|
|
13
|
-
//
|
|
13
|
+
// -- Cache directory management -----------------------------------------------
|
|
14
14
|
const CACHE_ROOT = join(homedir(), ".cache", "repomap");
|
|
15
15
|
/**
|
|
16
16
|
* Get the cache directory for a specific project.
|
|
@@ -24,9 +24,9 @@ export function getProjectCacheDir(projectPath) {
|
|
|
24
24
|
mkdirSync(cacheDir, { recursive: true });
|
|
25
25
|
return cacheDir;
|
|
26
26
|
}
|
|
27
|
-
//
|
|
27
|
+
// -- Persistent graph cache (V2) ----------------------------------------------
|
|
28
28
|
/** Max age for a cached graph file before it is considered stale. */
|
|
29
|
-
const CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 1 day
|
|
29
|
+
const CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 1 day - prevents stale cache in active projects (fixes #100)
|
|
30
30
|
/**
|
|
31
31
|
* Atomically rename a temp file to a target path, handling Windows EPERM/EBUSY
|
|
32
32
|
* by unlinking the target first and retrying.
|
package/dist/core/encoding.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/encoding
|
|
2
|
+
* pi-shazam core/encoding -- Adaptive file encoding reader.
|
|
3
3
|
*
|
|
4
|
-
* Reads files with UTF-8
|
|
4
|
+
* Reads files with UTF-8 -> GBK -> GB2312 fallback.
|
|
5
5
|
* Includes OOM protection via file size limits (2MB max) and
|
|
6
6
|
* encoding validation on first 64KB chunk to reduce memory pressure.
|
|
7
7
|
*/
|
|
@@ -30,7 +30,7 @@ export declare class FileTooLargeError extends Error {
|
|
|
30
30
|
export declare function readFileAdaptive(filePath: string): string;
|
|
31
31
|
/**
|
|
32
32
|
* Async variant of readFileAdaptive using fs.promises.
|
|
33
|
-
* Same encoding fallback logic (UTF-8
|
|
33
|
+
* Same encoding fallback logic (UTF-8 -> GBK -> GB2312) but non-blocking.
|
|
34
34
|
* Use this in async contexts (e.g., LSP enrichment) to avoid blocking the event loop.
|
|
35
35
|
*/
|
|
36
36
|
export declare function readFileAdaptiveAsync(filePath: string): Promise<string>;
|
package/dist/core/encoding.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/encoding
|
|
2
|
+
* pi-shazam core/encoding -- Adaptive file encoding reader.
|
|
3
3
|
*
|
|
4
|
-
* Reads files with UTF-8
|
|
4
|
+
* Reads files with UTF-8 -> GBK -> GB2312 fallback.
|
|
5
5
|
* Includes OOM protection via file size limits (2MB max) and
|
|
6
6
|
* encoding validation on first 64KB chunk to reduce memory pressure.
|
|
7
7
|
*/
|
|
8
8
|
import { readFileSync, statSync } from "node:fs";
|
|
9
9
|
import { readFile as readFileAsync, stat as statAsync } from "node:fs/promises";
|
|
10
10
|
import iconv from "iconv-lite";
|
|
11
|
-
// Tree-sitter's MAX_PARSE_SIZE
|
|
11
|
+
// Tree-sitter's MAX_PARSE_SIZE -- skip files larger than 2MB
|
|
12
12
|
// Lowered from 10MB to reduce OOM risk on resource-constrained environments
|
|
13
13
|
// (fixes #131, #148)
|
|
14
14
|
const MAX_FILE_SIZE = 2 * 1024 * 1024;
|
|
@@ -29,10 +29,10 @@ export class FileTooLargeError extends Error {
|
|
|
29
29
|
this.limit = limit;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
// Chunk size for encoding validation
|
|
32
|
+
// Chunk size for encoding validation -- only validate first 64KB
|
|
33
33
|
// to avoid allocating huge strings for large files
|
|
34
34
|
const VALIDATION_CHUNK_SIZE = 64 * 1024;
|
|
35
|
-
//
|
|
35
|
+
// -- Encoding detection and reading -------------------------------------------
|
|
36
36
|
/**
|
|
37
37
|
* Read a file with adaptive encoding fallback:
|
|
38
38
|
* 1. Try UTF-8
|
|
@@ -59,7 +59,7 @@ export function readFileAdaptive(filePath) {
|
|
|
59
59
|
throw err; // re-throw our size error
|
|
60
60
|
}
|
|
61
61
|
console.warn(`[pi-shazam] readFileAdaptive: stat failed for ${filePath}: ${err}`);
|
|
62
|
-
// stat failed (permission, missing)
|
|
62
|
+
// stat failed (permission, missing) -- fall through to readFileSync which will error with a clearer message
|
|
63
63
|
}
|
|
64
64
|
const buffer = readFileSync(filePath);
|
|
65
65
|
// For small files (<64KB), validate full buffer
|
|
@@ -68,7 +68,7 @@ export function readFileAdaptive(filePath) {
|
|
|
68
68
|
// Try UTF-8 first
|
|
69
69
|
const utf8Result = tryDecode(validationBuffer, "utf-8");
|
|
70
70
|
if (utf8Result !== null) {
|
|
71
|
-
// UTF-8 validation passed on chunk
|
|
71
|
+
// UTF-8 validation passed on chunk -- decode full buffer
|
|
72
72
|
return buffer.length > VALIDATION_CHUNK_SIZE ? buffer.toString("utf-8") : utf8Result;
|
|
73
73
|
}
|
|
74
74
|
// Try GBK
|
|
@@ -86,7 +86,7 @@ export function readFileAdaptive(filePath) {
|
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
88
|
* Async variant of readFileAdaptive using fs.promises.
|
|
89
|
-
* Same encoding fallback logic (UTF-8
|
|
89
|
+
* Same encoding fallback logic (UTF-8 -> GBK -> GB2312) but non-blocking.
|
|
90
90
|
* Use this in async contexts (e.g., LSP enrichment) to avoid blocking the event loop.
|
|
91
91
|
*/
|
|
92
92
|
export async function readFileAdaptiveAsync(filePath) {
|
|
@@ -102,7 +102,7 @@ export async function readFileAdaptiveAsync(filePath) {
|
|
|
102
102
|
throw err;
|
|
103
103
|
}
|
|
104
104
|
console.warn(`[pi-shazam] readFileAdaptiveAsync: stat failed for ${filePath}: ${err}`);
|
|
105
|
-
// stat failed
|
|
105
|
+
// stat failed -- fall through to readFile which will error with a clearer message
|
|
106
106
|
}
|
|
107
107
|
const buffer = await readFileAsync(filePath);
|
|
108
108
|
// For small files (<64KB), validate full buffer
|
|
@@ -126,7 +126,7 @@ export async function readFileAdaptiveAsync(filePath) {
|
|
|
126
126
|
// Last resort: UTF-8 with replacement
|
|
127
127
|
return buffer.toString("utf-8");
|
|
128
128
|
}
|
|
129
|
-
//
|
|
129
|
+
// -- Internal helpers ---------------------------------------------------------
|
|
130
130
|
/**
|
|
131
131
|
* Validate that a buffer contains only valid UTF-8 byte sequences.
|
|
132
132
|
* Performs byte-level validation: rejects overlong encodings, lone continuation
|
|
@@ -219,7 +219,7 @@ function tryDecode(buffer, encoding) {
|
|
|
219
219
|
return null;
|
|
220
220
|
// Replacement-character ratio check (#368): iconv-lite emits U+FFFD for
|
|
221
221
|
// unmappable bytes. If >5% of decoded characters are replacements,
|
|
222
|
-
// the encoding is wrong
|
|
222
|
+
// the encoding is wrong -- reject to try the next fallback.
|
|
223
223
|
let replacementCount = 0;
|
|
224
224
|
for (const ch of str) {
|
|
225
225
|
if (ch === "�")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../core/encoding.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../core/encoding.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,6DAA6D;AAC7D,4EAA4E;AAC5E,qBAAqB;AACrB,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC3B,IAAI,CAAS;IACb,IAAI,CAAS;IACb,KAAK,CAAS;IAE9B,YAAY,IAAY,EAAE,IAAY,EAAE,KAAa;QACpD,KAAK,CAAC,mBAAmB,IAAI,YAAY,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;CACD;AAED,iEAAiE;AACjE,mDAAmD;AACnD,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,gFAAgF;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAChD,gDAAgD;IAChD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACtC,MAAM,GAAG,CAAC,CAAC,0BAA0B;QACtC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,iDAAiD,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QAClF,4GAA4G;IAC7G,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEtC,gDAAgD;IAChD,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpH,kBAAkB;IAClB,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACzB,yDAAyD;QACzD,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACtF,CAAC;IAED,UAAU;IACV,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1F,CAAC;IAED,sCAAsC;IACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IAC3D,gDAAgD;IAChD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACtC,MAAM,GAAG,CAAC;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,sDAAsD,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QACvF,kFAAkF;IACnF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE7C,gDAAgD;IAChD,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpH,kBAAkB;IAClB,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACtF,CAAC;IAED,UAAU;IACV,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1F,CAAC;IAED,sCAAsC;IACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,gFAAgF;AAEhF;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,MAAc;IAClC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAExB,iCAAiC;QACjC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YACjB,CAAC,EAAE,CAAC;YACJ,SAAS;QACV,CAAC;QAED,2CAA2C;QAC3C,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW;QACxB,CAAC;aAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW;QACxB,CAAC;aAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW;QACxB,CAAC;aAAM,CAAC;YACP,iEAAiE;YACjE,OAAO,KAAK,CAAC;QACd,CAAC;QAED,yCAAyC;QACzC,kEAAkE;QAClE,+DAA+D;QAC/D,4DAA4D;QAC5D,yDAAyD;QACzD,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM;QAEtC,6CAA6C;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QAED,2CAA2C;QAC3C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;YAC1D,IAAI,EAAE,GAAG,IAAI;gBAAE,OAAO,KAAK,CAAC,CAAC,gCAAgC;QAC9D,CAAC;aAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;YAC5F,IAAI,EAAE,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,iCAAiC;YAC/D,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM;gBAAE,OAAO,KAAK,CAAC,CAAC,YAAY;QAC7D,CAAC;aAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,GACP,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,GAAG,OAAO;gBAAE,OAAO,KAAK,CAAC,CAAC,iCAAiC;YACjE,IAAI,EAAE,GAAG,QAAQ;gBAAE,OAAO,KAAK,CAAC,CAAC,uBAAuB;QACzD,CAAC;QAED,CAAC,IAAI,MAAM,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,QAAgB;IAClD,IAAI,CAAC;QACJ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC1B,sEAAsE;YACtE,iDAAiD;YACjD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,wDAAwD;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,gEAAgE;QAChE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,wEAAwE;QACxE,oEAAoE;QACpE,4DAA4D;QAC5D,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,EAAE,KAAK,GAAG;gBAAE,gBAAgB,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,gBAAgB,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO,GAAG,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
|
package/dist/core/filter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/filter
|
|
2
|
+
* pi-shazam core/filter -- Shared file filtering utilities.
|
|
3
3
|
*
|
|
4
4
|
* Centralises the "is this a source file?" logic used by hotspots, orphan,
|
|
5
5
|
* verify, overview, and check tools. Keeps filtering consistent across the
|
|
@@ -26,13 +26,13 @@ export declare function isTrackableEditedPath(normalizedPath: string): boolean;
|
|
|
26
26
|
* Returns symbols with zero incoming references, excluding:
|
|
27
27
|
* - Non-source files (config, lockfiles, node_modules, dist)
|
|
28
28
|
* - ALL exported symbols (consumers are external to the scanned graph)
|
|
29
|
-
* - .d.ts ambient declaration files (issue #244
|
|
29
|
+
* - .d.ts ambient declaration files (issue #244 -- ambient types are consumed
|
|
30
30
|
* via global scope or type-only imports invisible to symbol-level refs)
|
|
31
31
|
* - Files imported purely for side effects (no named/namespace binding from
|
|
32
|
-
* any importer
|
|
32
|
+
* any importer -- issue #243). Files with bindings retain full detection
|
|
33
33
|
* so unused internals in namespace-imported modules still surface (#246).
|
|
34
34
|
* - PascalCase functions/classes in .tsx/.jsx files (React components
|
|
35
|
-
* consumed via JSX, which does not create a symbol-level ref
|
|
35
|
+
* consumed via JSX, which does not create a symbol-level ref -- #249)
|
|
36
36
|
* - Anonymous functions (no name to reference)
|
|
37
37
|
* - Test files
|
|
38
38
|
* - Registration functions (register*, createTool) called by MCP/extension frameworks
|
package/dist/core/filter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/filter
|
|
2
|
+
* pi-shazam core/filter -- Shared file filtering utilities.
|
|
3
3
|
*
|
|
4
4
|
* Centralises the "is this a source file?" logic used by hotspots, orphan,
|
|
5
5
|
* verify, overview, and check tools. Keeps filtering consistent across the
|
|
@@ -45,7 +45,7 @@ function moduleMatchesFile(resolvedModule, targetFile) {
|
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
-
* Config files, generated files, and lockfiles
|
|
48
|
+
* Config files, generated files, and lockfiles -- excluded from source-file
|
|
49
49
|
* analysis (hotspots, orphan detection, overview, check).
|
|
50
50
|
*
|
|
51
51
|
* The list is deliberately narrow: it covers *non-source* files that
|
|
@@ -169,7 +169,7 @@ function isEntryPointSymbol(name, kind) {
|
|
|
169
169
|
return true;
|
|
170
170
|
if (name === "Drop" && kind === "trait")
|
|
171
171
|
return true;
|
|
172
|
-
// Rust standard trait implementations
|
|
172
|
+
// Rust standard trait implementations -- these are dispatched by the
|
|
173
173
|
// compiler or standard library, never called by name in user code.
|
|
174
174
|
// Without this, every `impl Clone for Foo` etc. is a false orphan.
|
|
175
175
|
if (kind === "impl" || kind === "trait") {
|
|
@@ -213,7 +213,7 @@ function isEntryPointSymbol(name, kind) {
|
|
|
213
213
|
return true;
|
|
214
214
|
if (name === "init" && kind === "function")
|
|
215
215
|
return true;
|
|
216
|
-
// Rust module declarations are structural
|
|
216
|
+
// Rust module declarations are structural -- they namespace items but
|
|
217
217
|
// are never referenced by name at runtime.
|
|
218
218
|
if (kind === "module")
|
|
219
219
|
return true;
|
|
@@ -261,13 +261,13 @@ function isFrameworkHandler(name, file, kind) {
|
|
|
261
261
|
* Returns symbols with zero incoming references, excluding:
|
|
262
262
|
* - Non-source files (config, lockfiles, node_modules, dist)
|
|
263
263
|
* - ALL exported symbols (consumers are external to the scanned graph)
|
|
264
|
-
* - .d.ts ambient declaration files (issue #244
|
|
264
|
+
* - .d.ts ambient declaration files (issue #244 -- ambient types are consumed
|
|
265
265
|
* via global scope or type-only imports invisible to symbol-level refs)
|
|
266
266
|
* - Files imported purely for side effects (no named/namespace binding from
|
|
267
|
-
* any importer
|
|
267
|
+
* any importer -- issue #243). Files with bindings retain full detection
|
|
268
268
|
* so unused internals in namespace-imported modules still surface (#246).
|
|
269
269
|
* - PascalCase functions/classes in .tsx/.jsx files (React components
|
|
270
|
-
* consumed via JSX, which does not create a symbol-level ref
|
|
270
|
+
* consumed via JSX, which does not create a symbol-level ref -- #249)
|
|
271
271
|
* - Anonymous functions (no name to reference)
|
|
272
272
|
* - Test files
|
|
273
273
|
* - Registration functions (register*, createTool) called by MCP/extension frameworks
|
|
@@ -287,7 +287,7 @@ export function findOrphans(graph) {
|
|
|
287
287
|
// create file-level edges but no symbol-level bindings, so their
|
|
288
288
|
// symbols would otherwise be reported as orphans.
|
|
289
289
|
//
|
|
290
|
-
// Files imported via named/namespace imports are NOT in this set
|
|
290
|
+
// Files imported via named/namespace imports are NOT in this set --
|
|
291
291
|
// they have bindings and their unused internal symbols should still be
|
|
292
292
|
// reported (issue #246).
|
|
293
293
|
const sideEffectOnlyFiles = new Set();
|
|
@@ -305,19 +305,19 @@ export function findOrphans(graph) {
|
|
|
305
305
|
for (const sym of graph.symbols.values()) {
|
|
306
306
|
if (isNonSourceFile(sym.file))
|
|
307
307
|
continue;
|
|
308
|
-
// Skip .d.ts ambient declaration files
|
|
308
|
+
// Skip .d.ts ambient declaration files -- by design, their symbols
|
|
309
309
|
// are consumed via global scope or type-only imports, neither of
|
|
310
310
|
// which produces a symbol-level reference in the graph (issue #244).
|
|
311
311
|
if (sym.file.endsWith(".d.ts"))
|
|
312
312
|
continue;
|
|
313
|
-
// Skip ALL exported symbols
|
|
313
|
+
// Skip ALL exported symbols -- external consumers are invisible to
|
|
314
314
|
// tree-sitter scan, so zero internal refs does not mean dead code.
|
|
315
315
|
if (sym.visibility === "exported")
|
|
316
316
|
continue;
|
|
317
317
|
// Skip symbols in side-effect-only imported modules (issue #243).
|
|
318
318
|
if (sideEffectOnlyFiles.has(sym.file))
|
|
319
319
|
continue;
|
|
320
|
-
// Skip PascalCase functions/classes in .tsx/.jsx files
|
|
320
|
+
// Skip PascalCase functions/classes in .tsx/.jsx files -- they are
|
|
321
321
|
// almost certainly React components consumed via `<Component />`
|
|
322
322
|
// JSX syntax, which does not create a symbol-level reference
|
|
323
323
|
// in the graph (issue #249).
|
|
@@ -339,7 +339,7 @@ export function findOrphans(graph) {
|
|
|
339
339
|
// Skip anonymous functions
|
|
340
340
|
if (sym.kind === "anonymous_function")
|
|
341
341
|
continue;
|
|
342
|
-
// Skip impl blocks
|
|
342
|
+
// Skip impl blocks -- they are structural declarations (impl Foo { ... })
|
|
343
343
|
// and are never referenced by name in the call graph (fixes #252).
|
|
344
344
|
if (sym.kind === "impl")
|
|
345
345
|
continue;
|
package/dist/core/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../core/filter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../core/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/formatters
|
|
2
|
+
* pi-shazam core/formatters -- Shared formatter detection.
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for detecting which formatters/linters are
|
|
5
5
|
* configured in a project. Consumed by tools/fix.ts and hooks/shazam-guide.ts.
|
package/dist/core/formatters.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/formatters
|
|
2
|
+
* pi-shazam core/formatters -- Shared formatter detection.
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for detecting which formatters/linters are
|
|
5
5
|
* configured in a project. Consumed by tools/fix.ts and hooks/shazam-guide.ts.
|
|
@@ -45,7 +45,7 @@ export function detectFormatters(projectRoot) {
|
|
|
45
45
|
}
|
|
46
46
|
catch {
|
|
47
47
|
console.warn("[pi-shazam] detectFormatters: package.json not found or invalid");
|
|
48
|
-
// package.json not found or invalid
|
|
48
|
+
// package.json not found or invalid -- continue
|
|
49
49
|
}
|
|
50
50
|
// .editorconfig
|
|
51
51
|
if (existsSync(join(projectRoot, ".editorconfig"))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../core/formatters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IACnD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,qCAAqC;IACrC,IACC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EACnD,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;IACT,IACC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC9C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC9C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EACjD,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,QAAQ;IACR,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QACjG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,yCAAyC;IACzC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,QAAQ;YAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,YAAY;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../core/formatters.ts"],"names":[],"mappings":"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"}
|
package/dist/core/git-hooks.d.ts
CHANGED
package/dist/core/git-hooks.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* pi-shazam core/git-hooks
|
|
2
|
+
* pi-shazam core/git-hooks -- Git pre-commit hook integration.
|
|
3
3
|
*
|
|
4
4
|
* Installs a pre-commit hook that runs shazam_verify --preCommit
|
|
5
5
|
* before allowing a commit. Blocks commit on FAIL verdict.
|
|
@@ -22,7 +22,7 @@ import { execFileSync } from "node:child_process";
|
|
|
22
22
|
* Use 'git commit --no-verify' to bypass.
|
|
23
23
|
*/
|
|
24
24
|
const PRE_COMMIT_HOOK_CONTENT = `#!/bin/bash
|
|
25
|
-
# shazam pre-commit hook
|
|
25
|
+
# shazam pre-commit hook - auto-installed by pi-shazam
|
|
26
26
|
# Detects project language and runs appropriate checks.
|
|
27
27
|
# Use 'git commit --no-verify' to bypass.
|
|
28
28
|
|
|
@@ -44,7 +44,7 @@ echo "[shazam] Checking $CHANGED_FILES changed file(s)..."
|
|
|
44
44
|
|
|
45
45
|
ERRORS=0
|
|
46
46
|
|
|
47
|
-
#
|
|
47
|
+
# -- TypeScript/JavaScript ----------------------------------------------
|
|
48
48
|
if [ -f "tsconfig.json" ] || [ -f "package.json" ]; then
|
|
49
49
|
# Type check
|
|
50
50
|
if command -v npx &>/dev/null; then
|
|
@@ -73,7 +73,7 @@ if [ -f "tsconfig.json" ] || [ -f "package.json" ]; then
|
|
|
73
73
|
fi
|
|
74
74
|
fi
|
|
75
75
|
|
|
76
|
-
#
|
|
76
|
+
# -- Rust ---------------------------------------------------------------
|
|
77
77
|
if [ -f "Cargo.toml" ]; then
|
|
78
78
|
if command -v cargo &>/dev/null; then
|
|
79
79
|
echo "[shazam] Running cargo check..."
|
|
@@ -93,7 +93,7 @@ if [ -f "Cargo.toml" ]; then
|
|
|
93
93
|
fi
|
|
94
94
|
fi
|
|
95
95
|
|
|
96
|
-
#
|
|
96
|
+
# -- Go -----------------------------------------------------------------
|
|
97
97
|
if [ -f "go.mod" ]; then
|
|
98
98
|
if command -v go &>/dev/null; then
|
|
99
99
|
echo "[shazam] Running go vet..."
|
|
@@ -113,7 +113,7 @@ if [ -f "go.mod" ]; then
|
|
|
113
113
|
fi
|
|
114
114
|
fi
|
|
115
115
|
|
|
116
|
-
#
|
|
116
|
+
# -- Python -------------------------------------------------------------
|
|
117
117
|
if [ -f "pyproject.toml" ] || [ -f "setup.py" ] || [ -f "requirements.txt" ]; then
|
|
118
118
|
# Type check (pyright or mypy)
|
|
119
119
|
if command -v pyright &>/dev/null; then
|
|
@@ -140,7 +140,7 @@ if [ -f "pyproject.toml" ] || [ -f "setup.py" ] || [ -f "requirements.txt" ]; th
|
|
|
140
140
|
fi
|
|
141
141
|
fi
|
|
142
142
|
|
|
143
|
-
#
|
|
143
|
+
# -- Summary ------------------------------------------------------------
|
|
144
144
|
if [ $ERRORS -gt 0 ]; then
|
|
145
145
|
echo "[shazam] FAIL: $ERRORS check(s) failed."
|
|
146
146
|
echo "[shazam] Fix errors or use 'git commit --no-verify' to bypass."
|
|
@@ -291,7 +291,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
291
291
|
}
|
|
292
292
|
const changedFiles = changedOutput.split("\n").filter(Boolean);
|
|
293
293
|
const errors = [];
|
|
294
|
-
//
|
|
294
|
+
// -- TypeScript/JavaScript ------------------------------------------
|
|
295
295
|
if (existsSync(join(projectRoot, "tsconfig.json"))) {
|
|
296
296
|
try {
|
|
297
297
|
execFileSync("npx", ["--no-install", "tsc", "--noEmit"], {
|
|
@@ -306,7 +306,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
306
306
|
errors.push(`TypeScript typecheck failed: ${String(stderr).slice(0, 500)}`);
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
|
-
//
|
|
309
|
+
// -- Rust -----------------------------------------------------------
|
|
310
310
|
if (existsSync(join(projectRoot, "Cargo.toml"))) {
|
|
311
311
|
try {
|
|
312
312
|
execFileSync("cargo", ["check"], {
|
|
@@ -321,7 +321,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
321
321
|
errors.push(`cargo check failed: ${String(stderr).slice(0, 500)}`);
|
|
322
322
|
}
|
|
323
323
|
}
|
|
324
|
-
//
|
|
324
|
+
// -- Go -------------------------------------------------------------
|
|
325
325
|
if (existsSync(join(projectRoot, "go.mod"))) {
|
|
326
326
|
try {
|
|
327
327
|
execFileSync("go", ["vet", "./..."], {
|
|
@@ -336,7 +336,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
336
336
|
errors.push(`go vet failed: ${String(stderr).slice(0, 500)}`);
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
|
-
//
|
|
339
|
+
// -- Python ---------------------------------------------------------
|
|
340
340
|
if (existsSync(join(projectRoot, "pyproject.toml")) || existsSync(join(projectRoot, "setup.py"))) {
|
|
341
341
|
// Try pyright first, then mypy
|
|
342
342
|
let pyrightAvailable = false;
|
|
@@ -353,7 +353,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
353
353
|
const errnoErr = err;
|
|
354
354
|
const stderr = errnoErr?.stderr ?? "";
|
|
355
355
|
if (errnoErr.code === "ENOENT" || errnoErr.status === 127) {
|
|
356
|
-
// pyright not installed
|
|
356
|
+
// pyright not installed -- try mypy
|
|
357
357
|
}
|
|
358
358
|
else {
|
|
359
359
|
// pyright found type errors
|
|
@@ -376,7 +376,7 @@ export function runPreCommitVerify(projectRoot) {
|
|
|
376
376
|
}
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
|
-
//
|
|
379
|
+
// -- Summary --------------------------------------------------------
|
|
380
380
|
if (errors.length > 0) {
|
|
381
381
|
return {
|
|
382
382
|
verdict: "FAIL",
|