@pushary/agent-hooks 1.9.18 → 1.9.19

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 (102) hide show
  1. package/CHANGELOG.md +46 -18
  2. package/data/cursor-plugin/.cursor-plugin/plugin.json +1 -1
  3. package/data/cursor-plugin/CHANGELOG.md +5 -0
  4. package/dist/bin/pushary-bell-hook.js +25 -25
  5. package/dist/bin/pushary-bell.js +9 -9
  6. package/dist/bin/pushary-claude.js +26 -25
  7. package/dist/bin/pushary-clean.js +28 -28
  8. package/dist/bin/pushary-codex-bridge.js +17 -17
  9. package/dist/bin/pushary-codex-hook.js +30 -30
  10. package/dist/bin/pushary-codex.js +12 -12
  11. package/dist/bin/pushary-connect.js +24 -24
  12. package/dist/bin/pushary-cowork.js +5 -5
  13. package/dist/bin/pushary-daemon.js +31 -31
  14. package/dist/bin/pushary-disconnect.js +24 -24
  15. package/dist/bin/pushary-doctor.js +33 -33
  16. package/dist/bin/pushary-elicitation-hook.js +25 -25
  17. package/dist/bin/pushary-gemini-bridge.js +13 -13
  18. package/dist/bin/pushary-gemini-hook.js +27 -27
  19. package/dist/bin/pushary-hook.js +29 -29
  20. package/dist/bin/pushary-login.js +12 -12
  21. package/dist/bin/pushary-logout.js +10 -10
  22. package/dist/bin/pushary-mcp.js +9 -9
  23. package/dist/bin/pushary-mode.js +12 -12
  24. package/dist/bin/pushary-notification-hook.js +24 -24
  25. package/dist/bin/pushary-opencode-hook.js +26 -26
  26. package/dist/bin/pushary-permission-denied-hook.js +29 -29
  27. package/dist/bin/pushary-permission-hook.js +28 -28
  28. package/dist/bin/pushary-post-hook.js +24 -24
  29. package/dist/bin/pushary-prompt-hook.js +24 -24
  30. package/dist/bin/pushary-session-end-hook.js +24 -24
  31. package/dist/bin/pushary-session-start-hook.js +28 -28
  32. package/dist/bin/pushary-setup.js +35 -35
  33. package/dist/bin/pushary-stats.js +5 -5
  34. package/dist/bin/pushary-status.js +26 -26
  35. package/dist/bin/pushary-stop-hook.js +24 -24
  36. package/dist/bin/pushary-stopfailure-hook.js +24 -24
  37. package/dist/bin/pushary-suggestions.js +12 -12
  38. package/dist/bin/pushary-transcript-register.js +17 -17
  39. package/dist/bin/pushary-transcripts.js +7 -7
  40. package/dist/bin/pushary-upgrade.js +30 -30
  41. package/dist/bin/pushary-wait.js +12 -12
  42. package/dist/bin/pushary.js +6 -6
  43. package/dist/{chunk-XCOFZVQ3.js → chunk-23QKUOEV.js} +2 -2
  44. package/dist/{chunk-W3IBC4FG.js → chunk-2V2CCTGQ.js} +1 -1
  45. package/dist/{chunk-LDLMAGTK.js → chunk-2YAHQ763.js} +2 -2
  46. package/dist/{chunk-P34IFAIC.js → chunk-3FG2VCH3.js} +6 -6
  47. package/dist/{chunk-OD6ZMBFA.js → chunk-4ABHSCFJ.js} +2 -2
  48. package/dist/{chunk-EYQBTAC6.js → chunk-5C2GFTWE.js} +1 -1
  49. package/dist/{chunk-RN2HEOY2.js → chunk-5LQRUBFB.js} +1 -1
  50. package/dist/{chunk-7UTH3KQV.js → chunk-5PYLU6OS.js} +4 -4
  51. package/dist/{chunk-IDVBDHSX.js → chunk-5RMD75P2.js} +4 -4
  52. package/dist/{chunk-JCVGBUCZ.js → chunk-6GQDOO5P.js} +5 -5
  53. package/dist/{chunk-AYQREIJA.js → chunk-6TQLZP7F.js} +2 -2
  54. package/dist/{chunk-5SR5F4LH.js → chunk-736I6CBY.js} +1 -1
  55. package/dist/{chunk-IB3WIIFC.js → chunk-7TSL3JCX.js} +1 -1
  56. package/dist/{chunk-TE4M3E2M.js → chunk-A6U4RRFM.js} +2 -2
  57. package/dist/{chunk-U4X3GQR2.js → chunk-ATDOYZXC.js} +1 -1
  58. package/dist/{chunk-VPGJBKWU.js → chunk-AXG5QMRM.js} +3 -3
  59. package/dist/{chunk-6A6BXMNK.js → chunk-B4OS2OVD.js} +3 -3
  60. package/dist/{chunk-XLQAB5US.js → chunk-BIQF3C4H.js} +1 -1
  61. package/dist/{chunk-M3OVAMTR.js → chunk-CRW4P7JU.js} +1 -1
  62. package/dist/{chunk-5MCHXYBH.js → chunk-DKFAJHLI.js} +5 -5
  63. package/dist/{chunk-3E6SMCCH.js → chunk-DVLQ4TVD.js} +11 -8
  64. package/dist/{chunk-JN2PBSLX.js → chunk-E2RXTRM2.js} +4 -4
  65. package/dist/{chunk-HCCYXFX3.js → chunk-FEKP3NJR.js} +4 -4
  66. package/dist/{chunk-AELYA5BM.js → chunk-FRZS7XQF.js} +3 -3
  67. package/dist/{chunk-ERAUU54Q.js → chunk-HYPSYXP4.js} +4 -4
  68. package/dist/{chunk-BK2CBKUC.js → chunk-KRDQQL2X.js} +1 -1
  69. package/dist/{chunk-AFFFTDUS.js → chunk-KT36OCRW.js} +1 -1
  70. package/dist/{chunk-SFUVP6RK.js → chunk-LHGB64O2.js} +1 -1
  71. package/dist/{chunk-JCQURRHV.js → chunk-LXYNKZFP.js} +2 -2
  72. package/dist/{chunk-L6TIDQNU.js → chunk-MGW26CW7.js} +1 -1
  73. package/dist/{chunk-CPO4GI6S.js → chunk-MHYXM43K.js} +1 -1
  74. package/dist/{chunk-PZ2CZIP4.js → chunk-MID7BURF.js} +2 -2
  75. package/dist/{chunk-LM2IY7OH.js → chunk-NILVJ7HV.js} +8 -8
  76. package/dist/{chunk-KLMAOQR4.js → chunk-OWUDBHXW.js} +2 -2
  77. package/dist/{chunk-O43I5GBC.js → chunk-QDRDDVLH.js} +4 -4
  78. package/dist/{chunk-VM3WSNG4.js → chunk-QLG6UKIB.js} +5 -5
  79. package/dist/{chunk-TGEOVHWA.js → chunk-SEZUF33H.js} +5 -5
  80. package/dist/{chunk-I67Z6COJ.js → chunk-SIOYJRL4.js} +2 -2
  81. package/dist/{chunk-6JTEGLQY.js → chunk-SXVXANPI.js} +3 -3
  82. package/dist/{chunk-JRAQENMR.js → chunk-T27NT7LJ.js} +4 -4
  83. package/dist/{chunk-LF36VLSO.js → chunk-TBTCBAQC.js} +15 -14
  84. package/dist/{chunk-2YXGQINX.js → chunk-TNZYTGAJ.js} +6 -6
  85. package/dist/{chunk-ZS3JF5WZ.js → chunk-UAA4BEYM.js} +3 -3
  86. package/dist/{chunk-X5WZOZJY.js → chunk-VCLDXVR3.js} +2 -2
  87. package/dist/{chunk-BZH6SJAR.js → chunk-W4TZAKOD.js} +2 -2
  88. package/dist/{chunk-K4UPPZK4.js → chunk-XGHXQUDG.js} +1 -1
  89. package/dist/{chunk-PKMZSKF5.js → chunk-XQ4HTTBB.js} +1 -1
  90. package/dist/{chunk-EXHTATWA.js → chunk-XUUE6MYM.js} +8 -8
  91. package/dist/{chunk-IHBVOC2Q.js → chunk-YAU4JCYI.js} +3 -3
  92. package/dist/{chunk-JSD26D6B.js → chunk-YONHM5BQ.js} +1 -1
  93. package/dist/{chunk-LCRYCE5F.js → chunk-YXYSPMD3.js} +2 -2
  94. package/dist/{chunk-B3RNX2E7.js → chunk-Z4YQ7ZMO.js} +3 -3
  95. package/dist/{global-upgrade-WSUIPBIP.js → global-upgrade-XEMENBZA.js} +6 -6
  96. package/dist/{paths-PTDVSCCX.js → paths-VW5CI5KS.js} +2 -2
  97. package/dist/{reapply-Q3VLHRQS.js → reapply-7KPSIO4L.js} +20 -20
  98. package/dist/src/index.d.ts +1 -0
  99. package/dist/src/index.js +19 -19
  100. package/dist/{upgrade-lock-DJ3T5HPL.js → upgrade-lock-VT6XMQMB.js} +3 -3
  101. package/package.json +1 -1
  102. /package/dist/{chunk-VERKRKUN.js → chunk-6HMCOGKJ.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,12 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.19
4
+
5
+ - When nobody has answered the last 3 approvals in one agent session, Pushary stops sending that session's approvals to your phone. Each further call ends at once, exactly as it would have if nobody had answered it for the whole wait: under When I'm out Claude Code asks in its own prompt, a rule that refuses on timeout refuses it, a rule that approves on timeout runs it at once with nobody asked, and Codex set to never ask for approval refuses it. Nothing is sent, and the paused approval does not appear on your phone or in the Mac app. A command that deletes, rewrites history or reaches the network, such as `git push`, `rm` or `dropdb`, and any call Pushary flags as destructive, is still sent to your phone.
6
+ - Approvals go back to your phone as soon as you answer any approval in that session, send it a new prompt, or approve at your agent's own prompt a call Pushary handed there. That last one works for Claude Code and for Codex calls checked before they run, whose completion Pushary sees.
7
+ - An approval counts as unanswered only once its wait has ended with nobody answering, so several approvals open at the same time never pause the next one. Approvals you may have answered at your terminal without Pushary seeing it, in Gemini CLI, OpenCode, Cursor's shell and MCP approvals and Codex's own approval prompt, never count, so those sessions are never paused.
8
+ - Earlier CLI versions are paused only for Claude Code, and only where the call would have ended in Claude Code's prompt anyway. In a session started from your phone, CLI 1.9.6 to 1.9.12 refuse a paused call with their message that the remote session has no local approval UI. The Pushary Mac app keeps sending every approval to your phone for now.
9
+
3
10
  ## 1.9.18
4
11
 
5
- - `pushary disconnect cursor` preserves the plugin when its registered hooks cannot be read, so a fail-closed hook never points to a deleted gate.
12
+ _Notes corrected on October 4, 2026. The first version described only the Cursor case and left out the setup and skill text changes._
13
+
14
+ - `pushary disconnect` leaves a config file it cannot read exactly as it is and lists it as untouched, for every agent. For Cursor it also keeps the plugin folder when the hooks file that points into it cannot be read, so Cursor's gate never points at a script that was deleted.
15
+ - After setup, the line on how to test reads "Run a command that needs approval. Away from this computer, it reaches your phone." The bundled Pushary skill now says When I'm out waits 10 seconds for your phone by default, not 45.
6
16
 
7
17
  ## 1.9.17
8
18
 
9
- - When Codex is set to never ask for approval (full access), a call Pushary asks about now goes to your phone every time, also while you are at the keyboard, because Codex has no prompt of its own to ask you there. The wait is your policy's timeout, also under When I'm out. If nobody answers, the call is refused with "No response within timeout". Before, the command ran once the wait ended, also a destructive one, and at the keyboard it ran without anyone being asked. A wait cut short by Codex's hook time limit and a question no phone could receive are refused the same way. In Codex's other approval modes nothing changes: the call goes back to Codex, which asks in its own prompt when the call needs it. A rule that approves on timeout still lets the call run after its full wait, and one that denies on timeout still refuses it.
19
+ _Notes corrected on October 4, 2026. The first version said a rule that approves on timeout lets the call run under When I'm out. It does not: the call is refused._
20
+
21
+ - When Codex runs with its approval policy set to never (full access), every call Pushary asks about goes to your phone, also while you are at the keyboard. Codex has no prompt of its own to ask you there. The wait is your policy's timeout, also under When I'm out.
22
+ - If nobody answers, the call is refused with "No response within timeout". Before, the command ran once the wait ended, a destructive one too, and at the keyboard it ran without anyone being asked. A wait cut short by Codex's hook time limit, and a question no phone could receive, are refused the same way.
23
+ - In Every time, a rule's timeout action still applies after its full wait: approve on timeout lets the call run, and deny on timeout refuses it. Under When I'm out, an unanswered call is refused whatever the rule's timeout action says.
24
+ - In Codex's other approval modes nothing changes. The call goes back to Codex, which asks in its own prompt when the call needs it.
10
25
 
11
26
  ## 1.9.16
12
27
 
@@ -27,14 +42,17 @@
27
42
 
28
43
  ## 1.9.15
29
44
 
45
+ _Notes corrected on October 4, 2026. "Allow for this session" for an MCP tool also reaches Claude Code questions; the first version said Codex only._
46
+
30
47
  - Codex in Every time asks your phone only about the calls that matter. Codex raises its own approval when a command leaves its sandbox, a forced `rm` runs, an MCP tool is not marked read-only, or a patch lands outside the project, and Pushary answers that request in your mode as before. Before a call runs, Pushary now adds a question only when the call leaves the scope you agreed, a rule you wrote, a preset you picked or an approval route covers it, the command destroys, rewrites history or reaches the network, or a patch deletes a file. Commands that only build, test or read no longer reach your phone, and an MCP tool Codex asks about itself is asked once, through Codex's own request. The kill switch and your deny rules still apply to every call.
31
- - In full access, where Codex asks nothing itself, every call your policy gates still comes to your phone, as before.
48
+ - In Every time with full access, where Codex asks nothing itself, every call your policy gates still comes to your phone, as before.
32
49
  - When I'm out is unchanged for Codex, except for scope: Codex's own approval requests go to your phone first, and nothing else is asked before a call runs.
33
50
  - A Codex edit outside the scope you agreed is now asked in Every time and When I'm out, also while you are at the keyboard, because Codex has no prompt for it there. Yes lets it run. No refuses it. No answer before your policy's wait ends refuses it with the path named. In Updates and Terminal, where nobody would be asked, it is refused. A patch that leaves the scope across several files is refused with a request to split it into single-file edits, as with Claude Code. Before this release Codex applied these edits without asking.
34
51
  - In Updates, Pushary sends an update before a Codex call only for the calls above. Codex's own approval requests still send one each.
35
52
  - A patch whose `*** Delete File:` or `*** Update File:` header is indented, which Codex applies, is now read as the delete or edit it is, so your path rules and the delete question apply to it.
36
53
  - A command that deletes through a cloud CLI subcommand spelled as one word, such as `aws dynamodb delete-table`, `aws ec2 terminate-instances`, `heroku apps:destroy` or `firebase firestore:delete`, now counts as destructive for every agent. Pushary asks about it instead of leaving it to the agent's own allowlist, and an "allow Bash for this session" grant does not cover it.
37
- - Codex questions can offer "Allow for this session": for Bash, where risky commands still ask, and, after three approvals in a row, for one exact MCP tool. It is never offered for Pushary's own tools or for a tool whose name says it runs code, sends, merges, publishes, deploys, writes, deletes or moves money.
54
+ - Codex questions can offer "Allow for this session" for Bash, where risky commands still ask, as Claude Code questions already did.
55
+ - After three approvals in a row for one exact MCP tool, the question can offer "Allow for this session" for that tool, in Claude Code and in Codex. It is never offered for Pushary's own tools or for a tool whose name says it runs code, sends, merges, publishes, deploys, writes, deletes or moves money.
38
56
 
39
57
  ## 1.9.14
40
58
 
@@ -42,17 +60,22 @@
42
60
 
43
61
  ## 1.9.13
44
62
 
45
- - `pushary setup` makes Pushary the only gate for Antigravity CLI. When `~/.gemini/antigravity-cli/settings.json` has no `toolPermission`, setup sets it to `always-proceed`, so plain `agy` no longer asks in its own prompt and approvals from your phone take effect. A mode you chose yourself, such as `strict`, is left alone, and setup says agy will still ask in its own prompt.
63
+ _Notes corrected on October 4, 2026. The last two bullets, the setup receipt and the Windows exception were missing when 1.9.13 shipped._
64
+
65
+ - `pushary setup` makes Pushary the only gate for Antigravity CLI. When `~/.gemini/antigravity-cli/settings.json` has no `toolPermission`, setup sets it to `always-proceed`, so plain `agy` no longer asks in its own prompt and approvals from your phone take effect. A mode you chose yourself, such as `strict`, is left alone, and setup says agy will still ask in its own prompt. Setup records the change in `~/.pushary/setup/antigravity-tool-permission.json`.
46
66
  - `pushary disconnect antigravity` and `pushary clean` put `toolPermission` back, but only if Pushary set it and only once no Pushary hook is left in `~/.gemini/config/hooks.json`. A value you set or changed is never touched.
47
67
  - An Antigravity CLI call that Pushary cannot decide is now blocked with a reason instead of running unasked: when Pushary is signed out, cannot be reached, or cannot establish its policy. Other agents are unchanged and still fall back to their own prompts.
48
- - If the Pushary CLI is uninstalled while agy is still connected, agy's approval hook blocks each call and says how to undo the setup, instead of exiting silently and letting the call run.
68
+ - If the Pushary CLI is uninstalled while agy is still connected, agy's approval hook blocks each call and says how to undo the setup, instead of exiting silently and letting the call run. On Windows the hook still exits silently in that case, and agy runs the call.
69
+ - A session started from your phone asks your phone every time under When I'm out, also when this computer looks attended, and waits for your policy's timeout. Before, when another session had prompted in the last five minutes or Pushary for Mac was attended, the phone was skipped and the call was denied with "no local approval UI". Nobody was asked.
70
+ - The Cursor plugin setup installs asks your phone about every file change under When I'm out, also while you are at the keyboard, and waits for your policy's timeout. Before, the edit was denied with "Switch to Every time" and nobody was asked, or it was denied after the 10 second push window when you were away. Shell commands and MCP calls in Cursor keep When I'm out as it was, because Cursor can prompt for those itself.
49
71
 
50
72
  ## 1.9.12
51
73
 
52
- - An Antigravity CLI tool call that failed is recorded as failed in the session, where it used to show as completed.
53
- - `pushary disconnect fx` is recorded in `~/.pushary/declined-agents.json`, so Pushary.app versions that read that file leave fx off until you connect it again.
74
+ _Notes corrected on October 4, 2026. 1.9.12 shipped with no notes. The bullets below were added in the 1.9.13 and 1.9.15 packages, and the error text and the refused options in full were added on October 4._
54
75
 
55
- - `rg`, `sort`, `uniq`, `sleep`, `pgrep` and `git branch --show-current` run without asking when they only read. `rg` still asks with an option that runs another program (`--pre`, `--search-zip`, `-z`), `sort` with one that writes a file (`-o`, `--output`), and `uniq` with a second file, which it writes.
76
+ - An Antigravity CLI tool call that failed is recorded as failed in the session, where it used to show as completed. The session now shows the call's error message: up to its first 500 characters, with secrets redacted, as for other agents.
77
+ - `pushary disconnect fx` is recorded in `~/.pushary/declined-agents.json`, so Pushary for Mac versions that read that file leave fx off until you connect it again.
78
+ - `rg`, `sort`, `uniq`, `sleep`, `pgrep` and `git branch --show-current` run without asking when they only read. This applies to every agent. `rg` still asks with an option that runs another program (`--pre`, `--pre-glob`, `--hostname-bin`, `--search-zip`, `-z`). `sort` still asks with an option that writes a file or runs a program (`-o`, `--output`, `-T`, `--temporary-directory`, `--compress-program`). `uniq` still asks with a second file, which it writes.
56
79
  - Codex's `wait_threads` and `send_message_to_thread` run without asking, matched by exact name. The kill switch, a deny rule and a rule you wrote for the tool still win over them.
57
80
  - A deny rule now blocks read-only commands too. A bare `Bash` deny, a `*` deny or a preset that never runs the shell used to let `ls` and other reads through.
58
81
 
@@ -66,25 +89,30 @@
66
89
 
67
90
  ## 1.9.10
68
91
 
69
- - `pushary setup` no longer reports Qwen Code, CodeBuddy, Qoder, Droid and Devin as an account mismatch when the Pushary Mac app connected them and the CLI's key is in the same account. Setup compares the account of the key in their MCP entry for Qwen Code, CodeBuddy and Qoder, and the account of the Mac app's own key for Droid and Devin, whose hooks run through the app. They are kept and listed as kept for the Mac app. If the app is in a different account, setup reports it and changes nothing. The CLI does not copy or save the app's key.
70
- - `pushary doctor` no longer fails "Global package installed" on a computer the Pushary Mac app connects, for example when run with npx. The app runs the hooks there, so doctor prints that the global package is not installed and not needed. It still fails when the CLI has its own key or owns any agent's hooks, because those hooks run the global package.
92
+ - `pushary setup` no longer reports Qwen Code, CodeBuddy, Qoder, Droid and Devin as an account mismatch when Pushary for Mac connected them and the CLI's key is in the same account. Setup compares the account of the key in their MCP entry for Qwen Code, CodeBuddy and Qoder, and the account of the Mac app's own key for Droid and Devin, whose hooks run through the app. They are kept and listed as kept for the Mac app. If the app is in a different account, setup reports it and changes nothing. The CLI does not copy or save the app's key.
93
+ - `pushary doctor` no longer fails "Global package installed" on a computer Pushary for Mac connects, for example when run with npx. The app runs the hooks there, so doctor prints that the global package is not installed and not needed. It still fails when the CLI has its own key or owns any agent's hooks, because those hooks run the global package.
71
94
  - `pushary clean --everything` revokes the keys the CLI wrote on pushary.com before removing them: the key in `~/.pushary/config.json`, and a different key in the `export PUSHARY_API_KEY=...` line setup writes to your shell profile. It says whether each key was revoked. A key that is only in the `PUSHARY_API_KEY` environment variable is left alone and named, because Pushary did not write it and it may be a server key you use elsewhere. If pushary.com cannot be reached, the clean still finishes and tells you where to revoke the key. `--dry-run` revokes nothing and lists the keys it would revoke. The Mac app's key is never revoked, and a plain `clean`, `disconnect` and `sign-out` without `--revoke` behave as before.
72
- - `pushary setup --take-over-hooks` takes over Droid's hooks from the Pushary Mac app. It used to fail with "no Mac app wiring was found", because Droid keeps its hooks at the top of `~/.factory/hooks.json`.
95
+ - `pushary setup --take-over-hooks` takes over Droid's hooks from Pushary for Mac. It used to fail with "no Mac app wiring was found", because Droid keeps its hooks at the top of `~/.factory/hooks.json`.
73
96
 
74
97
  ## 1.9.9
75
98
 
76
99
  - The VS Code hooks setup writes now run the gate through the same shell guard as every other agent. Before, a missing Node or a deleted plugin folder made the VS Code hooks fail on every tool call; now they stay silent and VS Code carries on as if Pushary were not installed. Run setup again for VS Code to get the guarded hooks.
77
- - `pushary doctor`, `pushary status` and `pushary pair` recognise a computer the Pushary Mac app connects when the CLI has no key of its own. Doctor and status say the computer is connected through the Pushary Mac app instead of reporting a missing key, and pair tells you to pair a phone from the app's Settings > Phone. The CLI does not use, copy or save the app's key.
100
+ - `pushary doctor`, `pushary status` and `pushary pair` recognise a computer Pushary for Mac connects when the CLI has no key of its own. Doctor and status say the computer is connected through Pushary for Mac instead of reporting a missing key, and pair tells you to pair a phone from the app's Settings > Phone. The CLI does not use, copy or save the app's key.
78
101
  - A default `pushary setup` turns on phone-start when `~/.pushary/config.json` exists but has no `controlMode`, as `pushary login` and the Mac app's Hermes connection leave it. Before, setup skipped phone-start on those machines. `--control off`, or a saved `controlMode` of `off`, still keeps it off, and upgrades still never add the background service on their own.
79
- - `pushary setup` keeps an OpenCode plugin the Pushary Mac app installed, as it already did for the other agents, and lists it as kept. It used to overwrite the app's plugin, MCP key and instructions. Pass `--take-over-hooks` if you want the CLI to own it. If the app is signed into a different account, setup reports that for OpenCode and changes nothing.
102
+ - `pushary setup` keeps an OpenCode plugin Pushary for Mac installed, as it already did for the other agents, and lists it as kept. It used to overwrite the app's plugin, MCP key and instructions. Pass `--take-over-hooks` if you want the CLI to own it. If the app is signed into a different account, setup reports that for OpenCode and changes nothing.
80
103
 
81
104
  ## 1.9.8
82
105
 
83
- - `pushary upgrade` and automatic updates no longer take over agents the Pushary Mac app connected. They used to replace the app's hooks with the CLI's and overwrite its MCP key for Claude Code, Codex, Gemini CLI, VS Code and OpenCode. An agent the app owns is now left exactly as the app wrote it and listed as kept for the Mac app, using the same rule setup uses. Pass `--take-over-hooks` to setup if you want the CLI to own it.
106
+ _Notes corrected on October 4, 2026. The first three bullets were missing when 1.9.8 shipped._
107
+
108
+ - Phone pairing is now `pushary pair` and signing out is `pushary sign-out`. `pushary connect` and `pushary logout` still work as aliases, with the same flags. Setup, status, doctor and `pushary bell` say "pair a phone".
109
+ - `pushary disconnect fx` removes what setup added for fx: the Pushary server in `~/.fx/mcp.json`, the permission rules setup recorded, that record, and the Pushary block in `AGENTS.md`. Your own entries are left alone. With nothing connected it says fx was not connected and changes nothing.
110
+ - `pushary mode` accepts `updates-only` and `updates_only` for Updates (`notify_only`). Setup and disconnect accept both agent id forms, such as `claude_code` or `claude`, and reject an unknown id with the list of valid ones.
111
+ - `pushary upgrade` and automatic updates no longer take over agents Pushary for Mac connected. They used to replace the app's hooks with the CLI's and overwrite its MCP key for Claude Code, Codex, Gemini CLI, VS Code and OpenCode. An agent the app owns is now left exactly as the app wrote it and listed as kept for the Mac app, using the same rule setup uses. Pass `--take-over-hooks` to setup if you want the CLI to own it.
84
112
  - `pushary clean` keeps the Mac app's wiring for Qwen Code, CodeBuddy, Qoder, Droid and Devin while the app is installed, as it already did for the other agents. `clean --everything` still removes it.
85
113
  - `pushary disconnect cursor` removes the Cursor plugin setup installed in `~/.cursor/plugins/local/pushary`, including the `mcp.json` that held your API key, and setup's leftover copies of it. The plugin is kept, and the output says so, when the gate in `~/.cursor/hooks.json` that points into it could not be removed.
86
114
  - `pushary disconnect` removes the Pushary block it wrote to `AGENTS.md` (Codex, OpenCode), `GEMINI.md`, `QWEN.md` and `CODEBUDDY.md`. Only the text between the Pushary markers is removed. Skills are left in place.
87
- - `pushary disconnect <agent>` is no longer undone by the Mac app. It records the agent in `~/.pushary/declined-agents.json`, and Pushary.app versions that read that file leave the agent off until you connect it again from the app or with `pushary setup`.
115
+ - `pushary disconnect <agent>` is no longer undone by the Mac app. It records the agent in `~/.pushary/declined-agents.json`, and Pushary for Mac versions that read that file leave the agent off until you connect it again from the app or with `pushary setup`.
88
116
  - `pushary mode`, `mode clear`, `wait <seconds>` and `suggestions` no longer say "This key was rejected" when the key is fine. Keys from `pushary login`, phone pairing and the Mac app cannot change approval settings, and these commands now say so, point you to the Pushary app, your phone or the dashboard, and exit with code 2.
89
117
  - `pushary sign-out --revoke` revokes those keys too, and then checks with pushary.com and tells you whether the key still works. Before, it could not revoke them and always said the key was still valid. `--json` adds `keyStillValid`.
90
118
  - When the Mac app signs out of the key setup borrowed from it, the background service stops once instead of restarting every 10 seconds, and `pushary doctor`, `pushary status` and commands that report a rejected key say the key was signed out on this Mac, tell you to run `pushary login`, and name the shell profile line that still exports the old key. Pushary does not edit that line. A background service with no key at all also stops instead of restarting.
@@ -95,7 +123,7 @@
95
123
  - An automatic update whose configuration refresh fails now retries after 5 minutes, then after an hour, then once a day, instead of every 5 minutes. On a Mac with phone-start on, each retry restarted the background service.
96
124
  - A refresh that cannot succeed until you change something (a legacy phone-start service, phone-start turned on without a usable agent, or a config file Pushary cannot rewrite) is no longer retried automatically. `pushary doctor` shows it, and running `pushary upgrade` after the fix finishes it.
97
125
  - When a Codex approval hook is turned off in Codex, setup and upgrade tell you to enable it in `/hooks` instead of asking you to trust it. A missing or background (asynchronous) approval hook points you to setup again, as doctor does.
98
- - Upgrades, including automatic ones, regenerate the OpenCode plugin Pushary installed, so the active directory fix from 1.9.4 reaches existing installs without running setup again. A `pushary.js` you wrote yourself is never touched, and no plugin is added where there was none.
126
+ - Upgrades, including automatic ones, regenerate the OpenCode plugin Pushary installed, so the 1.9.4 fix, which makes OpenCode approvals use the directory OpenCode is working in, reaches existing installs without running setup again. A `pushary.js` you wrote yourself is never touched, and no plugin is added where there was none.
99
127
 
100
128
  ## 1.9.6
101
129
 
@@ -359,7 +387,7 @@ Requires the Codex auto-reviewer handling in `POST /api/agent/gate`, Codex bodie
359
387
 
360
388
  - When Codex runs with `--approve-for-me`, stop asking you before its auto-reviewer. `PreToolUse` and `PermissionRequest` have no opinion under the reviewer, after the kill switch and a standing deny, so nothing the reviewer allows reaches your phone.
361
389
  - When the auto-reviewer denies a shell command, hold the turn end and ask once whether to allow that exact command. A yes continues the turn, Codex runs the same command again, and the retry skips the reviewer once. A no, or no answer, lets the denial stand. Denials of `apply_patch` and MCP calls are not asked about yet. The request names the session's directory as well as the command's, so the card can say where the command runs.
362
- - Hold a blocked call only when the hook can prove its host waits that long: the `--hold-budget=<seconds>` argument its registration now carries, or the budget the Mac app hands down in `PUSHARY_HOLD_BUDGET_SECONDS`. The hold never waits past that budget less its reserves. Without proof, which is an install registered before this release, the Claude plugin's older entry, an update that skipped `--finish-upgrade` or a Mac app built before it, a Claude block sends the "Auto mode blocked <tool>" notification instead, and a Codex turn end reads no denial, so it is still asked about once the hook is upgraded.
390
+ - Hold a blocked call only when the hook can prove its host waits that long: the `--hold-budget=<seconds>` argument its registration now carries, or the budget the Mac app hands down in `PUSHARY_HOLD_BUDGET_SECONDS`. The hold never waits past that budget less its reserves. Without proof, which is an install registered before this release, the Claude plugin's older entry, an update that skipped `--finish-upgrade` or a Mac app built before it, a Claude block sends the `Auto mode blocked <tool>` notification instead, and a Codex turn end reads no denial, so it is still asked about once the hook is upgraded.
363
391
  - Build the `blocked-action/v2` identity for a Claude call, which includes its working directory, so the retry's hint and claim match the server's grant. A Claude call with no working directory is not asked about. Keep the retry hint for the grant's two minutes rather than ten.
364
392
  - `pushary doctor` warns when a `PermissionDenied` or Codex `Stop` registration carries no hold budget.
365
393
 
@@ -2,7 +2,7 @@
2
2
  "name": "pushary",
3
3
  "displayName": "Pushary — Control Panel for AI Agents",
4
4
  "description": "Push notifications, human-in-the-loop questions, and permission gating for your AI coding agent. Get a push when a task finishes, answer the agent from your phone, and approve risky commands before they run.",
5
- "version": "0.2.4",
5
+ "version": "0.2.5",
6
6
  "author": { "name": "Pushary", "email": "business@pushary.com" },
7
7
  "homepage": "https://pushary.com",
8
8
  "repository": "https://github.com/Pushary/cursor-plugin",
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.5
4
+
5
+ - Under When I'm out, a file change asks your phone every time, also while you are at the keyboard, and waits for your policy's timeout. Cursor's file hooks cannot show a prompt of their own. Before, the change was refused with "Switch to Every time" and nobody was asked, or it was refused after the 10 second push window when you were away. Shell commands and MCP calls keep When I'm out as it was, because Cursor prompts for those itself.
6
+ - The bundled Pushary skill says When I'm out waits 10 seconds for your phone by default, not 45.
7
+
3
8
  ## 0.2.4
4
9
 
5
10
  - Stop the gated action when a question is missing after withdrawal, instead of treating it as a timeout that can approve the action.
@@ -1,41 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-L6TIDQNU.js";
4
+ } from "../chunk-MGW26CW7.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-JRAQENMR.js";
8
- import "../chunk-EXHTATWA.js";
7
+ } from "../chunk-T27NT7LJ.js";
8
+ import "../chunk-XUUE6MYM.js";
9
9
  import "../chunk-6WEC3KZP.js";
10
- import "../chunk-JCVGBUCZ.js";
11
- import "../chunk-K4UPPZK4.js";
12
- import "../chunk-U4X3GQR2.js";
13
- import "../chunk-W3IBC4FG.js";
10
+ import "../chunk-6GQDOO5P.js";
11
+ import "../chunk-XGHXQUDG.js";
12
+ import "../chunk-ATDOYZXC.js";
13
+ import "../chunk-2V2CCTGQ.js";
14
14
  import "../chunk-XHKBHWLX.js";
15
- import "../chunk-JN2PBSLX.js";
16
- import "../chunk-TGEOVHWA.js";
17
- import "../chunk-IHBVOC2Q.js";
18
- import "../chunk-JSD26D6B.js";
19
- import "../chunk-IB3WIIFC.js";
15
+ import "../chunk-E2RXTRM2.js";
16
+ import "../chunk-SEZUF33H.js";
17
+ import "../chunk-YAU4JCYI.js";
18
+ import "../chunk-YONHM5BQ.js";
19
+ import "../chunk-7TSL3JCX.js";
20
20
  import "../chunk-GMXKITVA.js";
21
21
  import "../chunk-6ICPEJY5.js";
22
- import "../chunk-OD6ZMBFA.js";
23
- import "../chunk-LM2IY7OH.js";
24
- import "../chunk-M3OVAMTR.js";
25
- import "../chunk-3E6SMCCH.js";
22
+ import "../chunk-4ABHSCFJ.js";
23
+ import "../chunk-NILVJ7HV.js";
24
+ import "../chunk-CRW4P7JU.js";
25
+ import "../chunk-DVLQ4TVD.js";
26
26
  import "../chunk-POFBE6ZY.js";
27
- import "../chunk-6JTEGLQY.js";
28
- import "../chunk-ZS3JF5WZ.js";
29
- import "../chunk-6A6BXMNK.js";
30
- import "../chunk-BK2CBKUC.js";
27
+ import "../chunk-SXVXANPI.js";
28
+ import "../chunk-UAA4BEYM.js";
29
+ import "../chunk-B4OS2OVD.js";
30
+ import "../chunk-KRDQQL2X.js";
31
31
  import "../chunk-7QLSKOSU.js";
32
32
  import "../chunk-KZERVKTD.js";
33
- import "../chunk-PZ2CZIP4.js";
34
- import "../chunk-HCCYXFX3.js";
33
+ import "../chunk-MID7BURF.js";
34
+ import "../chunk-FEKP3NJR.js";
35
35
  import "../chunk-FT7UNIS3.js";
36
- import "../chunk-PKMZSKF5.js";
37
- import "../chunk-SFUVP6RK.js";
38
- import "../chunk-VERKRKUN.js";
36
+ import "../chunk-XQ4HTTBB.js";
37
+ import "../chunk-LHGB64O2.js";
38
+ import "../chunk-6HMCOGKJ.js";
39
39
 
40
40
  // bin/pushary-bell-hook.ts
41
41
  var main = async () => {
@@ -5,37 +5,37 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-L6TIDQNU.js";
8
+ } from "../chunk-MGW26CW7.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-JCQURRHV.js";
14
+ } from "../chunk-LXYNKZFP.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-IB3WIIFC.js";
19
+ } from "../chunk-7TSL3JCX.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-GMXKITVA.js";
23
- import "../chunk-OD6ZMBFA.js";
23
+ import "../chunk-4ABHSCFJ.js";
24
24
  import "../chunk-7QLSKOSU.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-PZ2CZIP4.js";
28
+ import "../chunk-MID7BURF.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-HCCYXFX3.js";
31
+ } from "../chunk-FEKP3NJR.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
35
  } from "../chunk-FT7UNIS3.js";
36
- import "../chunk-PKMZSKF5.js";
37
- import "../chunk-SFUVP6RK.js";
38
- import "../chunk-VERKRKUN.js";
36
+ import "../chunk-XQ4HTTBB.js";
37
+ import "../chunk-LHGB64O2.js";
38
+ import "../chunk-6HMCOGKJ.js";
39
39
 
40
40
  // bin/pushary-bell.ts
41
41
  exitOnHelpFlag("bell");
@@ -8,39 +8,39 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-AFFFTDUS.js";
11
+ } from "../chunk-KT36OCRW.js";
12
12
  import {
13
13
  announceSubscriptionRequired,
14
14
  isDeferAnswer
15
- } from "../chunk-RN2HEOY2.js";
15
+ } from "../chunk-5LQRUBFB.js";
16
16
  import {
17
17
  claudeTranscriptPath,
18
18
  loadSessionKey,
19
19
  registerTranscript,
20
20
  registeredTranscriptEnabled
21
- } from "../chunk-EXHTATWA.js";
21
+ } from "../chunk-XUUE6MYM.js";
22
22
  import "../chunk-6WEC3KZP.js";
23
23
  import {
24
24
  ensureDaemonRunning
25
- } from "../chunk-JCVGBUCZ.js";
25
+ } from "../chunk-6GQDOO5P.js";
26
26
  import {
27
27
  encryptRecord
28
- } from "../chunk-K4UPPZK4.js";
29
- import "../chunk-U4X3GQR2.js";
28
+ } from "../chunk-XGHXQUDG.js";
29
+ import "../chunk-ATDOYZXC.js";
30
30
  import {
31
31
  transcriptsEnabled
32
- } from "../chunk-W3IBC4FG.js";
32
+ } from "../chunk-2V2CCTGQ.js";
33
33
  import {
34
34
  needsShell,
35
35
  spawnClaude
36
36
  } from "../chunk-XHKBHWLX.js";
37
- import "../chunk-TGEOVHWA.js";
38
- import "../chunk-IHBVOC2Q.js";
39
- import "../chunk-JSD26D6B.js";
40
- import "../chunk-IB3WIIFC.js";
37
+ import "../chunk-SEZUF33H.js";
38
+ import "../chunk-YAU4JCYI.js";
39
+ import "../chunk-YONHM5BQ.js";
40
+ import "../chunk-7TSL3JCX.js";
41
41
  import "../chunk-GMXKITVA.js";
42
42
  import "../chunk-6ICPEJY5.js";
43
- import "../chunk-OD6ZMBFA.js";
43
+ import "../chunk-4ABHSCFJ.js";
44
44
  import {
45
45
  DEFAULT_SESSION,
46
46
  UNNAMED_ACTION,
@@ -58,8 +58,8 @@ import {
58
58
  reportEvent,
59
59
  savePendingCommand,
60
60
  scopePathFor
61
- } from "../chunk-LM2IY7OH.js";
62
- import "../chunk-M3OVAMTR.js";
61
+ } from "../chunk-NILVJ7HV.js";
62
+ import "../chunk-CRW4P7JU.js";
63
63
  import {
64
64
  askUser,
65
65
  cancelQuestion,
@@ -67,36 +67,37 @@ import {
67
67
  isLocalQuestionHandoff,
68
68
  nextLongPollMs,
69
69
  waitForAnswer,
70
+ waitsForThePhone,
70
71
  withdrawQuestion
71
- } from "../chunk-3E6SMCCH.js";
72
+ } from "../chunk-DVLQ4TVD.js";
72
73
  import "../chunk-POFBE6ZY.js";
73
74
  import {
74
75
  SubscriptionRequiredError
75
- } from "../chunk-6JTEGLQY.js";
76
- import "../chunk-ZS3JF5WZ.js";
77
- import "../chunk-6A6BXMNK.js";
76
+ } from "../chunk-SXVXANPI.js";
77
+ import "../chunk-UAA4BEYM.js";
78
+ import "../chunk-B4OS2OVD.js";
78
79
  import {
79
80
  getMachineId
80
- } from "../chunk-BK2CBKUC.js";
81
+ } from "../chunk-KRDQQL2X.js";
81
82
  import "../chunk-7QLSKOSU.js";
82
83
  import "../chunk-KZERVKTD.js";
83
- import "../chunk-PZ2CZIP4.js";
84
- import "../chunk-HCCYXFX3.js";
84
+ import "../chunk-MID7BURF.js";
85
+ import "../chunk-FEKP3NJR.js";
85
86
  import "../chunk-FT7UNIS3.js";
86
87
  import {
87
88
  getApiKey,
88
89
  getBaseUrl
89
- } from "../chunk-PKMZSKF5.js";
90
+ } from "../chunk-XQ4HTTBB.js";
90
91
  import {
91
92
  NPX_LATEST_COMMAND
92
- } from "../chunk-SFUVP6RK.js";
93
+ } from "../chunk-LHGB64O2.js";
93
94
  import {
94
95
  DECISION_STOP_REASON,
95
96
  KILL_REASON,
96
97
  UNVERIFIABLE_APPROVAL_REASON,
97
98
  redactSecretsFromContent,
98
99
  resolveGate
99
- } from "../chunk-VERKRKUN.js";
100
+ } from "../chunk-6HMCOGKJ.js";
100
101
 
101
102
  // src/wrapper/localPassthrough.ts
102
103
  var SIGNAL_NUMBERS = {
@@ -542,7 +543,7 @@ var createRemoteApprover = (deps) => {
542
543
  if (isDecisionStopped(question)) return deny(DECISION_STOP_REASON);
543
544
  entry.correlationId = question.correlationId;
544
545
  const localHandoff = isLocalQuestionHandoff(question);
545
- let answer = question.answered ? { ...question, answered: true } : localHandoff ? { answered: false } : await waitForPhone(entry, question.correlationId, windowFor(policy));
546
+ let answer = question.answered ? { ...question, answered: true } : waitsForThePhone(question) ? await waitForPhone(entry, question.correlationId, windowFor(policy)) : { answered: false };
546
547
  if (isDecisionStopped(answer) || entry.controller.signal.aborted) return deny(DECISION_STOP_REASON);
547
548
  if (!answer.answered) {
548
549
  answer = await withdrawQuestion(deps.apiKey, question.correlationId, { cancelQuestion: cancelQuestion2, waitForAnswer: waitForAnswer2 });
@@ -13,7 +13,7 @@ import {
13
13
  isCursorPluginLeftover,
14
14
  releaseSoleGate,
15
15
  withoutPusharyCursorHooks
16
- } from "../chunk-AELYA5BM.js";
16
+ } from "../chunk-FRZS7XQF.js";
17
17
  import {
18
18
  HERMES_PIP_PACKAGE,
19
19
  readHermesStatus,
@@ -22,27 +22,27 @@ import {
22
22
  shortenHome,
23
23
  unregisterPluginLocation,
24
24
  vscodeSettingsTargets
25
- } from "../chunk-VPGJBKWU.js";
25
+ } from "../chunk-AXG5QMRM.js";
26
26
  import {
27
27
  planFxRemoval,
28
28
  removeInstructionBlock
29
- } from "../chunk-IDVBDHSX.js";
30
- import "../chunk-LCRYCE5F.js";
29
+ } from "../chunk-5RMD75P2.js";
30
+ import "../chunk-YXYSPMD3.js";
31
31
  import {
32
32
  disableDaemonService
33
- } from "../chunk-JCVGBUCZ.js";
33
+ } from "../chunk-6GQDOO5P.js";
34
34
  import "../chunk-XHKBHWLX.js";
35
35
  import {
36
36
  APPROVAL_SETTINGS_PATH
37
- } from "../chunk-O43I5GBC.js";
37
+ } from "../chunk-QDRDDVLH.js";
38
38
  import {
39
39
  macAppKeepsMcpEntry,
40
40
  mcpServerBearer,
41
41
  pusharyKey,
42
42
  readMacAppAgentKey,
43
43
  setupReceiptKey
44
- } from "../chunk-ERAUU54Q.js";
45
- import "../chunk-LDLMAGTK.js";
44
+ } from "../chunk-HYPSYXP4.js";
45
+ import "../chunk-2YAHQ763.js";
46
46
  import {
47
47
  OPENCODE_PLUGIN_SIBLING,
48
48
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -54,14 +54,14 @@ import {
54
54
  openCodePluginDir,
55
55
  openCodePluginFile,
56
56
  removeOpenCodeMcpServer
57
- } from "../chunk-5MCHXYBH.js";
57
+ } from "../chunk-DKFAJHLI.js";
58
58
  import {
59
59
  ansiPainter,
60
60
  useColor
61
61
  } from "../chunk-FO3MDD26.js";
62
62
  import {
63
63
  exitOnHelpFlag
64
- } from "../chunk-JCQURRHV.js";
64
+ } from "../chunk-LXYNKZFP.js";
65
65
  import {
66
66
  compatibleConfigFile,
67
67
  compatibleInstructionsFile,
@@ -74,7 +74,7 @@ import {
74
74
  removePusharySettings,
75
75
  removePusharyToolPermissions,
76
76
  restoreClaudeMcpServer
77
- } from "../chunk-JN2PBSLX.js";
77
+ } from "../chunk-E2RXTRM2.js";
78
78
  import {
79
79
  hookOwnerOf,
80
80
  isHookTakeoverReceipt,
@@ -82,12 +82,12 @@ import {
82
82
  resolveBridgeStub,
83
83
  restoreHookTakeover,
84
84
  restoreMcpServer
85
- } from "../chunk-TGEOVHWA.js";
85
+ } from "../chunk-SEZUF33H.js";
86
86
  import {
87
87
  removeGeminiSettings
88
- } from "../chunk-IHBVOC2Q.js";
89
- import "../chunk-JSD26D6B.js";
90
- import "../chunk-IB3WIIFC.js";
88
+ } from "../chunk-YAU4JCYI.js";
89
+ import "../chunk-YONHM5BQ.js";
90
+ import "../chunk-7TSL3JCX.js";
91
91
  import {
92
92
  rejectUnknownFlags
93
93
  } from "../chunk-GMXKITVA.js";
@@ -100,22 +100,22 @@ import {
100
100
  readConfigFileKey,
101
101
  readMacAppKeyPrefix,
102
102
  removeClaudeAlias
103
- } from "../chunk-OD6ZMBFA.js";
104
- import "../chunk-LM2IY7OH.js";
105
- import "../chunk-M3OVAMTR.js";
106
- import "../chunk-3E6SMCCH.js";
103
+ } from "../chunk-4ABHSCFJ.js";
104
+ import "../chunk-NILVJ7HV.js";
105
+ import "../chunk-CRW4P7JU.js";
106
+ import "../chunk-DVLQ4TVD.js";
107
107
  import "../chunk-POFBE6ZY.js";
108
- import "../chunk-6JTEGLQY.js";
108
+ import "../chunk-SXVXANPI.js";
109
109
  import {
110
110
  absoluteUrl
111
- } from "../chunk-ZS3JF5WZ.js";
112
- import "../chunk-6A6BXMNK.js";
113
- import "../chunk-BK2CBKUC.js";
111
+ } from "../chunk-UAA4BEYM.js";
112
+ import "../chunk-B4OS2OVD.js";
113
+ import "../chunk-KRDQQL2X.js";
114
114
  import "../chunk-7QLSKOSU.js";
115
115
  import {
116
116
  EXIT
117
117
  } from "../chunk-KZERVKTD.js";
118
- import "../chunk-PZ2CZIP4.js";
118
+ import "../chunk-MID7BURF.js";
119
119
  import {
120
120
  claudeJson,
121
121
  claudeMcpReceipt,
@@ -152,14 +152,14 @@ import {
152
152
  restoreCodexHookTrust,
153
153
  vscodePluginDir,
154
154
  vscodePluginMcp
155
- } from "../chunk-HCCYXFX3.js";
155
+ } from "../chunk-FEKP3NJR.js";
156
156
  import "../chunk-FT7UNIS3.js";
157
157
  import {
158
158
  getBaseUrl
159
- } from "../chunk-PKMZSKF5.js";
159
+ } from "../chunk-XQ4HTTBB.js";
160
160
  import {
161
161
  NPX_LATEST_COMMAND
162
- } from "../chunk-SFUVP6RK.js";
162
+ } from "../chunk-LHGB64O2.js";
163
163
  import {
164
164
  CLI_PACKAGE_NAMES,
165
165
  HOOK_COMPATIBLE_PROFILES,
@@ -171,7 +171,7 @@ import {
171
171
  globalRootFor,
172
172
  isValidApiKey,
173
173
  redactSecrets
174
- } from "../chunk-VERKRKUN.js";
174
+ } from "../chunk-6HMCOGKJ.js";
175
175
 
176
176
  // bin/pushary-clean.ts
177
177
  import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
@@ -5,10 +5,10 @@ import {
5
5
  postLiveSession,
6
6
  postLiveSessionUntilAccepted,
7
7
  startLiveSessionHeartbeat
8
- } from "../chunk-TE4M3E2M.js";
8
+ } from "../chunk-A6U4RRFM.js";
9
9
  import {
10
10
  resolveProviderBinary
11
- } from "../chunk-KLMAOQR4.js";
11
+ } from "../chunk-OWUDBHXW.js";
12
12
  import "../chunk-RIVNNBEK.js";
13
13
  import {
14
14
  SESSION_IDLE_TIMEOUT_MS,
@@ -16,50 +16,50 @@ import {
16
16
  idleDeadlinePassed,
17
17
  startProcessOwnership,
18
18
  withSpawnProcessOwnership
19
- } from "../chunk-AFFFTDUS.js";
20
- import "../chunk-K4UPPZK4.js";
21
- import "../chunk-U4X3GQR2.js";
19
+ } from "../chunk-KT36OCRW.js";
20
+ import "../chunk-XGHXQUDG.js";
21
+ import "../chunk-ATDOYZXC.js";
22
22
  import {
23
23
  transcriptsEnabled
24
- } from "../chunk-W3IBC4FG.js";
24
+ } from "../chunk-2V2CCTGQ.js";
25
25
  import {
26
26
  spawnClaude
27
27
  } from "../chunk-XHKBHWLX.js";
28
28
  import "../chunk-6ICPEJY5.js";
29
- import "../chunk-OD6ZMBFA.js";
29
+ import "../chunk-4ABHSCFJ.js";
30
30
  import {
31
31
  isAskUserResponse,
32
32
  isDecisionStopped,
33
33
  isWaitForAnswerResponse,
34
34
  withdrawQuestion,
35
35
  writeDegraded
36
- } from "../chunk-3E6SMCCH.js";
36
+ } from "../chunk-DVLQ4TVD.js";
37
37
  import "../chunk-POFBE6ZY.js";
38
38
  import {
39
39
  callMcpTool
40
- } from "../chunk-6JTEGLQY.js";
41
- import "../chunk-ZS3JF5WZ.js";
42
- import "../chunk-6A6BXMNK.js";
40
+ } from "../chunk-SXVXANPI.js";
41
+ import "../chunk-UAA4BEYM.js";
42
+ import "../chunk-B4OS2OVD.js";
43
43
  import {
44
44
  getMachineId
45
- } from "../chunk-BK2CBKUC.js";
45
+ } from "../chunk-KRDQQL2X.js";
46
46
  import "../chunk-7QLSKOSU.js";
47
47
  import "../chunk-KZERVKTD.js";
48
- import "../chunk-PZ2CZIP4.js";
49
- import "../chunk-HCCYXFX3.js";
48
+ import "../chunk-MID7BURF.js";
49
+ import "../chunk-FEKP3NJR.js";
50
50
  import "../chunk-FT7UNIS3.js";
51
51
  import {
52
52
  getApiKey,
53
53
  getBaseUrl
54
- } from "../chunk-PKMZSKF5.js";
55
- import "../chunk-SFUVP6RK.js";
54
+ } from "../chunk-XQ4HTTBB.js";
55
+ import "../chunk-LHGB64O2.js";
56
56
  import {
57
57
  elicitationContent,
58
58
  parseAgentQuestion,
59
59
  parseAgentQuestionAnswers,
60
60
  planElicitationAsk,
61
61
  readElicitationFields
62
- } from "../chunk-VERKRKUN.js";
62
+ } from "../chunk-6HMCOGKJ.js";
63
63
 
64
64
  // bin/pushary-codex-bridge.ts
65
65
  import { existsSync } from "fs";