pushary 1.9.59 → 1.9.61

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 (130) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +6 -0
  3. package/data/cursor-plugin/.cursor-plugin/plugin.json +5 -1
  4. package/data/cursor-plugin/CHANGELOG.md +4 -0
  5. package/dist/{api-UVJGNZIF.js → api-LW3PJQYY.js} +12 -11
  6. package/dist/bin/pushary-bell-hook.js +30 -29
  7. package/dist/bin/pushary-bell.js +13 -12
  8. package/dist/bin/pushary-claude.js +32 -30
  9. package/dist/bin/pushary-clean.js +61 -54
  10. package/dist/bin/pushary-codex-bridge.js +23 -22
  11. package/dist/bin/pushary-codex-hook.js +35 -34
  12. package/dist/bin/pushary-codex-session.js +9 -8
  13. package/dist/bin/pushary-codex.js +16 -15
  14. package/dist/bin/pushary-connect.js +30 -29
  15. package/dist/bin/pushary-cowork.js +8 -7
  16. package/dist/bin/pushary-daemon.js +40 -39
  17. package/dist/bin/pushary-disconnect.js +43 -29
  18. package/dist/bin/pushary-doctor.js +52 -47
  19. package/dist/bin/pushary-elicitation-hook.js +30 -29
  20. package/dist/bin/pushary-gemini-bridge.js +16 -15
  21. package/dist/bin/pushary-gemini-hook.js +32 -31
  22. package/dist/bin/pushary-hook.js +34 -33
  23. package/dist/bin/pushary-login.js +23 -19
  24. package/dist/bin/pushary-logout.js +37 -31
  25. package/dist/bin/pushary-mcp.js +13 -12
  26. package/dist/bin/pushary-mode.js +42 -55
  27. package/dist/bin/pushary-notification-hook.js +29 -28
  28. package/dist/bin/pushary-opencode-hook.js +31 -30
  29. package/dist/bin/pushary-permission-denied-hook.js +34 -33
  30. package/dist/bin/pushary-permission-hook.js +33 -32
  31. package/dist/bin/pushary-post-hook.js +29 -28
  32. package/dist/bin/pushary-prompt-hook.js +29 -28
  33. package/dist/bin/pushary-session-end-hook.js +29 -28
  34. package/dist/bin/pushary-session-start-hook.js +36 -35
  35. package/dist/bin/pushary-setup.js +4397 -292
  36. package/dist/bin/pushary-stats.js +6 -5
  37. package/dist/bin/pushary-status.js +42 -36
  38. package/dist/bin/pushary-stop-hook.js +29 -28
  39. package/dist/bin/pushary-stopfailure-hook.js +29 -28
  40. package/dist/bin/pushary-suggestions.js +34 -39
  41. package/dist/bin/pushary-transcript-register.js +21 -20
  42. package/dist/bin/pushary-transcripts.js +34 -20
  43. package/dist/bin/pushary-upgrade.js +77 -50
  44. package/dist/bin/pushary-wait.js +37 -42
  45. package/dist/bin/pushary.js +9 -8
  46. package/dist/{chunk-PVANKDWM.js → chunk-2AELPDMT.js} +1 -1
  47. package/dist/{chunk-W47WL6JY.js → chunk-33OOEVPG.js} +1 -1
  48. package/dist/{chunk-BRUHVTFB.js → chunk-4N5E4JNF.js} +2 -2
  49. package/dist/{chunk-6ONSTCDJ.js → chunk-4VRTSDGP.js} +5 -5
  50. package/dist/{chunk-DS7X36Z3.js → chunk-64S5PQBQ.js} +4 -4
  51. package/dist/{chunk-KQHY6L3X.js → chunk-6FJ6CK32.js} +4 -4
  52. package/dist/{chunk-EBQTWH5O.js → chunk-6T5Z64KS.js} +39 -31
  53. package/dist/{chunk-JAKBCKEB.js → chunk-7BAO42UV.js} +8 -7
  54. package/dist/chunk-7BHI3PZN.js +41 -0
  55. package/dist/{chunk-5BNXJTOZ.js → chunk-7HDGH3Z2.js} +3 -12
  56. package/dist/{chunk-D6CXQIXO.js → chunk-7JXJJNQ5.js} +1 -1
  57. package/dist/{chunk-KHDD74MK.js → chunk-7MCCXE5Y.js} +5 -5
  58. package/dist/{chunk-AY32RSUC.js → chunk-ADR3KHOC.js} +2 -2
  59. package/dist/{chunk-MMLIQDTG.js → chunk-ATKN4BJT.js} +1 -1
  60. package/dist/{chunk-762CDAJJ.js → chunk-AXJLJJ3M.js} +7 -0
  61. package/dist/{chunk-4XXZUFWN.js → chunk-BG4Y64FW.js} +1 -1
  62. package/dist/{chunk-X4ES7QBT.js → chunk-BJTSKOH3.js} +9 -7
  63. package/dist/{chunk-TCH5UCPR.js → chunk-BQ2VV7LY.js} +2 -2
  64. package/dist/{chunk-IBXHVYN2.js → chunk-BUZIEL7Y.js} +2 -2
  65. package/dist/{chunk-UFJS4RR7.js → chunk-CICLXLQN.js} +3 -3
  66. package/dist/{chunk-US3IT6ZC.js → chunk-CJ5TCFD4.js} +11 -4
  67. package/dist/{chunk-5JWCWALO.js → chunk-DQLCFGHK.js} +12 -10
  68. package/dist/{chunk-V3PDUDPB.js → chunk-ELLJPP6O.js} +2 -2
  69. package/dist/{chunk-BMPZ5HVJ.js → chunk-ERK24P76.js} +11 -1
  70. package/dist/{chunk-2WMZDKPM.js → chunk-EUIPTDLX.js} +13 -13
  71. package/dist/{chunk-RQDP2SJY.js → chunk-FUZ5VYWD.js} +1 -1
  72. package/dist/{chunk-5PP4455M.js → chunk-G36T5LAP.js} +3 -3
  73. package/dist/{chunk-3N2ZTHZZ.js → chunk-GAMVAORR.js} +1 -1
  74. package/dist/{chunk-YQVKG5MC.js → chunk-GDKQUB52.js} +7 -6
  75. package/dist/{chunk-KQWN7C5C.js → chunk-GKFO5JLN.js} +4 -4
  76. package/dist/{chunk-MYU5D5VH.js → chunk-GZCSWDAS.js} +4 -4
  77. package/dist/{chunk-2FVP7WRP.js → chunk-HUI4OE43.js} +3 -3
  78. package/dist/{chunk-AS4Z6KS4.js → chunk-IFPOHFDJ.js} +1 -1
  79. package/dist/{chunk-L3NVHPBU.js → chunk-JGQV4MDQ.js} +6 -6
  80. package/dist/{chunk-UVZK5LIK.js → chunk-K4MBKXAE.js} +1 -1
  81. package/dist/{chunk-EHCIQA5D.js → chunk-KPNZ7JUL.js} +4 -4
  82. package/dist/{chunk-4QF2YLYK.js → chunk-LBHJJEKT.js} +6 -6
  83. package/dist/{chunk-5O6D4J2K.js → chunk-LN7DE5LY.js} +2 -2
  84. package/dist/chunk-MLKGABMK.js +9 -0
  85. package/dist/{chunk-KZCYHWDF.js → chunk-MWLTTLPK.js} +107 -50
  86. package/dist/{chunk-WWAVHLGS.js → chunk-NKLNU577.js} +5 -5
  87. package/dist/{chunk-GMXKITVA.js → chunk-NMUI3ZWG.js} +1 -1
  88. package/dist/{chunk-SIU6OWA6.js → chunk-O65F2IIN.js} +6 -6
  89. package/dist/{chunk-T65RIQK2.js → chunk-ORX5BTV4.js} +6 -6
  90. package/dist/{chunk-VAJHDTJX.js → chunk-P3VQH65N.js} +28 -17
  91. package/dist/{chunk-CPRA7IEK.js → chunk-PITQ5ZIQ.js} +2 -2
  92. package/dist/chunk-PPY5N2E6.js +58 -0
  93. package/dist/{chunk-UTJ5465F.js → chunk-QER5R7Z6.js} +2 -2
  94. package/dist/{chunk-TDOKDCFH.js → chunk-RGSW36XH.js} +3 -3
  95. package/dist/{chunk-WW24SG27.js → chunk-RJHX66EY.js} +21 -11
  96. package/dist/{chunk-M46WDK64.js → chunk-SFAP4AJY.js} +1 -1
  97. package/dist/{chunk-MSU3VKGJ.js → chunk-SHJVFW22.js} +2 -2
  98. package/dist/{chunk-RAMQBSVZ.js → chunk-SVQWHV65.js} +1 -1
  99. package/dist/{chunk-3NROUNIS.js → chunk-UADSXJZ4.js} +2 -2
  100. package/dist/{chunk-M6MOQBR5.js → chunk-USE5IEEW.js} +1 -1
  101. package/dist/{chunk-KW3DED2A.js → chunk-VX2MJ4X7.js} +4 -4
  102. package/dist/{chunk-OZIXBN3O.js → chunk-WFSGCFXQ.js} +2 -2
  103. package/dist/{chunk-KAJDKYUM.js → chunk-WN3RACVD.js} +3 -3
  104. package/dist/chunk-X3YKQJCZ.js +36 -0
  105. package/dist/{chunk-5EFNBL6V.js → chunk-XAO6EYGM.js} +3 -3
  106. package/dist/{chunk-BKVX53QR.js → chunk-XEJOPVCG.js} +1 -1
  107. package/dist/{chunk-75UYYIFJ.js → chunk-XV6S5PWW.js} +3 -3
  108. package/dist/{chunk-3RKIJM26.js → chunk-Y5VKZNFN.js} +2 -2
  109. package/dist/{chunk-DK35M4TH.js → chunk-Y6Z7DA5Y.js} +5 -5
  110. package/dist/{chunk-MA37WNVS.js → chunk-YDR4BQ7R.js} +4 -4
  111. package/dist/{chunk-XGP5VSQG.js → chunk-YPD3MTFU.js} +1 -1
  112. package/dist/{chunk-LAEW5QQD.js → chunk-ZEWIMY63.js} +1 -1
  113. package/dist/{chunk-JBCMXSBO.js → chunk-ZGU3NXL2.js} +77 -18
  114. package/dist/{codex-app-cards-switch-N77RWKCO.js → codex-app-cards-switch-BD7LCI2I.js} +12 -11
  115. package/dist/{codex-desktop-launch-KIX7OMTL.js → codex-desktop-launch-V5CASSBB.js} +2 -1
  116. package/dist/{codex-session-launch-XV7SIIWP.js → codex-session-launch-5PKFKUFD.js} +20 -19
  117. package/dist/{config-HH4DYYNX.js → config-AEKH7HGC.js} +4 -3
  118. package/dist/{global-upgrade-YWIVJIUR.js → global-upgrade-IUXJJDWF.js} +10 -9
  119. package/dist/{identity-4J7Y2MW3.js → identity-YJIV2XTY.js} +5 -4
  120. package/dist/{live-capabilities-LHZBCI5U.js → live-capabilities-QYFW5QAW.js} +5 -4
  121. package/dist/{paths-ES3V7BWQ.js → paths-A5GAR5PL.js} +4 -3
  122. package/dist/reapply-BKJGICRJ.js +63 -0
  123. package/dist/src/index.js +23 -22
  124. package/dist/{upgrade-lock-TJPKU5HL.js → upgrade-lock-DDB7WEWC.js} +5 -4
  125. package/dist/usage-HBDNFZ3O.js +11 -0
  126. package/package.json +1 -1
  127. package/dist/chunk-7QLSKOSU.js +0 -19
  128. package/dist/chunk-EO23EUOK.js +0 -14
  129. package/dist/reapply-KA5SIYWX.js +0 -62
  130. package/dist/usage-7ALXBJVJ.js +0 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.61
4
+
5
+ - Pushary for Mac can connect Codex through its own helper, so Codex follows the account signed in to the app instead of a copied key that sign-out revokes. Setup, upgrade and doctor now recognize that entry. When setup or upgrade handles Codex's hooks itself, with `--take-over-hooks` or because the app is gone, it moves Codex's MCP to this CLI's account too, instead of leaving Codex on the Mac's account or on a helper that cannot start.
6
+ - That move also replaces a Codex configuration an older CLI could leave behind, where the Pushary entry held both the Mac helper's `command` and a `url`. Codex refuses to load any configuration with that mix, so Codex would not start at all. Any other Pushary entry with a `command`, including the helper with `args`, `env` or extra settings, is now left unchanged instead of getting a `url` beside it. An upgrade that has a key to write then leaves Codex's hooks unchanged too.
7
+ - When setup or a manual `pushary upgrade` moves an enabled Codex entry off the Mac helper, it asks you to fully quit and reopen Codex, because a running Codex keeps the connection it started with.
8
+
9
+ ## 1.9.60
10
+
11
+ - Ships the CLI audit fixes merged after 1.9.59. `pushary mode terminal_only --for=30m` now expires after 30 minutes, just like `--for 30m`, instead of making the mode permanent.
12
+ - Setup, repair and disconnect respect the active Claude configuration directory. Hook commands safely quote paths containing apostrophes, dollar signs or shell substitutions.
13
+ - Commands reject unsupported preview flags and conflicting or surplus arguments before changing configuration. Transcript recovery works through both command entrypoints, and settings requests have a 15-second deadline with validated responses.
14
+ - JSON failures carry the same exit code as the process. Unexpected hook failures report a stable error code while preserving native fallback, and transient error reports get one bounded retry. Network errors and support bundles redact proxy credentials.
15
+
3
16
  ## 1.9.59
4
17
 
5
18
  - Codex app cards now also carry three questions from Codex's browser: access to a site, a download and an upload. They used to show only in Codex, because the browser raises them itself and no hook sees them. With the switch on, each reaches Pushary as a yes or no question that names the site, and the first answer wins. A download or upload question carries the address up to the end of its path. Nothing after a `?` or `#` is in that question, and the address ends in … when something was left out; the path itself is sent.
package/README.md CHANGED
@@ -345,3 +345,9 @@ Run `pushary cowork` (or `npx pushary@latest cowork`) for connector setup. `push
345
345
  Use `pushary cowork --instructions` for standing instructions or `pushary cowork --skill > SKILL.md` to export the bundled skill for upload. `--json` reports `manual_setup_required`; printing a link does not prove a connection. Ask a test question in Claude, answer it in Pushary, and verify Claude receives it.
346
346
 
347
347
  This connector is cooperative. Cowork supports plugin hooks on supported versions, but this setup does not install or verify native permission hooks. Use the normal setup command for Claude Code CLI hooks.
348
+
349
+ ### OpenCode versions
350
+
351
+ The generated plugin supports OpenCode V2 and V1 from 1.18.29. Run setup again after updating Pushary to replace the plugin. V2 still reads the earlier MCP configuration format.
352
+
353
+ In V2, Pushary answers native permission requests for shell commands in the active directory, single-file reads/writes/edits, and web fetches. Outside-directory access, another shell working directory, multi-file edits, renames with two paths, custom permissions and native questions stay in OpenCode. An approval applies once to the matching request.
@@ -2,7 +2,11 @@
2
2
  "name": "pushary",
3
3
  "displayName": "Pushary — Control Panel for AI Agents",
4
4
  "description": "Push notifications, human-in-the-loop questions, and permission gating for your AI coding agent. Get a push when a task finishes, answer the agent from your phone, and approve risky commands before they run.",
5
- "version": "0.2.7",
5
+ "version": "0.2.8",
6
+ "minClientVersions": {
7
+ "grokbot": "never",
8
+ "sand": "never"
9
+ },
6
10
  "author": { "name": "Pushary", "email": "business@pushary.com" },
7
11
  "homepage": "https://pushary.com",
8
12
  "repository": "https://github.com/Pushary/cursor-plugin",
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.8
4
+
5
+ - Hidden from Grok Bot. This plugin needs an API key and command hooks on your own computer, which a Bot's cloud computer does not have. Grok Bot users install [Pushary for Grok Bot](https://github.com/Pushary/grok-bot-plugin) instead.
6
+
3
7
  ## 0.2.6
4
8
 
5
9
  - Under When I'm out, a file change nobody answers is refused, even when your rule approves on timeout. Cursor's file hooks have no prompt of their own, so the change used to run once the wait ended. Under Every time a rule that approves on timeout still runs the change, as before.
@@ -15,24 +15,25 @@ import {
15
15
  waitForQuestion,
16
16
  waitsForThePhone,
17
17
  withdrawQuestion
18
- } from "./chunk-WW24SG27.js";
19
- import "./chunk-5EFNBL6V.js";
18
+ } from "./chunk-RJHX66EY.js";
19
+ import "./chunk-XAO6EYGM.js";
20
20
  import "./chunk-POFBE6ZY.js";
21
- import "./chunk-MA37WNVS.js";
22
- import "./chunk-JAKBCKEB.js";
23
- import "./chunk-M46WDK64.js";
24
- import "./chunk-7QLSKOSU.js";
21
+ import "./chunk-YDR4BQ7R.js";
22
+ import "./chunk-7BAO42UV.js";
23
+ import "./chunk-SFAP4AJY.js";
24
+ import "./chunk-PPY5N2E6.js";
25
25
  import "./chunk-KZERVKTD.js";
26
- import "./chunk-KZCYHWDF.js";
27
- import "./chunk-US3IT6ZC.js";
26
+ import "./chunk-MWLTTLPK.js";
27
+ import "./chunk-CJ5TCFD4.js";
28
28
  import "./chunk-QENTGE75.js";
29
- import "./chunk-4XXZUFWN.js";
30
- import "./chunk-BMPZ5HVJ.js";
29
+ import "./chunk-BG4Y64FW.js";
30
+ import "./chunk-ERK24P76.js";
31
31
  import "./chunk-QTOLNRET.js";
32
32
  import {
33
33
  DECISION_STOP_REASON,
34
34
  UNVERIFIABLE_APPROVAL_REASON
35
- } from "./chunk-762CDAJJ.js";
35
+ } from "./chunk-AXJLJJ3M.js";
36
+ import "./chunk-MLKGABMK.js";
36
37
  export {
37
38
  DECISION_STOP_REASON,
38
39
  UNVERIFIABLE_APPROVAL_REASON,
@@ -1,44 +1,45 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-MMLIQDTG.js";
4
+ } from "../chunk-ATKN4BJT.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-KQHY6L3X.js";
8
- import "../chunk-2WMZDKPM.js";
7
+ } from "../chunk-6FJ6CK32.js";
8
+ import "../chunk-EUIPTDLX.js";
9
9
  import "../chunk-QW3FRUFB.js";
10
- import "../chunk-KQWN7C5C.js";
11
- import "../chunk-4QF2YLYK.js";
12
- import "../chunk-X4ES7QBT.js";
13
- import "../chunk-TDOKDCFH.js";
14
- import "../chunk-75UYYIFJ.js";
15
- import "../chunk-AS4Z6KS4.js";
16
- import "../chunk-GMXKITVA.js";
17
- import "../chunk-PVANKDWM.js";
18
- import "../chunk-3N2ZTHZZ.js";
19
- import "../chunk-D6CXQIXO.js";
10
+ import "../chunk-GKFO5JLN.js";
11
+ import "../chunk-LBHJJEKT.js";
12
+ import "../chunk-BJTSKOH3.js";
13
+ import "../chunk-RGSW36XH.js";
14
+ import "../chunk-XV6S5PWW.js";
15
+ import "../chunk-IFPOHFDJ.js";
16
+ import "../chunk-NMUI3ZWG.js";
17
+ import "../chunk-2AELPDMT.js";
18
+ import "../chunk-GAMVAORR.js";
19
+ import "../chunk-7JXJJNQ5.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
21
  import "../chunk-6ICPEJY5.js";
22
- import "../chunk-KAJDKYUM.js";
23
- import "../chunk-5JWCWALO.js";
24
- import "../chunk-W47WL6JY.js";
25
- import "../chunk-XGP5VSQG.js";
26
- import "../chunk-WW24SG27.js";
27
- import "../chunk-5EFNBL6V.js";
22
+ import "../chunk-WN3RACVD.js";
23
+ import "../chunk-DQLCFGHK.js";
24
+ import "../chunk-33OOEVPG.js";
25
+ import "../chunk-YPD3MTFU.js";
26
+ import "../chunk-RJHX66EY.js";
27
+ import "../chunk-XAO6EYGM.js";
28
28
  import "../chunk-POFBE6ZY.js";
29
- import "../chunk-MA37WNVS.js";
30
- import "../chunk-JAKBCKEB.js";
31
- import "../chunk-M46WDK64.js";
32
- import "../chunk-7QLSKOSU.js";
29
+ import "../chunk-YDR4BQ7R.js";
30
+ import "../chunk-7BAO42UV.js";
31
+ import "../chunk-SFAP4AJY.js";
32
+ import "../chunk-PPY5N2E6.js";
33
33
  import "../chunk-KZERVKTD.js";
34
- import "../chunk-3RKIJM26.js";
35
- import "../chunk-KZCYHWDF.js";
36
- import "../chunk-US3IT6ZC.js";
34
+ import "../chunk-Y5VKZNFN.js";
35
+ import "../chunk-MWLTTLPK.js";
36
+ import "../chunk-CJ5TCFD4.js";
37
37
  import "../chunk-QENTGE75.js";
38
- import "../chunk-4XXZUFWN.js";
39
- import "../chunk-BMPZ5HVJ.js";
38
+ import "../chunk-BG4Y64FW.js";
39
+ import "../chunk-ERK24P76.js";
40
40
  import "../chunk-QTOLNRET.js";
41
- import "../chunk-762CDAJJ.js";
41
+ import "../chunk-AXJLJJ3M.js";
42
+ import "../chunk-MLKGABMK.js";
42
43
 
43
44
  // bin/pushary-bell-hook.ts
44
45
  var main = async () => {
@@ -5,41 +5,42 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-MMLIQDTG.js";
8
+ } from "../chunk-ATKN4BJT.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-FO3MDD26.js";
12
12
  import {
13
13
  exitOnHelpFlag
14
- } from "../chunk-UVZK5LIK.js";
14
+ } from "../chunk-K4MBKXAE.js";
15
15
  import {
16
16
  addBellHooks,
17
17
  bellInstalled,
18
18
  removeBellHooks
19
- } from "../chunk-AS4Z6KS4.js";
19
+ } from "../chunk-IFPOHFDJ.js";
20
20
  import {
21
21
  parseFlags
22
- } from "../chunk-GMXKITVA.js";
23
- import "../chunk-KAJDKYUM.js";
24
- import "../chunk-7QLSKOSU.js";
22
+ } from "../chunk-NMUI3ZWG.js";
23
+ import "../chunk-WN3RACVD.js";
24
+ import "../chunk-PPY5N2E6.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-3RKIJM26.js";
28
+ import "../chunk-Y5VKZNFN.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-KZCYHWDF.js";
32
- import "../chunk-US3IT6ZC.js";
31
+ } from "../chunk-MWLTTLPK.js";
32
+ import "../chunk-CJ5TCFD4.js";
33
33
  import {
34
34
  readJsonSafe,
35
35
  writeJsonAtomic
36
36
  } from "../chunk-QENTGE75.js";
37
- import "../chunk-4XXZUFWN.js";
38
- import "../chunk-BMPZ5HVJ.js";
37
+ import "../chunk-BG4Y64FW.js";
38
+ import "../chunk-ERK24P76.js";
39
39
  import "../chunk-QTOLNRET.js";
40
40
  import {
41
41
  isRecord
42
- } from "../chunk-762CDAJJ.js";
42
+ } from "../chunk-AXJLJJ3M.js";
43
+ import "../chunk-MLKGABMK.js";
43
44
 
44
45
  // bin/pushary-bell.ts
45
46
  exitOnHelpFlag("bell");
@@ -8,40 +8,40 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-MSU3VKGJ.js";
11
+ } from "../chunk-SHJVFW22.js";
12
12
  import "../chunk-VUFHYMSP.js";
13
13
  import {
14
14
  announceSubscriptionRequired,
15
15
  isDeferAnswer
16
- } from "../chunk-LAEW5QQD.js";
16
+ } from "../chunk-ZEWIMY63.js";
17
17
  import {
18
18
  claudeTranscriptPath,
19
19
  loadSessionKey,
20
20
  registerTranscript,
21
21
  registeredTranscriptEnabled
22
- } from "../chunk-2WMZDKPM.js";
22
+ } from "../chunk-EUIPTDLX.js";
23
23
  import "../chunk-QW3FRUFB.js";
24
24
  import {
25
25
  ensureDaemonRunning
26
- } from "../chunk-4QF2YLYK.js";
27
- import "../chunk-X4ES7QBT.js";
28
- import "../chunk-TDOKDCFH.js";
29
- import "../chunk-75UYYIFJ.js";
30
- import "../chunk-AS4Z6KS4.js";
31
- import "../chunk-GMXKITVA.js";
26
+ } from "../chunk-LBHJJEKT.js";
27
+ import "../chunk-BJTSKOH3.js";
28
+ import "../chunk-RGSW36XH.js";
29
+ import "../chunk-XV6S5PWW.js";
30
+ import "../chunk-IFPOHFDJ.js";
31
+ import "../chunk-NMUI3ZWG.js";
32
32
  import {
33
33
  encryptRecord
34
- } from "../chunk-PVANKDWM.js";
35
- import "../chunk-3N2ZTHZZ.js";
34
+ } from "../chunk-2AELPDMT.js";
35
+ import "../chunk-GAMVAORR.js";
36
36
  import {
37
37
  transcriptsEnabled
38
- } from "../chunk-D6CXQIXO.js";
38
+ } from "../chunk-7JXJJNQ5.js";
39
39
  import {
40
40
  needsShell,
41
41
  spawnClaude
42
42
  } from "../chunk-XHKBHWLX.js";
43
43
  import "../chunk-6ICPEJY5.js";
44
- import "../chunk-KAJDKYUM.js";
44
+ import "../chunk-WN3RACVD.js";
45
45
  import {
46
46
  DEFAULT_SESSION,
47
47
  UNNAMED_ACTION,
@@ -58,11 +58,11 @@ import {
58
58
  reportEvent,
59
59
  savePendingCommand,
60
60
  scopePathFor
61
- } from "../chunk-5JWCWALO.js";
62
- import "../chunk-W47WL6JY.js";
61
+ } from "../chunk-DQLCFGHK.js";
62
+ import "../chunk-33OOEVPG.js";
63
63
  import {
64
64
  repoKeyFor
65
- } from "../chunk-XGP5VSQG.js";
65
+ } from "../chunk-YPD3MTFU.js";
66
66
  import {
67
67
  askUser,
68
68
  cancelQuestion,
@@ -73,29 +73,31 @@ import {
73
73
  waitForAnswer,
74
74
  waitsForThePhone,
75
75
  withdrawQuestion
76
- } from "../chunk-WW24SG27.js";
76
+ } from "../chunk-RJHX66EY.js";
77
77
  import {
78
78
  SubscriptionRequiredError
79
- } from "../chunk-5EFNBL6V.js";
79
+ } from "../chunk-XAO6EYGM.js";
80
80
  import "../chunk-POFBE6ZY.js";
81
- import "../chunk-MA37WNVS.js";
82
- import "../chunk-JAKBCKEB.js";
81
+ import "../chunk-YDR4BQ7R.js";
82
+ import "../chunk-7BAO42UV.js";
83
83
  import {
84
84
  getMachineId
85
- } from "../chunk-M46WDK64.js";
86
- import "../chunk-7QLSKOSU.js";
85
+ } from "../chunk-SFAP4AJY.js";
86
+ import "../chunk-PPY5N2E6.js";
87
87
  import "../chunk-KZERVKTD.js";
88
- import "../chunk-3RKIJM26.js";
89
- import "../chunk-KZCYHWDF.js";
90
- import "../chunk-US3IT6ZC.js";
88
+ import "../chunk-Y5VKZNFN.js";
89
+ import {
90
+ claudeConfigDir
91
+ } from "../chunk-MWLTTLPK.js";
92
+ import "../chunk-CJ5TCFD4.js";
91
93
  import "../chunk-QENTGE75.js";
92
94
  import {
93
95
  getApiKey,
94
96
  getBaseUrl
95
- } from "../chunk-4XXZUFWN.js";
97
+ } from "../chunk-BG4Y64FW.js";
96
98
  import {
97
99
  NPX_LATEST_COMMAND
98
- } from "../chunk-BMPZ5HVJ.js";
100
+ } from "../chunk-ERK24P76.js";
99
101
  import "../chunk-QTOLNRET.js";
100
102
  import {
101
103
  DECISION_STOP_REASON,
@@ -106,7 +108,8 @@ import {
106
108
  redactSecretsFromContent,
107
109
  resolveGate,
108
110
  timeoutActionWithoutLocalPrompt
109
- } from "../chunk-762CDAJJ.js";
111
+ } from "../chunk-AXJLJJ3M.js";
112
+ import "../chunk-MLKGABMK.js";
110
113
 
111
114
  // src/wrapper/localPassthrough.ts
112
115
  var SIGNAL_NUMBERS = {
@@ -1228,7 +1231,6 @@ var remoteCompatibilityIssue = (args2) => {
1228
1231
 
1229
1232
  // src/wrapper/localLeg.ts
1230
1233
  import { readFileSync } from "fs";
1231
- import { homedir as homedir2 } from "os";
1232
1234
  import { join as join2 } from "path";
1233
1235
  var SIGNAL_EXIT_BASE = 128;
1234
1236
  var SIGNAL_NUMBERS2 = { SIGHUP: 1, SIGINT: 2, SIGTERM: 15 };
@@ -1299,7 +1301,7 @@ var runLocalLeg = (session, deps = {}) => {
1299
1301
  const readIdentity = () => {
1300
1302
  if (!child.pid) return;
1301
1303
  try {
1302
- const root = process.env.CLAUDE_CONFIG_DIR || join2(homedir2(), ".claude");
1304
+ const root = claudeConfigDir();
1303
1305
  const record = JSON.parse(readFileSync(join2(root, "sessions", `${child.pid}.json`), "utf8"));
1304
1306
  if (record.pid !== child.pid || record.cwd !== process.cwd() || record.startedAt < spawnedAt - 5e3 || typeof record.startedAt !== "number" || !/^[a-f0-9-]{36}$/i.test(record.sessionId)) return;
1305
1307
  if (record.sessionId !== session.getSessionId()) session.setSessionId(record.sessionId);
@@ -15,26 +15,26 @@ import {
15
15
  storedMacAppState,
16
16
  storedPusharyKeychainServices,
17
17
  waitForMacAppExit
18
- } from "../chunk-TCH5UCPR.js";
18
+ } from "../chunk-BQ2VV7LY.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-CPRA7IEK.js";
24
+ import "../chunk-PITQ5ZIQ.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-DK35M4TH.js";
32
- import "../chunk-DS7X36Z3.js";
31
+ } from "../chunk-Y6Z7DA5Y.js";
32
+ import "../chunk-64S5PQBQ.js";
33
33
  import {
34
34
  isCursorPluginLeftover,
35
35
  releaseSoleGate,
36
36
  withoutPusharyCursorHooks
37
- } from "../chunk-MYU5D5VH.js";
37
+ } from "../chunk-GZCSWDAS.js";
38
38
  import {
39
39
  HERMES_PIP_PACKAGE,
40
40
  readHermesStatus,
@@ -43,21 +43,21 @@ import {
43
43
  shortenHome,
44
44
  unregisterPluginLocation,
45
45
  vscodeSettingsTargets
46
- } from "../chunk-YQVKG5MC.js";
46
+ } from "../chunk-GDKQUB52.js";
47
47
  import {
48
48
  macAppKeepsMcpEntry,
49
49
  mcpServerBearer,
50
50
  pusharyKey,
51
51
  readMacAppAgentKey,
52
52
  setupReceiptKey
53
- } from "../chunk-EHCIQA5D.js";
53
+ } from "../chunk-KPNZ7JUL.js";
54
54
  import "../chunk-QCGNGEGE.js";
55
- import "../chunk-AY32RSUC.js";
55
+ import "../chunk-ADR3KHOC.js";
56
56
  import {
57
57
  planFxRemoval,
58
58
  removeInstructionBlock
59
- } from "../chunk-6ONSTCDJ.js";
60
- import "../chunk-3NROUNIS.js";
59
+ } from "../chunk-4VRTSDGP.js";
60
+ import "../chunk-UADSXJZ4.js";
61
61
  import {
62
62
  OPENCODE_PLUGIN_SIBLING,
63
63
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -69,14 +69,14 @@ import {
69
69
  openCodePluginDir,
70
70
  openCodePluginFile,
71
71
  removeOpenCodeMcpServer
72
- } from "../chunk-JBCMXSBO.js";
72
+ } from "../chunk-ZGU3NXL2.js";
73
73
  import {
74
74
  ansiPainter,
75
75
  useColor
76
76
  } from "../chunk-FO3MDD26.js";
77
77
  import {
78
78
  exitOnHelpFlag
79
- } from "../chunk-UVZK5LIK.js";
79
+ } from "../chunk-K4MBKXAE.js";
80
80
  import "../chunk-VUFHYMSP.js";
81
81
  import {
82
82
  compatibleConfigFile,
@@ -94,10 +94,10 @@ import {
94
94
  removePusharyToolPermissions,
95
95
  restoreClaudeMcpServer,
96
96
  serializeConfigDocument
97
- } from "../chunk-KQWN7C5C.js";
97
+ } from "../chunk-GKFO5JLN.js";
98
98
  import {
99
99
  disableDaemonService
100
- } from "../chunk-4QF2YLYK.js";
100
+ } from "../chunk-LBHJJEKT.js";
101
101
  import {
102
102
  hookOwnerOf,
103
103
  isHookTakeoverReceipt,
@@ -105,15 +105,15 @@ import {
105
105
  resolveBridgeStub,
106
106
  restoreHookTakeover,
107
107
  restoreMcpServer
108
- } from "../chunk-X4ES7QBT.js";
108
+ } from "../chunk-BJTSKOH3.js";
109
109
  import {
110
110
  removeGeminiSettings
111
- } from "../chunk-TDOKDCFH.js";
112
- import "../chunk-75UYYIFJ.js";
113
- import "../chunk-AS4Z6KS4.js";
111
+ } from "../chunk-RGSW36XH.js";
112
+ import "../chunk-XV6S5PWW.js";
113
+ import "../chunk-IFPOHFDJ.js";
114
114
  import {
115
- rejectUnknownFlags
116
- } from "../chunk-GMXKITVA.js";
115
+ parseFlags
116
+ } from "../chunk-NMUI3ZWG.js";
117
117
  import "../chunk-XHKBHWLX.js";
118
118
  import "../chunk-6ICPEJY5.js";
119
119
  import {
@@ -121,32 +121,35 @@ import {
121
121
  isDisabledExport,
122
122
  removeClaudeAlias,
123
123
  shellProfileCandidates
124
- } from "../chunk-KAJDKYUM.js";
124
+ } from "../chunk-WN3RACVD.js";
125
125
  import "../chunk-E46NE7FB.js";
126
- import "../chunk-5JWCWALO.js";
127
- import "../chunk-W47WL6JY.js";
128
- import "../chunk-XGP5VSQG.js";
129
- import "../chunk-WW24SG27.js";
130
- import "../chunk-5EFNBL6V.js";
126
+ import "../chunk-DQLCFGHK.js";
127
+ import "../chunk-33OOEVPG.js";
128
+ import "../chunk-YPD3MTFU.js";
129
+ import "../chunk-RJHX66EY.js";
130
+ import "../chunk-XAO6EYGM.js";
131
131
  import "../chunk-POFBE6ZY.js";
132
- import "../chunk-MA37WNVS.js";
133
- import "../chunk-JAKBCKEB.js";
134
- import "../chunk-M46WDK64.js";
135
- import "../chunk-7QLSKOSU.js";
132
+ import "../chunk-YDR4BQ7R.js";
133
+ import "../chunk-7BAO42UV.js";
134
+ import "../chunk-SFAP4AJY.js";
135
+ import "../chunk-PPY5N2E6.js";
136
136
  import {
137
137
  EXIT
138
138
  } from "../chunk-KZERVKTD.js";
139
- import "../chunk-3RKIJM26.js";
139
+ import "../chunk-Y5VKZNFN.js";
140
140
  import {
141
+ claudeConfigDir,
141
142
  claudeJson,
142
143
  claudeMcpReceipt,
143
144
  claudeSettings,
144
145
  claudeSettingsLocal,
145
146
  claudeSkillDir,
147
+ claudeUserConfigFile,
146
148
  codexAgentsMd,
147
149
  codexConfigToml,
148
150
  codexHookPositions,
149
151
  codexHooksJson,
152
+ codexMcpMixesCommandWithHttp,
150
153
  codexSkillDir,
151
154
  cursorPluginDir,
152
155
  cursorUserHooks,
@@ -168,21 +171,21 @@ import {
168
171
  restoreCodexHookTrust,
169
172
  vscodePluginDir,
170
173
  vscodePluginMcp
171
- } from "../chunk-KZCYHWDF.js";
174
+ } from "../chunk-MWLTTLPK.js";
172
175
  import {
173
176
  cleanNpmEnv,
174
177
  globalPackageState,
175
178
  npmIsOnPath,
176
179
  readGlobalFolder,
177
180
  readGlobalPrefix
178
- } from "../chunk-US3IT6ZC.js";
181
+ } from "../chunk-CJ5TCFD4.js";
179
182
  import "../chunk-QENTGE75.js";
180
183
  import {
181
184
  getBaseUrl
182
- } from "../chunk-4XXZUFWN.js";
185
+ } from "../chunk-BG4Y64FW.js";
183
186
  import {
184
187
  NPX_LATEST_COMMAND
185
- } from "../chunk-BMPZ5HVJ.js";
188
+ } from "../chunk-ERK24P76.js";
186
189
  import {
187
190
  CLI_PACKAGE_NAMES,
188
191
  globalPackageFolder,
@@ -196,11 +199,12 @@ import {
196
199
  SUPPORT_EMAIL,
197
200
  isValidApiKey,
198
201
  redactSecrets
199
- } from "../chunk-762CDAJJ.js";
202
+ } from "../chunk-AXJLJJ3M.js";
203
+ import "../chunk-MLKGABMK.js";
200
204
 
201
205
  // bin/pushary-clean.ts
202
206
  import { existsSync as existsSync5, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
203
- import { dirname, join as join5 } from "path";
207
+ import { dirname as dirname2, join as join5 } from "path";
204
208
  import { homedir as homedir4, tmpdir } from "os";
205
209
  import { confirm } from "@inquirer/prompts";
206
210
  import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
@@ -357,11 +361,11 @@ var skillsStoreRemoval = (home = homedir2()) => {
357
361
  // src/cli/claude-backups.ts
358
362
  import { existsSync as existsSync4, readFileSync as readFileSync3, readdirSync as readdirSync2 } from "fs";
359
363
  import { homedir as homedir3 } from "os";
360
- import { join as join3 } from "path";
364
+ import { dirname, join as join3 } from "path";
361
365
  var BACKUP_PREFIX = ".claude.json.backup";
362
366
  var claudeJsonBackups = (home = homedir3()) => {
363
- const rollingDir = join3(home, ".claude", "backups");
364
- const legacy = join3(home, BACKUP_PREFIX);
367
+ const rollingDir = join3(claudeConfigDir(home), "backups");
368
+ const legacy = join3(dirname(claudeUserConfigFile(home)), BACKUP_PREFIX);
365
369
  const rolling = existsSync4(rollingDir) ? readdirSync2(rollingDir).filter((name) => name.startsWith(BACKUP_PREFIX)).sort().map((name) => join3(rollingDir, name)) : [];
366
370
  return existsSync4(legacy) ? [...rolling, legacy] : rolling;
367
371
  };
@@ -572,7 +576,7 @@ var guards = createGuards(() => dryRun, wouldNote);
572
576
  var guardedWrite = (path, contents) => guards.write(path, contents);
573
577
  var guardedRemove = (path, options) => guards.remove(path, options);
574
578
  var cursorPluginLeftovers = () => {
575
- const parent = dirname(CURSOR_PLUGIN_DIR);
579
+ const parent = dirname2(CURSOR_PLUGIN_DIR);
576
580
  try {
577
581
  return readdirSync4(parent).filter(isCursorPluginLeftover).map((name) => join5(parent, name));
578
582
  } catch {
@@ -666,13 +670,13 @@ var cleanSettingsFile = (path, label, scope) => {
666
670
  };
667
671
  var agentConfigDirectories = () => [
668
672
  homedir4(),
669
- dirname(CLAUDE_SETTINGS),
670
- dirname(codexConfigToml()),
671
- dirname(geminiSettings()),
672
- dirname(CURSOR_USER_HOOKS),
673
+ dirname2(CLAUDE_SETTINGS),
674
+ dirname2(codexConfigToml()),
675
+ dirname2(geminiSettings()),
676
+ dirname2(CURSOR_USER_HOOKS),
673
677
  openCodeConfigDir(),
674
678
  fxConfigDir(),
675
- ...vscodeSettingsTargets(existsSync5).map((settings) => dirname(settings))
679
+ ...vscodeSettingsTargets(existsSync5).map((settings) => dirname2(settings))
676
680
  ];
677
681
  var restoreTakeoverReceipts = () => {
678
682
  const targets = [
@@ -754,23 +758,26 @@ var main = async () => {
754
758
  console.log(` ${bold("Pushary Clean")}`);
755
759
  console.log(` ${dim("Removes all Pushary configuration")}`);
756
760
  console.log();
761
+ let flags;
757
762
  try {
758
- rejectUnknownFlags(
759
- process.argv.slice(2).filter((a) => a !== "clean"),
760
- ["--dry-run", "--everything", "--yes", "-y", "--help", "-h"]
763
+ const args = process.argv.slice(2);
764
+ flags = parseFlags(
765
+ args[0] === "clean" ? args.slice(1) : args,
766
+ { bools: ["dry-run", "everything", "yes", "y"], values: [] }
761
767
  );
768
+ if (flags.command !== void 0 || flags.rest.length > 0) throw new Error("clean takes no positional arguments");
762
769
  } catch (err) {
763
770
  process.stderr.write(` ! ${err instanceof Error ? err.message : String(err)}
764
771
  `);
765
772
  process.exit(EXIT.USAGE);
766
773
  }
767
- dryRun = process.argv.includes("--dry-run");
768
- const everything = process.argv.includes("--everything");
774
+ dryRun = flags.bools.has("dry-run");
775
+ const everything = flags.bools.has("everything");
769
776
  if (dryRun) {
770
777
  console.log(` ${bold("Dry run")} ${dim("- nothing will be changed")}`);
771
778
  console.log();
772
779
  }
773
- const assumeYes = dryRun || process.argv.includes("--yes") || process.argv.includes("-y");
780
+ const assumeYes = dryRun || flags.bools.has("yes") || flags.bools.has("y");
774
781
  if (!assumeYes && !process.stdin.isTTY) {
775
782
  console.log(` ${yellow("!")} Non-interactive shell. Re-run with --yes to confirm removal.`);
776
783
  process.exit(1);
@@ -858,7 +865,7 @@ var main = async () => {
858
865
  console.log(` ${skip} Claude Code MCP servers ${dim("(setup receipt is unreadable; left unchanged)")}`);
859
866
  } else if (receipt && restoreClaudeMcpServer(claudeJson2, receipt) || !receipt && removeClaudeMcpServers(claudeJson2)) {
860
867
  writeJson(CLAUDE_JSON, claudeJson2);
861
- console.log(` ${check} Claude Code MCP servers ${dim(receipt ? "(previous entry restored)" : "(removed from ~/.claude.json)")}`);
868
+ console.log(` ${check} Claude Code MCP servers ${dim(receipt ? "(previous entry restored)" : `(removed from ${shortenHome(CLAUDE_JSON)})`)}`);
862
869
  if (keepShared && receipt) guardedRemove(CLAUDE_MCP_RECEIPT, { force: true });
863
870
  } else {
864
871
  if (receipt && !keepShared) incompleteClean = true;
@@ -975,7 +982,7 @@ var main = async () => {
975
982
  const trustRemoved = hookOwnerOf(codexHooksData) === "app" && keepShared ? false : removeCodexHookTrust(parsed2, codexHooksJson2, codexPositions);
976
983
  const hadPushary = config.includes("pushary");
977
984
  if (hadPushary || trustRemoved) {
978
- const macAppKeepsCodexMcp = macAppKeeps("codex", codexMcpKey(parsed2));
985
+ const macAppKeepsCodexMcp = !codexMcpMixesCommandWithHttp(parsed2.mcp_servers?.pushary) && macAppKeeps("codex", codexMcpKey(parsed2));
979
986
  if (!macAppKeepsCodexMcp) {
980
987
  const mcpServers = parsed2.mcp_servers ?? {};
981
988
  delete mcpServers.pushary;