@pushary/agent-hooks 1.6.4 → 1.7.0

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 (98) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +3 -2
  3. package/dist/bin/pushary-bell-hook.js +23 -24
  4. package/dist/bin/pushary-bell.js +9 -10
  5. package/dist/bin/pushary-claude.js +27 -28
  6. package/dist/bin/pushary-clean.js +85 -28
  7. package/dist/bin/pushary-codex-bridge.js +17 -18
  8. package/dist/bin/pushary-codex-hook.js +30 -31
  9. package/dist/bin/pushary-codex.js +12 -13
  10. package/dist/bin/pushary-connect.js +13 -14
  11. package/dist/bin/pushary-cowork.js +5 -6
  12. package/dist/bin/pushary-daemon.js +27 -28
  13. package/dist/bin/pushary-disconnect.js +17 -18
  14. package/dist/bin/pushary-doctor.js +71 -36
  15. package/dist/bin/pushary-elicitation-hook.js +24 -25
  16. package/dist/bin/pushary-gemini-bridge.js +12 -13
  17. package/dist/bin/pushary-gemini-hook.js +27 -28
  18. package/dist/bin/pushary-hook.js +31 -32
  19. package/dist/bin/pushary-login.js +13 -15
  20. package/dist/bin/pushary-logout.js +7 -8
  21. package/dist/bin/pushary-mcp.d.ts +1 -0
  22. package/dist/bin/pushary-mcp.js +56 -0
  23. package/dist/bin/pushary-mode.js +9 -10
  24. package/dist/bin/pushary-notification-hook.js +27 -28
  25. package/dist/bin/pushary-opencode-hook.js +26 -27
  26. package/dist/bin/pushary-permission-denied-hook.js +31 -32
  27. package/dist/bin/pushary-permission-hook.js +30 -31
  28. package/dist/bin/pushary-post-hook.js +27 -28
  29. package/dist/bin/pushary-prompt-hook.js +27 -28
  30. package/dist/bin/pushary-session-end-hook.js +27 -28
  31. package/dist/bin/pushary-session-start-hook.js +31 -32
  32. package/dist/bin/pushary-setup.js +183 -73
  33. package/dist/bin/pushary-stats.js +5 -6
  34. package/dist/bin/pushary-status.js +15 -16
  35. package/dist/bin/pushary-stop-hook.js +27 -28
  36. package/dist/bin/pushary-stopfailure-hook.js +27 -28
  37. package/dist/bin/pushary-suggestions.js +4 -4
  38. package/dist/bin/pushary-transcript-register.js +19 -20
  39. package/dist/bin/pushary-transcripts.js +7 -8
  40. package/dist/bin/pushary-upgrade.js +20 -21
  41. package/dist/bin/pushary-wait.js +9 -10
  42. package/dist/bin/pushary.js +6 -7
  43. package/dist/{chunk-5UWV5GHM.js → chunk-2C7CCWVX.js} +1 -1
  44. package/dist/{chunk-P4BNYJ5Q.js → chunk-2PS6QWDW.js} +2 -2
  45. package/dist/{chunk-JOGA3TL2.js → chunk-4F46VIEE.js} +6 -6
  46. package/dist/{chunk-NYMPLNV3.js → chunk-52NVBNJT.js} +3 -3
  47. package/dist/{chunk-I3XJATMR.js → chunk-5HLTWFJ6.js} +1 -1
  48. package/dist/{chunk-HUB4Q35G.js → chunk-6ADZQFVW.js} +1 -1
  49. package/dist/{chunk-OZE2TQX5.js → chunk-73T6MSU5.js} +5 -5
  50. package/dist/{chunk-53DN77WB.js → chunk-7OS4IHGI.js} +2 -2
  51. package/dist/{chunk-BY2CRWBO.js → chunk-B234346F.js} +1 -1
  52. package/dist/{chunk-EA3IELHP.js → chunk-B3UXMSMW.js} +6 -2
  53. package/dist/{chunk-3VZX4NSP.js → chunk-B3YQANFN.js} +1 -1
  54. package/dist/{chunk-VA2R64I7.js → chunk-B76WVEDX.js} +1 -1
  55. package/dist/{chunk-YPONELWS.js → chunk-BBKNJJVX.js} +6 -6
  56. package/dist/{chunk-XOMH53NB.js → chunk-BH2SKSSK.js} +1 -1
  57. package/dist/{chunk-P4UYILQK.js → chunk-BWYJ6AAF.js} +2 -2
  58. package/dist/{chunk-I2YUMZLE.js → chunk-CVALVGA7.js} +1 -1
  59. package/dist/{chunk-6NLWK6ZV.js → chunk-D6BULEJW.js} +2 -2
  60. package/dist/{chunk-N62KAMMY.js → chunk-DANOZVZK.js} +1 -1
  61. package/dist/{chunk-K32C2RGK.js → chunk-DNJUSFBL.js} +11 -5
  62. package/dist/{chunk-5U3FJ6YF.js → chunk-DVQDPI3T.js} +8 -8
  63. package/dist/{chunk-YUGGNZSF.js → chunk-DZURML2D.js} +1 -1
  64. package/dist/{chunk-D3K2FPPJ.js → chunk-EAQMWJPG.js} +8 -8
  65. package/dist/{chunk-EREBZHN2.js → chunk-EGKXSQCY.js} +4 -4
  66. package/dist/{chunk-XJG2FUWS.js → chunk-HDRNWNVP.js} +6 -6
  67. package/dist/{chunk-H6XU22TN.js → chunk-IJ6ECPA6.js} +8 -8
  68. package/dist/{chunk-3LU74H52.js → chunk-J2355HR7.js} +1 -1
  69. package/dist/{chunk-BJENQBMH.js → chunk-JNXVOU6Y.js} +8 -4
  70. package/dist/{chunk-GBL4BTG3.js → chunk-JXUAXO74.js} +2 -2
  71. package/dist/{chunk-DESAUCH2.js → chunk-KW2RRR7D.js} +4 -6
  72. package/dist/{chunk-66H2QQAK.js → chunk-KXMZMZD3.js} +1 -1
  73. package/dist/{chunk-ZA5UXRNE.js → chunk-KYQXUGH7.js} +3 -3
  74. package/dist/{chunk-NFH73H5B.js → chunk-L4H2Q2S4.js} +276 -19
  75. package/dist/{chunk-LDRGVXLR.js → chunk-LEZFOTMI.js} +1 -1
  76. package/dist/{chunk-PBKEYMAO.js → chunk-O2LEPIU6.js} +1 -1
  77. package/dist/{chunk-YXPGFRRW.js → chunk-PQ4F64M2.js} +3 -3
  78. package/dist/{chunk-LFMOYHPY.js → chunk-PUDBG3GM.js} +1 -1
  79. package/dist/{chunk-YQMFGWBD.js → chunk-QXAK5RFU.js} +1 -1
  80. package/dist/{chunk-5SWQZ6HY.js → chunk-R2XCLT6I.js} +4 -4
  81. package/dist/{chunk-VHNDE3ZD.js → chunk-ROQK7IN3.js} +2 -2
  82. package/dist/{chunk-GU3EJCVV.js → chunk-S3UD4V6W.js} +39 -0
  83. package/dist/{chunk-PJF7L7AA.js → chunk-SQRWHALT.js} +2 -2
  84. package/dist/{chunk-UAP556WK.js → chunk-UC65FJJT.js} +2 -2
  85. package/dist/{chunk-R4HVHTNA.js → chunk-UOAQ6QMP.js} +2 -2
  86. package/dist/{chunk-OSJEMXSR.js → chunk-V4AQBAVG.js} +1 -1
  87. package/dist/{chunk-VOCZHOXV.js → chunk-V6QRSU2G.js} +4 -4
  88. package/dist/{chunk-LQI7W4RG.js → chunk-VKVIAZQO.js} +1 -1
  89. package/dist/{chunk-LJEL7IB5.js → chunk-WUNZAE7I.js} +5 -5
  90. package/dist/{chunk-UGKDBJJX.js → chunk-X6KDKOV5.js} +3 -3
  91. package/dist/{chunk-DZTKLE7Q.js → chunk-XNCMT7YY.js} +1 -1
  92. package/dist/{chunk-CAS7GFWI.js → chunk-YROGUPOZ.js} +75 -5
  93. package/dist/chunk-YYINL576.js +120 -0
  94. package/dist/{chunk-7CLTSZOL.js → chunk-ZQ7IDOKY.js} +3 -3
  95. package/dist/{reapply-4DAJKNVP.js → reapply-6PH3FMPX.js} +9 -10
  96. package/dist/src/index.js +19 -20
  97. package/package.json +2 -1
  98. package/dist/chunk-HWJW3CPO.js +0 -65
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.7.0
4
+
5
+ - **fx.** `npx @pushary/agent-hooks@latest setup --agents fx`, or ticking fx in the picker, connects Vercel Labs' fx coding agent. Setup adds a `pushary` server to `~/.fx/mcp.json` that runs the new `pushary-mcp` command, a local bridge that signs in with the key setup saved in `~/.pushary`. No key is written to fx's files, and a rotated key is used without running setup again. fx has no hooks other tools can register, so Pushary cannot answer fx's own approval prompts; fx's agent asks through Pushary's tools when it chooses to, guided by a managed block setup writes to `~/.fx/AGENTS.md`.
6
+ - Setup adds `"mcp_pushary_*": "allow"` to the `permission` rules in `~/.fx/settings.json`, after your own rules, so fx runs Pushary's tools without reviewing or prompting for each call, the same as the other agents' auto-allowed Pushary tools. A rule you already set for `mcp_pushary_*` is kept. fx workspaces that set their own permission rules replace the global ones, and setup names how many there are.
7
+ - Setup leaves `~/.fx/mcp.json` and `~/.fx/settings.json` untouched when fx itself would reject or refuse to edit them (comments, a trailing comma, a repeated key, or servers under a key fx ignores) and prints the command that retries only fx. It writes both files as compact JSON, the way fx does, and leaves a file alone rather than grow it past the size fx reads. It skips fx on a machine with no `~/.fx`, and on Windows, which fx does not support. fx is ticked automatically only when fx's own files are there, since other tools use `~/.fx` too.
8
+ - `pushary doctor` checks the fx entry and that its bridge is installed, and warns when Pushary's tools are not auto-allowed. `pushary clean` removes only the Pushary server, the allow rule it added, and the instructions block.
9
+ - `pushary setup --help` lists every agent id setup accepts.
10
+
3
11
  ## 1.6.4
4
12
 
5
13
  - Requests to Pushary now say which client made them: the CLI version, the platform, a per-process run id, and the machine id this machine already has. They go only to Pushary's own address, never to npm or any other host, and never include file paths, keys or content. Support can then find a problem from your account instead of asking for terminal output.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dm/@pushary/agent-hooks.svg)](https://www.npmjs.com/package/@pushary/agent-hooks)
5
5
  [![license](https://img.shields.io/npm/l/@pushary/agent-hooks.svg)](./LICENSE)
6
6
 
7
- Push notifications, questions, and permission approvals for AI agents. Get a push when your agent finishes work, answer its questions from your phone, and approve risky commands before they run. Works with Claude Code, Codex, Cursor, VS Code, OpenCode, Gemini CLI, and Hermes.
7
+ Push notifications, questions, and permission approvals for AI agents. Get a push when your agent finishes work, answer its questions from your phone, and approve risky commands before they run. Works with Claude Code, Codex, Cursor, VS Code, OpenCode, Gemini CLI, Hermes, and fx.
8
8
 
9
9
  Your agent froze waiting for a yes. This is how it reaches you.
10
10
 
@@ -111,6 +111,7 @@ npx @pushary/agent-hooks@latest doctor
111
111
  | Hermes | yes | yes | yes |
112
112
  | VS Code | yes | yes | yes |
113
113
  | OpenCode | yes | yes | yes |
114
+ | fx | yes | yes | no |
114
115
 
115
116
  Any other MCP client can use notify and ask by pointing at the Pushary MCP endpoint directly.
116
117
 
@@ -184,7 +185,7 @@ failing closed would let one malformed download silence every hook on the machin
184
185
 
185
186
  ```
186
187
  cowork Set up Claude Desktop and Cowork with the Pushary connector
187
- setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, VS Code, or OpenCode with Pushary
188
+ setup Configure Claude Code, Codex, Gemini CLI, Hermes, Cursor, VS Code, OpenCode, or fx with Pushary
188
189
  claude Run Claude Code through Pushary, reachable from your phone even when idle
189
190
  daemon Keep this machine reachable so your phone can START a new session
190
191
  status One screen: which key is in force, whether the server accepts it, what can receive an approval
@@ -1,39 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleBell
4
- } from "../chunk-HUB4Q35G.js";
4
+ } from "../chunk-6ADZQFVW.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-UAP556WK.js";
8
- import "../chunk-D3K2FPPJ.js";
7
+ } from "../chunk-UC65FJJT.js";
8
+ import "../chunk-EAQMWJPG.js";
9
9
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-5SWQZ6HY.js";
11
- import "../chunk-I2YUMZLE.js";
12
- import "../chunk-I3XJATMR.js";
13
- import "../chunk-YXPGFRRW.js";
14
- import "../chunk-OZE2TQX5.js";
15
- import "../chunk-7CLTSZOL.js";
16
- import "../chunk-LQI7W4RG.js";
17
- import "../chunk-XOMH53NB.js";
18
- import "../chunk-66H2QQAK.js";
19
- import "../chunk-VA2R64I7.js";
10
+ import "../chunk-R2XCLT6I.js";
11
+ import "../chunk-CVALVGA7.js";
12
+ import "../chunk-5HLTWFJ6.js";
13
+ import "../chunk-PQ4F64M2.js";
14
+ import "../chunk-73T6MSU5.js";
15
+ import "../chunk-ZQ7IDOKY.js";
16
+ import "../chunk-VKVIAZQO.js";
17
+ import "../chunk-BH2SKSSK.js";
18
+ import "../chunk-KXMZMZD3.js";
19
+ import "../chunk-B76WVEDX.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-YUGGNZSF.js";
22
- import "../chunk-VOCZHOXV.js";
21
+ import "../chunk-DZURML2D.js";
22
+ import "../chunk-V6QRSU2G.js";
23
23
  import "../chunk-POFBE6ZY.js";
24
24
  import "../chunk-GMXKITVA.js";
25
- import "../chunk-R4HVHTNA.js";
26
- import "../chunk-DESAUCH2.js";
27
- import "../chunk-DZTKLE7Q.js";
25
+ import "../chunk-UOAQ6QMP.js";
26
+ import "../chunk-KW2RRR7D.js";
27
+ import "../chunk-XNCMT7YY.js";
28
28
  import "../chunk-7QLSKOSU.js";
29
29
  import "../chunk-KZERVKTD.js";
30
- import "../chunk-VHNDE3ZD.js";
31
- import "../chunk-K32C2RGK.js";
30
+ import "../chunk-ROQK7IN3.js";
31
+ import "../chunk-DNJUSFBL.js";
32
32
  import "../chunk-T7E75EKA.js";
33
- import "../chunk-OSJEMXSR.js";
34
- import "../chunk-CAS7GFWI.js";
35
- import "../chunk-EA3IELHP.js";
36
- import "../chunk-HWJW3CPO.js";
33
+ import "../chunk-V4AQBAVG.js";
34
+ import "../chunk-B3UXMSMW.js";
35
+ import "../chunk-YROGUPOZ.js";
37
36
 
38
37
  // bin/pushary-bell-hook.ts
39
38
  var main = async () => {
@@ -5,38 +5,37 @@ import {
5
5
  liveAgentCount,
6
6
  ring,
7
7
  upgradeThreshold
8
- } from "../chunk-HUB4Q35G.js";
8
+ } from "../chunk-6ADZQFVW.js";
9
9
  import {
10
10
  addBellHooks,
11
11
  bellInstalled,
12
12
  removeBellHooks
13
- } from "../chunk-LQI7W4RG.js";
13
+ } from "../chunk-VKVIAZQO.js";
14
14
  import {
15
15
  createIo
16
16
  } from "../chunk-5RUIFDTP.js";
17
17
  import {
18
18
  exitOnHelpFlag
19
- } from "../chunk-P4BNYJ5Q.js";
19
+ } from "../chunk-2PS6QWDW.js";
20
20
  import {
21
21
  parseFlags
22
22
  } from "../chunk-GMXKITVA.js";
23
- import "../chunk-R4HVHTNA.js";
23
+ import "../chunk-UOAQ6QMP.js";
24
24
  import "../chunk-7QLSKOSU.js";
25
25
  import {
26
26
  EXIT
27
27
  } from "../chunk-KZERVKTD.js";
28
- import "../chunk-VHNDE3ZD.js";
28
+ import "../chunk-ROQK7IN3.js";
29
29
  import {
30
30
  claudeSettings
31
- } from "../chunk-K32C2RGK.js";
31
+ } from "../chunk-DNJUSFBL.js";
32
32
  import {
33
33
  readJsonSafe,
34
34
  writeJsonAtomic
35
35
  } from "../chunk-T7E75EKA.js";
36
- import "../chunk-OSJEMXSR.js";
37
- import "../chunk-CAS7GFWI.js";
38
- import "../chunk-EA3IELHP.js";
39
- import "../chunk-HWJW3CPO.js";
36
+ import "../chunk-V4AQBAVG.js";
37
+ import "../chunk-B3UXMSMW.js";
38
+ import "../chunk-YROGUPOZ.js";
40
39
 
41
40
  // bin/pushary-bell.ts
42
41
  exitOnHelpFlag("bell");
@@ -8,7 +8,7 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-LDRGVXLR.js";
11
+ } from "../chunk-LEZFOTMI.js";
12
12
  import {
13
13
  isDeferAnswer
14
14
  } from "../chunk-YHG74UFF.js";
@@ -17,24 +17,24 @@ import {
17
17
  loadSessionKey,
18
18
  registerTranscript,
19
19
  registeredTranscriptEnabled
20
- } from "../chunk-D3K2FPPJ.js";
20
+ } from "../chunk-EAQMWJPG.js";
21
21
  import "../chunk-SGZJ5LYH.js";
22
- import "../chunk-5SWQZ6HY.js";
23
- import "../chunk-I2YUMZLE.js";
24
- import "../chunk-I3XJATMR.js";
25
- import "../chunk-YXPGFRRW.js";
22
+ import "../chunk-R2XCLT6I.js";
23
+ import "../chunk-CVALVGA7.js";
24
+ import "../chunk-5HLTWFJ6.js";
25
+ import "../chunk-PQ4F64M2.js";
26
26
  import {
27
27
  ensureDaemonRunning
28
- } from "../chunk-OZE2TQX5.js";
29
- import "../chunk-7CLTSZOL.js";
30
- import "../chunk-LQI7W4RG.js";
28
+ } from "../chunk-73T6MSU5.js";
29
+ import "../chunk-ZQ7IDOKY.js";
30
+ import "../chunk-VKVIAZQO.js";
31
31
  import {
32
32
  encryptRecord
33
- } from "../chunk-XOMH53NB.js";
34
- import "../chunk-66H2QQAK.js";
33
+ } from "../chunk-BH2SKSSK.js";
34
+ import "../chunk-KXMZMZD3.js";
35
35
  import {
36
36
  transcriptsEnabled
37
- } from "../chunk-VA2R64I7.js";
37
+ } from "../chunk-B76WVEDX.js";
38
38
  import {
39
39
  needsShell,
40
40
  spawnClaude
@@ -56,8 +56,8 @@ import {
56
56
  reportEvent,
57
57
  savePendingCommand,
58
58
  scopePathFor
59
- } from "../chunk-H6XU22TN.js";
60
- import "../chunk-YUGGNZSF.js";
59
+ } from "../chunk-IJ6ECPA6.js";
60
+ import "../chunk-DZURML2D.js";
61
61
  import {
62
62
  DECISION_STOP_REASON,
63
63
  askUser,
@@ -67,34 +67,33 @@ import {
67
67
  nextLongPollMs,
68
68
  waitForAnswer,
69
69
  withdrawQuestion
70
- } from "../chunk-EREBZHN2.js";
71
- import "../chunk-VOCZHOXV.js";
70
+ } from "../chunk-EGKXSQCY.js";
71
+ import "../chunk-V6QRSU2G.js";
72
72
  import "../chunk-POFBE6ZY.js";
73
73
  import "../chunk-GMXKITVA.js";
74
- import "../chunk-R4HVHTNA.js";
75
- import "../chunk-BJENQBMH.js";
76
- import "../chunk-DESAUCH2.js";
74
+ import "../chunk-UOAQ6QMP.js";
75
+ import "../chunk-JNXVOU6Y.js";
76
+ import "../chunk-KW2RRR7D.js";
77
77
  import {
78
78
  getMachineId
79
- } from "../chunk-DZTKLE7Q.js";
79
+ } from "../chunk-XNCMT7YY.js";
80
80
  import "../chunk-7QLSKOSU.js";
81
81
  import "../chunk-KZERVKTD.js";
82
- import "../chunk-VHNDE3ZD.js";
83
- import "../chunk-K32C2RGK.js";
82
+ import "../chunk-ROQK7IN3.js";
83
+ import "../chunk-DNJUSFBL.js";
84
84
  import "../chunk-T7E75EKA.js";
85
85
  import {
86
86
  getApiKey,
87
87
  getBaseUrl
88
- } from "../chunk-OSJEMXSR.js";
88
+ } from "../chunk-V4AQBAVG.js";
89
+ import {
90
+ NPX_LATEST_COMMAND
91
+ } from "../chunk-B3UXMSMW.js";
89
92
  import {
90
93
  KILL_REASON,
91
94
  redactSecrets,
92
95
  resolveGate
93
- } from "../chunk-CAS7GFWI.js";
94
- import {
95
- NPX_LATEST_COMMAND
96
- } from "../chunk-EA3IELHP.js";
97
- import "../chunk-HWJW3CPO.js";
96
+ } from "../chunk-YROGUPOZ.js";
98
97
 
99
98
  // src/wrapper/localPassthrough.ts
100
99
  var SIGNAL_NUMBERS = {
@@ -7,14 +7,24 @@ import {
7
7
  createGuards,
8
8
  resolveHermesPython,
9
9
  runHermesPythonScript
10
- } from "../chunk-N62KAMMY.js";
10
+ } from "../chunk-DANOZVZK.js";
11
11
  import "../chunk-P32LPT2L.js";
12
12
  import {
13
+ FX_PROFILE_REFUSALS,
14
+ FX_SETTINGS_REFUSALS,
15
+ fxProfileText,
16
+ fxSettingsText,
17
+ readFxFile,
18
+ readFxProfile,
19
+ readFxSettings,
13
20
  removeInstructionBlock,
14
21
  shortenHome,
15
22
  unregisterPluginLocation,
16
- vscodeSettingsTargets
17
- } from "../chunk-NFH73H5B.js";
23
+ vscodeSettingsTargets,
24
+ withoutFxPusharyServer,
25
+ withoutPusharyToolsAllowed
26
+ } from "../chunk-L4H2Q2S4.js";
27
+ import "../chunk-YYINL576.js";
18
28
  import {
19
29
  OPENCODE_PLUGIN_SIBLING,
20
30
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -24,7 +34,7 @@ import {
24
34
  openCodePluginDir,
25
35
  openCodePluginFile,
26
36
  removeOpenCodeMcpServer
27
- } from "../chunk-3VZX4NSP.js";
37
+ } from "../chunk-B3YQANFN.js";
28
38
  import {
29
39
  compatibleConfigFile,
30
40
  compatibleInstructionsFile,
@@ -32,44 +42,44 @@ import {
32
42
  compatiblePermissionRuleFile,
33
43
  removeCompatibleHooks,
34
44
  removeCompatibleMcpServer
35
- } from "../chunk-LJEL7IB5.js";
45
+ } from "../chunk-WUNZAE7I.js";
36
46
  import {
37
47
  isClaudeMcpSnapshot,
38
48
  removeClaudeMcpServers,
39
49
  removePusharySettings,
40
50
  removePusharyToolPermissions,
41
51
  restoreClaudeMcpServer
42
- } from "../chunk-ZA5UXRNE.js";
52
+ } from "../chunk-KYQXUGH7.js";
43
53
  import {
44
54
  hookOwnerOf,
45
55
  isHookTakeoverReceipt,
46
56
  restoreHookTakeover,
47
57
  restoreMcpServer
48
- } from "../chunk-5SWQZ6HY.js";
49
- import "../chunk-I2YUMZLE.js";
58
+ } from "../chunk-R2XCLT6I.js";
59
+ import "../chunk-CVALVGA7.js";
50
60
  import {
51
61
  liveBridgeProbe,
52
62
  resolveBridgeStub
53
- } from "../chunk-I3XJATMR.js";
63
+ } from "../chunk-5HLTWFJ6.js";
54
64
  import {
55
65
  pusharyHookExecutable
56
- } from "../chunk-YXPGFRRW.js";
66
+ } from "../chunk-PQ4F64M2.js";
57
67
  import {
58
68
  disableDaemonService
59
- } from "../chunk-OZE2TQX5.js";
69
+ } from "../chunk-73T6MSU5.js";
60
70
  import {
61
71
  removeGeminiSettings
62
- } from "../chunk-7CLTSZOL.js";
63
- import "../chunk-LQI7W4RG.js";
72
+ } from "../chunk-ZQ7IDOKY.js";
73
+ import "../chunk-VKVIAZQO.js";
64
74
  import "../chunk-XHKBHWLX.js";
65
- import "../chunk-H6XU22TN.js";
66
- import "../chunk-YUGGNZSF.js";
67
- import "../chunk-EREBZHN2.js";
68
- import "../chunk-VOCZHOXV.js";
75
+ import "../chunk-IJ6ECPA6.js";
76
+ import "../chunk-DZURML2D.js";
77
+ import "../chunk-EGKXSQCY.js";
78
+ import "../chunk-V6QRSU2G.js";
69
79
  import "../chunk-POFBE6ZY.js";
70
80
  import {
71
81
  exitOnHelpFlag
72
- } from "../chunk-P4BNYJ5Q.js";
82
+ } from "../chunk-2PS6QWDW.js";
73
83
  import {
74
84
  rejectUnknownFlags
75
85
  } from "../chunk-GMXKITVA.js";
@@ -77,15 +87,15 @@ import {
77
87
  CANDIDATE_RCS,
78
88
  isDisabledExport,
79
89
  removeClaudeAlias
80
- } from "../chunk-R4HVHTNA.js";
81
- import "../chunk-BJENQBMH.js";
82
- import "../chunk-DESAUCH2.js";
83
- import "../chunk-DZTKLE7Q.js";
90
+ } from "../chunk-UOAQ6QMP.js";
91
+ import "../chunk-JNXVOU6Y.js";
92
+ import "../chunk-KW2RRR7D.js";
93
+ import "../chunk-XNCMT7YY.js";
84
94
  import "../chunk-7QLSKOSU.js";
85
95
  import {
86
96
  EXIT
87
97
  } from "../chunk-KZERVKTD.js";
88
- import "../chunk-VHNDE3ZD.js";
98
+ import "../chunk-ROQK7IN3.js";
89
99
  import {
90
100
  bridgeAgentKey,
91
101
  claudeJson,
@@ -102,6 +112,9 @@ import {
102
112
  cursorUserHooks,
103
113
  cursorUserMcp,
104
114
  execNpm,
115
+ fxAgentsMd,
116
+ fxMcpProfile,
117
+ fxSettings,
105
118
  geminiMd,
106
119
  geminiSettings,
107
120
  hermesConfigReceipt,
@@ -114,9 +127,10 @@ import {
114
127
  restoreCodexHookTrust,
115
128
  vscodePluginDir,
116
129
  vscodePluginMcp
117
- } from "../chunk-K32C2RGK.js";
130
+ } from "../chunk-DNJUSFBL.js";
118
131
  import "../chunk-T7E75EKA.js";
119
- import "../chunk-OSJEMXSR.js";
132
+ import "../chunk-V4AQBAVG.js";
133
+ import "../chunk-B3UXMSMW.js";
120
134
  import {
121
135
  CURSOR_GATE_EVENTS,
122
136
  HOOK_COMPATIBLE_PROFILES,
@@ -125,9 +139,7 @@ import {
125
139
  SUPPORT_EMAIL,
126
140
  isValidApiKey,
127
141
  redactSecrets
128
- } from "../chunk-CAS7GFWI.js";
129
- import "../chunk-EA3IELHP.js";
130
- import "../chunk-HWJW3CPO.js";
142
+ } from "../chunk-YROGUPOZ.js";
131
143
 
132
144
  // bin/pushary-clean.ts
133
145
  import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync3 } from "fs";
@@ -528,6 +540,48 @@ var guardedAliasRemoval = () => {
528
540
  var writeJson = (path, data) => {
529
541
  guardedWrite(path, JSON.stringify(data, null, 2) + "\n");
530
542
  };
543
+ var writeFxText = (path, rendered, label) => {
544
+ if (rendered.kind === "refused") {
545
+ console.log(` ${skip} ${label} ${dim(`(${path} would grow past the size fx reads; left untouched)`)}`);
546
+ return;
547
+ }
548
+ guardedWrite(path, rendered.text);
549
+ console.log(` ${check} ${label} ${dim(did("removed"))}`);
550
+ };
551
+ var removeFxMcpServer = () => {
552
+ const path = fxMcpProfile();
553
+ const read = readFxFile(path, readFxProfile);
554
+ if (read.kind === "missing") {
555
+ console.log(` ${skip} fx MCP ${dim("(not found)")}`);
556
+ } else if (read.kind === "unreadable") {
557
+ console.log(` ${skip} fx MCP ${dim(`(${path} could not be read; left untouched)`)}`);
558
+ } else if (read.kind === "refused") {
559
+ console.log(` ${skip} fx MCP ${dim(`(${path} ${FX_PROFILE_REFUSALS[read.reason]}; left untouched)`)}`);
560
+ } else {
561
+ const { profile, removed } = withoutFxPusharyServer(read.profile);
562
+ if (removed) {
563
+ writeFxText(path, fxProfileText(profile), "fx MCP");
564
+ } else {
565
+ console.log(` ${skip} fx MCP ${dim("(no pushary entry)")}`);
566
+ }
567
+ }
568
+ };
569
+ var removeFxToolsRule = () => {
570
+ const path = fxSettings();
571
+ const read = readFxFile(path, readFxSettings);
572
+ if (read.kind === "refused") {
573
+ console.log(` ${skip} fx settings ${dim(`(${path} ${FX_SETTINGS_REFUSALS[read.reason]}; left untouched)`)}`);
574
+ return;
575
+ }
576
+ if (read.kind !== "settings") return;
577
+ const { settings, removed } = withoutPusharyToolsAllowed(read.settings);
578
+ if (removed) writeFxText(path, fxSettingsText(settings), "fx auto-allowed Pushary tools");
579
+ };
580
+ var removeFxInstructions = () => {
581
+ if (guardedInstructionBlockRemoval(fxAgentsMd())) {
582
+ console.log(` ${check} fx instructions ${dim(did("removed"))}`);
583
+ }
584
+ };
531
585
  var removeCursorUserHook = (scope) => {
532
586
  if (!existsSync6(CURSOR_USER_HOOKS)) return "absent";
533
587
  let parsed2;
@@ -1000,6 +1054,9 @@ var main = async () => {
1000
1054
  } else {
1001
1055
  console.log(` ${skip} OpenCode MCP ${dim("(not found)")}`);
1002
1056
  }
1057
+ removeFxMcpServer();
1058
+ removeFxToolsRule();
1059
+ removeFxInstructions();
1003
1060
  const hermesPython = resolveHermesPython();
1004
1061
  if (hermesPython) {
1005
1062
  const configUpdated = dryRun ? (wouldNote("run ", "hermes plugin config restore"), true) : runHermesPythonScript(hermesPython, HERMES_CONFIG_SCRIPT, "clean", HERMES_CONFIG_RECEIPT);
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
- import "../chunk-GBL4BTG3.js";
2
+ import "../chunk-JXUAXO74.js";
3
3
  import {
4
4
  LiveTranscriptRelay,
5
5
  liveSessionSleep,
6
6
  postLiveSession,
7
7
  postLiveSessionUntilAccepted,
8
8
  startLiveSessionHeartbeat
9
- } from "../chunk-PJF7L7AA.js";
9
+ } from "../chunk-SQRWHALT.js";
10
10
  import {
11
11
  SESSION_IDLE_TIMEOUT_MS,
12
12
  describeIdleWindow,
13
13
  idleDeadlinePassed,
14
14
  startProcessOwnership,
15
15
  withSpawnProcessOwnership
16
- } from "../chunk-LDRGVXLR.js";
17
- import "../chunk-XOMH53NB.js";
18
- import "../chunk-66H2QQAK.js";
16
+ } from "../chunk-LEZFOTMI.js";
17
+ import "../chunk-BH2SKSSK.js";
18
+ import "../chunk-KXMZMZD3.js";
19
19
  import {
20
20
  transcriptsEnabled
21
- } from "../chunk-VA2R64I7.js";
21
+ } from "../chunk-B76WVEDX.js";
22
22
  import {
23
23
  spawnClaude
24
24
  } from "../chunk-XHKBHWLX.js";
@@ -27,39 +27,38 @@ import {
27
27
  isDecisionStopped,
28
28
  isWaitForAnswerResponse,
29
29
  withdrawQuestion
30
- } from "../chunk-EREBZHN2.js";
30
+ } from "../chunk-EGKXSQCY.js";
31
31
  import {
32
32
  writeDegraded
33
- } from "../chunk-VOCZHOXV.js";
33
+ } from "../chunk-V6QRSU2G.js";
34
34
  import "../chunk-POFBE6ZY.js";
35
- import "../chunk-R4HVHTNA.js";
35
+ import "../chunk-UOAQ6QMP.js";
36
36
  import {
37
37
  callMcpTool
38
- } from "../chunk-BJENQBMH.js";
39
- import "../chunk-DESAUCH2.js";
38
+ } from "../chunk-JNXVOU6Y.js";
39
+ import "../chunk-KW2RRR7D.js";
40
40
  import {
41
41
  getMachineId
42
- } from "../chunk-DZTKLE7Q.js";
42
+ } from "../chunk-XNCMT7YY.js";
43
43
  import "../chunk-7QLSKOSU.js";
44
44
  import "../chunk-KZERVKTD.js";
45
- import "../chunk-VHNDE3ZD.js";
45
+ import "../chunk-ROQK7IN3.js";
46
46
  import {
47
47
  resolveBinary
48
- } from "../chunk-K32C2RGK.js";
48
+ } from "../chunk-DNJUSFBL.js";
49
49
  import "../chunk-T7E75EKA.js";
50
50
  import {
51
51
  getApiKey,
52
52
  getBaseUrl
53
- } from "../chunk-OSJEMXSR.js";
53
+ } from "../chunk-V4AQBAVG.js";
54
+ import "../chunk-B3UXMSMW.js";
54
55
  import {
55
56
  elicitationContent,
56
57
  parseAgentQuestion,
57
58
  parseAgentQuestionAnswers,
58
59
  planElicitationAsk,
59
60
  readElicitationFields
60
- } from "../chunk-CAS7GFWI.js";
61
- import "../chunk-EA3IELHP.js";
62
- import "../chunk-HWJW3CPO.js";
61
+ } from "../chunk-YROGUPOZ.js";
63
62
 
64
63
  // bin/pushary-codex-bridge.ts
65
64
  import { existsSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  takeHookHoldBudget
4
- } from "../chunk-3LU74H52.js";
4
+ } from "../chunk-J2355HR7.js";
5
5
  import {
6
6
  blockedActionFingerprint,
7
7
  codexCallKey,
@@ -13,33 +13,33 @@ import {
13
13
  recordCodexCallDecision,
14
14
  reportMachineDenial,
15
15
  userScope
16
- } from "../chunk-NYMPLNV3.js";
16
+ } from "../chunk-52NVBNJT.js";
17
17
  import {
18
18
  triggerAutoUpdate
19
- } from "../chunk-P4UYILQK.js";
19
+ } from "../chunk-BWYJ6AAF.js";
20
20
  import {
21
21
  isGatingMoment,
22
22
  recordKeylessMoment
23
- } from "../chunk-5UWV5GHM.js";
23
+ } from "../chunk-2C7CCWVX.js";
24
24
  import {
25
25
  readHookInput
26
- } from "../chunk-UAP556WK.js";
26
+ } from "../chunk-UC65FJJT.js";
27
27
  import {
28
28
  denyReasonFrom,
29
29
  isDeferAnswer
30
30
  } from "../chunk-YHG74UFF.js";
31
- import "../chunk-D3K2FPPJ.js";
31
+ import "../chunk-EAQMWJPG.js";
32
32
  import "../chunk-SGZJ5LYH.js";
33
- import "../chunk-5SWQZ6HY.js";
34
- import "../chunk-I2YUMZLE.js";
35
- import "../chunk-I3XJATMR.js";
36
- import "../chunk-YXPGFRRW.js";
37
- import "../chunk-OZE2TQX5.js";
38
- import "../chunk-7CLTSZOL.js";
39
- import "../chunk-LQI7W4RG.js";
40
- import "../chunk-XOMH53NB.js";
41
- import "../chunk-66H2QQAK.js";
42
- import "../chunk-VA2R64I7.js";
33
+ import "../chunk-R2XCLT6I.js";
34
+ import "../chunk-CVALVGA7.js";
35
+ import "../chunk-5HLTWFJ6.js";
36
+ import "../chunk-PQ4F64M2.js";
37
+ import "../chunk-73T6MSU5.js";
38
+ import "../chunk-ZQ7IDOKY.js";
39
+ import "../chunk-VKVIAZQO.js";
40
+ import "../chunk-BH2SKSSK.js";
41
+ import "../chunk-KXMZMZD3.js";
42
+ import "../chunk-B76WVEDX.js";
43
43
  import "../chunk-XHKBHWLX.js";
44
44
  import {
45
45
  CODEX_AGENT,
@@ -76,8 +76,8 @@ import {
76
76
  toCodexWire,
77
77
  toPolicyLookup,
78
78
  toPolicyLookups
79
- } from "../chunk-H6XU22TN.js";
80
- import "../chunk-YUGGNZSF.js";
79
+ } from "../chunk-IJ6ECPA6.js";
80
+ import "../chunk-DZURML2D.js";
81
81
  import {
82
82
  DECISION_STOP_REASON,
83
83
  askUser,
@@ -89,32 +89,33 @@ import {
89
89
  requestGate,
90
90
  sendNotification,
91
91
  waitForQuestion
92
- } from "../chunk-EREBZHN2.js";
92
+ } from "../chunk-EGKXSQCY.js";
93
93
  import {
94
94
  exitAfterClientReports
95
- } from "../chunk-VOCZHOXV.js";
95
+ } from "../chunk-V6QRSU2G.js";
96
96
  import "../chunk-POFBE6ZY.js";
97
97
  import "../chunk-GMXKITVA.js";
98
- import "../chunk-R4HVHTNA.js";
99
- import "../chunk-BJENQBMH.js";
100
- import "../chunk-DESAUCH2.js";
98
+ import "../chunk-UOAQ6QMP.js";
99
+ import "../chunk-JNXVOU6Y.js";
100
+ import "../chunk-KW2RRR7D.js";
101
101
  import {
102
102
  getMachineId
103
- } from "../chunk-DZTKLE7Q.js";
103
+ } from "../chunk-XNCMT7YY.js";
104
104
  import "../chunk-7QLSKOSU.js";
105
105
  import {
106
106
  EXIT
107
107
  } from "../chunk-KZERVKTD.js";
108
- import "../chunk-VHNDE3ZD.js";
108
+ import "../chunk-ROQK7IN3.js";
109
109
  import {
110
110
  canonicalJson
111
- } from "../chunk-K32C2RGK.js";
111
+ } from "../chunk-DNJUSFBL.js";
112
112
  import {
113
113
  writeFileAtomic
114
114
  } from "../chunk-T7E75EKA.js";
115
115
  import {
116
116
  getApiKey
117
- } from "../chunk-OSJEMXSR.js";
117
+ } from "../chunk-V4AQBAVG.js";
118
+ import "../chunk-B3UXMSMW.js";
118
119
  import {
119
120
  CODEX_RESCUE_TOOL_NAME,
120
121
  DECISION_LINE_MAX,
@@ -128,9 +129,7 @@ import {
128
129
  hookWaitClamped,
129
130
  hookWaitDeadline,
130
131
  resolveGate
131
- } from "../chunk-CAS7GFWI.js";
132
- import "../chunk-EA3IELHP.js";
133
- import "../chunk-HWJW3CPO.js";
132
+ } from "../chunk-YROGUPOZ.js";
134
133
 
135
134
  // bin/pushary-codex-hook.ts
136
135
  import { basename } from "path";
@@ -751,7 +750,7 @@ var decidePreToolUse = async (input) => {
751
750
  };
752
751
  var repairCodexHoldsQuietly = async () => {
753
752
  try {
754
- const { repairCodexHolds } = await import("../reapply-4DAJKNVP.js");
753
+ const { repairCodexHolds } = await import("../reapply-6PH3FMPX.js");
755
754
  repairCodexHolds();
756
755
  } catch {
757
756
  return;