pushary 1.9.7 → 1.9.9
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.
- package/CHANGELOG.md +18 -0
- package/README.md +3 -3
- package/data/cursor-plugin/README.md +3 -7
- package/data/vscode-plugin/README.md +1 -1
- package/dist/bin/pushary-bell-hook.js +22 -24
- package/dist/bin/pushary-bell.js +13 -13
- package/dist/bin/pushary-claude.js +28 -30
- package/dist/bin/pushary-clean.js +113 -94
- package/dist/bin/pushary-codex-bridge.js +20 -20
- package/dist/bin/pushary-codex-hook.js +36 -38
- package/dist/bin/pushary-codex.js +13 -13
- package/dist/bin/pushary-connect.js +48 -22
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +50 -40
- package/dist/bin/pushary-disconnect.js +188 -56
- package/dist/bin/pushary-doctor.js +105 -85
- package/dist/bin/pushary-elicitation-hook.js +25 -27
- package/dist/bin/pushary-gemini-bridge.js +13 -13
- package/dist/bin/pushary-gemini-hook.js +31 -33
- package/dist/bin/pushary-hook.js +36 -39
- package/dist/bin/pushary-login.js +12 -12
- package/dist/bin/pushary-logout.js +105 -42
- package/dist/bin/pushary-mcp.js +9 -9
- package/dist/bin/pushary-mode.js +28 -31
- package/dist/bin/pushary-notification-hook.js +29 -32
- package/dist/bin/pushary-opencode-hook.js +30 -32
- package/dist/bin/pushary-permission-denied-hook.js +30 -33
- package/dist/bin/pushary-permission-hook.js +33 -36
- package/dist/bin/pushary-post-hook.js +30 -33
- package/dist/bin/pushary-prompt-hook.js +29 -32
- package/dist/bin/pushary-session-end-hook.js +29 -32
- package/dist/bin/pushary-session-start-hook.js +33 -36
- package/dist/bin/pushary-setup.js +168 -160
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +65 -19
- package/dist/bin/pushary-stop-hook.js +29 -32
- package/dist/bin/pushary-stopfailure-hook.js +29 -32
- package/dist/bin/pushary-suggestions.js +19 -21
- package/dist/bin/pushary-transcript-register.js +18 -20
- package/dist/bin/pushary-transcripts.js +7 -7
- package/dist/bin/pushary-upgrade.js +50 -26
- package/dist/bin/pushary-wait.js +23 -19
- package/dist/bin/pushary.js +15 -14
- package/dist/{chunk-4FK6RZVJ.js → chunk-462EQA6K.js} +1 -1
- package/dist/{chunk-STQRUH3S.js → chunk-5DCDQ5VW.js} +59 -15
- package/dist/{chunk-JXISQ7DT.js → chunk-5N5L6DNN.js} +3 -3
- package/dist/{chunk-QR6VE5ME.js → chunk-5RGA636G.js} +79 -17
- package/dist/{chunk-L76HTPU6.js → chunk-6AYSKVLL.js} +3 -3
- package/dist/{chunk-NIBFSARF.js → chunk-6EBGOHDJ.js} +33 -13
- package/dist/{chunk-QQ4HBXZC.js → chunk-6W5M3MSE.js} +84 -673
- package/dist/{chunk-R3YW55MY.js → chunk-AI7RMFVV.js} +29 -26
- package/dist/{chunk-AUUXS44H.js → chunk-APP43AW7.js} +1 -1
- package/dist/{chunk-RQGODFQN.js → chunk-AZOKPWVI.js} +1 -1
- package/dist/{chunk-3GNUXXDZ.js → chunk-B5NMSP3V.js} +2 -2
- package/dist/{chunk-4D2AYNSE.js → chunk-BNSKVIAW.js} +2 -2
- package/dist/chunk-BYLKCZ2G.js +367 -0
- package/dist/{chunk-X5NXPCIC.js → chunk-BZLHTMT6.js} +89 -7
- package/dist/{chunk-BTQGAXZ3.js → chunk-COQ64C4F.js} +10 -10
- package/dist/{chunk-N4EUSDKX.js → chunk-DCCSULXK.js} +14 -14
- package/dist/{chunk-JWKBDSPF.js → chunk-DP3WX7FW.js} +2 -2
- package/dist/chunk-E5HOHIUV.js +52 -0
- package/dist/{chunk-GU3EJCVV.js → chunk-EA5NWDK7.js} +4 -0
- package/dist/chunk-EIAEUG7G.js +46 -0
- package/dist/{chunk-EB4XGVBG.js → chunk-EUW7JL2K.js} +0 -32
- package/dist/{chunk-T7Y5EADL.js → chunk-F7R3SZ4Q.js} +2 -2
- package/dist/{chunk-H37L7TT3.js → chunk-G7RIDXAT.js} +2 -2
- package/dist/{chunk-W2KI5KPD.js → chunk-H5T27W7M.js} +2 -2
- package/dist/chunk-HBWYMRR5.js +94 -0
- package/dist/{chunk-CBQACHKY.js → chunk-IIVZZMSO.js} +1 -1
- package/dist/{chunk-Z6HPS67T.js → chunk-IRHABAQT.js} +1 -1
- package/dist/{chunk-QTO6HEZD.js → chunk-K545B734.js} +2 -2
- package/dist/{chunk-KYO45G5L.js → chunk-KOWFRUIT.js} +1 -1
- package/dist/{chunk-QFEM7R6T.js → chunk-KQFTBQ66.js} +11 -11
- package/dist/chunk-LENBKYRB.js +50 -0
- package/dist/{chunk-JCWZ23MJ.js → chunk-M3STIAGU.js} +3 -3
- package/dist/{chunk-6DJTDHBI.js → chunk-MD4SVNT6.js} +1 -1
- package/dist/{chunk-7264S5HZ.js → chunk-MLGIVVSG.js} +1 -1
- package/dist/{chunk-H7MMU64M.js → chunk-NGKUXZID.js} +2 -2
- package/dist/{chunk-JWQZSYCK.js → chunk-NUVGDBZC.js} +1 -1
- package/dist/{chunk-AQ55ZSSS.js → chunk-OAYWO5NP.js} +1 -1
- package/dist/chunk-Q6C6ILUS.js +49 -0
- package/dist/{chunk-MBK7N46B.js → chunk-QIOIO7VN.js} +6 -6
- package/dist/{chunk-KFKL3FHS.js → chunk-QRXPWW3M.js} +4 -3
- package/dist/{chunk-7OIWWZAD.js → chunk-QTIUJZRX.js} +3 -3
- package/dist/{chunk-XWAYAO3V.js → chunk-R5RIVOPL.js} +2 -2
- package/dist/{chunk-ADSQDYYG.js → chunk-REU2VQPH.js} +54 -5
- package/dist/{chunk-GKI6LFAV.js → chunk-RQ32ADJP.js} +2 -2
- package/dist/{chunk-VXRXFU6Q.js → chunk-SZ4Q6ZVS.js} +14 -7
- package/dist/{chunk-KT5E2RLS.js → chunk-T6ZN4TEF.js} +1 -1
- package/dist/{chunk-UFVGSEWH.js → chunk-TO3PS646.js} +2 -2
- package/dist/chunk-UAP5DS6P.js +599 -0
- package/dist/{chunk-MZPXVH4A.js → chunk-UF6RBP5V.js} +204 -28
- package/dist/{chunk-AVNKVF7N.js → chunk-UPIZSCYD.js} +4 -4
- package/dist/{chunk-3PVDOCFI.js → chunk-VHPFNLRS.js} +5 -5
- package/dist/{chunk-HPRZJKRO.js → chunk-VIIHC42X.js} +1 -1
- package/dist/{chunk-D6S5EKXA.js → chunk-WRPYCIV2.js} +8 -12
- package/dist/{chunk-ZUTU43FT.js → chunk-Z23ZBYDW.js} +6 -4
- package/dist/{chunk-SBLPHUEB.js → chunk-ZGADIZDS.js} +8 -6
- package/dist/{global-upgrade-E2HUEB4B.js → global-upgrade-H272QOGD.js} +6 -6
- package/dist/{paths-QVTEGNZV.js → paths-HMVOTFUN.js} +2 -2
- package/dist/reapply-Q5NHDTVU.js +55 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +19 -20
- package/dist/{upgrade-lock-JCIDZMHF.js → upgrade-lock-L3GHFIRW.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-4YO4T5FV.js +0 -149
- package/dist/chunk-ANEAA37E.js +0 -197
- package/dist/chunk-MNWRUGMH.js +0 -86
- package/dist/chunk-RQSOEB4S.js +0 -44
- package/dist/chunk-SD3272LS.js +0 -143
- package/dist/reapply-5QVKM6LA.js +0 -38
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.9
|
|
4
|
+
|
|
5
|
+
- The VS Code hooks setup writes now run the gate through the same shell guard as every other agent. Before, a missing Node or a deleted plugin folder made the VS Code hooks fail on every tool call; now they stay silent and VS Code carries on as if Pushary were not installed. Run setup again for VS Code to get the guarded hooks.
|
|
6
|
+
- `pushary doctor`, `pushary status` and `pushary pair` recognise a computer the Pushary Mac app connects when the CLI has no key of its own. Doctor and status say the computer is connected through the Pushary Mac app instead of reporting a missing key, and pair tells you to pair a phone from the app's Settings > Phone. The CLI does not use, copy or save the app's key.
|
|
7
|
+
- A default `pushary setup` turns on phone-start when `~/.pushary/config.json` exists but has no `controlMode`, as `pushary login` and the Mac app's Hermes connection leave it. Before, setup skipped phone-start on those machines. `--control off`, or a saved `controlMode` of `off`, still keeps it off, and upgrades still never add the background service on their own.
|
|
8
|
+
- `pushary setup` keeps an OpenCode plugin the Pushary Mac app installed, as it already did for the other agents, and lists it as kept. It used to overwrite the app's plugin, MCP key and instructions. Pass `--take-over-hooks` if you want the CLI to own it. If the app is signed into a different account, setup reports that for OpenCode and changes nothing.
|
|
9
|
+
|
|
10
|
+
## 1.9.8
|
|
11
|
+
|
|
12
|
+
- `pushary upgrade` and automatic updates no longer take over agents the Pushary Mac app connected. They used to replace the app's hooks with the CLI's and overwrite its MCP key for Claude Code, Codex, Gemini CLI, VS Code and OpenCode. An agent the app owns is now left exactly as the app wrote it and listed as kept for the Mac app, using the same rule setup uses. Pass `--take-over-hooks` to setup if you want the CLI to own it.
|
|
13
|
+
- `pushary clean` keeps the Mac app's wiring for Qwen Code, CodeBuddy, Qoder, Droid and Devin while the app is installed, as it already did for the other agents. `clean --everything` still removes it.
|
|
14
|
+
- `pushary disconnect cursor` removes the Cursor plugin setup installed in `~/.cursor/plugins/local/pushary`, including the `mcp.json` that held your API key, and setup's leftover copies of it. The plugin is kept, and the output says so, when the gate in `~/.cursor/hooks.json` that points into it could not be removed.
|
|
15
|
+
- `pushary disconnect` removes the Pushary block it wrote to `AGENTS.md` (Codex, OpenCode), `GEMINI.md`, `QWEN.md` and `CODEBUDDY.md`. Only the text between the Pushary markers is removed. Skills are left in place.
|
|
16
|
+
- `pushary disconnect <agent>` is no longer undone by the Mac app. It records the agent in `~/.pushary/declined-agents.json`, and Pushary.app versions that read that file leave the agent off until you connect it again from the app or with `pushary setup`.
|
|
17
|
+
- `pushary mode`, `mode clear`, `wait <seconds>` and `suggestions` no longer say "This key was rejected" when the key is fine. Keys from `pushary login`, phone pairing and the Mac app cannot change approval settings, and these commands now say so, point you to the Pushary app, your phone or the dashboard, and exit with code 2.
|
|
18
|
+
- `pushary sign-out --revoke` revokes those keys too, and then checks with pushary.com and tells you whether the key still works. Before, it could not revoke them and always said the key was still valid. `--json` adds `keyStillValid`.
|
|
19
|
+
- When the Mac app signs out of the key setup borrowed from it, the background service stops once instead of restarting every 10 seconds, and `pushary doctor`, `pushary status` and commands that report a rejected key say the key was signed out on this Mac, tell you to run `pushary login`, and name the shell profile line that still exports the old key. Pushary does not edit that line. A background service with no key at all also stops instead of restarting.
|
|
20
|
+
|
|
3
21
|
## 1.9.7
|
|
4
22
|
|
|
5
23
|
- `pushary claude` and the `pushary daemon` commands wait at most 5 seconds for the background service again. Only setup and upgrade allow the 30 seconds a cold Windows start can need, so launching Claude no longer sits silent while the service starts.
|
package/README.md
CHANGED
|
@@ -210,11 +210,11 @@ claude Run Claude Code through Pushary, reachable from your phone even whe
|
|
|
210
210
|
daemon Keep this machine reachable so your phone can START a new session
|
|
211
211
|
status One screen: which key is in force, whether the server accepts it, what can receive an approval
|
|
212
212
|
login Sign in from this terminal, no key to copy (--with-token to pipe one in)
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
sign-out Sign out: remove the key this machine stores, and say what it does not remove (also: logout)
|
|
214
|
+
pair Pair a phone without re-running setup (--app for the Pushary app; also: connect)
|
|
215
215
|
bell Free local bell when an agent finishes or needs you. No account, no key, no network
|
|
216
216
|
doctor Verify your Pushary installation is working
|
|
217
|
-
disconnect Turn off one agent (claude|codex|gemini|cursor)
|
|
217
|
+
disconnect Turn off one agent (claude|codex|gemini|cursor|opencode|qwen|codebuddy|qoder|droid|devin|fx)
|
|
218
218
|
clean Remove Pushary from this machine (--everything: the Mac app's setup too, --dry-run: preview)
|
|
219
219
|
mode Choose where approval requests appear
|
|
220
220
|
wait Show or set the "wait for your phone" ladder (pushary wait 45)
|
|
@@ -26,11 +26,7 @@ There are three things.
|
|
|
26
26
|
|
|
27
27
|
You need two things: the plugin, and an API key.
|
|
28
28
|
|
|
29
|
-
### Option 1:
|
|
30
|
-
|
|
31
|
-
Open the Marketplace panel in Cursor, search for Pushary, and click install. Then set your API key (see below).
|
|
32
|
-
|
|
33
|
-
### Option 2: CLI
|
|
29
|
+
### Option 1: CLI (recommended)
|
|
34
30
|
|
|
35
31
|
This also sets up Claude Code, Codex, and Hermes if you use them.
|
|
36
32
|
|
|
@@ -38,7 +34,7 @@ This also sets up Claude Code, Codex, and Hermes if you use them.
|
|
|
38
34
|
npx pushary@latest setup
|
|
39
35
|
```
|
|
40
36
|
|
|
41
|
-
### Option
|
|
37
|
+
### Option 2: Manual MCP
|
|
42
38
|
|
|
43
39
|
Add this to `.cursor/mcp.json` in your project, or `~/.cursor/mcp.json` for every project:
|
|
44
40
|
|
|
@@ -106,7 +102,7 @@ Then reload Cursor with Developer: Reload Window.
|
|
|
106
102
|
|
|
107
103
|
## Security
|
|
108
104
|
|
|
109
|
-
|
|
105
|
+
Your key is read at runtime from `PUSHARY_API_KEY`. The gate script has no dependencies. It sends approval and activity data to pushary.com by default; `PUSHARY_BASE_URL` can change that endpoint. Read `scripts/pushary-gate.mjs` to see exactly what it sends. See `SECURITY.md` for details.
|
|
110
106
|
|
|
111
107
|
## License
|
|
112
108
|
|
|
@@ -121,7 +121,7 @@ echo '{"hook_event_name":"PreToolUse","tool_name":"runTerminalCommand","tool_inp
|
|
|
121
121
|
|
|
122
122
|
## Security
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
Your key is read at runtime from `PUSHARY_API_KEY`, the plugin `.mcp.json`, or `~/.pushary/config.json`. The gate script has no dependencies. It sends approval and activity data to pushary.com by default; `PUSHARY_BASE_URL` and `PUSHARY_API_URL` can change its API endpoints. Command text is redacted for common secret shapes before it is sent. Read `scripts/pushary-gate.mjs` to see exactly what it sends. See `SECURITY.md` for details.
|
|
125
125
|
|
|
126
126
|
## License
|
|
127
127
|
|
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleBell
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-G7RIDXAT.js";
|
|
5
5
|
import {
|
|
6
6
|
readHookInput
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-R5RIVOPL.js";
|
|
8
|
+
import "../chunk-COQ64C4F.js";
|
|
9
9
|
import "../chunk-SGZJ5LYH.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-VXRXFU6Q.js";
|
|
15
|
-
import "../chunk-JCWZ23MJ.js";
|
|
16
|
-
import "../chunk-7264S5HZ.js";
|
|
17
|
-
import "../chunk-AUUXS44H.js";
|
|
18
|
-
import "../chunk-4FK6RZVJ.js";
|
|
19
|
-
import "../chunk-HPRZJKRO.js";
|
|
10
|
+
import "../chunk-SZ4Q6ZVS.js";
|
|
11
|
+
import "../chunk-APP43AW7.js";
|
|
12
|
+
import "../chunk-462EQA6K.js";
|
|
13
|
+
import "../chunk-VIIHC42X.js";
|
|
20
14
|
import "../chunk-XHKBHWLX.js";
|
|
15
|
+
import "../chunk-BYLKCZ2G.js";
|
|
16
|
+
import "../chunk-M3STIAGU.js";
|
|
17
|
+
import "../chunk-ZGADIZDS.js";
|
|
18
|
+
import "../chunk-MLGIVVSG.js";
|
|
19
|
+
import "../chunk-GMXKITVA.js";
|
|
21
20
|
import "../chunk-6ICPEJY5.js";
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-REU2VQPH.js";
|
|
22
|
+
import "../chunk-MD4SVNT6.js";
|
|
23
|
+
import "../chunk-UPIZSCYD.js";
|
|
24
24
|
import "../chunk-POFBE6ZY.js";
|
|
25
|
-
import "../chunk-
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-JXISQ7DT.js";
|
|
28
|
-
import "../chunk-KYO45G5L.js";
|
|
25
|
+
import "../chunk-5N5L6DNN.js";
|
|
26
|
+
import "../chunk-KOWFRUIT.js";
|
|
29
27
|
import "../chunk-7QLSKOSU.js";
|
|
30
28
|
import "../chunk-KZERVKTD.js";
|
|
31
|
-
import "../chunk-
|
|
32
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-BNSKVIAW.js";
|
|
30
|
+
import "../chunk-Z23ZBYDW.js";
|
|
33
31
|
import "../chunk-T7E75EKA.js";
|
|
34
|
-
import "../chunk-
|
|
35
|
-
import "../chunk-
|
|
36
|
-
import "../chunk-
|
|
32
|
+
import "../chunk-IRHABAQT.js";
|
|
33
|
+
import "../chunk-5DCDQ5VW.js";
|
|
34
|
+
import "../chunk-5RGA636G.js";
|
|
37
35
|
|
|
38
36
|
// bin/pushary-bell-hook.ts
|
|
39
37
|
var main = async () => {
|
package/dist/bin/pushary-bell.js
CHANGED
|
@@ -5,37 +5,37 @@ import {
|
|
|
5
5
|
liveAgentCount,
|
|
6
6
|
ring,
|
|
7
7
|
upgradeThreshold
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import {
|
|
10
|
-
addBellHooks,
|
|
11
|
-
bellInstalled,
|
|
12
|
-
removeBellHooks
|
|
13
|
-
} from "../chunk-7264S5HZ.js";
|
|
8
|
+
} from "../chunk-G7RIDXAT.js";
|
|
14
9
|
import {
|
|
15
10
|
createIo
|
|
16
11
|
} from "../chunk-U4TMAANR.js";
|
|
17
12
|
import {
|
|
18
13
|
exitOnHelpFlag
|
|
19
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-TO3PS646.js";
|
|
15
|
+
import {
|
|
16
|
+
addBellHooks,
|
|
17
|
+
bellInstalled,
|
|
18
|
+
removeBellHooks
|
|
19
|
+
} from "../chunk-MLGIVVSG.js";
|
|
20
20
|
import {
|
|
21
21
|
parseFlags
|
|
22
22
|
} from "../chunk-GMXKITVA.js";
|
|
23
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-REU2VQPH.js";
|
|
24
24
|
import "../chunk-7QLSKOSU.js";
|
|
25
25
|
import {
|
|
26
26
|
EXIT
|
|
27
27
|
} from "../chunk-KZERVKTD.js";
|
|
28
|
-
import "../chunk-
|
|
28
|
+
import "../chunk-BNSKVIAW.js";
|
|
29
29
|
import {
|
|
30
30
|
claudeSettings
|
|
31
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-Z23ZBYDW.js";
|
|
32
32
|
import {
|
|
33
33
|
readJsonSafe,
|
|
34
34
|
writeJsonAtomic
|
|
35
35
|
} from "../chunk-T7E75EKA.js";
|
|
36
|
-
import "../chunk-
|
|
37
|
-
import "../chunk-
|
|
38
|
-
import "../chunk-
|
|
36
|
+
import "../chunk-IRHABAQT.js";
|
|
37
|
+
import "../chunk-5DCDQ5VW.js";
|
|
38
|
+
import "../chunk-5RGA636G.js";
|
|
39
39
|
|
|
40
40
|
// bin/pushary-bell.ts
|
|
41
41
|
exitOnHelpFlag("bell");
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
describeIdleWindow,
|
|
9
9
|
startProcessOwnership,
|
|
10
10
|
withSpawnProcessOwnership
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-NUVGDBZC.js";
|
|
12
12
|
import {
|
|
13
13
|
announceSubscriptionRequired,
|
|
14
14
|
isDeferAnswer
|
|
@@ -18,29 +18,29 @@ import {
|
|
|
18
18
|
loadSessionKey,
|
|
19
19
|
registerTranscript,
|
|
20
20
|
registeredTranscriptEnabled
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-COQ64C4F.js";
|
|
22
22
|
import "../chunk-SGZJ5LYH.js";
|
|
23
|
-
import "../chunk-SD3272LS.js";
|
|
24
|
-
import "../chunk-SBLPHUEB.js";
|
|
25
|
-
import "../chunk-MNWRUGMH.js";
|
|
26
|
-
import "../chunk-4YO4T5FV.js";
|
|
27
23
|
import {
|
|
28
24
|
ensureDaemonRunning
|
|
29
|
-
} from "../chunk-
|
|
30
|
-
import "../chunk-JCWZ23MJ.js";
|
|
31
|
-
import "../chunk-7264S5HZ.js";
|
|
25
|
+
} from "../chunk-SZ4Q6ZVS.js";
|
|
32
26
|
import {
|
|
33
27
|
encryptRecord
|
|
34
|
-
} from "../chunk-
|
|
35
|
-
import "../chunk-
|
|
28
|
+
} from "../chunk-APP43AW7.js";
|
|
29
|
+
import "../chunk-462EQA6K.js";
|
|
36
30
|
import {
|
|
37
31
|
transcriptsEnabled
|
|
38
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-VIIHC42X.js";
|
|
39
33
|
import {
|
|
40
34
|
needsShell,
|
|
41
35
|
spawnClaude
|
|
42
36
|
} from "../chunk-XHKBHWLX.js";
|
|
37
|
+
import "../chunk-BYLKCZ2G.js";
|
|
38
|
+
import "../chunk-M3STIAGU.js";
|
|
39
|
+
import "../chunk-ZGADIZDS.js";
|
|
40
|
+
import "../chunk-MLGIVVSG.js";
|
|
41
|
+
import "../chunk-GMXKITVA.js";
|
|
43
42
|
import "../chunk-6ICPEJY5.js";
|
|
43
|
+
import "../chunk-REU2VQPH.js";
|
|
44
44
|
import {
|
|
45
45
|
UNNAMED_ACTION,
|
|
46
46
|
deriveToolTarget,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
repoKeyFor,
|
|
52
52
|
reportEvent,
|
|
53
53
|
scopePathFor
|
|
54
|
-
} from "../chunk-
|
|
54
|
+
} from "../chunk-KQFTBQ66.js";
|
|
55
55
|
import {
|
|
56
56
|
DEFAULT_SESSION,
|
|
57
57
|
markPendingCommandDelivered,
|
|
@@ -61,10 +61,8 @@ import {
|
|
|
61
61
|
removePendingCommand,
|
|
62
62
|
savePendingCommand
|
|
63
63
|
} from "../chunk-N6IOSZOE.js";
|
|
64
|
-
import "../chunk-
|
|
64
|
+
import "../chunk-MD4SVNT6.js";
|
|
65
65
|
import {
|
|
66
|
-
DECISION_STOP_REASON,
|
|
67
|
-
UNVERIFIABLE_APPROVAL_REASON,
|
|
68
66
|
askUser,
|
|
69
67
|
cancelQuestion,
|
|
70
68
|
isDecisionStopped,
|
|
@@ -72,36 +70,36 @@ import {
|
|
|
72
70
|
nextLongPollMs,
|
|
73
71
|
waitForAnswer,
|
|
74
72
|
withdrawQuestion
|
|
75
|
-
} from "../chunk-
|
|
76
|
-
import "../chunk-AVNKVF7N.js";
|
|
77
|
-
import "../chunk-POFBE6ZY.js";
|
|
78
|
-
import "../chunk-GMXKITVA.js";
|
|
79
|
-
import "../chunk-ADSQDYYG.js";
|
|
73
|
+
} from "../chunk-WRPYCIV2.js";
|
|
80
74
|
import {
|
|
81
75
|
SubscriptionRequiredError
|
|
82
|
-
} from "../chunk-
|
|
83
|
-
import "../chunk-
|
|
84
|
-
import "../chunk-
|
|
76
|
+
} from "../chunk-6AYSKVLL.js";
|
|
77
|
+
import "../chunk-QRXPWW3M.js";
|
|
78
|
+
import "../chunk-UPIZSCYD.js";
|
|
79
|
+
import "../chunk-POFBE6ZY.js";
|
|
80
|
+
import "../chunk-5N5L6DNN.js";
|
|
85
81
|
import {
|
|
86
82
|
getMachineId
|
|
87
|
-
} from "../chunk-
|
|
83
|
+
} from "../chunk-KOWFRUIT.js";
|
|
88
84
|
import "../chunk-7QLSKOSU.js";
|
|
89
85
|
import "../chunk-KZERVKTD.js";
|
|
90
|
-
import "../chunk-
|
|
91
|
-
import "../chunk-
|
|
86
|
+
import "../chunk-BNSKVIAW.js";
|
|
87
|
+
import "../chunk-Z23ZBYDW.js";
|
|
92
88
|
import "../chunk-T7E75EKA.js";
|
|
93
89
|
import {
|
|
94
90
|
getApiKey,
|
|
95
91
|
getBaseUrl
|
|
96
|
-
} from "../chunk-
|
|
92
|
+
} from "../chunk-IRHABAQT.js";
|
|
97
93
|
import {
|
|
98
94
|
NPX_LATEST_COMMAND
|
|
99
|
-
} from "../chunk-
|
|
95
|
+
} from "../chunk-5DCDQ5VW.js";
|
|
100
96
|
import {
|
|
97
|
+
DECISION_STOP_REASON,
|
|
101
98
|
KILL_REASON,
|
|
99
|
+
UNVERIFIABLE_APPROVAL_REASON,
|
|
102
100
|
redactSecretsFromContent,
|
|
103
101
|
resolveGate
|
|
104
|
-
} from "../chunk-
|
|
102
|
+
} from "../chunk-5RGA636G.js";
|
|
105
103
|
|
|
106
104
|
// src/wrapper/localPassthrough.ts
|
|
107
105
|
var SIGNAL_NUMBERS = {
|
|
@@ -2,29 +2,37 @@
|
|
|
2
2
|
import {
|
|
3
3
|
PUSHARY_SKILL_NAME,
|
|
4
4
|
PUSHARY_SKILL_SOURCE,
|
|
5
|
-
createGuards
|
|
5
|
+
createGuards
|
|
6
|
+
} from "../chunk-EUW7JL2K.js";
|
|
7
|
+
import {
|
|
8
|
+
isCursorPluginLeftover,
|
|
6
9
|
withoutPusharyCursorHooks
|
|
7
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-LENBKYRB.js";
|
|
8
11
|
import {
|
|
9
12
|
HERMES_PIP_PACKAGE,
|
|
10
|
-
planFxRemoval,
|
|
11
13
|
readHermesStatus,
|
|
12
|
-
removeInstructionBlock,
|
|
13
14
|
resolveHermesPython,
|
|
14
15
|
runHermesConfigScript,
|
|
15
16
|
shortenHome,
|
|
16
17
|
unregisterPluginLocation,
|
|
17
18
|
vscodeSettingsTargets
|
|
18
|
-
} from "../chunk-
|
|
19
|
-
import "../chunk-W2KI5KPD.js";
|
|
19
|
+
} from "../chunk-UAP5DS6P.js";
|
|
20
20
|
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} from "../chunk-
|
|
21
|
+
planFxRemoval,
|
|
22
|
+
removeInstructionBlock
|
|
23
|
+
} from "../chunk-6W5M3MSE.js";
|
|
24
|
+
import "../chunk-H5T27W7M.js";
|
|
25
|
+
import {
|
|
26
|
+
disableDaemonService
|
|
27
|
+
} from "../chunk-SZ4Q6ZVS.js";
|
|
28
|
+
import "../chunk-XHKBHWLX.js";
|
|
29
|
+
import {
|
|
30
|
+
macAppKeepsMcpEntry,
|
|
31
|
+
mcpServerBearer,
|
|
32
|
+
pusharyKey,
|
|
33
|
+
readMacAppAgentKey,
|
|
34
|
+
setupReceiptKey
|
|
35
|
+
} from "../chunk-E5HOHIUV.js";
|
|
28
36
|
import {
|
|
29
37
|
OPENCODE_PLUGIN_SIBLING,
|
|
30
38
|
OPENCODE_PLUGIN_SIBLING_CONTENTS,
|
|
@@ -36,67 +44,65 @@ import {
|
|
|
36
44
|
openCodePluginDir,
|
|
37
45
|
openCodePluginFile,
|
|
38
46
|
removeOpenCodeMcpServer
|
|
39
|
-
} from "../chunk-
|
|
47
|
+
} from "../chunk-BZLHTMT6.js";
|
|
40
48
|
import {
|
|
49
|
+
compatibleConfigFile,
|
|
50
|
+
compatibleInstructionsFile,
|
|
51
|
+
compatibleMcpFile,
|
|
52
|
+
compatiblePermissionRuleFile,
|
|
41
53
|
isClaudeMcpSnapshot,
|
|
42
54
|
removeClaudeMcpServers,
|
|
55
|
+
removeCompatibleHooks,
|
|
56
|
+
removeCompatibleMcpServer,
|
|
43
57
|
removePusharySettings,
|
|
44
58
|
removePusharyToolPermissions,
|
|
45
59
|
restoreClaudeMcpServer
|
|
46
|
-
} from "../chunk-
|
|
60
|
+
} from "../chunk-UF6RBP5V.js";
|
|
61
|
+
import {
|
|
62
|
+
ansiPainter,
|
|
63
|
+
useColor
|
|
64
|
+
} from "../chunk-U4TMAANR.js";
|
|
65
|
+
import {
|
|
66
|
+
exitOnHelpFlag
|
|
67
|
+
} from "../chunk-TO3PS646.js";
|
|
47
68
|
import {
|
|
48
69
|
hookOwnerOf,
|
|
49
70
|
isHookTakeoverReceipt,
|
|
71
|
+
liveBridgeProbe,
|
|
72
|
+
resolveBridgeStub,
|
|
50
73
|
restoreHookTakeover,
|
|
51
74
|
restoreMcpServer
|
|
52
|
-
} from "../chunk-
|
|
53
|
-
import "../chunk-SBLPHUEB.js";
|
|
54
|
-
import {
|
|
55
|
-
liveBridgeProbe,
|
|
56
|
-
resolveBridgeStub
|
|
57
|
-
} from "../chunk-MNWRUGMH.js";
|
|
58
|
-
import "../chunk-4YO4T5FV.js";
|
|
59
|
-
import {
|
|
60
|
-
disableDaemonService
|
|
61
|
-
} from "../chunk-VXRXFU6Q.js";
|
|
75
|
+
} from "../chunk-BYLKCZ2G.js";
|
|
62
76
|
import {
|
|
63
77
|
removeGeminiSettings
|
|
64
|
-
} from "../chunk-
|
|
65
|
-
import "../chunk-
|
|
66
|
-
import "../chunk-
|
|
67
|
-
import "../chunk-6ICPEJY5.js";
|
|
68
|
-
import "../chunk-QFEM7R6T.js";
|
|
69
|
-
import "../chunk-N6IOSZOE.js";
|
|
70
|
-
import "../chunk-6DJTDHBI.js";
|
|
71
|
-
import "../chunk-D6S5EKXA.js";
|
|
72
|
-
import "../chunk-AVNKVF7N.js";
|
|
73
|
-
import "../chunk-POFBE6ZY.js";
|
|
74
|
-
import {
|
|
75
|
-
ansiPainter,
|
|
76
|
-
useColor
|
|
77
|
-
} from "../chunk-U4TMAANR.js";
|
|
78
|
-
import {
|
|
79
|
-
exitOnHelpFlag
|
|
80
|
-
} from "../chunk-UFVGSEWH.js";
|
|
78
|
+
} from "../chunk-M3STIAGU.js";
|
|
79
|
+
import "../chunk-ZGADIZDS.js";
|
|
80
|
+
import "../chunk-MLGIVVSG.js";
|
|
81
81
|
import {
|
|
82
82
|
rejectUnknownFlags
|
|
83
83
|
} from "../chunk-GMXKITVA.js";
|
|
84
|
+
import "../chunk-6ICPEJY5.js";
|
|
84
85
|
import {
|
|
85
86
|
CANDIDATE_RCS,
|
|
86
87
|
isDisabledExport,
|
|
87
88
|
removeClaudeAlias
|
|
88
|
-
} from "../chunk-
|
|
89
|
-
import "../chunk-
|
|
90
|
-
import "../chunk-
|
|
91
|
-
import "../chunk-
|
|
92
|
-
import "../chunk-
|
|
89
|
+
} from "../chunk-REU2VQPH.js";
|
|
90
|
+
import "../chunk-KQFTBQ66.js";
|
|
91
|
+
import "../chunk-N6IOSZOE.js";
|
|
92
|
+
import "../chunk-MD4SVNT6.js";
|
|
93
|
+
import "../chunk-WRPYCIV2.js";
|
|
94
|
+
import "../chunk-6AYSKVLL.js";
|
|
95
|
+
import "../chunk-QRXPWW3M.js";
|
|
96
|
+
import "../chunk-UPIZSCYD.js";
|
|
97
|
+
import "../chunk-POFBE6ZY.js";
|
|
98
|
+
import "../chunk-5N5L6DNN.js";
|
|
99
|
+
import "../chunk-KOWFRUIT.js";
|
|
93
100
|
import "../chunk-7QLSKOSU.js";
|
|
94
101
|
import {
|
|
95
102
|
EXIT
|
|
96
103
|
} from "../chunk-KZERVKTD.js";
|
|
97
|
-
import "../chunk-
|
|
104
|
+
import "../chunk-BNSKVIAW.js";
|
|
98
105
|
import {
|
|
99
|
-
bridgeAgentKey,
|
|
100
106
|
claudeJson,
|
|
101
107
|
claudeMcpReceipt,
|
|
102
108
|
claudeSettings,
|
|
@@ -132,12 +138,12 @@ import {
|
|
|
132
138
|
restoreCodexHookTrust,
|
|
133
139
|
vscodePluginDir,
|
|
134
140
|
vscodePluginMcp
|
|
135
|
-
} from "../chunk-
|
|
141
|
+
} from "../chunk-Z23ZBYDW.js";
|
|
136
142
|
import "../chunk-T7E75EKA.js";
|
|
137
|
-
import "../chunk-
|
|
143
|
+
import "../chunk-IRHABAQT.js";
|
|
138
144
|
import {
|
|
139
145
|
NPX_LATEST_COMMAND
|
|
140
|
-
} from "../chunk-
|
|
146
|
+
} from "../chunk-5DCDQ5VW.js";
|
|
141
147
|
import {
|
|
142
148
|
CLI_PACKAGE_NAMES,
|
|
143
149
|
HOOK_COMPATIBLE_PROFILES,
|
|
@@ -149,7 +155,7 @@ import {
|
|
|
149
155
|
globalRootFor,
|
|
150
156
|
isValidApiKey,
|
|
151
157
|
redactSecrets
|
|
152
|
-
} from "../chunk-
|
|
158
|
+
} from "../chunk-5RGA636G.js";
|
|
153
159
|
|
|
154
160
|
// bin/pushary-clean.ts
|
|
155
161
|
import { existsSync as existsSync6, readFileSync as readFileSync4, copyFileSync, readdirSync as readdirSync4 } from "fs";
|
|
@@ -526,21 +532,47 @@ var APP_OWNED_ENTRIES = [
|
|
|
526
532
|
// does the CLI. Not attributable, so it is kept whenever the app is installed
|
|
527
533
|
// rather than removed and left registered against a path that is gone.
|
|
528
534
|
"plugins",
|
|
529
|
-
"bridge-auth"
|
|
535
|
+
"bridge-auth",
|
|
536
|
+
"declined-agents.json"
|
|
530
537
|
];
|
|
531
538
|
var isAppOwned = (name) => APP_OWNED_ENTRIES.includes(name);
|
|
532
539
|
|
|
533
|
-
// src/
|
|
534
|
-
var
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
var
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
540
|
+
// src/compatible-clean.ts
|
|
541
|
+
var keepsMcpServer = (profile, scope, io, home) => {
|
|
542
|
+
const mcpPath = compatibleMcpFile(profile, home);
|
|
543
|
+
if (!mcpPath) return false;
|
|
544
|
+
const mcp = io.readJson(mcpPath);
|
|
545
|
+
return mcp !== null && scope.keepsMcpEntry(profile.agentType, mcpServerBearer(mcp.mcpServers));
|
|
546
|
+
};
|
|
547
|
+
var removalsByPath = (profile, removalScope2, home) => {
|
|
548
|
+
const removals = /* @__PURE__ */ new Map();
|
|
549
|
+
const add = (path, removal) => {
|
|
550
|
+
if (path) removals.set(path, [...removals.get(path) ?? [], removal]);
|
|
551
|
+
};
|
|
552
|
+
add(compatibleConfigFile(profile, home), (config) => removeCompatibleHooks(config, profile, removalScope2));
|
|
553
|
+
if (removalScope2.keepMcpServer !== true) {
|
|
554
|
+
add(compatibleMcpFile(profile, home), (config) => removeCompatibleMcpServer(config, profile));
|
|
555
|
+
add(compatiblePermissionRuleFile(profile, home), removePusharyToolPermissions);
|
|
556
|
+
}
|
|
557
|
+
return removals;
|
|
558
|
+
};
|
|
559
|
+
var cleanInstructions = (profile, scope, io, home) => {
|
|
560
|
+
const path = compatibleInstructionsFile(profile, home);
|
|
561
|
+
if (!path) return null;
|
|
562
|
+
if (scope.keepAppWiring) return { path, outcome: "kept_for_app" };
|
|
563
|
+
return { path, outcome: io.removeInstructionBlock(path) ? "removed" : "absent" };
|
|
564
|
+
};
|
|
565
|
+
var cleanCompatibleAgent = (profile, scope, io, home) => {
|
|
566
|
+
const mcpKeptForApp = keepsMcpServer(profile, scope, io, home);
|
|
567
|
+
const removalScope2 = { keepAppWiring: scope.keepAppWiring, keepMcpServer: mcpKeptForApp };
|
|
568
|
+
const files = [...removalsByPath(profile, removalScope2, home)].map(([path, removals]) => {
|
|
569
|
+
const config = io.readJson(path);
|
|
570
|
+
if (!config) return { path, outcome: "not_found" };
|
|
571
|
+
if (!removals.reduce((changed, remove) => remove(config) || changed, false)) return { path, outcome: "unchanged" };
|
|
572
|
+
io.writeJson(path, config);
|
|
573
|
+
return { path, outcome: "cleaned" };
|
|
574
|
+
});
|
|
575
|
+
return { profile, files, mcpKeptForApp, instructions: cleanInstructions(profile, scope, io, home) };
|
|
544
576
|
};
|
|
545
577
|
|
|
546
578
|
// bin/pushary-clean.ts
|
|
@@ -598,12 +630,10 @@ var wouldNote = (action, path) => {
|
|
|
598
630
|
var guards = createGuards(() => dryRun, wouldNote);
|
|
599
631
|
var guardedWrite = (path, contents) => guards.write(path, contents);
|
|
600
632
|
var guardedRemove = (path, options) => guards.remove(path, options);
|
|
601
|
-
var CURSOR_PLUGIN_STAGING = ".pushary-staging-";
|
|
602
633
|
var cursorPluginLeftovers = () => {
|
|
603
634
|
const parent = dirname(CURSOR_PLUGIN_DIR);
|
|
604
|
-
const backupPrefix = `${CURSOR_PLUGIN_DIR.split("/").pop()}.pushary-backup-`;
|
|
605
635
|
try {
|
|
606
|
-
return readdirSync4(parent).filter(
|
|
636
|
+
return readdirSync4(parent).filter(isCursorPluginLeftover).map((name) => join6(parent, name));
|
|
607
637
|
} catch {
|
|
608
638
|
return [];
|
|
609
639
|
}
|
|
@@ -823,7 +853,7 @@ var main = async () => {
|
|
|
823
853
|
);
|
|
824
854
|
if (keepShared) restoreTakeoverReceipts();
|
|
825
855
|
const sharedMcpKeys = {
|
|
826
|
-
appKey:
|
|
856
|
+
appKey: readMacAppAgentKey(),
|
|
827
857
|
setupKey: setupReceiptKey(readJson(CLAUDE_MCP_RECEIPT))
|
|
828
858
|
};
|
|
829
859
|
const macAppKeeps = (agent, entryKey) => keepShared && (restoredByTakeover.has(agent) || macAppKeepsMcpEntry(entryKey, sharedMcpKeys));
|
|
@@ -1023,34 +1053,23 @@ var main = async () => {
|
|
|
1023
1053
|
} else {
|
|
1024
1054
|
console.log(` ${skip} Codex skill directory ${dim("(not found)")}`);
|
|
1025
1055
|
}
|
|
1056
|
+
const compatibleScope = { keepAppWiring: keepShared, keepsMcpEntry: macAppKeeps };
|
|
1057
|
+
const compatibleIo = { readJson, writeJson, removeInstructionBlock: guardedInstructionBlockRemoval };
|
|
1026
1058
|
for (const profile of HOOK_COMPATIBLE_PROFILES) {
|
|
1027
|
-
const
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
for (const [path, edit] of edits) byPath.set(path, [...byPath.get(path) ?? [], edit]);
|
|
1034
|
-
for (const [path, removals] of byPath) {
|
|
1035
|
-
const config = readJson(path);
|
|
1036
|
-
if (!config) {
|
|
1037
|
-
console.log(` ${skip} ${profile.label} ${shortenHome(path)} ${dim("(not found)")}`);
|
|
1038
|
-
continue;
|
|
1039
|
-
}
|
|
1040
|
-
if (removals.reduce((changed, remove) => remove(config) || changed, false)) {
|
|
1041
|
-
writeJson(path, config);
|
|
1042
|
-
console.log(` ${check} ${profile.label} ${shortenHome(path)} ${dim(did("cleaned"))}`);
|
|
1043
|
-
} else {
|
|
1044
|
-
console.log(` ${skip} ${profile.label} ${shortenHome(path)} ${dim("(no pushary entries)")}`);
|
|
1045
|
-
}
|
|
1059
|
+
const report = cleanCompatibleAgent(profile, compatibleScope, compatibleIo);
|
|
1060
|
+
for (const file of report.files) {
|
|
1061
|
+
const label2 = `${profile.label} ${shortenHome(file.path)}`;
|
|
1062
|
+
if (file.outcome === "not_found") console.log(` ${skip} ${label2} ${dim("(not found)")}`);
|
|
1063
|
+
else if (file.outcome === "cleaned") console.log(` ${check} ${label2} ${dim(did("cleaned"))}`);
|
|
1064
|
+
else console.log(` ${skip} ${label2} ${dim(keepShared ? "(nothing the CLI wrote)" : "(no pushary entries)")}`);
|
|
1046
1065
|
}
|
|
1047
|
-
|
|
1066
|
+
if (report.mcpKeptForApp) console.log(` ${skip} ${profile.label} MCP server ${dim("(kept: the Mac app uses it)")}`);
|
|
1067
|
+
const instructions = report.instructions;
|
|
1048
1068
|
if (!instructions) continue;
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
}
|
|
1052
|
-
|
|
1053
|
-
}
|
|
1069
|
+
const label = `${profile.label} ${shortenHome(instructions.path)}`;
|
|
1070
|
+
if (instructions.outcome === "kept_for_app") console.log(` ${skip} ${label} ${dim("(kept: the Mac app uses it)")}`);
|
|
1071
|
+
else if (instructions.outcome === "removed") console.log(` ${check} ${label} ${dim("(removed Pushary block)")}`);
|
|
1072
|
+
else console.log(` ${skip} ${label} ${dim("(no pushary block)")}`);
|
|
1054
1073
|
}
|
|
1055
1074
|
const geminiSettingsPath = geminiSettings();
|
|
1056
1075
|
const geminiSettings2 = readJson(geminiSettingsPath);
|