@dungle-scrubs/tallow 0.8.2 → 0.8.4

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 CHANGED
@@ -5,7 +5,7 @@
5
5
  <h1 align="center">Tallow</h1>
6
6
 
7
7
  <p align="center">
8
- An opinionated coding agent. Built on <a href="https://github.com/nicobrinkkemper/pi-coding-agent">pi</a>.
8
+ An opt-in, fully featured coding agent for your terminal. Built on <a href="https://github.com/nicobrinkkemper/pi-coding-agent">pi</a>.
9
9
  </p>
10
10
 
11
11
  <p align="center">
@@ -26,22 +26,37 @@
26
26
  <img src="assets/screenshot.jpg" alt="Tallow multi-agent team coordinating a docs audit" />
27
27
  </p>
28
28
 
29
- 49 extensions, 34 themes, 8 slash commands, and 10 specialized agents.
30
- Install only what you need the interactive installer lets you pick.
29
+ Tallow is opt-in by default: start minimal, then enable only what your project needs.
30
+ It is drop-in compatible with Claude Code projects via `.claude/` bridging.
31
+ Install extensions, themes, and agents in any combination.
32
+ This is a personal project I build in my spare time, so please be patient with
33
+ issue and PR response times.
31
34
 
32
35
  ## Features
33
36
 
34
- - **49 bundled extensions** — enhanced tools, hooks, tasks, teams, LSP, themes, permissions, context usage, and more
35
- - **34 terminal themes** — Tokyo Night, Catppuccin, Gruvbox, Rose Pine, Nord, and many others
36
- - **8 slash commands** — `/implement`, `/implement-and-review`, `/review`, `/fix`, `/test`, `/scout-and-plan`, `/scaffold`, `/question`
37
- - **9 specialized agents** — architect, debug, explore, planner, refactor, reviewer, scout, worker, tallow-expert
38
- - **Multi-agent teams** — coordinate multiple agents with task boards, messaging, and archive/resume
39
- - **Session naming** — auto-generated descriptive names for each session, shown in footer and `--list`
40
- - **Context fork** — run skills and commands in isolated subprocesses via `context: fork` frontmatter
37
+ - **Most valuable capabilities (non-exhaustive):**
38
+ - **Multi-model routing** — route work by intent/cost (`auto-cheap`, `auto-balanced`,
39
+ `auto-premium`) across available providers
40
+ - **Multi-agent teams** — coordinate specialized agents with shared task boards,
41
+ dependencies, messaging, and archive/resume
42
+ - **Context fork** — run isolated subprocess workflows with separate tools/models and
43
+ merge results back cleanly
44
+ - **Workspace rewind snapshots** — roll file changes back to earlier conversation turns
45
+ - **Task primitives + background execution** — explicit task lifecycle tracking and
46
+ non-blocking long-running work
47
+ - **Built-in LSP navigation** — definitions, references, hover, and workspace symbol
48
+ lookup
49
+ - **Opt-in and modular** — install only the pieces you need, skip the rest
50
+ - **Claude Code compatible** — `.claude/` + `.tallow/` directories are bridged so existing
51
+ project workflows keep working
52
+ - **Fully featured when you want it** — 49 bundled extensions, 34 themes, 8 slash commands,
53
+ and 10 specialized agents
54
+ - **Session naming** — auto-generated descriptive names for each session, shown in footer
55
+ and `--list`
41
56
  - **Debug mode** — structured JSONL diagnostic logging with `/diag` command
42
- - **Claude Code compatible** — `.claude/` directory bridging for seamless use of Tallow skills, agents, and commands in Claude Code
43
57
  - **SDK** — embed Tallow in your own scripts and orchestrators
44
- - **User-owned config** — agents and commands are installed to `~/.tallow/` where you can edit, remove, or add your own
58
+ - **User-owned config** — agents and commands are installed to `~/.tallow/` where you can
59
+ edit, remove, or add your own
45
60
 
46
61
  Read the full [documentation](https://tallow.dungle-scrubs.com).
47
62
 
@@ -298,7 +313,8 @@ If it shares a name with a bundled extension, yours takes precedence.
298
313
 
299
314
  - Requires Node.js 22+ (uses modern ESM features)
300
315
  - Session persistence is local — no cloud sync
301
- - The `web_fetch` extension works best with a [Firecrawl](https://firecrawl.dev) API key for JS-heavy pages
316
+ - The `web_fetch` extension works best with a [Firecrawl](https://firecrawl.dev) API key
317
+ for JS-heavy pages
302
318
 
303
319
  ## Contributing
304
320
 
@@ -263,10 +263,17 @@ function runShellCommand(command) {
263
263
  if (command.length > 1024) {
264
264
  throw new Error("Shell command reference exceeds 1024 character limit.");
265
265
  }
266
+ // Reject shell metacharacters that could alter command semantics.
267
+ // Allowed: alphanumeric, whitespace, and common path/flag chars (-_./:"'=~@,+).
268
+ // Users needing pipes/subshells/expansion can wrap logic in a script file.
269
+ if (/[^a-zA-Z0-9\s\-_./"'=:~@,+\\]/.test(command)) {
270
+ throw new Error("Shell command reference contains disallowed characters. " +
271
+ "Only alphanumeric characters, spaces, and common path/flag characters " +
272
+ "(-_./\"'=:~@,+\\) are permitted. For complex commands, use a wrapper script.");
273
+ }
266
274
  // Intentional: `!command` references in user-authored config (e.g., `!pass show api-key`).
267
275
  // The command string originates from the user's local settings file, never from agent
268
276
  // or network input. This is a core feature for secret-manager integration.
269
- // lgtm[js/command-line-injection] lgtm[js/indirect-command-line-injection]
270
277
  const output = execFileSync("sh", ["-c", command], {
271
278
  encoding: "utf-8",
272
279
  timeout: 10_000,
@@ -1 +1 @@
1
- {"version":3,"file":"auth-hardening.js","sourceRoot":"","sources":["../src/auth-hardening.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-hardening.js","sourceRoot":"","sources":["../src/auth-hardening.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -215,16 +215,12 @@ async function run(opts) {
215
215
  }
216
216
  catch (error) {
217
217
  if (error instanceof Error && error.message.startsWith("Session not found:")) {
218
- // Only surface the session ID (UUID), strip anything that isn't safe to log
219
- const id = error.message.slice("Session not found:".length).trim();
220
- const safeId = id.replace(/[^a-zA-Z0-9_-]/g, "");
221
- console.error(`Error: Session not found: ${safeId}`);
218
+ // Log the session ID from CLI args (untainted) rather than the error message
219
+ console.error(`Error: Session not found: ${opts.sessionId ?? opts.resume ?? "unknown"}`);
222
220
  process.exit(1);
223
221
  }
224
222
  if (error instanceof Error && error.message.startsWith("Source session not found:")) {
225
- const id = error.message.slice("Source session not found:".length).trim();
226
- const safeId = id.replace(/[^a-zA-Z0-9_-]/g, "");
227
- console.error(`Error: Source session not found: ${safeId}`);
223
+ console.error(`Error: Source session not found: ${opts.forkSession ?? "unknown"}`);
228
224
  process.exit(1);
229
225
  }
230
226
  throw error;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const APP_NAME = "tallow";
2
- export declare const TALLOW_VERSION = "0.8.2";
2
+ export declare const TALLOW_VERSION = "0.8.4";
3
3
  export declare const CONFIG_DIR = ".tallow";
4
4
  /** ~/.tallow (or override from ~/.config/tallow-work-dirs) — all user config, sessions, auth, extensions */
5
5
  export declare const TALLOW_HOME: string;
package/dist/config.js CHANGED
@@ -5,7 +5,7 @@ import { dirname, join, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  // ─── Identity ────────────────────────────────────────────────────────────────
7
7
  export const APP_NAME = "tallow";
8
- export const TALLOW_VERSION = "0.8.2"; // x-release-please-version
8
+ export const TALLOW_VERSION = "0.8.4"; // x-release-please-version
9
9
  export const CONFIG_DIR = ".tallow";
10
10
  // ─── Paths ───────────────────────────────────────────────────────────────────
11
11
  /** ~/.tallow (or override from ~/.config/tallow-work-dirs) — all user config, sessions, auth, extensions */
@@ -0,0 +1,118 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "bun:test";
2
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { loadHooksConfig } from "../hooks/index.js";
6
+
7
+ let cwd: string;
8
+ let homeDir: string;
9
+ let originalHome: string | undefined;
10
+
11
+ /**
12
+ * Writes JSON with pretty formatting, creating parent directories as needed.
13
+ *
14
+ * @param filePath - Destination file path
15
+ * @param value - JSON-serializable payload
16
+ * @returns void
17
+ */
18
+ function writeJson(filePath: string, value: unknown): void {
19
+ mkdirSync(dirname(filePath), { recursive: true });
20
+ writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`);
21
+ }
22
+
23
+ beforeEach(() => {
24
+ cwd = mkdtempSync(join(tmpdir(), "tallow-claude-hooks-cwd-"));
25
+ homeDir = mkdtempSync(join(tmpdir(), "tallow-claude-hooks-home-"));
26
+ originalHome = process.env.HOME;
27
+ process.env.HOME = homeDir;
28
+ });
29
+
30
+ afterEach(() => {
31
+ if (originalHome !== undefined) {
32
+ process.env.HOME = originalHome;
33
+ } else {
34
+ delete process.env.HOME;
35
+ }
36
+
37
+ rmSync(cwd, { recursive: true, force: true });
38
+ rmSync(homeDir, { recursive: true, force: true });
39
+ });
40
+
41
+ describe("Claude hooks compatibility integration", () => {
42
+ it("loads and translates .claude/settings.json hook events", () => {
43
+ writeJson(join(cwd, ".claude", "settings.json"), {
44
+ hooks: {
45
+ PreToolUse: [
46
+ {
47
+ matcher: "Bash",
48
+ hooks: [{ type: "command", command: "echo pre" }],
49
+ },
50
+ ],
51
+ PostToolUseFailure: [
52
+ {
53
+ matcher: "Write",
54
+ hooks: [{ type: "command", command: "echo fail" }],
55
+ },
56
+ ],
57
+ },
58
+ });
59
+
60
+ const config = loadHooksConfig(cwd);
61
+ expect(config.tool_call).toHaveLength(1);
62
+ expect(config.tool_result).toHaveLength(1);
63
+ expect(config.tool_call[0]?.matcher).toBe("bash");
64
+ expect(config.tool_result[0]?.matcher).toBe("write");
65
+ expect(config.tool_call[0]?.hooks[0]?._claudeSource).toBe(true);
66
+ expect(config.tool_call[0]?.hooks[0]?._claudeEventName).toBe("PreToolUse");
67
+ expect(config.tool_result[0]?.hooks[0]?._claudeEventName).toBe("PostToolUseFailure");
68
+ });
69
+
70
+ it("keeps .tallow hooks ahead of .claude hooks for matching order", () => {
71
+ writeJson(join(cwd, ".tallow", "hooks.json"), {
72
+ tool_call: [
73
+ {
74
+ matcher: "bash",
75
+ hooks: [{ type: "command", command: "echo tallow" }],
76
+ },
77
+ ],
78
+ });
79
+ writeJson(join(cwd, ".claude", "settings.json"), {
80
+ hooks: {
81
+ PreToolUse: [
82
+ {
83
+ matcher: "Bash",
84
+ hooks: [{ type: "command", command: "echo claude" }],
85
+ },
86
+ ],
87
+ },
88
+ });
89
+
90
+ const config = loadHooksConfig(cwd);
91
+ const handlers = config.tool_call?.map((entry) => entry.hooks[0]?.command);
92
+ expect(handlers).toEqual(["echo tallow", "echo claude"]);
93
+ });
94
+
95
+ it("allows native and Claude event names in the same .claude config", () => {
96
+ writeJson(join(cwd, ".claude", "settings.json"), {
97
+ hooks: {
98
+ PreToolUse: [
99
+ {
100
+ matcher: "Edit|Write",
101
+ hooks: [{ type: "command", command: "echo claude" }],
102
+ },
103
+ ],
104
+ tool_call: [
105
+ {
106
+ matcher: "bash",
107
+ hooks: [{ type: "command", command: "echo native" }],
108
+ },
109
+ ],
110
+ },
111
+ });
112
+
113
+ const config = loadHooksConfig(cwd);
114
+ expect(config.tool_call).toHaveLength(2);
115
+ expect(config.tool_call?.[0]?.matcher).toBe("edit|write");
116
+ expect(config.tool_call?.[1]?.matcher).toBe("bash");
117
+ });
118
+ });
@@ -407,7 +407,7 @@ export default function (pi: ExtensionAPI): void {
407
407
  const explicitModel = fm.model ?? agentConfig?.model;
408
408
  const resolvedModel = explicitModel
409
409
  ? resolveModel(explicitModel)
410
- : await routeForkedModel(content, undefined, ctx.model?.id);
410
+ : await routeForkedModel(content, undefined, ctx.model?.id, undefined, ctx.cwd);
411
411
 
412
412
  // Show working indicator
413
413
  const workingParts = [`🔀 forking: /${commandName}`];
@@ -34,15 +34,25 @@ export function resolveModel(input: string | undefined): string | undefined {
34
34
  * @param modelOverride - Explicit model (fuzzy matched), skips auto-routing
35
35
  * @param parentModelId - Parent model ID for fallback inheritance
36
36
  * @param hints - Optional routing hints (modelScope, costPreference, etc.)
37
+ * @param cwd - Working directory used for project-local routing settings
37
38
  * @returns Resolved model ID, or undefined on failure
38
39
  */
39
40
  export async function routeForkedModel(
40
41
  task: string,
41
42
  modelOverride?: string,
42
43
  parentModelId?: string,
43
- hints?: RoutingHints
44
+ hints?: RoutingHints,
45
+ cwd?: string
44
46
  ): Promise<string | undefined> {
45
- const routing = await routeModel(task, modelOverride, undefined, parentModelId, undefined, hints);
47
+ const routing = await routeModel(
48
+ task,
49
+ modelOverride,
50
+ undefined,
51
+ parentModelId,
52
+ undefined,
53
+ hints,
54
+ cwd
55
+ );
46
56
  if (!routing.ok) return modelOverride; // fallback to raw string
47
57
  return routing.model.id;
48
58
  }
@@ -0,0 +1,215 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import {
3
+ adaptEventDataForHook,
4
+ CLAUDE_EVENT_MAP,
5
+ shouldSkipClaudeToolResultHandler,
6
+ translateClaudeHooks,
7
+ translateClaudeOutput,
8
+ translateClaudeToolMatcher,
9
+ } from "../index.js";
10
+
11
+ describe("translateClaudeToolMatcher", () => {
12
+ it("maps Claude built-in tool names to tallow tool names", () => {
13
+ expect(translateClaudeToolMatcher("Bash")).toBe("bash");
14
+ expect(translateClaudeToolMatcher("Edit|Write")).toBe("edit|write");
15
+ expect(translateClaudeToolMatcher("Read|Glob|Grep")).toBe("read|find|grep");
16
+ });
17
+
18
+ it("passes through unknown and MCP matchers unchanged", () => {
19
+ expect(translateClaudeToolMatcher("mcp__github__.*")).toBe("mcp__github__.*");
20
+ expect(translateClaudeToolMatcher("CustomTool")).toBe("CustomTool");
21
+ expect(translateClaudeToolMatcher("*")).toBe("*");
22
+ });
23
+ });
24
+
25
+ describe("translateClaudeHooks", () => {
26
+ it("translates Claude event names to tallow event names", () => {
27
+ const config = {
28
+ PreToolUse: [{ matcher: "Bash", hooks: [{ type: "command", command: "echo pre" }] }],
29
+ PostToolUse: [{ matcher: "Write", hooks: [{ type: "command", command: "echo post" }] }],
30
+ Stop: [{ hooks: [{ type: "command", command: "echo stop" }] }],
31
+ };
32
+
33
+ const translated = translateClaudeHooks(config, "test-source");
34
+ expect(translated.tool_call).toHaveLength(1);
35
+ expect(translated.tool_result).toHaveLength(1);
36
+ expect(translated.agent_end).toHaveLength(1);
37
+ expect(translated.tool_call[0]?.matcher).toBe("bash");
38
+ expect(translated.tool_result[0]?.matcher).toBe("write");
39
+
40
+ const handler = translated.tool_call[0]?.hooks[0];
41
+ expect(handler?._claudeSource).toBe(true);
42
+ expect(handler?._claudeEventName).toBe("PreToolUse");
43
+ });
44
+
45
+ it("skips PermissionRequest with a warning", () => {
46
+ const warnings: string[] = [];
47
+ const originalWarn = console.warn;
48
+ console.warn = (...args: unknown[]) => {
49
+ warnings.push(args.map((arg) => String(arg)).join(" "));
50
+ };
51
+
52
+ try {
53
+ const translated = translateClaudeHooks(
54
+ {
55
+ PermissionRequest: [
56
+ { matcher: "Bash", hooks: [{ type: "command", command: "echo deny" }] },
57
+ ],
58
+ },
59
+ "/tmp/.claude/settings.json"
60
+ );
61
+
62
+ expect(Object.keys(translated)).toHaveLength(0);
63
+ expect(warnings.some((line) => line.includes("PermissionRequest"))).toBe(true);
64
+ } finally {
65
+ console.warn = originalWarn;
66
+ }
67
+ });
68
+
69
+ it("supports mixed native + Claude events in the same config", () => {
70
+ const translated = translateClaudeHooks({
71
+ PreToolUse: [{ matcher: "Edit|Write", hooks: [{ type: "command", command: "echo a" }] }],
72
+ tool_call: [{ matcher: "bash", hooks: [{ type: "command", command: "echo b" }] }],
73
+ });
74
+
75
+ expect(translated.tool_call).toHaveLength(2);
76
+ expect(translated.tool_call[0]?.matcher).toBe("edit|write");
77
+ expect(translated.tool_call[1]?.matcher).toBe("bash");
78
+ });
79
+
80
+ it("passes unknown events through for forward compatibility", () => {
81
+ const translated = translateClaudeHooks({
82
+ FutureEvent: [{ hooks: [{ type: "command", command: "echo future" }] }],
83
+ });
84
+
85
+ expect(translated.FutureEvent).toHaveLength(1);
86
+ expect(translated.FutureEvent[0]?.hooks[0]?._claudeSource).toBe(true);
87
+ expect(translated.FutureEvent[0]?.hooks[0]?._claudeEventName).toBe("FutureEvent");
88
+ });
89
+
90
+ it("maps all documented Claude events", () => {
91
+ const expectedMappings = {
92
+ SessionStart: "session_start",
93
+ UserPromptSubmit: "input",
94
+ PreToolUse: "tool_call",
95
+ PermissionRequest: "tool_call",
96
+ PostToolUse: "tool_result",
97
+ PostToolUseFailure: "tool_result",
98
+ Notification: "notification",
99
+ SubagentStart: "subagent_start",
100
+ SubagentStop: "subagent_stop",
101
+ Stop: "agent_end",
102
+ TeammateIdle: "teammate_idle",
103
+ TaskCompleted: "task_completed",
104
+ PreCompact: "session_before_compact",
105
+ SessionEnd: "session_shutdown",
106
+ };
107
+
108
+ expect(CLAUDE_EVENT_MAP).toEqual(expectedMappings);
109
+ });
110
+ });
111
+
112
+ describe("adaptEventDataForHook", () => {
113
+ it("adapts tool_call payload for PreToolUse hooks", () => {
114
+ const adapted = adaptEventDataForHook(
115
+ "tool_call",
116
+ { input: { command: "echo hi" }, toolName: "bash" },
117
+ { _claudeEventName: "PreToolUse", _claudeSource: true, type: "command" },
118
+ "/repo"
119
+ );
120
+
121
+ expect(adapted.tool_name).toBe("bash");
122
+ expect(adapted.tool_input).toEqual({ command: "echo hi" });
123
+ expect(adapted.hook_event_name).toBe("PreToolUse");
124
+ expect(adapted.cwd).toBe("/repo");
125
+ });
126
+
127
+ it("adapts tool_result payload for PostToolUse hooks", () => {
128
+ const adapted = adaptEventDataForHook(
129
+ "tool_result",
130
+ { content: [{ text: "ok", type: "text" }], input: { path: "a.ts" }, toolName: "write" },
131
+ { _claudeEventName: "PostToolUse", _claudeSource: true, type: "command" },
132
+ "/repo"
133
+ );
134
+
135
+ expect(adapted.tool_name).toBe("write");
136
+ expect(adapted.tool_input).toEqual({ path: "a.ts" });
137
+ expect(adapted.tool_response).toEqual([{ text: "ok", type: "text" }]);
138
+ });
139
+
140
+ it("adapts input payload for UserPromptSubmit hooks", () => {
141
+ const adapted = adaptEventDataForHook(
142
+ "input",
143
+ { source: "terminal", text: "hello" },
144
+ { _claudeEventName: "UserPromptSubmit", _claudeSource: true, type: "command" },
145
+ "/repo"
146
+ );
147
+
148
+ expect(adapted.prompt).toBe("hello");
149
+ expect(adapted.hook_event_name).toBe("UserPromptSubmit");
150
+ });
151
+
152
+ it("keeps native hook payload unchanged", () => {
153
+ const event = { input: { command: "ls" }, toolName: "bash" };
154
+ const adapted = adaptEventDataForHook("tool_call", event, { type: "command" }, "/repo");
155
+ expect(adapted).toEqual(event);
156
+ });
157
+ });
158
+
159
+ describe("translateClaudeOutput", () => {
160
+ it("maps permissionDecision deny to a blocking result", () => {
161
+ const result = translateClaudeOutput({
162
+ hookSpecificOutput: {
163
+ permissionDecision: "deny",
164
+ permissionDecisionReason: "no",
165
+ },
166
+ });
167
+
168
+ expect(result).toEqual({ decision: "block", ok: false, reason: "no" });
169
+ });
170
+
171
+ it("maps top-level decision block to a blocking result", () => {
172
+ const result = translateClaudeOutput({ decision: "block", reason: "blocked" });
173
+ expect(result).toEqual({ decision: "block", ok: false, reason: "blocked" });
174
+ });
175
+
176
+ it("maps continue=false to a stop result", () => {
177
+ const result = translateClaudeOutput({ continue: false, stopReason: "stop" });
178
+ expect(result).toEqual({ ok: false, reason: "stop" });
179
+ });
180
+
181
+ it("passes additional context through", () => {
182
+ const result = translateClaudeOutput({
183
+ hookSpecificOutput: { additionalContext: "remember this" },
184
+ });
185
+ expect(result).toEqual({ additionalContext: "remember this", ok: true });
186
+ });
187
+ });
188
+
189
+ describe("shouldSkipClaudeToolResultHandler", () => {
190
+ it("only runs PostToolUseFailure when isError=true", () => {
191
+ const handler = {
192
+ _claudeEventName: "PostToolUseFailure",
193
+ _claudeSource: true,
194
+ type: "command",
195
+ };
196
+ expect(shouldSkipClaudeToolResultHandler("tool_result", { isError: false }, handler)).toBe(
197
+ true
198
+ );
199
+ expect(shouldSkipClaudeToolResultHandler("tool_result", { isError: true }, handler)).toBe(
200
+ false
201
+ );
202
+ });
203
+
204
+ it("only runs PostToolUse when isError=false", () => {
205
+ const handler = {
206
+ _claudeEventName: "PostToolUse",
207
+ _claudeSource: true,
208
+ type: "command",
209
+ };
210
+ expect(shouldSkipClaudeToolResultHandler("tool_result", { isError: true }, handler)).toBe(true);
211
+ expect(shouldSkipClaudeToolResultHandler("tool_result", { isError: false }, handler)).toBe(
212
+ false
213
+ );
214
+ });
215
+ });