@pushary/agent-hooks 1.9.65 → 1.9.67

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 (129) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/data/SKILL.md +1 -1
  3. package/data/cursor-plugin/skills/pushary/SKILL.md +1 -1
  4. package/data/vscode-plugin/skills/pushary/SKILL.md +1 -1
  5. package/dist/{api-32B3XLJR.js → api-3WIPD5GC.js} +12 -10
  6. package/dist/bin/pushary-bell-hook.js +25 -27
  7. package/dist/bin/pushary-bell.js +10 -10
  8. package/dist/bin/pushary-claude.js +26 -28
  9. package/dist/bin/pushary-clean.js +74 -77
  10. package/dist/bin/pushary-codex-bridge.js +21 -22
  11. package/dist/bin/pushary-codex-hook.js +30 -32
  12. package/dist/bin/pushary-codex-session.js +8 -8
  13. package/dist/bin/pushary-codex.js +13 -13
  14. package/dist/bin/pushary-connect.js +28 -28
  15. package/dist/bin/pushary-cowork.js +5 -5
  16. package/dist/bin/pushary-daemon.js +40 -41
  17. package/dist/bin/pushary-disconnect.js +25 -26
  18. package/dist/bin/pushary-doctor.js +118 -76
  19. package/dist/bin/pushary-elicitation-hook.js +25 -27
  20. package/dist/bin/pushary-gemini-bridge.js +15 -16
  21. package/dist/bin/pushary-gemini-hook.js +27 -29
  22. package/dist/bin/pushary-hook.js +29 -31
  23. package/dist/bin/pushary-login.js +20 -19
  24. package/dist/bin/pushary-logout.js +26 -28
  25. package/dist/bin/pushary-mcp.js +11 -11
  26. package/dist/bin/pushary-mode.js +16 -15
  27. package/dist/bin/pushary-notification-hook.js +24 -26
  28. package/dist/bin/pushary-opencode-hook.js +26 -28
  29. package/dist/bin/pushary-permission-denied-hook.js +29 -31
  30. package/dist/bin/pushary-permission-hook.js +32 -31
  31. package/dist/bin/pushary-post-hook.js +24 -26
  32. package/dist/bin/pushary-prompt-hook.js +24 -26
  33. package/dist/bin/pushary-session-end-hook.js +26 -28
  34. package/dist/bin/pushary-session-start-hook.js +34 -35
  35. package/dist/bin/pushary-setup.js +111 -99
  36. package/dist/bin/pushary-stats.js +5 -5
  37. package/dist/bin/pushary-status.js +37 -36
  38. package/dist/bin/pushary-stop-hook.js +24 -26
  39. package/dist/bin/pushary-stopfailure-hook.js +24 -26
  40. package/dist/bin/pushary-suggestions.js +15 -14
  41. package/dist/bin/pushary-transcript-register.js +16 -18
  42. package/dist/bin/pushary-transcripts.js +18 -17
  43. package/dist/bin/pushary-upgrade.js +45 -39
  44. package/dist/bin/pushary-wait.js +26 -20
  45. package/dist/bin/pushary.js +7 -7
  46. package/dist/{chunk-Y64JGYTB.js → chunk-32OSSYGZ.js} +1 -1
  47. package/dist/{chunk-UHS5MMAI.js → chunk-3THDNNVL.js} +3 -3
  48. package/dist/{chunk-OA6EADFT.js → chunk-564IPPBL.js} +3 -3
  49. package/dist/chunk-5MOJCOCF.js +25 -0
  50. package/dist/{chunk-RRHHWYPX.js → chunk-6H4E5UBA.js} +6 -6
  51. package/dist/{chunk-UM2X7HL6.js → chunk-6LXXKMV6.js} +42 -16
  52. package/dist/chunk-76SWHCAR.js +299 -0
  53. package/dist/{chunk-AN7C3CHH.js → chunk-77L2TNJW.js} +1 -1
  54. package/dist/{chunk-XJIIU36L.js → chunk-7YJSDXLM.js} +1 -1
  55. package/dist/{chunk-XZCJC3QO.js → chunk-B3V2WOJX.js} +285 -50
  56. package/dist/{chunk-RABLE5R6.js → chunk-BBFGDYYI.js} +1 -1
  57. package/dist/{chunk-GTBWWCCM.js → chunk-BFF3ABFV.js} +115 -9
  58. package/dist/{chunk-NOH3EJFH.js → chunk-C4EDAHXI.js} +1 -1
  59. package/dist/{chunk-ITYKN2K3.js → chunk-CHYBOTQN.js} +2 -2
  60. package/dist/{chunk-FFSIYBBU.js → chunk-CJZLIAJF.js} +27 -10
  61. package/dist/{chunk-UMTMFDL2.js → chunk-CPLQ5OHX.js} +1 -1
  62. package/dist/{chunk-DTVHZDYM.js → chunk-D3U6CN7T.js} +26 -12
  63. package/dist/{chunk-ICFHMJTW.js → chunk-D7Z4USSB.js} +27 -8
  64. package/dist/{chunk-DXMUJTYF.js → chunk-DP6LU6BB.js} +2 -2
  65. package/dist/{chunk-GA257T2E.js → chunk-DXCHIKAN.js} +8 -8
  66. package/dist/{chunk-PP7FC3Y7.js → chunk-EQR6JSFE.js} +9 -7
  67. package/dist/{chunk-Z3M627TQ.js → chunk-FONWVVDD.js} +1 -1
  68. package/dist/{chunk-3KXBRSL3.js → chunk-GMHQYX3D.js} +1 -1
  69. package/dist/{chunk-WY6YAMZW.js → chunk-ICQCQAUO.js} +5 -4
  70. package/dist/{chunk-CZ65D6Q5.js → chunk-IPG3RS23.js} +2 -2
  71. package/dist/{chunk-JCWHOB36.js → chunk-IRV2MNMA.js} +53 -3
  72. package/dist/{chunk-HIYLAC3C.js → chunk-IVB5O6NY.js} +3 -3
  73. package/dist/{chunk-DM24VZOI.js → chunk-IXTVUINH.js} +3 -3
  74. package/dist/{chunk-BEQ3MEE3.js → chunk-JBRMIADM.js} +2 -2
  75. package/dist/{chunk-CU2PXLZ6.js → chunk-JHB5SR5B.js} +4 -4
  76. package/dist/{chunk-ED2SWTPC.js → chunk-JOBSKQ2Z.js} +4 -4
  77. package/dist/{chunk-W5L2ZLHE.js → chunk-JOD2325S.js} +3 -3
  78. package/dist/{chunk-CSKABVSH.js → chunk-JSPCGPSH.js} +3 -3
  79. package/dist/{chunk-R4FL5JHK.js → chunk-KE4TSJUD.js} +4 -4
  80. package/dist/{chunk-3LF7T3NW.js → chunk-KIXRHNCW.js} +6 -6
  81. package/dist/{chunk-BKCI53W6.js → chunk-KNUYUQBP.js} +4 -4
  82. package/dist/{chunk-4LUWNBGD.js → chunk-KTLE7NIK.js} +23 -8
  83. package/dist/{chunk-ADXHPGBZ.js → chunk-LJHDUKBB.js} +6 -6
  84. package/dist/{chunk-U2P2LQ5B.js → chunk-LS42NV6E.js} +15 -6
  85. package/dist/{chunk-QNZ6G3LY.js → chunk-LYTWK5TF.js} +5 -5
  86. package/dist/{chunk-2VADJ6JH.js → chunk-METUT7V4.js} +2 -2
  87. package/dist/{chunk-P5HZEGT7.js → chunk-NSS2AIGI.js} +6 -6
  88. package/dist/{chunk-QSW3HAKI.js → chunk-NWN6GGJL.js} +61 -2
  89. package/dist/{chunk-7ILQX47W.js → chunk-P4RXSZDT.js} +3 -3
  90. package/dist/{chunk-FWS2KLV2.js → chunk-PIBWX3EF.js} +2 -2
  91. package/dist/{chunk-F56GTJFG.js → chunk-PO2P3XDC.js} +5 -5
  92. package/dist/{chunk-EEVE7H5Z.js → chunk-R2BZH2NK.js} +4 -4
  93. package/dist/{chunk-I2UBF2SS.js → chunk-RO2B4YBF.js} +1 -1
  94. package/dist/{chunk-MNKIR2ZB.js → chunk-RQOT6QL3.js} +67 -6
  95. package/dist/{chunk-Q2BD4IBX.js → chunk-SB6TYV4M.js} +11 -13
  96. package/dist/{chunk-ATPJGHUP.js → chunk-TI4JYPGQ.js} +7 -3
  97. package/dist/{chunk-LMC5UPL7.js → chunk-UC2J5RR4.js} +1 -1
  98. package/dist/{chunk-IZVEBBDH.js → chunk-UQIPWXBL.js} +3 -3
  99. package/dist/{chunk-VHKK3US3.js → chunk-UXN73YAE.js} +3 -3
  100. package/dist/{chunk-WOHP7EL6.js → chunk-VEYFXRZ6.js} +7 -6
  101. package/dist/{chunk-2Z7I7DHT.js → chunk-VHMZPN3N.js} +1 -1
  102. package/dist/{chunk-HVOQUPSO.js → chunk-VKZ3RJ5U.js} +1 -1
  103. package/dist/chunk-VVIQWGS7.js +2298 -0
  104. package/dist/{chunk-SCMEVDAR.js → chunk-WJLHZ6E6.js} +3 -3
  105. package/dist/{chunk-BAGBCSXA.js → chunk-X2MTVD4W.js} +1 -1
  106. package/dist/{chunk-3UNAPXED.js → chunk-XFDWLDHG.js} +9 -9
  107. package/dist/{chunk-6CZX6YOE.js → chunk-XNUWKKGS.js} +3 -3
  108. package/dist/{chunk-NUEPJ5W6.js → chunk-XZKSUJ55.js} +3 -5
  109. package/dist/{chunk-HDGB6SQ4.js → chunk-Y4MRHAE5.js} +2 -2
  110. package/dist/{chunk-SZBMTOUZ.js → chunk-Y6ZN454E.js} +1 -1
  111. package/dist/{chunk-TK4JU2F7.js → chunk-YSD4SMHE.js} +1 -1
  112. package/dist/{chunk-SROWUG5W.js → chunk-ZK5WYAMI.js} +1 -1
  113. package/dist/{chunk-JFKMPLNF.js → chunk-ZPIYJLQ3.js} +2 -2
  114. package/dist/{codex-app-cards-switch-HK4RMOBI.js → codex-app-cards-switch-25TDTMUZ.js} +11 -11
  115. package/dist/{codex-desktop-launch-OCO6N7SA.js → codex-desktop-launch-JDKUCD2Y.js} +1 -1
  116. package/dist/{codex-session-launch-ETZQTVFS.js → codex-session-launch-6N35AAEO.js} +18 -19
  117. package/dist/{config-YY54G3CC.js → config-OBGYURFX.js} +3 -3
  118. package/dist/{global-upgrade-5DN5G3ZQ.js → global-upgrade-2QNQD5OM.js} +10 -10
  119. package/dist/{identity-EGL6HAWG.js → identity-CUPX2U7Q.js} +4 -4
  120. package/dist/{live-capabilities-WU3FYJJG.js → live-capabilities-CUEIWMSM.js} +5 -5
  121. package/dist/{paths-ZG6KDM6Y.js → paths-BHLBZ6FY.js} +7 -3
  122. package/dist/{reapply-AQLNCCTE.js → reapply-4GXLWZ5M.js} +27 -27
  123. package/dist/src/index.js +30 -20
  124. package/dist/{upgrade-lock-BIRXIKHJ.js → upgrade-lock-RDKTAHWR.js} +4 -4
  125. package/dist/{usage-43C2DHDU.js → usage-KX2HN47E.js} +3 -3
  126. package/package.json +1 -1
  127. package/dist/chunk-ANP3DIST.js +0 -118
  128. package/dist/chunk-ONBL2GCU.js +0 -615
  129. package/dist/chunk-TJUJAK5L.js +0 -62
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.67
4
+
5
+ - Hermes: setup installs the Pushary plugin as a folder in `~/.hermes/plugins/pushary`, where Hermes keeps your own plugins, instead of pip-installing it into Hermes's old virtualenv. Hermes v0.21.6 and later run from a Python they manage and rebuild on every `hermes update`, which left the pip copy behind and silently unloaded Pushary. The folder survives updates. Setup turns the plugin on with `hermes plugins enable pushary` and `hermes config set`, and never restarts Hermes for you.
6
+ - `pushary upgrade` moves a Hermes setup from before this release over to the folder, removes the old pip copy Hermes would otherwise load, and tells you to run `hermes gateway restart`.
7
+ - Setup no longer turns off Hermes's `clarify` tool. While the plugin is loaded it sends Hermes's questions to your phone through `pushary_ask`; without the plugin Hermes asks in its own prompt. Setups from before this release get `clarify` back.
8
+ - `pushary doctor` reports Hermes as connected only when the running Hermes loaded the plugin, and says when Hermes needs a restart, runs an older copy, or has the plugin switched off. It no longer asks for the global package when Pushary for Mac saved the key.
9
+ - Setup finds the `hermes` command in `~/.local/bin` and Homebrew when it is not on your PATH, and follows Hermes profiles (`HERMES_HOME` and `active_profile`).
10
+ - `pushary clean` removes the plugin folder only if Pushary installed it, and leaves a Hermes that Pushary for Mac connected, and the key the app saved for it, to the app. Neither setup nor the Mac app writes an older plugin over a newer one.
11
+
12
+ ## 1.9.66
13
+
14
+ - In Claude Code, an approval stays answerable from your phone and from the terminal at the same time, and whichever answers first wins. Before, Pushary held the call for its window (60 seconds by default) while the terminal showed only a spinner, then withdrew the phone question and left only the terminal. Now Claude Code shows its own prompt straight away, Pushary sends the same question to your phone, and the phone keeps it for up to 10 minutes. Answer at the terminal and Pushary withdraws the phone question. This applies in an interactive Claude Code session in default or accept-edits mode, when only Pushary's defaults ask about the call. In bypass mode, and in `claude -p` and other headless runs, there is no prompt to answer, so Pushary still holds the call as before.
15
+ - Claude Code always shows its prompt for these calls, even where its own allow rules, a "don't ask again" choice or accept-edits would have run them without asking.
16
+ - A phone-only rule that approves or denies after a set time still does that when nobody answers in time. Other rules, including the built-in ones, never decide a call nobody answered: the prompt stays open. If Pushary cannot reach your phone, the terminal prompt stays and you answer there.
17
+ - A rule you wrote, a preset you picked or a mode you switched to for now keeps the old behaviour, as you set it up. So does a Team approval route, which its approver answers, not the terminal.
18
+ - Setup, upgrade and the daily update add a proof of the 10 minute hold to the Claude Code permission hook. Until then, an older registration keeps the window your rule had before, with the terminal answerable from the start.
19
+ - With Pushary for Mac, approvals work as before for now.
20
+
3
21
  ## 1.9.65
4
22
 
5
23
  - OpenCode now asks before shell commands, edits and web fetches, so those approvals reach Pushary. Out of the box OpenCode runs all three without asking anybody, and Pushary's plugin can only answer what OpenCode asks, so until now an OpenCode set up by Pushary approved nothing. Setup sets `bash`, `edit` and `webfetch` to `ask` under `permission` in `opencode.json`, but only for a tool no rule of yours names. A rule for every tool (`"*"`), another name for the same tool (`shell`, `write`, `patch`), a switch under `tools`, a list of patterns and a single `permission` value all count as yours and stay as they are. Pushary's rules go before yours, and OpenCode follows the last rule that matches, so yours still decide.
package/data/SKILL.md CHANGED
@@ -272,7 +272,7 @@ brew install --cask pushary/tap/pushary
272
272
 
273
273
  They can also download it from https://pushary.com/download. It needs macOS 14 or later. It is not in the App Store.
274
274
 
275
- The command line works on macOS too. Offer it if the user prefers the terminal, or if the user runs Hermes, because Hermes needs a Python the app cannot install.
275
+ The command line works on macOS too. Offer it if the user prefers the terminal. The app connects Hermes as well.
276
276
 
277
277
  ### Branch 3. `Linux` or `Windows_NT`
278
278
 
@@ -265,7 +265,7 @@ brew install --cask pushary/tap/pushary
265
265
 
266
266
  They can also download it from https://pushary.com/download. It needs macOS 14 or later. It is not in the App Store.
267
267
 
268
- The command line works on macOS too. Offer it if the user prefers the terminal, or if the user runs Hermes, because Hermes needs a Python the app cannot install.
268
+ The command line works on macOS too. Offer it if the user prefers the terminal. The app connects Hermes as well.
269
269
 
270
270
  ### Branch 3. `Linux` or `Windows_NT`
271
271
 
@@ -265,7 +265,7 @@ brew install --cask pushary/tap/pushary
265
265
 
266
266
  They can also download it from https://pushary.com/download. It needs macOS 14 or later. It is not in the App Store.
267
267
 
268
- The command line works on macOS too. Offer it if the user prefers the terminal, or if the user runs Hermes, because Hermes needs a Python the app cannot install.
268
+ The command line works on macOS too. Offer it if the user prefers the terminal. The app connects Hermes as well.
269
269
 
270
270
  ### Branch 3. `Linux` or `Windows_NT`
271
271
 
@@ -1,4 +1,5 @@
1
1
  import {
2
+ ABANDONED_WAIT,
2
3
  WAIT_RESPONSE_GRACE_MS,
3
4
  askUser,
4
5
  cancelQuestion,
@@ -16,25 +17,26 @@ import {
16
17
  waitForQuestion,
17
18
  waitsForThePhone,
18
19
  withdrawQuestion
19
- } from "./chunk-DTVHZDYM.js";
20
+ } from "./chunk-D3U6CN7T.js";
20
21
  import "./chunk-POFBE6ZY.js";
21
- import "./chunk-BKCI53W6.js";
22
- import "./chunk-UHS5MMAI.js";
23
- import "./chunk-7ILQX47W.js";
24
- import "./chunk-FWS2KLV2.js";
22
+ import "./chunk-KNUYUQBP.js";
23
+ import "./chunk-3THDNNVL.js";
24
+ import "./chunk-P4RXSZDT.js";
25
+ import "./chunk-PIBWX3EF.js";
25
26
  import "./chunk-PPY5N2E6.js";
26
27
  import "./chunk-KZERVKTD.js";
27
- import "./chunk-ATPJGHUP.js";
28
- import "./chunk-SCMEVDAR.js";
29
- import "./chunk-Y64JGYTB.js";
30
- import "./chunk-BAGBCSXA.js";
28
+ import "./chunk-TI4JYPGQ.js";
29
+ import "./chunk-WJLHZ6E6.js";
30
+ import "./chunk-32OSSYGZ.js";
31
+ import "./chunk-X2MTVD4W.js";
31
32
  import "./chunk-QTOLNRET.js";
32
33
  import {
33
34
  DECISION_STOP_REASON,
34
35
  UNVERIFIABLE_APPROVAL_REASON
35
- } from "./chunk-MNKIR2ZB.js";
36
+ } from "./chunk-RQOT6QL3.js";
36
37
  import "./chunk-MLKGABMK.js";
37
38
  export {
39
+ ABANDONED_WAIT,
38
40
  DECISION_STOP_REASON,
39
41
  UNVERIFIABLE_APPROVAL_REASON,
40
42
  WAIT_RESPONSE_GRACE_MS,
@@ -1,41 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-I2UBF2SS.js";
4
+ } from "../chunk-RO2B4YBF.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-PP7FC3Y7.js";
8
- import "../chunk-Q2BD4IBX.js";
9
- import "../chunk-SZBMTOUZ.js";
10
- import "../chunk-WY6YAMZW.js";
11
- import "../chunk-ADXHPGBZ.js";
12
- import "../chunk-GTBWWCCM.js";
13
- import "../chunk-ANP3DIST.js";
14
- import "../chunk-SROWUG5W.js";
15
- import "../chunk-Z3M627TQ.js";
7
+ } from "../chunk-EQR6JSFE.js";
8
+ import "../chunk-SB6TYV4M.js";
9
+ import "../chunk-Y6ZN454E.js";
10
+ import "../chunk-ICQCQAUO.js";
11
+ import "../chunk-LJHDUKBB.js";
12
+ import "../chunk-BFF3ABFV.js";
13
+ import "../chunk-ZK5WYAMI.js";
14
+ import "../chunk-FONWVVDD.js";
16
15
  import "../chunk-NMUI3ZWG.js";
17
- import "../chunk-QSW3HAKI.js";
18
- import "../chunk-TJUJAK5L.js";
19
- import "../chunk-TK4JU2F7.js";
16
+ import "../chunk-NWN6GGJL.js";
17
+ import "../chunk-YSD4SMHE.js";
20
18
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-ED2SWTPC.js";
22
- import "../chunk-3UNAPXED.js";
23
- import "../chunk-3KXBRSL3.js";
24
- import "../chunk-DTVHZDYM.js";
19
+ import "../chunk-JOBSKQ2Z.js";
20
+ import "../chunk-XFDWLDHG.js";
21
+ import "../chunk-GMHQYX3D.js";
22
+ import "../chunk-D3U6CN7T.js";
25
23
  import "../chunk-POFBE6ZY.js";
26
- import "../chunk-BKCI53W6.js";
27
- import "../chunk-UHS5MMAI.js";
28
- import "../chunk-7ILQX47W.js";
29
- import "../chunk-FWS2KLV2.js";
24
+ import "../chunk-KNUYUQBP.js";
25
+ import "../chunk-3THDNNVL.js";
26
+ import "../chunk-P4RXSZDT.js";
27
+ import "../chunk-PIBWX3EF.js";
30
28
  import "../chunk-PPY5N2E6.js";
31
29
  import "../chunk-KZERVKTD.js";
32
- import "../chunk-2VADJ6JH.js";
33
- import "../chunk-ATPJGHUP.js";
34
- import "../chunk-SCMEVDAR.js";
35
- import "../chunk-Y64JGYTB.js";
36
- import "../chunk-BAGBCSXA.js";
30
+ import "../chunk-METUT7V4.js";
31
+ import "../chunk-TI4JYPGQ.js";
32
+ import "../chunk-WJLHZ6E6.js";
33
+ import "../chunk-32OSSYGZ.js";
34
+ import "../chunk-X2MTVD4W.js";
37
35
  import "../chunk-QTOLNRET.js";
38
- import "../chunk-MNKIR2ZB.js";
36
+ import "../chunk-RQOT6QL3.js";
39
37
  import "../chunk-MLKGABMK.js";
40
38
 
41
39
  // bin/pushary-bell-hook.ts
@@ -5,40 +5,40 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-I2UBF2SS.js";
8
+ } from "../chunk-RO2B4YBF.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-AN7C3CHH.js";
14
+ } from "../chunk-77L2TNJW.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-Z3M627TQ.js";
19
+ } from "../chunk-FONWVVDD.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-NMUI3ZWG.js";
23
- import "../chunk-ED2SWTPC.js";
23
+ import "../chunk-JOBSKQ2Z.js";
24
24
  import "../chunk-PPY5N2E6.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-2VADJ6JH.js";
28
+ import "../chunk-METUT7V4.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-ATPJGHUP.js";
31
+ } from "../chunk-TI4JYPGQ.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
- } from "../chunk-SCMEVDAR.js";
36
- import "../chunk-Y64JGYTB.js";
37
- import "../chunk-BAGBCSXA.js";
35
+ } from "../chunk-WJLHZ6E6.js";
36
+ import "../chunk-32OSSYGZ.js";
37
+ import "../chunk-X2MTVD4W.js";
38
38
  import "../chunk-QTOLNRET.js";
39
39
  import {
40
40
  isRecord
41
- } from "../chunk-MNKIR2ZB.js";
41
+ } from "../chunk-RQOT6QL3.js";
42
42
  import "../chunk-MLKGABMK.js";
43
43
 
44
44
  // bin/pushary-bell.ts
@@ -2,45 +2,43 @@
2
2
  import {
3
3
  WRAPPER_ACTIVE_ENV,
4
4
  findClaudeBinary
5
- } from "../chunk-CZ65D6Q5.js";
5
+ } from "../chunk-IPG3RS23.js";
6
6
  import {
7
7
  SESSION_IDLE_TIMEOUT_MS,
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-6CZX6YOE.js";
12
- import "../chunk-RABLE5R6.js";
11
+ } from "../chunk-XNUWKKGS.js";
12
+ import "../chunk-BBFGDYYI.js";
13
13
  import {
14
14
  announceSubscriptionRequired,
15
15
  isDeferAnswer
16
- } from "../chunk-UMTMFDL2.js";
16
+ } from "../chunk-CPLQ5OHX.js";
17
17
  import {
18
18
  claudeTranscriptPath,
19
19
  loadSessionKey,
20
20
  registerTranscript,
21
21
  registeredTranscriptEnabled
22
- } from "../chunk-Q2BD4IBX.js";
23
- import "../chunk-SZBMTOUZ.js";
22
+ } from "../chunk-SB6TYV4M.js";
23
+ import "../chunk-Y6ZN454E.js";
24
24
  import {
25
25
  ensureDaemonRunning
26
- } from "../chunk-ADXHPGBZ.js";
27
- import "../chunk-GTBWWCCM.js";
28
- import "../chunk-ANP3DIST.js";
29
- import "../chunk-SROWUG5W.js";
30
- import "../chunk-Z3M627TQ.js";
26
+ } from "../chunk-LJHDUKBB.js";
27
+ import "../chunk-BFF3ABFV.js";
28
+ import "../chunk-ZK5WYAMI.js";
29
+ import "../chunk-FONWVVDD.js";
31
30
  import "../chunk-NMUI3ZWG.js";
32
31
  import {
33
32
  encryptRecord
34
- } from "../chunk-QSW3HAKI.js";
35
- import "../chunk-TJUJAK5L.js";
33
+ } from "../chunk-NWN6GGJL.js";
36
34
  import {
37
35
  transcriptsEnabled
38
- } from "../chunk-TK4JU2F7.js";
36
+ } from "../chunk-YSD4SMHE.js";
39
37
  import {
40
38
  needsShell,
41
39
  spawnClaude
42
40
  } from "../chunk-XHKBHWLX.js";
43
- import "../chunk-ED2SWTPC.js";
41
+ import "../chunk-JOBSKQ2Z.js";
44
42
  import {
45
43
  DEFAULT_SESSION,
46
44
  UNNAMED_ACTION,
@@ -57,10 +55,10 @@ import {
57
55
  reportEvent,
58
56
  savePendingCommand,
59
57
  scopePathFor
60
- } from "../chunk-3UNAPXED.js";
58
+ } from "../chunk-XFDWLDHG.js";
61
59
  import {
62
60
  repoKeyFor
63
- } from "../chunk-3KXBRSL3.js";
61
+ } from "../chunk-GMHQYX3D.js";
64
62
  import {
65
63
  askUser,
66
64
  cancelQuestion,
@@ -72,30 +70,30 @@ import {
72
70
  waitForAnswer,
73
71
  waitsForThePhone,
74
72
  withdrawQuestion
75
- } from "../chunk-DTVHZDYM.js";
73
+ } from "../chunk-D3U6CN7T.js";
76
74
  import "../chunk-POFBE6ZY.js";
77
75
  import {
78
76
  SubscriptionRequiredError
79
- } from "../chunk-BKCI53W6.js";
80
- import "../chunk-UHS5MMAI.js";
81
- import "../chunk-7ILQX47W.js";
77
+ } from "../chunk-KNUYUQBP.js";
78
+ import "../chunk-3THDNNVL.js";
79
+ import "../chunk-P4RXSZDT.js";
82
80
  import {
83
81
  getMachineId
84
- } from "../chunk-FWS2KLV2.js";
82
+ } from "../chunk-PIBWX3EF.js";
85
83
  import "../chunk-PPY5N2E6.js";
86
84
  import "../chunk-KZERVKTD.js";
87
- import "../chunk-2VADJ6JH.js";
85
+ import "../chunk-METUT7V4.js";
88
86
  import {
89
87
  claudeConfigDir
90
- } from "../chunk-ATPJGHUP.js";
91
- import "../chunk-SCMEVDAR.js";
88
+ } from "../chunk-TI4JYPGQ.js";
89
+ import "../chunk-WJLHZ6E6.js";
92
90
  import {
93
91
  getApiKey,
94
92
  getBaseUrl
95
- } from "../chunk-Y64JGYTB.js";
93
+ } from "../chunk-32OSSYGZ.js";
96
94
  import {
97
95
  NPX_LATEST_COMMAND
98
- } from "../chunk-BAGBCSXA.js";
96
+ } from "../chunk-X2MTVD4W.js";
99
97
  import "../chunk-QTOLNRET.js";
100
98
  import {
101
99
  DECISION_STOP_REASON,
@@ -108,7 +106,7 @@ import {
108
106
  refusesWhenUnanswered,
109
107
  resolveGate,
110
108
  timeoutActionWithoutLocalPrompt
111
- } from "../chunk-MNKIR2ZB.js";
109
+ } from "../chunk-RQOT6QL3.js";
112
110
  import "../chunk-MLKGABMK.js";
113
111
 
114
112
  // src/wrapper/localPassthrough.ts
@@ -15,51 +15,53 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-OA6EADFT.js";
18
+ } from "../chunk-564IPPBL.js";
19
19
  import {
20
20
  PUSHARY_SKILL_NAME,
21
21
  PUSHARY_SKILL_SOURCE,
22
22
  createGuards
23
23
  } from "../chunk-EUW7JL2K.js";
24
- import "../chunk-JFKMPLNF.js";
24
+ import "../chunk-ZPIYJLQ3.js";
25
25
  import "../chunk-XCEN33UP.js";
26
26
  import {
27
27
  describeCliKeyRevocation,
28
28
  planCliKeyRevocations,
29
29
  readCliHeldKeys,
30
30
  revokeCliKeys
31
- } from "../chunk-GA257T2E.js";
32
- import "../chunk-FFSIYBBU.js";
31
+ } from "../chunk-DXCHIKAN.js";
33
32
  import {
34
33
  isCursorPluginLeftover,
35
34
  releaseSoleGate,
36
35
  withoutPusharyCursorHooks
37
- } from "../chunk-CU2PXLZ6.js";
36
+ } from "../chunk-JHB5SR5B.js";
38
37
  import {
39
- HERMES_PIP_PACKAGE,
40
- readHermesStatus,
41
- resolveHermesPython,
42
- runHermesConfigScript,
43
38
  shortenHome,
44
39
  unregisterPluginLocation,
45
40
  vscodeSettingsTargets
46
- } from "../chunk-ONBL2GCU.js";
41
+ } from "../chunk-76SWHCAR.js";
47
42
  import {
43
+ configFileHoldsMacAppKey,
48
44
  macAppKeepsMcpEntry,
49
45
  mcpServerBearer,
50
46
  pusharyKey,
51
47
  readMacAppAgentKey,
52
48
  setupReceiptKey
53
- } from "../chunk-U2P2LQ5B.js";
49
+ } from "../chunk-LS42NV6E.js";
50
+ import "../chunk-5MOJCOCF.js";
51
+ import {
52
+ HERMES_CONFIG_FILE,
53
+ defaultHermesHome,
54
+ hermesReceiptPaths,
55
+ removeHermesWiring
56
+ } from "../chunk-VVIQWGS7.js";
54
57
  import "../chunk-QCGNGEGE.js";
55
- import "../chunk-ITYKN2K3.js";
56
58
  import {
57
59
  planClineRemoval,
58
60
  planFxRemoval,
59
61
  removeClineServer
60
- } from "../chunk-QNZ6G3LY.js";
61
- import "../chunk-W5L2ZLHE.js";
62
- import "../chunk-BEQ3MEE3.js";
62
+ } from "../chunk-LYTWK5TF.js";
63
+ import "../chunk-JOD2325S.js";
64
+ import "../chunk-JBRMIADM.js";
63
65
  import {
64
66
  OPENCODE_ASKED_PERMISSIONS,
65
67
  OPENCODE_PLUGIN_SIBLING,
@@ -73,15 +75,15 @@ import {
73
75
  openCodePluginDir,
74
76
  openCodePluginFile,
75
77
  removeOpenCodeMcpServer
76
- } from "../chunk-P5HZEGT7.js";
78
+ } from "../chunk-NSS2AIGI.js";
77
79
  import {
78
80
  ansiPainter,
79
81
  useColor
80
82
  } from "../chunk-FO3MDD26.js";
81
83
  import {
82
84
  exitOnHelpFlag
83
- } from "../chunk-AN7C3CHH.js";
84
- import "../chunk-RABLE5R6.js";
85
+ } from "../chunk-77L2TNJW.js";
86
+ import "../chunk-BBFGDYYI.js";
85
87
  import {
86
88
  compatibleConfigFile,
87
89
  compatibleDocuments,
@@ -93,23 +95,21 @@ import {
93
95
  removeCompatibleHooks,
94
96
  removeCompatibleMcpServer,
95
97
  serializeConfigDocument
96
- } from "../chunk-WY6YAMZW.js";
98
+ } from "../chunk-ICQCQAUO.js";
97
99
  import {
98
100
  disableDaemonService
99
- } from "../chunk-ADXHPGBZ.js";
101
+ } from "../chunk-LJHDUKBB.js";
100
102
  import {
101
103
  hookOwnerOf,
102
104
  isHookTakeoverReceipt,
103
105
  liveBridgeProbe,
106
+ removeGeminiSettings,
104
107
  resolveBridgeStub,
105
108
  restoreHookTakeover,
106
109
  restoreMcpServer
107
- } from "../chunk-GTBWWCCM.js";
108
- import {
109
- removeGeminiSettings
110
- } from "../chunk-ANP3DIST.js";
111
- import "../chunk-SROWUG5W.js";
112
- import "../chunk-Z3M627TQ.js";
110
+ } from "../chunk-BFF3ABFV.js";
111
+ import "../chunk-ZK5WYAMI.js";
112
+ import "../chunk-FONWVVDD.js";
113
113
  import {
114
114
  parseFlags
115
115
  } from "../chunk-NMUI3ZWG.js";
@@ -119,21 +119,21 @@ import {
119
119
  isDisabledExport,
120
120
  removeClaudeAlias,
121
121
  shellProfileCandidates
122
- } from "../chunk-ED2SWTPC.js";
122
+ } from "../chunk-JOBSKQ2Z.js";
123
123
  import "../chunk-E46NE7FB.js";
124
- import "../chunk-3UNAPXED.js";
125
- import "../chunk-3KXBRSL3.js";
126
- import "../chunk-DTVHZDYM.js";
124
+ import "../chunk-XFDWLDHG.js";
125
+ import "../chunk-GMHQYX3D.js";
126
+ import "../chunk-D3U6CN7T.js";
127
127
  import "../chunk-POFBE6ZY.js";
128
- import "../chunk-BKCI53W6.js";
129
- import "../chunk-UHS5MMAI.js";
130
- import "../chunk-7ILQX47W.js";
131
- import "../chunk-FWS2KLV2.js";
128
+ import "../chunk-KNUYUQBP.js";
129
+ import "../chunk-3THDNNVL.js";
130
+ import "../chunk-P4RXSZDT.js";
131
+ import "../chunk-PIBWX3EF.js";
132
132
  import "../chunk-PPY5N2E6.js";
133
133
  import {
134
134
  EXIT
135
135
  } from "../chunk-KZERVKTD.js";
136
- import "../chunk-2VADJ6JH.js";
136
+ import "../chunk-METUT7V4.js";
137
137
  import {
138
138
  claudeConfigDir,
139
139
  claudeJson,
@@ -160,10 +160,10 @@ import {
160
160
  fxSettings,
161
161
  geminiMd,
162
162
  geminiSettings,
163
- hermesConfig,
164
- hermesConfigReceipt,
163
+ hermesAppWiringRecord,
165
164
  hookTakeoverReceipt,
166
165
  isClaudeMcpSnapshot,
166
+ pusharyConfigFile,
167
167
  pusharyDir,
168
168
  readCodexMcpAuth,
169
169
  removeClaudeMcpServers,
@@ -176,20 +176,20 @@ import {
176
176
  restoreCodexHookTrust,
177
177
  vscodePluginDir,
178
178
  vscodePluginMcp
179
- } from "../chunk-ATPJGHUP.js";
179
+ } from "../chunk-TI4JYPGQ.js";
180
180
  import {
181
181
  cleanNpmEnv,
182
182
  globalPackageState,
183
183
  npmIsOnPath,
184
184
  readGlobalFolder,
185
185
  readGlobalPrefix
186
- } from "../chunk-SCMEVDAR.js";
186
+ } from "../chunk-WJLHZ6E6.js";
187
187
  import {
188
188
  getBaseUrl
189
- } from "../chunk-Y64JGYTB.js";
189
+ } from "../chunk-32OSSYGZ.js";
190
190
  import {
191
191
  NPX_LATEST_COMMAND
192
- } from "../chunk-BAGBCSXA.js";
192
+ } from "../chunk-X2MTVD4W.js";
193
193
  import {
194
194
  CLI_PACKAGE_NAMES,
195
195
  globalPackageFolder,
@@ -203,12 +203,12 @@ import {
203
203
  SUPPORT_EMAIL,
204
204
  isValidApiKey,
205
205
  redactSecrets
206
- } from "../chunk-MNKIR2ZB.js";
206
+ } from "../chunk-RQOT6QL3.js";
207
207
  import "../chunk-MLKGABMK.js";
208
208
 
209
209
  // bin/pushary-clean.ts
210
210
  import { existsSync as existsSync5, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
211
- import { dirname as dirname2, join as join5 } from "path";
211
+ import { basename, dirname as dirname2, join as join5 } from "path";
212
212
  import { homedir as homedir4, tmpdir } from "os";
213
213
  import { confirm } from "@inquirer/prompts";
214
214
  import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
@@ -533,8 +533,6 @@ var CLAUDE_SETTINGS = claudeSettings();
533
533
  var CLAUDE_SETTINGS_LOCAL = claudeSettingsLocal();
534
534
  var CLAUDE_JSON = claudeJson();
535
535
  var CLAUDE_MCP_RECEIPT = claudeMcpReceipt();
536
- var HERMES_CONFIG_RECEIPT = hermesConfigReceipt();
537
- var HERMES_CONFIG_FILE = hermesConfig();
538
536
  var SKILL_DIR = claudeSkillDir();
539
537
  var CURSOR_MCP = cursorUserMcp();
540
538
  var CURSOR_PLUGIN_DIR = cursorPluginDir();
@@ -573,6 +571,33 @@ var readJson = (path) => {
573
571
  };
574
572
  var dryRun = false;
575
573
  var did = (past) => dryRun ? `(would ${past === "cleaned" ? "clean" : past === "removed" ? "remove" : past === "uninstalled" ? "uninstall" : past})` : `(${past})`;
574
+ var HERMES_REMOVAL_FAILURES = {
575
+ receipt_invalid: "setup receipt is unreadable; left unchanged",
576
+ home_unknown: "Hermes would not report its settings; left unchanged",
577
+ plugin: "could not remove the plugin; setup receipt kept for retry",
578
+ settings: "could not restore config.yaml; setup receipt kept for retry"
579
+ };
580
+ var reportHermesRemoval = (outcome) => {
581
+ switch (outcome.kind) {
582
+ case "not_found":
583
+ console.log(` ${skip} Hermes ${dim("(not found)")}`);
584
+ return false;
585
+ case "kept_for_mac_app":
586
+ console.log(` ${skip} Hermes ${dim("(kept: the Mac app connected it)")}`);
587
+ return false;
588
+ case "runtime_missing":
589
+ console.log(` ${skip} Hermes ${dim("(hermes command not found; setup receipt kept for retry)")}`);
590
+ return true;
591
+ case "failed":
592
+ console.log(` ${skip} Hermes ${dim(`(${HERMES_REMOVAL_FAILURES[outcome.step]})`)}`);
593
+ return true;
594
+ case "removed":
595
+ if (outcome.pluginRemoved) console.log(` ${check} Hermes plugin ${dim(did("removed"))}`);
596
+ if (outcome.dryRun) wouldNote("rewrite", join5(defaultHermesHome(), HERMES_CONFIG_FILE));
597
+ console.log(` ${check} Hermes config ${dim(outcome.dryRun ? "(would restore)" : "(restored)")} ${dim("(Pushary settings)")}`);
598
+ return false;
599
+ }
600
+ };
576
601
  var wouldNote = (action, path) => {
577
602
  console.log(` ${dim("would")} ${action} ${path}`);
578
603
  };
@@ -1151,37 +1176,8 @@ var main = async () => {
1151
1176
  removeFxConfiguration();
1152
1177
  removeFxInstructions();
1153
1178
  removeClineConfiguration();
1154
- const hermesPython = resolveHermesPython();
1155
- if (hermesPython) {
1156
- const configRun = runHermesConfigScript(hermesPython, dryRun ? "clean-preview" : "clean", HERMES_CONFIG_RECEIPT);
1157
- if (configRun === "failed") {
1158
- incompleteClean = true;
1159
- console.log(` ${skip} Hermes config ${dim("(could not update config.yaml)")}`);
1160
- } else {
1161
- if (configRun === "changed") {
1162
- if (dryRun) wouldNote("rewrite", HERMES_CONFIG_FILE);
1163
- console.log(` ${check} Hermes config ${dim(did("removed"))} ${dim("(Pushary settings)")}`);
1164
- } else {
1165
- console.log(` ${skip} Hermes config ${dim("(no Pushary settings)")}`);
1166
- }
1167
- if (readHermesStatus(hermesPython)?.pluginInstalled === false) {
1168
- console.log(` ${skip} Hermes plugin ${dim("(not installed)")}`);
1169
- } else {
1170
- try {
1171
- guards.execFile(hermesPython, ["-m", "pip", "uninstall", "-y", HERMES_PIP_PACKAGE], { stdio: "pipe", timeout: 6e4 }, `pip uninstall ${HERMES_PIP_PACKAGE}`);
1172
- console.log(` ${check} Hermes plugin ${dim(did("uninstalled"))}`);
1173
- } catch {
1174
- incompleteClean = true;
1175
- console.log(` ${skip} Hermes plugin ${dim("(could not uninstall; setup receipt kept for retry)")}`);
1176
- }
1177
- }
1178
- }
1179
- } else if (existsSync5(HERMES_CONFIG_RECEIPT)) {
1180
- incompleteClean = true;
1181
- console.log(` ${skip} Hermes ${dim("(runtime not found; setup receipt kept for retry)")}`);
1182
- } else {
1183
- console.log(` ${skip} Hermes ${dim("(not found)")}`);
1184
- }
1179
+ const hermesRemoval = removeHermesWiring({ dryRun, receipts: hermesReceiptPaths(), keepMacAppWiring: keepShared, macAppWiringRecord: hermesAppWiringRecord() });
1180
+ if (reportHermesRemoval(hermesRemoval)) incompleteClean = true;
1185
1181
  for (const shellFile of SHELL_FILES) {
1186
1182
  try {
1187
1183
  const content = readFileSync4(shellFile, "utf-8");
@@ -1228,10 +1224,11 @@ var main = async () => {
1228
1224
  if (existsSync5(PUSHARY_DIR)) {
1229
1225
  let removed = 0;
1230
1226
  const kept = [];
1227
+ const macAppsHermesKey = hermesRemoval.kind === "kept_for_mac_app" && configFileHoldsMacAppKey(pusharyConfigFile()) ? basename(pusharyConfigFile()) : null;
1231
1228
  for (const entry of readdirSync4(PUSHARY_DIR)) {
1232
1229
  const appCardsFolder = entry === CODEX_APP_CARDS_DIRECTORY ? codexAppCardsFolderInTheLastSweep(appCardsCleanUp) : "swept_with_the_rest";
1233
1230
  if (appCardsFolder === "left_to_the_switch") continue;
1234
- if (keepShared && isAppOwned(entry) || entry === "setup" && (keepShared || incompleteClean) || appCardsFolder === "kept") {
1231
+ if (keepShared && isAppOwned(entry) || entry === "setup" && (keepShared || incompleteClean) || entry === macAppsHermesKey || appCardsFolder === "kept") {
1235
1232
  kept.push(entry);
1236
1233
  continue;
1237
1234
  }