@pushary/agent-hooks 1.4.2 → 1.5.1

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 (94) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +28 -0
  3. package/data/vscode-plugin/README.md +1 -1
  4. package/data/vscode-plugin/scripts/pushary-gate.mjs +2 -2
  5. package/dist/bin/pushary-bell-hook.js +22 -21
  6. package/dist/bin/pushary-bell.js +10 -10
  7. package/dist/bin/pushary-claude.js +28 -24
  8. package/dist/bin/pushary-clean.js +25 -25
  9. package/dist/bin/pushary-codex-bridge.js +16 -14
  10. package/dist/bin/pushary-codex-hook.js +32 -27
  11. package/dist/bin/pushary-codex.js +15 -10
  12. package/dist/bin/pushary-connect.js +11 -11
  13. package/dist/bin/pushary-cowork.js +6 -6
  14. package/dist/bin/pushary-daemon.js +32 -28
  15. package/dist/bin/pushary-disconnect.js +16 -16
  16. package/dist/bin/pushary-doctor.js +111 -40
  17. package/dist/bin/pushary-elicitation-hook.js +23 -22
  18. package/dist/bin/pushary-gemini-bridge.js +13 -11
  19. package/dist/bin/pushary-gemini-hook.js +29 -24
  20. package/dist/bin/pushary-hook.js +30 -30
  21. package/dist/bin/pushary-login.js +14 -14
  22. package/dist/bin/pushary-logout.js +8 -8
  23. package/dist/bin/pushary-mode.js +7 -7
  24. package/dist/bin/pushary-notification-hook.js +26 -25
  25. package/dist/bin/pushary-opencode-hook.js +25 -24
  26. package/dist/bin/pushary-permission-denied-hook.js +30 -29
  27. package/dist/bin/pushary-permission-hook.js +29 -28
  28. package/dist/bin/pushary-post-hook.js +26 -25
  29. package/dist/bin/pushary-prompt-hook.js +26 -25
  30. package/dist/bin/pushary-session-end-hook.js +26 -25
  31. package/dist/bin/pushary-session-start-hook.js +33 -27
  32. package/dist/bin/pushary-setup.js +94 -88
  33. package/dist/bin/pushary-stats.js +6 -6
  34. package/dist/bin/pushary-status.js +15 -15
  35. package/dist/bin/pushary-stop-hook.js +26 -25
  36. package/dist/bin/pushary-stopfailure-hook.js +26 -25
  37. package/dist/bin/pushary-suggestions.js +4 -4
  38. package/dist/bin/pushary-transcript-register.js +20 -19
  39. package/dist/bin/pushary-transcripts.js +8 -8
  40. package/dist/bin/pushary-upgrade.js +269 -45
  41. package/dist/bin/pushary-wait.js +7 -7
  42. package/dist/bin/pushary.js +8 -8
  43. package/dist/{chunk-LPYCPFBZ.js → chunk-2AUIEZYS.js} +3 -3
  44. package/dist/{chunk-4BROEAKH.js → chunk-2QT3GCU4.js} +1 -1
  45. package/dist/{chunk-55KW4FLG.js → chunk-3ZSGKLSO.js} +2 -2
  46. package/dist/{chunk-NY6XQ6CA.js → chunk-43LJSM4F.js} +2 -2
  47. package/dist/{chunk-LEAAERSQ.js → chunk-43ZDACBO.js} +1 -1
  48. package/dist/{chunk-II7PUMPB.js → chunk-4ERLRNOK.js} +3 -3
  49. package/dist/{chunk-M5CTUFF3.js → chunk-5HYNICS7.js} +1 -1
  50. package/dist/{chunk-MW6ZPC6R.js → chunk-5UQ5ATIE.js} +1 -1
  51. package/dist/{chunk-TYEO6T5J.js → chunk-5ZZG76S2.js} +2 -2
  52. package/dist/{chunk-EQRS3SGM.js → chunk-66H2QQAK.js} +1 -1
  53. package/dist/chunk-6EEANS74.js +300 -0
  54. package/dist/{chunk-TRLFZKVG.js → chunk-6IU45EHE.js} +49 -26
  55. package/dist/{chunk-JVTOML54.js → chunk-6QFEQIPM.js} +2 -2
  56. package/dist/chunk-BY2CRWBO.js +38 -0
  57. package/dist/{chunk-G653QPTR.js → chunk-D573TLP6.js} +7 -7
  58. package/dist/{chunk-25RTLTQD.js → chunk-DTQNDR7C.js} +1 -1
  59. package/dist/{chunk-FAH3D74E.js → chunk-EA3IELHP.js} +6 -0
  60. package/dist/{chunk-EYRGBYZG.js → chunk-HETOKNIL.js} +1 -1
  61. package/dist/{chunk-UM5J3J4V.js → chunk-HU5LSYL2.js} +2 -2
  62. package/dist/{chunk-PC6DU5C4.js → chunk-HUAOMX4U.js} +1 -1
  63. package/dist/{chunk-2V2IKOGJ.js → chunk-HVBF35GT.js} +2 -2
  64. package/dist/{chunk-DINDL2CF.js → chunk-HWJW3CPO.js} +25 -5
  65. package/dist/{chunk-VW66JEGU.js → chunk-IV3RHICU.js} +8 -8
  66. package/dist/{chunk-ACYIZ3KH.js → chunk-JKBDGZFL.js} +12 -6
  67. package/dist/{chunk-ZVY25BMK.js → chunk-K3QVDAZW.js} +1 -1
  68. package/dist/{chunk-MUVTZNJW.js → chunk-KHXVTWYS.js} +3 -3
  69. package/dist/{chunk-T5SZ4PML.js → chunk-KJRALILH.js} +7 -4
  70. package/dist/{chunk-VOMOZ4D5.js → chunk-M2LMXPJZ.js} +1 -1
  71. package/dist/{chunk-SUWRZYQG.js → chunk-MDJJW3LP.js} +3 -3
  72. package/dist/chunk-MU3WU2FO.js +166 -0
  73. package/dist/{chunk-2UMNXADU.js → chunk-OSJEMXSR.js} +5 -1
  74. package/dist/{chunk-TWWLVOPB.js → chunk-P4BNYJ5Q.js} +5 -5
  75. package/dist/{chunk-XDP3UYH5.js → chunk-PJ27EHCD.js} +8 -8
  76. package/dist/{chunk-LGXUGYUH.js → chunk-PYCQXCI5.js} +2 -2
  77. package/dist/{chunk-VIOL2DJS.js → chunk-R5KY3PBN.js} +5 -5
  78. package/dist/{chunk-SOUZBGYJ.js → chunk-T4QY64OR.js} +15 -14
  79. package/dist/{chunk-DY4ILT6L.js → chunk-TFKBFQCE.js} +1 -1
  80. package/dist/{chunk-GZ7E6VOB.js → chunk-TIWURSLS.js} +1 -1
  81. package/dist/{chunk-F4UWL4NY.js → chunk-TUXFIVOH.js} +1 -1
  82. package/dist/{chunk-UJBZIKSY.js → chunk-TZGCUNOX.js} +8 -8
  83. package/dist/{chunk-FU2DFEAZ.js → chunk-USQDVBEV.js} +2 -2
  84. package/dist/{chunk-YXP3WPAI.js → chunk-UYDTFCHW.js} +1 -1
  85. package/dist/{chunk-4ZDKSDVW.js → chunk-WNJSGZY7.js} +4 -4
  86. package/dist/{chunk-NHTAHAIS.js → chunk-WOLPADR6.js} +1 -1
  87. package/dist/{chunk-BZ4GDOJX.js → chunk-X7FESZTD.js} +7 -7
  88. package/dist/{chunk-NOWZUGZW.js → chunk-XWEONSLV.js} +1 -1
  89. package/dist/{chunk-Y3MM6PYN.js → chunk-YAWXKL2X.js} +1 -1
  90. package/dist/{chunk-GKIUEIDX.js → chunk-YQMFGWBD.js} +1 -1
  91. package/dist/{chunk-WPVHRUDT.js → chunk-Z4VGIBJ7.js} +3 -3
  92. package/dist/{reapply-J527BCJG.js → reapply-5CZSTJZI.js} +13 -8
  93. package/dist/src/index.js +18 -16
  94. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.1
4
+
5
+ - Setup no longer stops at a Codex version. It writes the Pushary hooks, asks Codex to trust them, and checks Codex's answer. It used to trust the hooks itself only up to Codex 0.155.1, and on anything newer told you to open Codex and trust them by hand.
6
+ - Pushary asks Codex only when you run setup, upgrade or doctor yourself at a terminal, only through the `codex` command on your PATH, and only if Codex has been opened on this machine before. It never starts the Codex inside the ChatGPT app, and never while a hook is running.
7
+ - If Codex does not accept the trust, setup says so and tells you to open Codex, run `/hooks`, and choose Trust for the Pushary hooks. When Codex is not asked, setup says why in one line and keeps the trust entries it wrote itself, as it did before.
8
+ - `pushary upgrade` asks Codex the same way after it refreshes the Codex hooks. The daily automatic update refreshes the hooks and writes the same trust entries but does not start Codex, so an install left untrusted by the old version limit is fixed on its next update either way. Machines older than 1.5.0 do not update themselves: run `npx @pushary/agent-hooks@latest upgrade` once.
9
+ - `pushary doctor` shows what Codex itself reports for each Pushary hook: trusted, untrusted, modified, not listed, or turned off. When Codex is not asked or cannot be asked, doctor says so and uses its own check instead.
10
+ - Pause automatic updates on Linux to preserve phone-started sessions during daemon replacement.
11
+ - Retry incomplete configuration and daemon refreshes after an automatic installation, including when the installed version is already current.
12
+
13
+ ## 1.5.0
14
+
15
+ - Pushary now updates itself in the background. When an agent session starts, it checks at most once a day for a newer version within the same major version, installs it into the global npm folder your hooks already run from, and refreshes each agent's config the way `pushary upgrade` does. The session never waits for it. A new major version is shown in `pushary doctor` and left for you to install.
16
+ - Turn it off with `pushary upgrade --auto=off` (and back on with `--auto=on`), or set `PUSHARY_DISABLE_AUTOUPDATE=1` in the environment your agents start from.
17
+ - It does not run on Windows yet, in CI, or for a copy run through `npx`, a plugin, or the Mac app. It never uses `sudo`: if npm cannot write to the global folder, the attempt is recorded as failed and nothing changes.
18
+ - This only reaches machines on 1.5.0 or later. To get there, run `npx @pushary/agent-hooks@latest upgrade` once.
19
+ - `pushary doctor` shows whether automatic updates are on and the result of the last check, and `setup` and `doctor` tell you once when Pushary has updated itself.
20
+ - `pushary doctor` no longer calls a build newer than the npm release out of date.
21
+ - The commands the CLI prints for you to copy now say `npx @pushary/agent-hooks@latest`. Without `@latest`, npx runs whatever older version is installed globally.
22
+ - A failed npm install now reports npm's reason, such as a permission error, instead of a line like `syscall mkdir`.
23
+
3
24
  ## 1.4.2
4
25
 
5
26
  - Setup trusts the Pushary hooks for you on Codex up to 0.155.1. It used to stop at 0.147.0, so on a newer Codex it wrote the hooks without trusting them, Codex never ran them, and setup still said it was done.
package/README.md CHANGED
@@ -244,6 +244,34 @@ npx @pushary/agent-hooks@latest wait 45
244
244
  npx @pushary/agent-hooks@latest clean
245
245
  ```
246
246
 
247
+ ## Updates
248
+
249
+ From 1.5.0, Pushary updates itself. When an agent session starts, the session-start
250
+ hook checks at most once a day whether a newer version is published. If one is, it
251
+ installs that version in the background into the same global npm folder your hooks
252
+ already run from, then refreshes each agent's config the way `pushary upgrade` does.
253
+ The session does not wait for it, and the new version runs from the next hook call.
254
+
255
+ - It stays within the same major version. A new major shows in `pushary doctor`, and
256
+ you move to it with `npx @pushary/agent-hooks@latest upgrade`.
257
+ - It only updates a global npm install. A copy run through `npx`, a plugin, or the Mac
258
+ app updates by its own route.
259
+ - It never uses `sudo`. If npm cannot write to the global folder, the attempt is
260
+ recorded as failed and nothing changes.
261
+ - It does not run on Windows yet, or when `CI` is set. Linux automatic updates are paused because restarting the systemd daemon can terminate phone-started sessions. On Linux, finish running sessions before upgrading manually.
262
+ - If installation succeeds but configuration refresh fails, the next automatic check or manual upgrade retries the refresh before checking for another release.
263
+
264
+ Turn it off with either of these:
265
+
266
+ ```bash
267
+ pushary upgrade --auto=off # turn it back on with --auto=on
268
+ export PUSHARY_DISABLE_AUTOUPDATE=1 # in the environment your agents start from
269
+ ```
270
+
271
+ `pushary doctor` shows whether it is on and the result of the last check. The state is
272
+ kept in `~/.pushary/auto-update.json`, and the output of recent updates in
273
+ `~/.pushary/logs/auto-update.log`.
274
+
247
275
  ## Manual MCP setup
248
276
 
249
277
  If you only want notifications and questions (no permission gating), add Pushary to your MCP config directly:
@@ -106,7 +106,7 @@ This repository uses the `.claude-plugin/plugin.json` layout, which VS Code, Git
106
106
 
107
107
  The layout is portable; this plugin is not meant to be. `hooks/hooks.json` uses VS Code's flat hook form, and the gate speaks VS Code's tool names, so treat this as a VS Code plugin that happens to sit in a portable folder shape.
108
108
 
109
- Claude Code users are served by `npx @pushary/agent-hooks setup --agents claude_code`, which installs a hook built for Claude Code's own tool names and matcher format. Do not install this directory as a Claude Code plugin as well: at best it duplicates the MCP server, and the two installs would fight over the same approvals.
109
+ Claude Code users are served by `npx @pushary/agent-hooks@latest setup --agents claude_code`, which installs a hook built for Claude Code's own tool names and matcher format. Do not install this directory as a Claude Code plugin as well: at best it duplicates the MCP server, and the two installs would fight over the same approvals.
110
110
 
111
111
  ## Development
112
112
 
@@ -723,9 +723,9 @@ const main = async () => {
723
723
 
724
724
  const apiKey = resolveApiKey()
725
725
  if (!apiKey) {
726
- diag('no API key found (PUSHARY_API_KEY, the plugin .mcp.json, or ~/.pushary/config.json). Run: npx @pushary/agent-hooks setup')
726
+ diag('no API key found (PUSHARY_API_KEY, the plugin .mcp.json, or ~/.pushary/config.json). Run: npx @pushary/agent-hooks@latest setup')
727
727
  return respond(
728
- unresolved(input.tool_name, 'Pushary is not configured: run `npx @pushary/agent-hooks setup` (get a key at https://pushary.com) to route this approval to your phone.')
728
+ unresolved(input.tool_name, 'Pushary is not configured: run `npx @pushary/agent-hooks@latest setup` (get a key at https://pushary.com) to route this approval to your phone.')
729
729
  )
730
730
  }
731
731
 
@@ -1,35 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-25RTLTQD.js";
4
+ } from "../chunk-DTQNDR7C.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-JVTOML54.js";
8
- import "../chunk-UJBZIKSY.js";
7
+ } from "../chunk-6QFEQIPM.js";
8
+ import "../chunk-TZGCUNOX.js";
9
9
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-4ZDKSDVW.js";
11
- import "../chunk-DY4ILT6L.js";
12
- import "../chunk-ZVY25BMK.js";
13
- import "../chunk-WPVHRUDT.js";
14
- import "../chunk-BZ4GDOJX.js";
15
- import "../chunk-LPYCPFBZ.js";
16
- import "../chunk-MW6ZPC6R.js";
17
- import "../chunk-GZ7E6VOB.js";
18
- import "../chunk-EQRS3SGM.js";
19
- import "../chunk-4BROEAKH.js";
10
+ import "../chunk-WNJSGZY7.js";
11
+ import "../chunk-TFKBFQCE.js";
12
+ import "../chunk-K3QVDAZW.js";
13
+ import "../chunk-Z4VGIBJ7.js";
14
+ import "../chunk-X7FESZTD.js";
15
+ import "../chunk-2AUIEZYS.js";
16
+ import "../chunk-5UQ5ATIE.js";
17
+ import "../chunk-TIWURSLS.js";
18
+ import "../chunk-66H2QQAK.js";
19
+ import "../chunk-2QT3GCU4.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-YXP3WPAI.js";
22
- import "../chunk-NHTAHAIS.js";
23
- import "../chunk-TRLFZKVG.js";
21
+ import "../chunk-UYDTFCHW.js";
22
+ import "../chunk-WOLPADR6.js";
23
+ import "../chunk-6IU45EHE.js";
24
24
  import "../chunk-GMXKITVA.js";
25
- import "../chunk-DINDL2CF.js";
26
- import "../chunk-FU2DFEAZ.js";
25
+ import "../chunk-USQDVBEV.js";
27
26
  import "../chunk-7QLSKOSU.js";
28
27
  import "../chunk-KZERVKTD.js";
29
- import "../chunk-UM5J3J4V.js";
28
+ import "../chunk-HU5LSYL2.js";
30
29
  import "../chunk-T7E75EKA.js";
31
- import "../chunk-2UMNXADU.js";
32
- import "../chunk-SOUZBGYJ.js";
30
+ import "../chunk-OSJEMXSR.js";
31
+ import "../chunk-T4QY64OR.js";
32
+ import "../chunk-EA3IELHP.js";
33
+ import "../chunk-HWJW3CPO.js";
33
34
 
34
35
  // bin/pushary-bell-hook.ts
35
36
  var main = async () => {
@@ -5,38 +5,38 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-25RTLTQD.js";
8
+ } from "../chunk-DTQNDR7C.js";
9
9
  import {
10
10
  addBellHooks,
11
11
  bellInstalled,
12
12
  removeBellHooks
13
- } from "../chunk-MW6ZPC6R.js";
13
+ } from "../chunk-5UQ5ATIE.js";
14
14
  import {
15
15
  claudeSettings
16
- } from "../chunk-TRLFZKVG.js";
16
+ } from "../chunk-6IU45EHE.js";
17
17
  import {
18
18
  createIo
19
19
  } from "../chunk-5RUIFDTP.js";
20
20
  import {
21
21
  exitOnHelpFlag
22
- } from "../chunk-TWWLVOPB.js";
23
- import "../chunk-FAH3D74E.js";
22
+ } from "../chunk-P4BNYJ5Q.js";
24
23
  import {
25
24
  parseFlags
26
25
  } from "../chunk-GMXKITVA.js";
27
- import "../chunk-DINDL2CF.js";
28
- import "../chunk-FU2DFEAZ.js";
26
+ import "../chunk-USQDVBEV.js";
29
27
  import "../chunk-7QLSKOSU.js";
30
28
  import {
31
29
  EXIT
32
30
  } from "../chunk-KZERVKTD.js";
33
- import "../chunk-UM5J3J4V.js";
31
+ import "../chunk-HU5LSYL2.js";
34
32
  import {
35
33
  readJsonSafe,
36
34
  writeJsonAtomic
37
35
  } from "../chunk-T7E75EKA.js";
38
- import "../chunk-2UMNXADU.js";
39
- import "../chunk-SOUZBGYJ.js";
36
+ import "../chunk-OSJEMXSR.js";
37
+ import "../chunk-T4QY64OR.js";
38
+ import "../chunk-EA3IELHP.js";
39
+ import "../chunk-HWJW3CPO.js";
40
40
 
41
41
  // bin/pushary-bell.ts
42
42
  exitOnHelpFlag("bell");
@@ -8,7 +8,7 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-VOMOZ4D5.js";
11
+ } from "../chunk-M2LMXPJZ.js";
12
12
  import {
13
13
  isDeferAnswer
14
14
  } from "../chunk-YHG74UFF.js";
@@ -17,24 +17,24 @@ import {
17
17
  loadSessionKey,
18
18
  registerTranscript,
19
19
  registeredTranscriptEnabled
20
- } from "../chunk-UJBZIKSY.js";
20
+ } from "../chunk-TZGCUNOX.js";
21
21
  import "../chunk-SGZJ5LYH.js";
22
- import "../chunk-4ZDKSDVW.js";
23
- import "../chunk-DY4ILT6L.js";
24
- import "../chunk-ZVY25BMK.js";
25
- import "../chunk-WPVHRUDT.js";
22
+ import "../chunk-WNJSGZY7.js";
23
+ import "../chunk-TFKBFQCE.js";
24
+ import "../chunk-K3QVDAZW.js";
25
+ import "../chunk-Z4VGIBJ7.js";
26
26
  import {
27
27
  ensureDaemonRunning
28
- } from "../chunk-BZ4GDOJX.js";
29
- import "../chunk-LPYCPFBZ.js";
30
- import "../chunk-MW6ZPC6R.js";
28
+ } from "../chunk-X7FESZTD.js";
29
+ import "../chunk-2AUIEZYS.js";
30
+ import "../chunk-5UQ5ATIE.js";
31
31
  import {
32
32
  encryptRecord
33
- } from "../chunk-GZ7E6VOB.js";
34
- import "../chunk-EQRS3SGM.js";
33
+ } from "../chunk-TIWURSLS.js";
34
+ import "../chunk-66H2QQAK.js";
35
35
  import {
36
36
  transcriptsEnabled
37
- } from "../chunk-4BROEAKH.js";
37
+ } from "../chunk-2QT3GCU4.js";
38
38
  import {
39
39
  needsShell,
40
40
  spawnClaude
@@ -56,8 +56,8 @@ import {
56
56
  reportEvent,
57
57
  savePendingCommand,
58
58
  scopePathFor
59
- } from "../chunk-G653QPTR.js";
60
- import "../chunk-YXP3WPAI.js";
59
+ } from "../chunk-D573TLP6.js";
60
+ import "../chunk-UYDTFCHW.js";
61
61
  import {
62
62
  DECISION_STOP_REASON,
63
63
  askUser,
@@ -67,29 +67,32 @@ import {
67
67
  nextLongPollMs,
68
68
  waitForAnswer,
69
69
  withdrawQuestion
70
- } from "../chunk-LGXUGYUH.js";
70
+ } from "../chunk-PYCQXCI5.js";
71
71
  import {
72
72
  getMachineId
73
- } from "../chunk-NHTAHAIS.js";
74
- import "../chunk-TRLFZKVG.js";
73
+ } from "../chunk-WOLPADR6.js";
74
+ import "../chunk-6IU45EHE.js";
75
75
  import "../chunk-GMXKITVA.js";
76
- import "../chunk-DINDL2CF.js";
77
- import "../chunk-FU2DFEAZ.js";
78
- import "../chunk-EYRGBYZG.js";
76
+ import "../chunk-USQDVBEV.js";
77
+ import "../chunk-HETOKNIL.js";
79
78
  import "../chunk-SAF6HGAA.js";
80
79
  import "../chunk-7QLSKOSU.js";
81
80
  import "../chunk-KZERVKTD.js";
82
- import "../chunk-UM5J3J4V.js";
81
+ import "../chunk-HU5LSYL2.js";
83
82
  import "../chunk-T7E75EKA.js";
84
83
  import {
85
84
  getApiKey,
86
85
  getBaseUrl
87
- } from "../chunk-2UMNXADU.js";
86
+ } from "../chunk-OSJEMXSR.js";
88
87
  import {
89
88
  KILL_REASON,
90
89
  redactSecrets,
91
90
  resolveGate
92
- } from "../chunk-SOUZBGYJ.js";
91
+ } from "../chunk-T4QY64OR.js";
92
+ import {
93
+ NPX_LATEST_COMMAND
94
+ } from "../chunk-EA3IELHP.js";
95
+ import "../chunk-HWJW3CPO.js";
93
96
 
94
97
  // src/wrapper/localPassthrough.ts
95
98
  var SIGNAL_NUMBERS = {
@@ -1548,7 +1551,8 @@ var runDualMode = async (binary, args2, startingMode) => {
1548
1551
  apiKey = getApiKey();
1549
1552
  } catch {
1550
1553
  process.stderr.write(
1551
- "[pushary] phone control needs an API key. Run `npx @pushary/agent-hooks setup`. Running the normal passthrough for now.\n"
1554
+ `[pushary] phone control needs an API key. Run \`${NPX_LATEST_COMMAND} setup\`. Running the normal passthrough for now.
1555
+ `
1552
1556
  );
1553
1557
  return { implemented: false };
1554
1558
  }
@@ -7,14 +7,14 @@ import {
7
7
  createGuards,
8
8
  resolveHermesPython,
9
9
  runHermesPythonScript
10
- } from "../chunk-Y3MM6PYN.js";
10
+ } from "../chunk-YAWXKL2X.js";
11
11
  import "../chunk-P32LPT2L.js";
12
12
  import {
13
13
  removeInstructionBlock,
14
14
  shortenHome,
15
15
  unregisterPluginLocation,
16
16
  vscodeSettingsTargets
17
- } from "../chunk-MUVTZNJW.js";
17
+ } from "../chunk-KHXVTWYS.js";
18
18
  import {
19
19
  OPENCODE_PLUGIN_SIBLING,
20
20
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -24,7 +24,7 @@ import {
24
24
  openCodePluginDir,
25
25
  openCodePluginFile,
26
26
  removeOpenCodeMcpServer
27
- } from "../chunk-F4UWL4NY.js";
27
+ } from "../chunk-TUXFIVOH.js";
28
28
  import {
29
29
  compatibleConfigFile,
30
30
  compatibleInstructionsFile,
@@ -32,40 +32,40 @@ import {
32
32
  compatiblePermissionRuleFile,
33
33
  removeCompatibleHooks,
34
34
  removeCompatibleMcpServer
35
- } from "../chunk-VIOL2DJS.js";
35
+ } from "../chunk-R5KY3PBN.js";
36
36
  import {
37
37
  isClaudeMcpSnapshot,
38
38
  removeClaudeMcpServers,
39
39
  removePusharySettings,
40
40
  removePusharyToolPermissions,
41
41
  restoreClaudeMcpServer
42
- } from "../chunk-II7PUMPB.js";
42
+ } from "../chunk-4ERLRNOK.js";
43
43
  import {
44
44
  hookOwnerOf,
45
45
  isHookTakeoverReceipt,
46
46
  restoreHookTakeover,
47
47
  restoreMcpServer
48
- } from "../chunk-4ZDKSDVW.js";
49
- import "../chunk-DY4ILT6L.js";
48
+ } from "../chunk-WNJSGZY7.js";
49
+ import "../chunk-TFKBFQCE.js";
50
50
  import {
51
51
  liveBridgeProbe,
52
52
  resolveBridgeStub
53
- } from "../chunk-ZVY25BMK.js";
53
+ } from "../chunk-K3QVDAZW.js";
54
54
  import {
55
55
  pusharyHookExecutable
56
- } from "../chunk-WPVHRUDT.js";
56
+ } from "../chunk-Z4VGIBJ7.js";
57
57
  import {
58
58
  disableDaemonService
59
- } from "../chunk-BZ4GDOJX.js";
59
+ } from "../chunk-X7FESZTD.js";
60
60
  import {
61
61
  removeGeminiSettings
62
- } from "../chunk-LPYCPFBZ.js";
63
- import "../chunk-MW6ZPC6R.js";
62
+ } from "../chunk-2AUIEZYS.js";
63
+ import "../chunk-5UQ5ATIE.js";
64
64
  import "../chunk-XHKBHWLX.js";
65
- import "../chunk-G653QPTR.js";
66
- import "../chunk-YXP3WPAI.js";
67
- import "../chunk-LGXUGYUH.js";
68
- import "../chunk-NHTAHAIS.js";
65
+ import "../chunk-D573TLP6.js";
66
+ import "../chunk-UYDTFCHW.js";
67
+ import "../chunk-PYCQXCI5.js";
68
+ import "../chunk-WOLPADR6.js";
69
69
  import {
70
70
  bridgeAgentKey,
71
71
  claudeJson,
@@ -94,29 +94,27 @@ import {
94
94
  restoreCodexHookTrust,
95
95
  vscodePluginDir,
96
96
  vscodePluginMcp
97
- } from "../chunk-TRLFZKVG.js";
97
+ } from "../chunk-6IU45EHE.js";
98
98
  import {
99
99
  exitOnHelpFlag
100
- } from "../chunk-TWWLVOPB.js";
101
- import "../chunk-FAH3D74E.js";
100
+ } from "../chunk-P4BNYJ5Q.js";
102
101
  import {
103
102
  rejectUnknownFlags
104
103
  } from "../chunk-GMXKITVA.js";
105
- import "../chunk-DINDL2CF.js";
106
104
  import {
107
105
  CANDIDATE_RCS,
108
106
  isDisabledExport,
109
107
  removeClaudeAlias
110
- } from "../chunk-FU2DFEAZ.js";
111
- import "../chunk-EYRGBYZG.js";
108
+ } from "../chunk-USQDVBEV.js";
109
+ import "../chunk-HETOKNIL.js";
112
110
  import "../chunk-SAF6HGAA.js";
113
111
  import "../chunk-7QLSKOSU.js";
114
112
  import {
115
113
  EXIT
116
114
  } from "../chunk-KZERVKTD.js";
117
- import "../chunk-UM5J3J4V.js";
115
+ import "../chunk-HU5LSYL2.js";
118
116
  import "../chunk-T7E75EKA.js";
119
- import "../chunk-2UMNXADU.js";
117
+ import "../chunk-OSJEMXSR.js";
120
118
  import {
121
119
  CURSOR_GATE_EVENTS,
122
120
  HOOK_COMPATIBLE_PROFILES,
@@ -125,7 +123,9 @@ import {
125
123
  SUPPORT_EMAIL,
126
124
  isValidApiKey,
127
125
  redactSecrets
128
- } from "../chunk-SOUZBGYJ.js";
126
+ } from "../chunk-T4QY64OR.js";
127
+ import "../chunk-EA3IELHP.js";
128
+ import "../chunk-HWJW3CPO.js";
129
129
 
130
130
  // bin/pushary-clean.ts
131
131
  import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync3 } from "fs";
@@ -1,54 +1,56 @@
1
1
  #!/usr/bin/env node
2
- import "../chunk-TYEO6T5J.js";
2
+ import "../chunk-5ZZG76S2.js";
3
3
  import {
4
4
  LiveTranscriptRelay,
5
5
  liveSessionSleep,
6
6
  postLiveSession,
7
7
  postLiveSessionUntilAccepted,
8
8
  startLiveSessionHeartbeat
9
- } from "../chunk-2V2IKOGJ.js";
9
+ } from "../chunk-HVBF35GT.js";
10
10
  import {
11
11
  SESSION_IDLE_TIMEOUT_MS,
12
12
  describeIdleWindow,
13
13
  idleDeadlinePassed,
14
14
  startProcessOwnership,
15
15
  withSpawnProcessOwnership
16
- } from "../chunk-VOMOZ4D5.js";
17
- import "../chunk-GZ7E6VOB.js";
18
- import "../chunk-EQRS3SGM.js";
16
+ } from "../chunk-M2LMXPJZ.js";
17
+ import "../chunk-TIWURSLS.js";
18
+ import "../chunk-66H2QQAK.js";
19
19
  import {
20
20
  transcriptsEnabled
21
- } from "../chunk-4BROEAKH.js";
21
+ } from "../chunk-2QT3GCU4.js";
22
22
  import {
23
23
  spawnClaude
24
24
  } from "../chunk-XHKBHWLX.js";
25
25
  import {
26
26
  isDecisionStopped,
27
27
  withdrawQuestion
28
- } from "../chunk-LGXUGYUH.js";
28
+ } from "../chunk-PYCQXCI5.js";
29
29
  import {
30
30
  getMachineId
31
- } from "../chunk-NHTAHAIS.js";
31
+ } from "../chunk-WOLPADR6.js";
32
32
  import {
33
33
  resolveBinary
34
- } from "../chunk-TRLFZKVG.js";
35
- import "../chunk-FU2DFEAZ.js";
34
+ } from "../chunk-6IU45EHE.js";
35
+ import "../chunk-USQDVBEV.js";
36
36
  import {
37
37
  callMcpTool
38
- } from "../chunk-EYRGBYZG.js";
38
+ } from "../chunk-HETOKNIL.js";
39
39
  import "../chunk-SAF6HGAA.js";
40
40
  import "../chunk-7QLSKOSU.js";
41
41
  import "../chunk-KZERVKTD.js";
42
- import "../chunk-UM5J3J4V.js";
42
+ import "../chunk-HU5LSYL2.js";
43
43
  import "../chunk-T7E75EKA.js";
44
44
  import {
45
45
  getApiKey,
46
46
  getBaseUrl
47
- } from "../chunk-2UMNXADU.js";
47
+ } from "../chunk-OSJEMXSR.js";
48
48
  import {
49
49
  parseAgentQuestion,
50
50
  parseAgentQuestionAnswers
51
- } from "../chunk-SOUZBGYJ.js";
51
+ } from "../chunk-T4QY64OR.js";
52
+ import "../chunk-EA3IELHP.js";
53
+ import "../chunk-HWJW3CPO.js";
52
54
 
53
55
  // bin/pushary-codex-bridge.ts
54
56
  import { existsSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  takeHookHoldBudget
4
- } from "../chunk-M5CTUFF3.js";
4
+ } from "../chunk-5HYNICS7.js";
5
5
  import {
6
6
  blockedActionFingerprint,
7
7
  codexCallKey,
@@ -13,30 +13,33 @@ import {
13
13
  recordCodexCallDecision,
14
14
  reportMachineDenial,
15
15
  userScope
16
- } from "../chunk-SUWRZYQG.js";
16
+ } from "../chunk-MDJJW3LP.js";
17
+ import {
18
+ triggerAutoUpdate
19
+ } from "../chunk-MU3WU2FO.js";
17
20
  import {
18
21
  isGatingMoment,
19
22
  recordKeylessMoment
20
- } from "../chunk-LEAAERSQ.js";
23
+ } from "../chunk-43ZDACBO.js";
21
24
  import {
22
25
  readHookInput
23
- } from "../chunk-JVTOML54.js";
26
+ } from "../chunk-6QFEQIPM.js";
24
27
  import {
25
28
  denyReasonFrom,
26
29
  isDeferAnswer
27
30
  } from "../chunk-YHG74UFF.js";
28
- import "../chunk-UJBZIKSY.js";
31
+ import "../chunk-TZGCUNOX.js";
29
32
  import "../chunk-SGZJ5LYH.js";
30
- import "../chunk-4ZDKSDVW.js";
31
- import "../chunk-DY4ILT6L.js";
32
- import "../chunk-ZVY25BMK.js";
33
- import "../chunk-WPVHRUDT.js";
34
- import "../chunk-BZ4GDOJX.js";
35
- import "../chunk-LPYCPFBZ.js";
36
- import "../chunk-MW6ZPC6R.js";
37
- import "../chunk-GZ7E6VOB.js";
38
- import "../chunk-EQRS3SGM.js";
39
- import "../chunk-4BROEAKH.js";
33
+ import "../chunk-WNJSGZY7.js";
34
+ import "../chunk-TFKBFQCE.js";
35
+ import "../chunk-K3QVDAZW.js";
36
+ import "../chunk-Z4VGIBJ7.js";
37
+ import "../chunk-X7FESZTD.js";
38
+ import "../chunk-2AUIEZYS.js";
39
+ import "../chunk-5UQ5ATIE.js";
40
+ import "../chunk-TIWURSLS.js";
41
+ import "../chunk-66H2QQAK.js";
42
+ import "../chunk-2QT3GCU4.js";
40
43
  import "../chunk-XHKBHWLX.js";
41
44
  import {
42
45
  CODEX_AGENT,
@@ -73,8 +76,8 @@ import {
73
76
  toCodexWire,
74
77
  toPolicyLookup,
75
78
  toPolicyLookups
76
- } from "../chunk-G653QPTR.js";
77
- import "../chunk-YXP3WPAI.js";
79
+ } from "../chunk-D573TLP6.js";
80
+ import "../chunk-UYDTFCHW.js";
78
81
  import {
79
82
  DECISION_STOP_REASON,
80
83
  askUser,
@@ -86,27 +89,26 @@ import {
86
89
  requestGate,
87
90
  sendNotification,
88
91
  waitForQuestion
89
- } from "../chunk-LGXUGYUH.js";
92
+ } from "../chunk-PYCQXCI5.js";
90
93
  import {
91
94
  getMachineId
92
- } from "../chunk-NHTAHAIS.js";
95
+ } from "../chunk-WOLPADR6.js";
93
96
  import {
94
97
  canonicalJson
95
- } from "../chunk-TRLFZKVG.js";
98
+ } from "../chunk-6IU45EHE.js";
96
99
  import "../chunk-GMXKITVA.js";
97
- import "../chunk-DINDL2CF.js";
98
- import "../chunk-FU2DFEAZ.js";
99
- import "../chunk-EYRGBYZG.js";
100
+ import "../chunk-USQDVBEV.js";
101
+ import "../chunk-HETOKNIL.js";
100
102
  import "../chunk-SAF6HGAA.js";
101
103
  import "../chunk-7QLSKOSU.js";
102
104
  import "../chunk-KZERVKTD.js";
103
- import "../chunk-UM5J3J4V.js";
105
+ import "../chunk-HU5LSYL2.js";
104
106
  import {
105
107
  writeFileAtomic
106
108
  } from "../chunk-T7E75EKA.js";
107
109
  import {
108
110
  getApiKey
109
- } from "../chunk-2UMNXADU.js";
111
+ } from "../chunk-OSJEMXSR.js";
110
112
  import {
111
113
  CODEX_RESCUE_TOOL_NAME,
112
114
  DECISION_LINE_MAX,
@@ -120,7 +122,9 @@ import {
120
122
  hookWaitClamped,
121
123
  hookWaitDeadline,
122
124
  resolveGate
123
- } from "../chunk-SOUZBGYJ.js";
125
+ } from "../chunk-T4QY64OR.js";
126
+ import "../chunk-EA3IELHP.js";
127
+ import "../chunk-HWJW3CPO.js";
124
128
 
125
129
  // bin/pushary-codex-hook.ts
126
130
  import { basename } from "path";
@@ -741,7 +745,7 @@ var decidePreToolUse = async (input) => {
741
745
  };
742
746
  var repairCodexHoldsQuietly = async () => {
743
747
  try {
744
- const { repairCodexHolds } = await import("../reapply-J527BCJG.js");
748
+ const { repairCodexHolds } = await import("../reapply-5CZSTJZI.js");
745
749
  repairCodexHolds();
746
750
  } catch {
747
751
  return;
@@ -818,6 +822,7 @@ var main = async () => {
818
822
  }
819
823
  case "SessionStart":
820
824
  await repairCodexHoldsQuietly();
825
+ triggerAutoUpdate({ isSubagentStart: Boolean(input.agent_id) });
821
826
  await reportSessionStart(input);
822
827
  break;
823
828
  case "SessionEnd":