@pushary/agent-hooks 0.69.0 → 0.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +3 -2
  3. package/data/cursor-plugin/scripts/pushary-gate.mjs +34 -5
  4. package/data/vscode-plugin/scripts/pushary-gate.mjs +27 -2
  5. package/dist/bin/pushary-claude.js +2 -2
  6. package/dist/bin/pushary-clean.js +2 -2
  7. package/dist/bin/pushary-codex-hook.js +2 -2
  8. package/dist/bin/pushary-codex.js +1 -1
  9. package/dist/bin/pushary-connect.js +6 -4
  10. package/dist/bin/pushary-daemon.js +3 -3
  11. package/dist/bin/pushary-doctor.js +8 -29
  12. package/dist/bin/pushary-gemini-hook.js +2 -2
  13. package/dist/bin/pushary-hook.js +5 -5
  14. package/dist/bin/pushary-login.js +2 -2
  15. package/dist/bin/pushary-logout.js +2 -2
  16. package/dist/bin/pushary-mode.js +2 -2
  17. package/dist/bin/pushary-notification-hook.js +1 -1
  18. package/dist/bin/pushary-permission-denied-hook.js +3 -3
  19. package/dist/bin/pushary-permission-hook.js +3 -3
  20. package/dist/bin/pushary-post-hook.js +1 -1
  21. package/dist/bin/pushary-prompt-hook.js +1 -1
  22. package/dist/bin/pushary-session-end-hook.js +1 -1
  23. package/dist/bin/pushary-session-start-hook.js +1 -1
  24. package/dist/bin/pushary-setup.js +175 -34
  25. package/dist/bin/pushary-stats.js +2 -2
  26. package/dist/bin/pushary-status.js +4 -4
  27. package/dist/bin/pushary-stop-hook.js +1 -1
  28. package/dist/bin/pushary-stopfailure-hook.js +1 -1
  29. package/dist/bin/pushary-suggestions.js +2 -2
  30. package/dist/bin/pushary-upgrade.js +2 -2
  31. package/dist/bin/pushary-wait.js +2 -2
  32. package/dist/bin/pushary.js +1 -1
  33. package/dist/{chunk-JGH37QRB.js → chunk-7OYGFJYZ.js} +1 -1
  34. package/dist/chunk-B7R4YSAB.js +38 -0
  35. package/dist/{chunk-ATP6UQPH.js → chunk-BBK3TTU2.js} +1 -1
  36. package/dist/{chunk-H46LSQRT.js → chunk-FZIQSDTQ.js} +27 -12
  37. package/dist/{chunk-3USMXNVB.js → chunk-GD275GEX.js} +5 -3
  38. package/dist/{chunk-C5I2RAMT.js → chunk-HU43EZ5Q.js} +2 -2
  39. package/dist/{chunk-P7VBAYQO.js → chunk-MGFZXUUR.js} +32 -4
  40. package/dist/{chunk-YZT2CBC3.js → chunk-NQTRA7H5.js} +1 -1
  41. package/dist/src/index.js +3 -3
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.71.0
4
+
5
+ ### Setting up Codex no longer gets Codex deleted by macOS
6
+
7
+ Setup ran `codex --version` to decide whether your Codex was new enough for
8
+ native hooks. On macOS, executing a binary hands it to XProtect, and current
9
+ definitions false-positive on the Codex CLI: macOS killed it and moved it to the
10
+ Trash. Reading a version number destroyed the tool it was asking, mid-setup, and
11
+ the only thing you saw was "codex was not opened because it contains malware".
12
+
13
+ Setup no longer runs Codex, or any other agent's binary, to learn something about
14
+ it. The version now comes from the package manifest next to the binary, which
15
+ covers npm, bun, pnpm and yarn installs, and from `brew list` for the Homebrew
16
+ cask, which ships no manifest. Same result, nothing launched.
17
+
18
+ If your Codex was already quarantined, reinstall it: `npm install -g @openai/codex`
19
+ or `brew install --cask codex`.
20
+
21
+ ## 0.70.0
22
+
23
+ ### A key you name is the key you get
24
+
25
+ Passing `--key` with a malformed value did not fail. Setup read it as no key at
26
+ all, went looking elsewhere, and used whichever key it found: one already stored
27
+ on the machine, one in your environment, or a brand new one it created by pairing.
28
+ You named a credential and quietly got a different one. It now stops and says the
29
+ key is not valid.
30
+
31
+ ### setup --json no longer stops to ask a question nobody can see
32
+
33
+ Asking for machine-readable output says plainly that no human is watching, but
34
+ setup could still reach an agent-selection prompt. Piped into a script it waited
35
+ for a keypress that was never coming, and the prompt drew itself onto the same
36
+ output a program was trying to read as JSON. It now selects the agents it detects,
37
+ which is exactly what pressing Enter on that prompt would have chosen.
38
+
39
+ `--json` also promises a single object of output, and every failing exit used to
40
+ print nothing at all. A refused key, a cancelled pairing and a crash were
41
+ indistinguishable to anything reading the output. Each now says which it was.
42
+
43
+ ### Setup checks its own work
44
+
45
+ An agent installer that finished without an error was reported as configured,
46
+ even if nothing had been written. Doctor would then contradict setup minutes
47
+ later. Setup now confirms the configuration is really there, using the same check
48
+ doctor uses, so the two cannot disagree.
49
+
50
+ ### connect points at the fix that matches your situation
51
+
52
+ `pushary connect --app` gave one answer for every way a phone can be out of
53
+ reach: open the app and allow notifications. That is right when the app is signed
54
+ in and the permission was declined, and wrong otherwise. A terminal that was
55
+ never paired needs setup. A phone signed in to a colleague's account needs your
56
+ account, not a permission toggle. It now says which applies, and when it cannot
57
+ tell the two apart it says both rather than sounding certain about the wrong one.
58
+
59
+ ### The editor gates say when a proxy is in the way
60
+
61
+ The Cursor and VS Code gates cannot route through a corporate proxy. They still
62
+ hand the decision safely to the editor's own prompt, so nothing is blocked, but
63
+ every approval quietly stopped reaching your phone with no explanation. When a
64
+ proxy is configured they now name it as the likely cause, and on Node 24 or newer
65
+ they name the setting that fixes it.
66
+
67
+ VS Code is also now listed among the supported agents, which it has been since
68
+ its plugin shipped.
69
+
3
70
  ## 0.69.0
4
71
 
5
72
  ### An approval is never granted on a state Pushary could not confirm
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dm/@pushary/agent-hooks.svg)](https://www.npmjs.com/package/@pushary/agent-hooks)
5
5
  [![license](https://img.shields.io/npm/l/@pushary/agent-hooks.svg)](./LICENSE)
6
6
 
7
- Push notifications, questions, and permission approvals for AI coding agents. Get a push when your agent finishes work, answer its questions from your phone, and approve risky commands before they run. Works with Claude Code, Codex, Cursor, Gemini CLI, and Hermes.
7
+ Push notifications, questions, and permission approvals for AI coding agents. Get a push when your agent finishes work, answer its questions from your phone, and approve risky commands before they run. Works with Claude Code, Codex, Cursor, VS Code, Gemini CLI, and Hermes.
8
8
 
9
9
  Your agent froze waiting for a yes. This is how it reaches you.
10
10
 
@@ -53,6 +53,7 @@ npx @pushary/agent-hooks@latest doctor
53
53
  | Cursor | yes | yes | yes |
54
54
  | Gemini CLI | yes | yes | yes |
55
55
  | Hermes | yes | yes | yes |
56
+ | VS Code | yes | yes | yes |
56
57
 
57
58
  Any other MCP client can use notify and ask by pointing at the Pushary MCP endpoint directly.
58
59
 
@@ -62,7 +63,7 @@ Any other MCP client can use notify and ask by pointing at the Pushary MCP endpo
62
63
  asserts this list matches it. Do not edit one without the other. -->
63
64
 
64
65
  ```
65
- setup Configure Claude Code, Codex, Gemini CLI, Hermes, or Cursor with Pushary
66
+ setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, or VS Code with Pushary
66
67
  claude Run Claude Code through Pushary, reachable from your phone even when idle
67
68
  daemon Keep this machine reachable so your phone can START a new session
68
69
  status One screen: which key is in force, whether the server accepts it, what can receive an approval
@@ -271,6 +271,31 @@ const capActionBody = (text) =>
271
271
  text.length <= ACTION_BODY_MAX ? text : `${text.slice(0, ACTION_BODY_MAX - ACTION_BODY_TRUNCATION_MARKER.length)}${ACTION_BODY_TRUNCATION_MARKER}`
272
272
  const deriveActionBody = (command) => capActionBody(redactSecretsDeep(command))
273
273
 
274
+ // ── network diagnosis ────────────────────────────────────────────────────────
275
+ //
276
+ // This gate is a dependency-free .mjs, so unlike the CLI it cannot install
277
+ // undici's EnvHttpProxyAgent and its fetch ignores HTTP_PROXY entirely. Node
278
+ // gained a native equivalent in 24 (NODE_USE_ENV_PROXY), but that is read at
279
+ // startup, so a script cannot switch it on for itself.
280
+ //
281
+ // The gate already fails safe: any error here hands the decision to the editor's
282
+ // own prompt. The cost is therefore not a blocked command, it is SILENCE. On a
283
+ // corporate network every approval quietly stops reaching the phone and the only
284
+ // trace is one stderr line nobody reads. So when a proxy is configured and the
285
+ // network call fails, say which of those two it is.
286
+ export const PROXY_VARS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy']
287
+
288
+ export const proxyConfigured = (env = process.env) =>
289
+ PROXY_VARS.some(name => (env[name] ?? '').trim() !== '')
290
+
291
+ export const describeNetworkFailure = (error, env = process.env) => {
292
+ const detail = error?.message ?? String(error)
293
+ if (!proxyConfigured(env)) return detail
294
+ const enabled = (env.NODE_USE_ENV_PROXY ?? '').trim() !== ''
295
+ if (enabled) return detail
296
+ return `${detail} (a proxy is set in HTTP_PROXY/HTTPS_PROXY and this hook cannot use it; on Node 24+ set NODE_USE_ENV_PROXY=1 in the editor's environment)`
297
+ }
298
+
274
299
  // ── ask / wait ───────────────────────────────────────────────────────────────
275
300
  // Redacted, not raw. This is the text a human reads on a lock screen and in
276
301
  // Slack, and it used to be the command verbatim: `curl -H "Authorization:
@@ -447,12 +472,16 @@ const main = async () => {
447
472
  return respond(await handlePushFirst(apiKey, command, project, ident, tool.pushFirstSeconds))
448
473
  }
449
474
  } catch (error) {
450
- process.stderr.write(`[pushary-gate] ${error?.message ?? error}\n`)
475
+ process.stderr.write(`[pushary-gate] ${describeNetworkFailure(error)}\n`)
451
476
  return respond(ask())
452
477
  }
453
478
  }
454
479
 
455
- main().catch((error) => {
456
- process.stderr.write(`[pushary-gate] fatal: ${error?.message ?? error}\n`)
457
- respond(ask())
458
- })
480
+ // Guarded like the VS Code gate: importing this file to unit-test its pure
481
+ // helpers must not start a hook run that reads stdin and writes a decision.
482
+ if (!process.env.PUSHARY_GATE_IMPORT) {
483
+ main().catch((error) => {
484
+ process.stderr.write(`[pushary-gate] fatal: ${describeNetworkFailure(error)}\n`)
485
+ respond(ask())
486
+ })
487
+ }
@@ -345,6 +345,31 @@ export const shouldGate = (toolName, toolInput) => {
345
345
  return command
346
346
  }
347
347
 
348
+ // ── network diagnosis ────────────────────────────────────────────────────────
349
+ //
350
+ // This gate is a dependency-free .mjs, so unlike the CLI it cannot install
351
+ // undici's EnvHttpProxyAgent and its fetch ignores HTTP_PROXY entirely. Node
352
+ // gained a native equivalent in 24 (NODE_USE_ENV_PROXY), but that is read at
353
+ // startup, so a script cannot switch it on for itself.
354
+ //
355
+ // The gate already fails safe: any error here hands the decision to the editor's
356
+ // own prompt. The cost is therefore not a blocked command, it is SILENCE. On a
357
+ // corporate network every approval quietly stops reaching the phone and the only
358
+ // trace is one stderr line nobody reads. So when a proxy is configured and the
359
+ // network call fails, say which of those two it is.
360
+ export const PROXY_VARS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy']
361
+
362
+ export const proxyConfigured = (env = process.env) =>
363
+ PROXY_VARS.some(name => (env[name] ?? '').trim() !== '')
364
+
365
+ export const describeNetworkFailure = (error, env = process.env) => {
366
+ const detail = error?.message ?? String(error)
367
+ if (!proxyConfigured(env)) return detail
368
+ const enabled = (env.NODE_USE_ENV_PROXY ?? '').trim() !== ''
369
+ if (enabled) return detail
370
+ return `${detail} (a proxy is set in HTTP_PROXY/HTTPS_PROXY and this hook cannot use it; on Node 24+ set NODE_USE_ENV_PROXY=1 in the editor's environment)`
371
+ }
372
+
348
373
  // ── ask / wait ────────────────────────────────────────────────────────────────
349
374
  // Redacted, not raw. This is the text a human reads on a lock screen and in
350
375
  // Slack, and it used to be the command verbatim: `curl -H "Authorization:
@@ -517,7 +542,7 @@ const main = async () => {
517
542
  return respond(await handlePushFirst(apiKey, command, project, ident, tool.pushFirstSeconds))
518
543
  }
519
544
  } catch (error) {
520
- diag(String(error?.message ?? error))
545
+ diag(describeNetworkFailure(error))
521
546
  return respond(ask())
522
547
  }
523
548
  }
@@ -525,7 +550,7 @@ const main = async () => {
525
550
  // Importing this file for its testable helpers must not consume stdin or exit.
526
551
  if (!process.env.PUSHARY_GATE_IMPORT) {
527
552
  main().catch((error) => {
528
- diag(`fatal: ${error?.message ?? error}`)
553
+ diag(`fatal: ${describeNetworkFailure(error)}`)
529
554
  respond(ask())
530
555
  })
531
556
  }
@@ -7,7 +7,7 @@ import {
7
7
  KILL_REASON,
8
8
  isDeferAnswer,
9
9
  resolveGate
10
- } from "../chunk-3USMXNVB.js";
10
+ } from "../chunk-GD275GEX.js";
11
11
  import {
12
12
  askUser,
13
13
  cancelQuestion,
@@ -19,7 +19,7 @@ import {
19
19
  reportEvent,
20
20
  scopePathFor,
21
21
  waitForAnswer
22
- } from "../chunk-H46LSQRT.js";
22
+ } from "../chunk-FZIQSDTQ.js";
23
23
  import "../chunk-BSZYIAZL.js";
24
24
  import "../chunk-SAF6HGAA.js";
25
25
  import "../chunk-7QLSKOSU.js";
@@ -41,8 +41,8 @@ import {
41
41
  } from "../chunk-MUEW424A.js";
42
42
  import {
43
43
  exitOnHelpFlag
44
- } from "../chunk-ATP6UQPH.js";
45
- import "../chunk-JGH37QRB.js";
44
+ } from "../chunk-BBK3TTU2.js";
45
+ import "../chunk-7OYGFJYZ.js";
46
46
  import "../chunk-7QLSKOSU.js";
47
47
  import "../chunk-DQAN3JQP.js";
48
48
  import {
@@ -4,7 +4,7 @@ import {
4
4
  denyReasonFrom,
5
5
  isDeferAnswer,
6
6
  resolveGate
7
- } from "../chunk-3USMXNVB.js";
7
+ } from "../chunk-GD275GEX.js";
8
8
  import {
9
9
  CODEX_AGENT,
10
10
  DEFAULT_SESSION,
@@ -35,7 +35,7 @@ import {
35
35
  toPolicyLookup,
36
36
  toPolicyLookups,
37
37
  waitForAnswer
38
- } from "../chunk-H46LSQRT.js";
38
+ } from "../chunk-FZIQSDTQ.js";
39
39
  import {
40
40
  isGatingMoment,
41
41
  recordKeylessMoment
@@ -3,7 +3,7 @@ import {
3
3
  askUser,
4
4
  reportEvent,
5
5
  waitForAnswer
6
- } from "../chunk-H46LSQRT.js";
6
+ } from "../chunk-FZIQSDTQ.js";
7
7
  import "../chunk-BSZYIAZL.js";
8
8
  import "../chunk-SAF6HGAA.js";
9
9
  import "../chunk-7QLSKOSU.js";
@@ -6,7 +6,7 @@ import {
6
6
  confirmAppConnection,
7
7
  connectDevice,
8
8
  printConnectInstructions
9
- } from "../chunk-P7VBAYQO.js";
9
+ } from "../chunk-MGFZXUUR.js";
10
10
  import "../chunk-3EGEA4KH.js";
11
11
  import {
12
12
  readKeySource
@@ -24,8 +24,8 @@ import {
24
24
  } from "../chunk-GMXKITVA.js";
25
25
  import {
26
26
  exitOnHelpFlag
27
- } from "../chunk-ATP6UQPH.js";
28
- import "../chunk-JGH37QRB.js";
27
+ } from "../chunk-BBK3TTU2.js";
28
+ import "../chunk-7OYGFJYZ.js";
29
29
  import "../chunk-BSZYIAZL.js";
30
30
  import "../chunk-SAF6HGAA.js";
31
31
  import {
@@ -84,7 +84,9 @@ var main = async () => {
84
84
  console.log();
85
85
  process.exit(EXIT.OK);
86
86
  }
87
- console.log(` ${dim("No device of yours can answer yet. Run")} ${cyan("pushary connect")} ${dim("again when you are ready.")}`);
87
+ console.log(` ${dim("No device of yours can answer yet.")}`);
88
+ for (const line of result.repair ?? []) console.log(` ${dim(line)}`);
89
+ console.log(` ${dim("Then run")} ${cyan("pushary connect")} ${dim("again.")}`);
88
90
  console.log();
89
91
  process.exit(EXIT.NO_DEVICE);
90
92
  };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  HEARTBEAT_INTERVAL_MS,
4
4
  sendHeartbeat
5
- } from "../chunk-YZT2CBC3.js";
5
+ } from "../chunk-NQTRA7H5.js";
6
6
  import {
7
7
  spawnClaude
8
8
  } from "../chunk-XHKBHWLX.js";
@@ -11,8 +11,8 @@ import {
11
11
  } from "../chunk-MUEW424A.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-ATP6UQPH.js";
15
- import "../chunk-JGH37QRB.js";
14
+ } from "../chunk-BBK3TTU2.js";
15
+ import "../chunk-7OYGFJYZ.js";
16
16
  import {
17
17
  getMachineId
18
18
  } from "../chunk-RN3NOEJF.js";
@@ -2,6 +2,11 @@
2
2
  import {
3
3
  describeWaitLadder
4
4
  } from "../chunk-IIENZE2J.js";
5
+ import {
6
+ claudeWired,
7
+ codexWired,
8
+ geminiWired
9
+ } from "../chunk-B7R4YSAB.js";
5
10
  import {
6
11
  agentProbes,
7
12
  detectAgent,
@@ -39,7 +44,7 @@ import {
39
44
  describeReach,
40
45
  fetchChannels,
41
46
  reachVerdict
42
- } from "../chunk-P7VBAYQO.js";
47
+ } from "../chunk-MGFZXUUR.js";
43
48
  import "../chunk-3EGEA4KH.js";
44
49
  import {
45
50
  keyPrefix,
@@ -62,10 +67,10 @@ import {
62
67
  } from "../chunk-MUEW424A.js";
63
68
  import {
64
69
  exitOnHelpFlag
65
- } from "../chunk-ATP6UQPH.js";
70
+ } from "../chunk-BBK3TTU2.js";
66
71
  import {
67
72
  getPackageVersion
68
- } from "../chunk-JGH37QRB.js";
73
+ } from "../chunk-7OYGFJYZ.js";
69
74
  import {
70
75
  readLedgerSummary
71
76
  } from "../chunk-WLGEY4UX.js";
@@ -149,32 +154,6 @@ var resolveDoctorExit = ({ keyExit, failures }) => {
149
154
  return EXIT.PROBLEMS_FOUND;
150
155
  };
151
156
 
152
- // src/diagnostics/wiring.ts
153
- var record = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
154
- var CLAUDE_HOOK_BINARY = /pushary-[a-z-]*hook/;
155
- var claudeWired = ({ claudeJson: claudeJson2, settings, skillExists }) => {
156
- if (record(record(claudeJson2)?.mcpServers)?.pushary) return true;
157
- const s = record(settings);
158
- if (s) {
159
- if (CLAUDE_HOOK_BINARY.test(JSON.stringify(s.hooks ?? {}))) return true;
160
- const allow = record(s.permissions)?.allow;
161
- if (Array.isArray(allow) && allow.some((rule) => String(rule).includes("mcp__pushary__"))) return true;
162
- }
163
- return skillExists;
164
- };
165
- var codexWired = ({ config, hooks, skillExists }) => {
166
- if (record(record(config)?.mcp_servers)?.pushary) return true;
167
- const h = record(hooks);
168
- if (h && hasCodexHooks(h)) return true;
169
- return skillExists;
170
- };
171
- var geminiWired = ({ settings }) => {
172
- const s = record(settings);
173
- if (!s) return false;
174
- if (record(s.mcpServers)?.pushary) return true;
175
- return hasGeminiHooks(s);
176
- };
177
-
178
157
  // bin/pushary-doctor.ts
179
158
  exitOnHelpFlag("doctor");
180
159
  var parseDoctorOptions = (argv) => {
@@ -4,7 +4,7 @@ import {
4
4
  denyReasonFrom,
5
5
  isDeferAnswer,
6
6
  resolveGate
7
- } from "../chunk-3USMXNVB.js";
7
+ } from "../chunk-GD275GEX.js";
8
8
  import {
9
9
  DEFAULT_SESSION,
10
10
  askUser,
@@ -26,7 +26,7 @@ import {
26
26
  scopePathFor,
27
27
  sendNotification,
28
28
  waitForAnswer
29
- } from "../chunk-H46LSQRT.js";
29
+ } from "../chunk-FZIQSDTQ.js";
30
30
  import {
31
31
  isGatingMoment,
32
32
  recordKeylessMoment
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-C5I2RAMT.js";
4
+ } from "../chunk-HU43EZ5Q.js";
5
5
  import "../chunk-CAJZAFVS.js";
6
6
  import {
7
7
  exitOnHelpFlag
8
- } from "../chunk-ATP6UQPH.js";
9
- import "../chunk-JGH37QRB.js";
10
- import "../chunk-3USMXNVB.js";
11
- import "../chunk-H46LSQRT.js";
8
+ } from "../chunk-BBK3TTU2.js";
9
+ import "../chunk-7OYGFJYZ.js";
10
+ import "../chunk-GD275GEX.js";
11
+ import "../chunk-FZIQSDTQ.js";
12
12
  import "../chunk-WLGEY4UX.js";
13
13
  import "../chunk-BSZYIAZL.js";
14
14
  import "../chunk-SAF6HGAA.js";
@@ -21,10 +21,10 @@ import {
21
21
  } from "../chunk-GMXKITVA.js";
22
22
  import {
23
23
  exitOnHelpFlag
24
- } from "../chunk-ATP6UQPH.js";
24
+ } from "../chunk-BBK3TTU2.js";
25
25
  import {
26
26
  getPackageVersion
27
- } from "../chunk-JGH37QRB.js";
27
+ } from "../chunk-7OYGFJYZ.js";
28
28
  import "../chunk-SAF6HGAA.js";
29
29
  import {
30
30
  UsageError
@@ -19,8 +19,8 @@ import {
19
19
  } from "../chunk-GMXKITVA.js";
20
20
  import {
21
21
  exitOnHelpFlag
22
- } from "../chunk-ATP6UQPH.js";
23
- import "../chunk-JGH37QRB.js";
22
+ } from "../chunk-BBK3TTU2.js";
23
+ import "../chunk-7OYGFJYZ.js";
24
24
  import {
25
25
  UsageError
26
26
  } from "../chunk-7QLSKOSU.js";
@@ -11,8 +11,8 @@ import {
11
11
  } from "../chunk-GMXKITVA.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-ATP6UQPH.js";
15
- import "../chunk-JGH37QRB.js";
14
+ } from "../chunk-BBK3TTU2.js";
15
+ import "../chunk-7OYGFJYZ.js";
16
16
  import "../chunk-SAF6HGAA.js";
17
17
  import {
18
18
  UsageError
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleNotification
4
- } from "../chunk-H46LSQRT.js";
4
+ } from "../chunk-FZIQSDTQ.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
7
  import "../chunk-7QLSKOSU.js";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionDenied
4
- } from "../chunk-C5I2RAMT.js";
4
+ } from "../chunk-HU43EZ5Q.js";
5
5
  import "../chunk-CAJZAFVS.js";
6
- import "../chunk-3USMXNVB.js";
7
- import "../chunk-H46LSQRT.js";
6
+ import "../chunk-GD275GEX.js";
7
+ import "../chunk-FZIQSDTQ.js";
8
8
  import "../chunk-WLGEY4UX.js";
9
9
  import "../chunk-BSZYIAZL.js";
10
10
  import "../chunk-SAF6HGAA.js";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionRequest
4
- } from "../chunk-C5I2RAMT.js";
4
+ } from "../chunk-HU43EZ5Q.js";
5
5
  import "../chunk-CAJZAFVS.js";
6
- import "../chunk-3USMXNVB.js";
7
- import "../chunk-H46LSQRT.js";
6
+ import "../chunk-GD275GEX.js";
7
+ import "../chunk-FZIQSDTQ.js";
8
8
  import "../chunk-WLGEY4UX.js";
9
9
  import "../chunk-BSZYIAZL.js";
10
10
  import "../chunk-SAF6HGAA.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePostToolUse
4
- } from "../chunk-H46LSQRT.js";
4
+ } from "../chunk-FZIQSDTQ.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
7
  import "../chunk-7QLSKOSU.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleUserPrompt
4
- } from "../chunk-H46LSQRT.js";
4
+ } from "../chunk-FZIQSDTQ.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
7
  import "../chunk-7QLSKOSU.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleSessionEnd
4
- } from "../chunk-H46LSQRT.js";
4
+ } from "../chunk-FZIQSDTQ.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
7
  import "../chunk-7QLSKOSU.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleSessionStart
4
- } from "../chunk-H46LSQRT.js";
4
+ } from "../chunk-FZIQSDTQ.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
7
  import "../chunk-7QLSKOSU.js";