pi-shazam 0.6.3 → 0.7.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.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * pi-shazam hooks/failure-recovery — Detect consecutive failures and suggest alternatives.
3
+ *
4
+ * When the LLM repeatedly fails at the same task, this hook:
5
+ * 1. Tracks failure patterns per tool
6
+ * 2. After 3 consecutive failures, suggests a different approach
7
+ * 3. After 5 consecutive failures, strongly suggests reorienting with shazam_overview
8
+ *
9
+ * This prevents LLM loops where it keeps trying the same failing approach.
10
+ *
11
+ * Uses tool_result event with isError flag.
12
+ */
13
+ import type { ExtensionAPI } from "../types/pi-extension.js";
14
+ /**
15
+ * Register the failure-recovery hook.
16
+ *
17
+ * On tool_result with isError, tracks failures and suggests alternatives
18
+ * after repeated failures.
19
+ */
20
+ export declare function registerFailureRecovery(pi: ExtensionAPI): void;
21
+ //# sourceMappingURL=failure-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-recovery.d.ts","sourceRoot":"","sources":["../../hooks/failure-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA4F7D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA2B9D"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * pi-shazam hooks/failure-recovery — Detect consecutive failures and suggest alternatives.
3
+ *
4
+ * When the LLM repeatedly fails at the same task, this hook:
5
+ * 1. Tracks failure patterns per tool
6
+ * 2. After 3 consecutive failures, suggests a different approach
7
+ * 3. After 5 consecutive failures, strongly suggests reorienting with shazam_overview
8
+ *
9
+ * This prevents LLM loops where it keeps trying the same failing approach.
10
+ *
11
+ * Uses tool_result event with isError flag.
12
+ */
13
+ /**
14
+ * Failure tracker: tool name -> consecutive failure count.
15
+ */
16
+ const _failureCounts = new Map();
17
+ /**
18
+ * Track which tools have been warned about (to avoid repeated warnings).
19
+ */
20
+ const _warnedTools = new Set();
21
+ /**
22
+ * Reset failure count for a tool (called on success).
23
+ */
24
+ function resetFailure(toolName) {
25
+ _failureCounts.delete(toolName);
26
+ _warnedTools.delete(toolName);
27
+ }
28
+ /**
29
+ * Increment failure count and return new count.
30
+ */
31
+ function incrementFailure(toolName) {
32
+ const current = _failureCounts.get(toolName) || 0;
33
+ const newCount = current + 1;
34
+ _failureCounts.set(toolName, newCount);
35
+ return newCount;
36
+ }
37
+ /**
38
+ * Get suggestion based on failure count and tool type.
39
+ */
40
+ function getSuggestion(toolName, failCount) {
41
+ // After 5 failures: strong intervention
42
+ if (failCount >= 5) {
43
+ return [
44
+ "[shazam] You've been stuck for a while.",
45
+ "",
46
+ "Consider:",
47
+ "1. Run `shazam_overview` to reorient yourself",
48
+ "2. Simplify the current task",
49
+ "3. Ask the user for clarification",
50
+ ].join("\n");
51
+ }
52
+ // After 3 failures: suggest alternatives
53
+ if (failCount >= 3 && !_warnedTools.has(toolName)) {
54
+ _warnedTools.add(toolName);
55
+ switch (toolName) {
56
+ case "bash":
57
+ return [
58
+ "[shazam] Bash command failed 3x consecutively.",
59
+ "",
60
+ "Try a different approach:",
61
+ "- Use `shazam_codesearch` instead of grep/find",
62
+ "- Use `shazam_file_detail` to understand file structure first",
63
+ "- Break the command into smaller steps",
64
+ ].join("\n");
65
+ case "edit":
66
+ return [
67
+ "[shazam] Edit failed 3x consecutively.",
68
+ "",
69
+ "Try:",
70
+ "- Use `shazam_file_detail` to see the current file structure",
71
+ "- Use `shazam_symbol` to understand the symbol you're editing",
72
+ "- Read the file first with `read` to see current content",
73
+ ].join("\n");
74
+ case "write":
75
+ return [
76
+ "[shazam] Write failed 3x consecutively.",
77
+ "",
78
+ "Try:",
79
+ "- Check if the directory exists",
80
+ "- Use `shazam_impact` to check if the file is referenced elsewhere",
81
+ ].join("\n");
82
+ default:
83
+ return [
84
+ `[shazam] ${toolName} failed 3x consecutively.`,
85
+ "",
86
+ "Consider running `shazam_overview` to reorient.",
87
+ ].join("\n");
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * Register the failure-recovery hook.
94
+ *
95
+ * On tool_result with isError, tracks failures and suggests alternatives
96
+ * after repeated failures.
97
+ */
98
+ export function registerFailureRecovery(pi) {
99
+ pi.on("tool_result", (event, _ctx) => {
100
+ const toolName = event.toolName;
101
+ if (event.isError) {
102
+ // Track failure
103
+ const failCount = incrementFailure(toolName);
104
+ const suggestion = getSuggestion(toolName, failCount);
105
+ if (suggestion) {
106
+ pi.sendMessage({
107
+ customType: "shazam-failure-recovery",
108
+ content: suggestion,
109
+ display: false, // Inject into context, not UI
110
+ });
111
+ }
112
+ }
113
+ else {
114
+ // Success — reset failure count
115
+ resetFailure(toolName);
116
+ }
117
+ });
118
+ // Reset all counts on session start
119
+ pi.on("session_start", () => {
120
+ _failureCounts.clear();
121
+ _warnedTools.clear();
122
+ });
123
+ }
124
+ //# sourceMappingURL=failure-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-recovery.js","sourceRoot":"","sources":["../../hooks/failure-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * pi-shazam hooks/safety — Safety gate for bash commands.
3
+ *
4
+ * Provides two safety features:
5
+ * 1. Destructive command detection — shows confirmation dialog for dangerous commands
6
+ * 2. Pre-commit gate — blocks git commit if shazam_verify was not run recently
7
+ *
8
+ * Uses Pi's ctx.ui.confirm() for interactive confirmation (better than Kimi Code's
9
+ * exit 2 blocking, which gives user no choice).
10
+ */
11
+ import type { ExtensionAPI } from "../types/pi-extension.js";
12
+ /**
13
+ * Register the safety hooks.
14
+ *
15
+ * Intercepts bash tool_call events to:
16
+ * 1. Show confirmation dialog for destructive commands
17
+ * 2. Block git commit if shazam_verify was not run
18
+ */
19
+ export declare function registerSafetyHooks(pi: ExtensionAPI): void;
20
+ //# sourceMappingURL=safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../hooks/safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmH7D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoG1D"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * pi-shazam hooks/safety — Safety gate for bash commands.
3
+ *
4
+ * Provides two safety features:
5
+ * 1. Destructive command detection — shows confirmation dialog for dangerous commands
6
+ * 2. Pre-commit gate — blocks git commit if shazam_verify was not run recently
7
+ *
8
+ * Uses Pi's ctx.ui.confirm() for interactive confirmation (better than Kimi Code's
9
+ * exit 2 blocking, which gives user no choice).
10
+ */
11
+ /**
12
+ * High-risk patterns that should always trigger confirmation.
13
+ * Matched as substrings in the command.
14
+ */
15
+ const HIGH_RISK_PATTERNS = [
16
+ "rm -rf",
17
+ "rm -fr",
18
+ "rm --recursive",
19
+ "dd if=",
20
+ "mkfs",
21
+ "mkswap",
22
+ "fdisk",
23
+ "parted",
24
+ "sfdisk",
25
+ ":(){ :|:& };:", // fork bomb
26
+ ];
27
+ /**
28
+ * Medium-risk patterns that trigger confirmation.
29
+ */
30
+ const MEDIUM_RISK_PATTERNS = [
31
+ "chmod -R 777",
32
+ "chmod 777 /",
33
+ "chown -R",
34
+ "> /dev/sd",
35
+ "> /dev/nvme",
36
+ "> /dev/mmcblk",
37
+ "pvcreate",
38
+ "vgcreate",
39
+ "lvcreate",
40
+ "iptables -F",
41
+ "iptables -P",
42
+ "rm -r /",
43
+ ];
44
+ /**
45
+ * Git commit pattern for pre-commit gate.
46
+ */
47
+ const GIT_COMMIT_PATTERN = /git\s+commit/;
48
+ /**
49
+ * Check if a command matches any destructive pattern.
50
+ * Returns the risk level and matched pattern, or null if safe.
51
+ */
52
+ function detectDestructiveCommand(cmd) {
53
+ const lower = cmd.toLowerCase();
54
+ for (const pattern of HIGH_RISK_PATTERNS) {
55
+ if (lower.includes(pattern.toLowerCase())) {
56
+ return { level: "HIGH", pattern };
57
+ }
58
+ }
59
+ for (const pattern of MEDIUM_RISK_PATTERNS) {
60
+ if (lower.includes(pattern.toLowerCase())) {
61
+ return { level: "MEDIUM", pattern };
62
+ }
63
+ }
64
+ // Check for rm targeting root
65
+ if (/^rm\s+-(rf|fr|r)\s+\/(\s|$)/.test(cmd)) {
66
+ return { level: "HIGH", pattern: "rm -rf /" };
67
+ }
68
+ return null;
69
+ }
70
+ /**
71
+ * Check if shazam_verify was called recently in this session.
72
+ * Uses the tool-logger's audit log or checks in-memory state.
73
+ */
74
+ function hasRecentVerify() {
75
+ // Check if shazam_verify appears in recent tool results
76
+ // We can't directly access the tool history, so we check the audit log
77
+ try {
78
+ const { readFileSync, statSync } = require("node:fs");
79
+ const { join } = require("node:path");
80
+ const { homedir } = require("node:os");
81
+ const logFile = join(homedir(), ".pi", "hooks", "audit", "shazam-calls.log");
82
+ // Check if log file exists and was modified recently (within 5 minutes)
83
+ try {
84
+ const stat = statSync(logFile);
85
+ const fiveMinutesAgo = Date.now() - 5 * 60 * 1000;
86
+ if (stat.mtimeMs < fiveMinutesAgo) {
87
+ return false;
88
+ }
89
+ }
90
+ catch {
91
+ return false; // File doesn't exist
92
+ }
93
+ // Read last 20 lines to check for recent shazam_verify calls
94
+ const content = readFileSync(logFile, "utf-8");
95
+ const lines = content.trim().split("\n").slice(-20);
96
+ for (const line of lines) {
97
+ try {
98
+ const entry = JSON.parse(line);
99
+ if (entry.tool === "shazam_verify" && entry.event === "result") {
100
+ return true;
101
+ }
102
+ }
103
+ catch {
104
+ // Skip malformed lines
105
+ }
106
+ }
107
+ }
108
+ catch {
109
+ // If we can't check, assume verify was not run
110
+ }
111
+ return false;
112
+ }
113
+ /**
114
+ * Register the safety hooks.
115
+ *
116
+ * Intercepts bash tool_call events to:
117
+ * 1. Show confirmation dialog for destructive commands
118
+ * 2. Block git commit if shazam_verify was not run
119
+ */
120
+ export function registerSafetyHooks(pi) {
121
+ pi.on("tool_call", async (event, ctx) => {
122
+ // Only intercept bash commands
123
+ if (event.toolName !== "bash")
124
+ return;
125
+ const input = "input" in event ? event.input : {};
126
+ const cmd = input.command;
127
+ if (!cmd || typeof cmd !== "string")
128
+ return;
129
+ // ── Check 1: Destructive command detection ──
130
+ const destructive = detectDestructiveCommand(cmd);
131
+ if (destructive) {
132
+ const emoji = destructive.level === "HIGH" ? "!!!" : "!";
133
+ const message = [
134
+ `[${emoji}] Destructive command detected [${emoji}]`,
135
+ "",
136
+ `Risk level: ${destructive.level}`,
137
+ `Pattern: ${destructive.pattern}`,
138
+ `Command: ${cmd.slice(0, 200)}${cmd.length > 200 ? "..." : ""}`,
139
+ "",
140
+ "Do you want to continue?",
141
+ ].join("\n");
142
+ try {
143
+ const confirmed = await ctx.ui.confirm("Safety Warning", message);
144
+ if (!confirmed) {
145
+ return {
146
+ block: true,
147
+ reason: `Command blocked by safety check: ${destructive.pattern}`,
148
+ };
149
+ }
150
+ // User confirmed, allow the command
151
+ ctx.ui.notify?.(`Proceeding with ${destructive.level}-risk command...`, "warning");
152
+ }
153
+ catch {
154
+ // If confirm dialog fails (e.g., non-interactive mode), block high-risk
155
+ if (destructive.level === "HIGH") {
156
+ return {
157
+ block: true,
158
+ reason: `High-risk command blocked in non-interactive mode: ${destructive.pattern}`,
159
+ };
160
+ }
161
+ // Allow medium-risk in non-interactive mode
162
+ }
163
+ return;
164
+ }
165
+ // ── Check 2: Pre-commit gate ──
166
+ if (GIT_COMMIT_PATTERN.test(cmd)) {
167
+ // Skip if --no-verify flag is present
168
+ if (cmd.includes("--no-verify")) {
169
+ return;
170
+ }
171
+ // Check if shazam_verify was run recently
172
+ if (!hasRecentVerify()) {
173
+ try {
174
+ const choice = await ctx.ui.select("Pre-Commit Gate", [
175
+ {
176
+ label: "Run shazam_verify first (Recommended)",
177
+ description: "Verify code before committing",
178
+ },
179
+ {
180
+ label: "Skip verification",
181
+ description: "Commit without verification",
182
+ },
183
+ {
184
+ label: "Cancel commit",
185
+ description: "Don't commit yet",
186
+ },
187
+ ]);
188
+ if (choice === "Run shazam_verify first (Recommended)") {
189
+ // Block the commit and suggest running verify
190
+ return {
191
+ block: true,
192
+ reason: "Run shazam_verify first, then try committing again.",
193
+ };
194
+ }
195
+ else if (choice === "Cancel commit") {
196
+ return {
197
+ block: true,
198
+ reason: "Commit cancelled by user.",
199
+ };
200
+ }
201
+ // "Skip verification" — allow the commit
202
+ }
203
+ catch {
204
+ // Non-interactive mode: just warn but allow
205
+ ctx.ui.notify?.("[shazam] Tip: Run shazam_verify before committing to catch errors early.", "warning");
206
+ }
207
+ }
208
+ }
209
+ return;
210
+ });
211
+ }
212
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../hooks/safety.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,15 @@
3
3
  *
4
4
  * Injects context reminders at key lifecycle points:
5
5
  * - before_agent_start: inject shazam tool list into system prompt
6
- * - tool_result (write/edit): suggest running shazam_verify
6
+ * - tool_result (write/edit): auto-format + suggest running shazam_verify
7
7
  * - tool_result (shazam_symbol): suggest call_chain when symbol has many callers
8
8
  * - tool_call (search/grep/find): suggest shazam_codesearch
9
9
  * - tool_call (write/edit): suggest shazam_impact for multi-file edits
10
+ *
11
+ * Auto-format feature (v0.6.4):
12
+ * - After write/edit, detect file type and run native formatter
13
+ * - Supported: ruff (Python), prettier (JS/TS/JSON/MD), gofmt (Go), rustfmt (Rust)
14
+ * - Falls back to shazam_fix suggestion if no native formatter found
10
15
  */
11
16
  import type { ExtensionAPI } from "../types/pi-extension.js";
12
17
  export declare function registerShazamGuide(pi: ExtensionAPI): void;
@@ -1 +1 @@
1
- {"version":3,"file":"shazam-guide.d.ts","sourceRoot":"","sources":["../../hooks/shazam-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmD7D,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAsE1D"}
1
+ {"version":3,"file":"shazam-guide.d.ts","sourceRoot":"","sources":["../../hooks/shazam-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,0BAA0B,CAAC;AA+I/E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA6E1D"}
@@ -1,3 +1,6 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { join, extname } from "node:path";
1
4
  /**
2
5
  * Check if a tool result contains caller count and suggest call_chain for high-risk symbols.
3
6
  */
@@ -46,16 +49,101 @@ function hasMultiFileEdit(content) {
46
49
  }
47
50
  return false;
48
51
  }
52
+ /**
53
+ * Auto-format a file after write/edit.
54
+ * Detects file type and runs the appropriate native formatter.
55
+ * Returns true if formatting was attempted, false if no formatter found.
56
+ */
57
+ async function autoFormatFile(filePath, ctx) {
58
+ if (!filePath || typeof filePath !== "string")
59
+ return false;
60
+ // Resolve relative paths
61
+ const absPath = filePath.startsWith("/") ? filePath : join(ctx.cwd, filePath);
62
+ if (!existsSync(absPath))
63
+ return false;
64
+ const ext = extname(absPath).toLowerCase();
65
+ const projectRoot = ctx.cwd;
66
+ try {
67
+ // Python: ruff format
68
+ if (ext === ".py") {
69
+ const hasRuff = existsSync(join(projectRoot, "ruff.toml")) ||
70
+ existsSync(join(projectRoot, "pyproject.toml"));
71
+ if (hasRuff) {
72
+ execSync(`ruff format "${absPath}"`, { cwd: projectRoot, timeout: 10000, stdio: "pipe" });
73
+ ctx.ui?.notify?.(`[auto-format] Formatted ${filePath} with ruff`, "info");
74
+ return true;
75
+ }
76
+ }
77
+ // JS/TS/JSON/MD/CSS: prettier
78
+ if ([".ts", ".tsx", ".js", ".jsx", ".json", ".md", ".css", ".scss", ".html", ".yaml", ".yml", ".vue", ".svelte"].includes(ext)) {
79
+ const hasPrettier = existsSync(join(projectRoot, ".prettierrc")) ||
80
+ existsSync(join(projectRoot, ".prettierrc.json")) ||
81
+ existsSync(join(projectRoot, ".prettierrc.js")) ||
82
+ existsSync(join(projectRoot, "prettier.config.js")) ||
83
+ existsSync(join(projectRoot, "prettier.config.mjs"));
84
+ if (hasPrettier) {
85
+ execSync(`npx prettier --write "${absPath}"`, { cwd: projectRoot, timeout: 15000, stdio: "pipe" });
86
+ ctx.ui?.notify?.(`[auto-format] Formatted ${filePath} with prettier`, "info");
87
+ return true;
88
+ }
89
+ // Biome
90
+ const hasBiome = existsSync(join(projectRoot, "biome.json")) ||
91
+ existsSync(join(projectRoot, "biome.jsonc"));
92
+ if (hasBiome) {
93
+ execSync(`npx biome format --write "${absPath}"`, { cwd: projectRoot, timeout: 15000, stdio: "pipe" });
94
+ ctx.ui?.notify?.(`[auto-format] Formatted ${filePath} with biome`, "info");
95
+ return true;
96
+ }
97
+ }
98
+ // Go: gofmt
99
+ if (ext === ".go") {
100
+ execSync(`gofmt -w "${absPath}"`, { cwd: projectRoot, timeout: 10000, stdio: "pipe" });
101
+ ctx.ui?.notify?.(`[auto-format] Formatted ${filePath} with gofmt`, "info");
102
+ return true;
103
+ }
104
+ // Rust: rustfmt
105
+ if (ext === ".rs") {
106
+ execSync(`rustfmt "${absPath}"`, { cwd: projectRoot, timeout: 10000, stdio: "pipe" });
107
+ ctx.ui?.notify?.(`[auto-format] Formatted ${filePath} with rustfmt`, "info");
108
+ return true;
109
+ }
110
+ }
111
+ catch (err) {
112
+ // Formatter failed — warn but don't block
113
+ ctx.ui?.notify?.(`[auto-format] Formatter failed for ${filePath}: ${err instanceof Error ? err.message : String(err)}`, "warning");
114
+ return true; // We attempted formatting
115
+ }
116
+ return false; // No formatter found
117
+ }
118
+ /**
119
+ * Extract file path from tool input.
120
+ */
121
+ function extractFilePath(input) {
122
+ if (!input || typeof input !== "object")
123
+ return null;
124
+ const obj = input;
125
+ if (typeof obj.path === "string")
126
+ return obj.path;
127
+ if (typeof obj.file === "string")
128
+ return obj.file;
129
+ return null;
130
+ }
49
131
  export function registerShazamGuide(pi) {
50
132
  // Tool list injection removed — the before-start hook's overview already
51
133
  // covers all tool guidance. Keeping only contextual lifecycle notifications.
52
- pi.on("tool_result", (event, ctx) => {
53
- // After write/edit: suggest format fix + impact analysis
134
+ pi.on("tool_result", async (event, ctx) => {
135
+ // After write/edit: auto-format + suggest verify + impact analysis
54
136
  if (event.toolName === "write" || event.toolName === "edit") {
55
137
  if (event.isError)
56
138
  return;
57
- // Always suggest auto-format after edits
58
- ctx.ui?.notify?.("run shazam_fix to auto-format (prettier/ruff/gofmt/rustfmt)", "info");
139
+ // Auto-format the edited file
140
+ const input = "input" in event ? event.input : {};
141
+ const filePath = extractFilePath(input);
142
+ const formatted = filePath ? await autoFormatFile(filePath, ctx) : false;
143
+ // If no native formatter found, suggest shazam_fix
144
+ if (!formatted) {
145
+ ctx.ui?.notify?.("run shazam_fix to auto-format (prettier/ruff/gofmt/rustfmt)", "info");
146
+ }
59
147
  // Check if multi-file edit was done — suggest impact analysis
60
148
  if (hasMultiFileEdit(event.content)) {
61
149
  ctx.ui?.notify?.("suggestion: you edited multiple files — shazam_impact assesses blast radius before continuing", "info");
@@ -1 +1 @@
1
- {"version":3,"file":"shazam-guide.js","sourceRoot":"","sources":["../../hooks/shazam-guide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shazam-guide.js","sourceRoot":"","sources":["../../hooks/shazam-guide.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * pi-shazam hooks/stop-verify — Remind to verify before ending turn.
3
+ *
4
+ * When the LLM tries to end its turn after making edits, this hook checks
5
+ * if shazam_verify was run. If not, it sends a reminder message.
6
+ *
7
+ * This prevents the common pattern where LLM edits files and forgets
8
+ * to check for errors before declaring "done".
9
+ *
10
+ * Uses turn_end event to detect when the agent is about to finish.
11
+ */
12
+ import type { ExtensionAPI } from "../types/pi-extension.js";
13
+ /**
14
+ * Register the stop-verify hook.
15
+ *
16
+ * On turn_end, checks if there were file edits that haven't been verified.
17
+ * If so, sends a reminder to run shazam_verify.
18
+ */
19
+ export declare function registerStopVerify(pi: ExtensionAPI): void;
20
+ //# sourceMappingURL=stop-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-verify.d.ts","sourceRoot":"","sources":["../../hooks/stop-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA8C7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA0BzD"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * pi-shazam hooks/stop-verify — Remind to verify before ending turn.
3
+ *
4
+ * When the LLM tries to end its turn after making edits, this hook checks
5
+ * if shazam_verify was run. If not, it sends a reminder message.
6
+ *
7
+ * This prevents the common pattern where LLM edits files and forgets
8
+ * to check for errors before declaring "done".
9
+ *
10
+ * Uses turn_end event to detect when the agent is about to finish.
11
+ */
12
+ import { getEditedFiles } from "./pre-edit.js";
13
+ /**
14
+ * Check if shazam_verify was called recently by reading the audit log.
15
+ */
16
+ function hasRecentVerify() {
17
+ try {
18
+ const { readFileSync, statSync } = require("node:fs");
19
+ const { join } = require("node:path");
20
+ const { homedir } = require("node:os");
21
+ const logFile = join(homedir(), ".pi", "hooks", "audit", "shazam-calls.log");
22
+ // Check if log file exists and was modified recently (within 3 minutes)
23
+ try {
24
+ const stat = statSync(logFile);
25
+ const threeMinutesAgo = Date.now() - 3 * 60 * 1000;
26
+ if (stat.mtimeMs < threeMinutesAgo) {
27
+ return false;
28
+ }
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ // Read last 10 lines to check for recent shazam_verify calls
34
+ const content = readFileSync(logFile, "utf-8");
35
+ const lines = content.trim().split("\n").slice(-10);
36
+ for (const line of lines) {
37
+ try {
38
+ const entry = JSON.parse(line);
39
+ if (entry.tool === "shazam_verify" && entry.event === "result") {
40
+ return true;
41
+ }
42
+ }
43
+ catch {
44
+ // Skip malformed lines
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // If we can't check, assume verify was not run
50
+ }
51
+ return false;
52
+ }
53
+ /**
54
+ * Register the stop-verify hook.
55
+ *
56
+ * On turn_end, checks if there were file edits that haven't been verified.
57
+ * If so, sends a reminder to run shazam_verify.
58
+ */
59
+ export function registerStopVerify(pi) {
60
+ pi.on("turn_end", (_event, _ctx) => {
61
+ // Check if there were file edits this session
62
+ const editedFiles = getEditedFiles();
63
+ if (editedFiles.length === 0)
64
+ return;
65
+ // Check if shazam_verify was run recently
66
+ if (hasRecentVerify())
67
+ return;
68
+ // Send reminder via sendMessage (injected into next turn context)
69
+ // Using sendMessage instead of notify so the LLM sees it and can act
70
+ const fileList = editedFiles.length <= 3
71
+ ? editedFiles.map(f => `\`${f}\``).join(", ")
72
+ : `${editedFiles.length} files`;
73
+ pi.sendMessage({
74
+ customType: "shazam-reminder",
75
+ content: [
76
+ "[shazam] Verification reminder",
77
+ "",
78
+ `You edited ${fileList} this session but haven't run \`shazam_verify\`.`,
79
+ "Run it now to check for type errors, lint issues, and broken references.",
80
+ ].join("\n"),
81
+ display: false, // Don't show in UI, just inject into context
82
+ });
83
+ });
84
+ }
85
+ //# sourceMappingURL=stop-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-verify.js","sourceRoot":"","sources":["../../hooks/stop-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,SAAS,eAAe;IACvB,IAAI,CAAC;QACJ,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAE7E,wEAAwE;QACxE,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;QAED,6DAA6D;QAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,uBAAuB;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,+CAA+C;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAgB;IAClD,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAClC,8CAA8C;QAC9C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,0CAA0C;QAC1C,IAAI,eAAe,EAAE;YAAE,OAAO;QAE9B,kEAAkE;QAClE,qEAAqE;QACrE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC;YACvC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,QAAQ,CAAC;QAEjC,EAAE,CAAC,WAAW,CAAC;YACd,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE;gBACR,gCAAgC;gBAChC,EAAE;gBACF,cAAc,QAAQ,kDAAkD;gBACxE,0EAA0E;aAC1E,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,6CAA6C;SAC7D,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,yBAAyB,CAAC;AA4BrF,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,GAAG,IAAI,CAkL/C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,yBAAyB,CAAC;AA+BrF,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,GAAG,IAAI,CAqL/C"}
package/dist/index.js CHANGED
@@ -17,6 +17,9 @@ import { registerBeforeStartHook } from "./hooks/before-start.js";
17
17
  import { registerToolLogger } from "./hooks/tool-logger.js";
18
18
  import { registerShazamGuide } from "./hooks/shazam-guide.js";
19
19
  import { registerPreEditGuard } from "./hooks/pre-edit.js";
20
+ import { registerSafetyHooks } from "./hooks/safety.js";
21
+ import { registerStopVerify } from "./hooks/stop-verify.js";
22
+ import { registerFailureRecovery } from "./hooks/failure-recovery.js";
20
23
  // ── Tool registrations ────────────────────────────────────────────────────
21
24
  import { registerOverview } from "./tools/overview.js";
22
25
  import { registerImpact } from "./tools/impact.js";
@@ -86,6 +89,9 @@ export default function (pi) {
86
89
  registerToolLogger(pi);
87
90
  registerShazamGuide(pi);
88
91
  registerPreEditGuard(pi);
92
+ registerSafetyHooks(pi);
93
+ registerStopVerify(pi);
94
+ registerFailureRecovery(pi);
89
95
  // ── /shazam-setup command ───────────────────────────────────────────────
90
96
  pi.registerCommand("shazam-setup", {
91
97
  description: "Detect and report LSP server availability with install instructions",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-shazam",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "description": "Pi coding agent native codebase awareness toolkit — 14 structural analysis tools. Also supports MCP (Cursor, Claude Desktop, Windsurf, etc.)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",