@pushary/agent-hooks 1.9.64 → 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 (103) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/{api-HDLTZTVR.js → api-32B3XLJR.js} +7 -7
  3. package/dist/bin/pushary-bell-hook.js +19 -19
  4. package/dist/bin/pushary-bell.js +5 -5
  5. package/dist/bin/pushary-claude.js +20 -20
  6. package/dist/bin/pushary-clean.js +32 -27
  7. package/dist/bin/pushary-codex-bridge.js +14 -14
  8. package/dist/bin/pushary-codex-hook.js +22 -22
  9. package/dist/bin/pushary-codex-session.js +6 -6
  10. package/dist/bin/pushary-codex.js +8 -8
  11. package/dist/bin/pushary-connect.js +19 -19
  12. package/dist/bin/pushary-daemon.js +30 -30
  13. package/dist/bin/pushary-disconnect.js +19 -19
  14. package/dist/bin/pushary-doctor.js +55 -31
  15. package/dist/bin/pushary-elicitation-hook.js +19 -19
  16. package/dist/bin/pushary-gemini-bridge.js +9 -9
  17. package/dist/bin/pushary-gemini-hook.js +20 -20
  18. package/dist/bin/pushary-hook.js +21 -21
  19. package/dist/bin/pushary-login.js +12 -12
  20. package/dist/bin/pushary-logout.js +18 -18
  21. package/dist/bin/pushary-mcp.js +8 -8
  22. package/dist/bin/pushary-mode.js +8 -8
  23. package/dist/bin/pushary-notification-hook.js +18 -18
  24. package/dist/bin/pushary-opencode-hook.js +19 -19
  25. package/dist/bin/pushary-permission-denied-hook.js +21 -21
  26. package/dist/bin/pushary-permission-hook.js +21 -21
  27. package/dist/bin/pushary-post-hook.js +18 -18
  28. package/dist/bin/pushary-prompt-hook.js +18 -18
  29. package/dist/bin/pushary-session-end-hook.js +20 -20
  30. package/dist/bin/pushary-session-start-hook.js +27 -27
  31. package/dist/bin/pushary-setup.js +56 -40
  32. package/dist/bin/pushary-status.js +23 -23
  33. package/dist/bin/pushary-stop-hook.js +18 -18
  34. package/dist/bin/pushary-stopfailure-hook.js +18 -18
  35. package/dist/bin/pushary-suggestions.js +8 -8
  36. package/dist/bin/pushary-transcript-register.js +11 -11
  37. package/dist/bin/pushary-transcripts.js +12 -12
  38. package/dist/bin/pushary-upgrade.js +31 -31
  39. package/dist/bin/pushary-wait.js +8 -8
  40. package/dist/bin/pushary.js +4 -4
  41. package/dist/{chunk-Q6ID23SU.js → chunk-3LF7T3NW.js} +3 -3
  42. package/dist/{chunk-MIPJ2VXP.js → chunk-3UNAPXED.js} +5 -5
  43. package/dist/{chunk-66FRMK7V.js → chunk-4LUWNBGD.js} +2 -2
  44. package/dist/{chunk-A5KQXZR7.js → chunk-6CZX6YOE.js} +2 -2
  45. package/dist/{chunk-EEM65CGJ.js → chunk-7ILQX47W.js} +1 -1
  46. package/dist/{chunk-5NP3OJ5P.js → chunk-ADXHPGBZ.js} +4 -4
  47. package/dist/{chunk-6QPDBD7Q.js → chunk-ANP3DIST.js} +1 -1
  48. package/dist/{chunk-H4BKC2GN.js → chunk-ATPJGHUP.js} +1 -1
  49. package/dist/{chunk-2PKHGHMA.js → chunk-BEQ3MEE3.js} +1 -1
  50. package/dist/{chunk-2KID4FK4.js → chunk-BKCI53W6.js} +2 -2
  51. package/dist/{chunk-2EY4HGLG.js → chunk-CSKABVSH.js} +1 -1
  52. package/dist/{chunk-6HPLEGUP.js → chunk-CU2PXLZ6.js} +3 -3
  53. package/dist/{chunk-RY4EPMZX.js → chunk-CZ65D6Q5.js} +2 -2
  54. package/dist/{chunk-PLMX3IHG.js → chunk-DM24VZOI.js} +2 -2
  55. package/dist/{chunk-E23RKH3T.js → chunk-DTVHZDYM.js} +3 -3
  56. package/dist/{chunk-OQKSF5ST.js → chunk-DXMUJTYF.js} +2 -2
  57. package/dist/{chunk-BLAIETMP.js → chunk-ED2SWTPC.js} +1 -1
  58. package/dist/{chunk-CJADXAJU.js → chunk-EEVE7H5Z.js} +1 -1
  59. package/dist/{chunk-QECRQWLV.js → chunk-F56GTJFG.js} +4 -4
  60. package/dist/{chunk-7UBDBJTG.js → chunk-FFSIYBBU.js} +3 -3
  61. package/dist/{chunk-ADRPW7KU.js → chunk-FWS2KLV2.js} +2 -2
  62. package/dist/{chunk-42PD2MQH.js → chunk-GA257T2E.js} +4 -4
  63. package/dist/{chunk-KA7JIMTG.js → chunk-GTBWWCCM.js} +3 -3
  64. package/dist/{chunk-LV6DX4P6.js → chunk-HDGB6SQ4.js} +2 -2
  65. package/dist/{chunk-IZTDX2MX.js → chunk-HIYLAC3C.js} +2 -2
  66. package/dist/{chunk-2YXBCZ3Z.js → chunk-I2UBF2SS.js} +1 -1
  67. package/dist/{chunk-JTOBQUIL.js → chunk-ICFHMJTW.js} +1 -1
  68. package/dist/{chunk-O7PCNYEY.js → chunk-ITYKN2K3.js} +1 -1
  69. package/dist/{chunk-AQAPPSDV.js → chunk-IZVEBBDH.js} +2 -2
  70. package/dist/{chunk-LA7CKRZN.js → chunk-JCWHOB36.js} +1 -1
  71. package/dist/{chunk-5TNGBDIE.js → chunk-JFKMPLNF.js} +2 -2
  72. package/dist/{chunk-2CEVEMJE.js → chunk-OA6EADFT.js} +3 -3
  73. package/dist/{chunk-KX3RMF6T.js → chunk-ONBL2GCU.js} +5 -5
  74. package/dist/{chunk-VNRWQCGU.js → chunk-P5HZEGT7.js} +61 -4
  75. package/dist/{chunk-YUDZCJYC.js → chunk-PP7FC3Y7.js} +6 -6
  76. package/dist/{chunk-57PU5OBL.js → chunk-Q2BD4IBX.js} +7 -7
  77. package/dist/{chunk-MPPTIZ2G.js → chunk-QNZ6G3LY.js} +5 -5
  78. package/dist/{chunk-DCMRNIDM.js → chunk-R4FL5JHK.js} +3 -3
  79. package/dist/{chunk-MXPOLQZH.js → chunk-RABLE5R6.js} +1 -1
  80. package/dist/{chunk-XF3AWNMO.js → chunk-RRHHWYPX.js} +5 -5
  81. package/dist/{chunk-BSZIPIFA.js → chunk-SCMEVDAR.js} +3 -3
  82. package/dist/{chunk-DVYVGBPB.js → chunk-SZBMTOUZ.js} +1 -1
  83. package/dist/{chunk-5TUDGSDC.js → chunk-TK4JU2F7.js} +1 -1
  84. package/dist/{chunk-QPPBH5NY.js → chunk-U2P2LQ5B.js} +4 -4
  85. package/dist/{chunk-QNATBOUH.js → chunk-UHS5MMAI.js} +1 -1
  86. package/dist/{chunk-JX3DHGZX.js → chunk-UM2X7HL6.js} +26 -11
  87. package/dist/{chunk-TR3GP5MH.js → chunk-UMTMFDL2.js} +1 -1
  88. package/dist/{chunk-NYV45Q25.js → chunk-W5L2ZLHE.js} +1 -1
  89. package/dist/{chunk-E2LB6JNV.js → chunk-WOHP7EL6.js} +6 -5
  90. package/dist/{chunk-ML2Q6WWE.js → chunk-WY6YAMZW.js} +3 -3
  91. package/dist/{chunk-CCNH4PJ2.js → chunk-XZCJC3QO.js} +7 -7
  92. package/dist/{chunk-PMLQRB3D.js → chunk-Z3M627TQ.js} +1 -1
  93. package/dist/{codex-app-cards-switch-JQ6356VX.js → codex-app-cards-switch-HK4RMOBI.js} +7 -7
  94. package/dist/{codex-desktop-launch-YUB2LOAG.js → codex-desktop-launch-OCO6N7SA.js} +1 -1
  95. package/dist/{codex-session-launch-UKMAORXS.js → codex-session-launch-ETZQTVFS.js} +12 -12
  96. package/dist/{global-upgrade-Y4USGPS2.js → global-upgrade-5DN5G3ZQ.js} +8 -8
  97. package/dist/{identity-W5CYL5RC.js → identity-EGL6HAWG.js} +3 -3
  98. package/dist/{live-capabilities-JRNNA5EP.js → live-capabilities-WU3FYJJG.js} +4 -4
  99. package/dist/{paths-4MEBINV3.js → paths-ZG6KDM6Y.js} +2 -2
  100. package/dist/{reapply-ZN7C3CB3.js → reapply-AQLNCCTE.js} +21 -21
  101. package/dist/src/index.js +13 -13
  102. package/dist/{upgrade-lock-QAWUV2DO.js → upgrade-lock-BIRXIKHJ.js} +3 -3
  103. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
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
+
3
11
  ## 1.9.64
4
12
 
5
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.
@@ -22,7 +30,7 @@
22
30
 
23
31
  ## 1.9.62
24
32
 
25
- - 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.
26
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.
27
35
 
28
36
  ## 1.9.61
@@ -16,16 +16,16 @@ import {
16
16
  waitForQuestion,
17
17
  waitsForThePhone,
18
18
  withdrawQuestion
19
- } from "./chunk-E23RKH3T.js";
19
+ } from "./chunk-DTVHZDYM.js";
20
20
  import "./chunk-POFBE6ZY.js";
21
- import "./chunk-2KID4FK4.js";
22
- import "./chunk-QNATBOUH.js";
23
- import "./chunk-EEM65CGJ.js";
24
- import "./chunk-ADRPW7KU.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-H4BKC2GN.js";
28
- import "./chunk-BSZIPIFA.js";
27
+ import "./chunk-ATPJGHUP.js";
28
+ import "./chunk-SCMEVDAR.js";
29
29
  import "./chunk-Y64JGYTB.js";
30
30
  import "./chunk-BAGBCSXA.js";
31
31
  import "./chunk-QTOLNRET.js";
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-2YXBCZ3Z.js";
4
+ } from "../chunk-I2UBF2SS.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-YUDZCJYC.js";
8
- import "../chunk-57PU5OBL.js";
9
- import "../chunk-DVYVGBPB.js";
10
- import "../chunk-ML2Q6WWE.js";
11
- import "../chunk-5NP3OJ5P.js";
12
- import "../chunk-KA7JIMTG.js";
13
- import "../chunk-6QPDBD7Q.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
14
  import "../chunk-SROWUG5W.js";
15
- import "../chunk-PMLQRB3D.js";
15
+ import "../chunk-Z3M627TQ.js";
16
16
  import "../chunk-NMUI3ZWG.js";
17
17
  import "../chunk-QSW3HAKI.js";
18
18
  import "../chunk-TJUJAK5L.js";
19
- import "../chunk-5TUDGSDC.js";
19
+ import "../chunk-TK4JU2F7.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-BLAIETMP.js";
22
- import "../chunk-MIPJ2VXP.js";
21
+ import "../chunk-ED2SWTPC.js";
22
+ import "../chunk-3UNAPXED.js";
23
23
  import "../chunk-3KXBRSL3.js";
24
- import "../chunk-E23RKH3T.js";
24
+ import "../chunk-DTVHZDYM.js";
25
25
  import "../chunk-POFBE6ZY.js";
26
- import "../chunk-2KID4FK4.js";
27
- import "../chunk-QNATBOUH.js";
28
- import "../chunk-EEM65CGJ.js";
29
- import "../chunk-ADRPW7KU.js";
26
+ import "../chunk-BKCI53W6.js";
27
+ import "../chunk-UHS5MMAI.js";
28
+ import "../chunk-7ILQX47W.js";
29
+ import "../chunk-FWS2KLV2.js";
30
30
  import "../chunk-PPY5N2E6.js";
31
31
  import "../chunk-KZERVKTD.js";
32
32
  import "../chunk-2VADJ6JH.js";
33
- import "../chunk-H4BKC2GN.js";
34
- import "../chunk-BSZIPIFA.js";
33
+ import "../chunk-ATPJGHUP.js";
34
+ import "../chunk-SCMEVDAR.js";
35
35
  import "../chunk-Y64JGYTB.js";
36
36
  import "../chunk-BAGBCSXA.js";
37
37
  import "../chunk-QTOLNRET.js";
@@ -5,7 +5,7 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-2YXBCZ3Z.js";
8
+ } from "../chunk-I2UBF2SS.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
@@ -16,11 +16,11 @@ import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-PMLQRB3D.js";
19
+ } from "../chunk-Z3M627TQ.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-NMUI3ZWG.js";
23
- import "../chunk-BLAIETMP.js";
23
+ import "../chunk-ED2SWTPC.js";
24
24
  import "../chunk-PPY5N2E6.js";
25
25
  import {
26
26
  EXIT
@@ -28,11 +28,11 @@ import {
28
28
  import "../chunk-2VADJ6JH.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-H4BKC2GN.js";
31
+ } from "../chunk-ATPJGHUP.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
- } from "../chunk-BSZIPIFA.js";
35
+ } from "../chunk-SCMEVDAR.js";
36
36
  import "../chunk-Y64JGYTB.js";
37
37
  import "../chunk-BAGBCSXA.js";
38
38
  import "../chunk-QTOLNRET.js";
@@ -2,32 +2,32 @@
2
2
  import {
3
3
  WRAPPER_ACTIVE_ENV,
4
4
  findClaudeBinary
5
- } from "../chunk-RY4EPMZX.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-A5KQXZR7.js";
12
- import "../chunk-MXPOLQZH.js";
11
+ } from "../chunk-6CZX6YOE.js";
12
+ import "../chunk-RABLE5R6.js";
13
13
  import {
14
14
  announceSubscriptionRequired,
15
15
  isDeferAnswer
16
- } from "../chunk-TR3GP5MH.js";
16
+ } from "../chunk-UMTMFDL2.js";
17
17
  import {
18
18
  claudeTranscriptPath,
19
19
  loadSessionKey,
20
20
  registerTranscript,
21
21
  registeredTranscriptEnabled
22
- } from "../chunk-57PU5OBL.js";
23
- import "../chunk-DVYVGBPB.js";
22
+ } from "../chunk-Q2BD4IBX.js";
23
+ import "../chunk-SZBMTOUZ.js";
24
24
  import {
25
25
  ensureDaemonRunning
26
- } from "../chunk-5NP3OJ5P.js";
27
- import "../chunk-KA7JIMTG.js";
28
- import "../chunk-6QPDBD7Q.js";
26
+ } from "../chunk-ADXHPGBZ.js";
27
+ import "../chunk-GTBWWCCM.js";
28
+ import "../chunk-ANP3DIST.js";
29
29
  import "../chunk-SROWUG5W.js";
30
- import "../chunk-PMLQRB3D.js";
30
+ import "../chunk-Z3M627TQ.js";
31
31
  import "../chunk-NMUI3ZWG.js";
32
32
  import {
33
33
  encryptRecord
@@ -35,12 +35,12 @@ import {
35
35
  import "../chunk-TJUJAK5L.js";
36
36
  import {
37
37
  transcriptsEnabled
38
- } from "../chunk-5TUDGSDC.js";
38
+ } from "../chunk-TK4JU2F7.js";
39
39
  import {
40
40
  needsShell,
41
41
  spawnClaude
42
42
  } from "../chunk-XHKBHWLX.js";
43
- import "../chunk-BLAIETMP.js";
43
+ import "../chunk-ED2SWTPC.js";
44
44
  import {
45
45
  DEFAULT_SESSION,
46
46
  UNNAMED_ACTION,
@@ -57,7 +57,7 @@ import {
57
57
  reportEvent,
58
58
  savePendingCommand,
59
59
  scopePathFor
60
- } from "../chunk-MIPJ2VXP.js";
60
+ } from "../chunk-3UNAPXED.js";
61
61
  import {
62
62
  repoKeyFor
63
63
  } from "../chunk-3KXBRSL3.js";
@@ -72,23 +72,23 @@ import {
72
72
  waitForAnswer,
73
73
  waitsForThePhone,
74
74
  withdrawQuestion
75
- } from "../chunk-E23RKH3T.js";
75
+ } from "../chunk-DTVHZDYM.js";
76
76
  import "../chunk-POFBE6ZY.js";
77
77
  import {
78
78
  SubscriptionRequiredError
79
- } from "../chunk-2KID4FK4.js";
80
- import "../chunk-QNATBOUH.js";
81
- import "../chunk-EEM65CGJ.js";
79
+ } from "../chunk-BKCI53W6.js";
80
+ import "../chunk-UHS5MMAI.js";
81
+ import "../chunk-7ILQX47W.js";
82
82
  import {
83
83
  getMachineId
84
- } from "../chunk-ADRPW7KU.js";
84
+ } from "../chunk-FWS2KLV2.js";
85
85
  import "../chunk-PPY5N2E6.js";
86
86
  import "../chunk-KZERVKTD.js";
87
87
  import "../chunk-2VADJ6JH.js";
88
88
  import {
89
89
  claudeConfigDir
90
- } from "../chunk-H4BKC2GN.js";
91
- import "../chunk-BSZIPIFA.js";
90
+ } from "../chunk-ATPJGHUP.js";
91
+ import "../chunk-SCMEVDAR.js";
92
92
  import {
93
93
  getApiKey,
94
94
  getBaseUrl
@@ -15,26 +15,26 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-2CEVEMJE.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-5TNGBDIE.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-42PD2MQH.js";
32
- import "../chunk-7UBDBJTG.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-6HPLEGUP.js";
37
+ } from "../chunk-CU2PXLZ6.js";
38
38
  import {
39
39
  HERMES_PIP_PACKAGE,
40
40
  readHermesStatus,
@@ -43,24 +43,25 @@ import {
43
43
  shortenHome,
44
44
  unregisterPluginLocation,
45
45
  vscodeSettingsTargets
46
- } from "../chunk-KX3RMF6T.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-QPPBH5NY.js";
53
+ } from "../chunk-U2P2LQ5B.js";
54
54
  import "../chunk-QCGNGEGE.js";
55
- import "../chunk-O7PCNYEY.js";
55
+ import "../chunk-ITYKN2K3.js";
56
56
  import {
57
57
  planClineRemoval,
58
58
  planFxRemoval,
59
59
  removeClineServer
60
- } from "../chunk-MPPTIZ2G.js";
61
- import "../chunk-NYV45Q25.js";
62
- import "../chunk-2PKHGHMA.js";
60
+ } from "../chunk-QNZ6G3LY.js";
61
+ import "../chunk-W5L2ZLHE.js";
62
+ import "../chunk-BEQ3MEE3.js";
63
63
  import {
64
+ OPENCODE_ASKED_PERMISSIONS,
64
65
  OPENCODE_PLUGIN_SIBLING,
65
66
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
66
67
  hasForeignPlugins,
@@ -68,10 +69,11 @@ import {
68
69
  openCodeConfigDir,
69
70
  openCodeConfigFile,
70
71
  openCodeInstructionsFile,
72
+ openCodePermissionsLeftOpen,
71
73
  openCodePluginDir,
72
74
  openCodePluginFile,
73
75
  removeOpenCodeMcpServer
74
- } from "../chunk-VNRWQCGU.js";
76
+ } from "../chunk-P5HZEGT7.js";
75
77
  import {
76
78
  ansiPainter,
77
79
  useColor
@@ -79,7 +81,7 @@ import {
79
81
  import {
80
82
  exitOnHelpFlag
81
83
  } from "../chunk-AN7C3CHH.js";
82
- import "../chunk-MXPOLQZH.js";
84
+ import "../chunk-RABLE5R6.js";
83
85
  import {
84
86
  compatibleConfigFile,
85
87
  compatibleDocuments,
@@ -91,10 +93,10 @@ import {
91
93
  removeCompatibleHooks,
92
94
  removeCompatibleMcpServer,
93
95
  serializeConfigDocument
94
- } from "../chunk-ML2Q6WWE.js";
96
+ } from "../chunk-WY6YAMZW.js";
95
97
  import {
96
98
  disableDaemonService
97
- } from "../chunk-5NP3OJ5P.js";
99
+ } from "../chunk-ADXHPGBZ.js";
98
100
  import {
99
101
  hookOwnerOf,
100
102
  isHookTakeoverReceipt,
@@ -102,12 +104,12 @@ import {
102
104
  resolveBridgeStub,
103
105
  restoreHookTakeover,
104
106
  restoreMcpServer
105
- } from "../chunk-KA7JIMTG.js";
107
+ } from "../chunk-GTBWWCCM.js";
106
108
  import {
107
109
  removeGeminiSettings
108
- } from "../chunk-6QPDBD7Q.js";
110
+ } from "../chunk-ANP3DIST.js";
109
111
  import "../chunk-SROWUG5W.js";
110
- import "../chunk-PMLQRB3D.js";
112
+ import "../chunk-Z3M627TQ.js";
111
113
  import {
112
114
  parseFlags
113
115
  } from "../chunk-NMUI3ZWG.js";
@@ -117,16 +119,16 @@ import {
117
119
  isDisabledExport,
118
120
  removeClaudeAlias,
119
121
  shellProfileCandidates
120
- } from "../chunk-BLAIETMP.js";
122
+ } from "../chunk-ED2SWTPC.js";
121
123
  import "../chunk-E46NE7FB.js";
122
- import "../chunk-MIPJ2VXP.js";
124
+ import "../chunk-3UNAPXED.js";
123
125
  import "../chunk-3KXBRSL3.js";
124
- import "../chunk-E23RKH3T.js";
126
+ import "../chunk-DTVHZDYM.js";
125
127
  import "../chunk-POFBE6ZY.js";
126
- import "../chunk-2KID4FK4.js";
127
- import "../chunk-QNATBOUH.js";
128
- import "../chunk-EEM65CGJ.js";
129
- import "../chunk-ADRPW7KU.js";
128
+ import "../chunk-BKCI53W6.js";
129
+ import "../chunk-UHS5MMAI.js";
130
+ import "../chunk-7ILQX47W.js";
131
+ import "../chunk-FWS2KLV2.js";
130
132
  import "../chunk-PPY5N2E6.js";
131
133
  import {
132
134
  EXIT
@@ -174,14 +176,14 @@ import {
174
176
  restoreCodexHookTrust,
175
177
  vscodePluginDir,
176
178
  vscodePluginMcp
177
- } from "../chunk-H4BKC2GN.js";
179
+ } from "../chunk-ATPJGHUP.js";
178
180
  import {
179
181
  cleanNpmEnv,
180
182
  globalPackageState,
181
183
  npmIsOnPath,
182
184
  readGlobalFolder,
183
185
  readGlobalPrefix
184
- } from "../chunk-BSZIPIFA.js";
186
+ } from "../chunk-SCMEVDAR.js";
185
187
  import {
186
188
  getBaseUrl
187
189
  } from "../chunk-Y64JGYTB.js";
@@ -1136,6 +1138,9 @@ var main = async () => {
1136
1138
  } else {
1137
1139
  console.log(` ${skip} OpenCode MCP ${dim("(not found)")}`);
1138
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
+ }
1139
1144
  if (keepShared) {
1140
1145
  console.log(` ${skip} OpenCode AGENTS.md ${dim("(kept: the Mac app uses it)")}`);
1141
1146
  } else if (guardedInstructionBlockRemoval(openCodeInstructionsFile())) {
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCodexBridge
4
- } from "../chunk-Q6ID23SU.js";
4
+ } from "../chunk-3LF7T3NW.js";
5
5
  import "../chunk-NUEPJ5W6.js";
6
6
  import {
7
7
  resolveProviderBinary
8
- } from "../chunk-DCMRNIDM.js";
9
- import "../chunk-IZTDX2MX.js";
8
+ } from "../chunk-R4FL5JHK.js";
9
+ import "../chunk-HIYLAC3C.js";
10
10
  import {
11
11
  withSpawnProcessOwnership
12
- } from "../chunk-A5KQXZR7.js";
13
- import "../chunk-MXPOLQZH.js";
12
+ } from "../chunk-6CZX6YOE.js";
13
+ import "../chunk-RABLE5R6.js";
14
14
  import "../chunk-QSW3HAKI.js";
15
15
  import "../chunk-TJUJAK5L.js";
16
16
  import {
17
17
  transcriptsEnabled
18
- } from "../chunk-5TUDGSDC.js";
18
+ } from "../chunk-TK4JU2F7.js";
19
19
  import "../chunk-XHKBHWLX.js";
20
- import "../chunk-BLAIETMP.js";
20
+ import "../chunk-ED2SWTPC.js";
21
21
  import "../chunk-3KXBRSL3.js";
22
- import "../chunk-E23RKH3T.js";
22
+ import "../chunk-DTVHZDYM.js";
23
23
  import "../chunk-POFBE6ZY.js";
24
- import "../chunk-2KID4FK4.js";
25
- import "../chunk-QNATBOUH.js";
26
- import "../chunk-EEM65CGJ.js";
24
+ import "../chunk-BKCI53W6.js";
25
+ import "../chunk-UHS5MMAI.js";
26
+ import "../chunk-7ILQX47W.js";
27
27
  import {
28
28
  getMachineId
29
- } from "../chunk-ADRPW7KU.js";
29
+ } from "../chunk-FWS2KLV2.js";
30
30
  import "../chunk-PPY5N2E6.js";
31
31
  import "../chunk-KZERVKTD.js";
32
32
  import "../chunk-2VADJ6JH.js";
33
- import "../chunk-H4BKC2GN.js";
34
- import "../chunk-BSZIPIFA.js";
33
+ import "../chunk-ATPJGHUP.js";
34
+ import "../chunk-SCMEVDAR.js";
35
35
  import {
36
36
  getApiKey,
37
37
  getBaseUrl
@@ -6,35 +6,35 @@ import {
6
6
  askAgentQuestions,
7
7
  defersToNativeMode,
8
8
  reportMachineDenial
9
- } from "../chunk-XF3AWNMO.js";
9
+ } from "../chunk-RRHHWYPX.js";
10
10
  import {
11
11
  isGatingMoment,
12
12
  recordKeylessMoment
13
13
  } from "../chunk-XJIIU36L.js";
14
14
  import {
15
15
  triggerAutoUpdate
16
- } from "../chunk-PLMX3IHG.js";
16
+ } from "../chunk-DM24VZOI.js";
17
17
  import {
18
18
  readHookInput
19
- } from "../chunk-YUDZCJYC.js";
19
+ } from "../chunk-PP7FC3Y7.js";
20
20
  import {
21
21
  announceSubscriptionRequired,
22
22
  isDeferAnswer
23
- } from "../chunk-TR3GP5MH.js";
24
- import "../chunk-57PU5OBL.js";
25
- import "../chunk-DVYVGBPB.js";
26
- import "../chunk-ML2Q6WWE.js";
27
- import "../chunk-5NP3OJ5P.js";
28
- import "../chunk-KA7JIMTG.js";
29
- import "../chunk-6QPDBD7Q.js";
23
+ } from "../chunk-UMTMFDL2.js";
24
+ import "../chunk-Q2BD4IBX.js";
25
+ import "../chunk-SZBMTOUZ.js";
26
+ import "../chunk-WY6YAMZW.js";
27
+ import "../chunk-ADXHPGBZ.js";
28
+ import "../chunk-GTBWWCCM.js";
29
+ import "../chunk-ANP3DIST.js";
30
30
  import "../chunk-SROWUG5W.js";
31
- import "../chunk-PMLQRB3D.js";
31
+ import "../chunk-Z3M627TQ.js";
32
32
  import "../chunk-NMUI3ZWG.js";
33
33
  import "../chunk-QSW3HAKI.js";
34
34
  import "../chunk-TJUJAK5L.js";
35
- import "../chunk-5TUDGSDC.js";
35
+ import "../chunk-TK4JU2F7.js";
36
36
  import "../chunk-XHKBHWLX.js";
37
- import "../chunk-BLAIETMP.js";
37
+ import "../chunk-ED2SWTPC.js";
38
38
  import {
39
39
  CODEX_AGENT,
40
40
  DEFAULT_SESSION,
@@ -78,7 +78,7 @@ import {
78
78
  toPolicyLookup,
79
79
  toPolicyLookups,
80
80
  userScope
81
- } from "../chunk-MIPJ2VXP.js";
81
+ } from "../chunk-3UNAPXED.js";
82
82
  import {
83
83
  repoKeyFor
84
84
  } from "../chunk-3KXBRSL3.js";
@@ -96,16 +96,16 @@ import {
96
96
  sendNotification,
97
97
  unavailableQuestionUnlessRefused,
98
98
  waitForQuestion
99
- } from "../chunk-E23RKH3T.js";
99
+ } from "../chunk-DTVHZDYM.js";
100
100
  import "../chunk-POFBE6ZY.js";
101
101
  import {
102
102
  SubscriptionRequiredError
103
- } from "../chunk-2KID4FK4.js";
104
- import "../chunk-QNATBOUH.js";
105
- import "../chunk-EEM65CGJ.js";
103
+ } from "../chunk-BKCI53W6.js";
104
+ import "../chunk-UHS5MMAI.js";
105
+ import "../chunk-7ILQX47W.js";
106
106
  import {
107
107
  getMachineId
108
- } from "../chunk-ADRPW7KU.js";
108
+ } from "../chunk-FWS2KLV2.js";
109
109
  import "../chunk-PPY5N2E6.js";
110
110
  import {
111
111
  EXIT
@@ -113,10 +113,10 @@ import {
113
113
  import "../chunk-2VADJ6JH.js";
114
114
  import {
115
115
  canonicalJson
116
- } from "../chunk-H4BKC2GN.js";
116
+ } from "../chunk-ATPJGHUP.js";
117
117
  import {
118
118
  writeFileAtomic
119
- } from "../chunk-BSZIPIFA.js";
119
+ } from "../chunk-SCMEVDAR.js";
120
120
  import {
121
121
  getApiKey
122
122
  } from "../chunk-Y64JGYTB.js";
@@ -810,7 +810,7 @@ var decidePreToolUse = async (input) => {
810
810
  };
811
811
  var repairCodexHoldsQuietly = async () => {
812
812
  try {
813
- const { repairCodexHolds } = await import("../reapply-ZN7C3CB3.js");
813
+ const { repairCodexHolds } = await import("../reapply-AQLNCCTE.js");
814
814
  repairCodexHolds();
815
815
  } catch {
816
816
  return;
@@ -9,7 +9,7 @@ var args = process.argv.slice(2);
9
9
  if (args[0] === "codex") args.shift();
10
10
  var appBehindTheProxy = args[0] === "--desktop-proxy" && args[2] === "--" ? args[1] : void 0;
11
11
  if (args[0] !== "--desktop-proxy") (await import("../usage-43C2DHDU.js")).exitOnHelpFlag("codex");
12
- var loadWhatReadsTheAccount = () => Promise.all([import("../config-YY54G3CC.js"), import("../identity-W5CYL5RC.js")]);
12
+ var loadWhatReadsTheAccount = () => Promise.all([import("../config-YY54G3CC.js"), import("../identity-EGL6HAWG.js")]);
13
13
  var loadedWhenThePassThroughStarted = appBehindTheProxy === void 0 ? null : loadWhatReadsTheAccount().catch(() => null);
14
14
  var desktopAccount = async () => {
15
15
  try {
@@ -19,7 +19,7 @@ var desktopAccount = async () => {
19
19
  return null;
20
20
  }
21
21
  };
22
- var desktopLaunch = await import("../codex-desktop-launch-YUB2LOAG.js").catch(() => null);
22
+ var desktopLaunch = await import("../codex-desktop-launch-OCO6N7SA.js").catch(() => null);
23
23
  if (desktopLaunch === null && appBehindTheProxy !== void 0) {
24
24
  process.exitCode = await letCodexRunWithoutPushary(appBehindTheProxy, args.slice(3));
25
25
  } else {
@@ -27,15 +27,15 @@ if (desktopLaunch === null && appBehindTheProxy !== void 0) {
27
27
  const stop = () => abort.abort();
28
28
  if (!args[0]?.startsWith("--desktop")) for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, stop);
29
29
  try {
30
- const { codexDesktopCommand } = desktopLaunch ?? await import("../codex-desktop-launch-YUB2LOAG.js");
30
+ const { codexDesktopCommand } = desktopLaunch ?? await import("../codex-desktop-launch-OCO6N7SA.js");
31
31
  const desktop = await codexDesktopCommand(args, [process.execPath, ...process.execArgv, process.argv[1], "codex"], desktopAccount);
32
32
  if (desktop !== null) process.exitCode = desktop;
33
33
  else {
34
34
  const [{ getApiKey, getBaseUrl }, { getMachineId }, { resolveProviderBinary }, { codexSessionDirectory, launchCodexSession }] = await Promise.all([
35
35
  import("../config-YY54G3CC.js"),
36
- import("../identity-W5CYL5RC.js"),
37
- import("../live-capabilities-JRNNA5EP.js"),
38
- import("../codex-session-launch-UKMAORXS.js")
36
+ import("../identity-EGL6HAWG.js"),
37
+ import("../live-capabilities-WU3FYJJG.js"),
38
+ import("../codex-session-launch-ETZQTVFS.js")
39
39
  ]);
40
40
  const binary = resolveProviderBinary("codex");
41
41
  if (!binary) throw new Error("Install Codex first, then run pushary codex");
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reportEvent
4
- } from "../chunk-MIPJ2VXP.js";
4
+ } from "../chunk-3UNAPXED.js";
5
5
  import "../chunk-3KXBRSL3.js";
6
6
  import {
7
7
  askUser,
8
8
  isDecisionStopped,
9
9
  waitForAnswer
10
- } from "../chunk-E23RKH3T.js";
10
+ } from "../chunk-DTVHZDYM.js";
11
11
  import "../chunk-POFBE6ZY.js";
12
- import "../chunk-2KID4FK4.js";
13
- import "../chunk-QNATBOUH.js";
14
- import "../chunk-EEM65CGJ.js";
12
+ import "../chunk-BKCI53W6.js";
13
+ import "../chunk-UHS5MMAI.js";
14
+ import "../chunk-7ILQX47W.js";
15
15
  import {
16
16
  getMachineId
17
- } from "../chunk-ADRPW7KU.js";
17
+ } from "../chunk-FWS2KLV2.js";
18
18
  import "../chunk-PPY5N2E6.js";
19
19
  import "../chunk-KZERVKTD.js";
20
20
  import "../chunk-2VADJ6JH.js";
21
- import "../chunk-H4BKC2GN.js";
22
- import "../chunk-BSZIPIFA.js";
21
+ import "../chunk-ATPJGHUP.js";
22
+ import "../chunk-SCMEVDAR.js";
23
23
  import {
24
24
  getApiKey
25
25
  } from "../chunk-Y64JGYTB.js";