@pushary/agent-hooks 0.89.3 → 0.89.5
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/README.md +40 -0
- package/dist/bin/pushary-bell-hook.js +3 -3
- package/dist/bin/pushary-bell.js +9 -10
- package/dist/bin/pushary-claude.js +62 -26
- package/dist/bin/pushary-clean.js +25 -7
- package/dist/bin/pushary-codex-bridge.js +4 -5
- package/dist/bin/pushary-codex-hook.js +8 -7
- package/dist/bin/pushary-codex.js +6 -4
- package/dist/bin/pushary-connect.js +4 -4
- package/dist/bin/pushary-daemon.js +155 -40
- package/dist/bin/pushary-disconnect.js +3 -4
- package/dist/bin/pushary-doctor.js +77 -39
- package/dist/bin/pushary-elicitation-hook.js +4 -2
- package/dist/bin/pushary-gemini-bridge.js +3 -4
- package/dist/bin/pushary-gemini-hook.js +6 -4
- package/dist/bin/pushary-hook.js +9 -7
- package/dist/bin/pushary-login.js +4 -4
- package/dist/bin/pushary-logout.js +5 -6
- package/dist/bin/pushary-mode.js +2 -2
- package/dist/bin/pushary-notification-hook.js +6 -4
- package/dist/bin/pushary-opencode-hook.js +14 -6
- package/dist/bin/pushary-permission-denied-hook.js +7 -5
- package/dist/bin/pushary-permission-hook.js +7 -5
- package/dist/bin/pushary-post-hook.js +6 -4
- package/dist/bin/pushary-prompt-hook.js +6 -4
- package/dist/bin/pushary-session-end-hook.js +6 -4
- package/dist/bin/pushary-session-start-hook.js +6 -4
- package/dist/bin/pushary-setup.js +125 -39
- package/dist/bin/pushary-stats.js +2 -2
- package/dist/bin/pushary-status.js +7 -6
- package/dist/bin/pushary-stop-hook.js +6 -4
- package/dist/bin/pushary-stopfailure-hook.js +6 -4
- package/dist/bin/pushary-suggestions.js +2 -2
- package/dist/bin/pushary-upgrade.js +110 -46
- package/dist/bin/pushary-wait.js +2 -2
- package/dist/bin/pushary.js +1 -1
- package/dist/chunk-2HYPZLYY.js +45 -0
- package/dist/{chunk-GOEXZ5QJ.js → chunk-3XTFX4CL.js} +10 -2
- package/dist/{chunk-ZYPS2XMT.js → chunk-4ZHQNBDP.js} +1 -1
- package/dist/{chunk-HUJAAWNL.js → chunk-GKAKAOKC.js} +10 -3
- package/dist/{chunk-LGXTBUT4.js → chunk-KOPUTJQC.js} +1 -0
- package/dist/{chunk-LALHWDWL.js → chunk-L3YUHEB6.js} +16 -4
- package/dist/{chunk-SQOFGPNX.js → chunk-LURY4WNF.js} +1 -1
- package/dist/{chunk-JT6TIBYH.js → chunk-MZBT2LXW.js} +4 -4
- package/dist/{chunk-3UBYTSCY.js → chunk-NFI2K2ZQ.js} +15 -7
- package/dist/chunk-NKHEHEUM.js +56 -0
- package/dist/{chunk-3O2XPYLF.js → chunk-OBI4YMCT.js} +1 -1
- package/dist/{chunk-LUCFN47K.js → chunk-QH4AA7QV.js} +1 -1
- package/dist/chunk-TRQ46MXR.js +648 -0
- package/dist/{chunk-VKVHY5HD.js → chunk-V37ZXMH3.js} +11 -3
- package/dist/{chunk-MHBC2XUP.js → chunk-VP7SDXYG.js} +1 -1
- package/dist/{chunk-B7JE4XHD.js → chunk-WQGMUIDW.js} +1 -1
- package/dist/src/index.js +7 -5
- package/package.json +1 -1
- package/dist/chunk-GIRT7677.js +0 -11
- package/dist/chunk-K42SZKYF.js +0 -343
- package/dist/chunk-NRGRUOAR.js +0 -25
- package/dist/chunk-RN3NOEJF.js +0 -9
package/README.md
CHANGED
|
@@ -113,6 +113,46 @@ npx @pushary/agent-hooks@latest doctor
|
|
|
113
113
|
|
|
114
114
|
Any other MCP client can use notify and ask by pointing at the Pushary MCP endpoint directly.
|
|
115
115
|
|
|
116
|
+
## Control an agent from your phone
|
|
117
|
+
|
|
118
|
+
The Pushary app can start an agent on a connected computer and send instructions
|
|
119
|
+
to a running session. It is deliberately not a remote shell: the phone submits a
|
|
120
|
+
task to the selected agent, and the agent still runs with its normal permissions,
|
|
121
|
+
hooks, and approval policy on your computer.
|
|
122
|
+
|
|
123
|
+
| Control | Claude Code | Codex | Gemini CLI | Other agents |
|
|
124
|
+
|---------|:-----------:|:-----:|:----------:|:------------:|
|
|
125
|
+
| Start a new session | yes | yes | yes | no |
|
|
126
|
+
| Send an instruction to a live session | yes | yes | yes | wrapper-dependent |
|
|
127
|
+
| Approve, deny, and answer | yes | yes | yes | yes via MCP |
|
|
128
|
+
|
|
129
|
+
Requirements and limits:
|
|
130
|
+
|
|
131
|
+
- Run setup once. It installs a per-user background service using LaunchAgent on
|
|
132
|
+
macOS, systemd on Linux, or Task Scheduler on Windows.
|
|
133
|
+
- The computer must be awake, logged in, online, and have the selected agent CLI
|
|
134
|
+
installed. Pushary advertises only providers it finds on that machine.
|
|
135
|
+
- Start and Send require Face ID, Touch ID, or the device passcode. Controls are
|
|
136
|
+
hidden when the machine or session has no recent live consumer.
|
|
137
|
+
- An instruction may remain queued on Pushary's server for up to one hour while
|
|
138
|
+
delivery retries. It is delivered to the agent session, never executed as a
|
|
139
|
+
raw terminal command.
|
|
140
|
+
- Agent control requires a paid plan after the trial. Current terms are on the
|
|
141
|
+
[pricing page](https://pushary.com/pricing).
|
|
142
|
+
|
|
143
|
+
Service lifecycle is explicit and cross-platform:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
pushary daemon status
|
|
147
|
+
pushary daemon install
|
|
148
|
+
pushary daemon stop
|
|
149
|
+
pushary daemon restart
|
|
150
|
+
pushary daemon uninstall
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`pushary setup` installs and verifies the service. `pushary upgrade` refreshes it,
|
|
154
|
+
and `pushary clean` stops and removes it.
|
|
155
|
+
|
|
116
156
|
## Hook events, gated by version
|
|
117
157
|
|
|
118
158
|
Claude Code 2.1.239 names thirty-one hook events and the set grows release by release,
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleBell
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-WQGMUIDW.js";
|
|
5
5
|
import {
|
|
6
6
|
readHookInput
|
|
7
7
|
} from "../chunk-6CUUA7HO.js";
|
|
8
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-L3YUHEB6.js";
|
|
9
9
|
import "../chunk-BC3VCZ3E.js";
|
|
10
|
-
import "../chunk-6MTNS63X.js";
|
|
11
10
|
import "../chunk-OFRNZWC4.js";
|
|
11
|
+
import "../chunk-6MTNS63X.js";
|
|
12
12
|
import "../chunk-2UMNXADU.js";
|
|
13
13
|
import "../chunk-L4C2JXJS.js";
|
|
14
14
|
|
package/dist/bin/pushary-bell.js
CHANGED
|
@@ -5,37 +5,36 @@ import {
|
|
|
5
5
|
liveAgentCount,
|
|
6
6
|
ring,
|
|
7
7
|
upgradeThreshold
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-WQGMUIDW.js";
|
|
9
9
|
import {
|
|
10
10
|
guardBinary
|
|
11
11
|
} from "../chunk-AIGDBRIJ.js";
|
|
12
12
|
import "../chunk-PZA7G4CN.js";
|
|
13
13
|
import {
|
|
14
14
|
claudeSettings
|
|
15
|
-
} from "../chunk-
|
|
16
|
-
import "../chunk-GIRT7677.js";
|
|
15
|
+
} from "../chunk-V37ZXMH3.js";
|
|
17
16
|
import {
|
|
18
17
|
createIo
|
|
19
18
|
} from "../chunk-5RUIFDTP.js";
|
|
20
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-L3YUHEB6.js";
|
|
21
20
|
import {
|
|
22
21
|
parseFlags
|
|
23
22
|
} from "../chunk-GMXKITVA.js";
|
|
24
23
|
import {
|
|
25
24
|
exitOnHelpFlag
|
|
26
|
-
} from "../chunk-
|
|
27
|
-
import "../chunk-
|
|
25
|
+
} from "../chunk-LURY4WNF.js";
|
|
26
|
+
import "../chunk-3XTFX4CL.js";
|
|
28
27
|
import "../chunk-BC3VCZ3E.js";
|
|
29
28
|
import "../chunk-DINDL2CF.js";
|
|
30
|
-
import {
|
|
31
|
-
readJsonSafe,
|
|
32
|
-
writeJsonAtomic
|
|
33
|
-
} from "../chunk-6MTNS63X.js";
|
|
34
29
|
import "../chunk-OFRNZWC4.js";
|
|
35
30
|
import "../chunk-7QLSKOSU.js";
|
|
36
31
|
import {
|
|
37
32
|
EXIT
|
|
38
33
|
} from "../chunk-KZERVKTD.js";
|
|
34
|
+
import {
|
|
35
|
+
readJsonSafe,
|
|
36
|
+
writeJsonAtomic
|
|
37
|
+
} from "../chunk-6MTNS63X.js";
|
|
39
38
|
import "../chunk-2UMNXADU.js";
|
|
40
39
|
import "../chunk-L4C2JXJS.js";
|
|
41
40
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ensureDaemonRunning
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-TRQ46MXR.js";
|
|
5
5
|
import {
|
|
6
6
|
buildTranscriptRecords,
|
|
7
7
|
decodePublicKey,
|
|
@@ -13,48 +13,48 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
startProcessOwnership,
|
|
15
15
|
withSpawnProcessOwnership
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-4ZHQNBDP.js";
|
|
17
17
|
import {
|
|
18
18
|
needsShell,
|
|
19
19
|
spawnClaude
|
|
20
20
|
} from "../chunk-XHKBHWLX.js";
|
|
21
21
|
import "../chunk-PZA7G4CN.js";
|
|
22
|
-
import "../chunk-VKVHY5HD.js";
|
|
23
22
|
import {
|
|
24
23
|
isDeferAnswer
|
|
25
24
|
} from "../chunk-YHG74UFF.js";
|
|
26
|
-
import "../chunk-GIRT7677.js";
|
|
27
25
|
import {
|
|
28
26
|
fetchModeState,
|
|
29
27
|
getPolicy,
|
|
30
28
|
repoKeyFor,
|
|
31
29
|
reportEvent
|
|
32
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-NFI2K2ZQ.js";
|
|
33
31
|
import {
|
|
34
32
|
DEFAULT_SESSION,
|
|
35
33
|
askUser,
|
|
36
34
|
cancelQuestion,
|
|
37
35
|
markPendingCommandDelivered,
|
|
36
|
+
markPendingCommandFailed,
|
|
38
37
|
readPendingCommand,
|
|
39
38
|
removePendingCommand,
|
|
40
39
|
savePendingCommand,
|
|
41
40
|
waitForAnswer
|
|
42
|
-
} from "../chunk-
|
|
41
|
+
} from "../chunk-GKAKAOKC.js";
|
|
43
42
|
import {
|
|
44
43
|
deriveToolTarget,
|
|
45
44
|
describeToolCall,
|
|
46
45
|
scopePathFor
|
|
47
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-KOPUTJQC.js";
|
|
48
47
|
import {
|
|
49
48
|
getMachineId
|
|
50
|
-
} from "../chunk-
|
|
49
|
+
} from "../chunk-2HYPZLYY.js";
|
|
50
|
+
import "../chunk-V37ZXMH3.js";
|
|
51
51
|
import "../chunk-DINDL2CF.js";
|
|
52
|
-
import "../chunk-6MTNS63X.js";
|
|
53
52
|
import "../chunk-BSZYIAZL.js";
|
|
54
53
|
import "../chunk-SAF6HGAA.js";
|
|
55
54
|
import "../chunk-OFRNZWC4.js";
|
|
56
55
|
import "../chunk-7QLSKOSU.js";
|
|
57
56
|
import "../chunk-KZERVKTD.js";
|
|
57
|
+
import "../chunk-6MTNS63X.js";
|
|
58
58
|
import {
|
|
59
59
|
getApiKey,
|
|
60
60
|
getBaseUrl
|
|
@@ -299,14 +299,14 @@ var BoundedInputQueue = class {
|
|
|
299
299
|
this.coalesce = options.coalesce;
|
|
300
300
|
}
|
|
301
301
|
push(item) {
|
|
302
|
-
if (this.closed) return;
|
|
302
|
+
if (this.closed) return false;
|
|
303
303
|
this.pushedCount++;
|
|
304
304
|
if (this.waiter) {
|
|
305
305
|
const resolve2 = this.waiter;
|
|
306
306
|
this.waiter = void 0;
|
|
307
307
|
this.deliveredCount++;
|
|
308
308
|
resolve2({ value: item, done: false });
|
|
309
|
-
return;
|
|
309
|
+
return true;
|
|
310
310
|
}
|
|
311
311
|
this.buffer.push(item);
|
|
312
312
|
while (this.buffer.length > this.cap) {
|
|
@@ -314,6 +314,7 @@ var BoundedInputQueue = class {
|
|
|
314
314
|
this.droppedCount++;
|
|
315
315
|
this.onDrop?.(dropped, this.droppedCount);
|
|
316
316
|
}
|
|
317
|
+
return true;
|
|
317
318
|
}
|
|
318
319
|
// Mark done. Any parked consumer completes; further push() is ignored. The
|
|
319
320
|
// buffer is cleared so nothing is retained after shutdown.
|
|
@@ -620,10 +621,20 @@ var startCommandPoller = (opts) => {
|
|
|
620
621
|
errorStreak = 0;
|
|
621
622
|
if (command) {
|
|
622
623
|
idleTicks = 0;
|
|
624
|
+
const text = typeof command === "string" ? command : command.text;
|
|
625
|
+
let accepted = false;
|
|
623
626
|
try {
|
|
624
|
-
opts.onCommand(
|
|
627
|
+
accepted = opts.onCommand(text) !== false;
|
|
625
628
|
} catch {
|
|
626
629
|
}
|
|
630
|
+
if (typeof command !== "string") {
|
|
631
|
+
const state = accepted ? "delivered" : "failed";
|
|
632
|
+
if (command.acknowledge) {
|
|
633
|
+
await command.acknowledge(state).catch(() => false);
|
|
634
|
+
} else if (opts.ackCommand) {
|
|
635
|
+
await opts.ackCommand(opts.apiKey, command.id, state).catch(() => false);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
627
638
|
} else {
|
|
628
639
|
idleTicks++;
|
|
629
640
|
}
|
|
@@ -667,27 +678,40 @@ var pollAgent = async (apiKey, sessionId, wantCommand, signal, baseUrl = getBase
|
|
|
667
678
|
});
|
|
668
679
|
if (!response.ok) return { command: null, mode: null };
|
|
669
680
|
const data = await response.json();
|
|
670
|
-
const acknowledge = async (id) => {
|
|
681
|
+
const acknowledge = async (id, state) => {
|
|
682
|
+
const persisted = state === "delivered" ? markPendingCommandDelivered(sessionKey, id, receiptNamespace) : markPendingCommandFailed(sessionKey, id, receiptNamespace);
|
|
683
|
+
if (!persisted) return false;
|
|
671
684
|
try {
|
|
672
685
|
const acknowledged = await fetch(`${baseUrl}/api/agent/command/ack`, {
|
|
673
686
|
method: "POST",
|
|
674
687
|
headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` },
|
|
675
|
-
body: JSON.stringify({
|
|
688
|
+
body: JSON.stringify({
|
|
689
|
+
commandId: id,
|
|
690
|
+
sessionId: sessionId ?? null,
|
|
691
|
+
machineId,
|
|
692
|
+
state,
|
|
693
|
+
...state === "failed" ? { failureCode: "consumer_rejected" } : {}
|
|
694
|
+
}),
|
|
676
695
|
signal
|
|
677
696
|
});
|
|
697
|
+
if (acknowledged.ok) removePendingCommand(sessionKey, id, receiptNamespace);
|
|
678
698
|
return acknowledged.ok;
|
|
679
699
|
} catch {
|
|
680
700
|
return false;
|
|
681
701
|
}
|
|
682
702
|
};
|
|
703
|
+
const claimedCommand = (id, text) => ({
|
|
704
|
+
id,
|
|
705
|
+
text,
|
|
706
|
+
acknowledge: (state) => acknowledge(id, state)
|
|
707
|
+
});
|
|
683
708
|
let command = typeof data.command === "string" && data.command.length > 0 ? data.command : null;
|
|
684
709
|
if (storedCommand) {
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
if (acknowledged && !storedCommand.delivered && markPendingCommandDelivered(sessionKey, storedCommand.id, receiptNamespace)) {
|
|
688
|
-
command = storedCommand.text;
|
|
689
|
-
} else {
|
|
710
|
+
if (storedCommand.delivered || storedCommand.failed) {
|
|
711
|
+
await acknowledge(storedCommand.id, storedCommand.failed ? "failed" : "delivered");
|
|
690
712
|
command = null;
|
|
713
|
+
} else {
|
|
714
|
+
command = claimedCommand(storedCommand.id, storedCommand.text);
|
|
691
715
|
}
|
|
692
716
|
} else if (data.command && typeof data.command === "object") {
|
|
693
717
|
const claimed = data.command;
|
|
@@ -698,7 +722,7 @@ var pollAgent = async (apiKey, sessionId, wantCommand, signal, baseUrl = getBase
|
|
|
698
722
|
expiresAtMs: typeof claimed.expiresAtMs === "number" ? claimed.expiresAtMs : Date.now() + 36e5,
|
|
699
723
|
delivered: false
|
|
700
724
|
}, receiptNamespace);
|
|
701
|
-
command = saved
|
|
725
|
+
command = saved ? claimedCommand(claimed.id, claimed.text) : null;
|
|
702
726
|
}
|
|
703
727
|
}
|
|
704
728
|
const m = data.override?.mode;
|
|
@@ -843,15 +867,26 @@ var createRelayClient = (options) => {
|
|
|
843
867
|
break;
|
|
844
868
|
case "command":
|
|
845
869
|
if (seenSet.has(frame.id)) {
|
|
846
|
-
sendFrame({ v: PROTOCOL_VERSION, t: "ack", id: frame.id });
|
|
870
|
+
sendFrame({ v: PROTOCOL_VERSION, t: "ack", id: frame.id, state: "delivered" });
|
|
847
871
|
break;
|
|
848
872
|
}
|
|
873
|
+
let accepted = false;
|
|
849
874
|
try {
|
|
850
|
-
options.onCommand(frame.text);
|
|
851
|
-
rememberCommand(frame.id);
|
|
852
|
-
sendFrame({ v: PROTOCOL_VERSION, t: "ack", id: frame.id });
|
|
875
|
+
accepted = options.onCommand(frame.text) !== false;
|
|
853
876
|
} catch {
|
|
854
877
|
}
|
|
878
|
+
if (accepted) {
|
|
879
|
+
rememberCommand(frame.id);
|
|
880
|
+
sendFrame({ v: PROTOCOL_VERSION, t: "ack", id: frame.id, state: "delivered" });
|
|
881
|
+
} else {
|
|
882
|
+
sendFrame({
|
|
883
|
+
v: PROTOCOL_VERSION,
|
|
884
|
+
t: "ack",
|
|
885
|
+
id: frame.id,
|
|
886
|
+
state: "failed",
|
|
887
|
+
failureCode: "consumer_rejected"
|
|
888
|
+
});
|
|
889
|
+
}
|
|
855
890
|
break;
|
|
856
891
|
case "ping":
|
|
857
892
|
sendFrame({ v: PROTOCOL_VERSION, t: "pong" });
|
|
@@ -1402,10 +1437,11 @@ var runDualMode = async (binary, args2, startingMode) => {
|
|
|
1402
1437
|
noticedUnavailable = true;
|
|
1403
1438
|
process.stderr.write("[pushary] phone control is unavailable this run; the instruction was not delivered.\n");
|
|
1404
1439
|
}
|
|
1405
|
-
return;
|
|
1440
|
+
return false;
|
|
1406
1441
|
}
|
|
1407
|
-
input.push(userMessage(command));
|
|
1442
|
+
if (!input.push(userMessage(command))) return false;
|
|
1408
1443
|
activeLeg?.onPhoneCommand();
|
|
1444
|
+
return true;
|
|
1409
1445
|
};
|
|
1410
1446
|
const streamMessage = (message) => {
|
|
1411
1447
|
if (message.type === "assistant") {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
shortenHome,
|
|
5
5
|
unregisterPluginLocation,
|
|
6
6
|
vscodeSettingsTargets
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-QH4AA7QV.js";
|
|
8
8
|
import "../chunk-O5B7EK5U.js";
|
|
9
9
|
import {
|
|
10
10
|
removeClaudeMcpServers,
|
|
@@ -13,9 +13,15 @@ import {
|
|
|
13
13
|
} from "../chunk-7TS2G4QG.js";
|
|
14
14
|
import "../chunk-ATBKJNWS.js";
|
|
15
15
|
import "../chunk-AIGDBRIJ.js";
|
|
16
|
+
import {
|
|
17
|
+
disableDaemonService
|
|
18
|
+
} from "../chunk-TRQ46MXR.js";
|
|
19
|
+
import "../chunk-XHKBHWLX.js";
|
|
16
20
|
import {
|
|
17
21
|
execNpm
|
|
18
22
|
} from "../chunk-PZA7G4CN.js";
|
|
23
|
+
import "../chunk-KOPUTJQC.js";
|
|
24
|
+
import "../chunk-2HYPZLYY.js";
|
|
19
25
|
import {
|
|
20
26
|
claudeJson,
|
|
21
27
|
claudeSettings,
|
|
@@ -35,16 +41,14 @@ import {
|
|
|
35
41
|
removeCodexHookTrust,
|
|
36
42
|
removeCodexHooks,
|
|
37
43
|
vscodePluginDir
|
|
38
|
-
} from "../chunk-
|
|
39
|
-
import "../chunk-GIRT7677.js";
|
|
40
|
-
import "../chunk-LGXTBUT4.js";
|
|
44
|
+
} from "../chunk-V37ZXMH3.js";
|
|
41
45
|
import {
|
|
42
46
|
rejectUnknownFlags
|
|
43
47
|
} from "../chunk-GMXKITVA.js";
|
|
44
48
|
import {
|
|
45
49
|
exitOnHelpFlag
|
|
46
|
-
} from "../chunk-
|
|
47
|
-
import "../chunk-
|
|
50
|
+
} from "../chunk-LURY4WNF.js";
|
|
51
|
+
import "../chunk-3XTFX4CL.js";
|
|
48
52
|
import {
|
|
49
53
|
removeClaudeAlias
|
|
50
54
|
} from "../chunk-BC3VCZ3E.js";
|
|
@@ -53,6 +57,8 @@ import "../chunk-7QLSKOSU.js";
|
|
|
53
57
|
import {
|
|
54
58
|
EXIT
|
|
55
59
|
} from "../chunk-KZERVKTD.js";
|
|
60
|
+
import "../chunk-6MTNS63X.js";
|
|
61
|
+
import "../chunk-2UMNXADU.js";
|
|
56
62
|
import {
|
|
57
63
|
CURSOR_GATE_EVENTS
|
|
58
64
|
} from "../chunk-L4C2JXJS.js";
|
|
@@ -136,6 +142,13 @@ var guards = createGuards(() => dryRun, wouldNote);
|
|
|
136
142
|
var guardedWrite = (path, contents) => guards.write(path, contents);
|
|
137
143
|
var guardedRemove = (path, options) => guards.remove(path, options);
|
|
138
144
|
var guardedExec = (command, options, describe) => guards.exec(command, options ?? {}, describe);
|
|
145
|
+
var guardedDaemonRemoval = async () => {
|
|
146
|
+
if (dryRun) {
|
|
147
|
+
wouldNote("stop and uninstall", "Pushary background service");
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return (await disableDaemonService()).kind === "ok";
|
|
151
|
+
};
|
|
139
152
|
var guardedInstructionBlockRemoval = (path) => {
|
|
140
153
|
if (!dryRun) return removeInstructionBlock(path);
|
|
141
154
|
if (!existsSync(path)) return false;
|
|
@@ -421,6 +434,12 @@ var main = async () => {
|
|
|
421
434
|
} else {
|
|
422
435
|
console.log(` ${skip} claude alias ${dim("(not set)")}`);
|
|
423
436
|
}
|
|
437
|
+
if (await guardedDaemonRemoval()) {
|
|
438
|
+
console.log(` ${check} Background service ${dim(did("uninstalled"))}`);
|
|
439
|
+
} else {
|
|
440
|
+
incompleteClean = true;
|
|
441
|
+
console.log(` ${cross} Background service ${dim("(could not stop or uninstall)")}`);
|
|
442
|
+
}
|
|
424
443
|
if (existsSync(PUSHARY_DIR)) {
|
|
425
444
|
guardedRemove(PUSHARY_DIR);
|
|
426
445
|
console.log(` ${check} Local state ${dim("(~/.pushary removed: stored API key, ledger)")}`);
|
|
@@ -464,7 +483,6 @@ var main = async () => {
|
|
|
464
483
|
console.log(` ${dim("It still has the")} ${bold("claude")} ${dim("alias loaded from before. Run")} ${bold("unalias claude")}`);
|
|
465
484
|
console.log(` ${dim("(or open a new terminal) so")} ${bold("claude")} ${dim("runs Claude Code again.")}`);
|
|
466
485
|
}
|
|
467
|
-
console.log(` ${dim("If a")} ${bold("pushary claude")} ${dim("or")} ${bold("pushary daemon")} ${dim("is still running anywhere, stop it (Ctrl-C).")}`);
|
|
468
486
|
console.log();
|
|
469
487
|
if (incompleteClean) process.exit(EXIT.FAILED);
|
|
470
488
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "../chunk-
|
|
2
|
+
import "../chunk-NKHEHEUM.js";
|
|
3
3
|
import {
|
|
4
4
|
LiveTranscriptRelay,
|
|
5
5
|
liveSessionSleep,
|
|
@@ -11,18 +11,17 @@ import "../chunk-PMHTCDEO.js";
|
|
|
11
11
|
import {
|
|
12
12
|
startProcessOwnership,
|
|
13
13
|
withSpawnProcessOwnership
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-4ZHQNBDP.js";
|
|
15
15
|
import {
|
|
16
16
|
spawnClaude
|
|
17
17
|
} from "../chunk-XHKBHWLX.js";
|
|
18
18
|
import {
|
|
19
19
|
resolveBinary
|
|
20
20
|
} from "../chunk-PZA7G4CN.js";
|
|
21
|
-
import "../chunk-VKVHY5HD.js";
|
|
22
|
-
import "../chunk-GIRT7677.js";
|
|
23
21
|
import {
|
|
24
22
|
getMachineId
|
|
25
|
-
} from "../chunk-
|
|
23
|
+
} from "../chunk-2HYPZLYY.js";
|
|
24
|
+
import "../chunk-V37ZXMH3.js";
|
|
26
25
|
import "../chunk-6MTNS63X.js";
|
|
27
26
|
import {
|
|
28
27
|
getApiKey,
|
|
@@ -10,9 +10,6 @@ import {
|
|
|
10
10
|
denyReasonFrom,
|
|
11
11
|
isDeferAnswer
|
|
12
12
|
} from "../chunk-YHG74UFF.js";
|
|
13
|
-
import {
|
|
14
|
-
canonicalJson
|
|
15
|
-
} from "../chunk-GIRT7677.js";
|
|
16
13
|
import {
|
|
17
14
|
CODEX_AGENT,
|
|
18
15
|
codexAllow,
|
|
@@ -34,7 +31,7 @@ import {
|
|
|
34
31
|
toCodexWire,
|
|
35
32
|
toPolicyLookup,
|
|
36
33
|
toPolicyLookups
|
|
37
|
-
} from "../chunk-
|
|
34
|
+
} from "../chunk-NFI2K2ZQ.js";
|
|
38
35
|
import {
|
|
39
36
|
DEFAULT_SESSION,
|
|
40
37
|
askUser,
|
|
@@ -42,22 +39,26 @@ import {
|
|
|
42
39
|
pollForAnswer,
|
|
43
40
|
savePendingQuestion,
|
|
44
41
|
sendNotification
|
|
45
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-GKAKAOKC.js";
|
|
46
43
|
import {
|
|
47
44
|
deriveActionBody,
|
|
48
45
|
deriveBlocker,
|
|
49
46
|
deriveToolTarget,
|
|
50
47
|
describeToolCall,
|
|
51
48
|
scopePathFor
|
|
52
|
-
} from "../chunk-
|
|
49
|
+
} from "../chunk-KOPUTJQC.js";
|
|
53
50
|
import {
|
|
54
51
|
getMachineId
|
|
55
|
-
} from "../chunk-
|
|
52
|
+
} from "../chunk-2HYPZLYY.js";
|
|
53
|
+
import {
|
|
54
|
+
canonicalJson
|
|
55
|
+
} from "../chunk-V37ZXMH3.js";
|
|
56
56
|
import "../chunk-BSZYIAZL.js";
|
|
57
57
|
import "../chunk-SAF6HGAA.js";
|
|
58
58
|
import "../chunk-OFRNZWC4.js";
|
|
59
59
|
import "../chunk-7QLSKOSU.js";
|
|
60
60
|
import "../chunk-KZERVKTD.js";
|
|
61
|
+
import "../chunk-6MTNS63X.js";
|
|
61
62
|
import {
|
|
62
63
|
getApiKey
|
|
63
64
|
} from "../chunk-2UMNXADU.js";
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
reportEvent
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-NFI2K2ZQ.js";
|
|
5
5
|
import {
|
|
6
6
|
askUser,
|
|
7
7
|
waitForAnswer
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
} from "../chunk-GKAKAOKC.js";
|
|
9
|
+
import "../chunk-KOPUTJQC.js";
|
|
10
10
|
import {
|
|
11
11
|
getMachineId
|
|
12
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-2HYPZLYY.js";
|
|
13
|
+
import "../chunk-V37ZXMH3.js";
|
|
13
14
|
import "../chunk-BSZYIAZL.js";
|
|
14
15
|
import "../chunk-SAF6HGAA.js";
|
|
15
16
|
import "../chunk-OFRNZWC4.js";
|
|
16
17
|
import "../chunk-7QLSKOSU.js";
|
|
17
18
|
import "../chunk-KZERVKTD.js";
|
|
19
|
+
import "../chunk-6MTNS63X.js";
|
|
18
20
|
import {
|
|
19
21
|
getApiKey
|
|
20
22
|
} from "../chunk-2UMNXADU.js";
|
|
@@ -16,17 +16,16 @@ import {
|
|
|
16
16
|
} from "../chunk-5RUIFDTP.js";
|
|
17
17
|
import {
|
|
18
18
|
readKeySource
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-L3YUHEB6.js";
|
|
20
20
|
import {
|
|
21
21
|
parseFlags
|
|
22
22
|
} from "../chunk-GMXKITVA.js";
|
|
23
23
|
import {
|
|
24
24
|
exitOnHelpFlag
|
|
25
|
-
} from "../chunk-
|
|
26
|
-
import "../chunk-
|
|
25
|
+
} from "../chunk-LURY4WNF.js";
|
|
26
|
+
import "../chunk-3XTFX4CL.js";
|
|
27
27
|
import "../chunk-BC3VCZ3E.js";
|
|
28
28
|
import "../chunk-DINDL2CF.js";
|
|
29
|
-
import "../chunk-6MTNS63X.js";
|
|
30
29
|
import "../chunk-BSZYIAZL.js";
|
|
31
30
|
import "../chunk-SAF6HGAA.js";
|
|
32
31
|
import "../chunk-OFRNZWC4.js";
|
|
@@ -36,6 +35,7 @@ import {
|
|
|
36
35
|
import {
|
|
37
36
|
EXIT
|
|
38
37
|
} from "../chunk-KZERVKTD.js";
|
|
38
|
+
import "../chunk-6MTNS63X.js";
|
|
39
39
|
import "../chunk-2UMNXADU.js";
|
|
40
40
|
import "../chunk-L4C2JXJS.js";
|
|
41
41
|
|