@pushary/agent-hooks 1.9.63 → 1.9.65

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 +20 -1
  2. package/README.md +1 -1
  3. package/dist/{api-UHUUAONF.js → api-32B3XLJR.js} +10 -11
  4. package/dist/bin/pushary-bell-hook.js +27 -30
  5. package/dist/bin/pushary-bell.js +12 -13
  6. package/dist/bin/pushary-claude.js +28 -31
  7. package/dist/bin/pushary-clean.js +68 -43
  8. package/dist/bin/pushary-codex-bridge.js +22 -24
  9. package/dist/bin/pushary-codex-hook.js +34 -37
  10. package/dist/bin/pushary-codex-session.js +8 -8
  11. package/dist/bin/pushary-codex.js +13 -15
  12. package/dist/bin/pushary-connect.js +26 -29
  13. package/dist/bin/pushary-cowork.js +5 -5
  14. package/dist/bin/pushary-daemon.js +39 -42
  15. package/dist/bin/pushary-disconnect.js +62 -43
  16. package/dist/bin/pushary-doctor.js +109 -44
  17. package/dist/bin/pushary-elicitation-hook.js +27 -30
  18. package/dist/bin/pushary-gemini-bridge.js +16 -18
  19. package/dist/bin/pushary-gemini-hook.js +29 -32
  20. package/dist/bin/pushary-hook.js +31 -34
  21. package/dist/bin/pushary-login.js +19 -20
  22. package/dist/bin/pushary-logout.js +26 -29
  23. package/dist/bin/pushary-mcp.js +11 -12
  24. package/dist/bin/pushary-mode.js +14 -15
  25. package/dist/bin/pushary-notification-hook.js +26 -29
  26. package/dist/bin/pushary-opencode-hook.js +28 -31
  27. package/dist/bin/pushary-permission-denied-hook.js +31 -34
  28. package/dist/bin/pushary-permission-hook.js +30 -33
  29. package/dist/bin/pushary-post-hook.js +26 -29
  30. package/dist/bin/pushary-prompt-hook.js +26 -29
  31. package/dist/bin/pushary-session-end-hook.js +28 -31
  32. package/dist/bin/pushary-session-start-hook.js +35 -38
  33. package/dist/bin/pushary-setup.js +129 -74
  34. package/dist/bin/pushary-stats.js +5 -5
  35. package/dist/bin/pushary-status.js +31 -34
  36. package/dist/bin/pushary-stop-hook.js +26 -29
  37. package/dist/bin/pushary-stopfailure-hook.js +26 -29
  38. package/dist/bin/pushary-suggestions.js +14 -15
  39. package/dist/bin/pushary-transcript-register.js +18 -21
  40. package/dist/bin/pushary-transcripts.js +17 -18
  41. package/dist/bin/pushary-upgrade.js +40 -44
  42. package/dist/bin/pushary-wait.js +14 -15
  43. package/dist/bin/pushary.js +7 -8
  44. package/dist/{chunk-V5W3CK7F.js → chunk-2VADJ6JH.js} +2 -2
  45. package/dist/{chunk-3GVV7XVT.js → chunk-2Z7I7DHT.js} +1 -1
  46. package/dist/{chunk-7GRQGXF4.js → chunk-3KXBRSL3.js} +1 -1
  47. package/dist/{chunk-P6RF4RQN.js → chunk-3LF7T3NW.js} +6 -6
  48. package/dist/{chunk-PXAOEFJZ.js → chunk-3UNAPXED.js} +14 -16
  49. package/dist/{chunk-TMGJAFSD.js → chunk-4LUWNBGD.js} +3 -3
  50. package/dist/{chunk-CLABCSZC.js → chunk-6CZX6YOE.js} +5 -5
  51. package/dist/{chunk-VFJSVPNL.js → chunk-7ILQX47W.js} +3 -3
  52. package/dist/{chunk-4WFAP6QN.js → chunk-ADXHPGBZ.js} +9 -11
  53. package/dist/{chunk-75ODMNOM.js → chunk-AN7C3CHH.js} +1 -1
  54. package/dist/{chunk-BQFL2ECS.js → chunk-ANP3DIST.js} +3 -57
  55. package/dist/chunk-ATPJGHUP.js +1201 -0
  56. package/dist/{chunk-6Z2VR3BA.js → chunk-BAGBCSXA.js} +1 -1
  57. package/dist/{chunk-WUOOZE5S.js → chunk-BEQ3MEE3.js} +2 -2
  58. package/dist/{chunk-ELAK46NR.js → chunk-BKCI53W6.js} +4 -4
  59. package/dist/{chunk-HAIXS4OX.js → chunk-CSKABVSH.js} +3 -3
  60. package/dist/{chunk-GNUARBRZ.js → chunk-CU2PXLZ6.js} +4 -4
  61. package/dist/{chunk-FVERRWDP.js → chunk-CZ65D6Q5.js} +2 -2
  62. package/dist/{chunk-PJ34FOIV.js → chunk-DM24VZOI.js} +5 -5
  63. package/dist/{chunk-TBKHQWIH.js → chunk-DTVHZDYM.js} +5 -5
  64. package/dist/{chunk-PIQ4HHA2.js → chunk-DXMUJTYF.js} +4 -6
  65. package/dist/{chunk-IOH2T3CB.js → chunk-ED2SWTPC.js} +4 -4
  66. package/dist/{chunk-FAF5AW3P.js → chunk-EEVE7H5Z.js} +4 -4
  67. package/dist/{chunk-EHHTQURL.js → chunk-F56GTJFG.js} +5 -5
  68. package/dist/{chunk-GZS72NCF.js → chunk-FFSIYBBU.js} +4 -4
  69. package/dist/{chunk-L5CDGXPO.js → chunk-FWS2KLV2.js} +4 -4
  70. package/dist/{chunk-T3GHXR6N.js → chunk-GA257T2E.js} +5 -5
  71. package/dist/{chunk-SKUSGWFK.js → chunk-GTBWWCCM.js} +6 -6
  72. package/dist/{chunk-YK6GR4GU.js → chunk-HDGB6SQ4.js} +2 -2
  73. package/dist/{chunk-OY6Z4IKB.js → chunk-HIYLAC3C.js} +3 -3
  74. package/dist/{chunk-RAJ3QEIL.js → chunk-HVOQUPSO.js} +1 -1
  75. package/dist/{chunk-KUCL7ETL.js → chunk-I2UBF2SS.js} +1 -1
  76. package/dist/{chunk-VHZAJ6IB.js → chunk-ICFHMJTW.js} +3 -3
  77. package/dist/{chunk-HZ72EMJE.js → chunk-ITYKN2K3.js} +2 -2
  78. package/dist/{chunk-XBTWG2VL.js → chunk-IZVEBBDH.js} +5 -5
  79. package/dist/{chunk-VN7XH6TU.js → chunk-JCWHOB36.js} +2 -2
  80. package/dist/{chunk-5JK3DQGZ.js → chunk-JFKMPLNF.js} +2 -2
  81. package/dist/{chunk-FEAGK25K.js → chunk-LMC5UPL7.js} +1 -1
  82. package/dist/{chunk-7NCLUA65.js → chunk-MNKIR2ZB.js} +11 -0
  83. package/dist/{chunk-SARPHHTT.js → chunk-NOH3EJFH.js} +1 -1
  84. package/dist/{chunk-OP5IBEV7.js → chunk-NUEPJ5W6.js} +2 -2
  85. package/dist/{chunk-OU3BYBJ3.js → chunk-OA6EADFT.js} +3 -3
  86. package/dist/{chunk-LGZ545TA.js → chunk-ONBL2GCU.js} +12 -6
  87. package/dist/{chunk-LTT54NOU.js → chunk-P5HZEGT7.js} +65 -8
  88. package/dist/{chunk-YMZOM6BD.js → chunk-PP7FC3Y7.js} +10 -10
  89. package/dist/{chunk-T6XQNOZV.js → chunk-Q2BD4IBX.js} +12 -12
  90. package/dist/{chunk-DMNLFWGY.js → chunk-QNZ6G3LY.js} +210 -151
  91. package/dist/{chunk-BCVCUDFI.js → chunk-QSW3HAKI.js} +1 -1
  92. package/dist/{chunk-HOIO66DU.js → chunk-R4FL5JHK.js} +4 -4
  93. package/dist/{chunk-VUFHYMSP.js → chunk-RABLE5R6.js} +1 -1
  94. package/dist/{chunk-2MZ6ROWZ.js → chunk-RRHHWYPX.js} +6 -6
  95. package/dist/{chunk-5LOP4AVD.js → chunk-SCMEVDAR.js} +128 -26
  96. package/dist/{chunk-XE5N352V.js → chunk-SROWUG5W.js} +1 -1
  97. package/dist/{chunk-QW3FRUFB.js → chunk-SZBMTOUZ.js} +1 -1
  98. package/dist/{chunk-V7N5NOZV.js → chunk-TJUJAK5L.js} +1 -1
  99. package/dist/{chunk-OJEIS5L2.js → chunk-TK4JU2F7.js} +1 -1
  100. package/dist/{chunk-VDBXSUXP.js → chunk-U2P2LQ5B.js} +7 -7
  101. package/dist/{chunk-AB3VAQ25.js → chunk-UHS5MMAI.js} +3 -3
  102. package/dist/{chunk-OW6VBXXI.js → chunk-UM2X7HL6.js} +63 -36
  103. package/dist/{chunk-KL76XWZ7.js → chunk-UMTMFDL2.js} +1 -1
  104. package/dist/{chunk-MRCVYYPW.js → chunk-VHKK3US3.js} +3 -3
  105. package/dist/{chunk-S2Z6VWHH.js → chunk-W5L2ZLHE.js} +6 -7
  106. package/dist/{chunk-EQ26IKZM.js → chunk-WOHP7EL6.js} +7 -6
  107. package/dist/{chunk-3QLFB2EY.js → chunk-WY6YAMZW.js} +37 -214
  108. package/dist/{chunk-XO3KAH7K.js → chunk-XJIIU36L.js} +1 -1
  109. package/dist/{chunk-QC2W42DE.js → chunk-XZCJC3QO.js} +12 -12
  110. package/dist/{chunk-BUQU3OPX.js → chunk-Y64JGYTB.js} +1 -1
  111. package/dist/{chunk-KLZZI5TU.js → chunk-Z3M627TQ.js} +1 -1
  112. package/dist/{codex-app-cards-switch-LXMAIOFB.js → codex-app-cards-switch-HK4RMOBI.js} +11 -12
  113. package/dist/{codex-desktop-launch-VE5RLFUU.js → codex-desktop-launch-OCO6N7SA.js} +1 -1
  114. package/dist/{codex-session-launch-XZZWXCPK.js → codex-session-launch-ETZQTVFS.js} +19 -21
  115. package/dist/{config-PPX25AV5.js → config-YY54G3CC.js} +3 -3
  116. package/dist/{global-upgrade-NRMHNLNU.js → global-upgrade-5DN5G3ZQ.js} +10 -12
  117. package/dist/{identity-ZFQR7JNW.js → identity-EGL6HAWG.js} +4 -5
  118. package/dist/{live-capabilities-SJRYRKNB.js → live-capabilities-WU3FYJJG.js} +5 -7
  119. package/dist/{paths-7VTVOQXJ.js → paths-ZG6KDM6Y.js} +7 -3
  120. package/dist/reapply-AQLNCCTE.js +63 -0
  121. package/dist/src/index.js +20 -23
  122. package/dist/{upgrade-lock-VAYJZVTB.js → upgrade-lock-BIRXIKHJ.js} +4 -5
  123. package/dist/{usage-C4DIYUR6.js → usage-43C2DHDU.js} +3 -3
  124. package/package.json +1 -1
  125. package/dist/chunk-6ICPEJY5.js +0 -20
  126. package/dist/chunk-MK4USZYQ.js +0 -615
  127. package/dist/chunk-QENTGE75.js +0 -86
  128. package/dist/chunk-VC3HFFMQ.js +0 -41
  129. package/dist/reapply-WOANOIRZ.js +0 -64
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.65
4
+
5
+ - 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.
6
+ - `pushary upgrade` and the daily update add the same rules to an OpenCode Pushary already set up, again only where you have set nothing, and list them as approval rules. They create no `opencode.json` and leave one they cannot read untouched.
7
+ - Setup and `pushary doctor` say which of the three OpenCode would still run without asking, and whether that is because no rule names it or because a rule of yours allows it. Doctor reports this as a warning, so it does not fail `pushary doctor`.
8
+ - `pushary clean` and `pushary disconnect opencode` leave these rules in place, because a rule may be one you set yourself. OpenCode then keeps asking in its own prompt.
9
+ - Pushary for Mac does not add these rules yet, and setup and upgrade leave an OpenCode the app set up to the app. On such a Mac, add `"bash": "ask"`, `"edit": "ask"` and `"webfetch": "ask"` under `permission` in `opencode.json` yourself.
10
+
11
+ ## 1.9.64
12
+
13
+ - Setup can connect Cline. Pick Cline, or run `npx pushary@latest setup --agents cline`. Setup adds the Pushary server, with your key, to `~/.cline/data/settings/cline_mcp_settings.json`, the file Cline 4 reads for both the VS Code extension and the Cline CLI. It honours `CLINE_DIR`, `CLINE_DATA_DIR` and `CLINE_MCP_SETTINGS_PATH` as Cline does, keeps every other server in the file, and waits for Cline's own lock on that file so it never writes over a change Cline is making. A file Cline cannot read either is left untouched.
14
+ - Setup also writes `~/.cline/rules/pushary.md`, a global rule that tells Cline to ask through Pushary when you may be away, because Cline's own question tool waits in VS Code, and to tell you when a task of several steps finishes.
15
+ - Cline's own approval prompts stay in VS Code; Pushary cannot answer them. Setup says to reload VS Code, and that ticking Use MCP servers in Cline's Auto-approve menu lets Pushary calls run without a click, for every MCP server Cline has, not only Pushary.
16
+ - Running setup again keeps what you set on the Pushary server in Cline, such as its timeout, auto-approve list and extra headers, and switches it back on. A pushary server that reaches Pushary through a local command such as `mcp-remote` is replaced with the direct connection, and the command's own settings go with it. Setup leaves a server someone else named pushary untouched and says so.
17
+ - `pushary upgrade` and the daily update replace only the key in Cline's settings after it changes, and refresh the rule. A server you switched off stays off. An entry that signs in through Cline, reads the key from an environment variable, or runs a local command such as `mcp-remote` is left as it is; setup replaces the last kind. On a computer without Cline they create nothing.
18
+ - `pushary doctor` checks Cline's entry, says when its key is not the one hooks use, when the server is switched off, and when another server already has the name pushary. A key kept in a variable is reported as one doctor cannot check, not as a stale key.
19
+ - `pushary disconnect cline` and `pushary clean` remove the Pushary server and the rule, and leave a server someone else named pushary. Like setup, they write the settings file readable only by you; Cline's own saves to that file do not keep it that way. If Cline holds the file locked, the file cannot be written, or it cannot be read while it may still hold Pushary, clean finishes its other steps and reports Cline as left behind, and disconnect exits with an error.
20
+ - Setup warns when Cline has another server pointing at Pushary, so Cline does not see Pushary's tools twice.
21
+
3
22
  ## 1.9.63
4
23
 
5
24
  - `pushary transcripts on` and `pushary transcripts off` turn encrypted transcript sync on or off for this machine, so your phone can show the conversation of a session instead of only its summary. Only that one setting in `~/.pushary/config.json` changes; the key and every other setting stay as they are.
@@ -11,7 +30,7 @@
11
30
 
12
31
  ## 1.9.62
13
32
 
14
- - In Cursor, each shell command and file change reaches your phone once. Cursor also runs Claude Code's hooks, so with Pushary's Cursor gate installed every gated call was asked about twice, once by each hook. The Claude Code hook now leaves a call from Cursor to the Cursor gate when `~/.cursor/hooks.json` registers that gate for that kind of call and the gate can answer it: its script is present and new enough to handle that kind of call, or the Pushary app is installed. Anything the Cursor gate does not cover is still asked about by the Claude Code hook. Commands the Cursor gate lets run without asking, such as ones that only read, no longer reach your phone through the Claude Code hook. This applies where this CLI runs Claude Code's hooks; while the Pushary Mac app runs them, calls from Cursor are still asked about twice until an app update.
33
+ - In Cursor, each shell command and file change reaches your phone once. Cursor also runs Claude Code's hooks, so with Pushary's Cursor gate installed every gated call was asked about twice, once by each hook. The Claude Code hook now leaves a call from Cursor to the Cursor gate when `~/.cursor/hooks.json` registers that gate for that kind of call and the gate can answer it: its script is present and new enough to handle that kind of call, or the Pushary app is installed. Anything the Cursor gate does not cover is still asked about by the Claude Code hook. Commands the Cursor gate lets run without asking, such as ones that only read, no longer reach your phone through the Claude Code hook. Pushary for Mac was never affected: it does not ask about the calls Cursor passes to Claude Code's hooks.
15
34
  - When a session already has as many open questions as Pushary allows, a new approval is never approved and nobody is asked again. Before, the hook stopped the agent and told it to retry, and every retry was refused again. Now the call goes to a prompt only where one is sure to follow: Claude Code's own prompt or permission dialog, the prompt of an agent that runs Claude Code's hooks and has one of its own, such as Grok, and Codex's own confirmation for a call Codex itself asked about. Everywhere else it is refused, with a message that says why: under a rule that refuses when nobody answers, in Codex before a tool runs, in Gemini CLI and OpenCode, in Antigravity CLI, in sessions started from your phone, and for a call from Cursor, because Cursor does not hold a call for a prompt. Gemini CLI under When I'm out hands the call to Gemini, as it did before. A question your agent asks you ends as an unanswered question, so its own picker, plan dialog or MCP form shows.
16
35
 
17
36
  ## 1.9.61
package/README.md CHANGED
@@ -214,7 +214,7 @@ sign-out Sign out: remove the key this machine stores, and say what it does
214
214
  pair Pair a phone without re-running setup (--app for the Pushary app; also: connect)
215
215
  bell Free local bell when an agent finishes or needs you. No account, no key, no network
216
216
  doctor Verify your Pushary installation is working
217
- disconnect Turn off one agent (claude|codex|gemini|cursor|opencode|qwen|codebuddy|qoder|droid|devin|antigravity|grok|fx)
217
+ disconnect Turn off one agent (claude|codex|gemini|cursor|opencode|qwen|codebuddy|qoder|droid|devin|antigravity|grok|fx|cline)
218
218
  clean Remove Pushary from this machine (--everything: the Mac app's setup too, --dry-run: preview)
219
219
  mode Choose where approval requests appear
220
220
  wait Show or set the "wait for your phone" ladder (pushary wait 45)
@@ -16,24 +16,23 @@ import {
16
16
  waitForQuestion,
17
17
  waitsForThePhone,
18
18
  withdrawQuestion
19
- } from "./chunk-TBKHQWIH.js";
19
+ } from "./chunk-DTVHZDYM.js";
20
20
  import "./chunk-POFBE6ZY.js";
21
- import "./chunk-ELAK46NR.js";
22
- import "./chunk-AB3VAQ25.js";
23
- import "./chunk-VFJSVPNL.js";
24
- import "./chunk-L5CDGXPO.js";
21
+ import "./chunk-BKCI53W6.js";
22
+ import "./chunk-UHS5MMAI.js";
23
+ import "./chunk-7ILQX47W.js";
24
+ import "./chunk-FWS2KLV2.js";
25
25
  import "./chunk-PPY5N2E6.js";
26
26
  import "./chunk-KZERVKTD.js";
27
- import "./chunk-QENTGE75.js";
28
- import "./chunk-MK4USZYQ.js";
29
- import "./chunk-5LOP4AVD.js";
30
- import "./chunk-BUQU3OPX.js";
31
- import "./chunk-6Z2VR3BA.js";
27
+ import "./chunk-ATPJGHUP.js";
28
+ import "./chunk-SCMEVDAR.js";
29
+ import "./chunk-Y64JGYTB.js";
30
+ import "./chunk-BAGBCSXA.js";
32
31
  import "./chunk-QTOLNRET.js";
33
32
  import {
34
33
  DECISION_STOP_REASON,
35
34
  UNVERIFIABLE_APPROVAL_REASON
36
- } from "./chunk-7NCLUA65.js";
35
+ } from "./chunk-MNKIR2ZB.js";
37
36
  import "./chunk-MLKGABMK.js";
38
37
  export {
39
38
  DECISION_STOP_REASON,
@@ -1,44 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-KUCL7ETL.js";
4
+ } from "../chunk-I2UBF2SS.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-YMZOM6BD.js";
8
- import "../chunk-T6XQNOZV.js";
9
- import "../chunk-QW3FRUFB.js";
10
- import "../chunk-3QLFB2EY.js";
11
- import "../chunk-4WFAP6QN.js";
12
- import "../chunk-SKUSGWFK.js";
13
- import "../chunk-BQFL2ECS.js";
14
- import "../chunk-XE5N352V.js";
15
- import "../chunk-KLZZI5TU.js";
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";
16
16
  import "../chunk-NMUI3ZWG.js";
17
- import "../chunk-BCVCUDFI.js";
18
- import "../chunk-V7N5NOZV.js";
19
- import "../chunk-OJEIS5L2.js";
17
+ import "../chunk-QSW3HAKI.js";
18
+ import "../chunk-TJUJAK5L.js";
19
+ import "../chunk-TK4JU2F7.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-6ICPEJY5.js";
22
- import "../chunk-IOH2T3CB.js";
23
- import "../chunk-PXAOEFJZ.js";
24
- import "../chunk-VC3HFFMQ.js";
25
- import "../chunk-7GRQGXF4.js";
26
- import "../chunk-TBKHQWIH.js";
21
+ import "../chunk-ED2SWTPC.js";
22
+ import "../chunk-3UNAPXED.js";
23
+ import "../chunk-3KXBRSL3.js";
24
+ import "../chunk-DTVHZDYM.js";
27
25
  import "../chunk-POFBE6ZY.js";
28
- import "../chunk-ELAK46NR.js";
29
- import "../chunk-AB3VAQ25.js";
30
- import "../chunk-VFJSVPNL.js";
31
- import "../chunk-L5CDGXPO.js";
26
+ import "../chunk-BKCI53W6.js";
27
+ import "../chunk-UHS5MMAI.js";
28
+ import "../chunk-7ILQX47W.js";
29
+ import "../chunk-FWS2KLV2.js";
32
30
  import "../chunk-PPY5N2E6.js";
33
31
  import "../chunk-KZERVKTD.js";
34
- import "../chunk-V5W3CK7F.js";
35
- import "../chunk-QENTGE75.js";
36
- import "../chunk-MK4USZYQ.js";
37
- import "../chunk-5LOP4AVD.js";
38
- import "../chunk-BUQU3OPX.js";
39
- import "../chunk-6Z2VR3BA.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";
40
37
  import "../chunk-QTOLNRET.js";
41
- import "../chunk-7NCLUA65.js";
38
+ import "../chunk-MNKIR2ZB.js";
42
39
  import "../chunk-MLKGABMK.js";
43
40
 
44
41
  // bin/pushary-bell-hook.ts
@@ -5,41 +5,40 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-KUCL7ETL.js";
8
+ } from "../chunk-I2UBF2SS.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-75ODMNOM.js";
14
+ } from "../chunk-AN7C3CHH.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-KLZZI5TU.js";
19
+ } from "../chunk-Z3M627TQ.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-NMUI3ZWG.js";
23
- import "../chunk-IOH2T3CB.js";
23
+ import "../chunk-ED2SWTPC.js";
24
24
  import "../chunk-PPY5N2E6.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-V5W3CK7F.js";
28
+ import "../chunk-2VADJ6JH.js";
29
+ import {
30
+ claudeSettings
31
+ } from "../chunk-ATPJGHUP.js";
29
32
  import {
30
33
  readJsonSafe,
31
34
  writeJsonAtomic
32
- } from "../chunk-QENTGE75.js";
33
- import {
34
- claudeSettings
35
- } from "../chunk-MK4USZYQ.js";
36
- import "../chunk-5LOP4AVD.js";
37
- import "../chunk-BUQU3OPX.js";
38
- import "../chunk-6Z2VR3BA.js";
35
+ } from "../chunk-SCMEVDAR.js";
36
+ import "../chunk-Y64JGYTB.js";
37
+ import "../chunk-BAGBCSXA.js";
39
38
  import "../chunk-QTOLNRET.js";
40
39
  import {
41
40
  isRecord
42
- } from "../chunk-7NCLUA65.js";
41
+ } from "../chunk-MNKIR2ZB.js";
43
42
  import "../chunk-MLKGABMK.js";
44
43
 
45
44
  // bin/pushary-bell.ts
@@ -2,46 +2,45 @@
2
2
  import {
3
3
  WRAPPER_ACTIVE_ENV,
4
4
  findClaudeBinary
5
- } from "../chunk-FVERRWDP.js";
5
+ } from "../chunk-CZ65D6Q5.js";
6
6
  import {
7
7
  SESSION_IDLE_TIMEOUT_MS,
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-CLABCSZC.js";
12
- import "../chunk-VUFHYMSP.js";
11
+ } from "../chunk-6CZX6YOE.js";
12
+ import "../chunk-RABLE5R6.js";
13
13
  import {
14
14
  announceSubscriptionRequired,
15
15
  isDeferAnswer
16
- } from "../chunk-KL76XWZ7.js";
16
+ } from "../chunk-UMTMFDL2.js";
17
17
  import {
18
18
  claudeTranscriptPath,
19
19
  loadSessionKey,
20
20
  registerTranscript,
21
21
  registeredTranscriptEnabled
22
- } from "../chunk-T6XQNOZV.js";
23
- import "../chunk-QW3FRUFB.js";
22
+ } from "../chunk-Q2BD4IBX.js";
23
+ import "../chunk-SZBMTOUZ.js";
24
24
  import {
25
25
  ensureDaemonRunning
26
- } from "../chunk-4WFAP6QN.js";
27
- import "../chunk-SKUSGWFK.js";
28
- import "../chunk-BQFL2ECS.js";
29
- import "../chunk-XE5N352V.js";
30
- import "../chunk-KLZZI5TU.js";
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";
31
31
  import "../chunk-NMUI3ZWG.js";
32
32
  import {
33
33
  encryptRecord
34
- } from "../chunk-BCVCUDFI.js";
35
- import "../chunk-V7N5NOZV.js";
34
+ } from "../chunk-QSW3HAKI.js";
35
+ import "../chunk-TJUJAK5L.js";
36
36
  import {
37
37
  transcriptsEnabled
38
- } from "../chunk-OJEIS5L2.js";
38
+ } from "../chunk-TK4JU2F7.js";
39
39
  import {
40
40
  needsShell,
41
41
  spawnClaude
42
42
  } from "../chunk-XHKBHWLX.js";
43
- import "../chunk-6ICPEJY5.js";
44
- import "../chunk-IOH2T3CB.js";
43
+ import "../chunk-ED2SWTPC.js";
45
44
  import {
46
45
  DEFAULT_SESSION,
47
46
  UNNAMED_ACTION,
@@ -58,11 +57,10 @@ import {
58
57
  reportEvent,
59
58
  savePendingCommand,
60
59
  scopePathFor
61
- } from "../chunk-PXAOEFJZ.js";
62
- import "../chunk-VC3HFFMQ.js";
60
+ } from "../chunk-3UNAPXED.js";
63
61
  import {
64
62
  repoKeyFor
65
- } from "../chunk-7GRQGXF4.js";
63
+ } from "../chunk-3KXBRSL3.js";
66
64
  import {
67
65
  askUser,
68
66
  cancelQuestion,
@@ -74,31 +72,30 @@ import {
74
72
  waitForAnswer,
75
73
  waitsForThePhone,
76
74
  withdrawQuestion
77
- } from "../chunk-TBKHQWIH.js";
75
+ } from "../chunk-DTVHZDYM.js";
78
76
  import "../chunk-POFBE6ZY.js";
79
77
  import {
80
78
  SubscriptionRequiredError
81
- } from "../chunk-ELAK46NR.js";
82
- import "../chunk-AB3VAQ25.js";
83
- import "../chunk-VFJSVPNL.js";
79
+ } from "../chunk-BKCI53W6.js";
80
+ import "../chunk-UHS5MMAI.js";
81
+ import "../chunk-7ILQX47W.js";
84
82
  import {
85
83
  getMachineId
86
- } from "../chunk-L5CDGXPO.js";
84
+ } from "../chunk-FWS2KLV2.js";
87
85
  import "../chunk-PPY5N2E6.js";
88
86
  import "../chunk-KZERVKTD.js";
89
- import "../chunk-V5W3CK7F.js";
90
- import "../chunk-QENTGE75.js";
87
+ import "../chunk-2VADJ6JH.js";
91
88
  import {
92
89
  claudeConfigDir
93
- } from "../chunk-MK4USZYQ.js";
94
- import "../chunk-5LOP4AVD.js";
90
+ } from "../chunk-ATPJGHUP.js";
91
+ import "../chunk-SCMEVDAR.js";
95
92
  import {
96
93
  getApiKey,
97
94
  getBaseUrl
98
- } from "../chunk-BUQU3OPX.js";
95
+ } from "../chunk-Y64JGYTB.js";
99
96
  import {
100
97
  NPX_LATEST_COMMAND
101
- } from "../chunk-6Z2VR3BA.js";
98
+ } from "../chunk-BAGBCSXA.js";
102
99
  import "../chunk-QTOLNRET.js";
103
100
  import {
104
101
  DECISION_STOP_REASON,
@@ -111,7 +108,7 @@ import {
111
108
  refusesWhenUnanswered,
112
109
  resolveGate,
113
110
  timeoutActionWithoutLocalPrompt
114
- } from "../chunk-7NCLUA65.js";
111
+ } from "../chunk-MNKIR2ZB.js";
115
112
  import "../chunk-MLKGABMK.js";
116
113
 
117
114
  // src/wrapper/localPassthrough.ts
@@ -15,26 +15,26 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-OU3BYBJ3.js";
18
+ } from "../chunk-OA6EADFT.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-5JK3DQGZ.js";
24
+ import "../chunk-JFKMPLNF.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-T3GHXR6N.js";
32
- import "../chunk-GZS72NCF.js";
31
+ } from "../chunk-GA257T2E.js";
32
+ import "../chunk-FFSIYBBU.js";
33
33
  import {
34
34
  isCursorPluginLeftover,
35
35
  releaseSoleGate,
36
36
  withoutPusharyCursorHooks
37
- } from "../chunk-GNUARBRZ.js";
37
+ } from "../chunk-CU2PXLZ6.js";
38
38
  import {
39
39
  HERMES_PIP_PACKAGE,
40
40
  readHermesStatus,
@@ -43,23 +43,25 @@ import {
43
43
  shortenHome,
44
44
  unregisterPluginLocation,
45
45
  vscodeSettingsTargets
46
- } from "../chunk-LGZ545TA.js";
46
+ } from "../chunk-ONBL2GCU.js";
47
47
  import {
48
48
  macAppKeepsMcpEntry,
49
49
  mcpServerBearer,
50
50
  pusharyKey,
51
51
  readMacAppAgentKey,
52
52
  setupReceiptKey
53
- } from "../chunk-VDBXSUXP.js";
53
+ } from "../chunk-U2P2LQ5B.js";
54
54
  import "../chunk-QCGNGEGE.js";
55
- import "../chunk-HZ72EMJE.js";
55
+ import "../chunk-ITYKN2K3.js";
56
56
  import {
57
+ planClineRemoval,
57
58
  planFxRemoval,
58
- removeInstructionBlock
59
- } from "../chunk-DMNLFWGY.js";
60
- import "../chunk-S2Z6VWHH.js";
61
- import "../chunk-WUOOZE5S.js";
59
+ removeClineServer
60
+ } from "../chunk-QNZ6G3LY.js";
61
+ import "../chunk-W5L2ZLHE.js";
62
+ import "../chunk-BEQ3MEE3.js";
62
63
  import {
64
+ OPENCODE_ASKED_PERMISSIONS,
63
65
  OPENCODE_PLUGIN_SIBLING,
64
66
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
65
67
  hasForeignPlugins,
@@ -67,38 +69,34 @@ import {
67
69
  openCodeConfigDir,
68
70
  openCodeConfigFile,
69
71
  openCodeInstructionsFile,
72
+ openCodePermissionsLeftOpen,
70
73
  openCodePluginDir,
71
74
  openCodePluginFile,
72
75
  removeOpenCodeMcpServer
73
- } from "../chunk-LTT54NOU.js";
76
+ } from "../chunk-P5HZEGT7.js";
74
77
  import {
75
78
  ansiPainter,
76
79
  useColor
77
80
  } from "../chunk-FO3MDD26.js";
78
81
  import {
79
82
  exitOnHelpFlag
80
- } from "../chunk-75ODMNOM.js";
81
- import "../chunk-VUFHYMSP.js";
83
+ } from "../chunk-AN7C3CHH.js";
84
+ import "../chunk-RABLE5R6.js";
82
85
  import {
83
86
  compatibleConfigFile,
84
87
  compatibleDocuments,
85
88
  compatibleInstructionsFile,
86
89
  compatibleMcpFile,
87
90
  compatiblePermissionRuleFile,
88
- isClaudeMcpSnapshot,
89
91
  isEmptiedPusharyOwnedDocument,
90
92
  readConfigDocument,
91
- removeClaudeMcpServers,
92
93
  removeCompatibleHooks,
93
94
  removeCompatibleMcpServer,
94
- removePusharySettings,
95
- removePusharyToolPermissions,
96
- restoreClaudeMcpServer,
97
95
  serializeConfigDocument
98
- } from "../chunk-3QLFB2EY.js";
96
+ } from "../chunk-WY6YAMZW.js";
99
97
  import {
100
98
  disableDaemonService
101
- } from "../chunk-4WFAP6QN.js";
99
+ } from "../chunk-ADXHPGBZ.js";
102
100
  import {
103
101
  hookOwnerOf,
104
102
  isHookTakeoverReceipt,
@@ -106,39 +104,36 @@ import {
106
104
  resolveBridgeStub,
107
105
  restoreHookTakeover,
108
106
  restoreMcpServer
109
- } from "../chunk-SKUSGWFK.js";
107
+ } from "../chunk-GTBWWCCM.js";
110
108
  import {
111
109
  removeGeminiSettings
112
- } from "../chunk-BQFL2ECS.js";
113
- import "../chunk-XE5N352V.js";
114
- import "../chunk-KLZZI5TU.js";
110
+ } from "../chunk-ANP3DIST.js";
111
+ import "../chunk-SROWUG5W.js";
112
+ import "../chunk-Z3M627TQ.js";
115
113
  import {
116
114
  parseFlags
117
115
  } from "../chunk-NMUI3ZWG.js";
118
116
  import "../chunk-XHKBHWLX.js";
119
- import "../chunk-6ICPEJY5.js";
120
117
  import {
121
118
  CANDIDATE_RCS,
122
119
  isDisabledExport,
123
120
  removeClaudeAlias,
124
121
  shellProfileCandidates
125
- } from "../chunk-IOH2T3CB.js";
122
+ } from "../chunk-ED2SWTPC.js";
126
123
  import "../chunk-E46NE7FB.js";
127
- import "../chunk-PXAOEFJZ.js";
128
- import "../chunk-VC3HFFMQ.js";
129
- import "../chunk-7GRQGXF4.js";
130
- import "../chunk-TBKHQWIH.js";
124
+ import "../chunk-3UNAPXED.js";
125
+ import "../chunk-3KXBRSL3.js";
126
+ import "../chunk-DTVHZDYM.js";
131
127
  import "../chunk-POFBE6ZY.js";
132
- import "../chunk-ELAK46NR.js";
133
- import "../chunk-AB3VAQ25.js";
134
- import "../chunk-VFJSVPNL.js";
135
- import "../chunk-L5CDGXPO.js";
128
+ import "../chunk-BKCI53W6.js";
129
+ import "../chunk-UHS5MMAI.js";
130
+ import "../chunk-7ILQX47W.js";
131
+ import "../chunk-FWS2KLV2.js";
136
132
  import "../chunk-PPY5N2E6.js";
137
133
  import {
138
134
  EXIT
139
135
  } from "../chunk-KZERVKTD.js";
140
- import "../chunk-V5W3CK7F.js";
141
- import "../chunk-QENTGE75.js";
136
+ import "../chunk-2VADJ6JH.js";
142
137
  import {
143
138
  claudeConfigDir,
144
139
  claudeJson,
@@ -147,6 +142,8 @@ import {
147
142
  claudeSettingsLocal,
148
143
  claudeSkillDir,
149
144
  claudeUserConfigFile,
145
+ clineMcpSettings,
146
+ clineRules,
150
147
  codexAgentsMd,
151
148
  codexConfigToml,
152
149
  codexHookPositions,
@@ -166,27 +163,33 @@ import {
166
163
  hermesConfig,
167
164
  hermesConfigReceipt,
168
165
  hookTakeoverReceipt,
166
+ isClaudeMcpSnapshot,
169
167
  pusharyDir,
170
168
  readCodexMcpAuth,
169
+ removeClaudeMcpServers,
171
170
  removeCodexHookTrust,
172
171
  removeCodexHooks,
172
+ removeInstructionBlock,
173
+ removePusharySettings,
174
+ removePusharyToolPermissions,
175
+ restoreClaudeMcpServer,
173
176
  restoreCodexHookTrust,
174
177
  vscodePluginDir,
175
178
  vscodePluginMcp
176
- } from "../chunk-MK4USZYQ.js";
179
+ } from "../chunk-ATPJGHUP.js";
177
180
  import {
178
181
  cleanNpmEnv,
179
182
  globalPackageState,
180
183
  npmIsOnPath,
181
184
  readGlobalFolder,
182
185
  readGlobalPrefix
183
- } from "../chunk-5LOP4AVD.js";
186
+ } from "../chunk-SCMEVDAR.js";
184
187
  import {
185
188
  getBaseUrl
186
- } from "../chunk-BUQU3OPX.js";
189
+ } from "../chunk-Y64JGYTB.js";
187
190
  import {
188
191
  NPX_LATEST_COMMAND
189
- } from "../chunk-6Z2VR3BA.js";
192
+ } from "../chunk-BAGBCSXA.js";
190
193
  import {
191
194
  CLI_PACKAGE_NAMES,
192
195
  globalPackageFolder,
@@ -200,7 +203,7 @@ import {
200
203
  SUPPORT_EMAIL,
201
204
  isValidApiKey,
202
205
  redactSecrets
203
- } from "../chunk-7NCLUA65.js";
206
+ } from "../chunk-MNKIR2ZB.js";
204
207
  import "../chunk-MLKGABMK.js";
205
208
 
206
209
  // bin/pushary-clean.ts
@@ -624,6 +627,23 @@ var removeFxInstructions = () => {
624
627
  console.log(` ${check} fx instructions ${dim(did("removed"))}`);
625
628
  }
626
629
  };
630
+ var removeClineServerEntry = () => {
631
+ if (!dryRun) return removeClineServer(clineMcpSettings());
632
+ const plan = planClineRemoval(clineMcpSettings());
633
+ if (plan.kind === "write") guardedWrite(plan.path, plan.text);
634
+ return plan;
635
+ };
636
+ var removeClineConfiguration = () => {
637
+ const removal = removeClineServerEntry();
638
+ if (removal.kind === "write") console.log(` ${check} Cline MCP ${dim(did("removed"))}`);
639
+ if (removal.kind === "kept" || removal.kind === "failed") {
640
+ incompleteClean = true;
641
+ console.log(` ${cross} Cline MCP ${dim(`(${removal.detail})`)}`);
642
+ }
643
+ if (guardedInstructionBlockRemoval(clineRules())) {
644
+ console.log(` ${check} Cline rule ${dim(did("removed"))}`);
645
+ }
646
+ };
627
647
  var removeCursorUserHook = (scope) => {
628
648
  if (!existsSync5(CURSOR_USER_HOOKS)) return "absent";
629
649
  let parsed2;
@@ -677,6 +697,7 @@ var agentConfigDirectories = () => [
677
697
  dirname2(CURSOR_USER_HOOKS),
678
698
  openCodeConfigDir(),
679
699
  fxConfigDir(),
700
+ dirname2(clineMcpSettings()),
680
701
  ...vscodeSettingsTargets(existsSync5).map((settings) => dirname2(settings))
681
702
  ];
682
703
  var restoreTakeoverReceipts = () => {
@@ -1117,6 +1138,9 @@ var main = async () => {
1117
1138
  } else {
1118
1139
  console.log(` ${skip} OpenCode MCP ${dim("(not found)")}`);
1119
1140
  }
1141
+ if (openCodeConfig && openCodePermissionsLeftOpen(openCodeConfig).length < OPENCODE_ASKED_PERMISSIONS.length) {
1142
+ console.log(` ${skip} OpenCode permission rules ${dim("(kept: they may be yours, and OpenCode keeps asking in its own prompt)")}`);
1143
+ }
1120
1144
  if (keepShared) {
1121
1145
  console.log(` ${skip} OpenCode AGENTS.md ${dim("(kept: the Mac app uses it)")}`);
1122
1146
  } else if (guardedInstructionBlockRemoval(openCodeInstructionsFile())) {
@@ -1126,6 +1150,7 @@ var main = async () => {
1126
1150
  }
1127
1151
  removeFxConfiguration();
1128
1152
  removeFxInstructions();
1153
+ removeClineConfiguration();
1129
1154
  const hermesPython = resolveHermesPython();
1130
1155
  if (hermesPython) {
1131
1156
  const configRun = runHermesConfigScript(hermesPython, dryRun ? "clean-preview" : "clean", HERMES_CONFIG_RECEIPT);