@pushary/agent-hooks 1.9.66 → 1.9.68

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 (127) hide show
  1. package/CHANGELOG.md +15 -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-GDSVUTI2.js → api-6Q7XIB67.js} +10 -10
  6. package/dist/bin/pushary-bell-hook.js +25 -25
  7. package/dist/bin/pushary-bell.js +10 -10
  8. package/dist/bin/pushary-claude.js +26 -26
  9. package/dist/bin/pushary-clean.js +73 -74
  10. package/dist/bin/pushary-codex-bridge.js +21 -21
  11. package/dist/bin/pushary-codex-hook.js +30 -30
  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 -27
  15. package/dist/bin/pushary-cowork.js +5 -5
  16. package/dist/bin/pushary-daemon.js +40 -39
  17. package/dist/bin/pushary-disconnect.js +25 -25
  18. package/dist/bin/pushary-doctor.js +126 -72
  19. package/dist/bin/pushary-elicitation-hook.js +25 -25
  20. package/dist/bin/pushary-gemini-bridge.js +15 -15
  21. package/dist/bin/pushary-gemini-hook.js +27 -27
  22. package/dist/bin/pushary-hook.js +29 -29
  23. package/dist/bin/pushary-login.js +20 -19
  24. package/dist/bin/pushary-logout.js +26 -27
  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 -24
  28. package/dist/bin/pushary-opencode-hook.js +26 -26
  29. package/dist/bin/pushary-permission-denied-hook.js +29 -29
  30. package/dist/bin/pushary-permission-hook.js +29 -29
  31. package/dist/bin/pushary-post-hook.js +24 -24
  32. package/dist/bin/pushary-prompt-hook.js +24 -24
  33. package/dist/bin/pushary-session-end-hook.js +26 -26
  34. package/dist/bin/pushary-session-start-hook.js +34 -33
  35. package/dist/bin/pushary-setup.js +115 -98
  36. package/dist/bin/pushary-stats.js +5 -5
  37. package/dist/bin/pushary-status.js +37 -35
  38. package/dist/bin/pushary-stop-hook.js +24 -24
  39. package/dist/bin/pushary-stopfailure-hook.js +24 -24
  40. package/dist/bin/pushary-suggestions.js +15 -14
  41. package/dist/bin/pushary-transcript-register.js +16 -16
  42. package/dist/bin/pushary-transcripts.js +18 -17
  43. package/dist/bin/pushary-upgrade.js +66 -38
  44. package/dist/bin/pushary-wait.js +26 -20
  45. package/dist/bin/pushary.js +7 -7
  46. package/dist/{chunk-ZJV7SFIJ.js → chunk-2HMKZYF5.js} +1 -1
  47. package/dist/{chunk-IA5VWIHV.js → chunk-2VYQG2HG.js} +2 -2
  48. package/dist/{chunk-A47UKPC7.js → chunk-32OSSYGZ.js} +1 -1
  49. package/dist/{chunk-DBUHSUL7.js → chunk-4TIN3T2A.js} +1 -1
  50. package/dist/{chunk-JL3SZJJP.js → chunk-53Q4LRBU.js} +2 -2
  51. package/dist/{chunk-HUGVJBDN.js → chunk-53RH3ZIK.js} +2 -2
  52. package/dist/{chunk-2BL6KWN7.js → chunk-6IFEYELN.js} +9 -9
  53. package/dist/{chunk-DKMVVBXO.js → chunk-6VFZVL65.js} +55 -13
  54. package/dist/{chunk-YQDCTID4.js → chunk-73DHP3JX.js} +4 -4
  55. package/dist/{chunk-G6VJZ3RB.js → chunk-77L2TNJW.js} +1 -1
  56. package/dist/{chunk-IQ3GKPFM.js → chunk-77QP22FL.js} +1 -1
  57. package/dist/{chunk-VURDLVAQ.js → chunk-7S7NTMDJ.js} +3 -3
  58. package/dist/{chunk-4APD2DPI.js → chunk-7SKGS7QN.js} +53 -3
  59. package/dist/chunk-7V63A4AI.js +25 -0
  60. package/dist/{chunk-6BGVSV2Q.js → chunk-7YJSDXLM.js} +1 -1
  61. package/dist/{chunk-MNNQEUQC.js → chunk-AJIT4SCL.js} +27 -8
  62. package/dist/{chunk-QR2QWGQI.js → chunk-BSMHSN3Y.js} +3 -3
  63. package/dist/{chunk-R7C2FS33.js → chunk-C4EDAHXI.js} +1 -1
  64. package/dist/{chunk-7LK3Y6ET.js → chunk-CB4U6WRP.js} +6 -6
  65. package/dist/chunk-D6W7QDQE.js +2298 -0
  66. package/dist/{chunk-V4EOFOB2.js → chunk-E5PEOVUJ.js} +6 -6
  67. package/dist/{chunk-32ZT2ATY.js → chunk-EOWHEZHD.js} +8 -8
  68. package/dist/{chunk-57NTMVMI.js → chunk-EUU5PDUI.js} +6 -6
  69. package/dist/{chunk-XXIJBYNW.js → chunk-GMHQYX3D.js} +1 -1
  70. package/dist/{chunk-V3YBVOTZ.js → chunk-I5FFSOCV.js} +2 -2
  71. package/dist/{chunk-RJ6JEHCP.js → chunk-JAKWPQ2L.js} +1 -1
  72. package/dist/{chunk-XDDSURY3.js → chunk-JPVV27O2.js} +3 -3
  73. package/dist/{chunk-GWYCKTXS.js → chunk-K4TSXWVX.js} +5 -5
  74. package/dist/chunk-LF2NSOAQ.js +299 -0
  75. package/dist/{chunk-6RJZSBPD.js → chunk-LGCVAE52.js} +1 -1
  76. package/dist/{chunk-GDLT32I4.js → chunk-LQAAOXYJ.js} +21 -13
  77. package/dist/{chunk-3ELJIG2R.js → chunk-MCNHNIRC.js} +3 -3
  78. package/dist/{chunk-XIJTXRWB.js → chunk-METUT7V4.js} +2 -2
  79. package/dist/{chunk-MDIGG3Q7.js → chunk-MFWHANKG.js} +3 -3
  80. package/dist/{chunk-GECU7V44.js → chunk-MHC34X5A.js} +3 -3
  81. package/dist/{chunk-376TUN72.js → chunk-MMTA7UKA.js} +3 -3
  82. package/dist/{chunk-XGFFNERF.js → chunk-MUDUWF74.js} +1 -1
  83. package/dist/{chunk-KS3O6O7E.js → chunk-NAQCWM4U.js} +3 -3
  84. package/dist/{chunk-TQNFDNJA.js → chunk-NKPSJOHJ.js} +6 -6
  85. package/dist/{chunk-DPU6H4JY.js → chunk-NLDEC4Y7.js} +3 -3
  86. package/dist/{chunk-XEXF2OFZ.js → chunk-NWN6GGJL.js} +2 -2
  87. package/dist/{chunk-IGO3AGZK.js → chunk-O655YCOG.js} +4 -4
  88. package/dist/{chunk-5FJDODOA.js → chunk-ODAAK2RZ.js} +3 -3
  89. package/dist/{chunk-AVWECJSN.js → chunk-ORHVVRVL.js} +2 -2
  90. package/dist/{chunk-YB3HMDKE.js → chunk-P4XZX7CL.js} +2 -2
  91. package/dist/{chunk-CNJ7SI5V.js → chunk-PBEW5CJK.js} +4 -4
  92. package/dist/{chunk-CN6JFM62.js → chunk-PEPRUUGM.js} +15 -6
  93. package/dist/{chunk-QN25WBXL.js → chunk-PGOPIIOQ.js} +7 -7
  94. package/dist/{chunk-Q5RNYE2L.js → chunk-PZZKXX6Q.js} +4 -4
  95. package/dist/{chunk-SVKCYUYP.js → chunk-Q6JXE3PD.js} +9 -9
  96. package/dist/{chunk-ZAZUDYSF.js → chunk-QYTOYNV2.js} +5 -5
  97. package/dist/{chunk-3FQX74E4.js → chunk-REQO3WWO.js} +23 -8
  98. package/dist/{chunk-EJR5JXMV.js → chunk-RQOT6QL3.js} +43 -5
  99. package/dist/{chunk-AWGBL4P3.js → chunk-RWXDWOQQ.js} +89 -41
  100. package/dist/{chunk-6ZXCWK27.js → chunk-SL7CIZCL.js} +60 -6
  101. package/dist/{chunk-3EZP5ZPS.js → chunk-TVVJ6OYG.js} +4 -4
  102. package/dist/{chunk-B6JC676X.js → chunk-UC2J5RR4.js} +1 -1
  103. package/dist/{chunk-26W46E46.js → chunk-UETS2WEA.js} +27 -10
  104. package/dist/{chunk-EU2ZOZC3.js → chunk-UXN73YAE.js} +3 -3
  105. package/dist/{chunk-XFQAK35L.js → chunk-VHMZPN3N.js} +1 -1
  106. package/dist/{chunk-45KMS76L.js → chunk-VKZ3RJ5U.js} +1 -1
  107. package/dist/{chunk-T6YLXO6N.js → chunk-VRFFMTIG.js} +4 -4
  108. package/dist/{chunk-DIUTSF6I.js → chunk-WPOXZPEH.js} +4 -4
  109. package/dist/{chunk-GO7YKPT3.js → chunk-X2MTVD4W.js} +1 -1
  110. package/dist/{chunk-5J7OZBJ4.js → chunk-XQKB4LEK.js} +2 -2
  111. package/dist/{chunk-QOIPUYUD.js → chunk-XZKSUJ55.js} +1 -1
  112. package/dist/{chunk-RSZQEEEW.js → chunk-YZHJQG6W.js} +8 -6
  113. package/dist/{chunk-UTAARXYQ.js → chunk-ZK5WYAMI.js} +1 -1
  114. package/dist/{codex-app-cards-switch-W7OLKOMO.js → codex-app-cards-switch-VZ4XIDJO.js} +11 -11
  115. package/dist/{codex-desktop-launch-U6V3AXZF.js → codex-desktop-launch-CX2IE5BI.js} +1 -1
  116. package/dist/{codex-session-launch-EFU46WBL.js → codex-session-launch-WUIM6ZGA.js} +18 -18
  117. package/dist/{config-UC4LMCNX.js → config-OBGYURFX.js} +3 -3
  118. package/dist/{global-upgrade-ABF5O3HU.js → global-upgrade-XZ5L7LDB.js} +10 -10
  119. package/dist/{identity-3ZUZPHN6.js → identity-TGQPFIE4.js} +4 -4
  120. package/dist/{live-capabilities-BXWXJARK.js → live-capabilities-JHESROAP.js} +5 -5
  121. package/dist/{paths-FO76CFRQ.js → paths-EOMNC4QM.js} +7 -3
  122. package/dist/{reapply-3T3DFUAI.js → reapply-J5HHUUBE.js} +27 -26
  123. package/dist/src/index.js +28 -28
  124. package/dist/{upgrade-lock-EZ5JIPJE.js → upgrade-lock-VQORI6G5.js} +4 -4
  125. package/dist/{usage-Y6BL7RUD.js → usage-KX2HN47E.js} +3 -3
  126. package/package.json +1 -1
  127. package/dist/chunk-QBNICXMC.js +0 -615
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.68
4
+
5
+ - fx: `pushary upgrade` switches a `pushary` server you added to `~/.fx/mcp.json` by hand as an HTTP server (`https://pushary.com/api/mcp/mcp`) to the local bridge that setup writes. fx's MCP-v2 engine (`FX_MCP_ENGINE=v2`) keeps that HTTP connection open between calls. Pushary's host closes a connection idle for about six minutes, and fx sends the next call on the closed connection. That call never reached Pushary, and fx reported "the server went away. The tool may have run." The bridge opens a new connection when it needs one, so the first call after an idle stretch arrives. Your other fx servers, your permission rules and your question settings stay as they are. Restart fx, or run `/mcp reload`, after the upgrade.
6
+ - The daily update makes the same switch. Neither switches when no Pushary key is saved on the machine, or when the bridge is not installed globally, because fx would then lose Pushary altogether. `pushary upgrade` says which, and to run `npx pushary@latest setup --agents fx`.
7
+ - Setup, upgrade and `pushary doctor` name any other fx server that reaches Pushary over HTTP, under a name other than `pushary`, and say to remove it, so fx does not see Pushary's tools twice.
8
+
9
+ ## 1.9.67
10
+
11
+ - 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.
12
+ - `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`.
13
+ - 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.
14
+ - `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.
15
+ - 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`).
16
+ - `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.
17
+
3
18
  ## 1.9.66
4
19
 
5
20
  - 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.
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
 
@@ -17,23 +17,23 @@ import {
17
17
  waitForQuestion,
18
18
  waitsForThePhone,
19
19
  withdrawQuestion
20
- } from "./chunk-ZAZUDYSF.js";
20
+ } from "./chunk-QYTOYNV2.js";
21
21
  import "./chunk-POFBE6ZY.js";
22
- import "./chunk-Q5RNYE2L.js";
23
- import "./chunk-QR2QWGQI.js";
24
- import "./chunk-GECU7V44.js";
25
- import "./chunk-IA5VWIHV.js";
22
+ import "./chunk-PZZKXX6Q.js";
23
+ import "./chunk-BSMHSN3Y.js";
24
+ import "./chunk-MHC34X5A.js";
25
+ import "./chunk-2VYQG2HG.js";
26
26
  import "./chunk-PPY5N2E6.js";
27
27
  import "./chunk-KZERVKTD.js";
28
- import "./chunk-GDLT32I4.js";
29
- import "./chunk-KS3O6O7E.js";
30
- import "./chunk-A47UKPC7.js";
31
- import "./chunk-GO7YKPT3.js";
28
+ import "./chunk-LQAAOXYJ.js";
29
+ import "./chunk-NAQCWM4U.js";
30
+ import "./chunk-32OSSYGZ.js";
31
+ import "./chunk-X2MTVD4W.js";
32
32
  import "./chunk-QTOLNRET.js";
33
33
  import {
34
34
  DECISION_STOP_REASON,
35
35
  UNVERIFIABLE_APPROVAL_REASON
36
- } from "./chunk-EJR5JXMV.js";
36
+ } from "./chunk-RQOT6QL3.js";
37
37
  import "./chunk-MLKGABMK.js";
38
38
  export {
39
39
  ABANDONED_WAIT,
@@ -1,39 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-6RJZSBPD.js";
4
+ } from "../chunk-LGCVAE52.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-QN25WBXL.js";
8
- import "../chunk-SVKCYUYP.js";
9
- import "../chunk-DBUHSUL7.js";
10
- import "../chunk-3EZP5ZPS.js";
11
- import "../chunk-57NTMVMI.js";
12
- import "../chunk-YQDCTID4.js";
13
- import "../chunk-UTAARXYQ.js";
14
- import "../chunk-IQ3GKPFM.js";
7
+ } from "../chunk-PGOPIIOQ.js";
8
+ import "../chunk-Q6JXE3PD.js";
9
+ import "../chunk-4TIN3T2A.js";
10
+ import "../chunk-TVVJ6OYG.js";
11
+ import "../chunk-EUU5PDUI.js";
12
+ import "../chunk-73DHP3JX.js";
13
+ import "../chunk-ZK5WYAMI.js";
14
+ import "../chunk-77QP22FL.js";
15
15
  import "../chunk-NMUI3ZWG.js";
16
- import "../chunk-XEXF2OFZ.js";
17
- import "../chunk-XGFFNERF.js";
16
+ import "../chunk-NWN6GGJL.js";
17
+ import "../chunk-MUDUWF74.js";
18
18
  import "../chunk-XHKBHWLX.js";
19
- import "../chunk-CNJ7SI5V.js";
20
- import "../chunk-2BL6KWN7.js";
21
- import "../chunk-XXIJBYNW.js";
22
- import "../chunk-ZAZUDYSF.js";
19
+ import "../chunk-PBEW5CJK.js";
20
+ import "../chunk-6IFEYELN.js";
21
+ import "../chunk-GMHQYX3D.js";
22
+ import "../chunk-QYTOYNV2.js";
23
23
  import "../chunk-POFBE6ZY.js";
24
- import "../chunk-Q5RNYE2L.js";
25
- import "../chunk-QR2QWGQI.js";
26
- import "../chunk-GECU7V44.js";
27
- import "../chunk-IA5VWIHV.js";
24
+ import "../chunk-PZZKXX6Q.js";
25
+ import "../chunk-BSMHSN3Y.js";
26
+ import "../chunk-MHC34X5A.js";
27
+ import "../chunk-2VYQG2HG.js";
28
28
  import "../chunk-PPY5N2E6.js";
29
29
  import "../chunk-KZERVKTD.js";
30
- import "../chunk-XIJTXRWB.js";
31
- import "../chunk-GDLT32I4.js";
32
- import "../chunk-KS3O6O7E.js";
33
- import "../chunk-A47UKPC7.js";
34
- import "../chunk-GO7YKPT3.js";
30
+ import "../chunk-METUT7V4.js";
31
+ import "../chunk-LQAAOXYJ.js";
32
+ import "../chunk-NAQCWM4U.js";
33
+ import "../chunk-32OSSYGZ.js";
34
+ import "../chunk-X2MTVD4W.js";
35
35
  import "../chunk-QTOLNRET.js";
36
- import "../chunk-EJR5JXMV.js";
36
+ import "../chunk-RQOT6QL3.js";
37
37
  import "../chunk-MLKGABMK.js";
38
38
 
39
39
  // bin/pushary-bell-hook.ts
@@ -5,40 +5,40 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-6RJZSBPD.js";
8
+ } from "../chunk-LGCVAE52.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-G6VJZ3RB.js";
14
+ } from "../chunk-77L2TNJW.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-IQ3GKPFM.js";
19
+ } from "../chunk-77QP22FL.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-NMUI3ZWG.js";
23
- import "../chunk-CNJ7SI5V.js";
23
+ import "../chunk-PBEW5CJK.js";
24
24
  import "../chunk-PPY5N2E6.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-XIJTXRWB.js";
28
+ import "../chunk-METUT7V4.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-GDLT32I4.js";
31
+ } from "../chunk-LQAAOXYJ.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
- } from "../chunk-KS3O6O7E.js";
36
- import "../chunk-A47UKPC7.js";
37
- import "../chunk-GO7YKPT3.js";
35
+ } from "../chunk-NAQCWM4U.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-EJR5JXMV.js";
41
+ } from "../chunk-RQOT6QL3.js";
42
42
  import "../chunk-MLKGABMK.js";
43
43
 
44
44
  // bin/pushary-bell.ts
@@ -2,43 +2,43 @@
2
2
  import {
3
3
  WRAPPER_ACTIVE_ENV,
4
4
  findClaudeBinary
5
- } from "../chunk-5J7OZBJ4.js";
5
+ } from "../chunk-XQKB4LEK.js";
6
6
  import {
7
7
  SESSION_IDLE_TIMEOUT_MS,
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-3ELJIG2R.js";
12
- import "../chunk-RJ6JEHCP.js";
11
+ } from "../chunk-MCNHNIRC.js";
12
+ import "../chunk-JAKWPQ2L.js";
13
13
  import {
14
14
  announceSubscriptionRequired,
15
15
  isDeferAnswer
16
- } from "../chunk-ZJV7SFIJ.js";
16
+ } from "../chunk-2HMKZYF5.js";
17
17
  import {
18
18
  claudeTranscriptPath,
19
19
  loadSessionKey,
20
20
  registerTranscript,
21
21
  registeredTranscriptEnabled
22
- } from "../chunk-SVKCYUYP.js";
23
- import "../chunk-DBUHSUL7.js";
22
+ } from "../chunk-Q6JXE3PD.js";
23
+ import "../chunk-4TIN3T2A.js";
24
24
  import {
25
25
  ensureDaemonRunning
26
- } from "../chunk-57NTMVMI.js";
27
- import "../chunk-YQDCTID4.js";
28
- import "../chunk-UTAARXYQ.js";
29
- import "../chunk-IQ3GKPFM.js";
26
+ } from "../chunk-EUU5PDUI.js";
27
+ import "../chunk-73DHP3JX.js";
28
+ import "../chunk-ZK5WYAMI.js";
29
+ import "../chunk-77QP22FL.js";
30
30
  import "../chunk-NMUI3ZWG.js";
31
31
  import {
32
32
  encryptRecord
33
- } from "../chunk-XEXF2OFZ.js";
33
+ } from "../chunk-NWN6GGJL.js";
34
34
  import {
35
35
  transcriptsEnabled
36
- } from "../chunk-XGFFNERF.js";
36
+ } from "../chunk-MUDUWF74.js";
37
37
  import {
38
38
  needsShell,
39
39
  spawnClaude
40
40
  } from "../chunk-XHKBHWLX.js";
41
- import "../chunk-CNJ7SI5V.js";
41
+ import "../chunk-PBEW5CJK.js";
42
42
  import {
43
43
  DEFAULT_SESSION,
44
44
  UNNAMED_ACTION,
@@ -55,10 +55,10 @@ import {
55
55
  reportEvent,
56
56
  savePendingCommand,
57
57
  scopePathFor
58
- } from "../chunk-2BL6KWN7.js";
58
+ } from "../chunk-6IFEYELN.js";
59
59
  import {
60
60
  repoKeyFor
61
- } from "../chunk-XXIJBYNW.js";
61
+ } from "../chunk-GMHQYX3D.js";
62
62
  import {
63
63
  askUser,
64
64
  cancelQuestion,
@@ -70,30 +70,30 @@ import {
70
70
  waitForAnswer,
71
71
  waitsForThePhone,
72
72
  withdrawQuestion
73
- } from "../chunk-ZAZUDYSF.js";
73
+ } from "../chunk-QYTOYNV2.js";
74
74
  import "../chunk-POFBE6ZY.js";
75
75
  import {
76
76
  SubscriptionRequiredError
77
- } from "../chunk-Q5RNYE2L.js";
78
- import "../chunk-QR2QWGQI.js";
79
- import "../chunk-GECU7V44.js";
77
+ } from "../chunk-PZZKXX6Q.js";
78
+ import "../chunk-BSMHSN3Y.js";
79
+ import "../chunk-MHC34X5A.js";
80
80
  import {
81
81
  getMachineId
82
- } from "../chunk-IA5VWIHV.js";
82
+ } from "../chunk-2VYQG2HG.js";
83
83
  import "../chunk-PPY5N2E6.js";
84
84
  import "../chunk-KZERVKTD.js";
85
- import "../chunk-XIJTXRWB.js";
85
+ import "../chunk-METUT7V4.js";
86
86
  import {
87
87
  claudeConfigDir
88
- } from "../chunk-GDLT32I4.js";
89
- import "../chunk-KS3O6O7E.js";
88
+ } from "../chunk-LQAAOXYJ.js";
89
+ import "../chunk-NAQCWM4U.js";
90
90
  import {
91
91
  getApiKey,
92
92
  getBaseUrl
93
- } from "../chunk-A47UKPC7.js";
93
+ } from "../chunk-32OSSYGZ.js";
94
94
  import {
95
95
  NPX_LATEST_COMMAND
96
- } from "../chunk-GO7YKPT3.js";
96
+ } from "../chunk-X2MTVD4W.js";
97
97
  import "../chunk-QTOLNRET.js";
98
98
  import {
99
99
  DECISION_STOP_REASON,
@@ -106,7 +106,7 @@ import {
106
106
  refusesWhenUnanswered,
107
107
  resolveGate,
108
108
  timeoutActionWithoutLocalPrompt
109
- } from "../chunk-EJR5JXMV.js";
109
+ } from "../chunk-RQOT6QL3.js";
110
110
  import "../chunk-MLKGABMK.js";
111
111
 
112
112
  // src/wrapper/localPassthrough.ts
@@ -15,51 +15,53 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-DPU6H4JY.js";
18
+ } from "../chunk-NLDEC4Y7.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-AVWECJSN.js";
24
+ import "../chunk-ORHVVRVL.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-32ZT2ATY.js";
32
- import "../chunk-26W46E46.js";
31
+ } from "../chunk-EOWHEZHD.js";
33
32
  import {
34
33
  isCursorPluginLeftover,
35
34
  releaseSoleGate,
36
35
  withoutPusharyCursorHooks
37
- } from "../chunk-IGO3AGZK.js";
36
+ } from "../chunk-O655YCOG.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-QBNICXMC.js";
41
+ } from "../chunk-LF2NSOAQ.js";
47
42
  import {
43
+ configFileHoldsMacAppKey,
48
44
  macAppKeepsMcpEntry,
49
45
  mcpServerBearer,
50
46
  pusharyKey,
51
47
  readMacAppAgentKey,
52
48
  setupReceiptKey
53
- } from "../chunk-CN6JFM62.js";
49
+ } from "../chunk-PEPRUUGM.js";
50
+ import "../chunk-7V63A4AI.js";
51
+ import {
52
+ HERMES_CONFIG_FILE,
53
+ defaultHermesHome,
54
+ hermesReceiptPaths,
55
+ removeHermesWiring
56
+ } from "../chunk-D6W7QDQE.js";
54
57
  import "../chunk-QCGNGEGE.js";
55
- import "../chunk-YB3HMDKE.js";
56
58
  import {
57
59
  planClineRemoval,
58
60
  planFxRemoval,
59
61
  removeClineServer
60
- } from "../chunk-6ZXCWK27.js";
61
- import "../chunk-5FJDODOA.js";
62
- import "../chunk-HUGVJBDN.js";
62
+ } from "../chunk-SL7CIZCL.js";
63
+ import "../chunk-ODAAK2RZ.js";
64
+ import "../chunk-53RH3ZIK.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-7LK3Y6ET.js";
78
+ } from "../chunk-CB4U6WRP.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-G6VJZ3RB.js";
84
- import "../chunk-RJ6JEHCP.js";
85
+ } from "../chunk-77L2TNJW.js";
86
+ import "../chunk-JAKWPQ2L.js";
85
87
  import {
86
88
  compatibleConfigFile,
87
89
  compatibleDocuments,
@@ -93,10 +95,10 @@ import {
93
95
  removeCompatibleHooks,
94
96
  removeCompatibleMcpServer,
95
97
  serializeConfigDocument
96
- } from "../chunk-3EZP5ZPS.js";
98
+ } from "../chunk-TVVJ6OYG.js";
97
99
  import {
98
100
  disableDaemonService
99
- } from "../chunk-57NTMVMI.js";
101
+ } from "../chunk-EUU5PDUI.js";
100
102
  import {
101
103
  hookOwnerOf,
102
104
  isHookTakeoverReceipt,
@@ -105,9 +107,9 @@ import {
105
107
  resolveBridgeStub,
106
108
  restoreHookTakeover,
107
109
  restoreMcpServer
108
- } from "../chunk-YQDCTID4.js";
109
- import "../chunk-UTAARXYQ.js";
110
- import "../chunk-IQ3GKPFM.js";
110
+ } from "../chunk-73DHP3JX.js";
111
+ import "../chunk-ZK5WYAMI.js";
112
+ import "../chunk-77QP22FL.js";
111
113
  import {
112
114
  parseFlags
113
115
  } from "../chunk-NMUI3ZWG.js";
@@ -117,21 +119,21 @@ import {
117
119
  isDisabledExport,
118
120
  removeClaudeAlias,
119
121
  shellProfileCandidates
120
- } from "../chunk-CNJ7SI5V.js";
122
+ } from "../chunk-PBEW5CJK.js";
121
123
  import "../chunk-E46NE7FB.js";
122
- import "../chunk-2BL6KWN7.js";
123
- import "../chunk-XXIJBYNW.js";
124
- import "../chunk-ZAZUDYSF.js";
124
+ import "../chunk-6IFEYELN.js";
125
+ import "../chunk-GMHQYX3D.js";
126
+ import "../chunk-QYTOYNV2.js";
125
127
  import "../chunk-POFBE6ZY.js";
126
- import "../chunk-Q5RNYE2L.js";
127
- import "../chunk-QR2QWGQI.js";
128
- import "../chunk-GECU7V44.js";
129
- import "../chunk-IA5VWIHV.js";
128
+ import "../chunk-PZZKXX6Q.js";
129
+ import "../chunk-BSMHSN3Y.js";
130
+ import "../chunk-MHC34X5A.js";
131
+ import "../chunk-2VYQG2HG.js";
130
132
  import "../chunk-PPY5N2E6.js";
131
133
  import {
132
134
  EXIT
133
135
  } from "../chunk-KZERVKTD.js";
134
- import "../chunk-XIJTXRWB.js";
136
+ import "../chunk-METUT7V4.js";
135
137
  import {
136
138
  claudeConfigDir,
137
139
  claudeJson,
@@ -158,10 +160,10 @@ import {
158
160
  fxSettings,
159
161
  geminiMd,
160
162
  geminiSettings,
161
- hermesConfig,
162
- hermesConfigReceipt,
163
+ hermesAppWiringRecord,
163
164
  hookTakeoverReceipt,
164
165
  isClaudeMcpSnapshot,
166
+ pusharyConfigFile,
165
167
  pusharyDir,
166
168
  readCodexMcpAuth,
167
169
  removeClaudeMcpServers,
@@ -174,20 +176,20 @@ import {
174
176
  restoreCodexHookTrust,
175
177
  vscodePluginDir,
176
178
  vscodePluginMcp
177
- } from "../chunk-GDLT32I4.js";
179
+ } from "../chunk-LQAAOXYJ.js";
178
180
  import {
179
181
  cleanNpmEnv,
180
182
  globalPackageState,
181
183
  npmIsOnPath,
182
184
  readGlobalFolder,
183
185
  readGlobalPrefix
184
- } from "../chunk-KS3O6O7E.js";
186
+ } from "../chunk-NAQCWM4U.js";
185
187
  import {
186
188
  getBaseUrl
187
- } from "../chunk-A47UKPC7.js";
189
+ } from "../chunk-32OSSYGZ.js";
188
190
  import {
189
191
  NPX_LATEST_COMMAND
190
- } from "../chunk-GO7YKPT3.js";
192
+ } from "../chunk-X2MTVD4W.js";
191
193
  import {
192
194
  CLI_PACKAGE_NAMES,
193
195
  globalPackageFolder,
@@ -201,12 +203,12 @@ import {
201
203
  SUPPORT_EMAIL,
202
204
  isValidApiKey,
203
205
  redactSecrets
204
- } from "../chunk-EJR5JXMV.js";
206
+ } from "../chunk-RQOT6QL3.js";
205
207
  import "../chunk-MLKGABMK.js";
206
208
 
207
209
  // bin/pushary-clean.ts
208
210
  import { existsSync as existsSync5, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
209
- import { dirname as dirname2, join as join5 } from "path";
211
+ import { basename, dirname as dirname2, join as join5 } from "path";
210
212
  import { homedir as homedir4, tmpdir } from "os";
211
213
  import { confirm } from "@inquirer/prompts";
212
214
  import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
@@ -531,8 +533,6 @@ var CLAUDE_SETTINGS = claudeSettings();
531
533
  var CLAUDE_SETTINGS_LOCAL = claudeSettingsLocal();
532
534
  var CLAUDE_JSON = claudeJson();
533
535
  var CLAUDE_MCP_RECEIPT = claudeMcpReceipt();
534
- var HERMES_CONFIG_RECEIPT = hermesConfigReceipt();
535
- var HERMES_CONFIG_FILE = hermesConfig();
536
536
  var SKILL_DIR = claudeSkillDir();
537
537
  var CURSOR_MCP = cursorUserMcp();
538
538
  var CURSOR_PLUGIN_DIR = cursorPluginDir();
@@ -571,6 +571,33 @@ var readJson = (path) => {
571
571
  };
572
572
  var dryRun = false;
573
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
+ };
574
601
  var wouldNote = (action, path) => {
575
602
  console.log(` ${dim("would")} ${action} ${path}`);
576
603
  };
@@ -1149,37 +1176,8 @@ var main = async () => {
1149
1176
  removeFxConfiguration();
1150
1177
  removeFxInstructions();
1151
1178
  removeClineConfiguration();
1152
- const hermesPython = resolveHermesPython();
1153
- if (hermesPython) {
1154
- const configRun = runHermesConfigScript(hermesPython, dryRun ? "clean-preview" : "clean", HERMES_CONFIG_RECEIPT);
1155
- if (configRun === "failed") {
1156
- incompleteClean = true;
1157
- console.log(` ${skip} Hermes config ${dim("(could not update config.yaml)")}`);
1158
- } else {
1159
- if (configRun === "changed") {
1160
- if (dryRun) wouldNote("rewrite", HERMES_CONFIG_FILE);
1161
- console.log(` ${check} Hermes config ${dim(did("removed"))} ${dim("(Pushary settings)")}`);
1162
- } else {
1163
- console.log(` ${skip} Hermes config ${dim("(no Pushary settings)")}`);
1164
- }
1165
- if (readHermesStatus(hermesPython)?.pluginInstalled === false) {
1166
- console.log(` ${skip} Hermes plugin ${dim("(not installed)")}`);
1167
- } else {
1168
- try {
1169
- guards.execFile(hermesPython, ["-m", "pip", "uninstall", "-y", HERMES_PIP_PACKAGE], { stdio: "pipe", timeout: 6e4 }, `pip uninstall ${HERMES_PIP_PACKAGE}`);
1170
- console.log(` ${check} Hermes plugin ${dim(did("uninstalled"))}`);
1171
- } catch {
1172
- incompleteClean = true;
1173
- console.log(` ${skip} Hermes plugin ${dim("(could not uninstall; setup receipt kept for retry)")}`);
1174
- }
1175
- }
1176
- }
1177
- } else if (existsSync5(HERMES_CONFIG_RECEIPT)) {
1178
- incompleteClean = true;
1179
- console.log(` ${skip} Hermes ${dim("(runtime not found; setup receipt kept for retry)")}`);
1180
- } else {
1181
- console.log(` ${skip} Hermes ${dim("(not found)")}`);
1182
- }
1179
+ const hermesRemoval = removeHermesWiring({ dryRun, receipts: hermesReceiptPaths(), keepMacAppWiring: keepShared, macAppWiringRecord: hermesAppWiringRecord() });
1180
+ if (reportHermesRemoval(hermesRemoval)) incompleteClean = true;
1183
1181
  for (const shellFile of SHELL_FILES) {
1184
1182
  try {
1185
1183
  const content = readFileSync4(shellFile, "utf-8");
@@ -1226,10 +1224,11 @@ var main = async () => {
1226
1224
  if (existsSync5(PUSHARY_DIR)) {
1227
1225
  let removed = 0;
1228
1226
  const kept = [];
1227
+ const macAppsHermesKey = hermesRemoval.kind === "kept_for_mac_app" && configFileHoldsMacAppKey(pusharyConfigFile()) ? basename(pusharyConfigFile()) : null;
1229
1228
  for (const entry of readdirSync4(PUSHARY_DIR)) {
1230
1229
  const appCardsFolder = entry === CODEX_APP_CARDS_DIRECTORY ? codexAppCardsFolderInTheLastSweep(appCardsCleanUp) : "swept_with_the_rest";
1231
1230
  if (appCardsFolder === "left_to_the_switch") continue;
1232
- if (keepShared && isAppOwned(entry) || entry === "setup" && (keepShared || incompleteClean) || appCardsFolder === "kept") {
1231
+ if (keepShared && isAppOwned(entry) || entry === "setup" && (keepShared || incompleteClean) || entry === macAppsHermesKey || appCardsFolder === "kept") {
1233
1232
  kept.push(entry);
1234
1233
  continue;
1235
1234
  }