@pushary/agent-hooks 1.9.42 → 1.9.44
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 +9 -0
- package/README.md +1 -0
- package/data/SKILL.md +7 -1
- package/data/cowork/SKILL.md +3 -1
- package/data/cursor-plugin/.cursor-plugin/plugin.json +1 -1
- package/data/cursor-plugin/skills/pushary/SKILL.md +6 -0
- package/data/vscode-plugin/skills/pushary/SKILL.md +6 -0
- package/dist/bin/pushary-bell-hook.js +27 -26
- package/dist/bin/pushary-bell.js +11 -11
- package/dist/bin/pushary-claude.js +30 -28
- package/dist/bin/pushary-clean.js +39 -38
- package/dist/bin/pushary-codex-bridge.js +38 -28
- package/dist/bin/pushary-codex-hook.js +35 -33
- package/dist/bin/pushary-codex-session.d.ts +1 -0
- package/dist/bin/pushary-codex-session.js +253 -0
- package/dist/bin/pushary-codex.js +13 -12
- package/dist/bin/pushary-connect.js +28 -27
- package/dist/bin/pushary-cowork.js +6 -6
- package/dist/bin/pushary-daemon.js +48 -47
- package/dist/bin/pushary-disconnect.js +27 -26
- package/dist/bin/pushary-doctor.js +85 -82
- package/dist/bin/pushary-elicitation-hook.js +27 -26
- package/dist/bin/pushary-gemini-bridge.js +22 -22
- package/dist/bin/pushary-gemini-hook.js +32 -30
- package/dist/bin/pushary-hook.js +33 -32
- package/dist/bin/pushary-login.js +16 -16
- package/dist/bin/pushary-logout.js +28 -27
- package/dist/bin/pushary-mcp.js +9 -9
- package/dist/bin/pushary-mode.js +14 -14
- package/dist/bin/pushary-notification-hook.js +26 -25
- package/dist/bin/pushary-opencode-hook.js +31 -29
- package/dist/bin/pushary-permission-denied-hook.js +31 -30
- package/dist/bin/pushary-permission-hook.js +30 -29
- package/dist/bin/pushary-post-hook.js +26 -25
- package/dist/bin/pushary-prompt-hook.js +26 -25
- package/dist/bin/pushary-session-end-hook.js +26 -25
- package/dist/bin/pushary-session-start-hook.js +31 -30
- package/dist/bin/pushary-setup.js +165 -112
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +35 -34
- package/dist/bin/pushary-stop-hook.js +26 -25
- package/dist/bin/pushary-stopfailure-hook.js +26 -25
- package/dist/bin/pushary-suggestions.js +14 -14
- package/dist/bin/pushary-transcript-register.js +18 -18
- package/dist/bin/pushary-transcripts.js +7 -7
- package/dist/bin/pushary-upgrade.js +41 -40
- package/dist/bin/pushary-wait.js +14 -14
- package/dist/bin/pushary.js +7 -6
- package/dist/{chunk-ZX3PFROQ.js → chunk-2NVXFWQY.js} +1 -1
- package/dist/{chunk-7L6YSHZO.js → chunk-3IRC3XFG.js} +2 -2
- package/dist/{chunk-IXNVIWNN.js → chunk-42CVAOC5.js} +2 -2
- package/dist/{chunk-EBZK2SJ2.js → chunk-4JHEZ2PV.js} +12 -5
- package/dist/{chunk-JBK47Y2M.js → chunk-4WBAHVBK.js} +11 -11
- package/dist/{chunk-AW4TDBUJ.js → chunk-53UZN7JW.js} +3 -3
- package/dist/{chunk-I7EZMNKI.js → chunk-5ZSBQHCM.js} +12 -173
- package/dist/{chunk-KYFWYPHN.js → chunk-6EV3B5CD.js} +1 -1
- package/dist/{chunk-X7TNLYNZ.js → chunk-75M7NFFC.js} +1 -1
- package/dist/{chunk-AUDM6HU6.js → chunk-7UM4NCUI.js} +2 -2
- package/dist/{chunk-5INZFKHL.js → chunk-ALY7ZBNB.js} +1 -1
- package/dist/{chunk-CGRVIUKE.js → chunk-BKK3JCTD.js} +80 -164
- package/dist/{chunk-K2SSNAUW.js → chunk-CAJCCQ7N.js} +1 -1
- package/dist/{chunk-B7PZBWBU.js → chunk-CESLE4UN.js} +10 -10
- package/dist/{chunk-MI67QQEQ.js → chunk-CEZTYTBN.js} +13 -11
- package/dist/{chunk-6PABNQVH.js → chunk-DD6IBKEJ.js} +4 -4
- package/dist/{chunk-Z4RM54LU.js → chunk-E76QCZIA.js} +2 -2
- package/dist/{chunk-RBUCXUT7.js → chunk-FI2F5KZJ.js} +4 -4
- package/dist/{chunk-IVUP2EE4.js → chunk-FKDZU6YX.js} +4 -4
- package/dist/{chunk-EA5NWDK7.js → chunk-FYNMFSIZ.js} +29 -0
- package/dist/{chunk-M2YE3OEC.js → chunk-GBCR2FH2.js} +3 -3
- package/dist/chunk-GOEIW2VH.js +266 -0
- package/dist/{chunk-JQX2L3ES.js → chunk-GRAPJKDK.js} +1 -1
- package/dist/{chunk-DPISXMLL.js → chunk-HV4TEKNP.js} +4 -4
- package/dist/{chunk-FMYXPJYS.js → chunk-IWHDNMM3.js} +5 -5
- package/dist/{chunk-ORLTWJ2O.js → chunk-JNU3LV47.js} +355 -138
- package/dist/{chunk-ZJY4KON3.js → chunk-KILK6SWZ.js} +7 -7
- package/dist/{chunk-J7OBJZ5S.js → chunk-KYLY6UMN.js} +1 -1
- package/dist/{chunk-T3Q4B6WV.js → chunk-L2ZM7LXN.js} +2 -2
- package/dist/{chunk-PJ3C6IID.js → chunk-LEHBWBCG.js} +4 -4
- package/dist/{chunk-ODPULZZG.js → chunk-M2L7625S.js} +2 -2
- package/dist/{chunk-BDSIE2MT.js → chunk-MIBCRQWK.js} +2 -2
- package/dist/{chunk-MAB6CGL5.js → chunk-MRQJCIFO.js} +1 -1
- package/dist/{chunk-F43LAKAK.js → chunk-OR6KJOHE.js} +2 -2
- package/dist/{chunk-Y3HTWB5S.js → chunk-OSMNLNPF.js} +1 -1
- package/dist/{chunk-CHD6IUNM.js → chunk-OWQOMGBF.js} +1 -1
- package/dist/{chunk-RTM5GVRZ.js → chunk-OZ7MLVDM.js} +15 -15
- package/dist/{chunk-4WM7IVVQ.js → chunk-PGHN5D4N.js} +2 -2
- package/dist/{chunk-OLLWYLQX.js → chunk-PQAFH4DF.js} +3 -11
- package/dist/{chunk-E47JEBUR.js → chunk-RGBTKOCC.js} +45 -8
- package/dist/{chunk-4UCTKLHY.js → chunk-S2ALW446.js} +3 -3
- package/dist/{chunk-3U3FU6ZX.js → chunk-SI2NC6UU.js} +3 -3
- package/dist/chunk-SVCT5D7K.js +196 -0
- package/dist/{chunk-ZVMFRUBD.js → chunk-SWDPCDLT.js} +4 -4
- package/dist/{chunk-DIJ532S7.js → chunk-T3KMJI4W.js} +2 -1
- package/dist/{chunk-NRSTNZYJ.js → chunk-T4CKP47U.js} +5 -5
- package/dist/{chunk-M7VKFAAK.js → chunk-TJZUQRMH.js} +3 -3
- package/dist/{chunk-ZV56INA6.js → chunk-TKTS3SIM.js} +3 -3
- package/dist/{chunk-RETRVO47.js → chunk-TWATOPHK.js} +2 -2
- package/dist/{chunk-WZNRDDC4.js → chunk-UC4PNLMK.js} +6 -6
- package/dist/{chunk-ASXBYX2N.js → chunk-UJXLVH66.js} +1 -1
- package/dist/{chunk-Q3QRD67J.js → chunk-UY5E2UUW.js} +5 -5
- package/dist/{chunk-FP2ZJK3T.js → chunk-UZVF6MP2.js} +5 -5
- package/dist/{chunk-STETTN4K.js → chunk-W2TA4EVZ.js} +5 -5
- package/dist/{chunk-QRNNIDGY.js → chunk-WBD7HZEZ.js} +1 -1
- package/dist/{chunk-QPT4PTUG.js → chunk-WMO2XVG4.js} +1 -1
- package/dist/{chunk-BZIXDIIT.js → chunk-XPQDBTW4.js} +1 -1
- package/dist/{global-upgrade-YEAGJG4G.js → global-upgrade-QSSDYZCZ.js} +6 -6
- package/dist/{paths-HQAICWAF.js → paths-55DDFLY4.js} +2 -2
- package/dist/{reapply-XBEB2B5A.js → reapply-MEU66ALO.js} +23 -22
- package/dist/src/index.js +20 -19
- package/dist/{upgrade-lock-GIO5QZ7E.js → upgrade-lock-YLXAU4AD.js} +3 -3
- package/package.json +5 -2
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
takeHookHoldBudget
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-KYLY6UMN.js";
|
|
5
5
|
import {
|
|
6
6
|
askAgentQuestions,
|
|
7
7
|
defersToNativeMode,
|
|
8
8
|
reportMachineDenial
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-UC4PNLMK.js";
|
|
10
10
|
import {
|
|
11
11
|
isGatingMoment,
|
|
12
12
|
recordKeylessMoment
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-GRAPJKDK.js";
|
|
14
14
|
import {
|
|
15
15
|
triggerAutoUpdate
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-3IRC3XFG.js";
|
|
17
17
|
import {
|
|
18
18
|
readHookInput
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-DD6IBKEJ.js";
|
|
20
20
|
import {
|
|
21
21
|
announceSubscriptionRequired,
|
|
22
22
|
isDeferAnswer
|
|
23
|
-
} from "../chunk-
|
|
24
|
-
import "../chunk-
|
|
23
|
+
} from "../chunk-2NVXFWQY.js";
|
|
24
|
+
import "../chunk-OZ7MLVDM.js";
|
|
25
25
|
import "../chunk-DWQYCOPI.js";
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
31
|
-
import "../chunk-
|
|
32
|
-
import "../chunk-NRSTNZYJ.js";
|
|
33
|
-
import "../chunk-3U3FU6ZX.js";
|
|
34
|
-
import "../chunk-KYFWYPHN.js";
|
|
35
|
-
import "../chunk-Y3HTWB5S.js";
|
|
26
|
+
import "../chunk-FKDZU6YX.js";
|
|
27
|
+
import "../chunk-W2TA4EVZ.js";
|
|
28
|
+
import "../chunk-T4CKP47U.js";
|
|
29
|
+
import "../chunk-SI2NC6UU.js";
|
|
30
|
+
import "../chunk-6EV3B5CD.js";
|
|
31
|
+
import "../chunk-OSMNLNPF.js";
|
|
36
32
|
import "../chunk-GMXKITVA.js";
|
|
33
|
+
import "../chunk-WBD7HZEZ.js";
|
|
34
|
+
import "../chunk-XHKBHWLX.js";
|
|
35
|
+
import "../chunk-TJZUQRMH.js";
|
|
36
|
+
import "../chunk-75M7NFFC.js";
|
|
37
|
+
import "../chunk-MRQJCIFO.js";
|
|
37
38
|
import "../chunk-6ICPEJY5.js";
|
|
38
|
-
import "../chunk-M7VKFAAK.js";
|
|
39
39
|
import {
|
|
40
40
|
CODEX_AGENT,
|
|
41
41
|
DEFAULT_SESSION,
|
|
@@ -70,7 +70,6 @@ import {
|
|
|
70
70
|
readLastPrompt,
|
|
71
71
|
recordBlockedActionHint,
|
|
72
72
|
recordCodexCallDecision,
|
|
73
|
-
repoKeyFor,
|
|
74
73
|
reportEvent,
|
|
75
74
|
scanCodexGuardianReviews,
|
|
76
75
|
scopePathFor,
|
|
@@ -79,13 +78,12 @@ import {
|
|
|
79
78
|
toPolicyLookup,
|
|
80
79
|
toPolicyLookups,
|
|
81
80
|
userScope
|
|
82
|
-
} from "../chunk-
|
|
83
|
-
import "../chunk-
|
|
81
|
+
} from "../chunk-BKK3JCTD.js";
|
|
82
|
+
import "../chunk-CAJCCQ7N.js";
|
|
84
83
|
import {
|
|
85
84
|
askUser,
|
|
86
85
|
cancelQuestion,
|
|
87
86
|
claimBlockedAction,
|
|
88
|
-
exitAfterClientReports,
|
|
89
87
|
isAwayPaused,
|
|
90
88
|
isDecisionStopped,
|
|
91
89
|
isLocalQuestionHandoff,
|
|
@@ -94,31 +92,35 @@ import {
|
|
|
94
92
|
sendNotification,
|
|
95
93
|
unavailableQuestionUnlessSubscriptionRequired,
|
|
96
94
|
waitForQuestion
|
|
97
|
-
} from "../chunk-
|
|
95
|
+
} from "../chunk-5ZSBQHCM.js";
|
|
96
|
+
import "../chunk-M2L7625S.js";
|
|
97
|
+
import {
|
|
98
|
+
exitAfterClientReports,
|
|
99
|
+
repoKeyFor
|
|
100
|
+
} from "../chunk-GOEIW2VH.js";
|
|
98
101
|
import "../chunk-POFBE6ZY.js";
|
|
99
102
|
import {
|
|
100
103
|
SubscriptionRequiredError
|
|
101
|
-
} from "../chunk-
|
|
102
|
-
import "../chunk-
|
|
103
|
-
import "../chunk-
|
|
104
|
+
} from "../chunk-53UZN7JW.js";
|
|
105
|
+
import "../chunk-TKTS3SIM.js";
|
|
106
|
+
import "../chunk-S2ALW446.js";
|
|
104
107
|
import {
|
|
105
108
|
getMachineId
|
|
106
|
-
} from "../chunk-
|
|
109
|
+
} from "../chunk-WMO2XVG4.js";
|
|
107
110
|
import "../chunk-7QLSKOSU.js";
|
|
108
111
|
import {
|
|
109
112
|
EXIT
|
|
110
113
|
} from "../chunk-KZERVKTD.js";
|
|
111
|
-
import "../chunk-ODPULZZG.js";
|
|
112
114
|
import {
|
|
113
115
|
canonicalJson
|
|
114
|
-
} from "../chunk-
|
|
116
|
+
} from "../chunk-4JHEZ2PV.js";
|
|
115
117
|
import {
|
|
116
118
|
writeFileAtomic
|
|
117
119
|
} from "../chunk-AQFEP65J.js";
|
|
118
120
|
import {
|
|
119
121
|
getApiKey
|
|
120
|
-
} from "../chunk-
|
|
121
|
-
import "../chunk-
|
|
122
|
+
} from "../chunk-OWQOMGBF.js";
|
|
123
|
+
import "../chunk-T3KMJI4W.js";
|
|
122
124
|
import {
|
|
123
125
|
CODEX_RESCUE_TOOL_NAME,
|
|
124
126
|
DECISION_STOP_REASON,
|
|
@@ -146,7 +148,7 @@ import {
|
|
|
146
148
|
resolveGate,
|
|
147
149
|
scopeBreachReasonOf,
|
|
148
150
|
unapprovedScopeReason
|
|
149
|
-
} from "../chunk-
|
|
151
|
+
} from "../chunk-JNU3LV47.js";
|
|
150
152
|
|
|
151
153
|
// bin/pushary-codex-hook.ts
|
|
152
154
|
import { basename } from "path";
|
|
@@ -795,7 +797,7 @@ var decidePreToolUse = async (input) => {
|
|
|
795
797
|
};
|
|
796
798
|
var repairCodexHoldsQuietly = async () => {
|
|
797
799
|
try {
|
|
798
|
-
const { repairCodexHolds } = await import("../reapply-
|
|
800
|
+
const { repairCodexHolds } = await import("../reapply-MEU66ALO.js");
|
|
799
801
|
repairCodexHolds();
|
|
800
802
|
} catch {
|
|
801
803
|
return;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
exitOnHelpFlag
|
|
4
|
+
} from "../chunk-OR6KJOHE.js";
|
|
5
|
+
import {
|
|
6
|
+
CodexNativeApprovals
|
|
7
|
+
} from "../chunk-SVCT5D7K.js";
|
|
8
|
+
import "../chunk-PQAFH4DF.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveProviderBinary
|
|
11
|
+
} from "../chunk-L2ZM7LXN.js";
|
|
12
|
+
import "../chunk-RIVNNBEK.js";
|
|
13
|
+
import "../chunk-75M7NFFC.js";
|
|
14
|
+
import "../chunk-MRQJCIFO.js";
|
|
15
|
+
import "../chunk-6ICPEJY5.js";
|
|
16
|
+
import "../chunk-GOEIW2VH.js";
|
|
17
|
+
import "../chunk-POFBE6ZY.js";
|
|
18
|
+
import "../chunk-53UZN7JW.js";
|
|
19
|
+
import "../chunk-TKTS3SIM.js";
|
|
20
|
+
import "../chunk-S2ALW446.js";
|
|
21
|
+
import {
|
|
22
|
+
getMachineId
|
|
23
|
+
} from "../chunk-WMO2XVG4.js";
|
|
24
|
+
import "../chunk-7QLSKOSU.js";
|
|
25
|
+
import "../chunk-KZERVKTD.js";
|
|
26
|
+
import "../chunk-4JHEZ2PV.js";
|
|
27
|
+
import "../chunk-AQFEP65J.js";
|
|
28
|
+
import {
|
|
29
|
+
getApiKey,
|
|
30
|
+
getBaseUrl
|
|
31
|
+
} from "../chunk-OWQOMGBF.js";
|
|
32
|
+
import "../chunk-T3KMJI4W.js";
|
|
33
|
+
import "../chunk-JNU3LV47.js";
|
|
34
|
+
|
|
35
|
+
// src/codex-session-launch.ts
|
|
36
|
+
import { spawn as spawn2 } from "child_process";
|
|
37
|
+
import { stat } from "fs/promises";
|
|
38
|
+
import { resolve } from "path";
|
|
39
|
+
|
|
40
|
+
// src/codex-shared-session.ts
|
|
41
|
+
import { spawn } from "child_process";
|
|
42
|
+
import { mkdtemp, rm } from "fs/promises";
|
|
43
|
+
import { createServer } from "http";
|
|
44
|
+
import { tmpdir } from "os";
|
|
45
|
+
import { join } from "path";
|
|
46
|
+
import WebSocket, { WebSocketServer } from "ws";
|
|
47
|
+
var record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
48
|
+
var requestId = (value) => typeof value === "string" || typeof value === "number" && Number.isSafeInteger(value);
|
|
49
|
+
var MAX_MESSAGE_BYTES = 16 * 1024 * 1024;
|
|
50
|
+
var startCodexSharedSession = async (options) => {
|
|
51
|
+
if (process.platform === "win32") throw new Error("Managed Codex sessions currently require macOS or Linux");
|
|
52
|
+
options.signal.throwIfAborted();
|
|
53
|
+
const directory = await mkdtemp(join(tmpdir(), "pushary-codex-"));
|
|
54
|
+
const socketPath = join(directory, "terminal.sock");
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
const signal = AbortSignal.any([controller.signal, options.signal]);
|
|
57
|
+
const http = createServer((_request, response) => {
|
|
58
|
+
response.writeHead(404);
|
|
59
|
+
response.end();
|
|
60
|
+
});
|
|
61
|
+
const websocket = new WebSocketServer({ server: http, maxPayload: MAX_MESSAGE_BYTES, perMessageDeflate: false });
|
|
62
|
+
const child = spawn(options.binary, ["app-server"], {
|
|
63
|
+
cwd: options.cwd,
|
|
64
|
+
env: { ...options.env ?? process.env, PUSHARY_CODEX_BRIDGE: "1" },
|
|
65
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
66
|
+
detached: true
|
|
67
|
+
});
|
|
68
|
+
child.stderr.resume();
|
|
69
|
+
const exited = new Promise((resolve2) => {
|
|
70
|
+
child.once("exit", () => {
|
|
71
|
+
controller.abort(new Error("Codex app-server stopped"));
|
|
72
|
+
resolve2();
|
|
73
|
+
});
|
|
74
|
+
child.once("error", () => {
|
|
75
|
+
controller.abort(new Error("Could not start Codex app-server"));
|
|
76
|
+
resolve2();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
let terminal = null;
|
|
80
|
+
let closing = null;
|
|
81
|
+
let buffered = "";
|
|
82
|
+
const unanswered = /* @__PURE__ */ new Set();
|
|
83
|
+
const write = (message) => {
|
|
84
|
+
if (signal.aborted || child.stdin.destroyed) throw new Error("Codex connection closed");
|
|
85
|
+
child.stdin.write(JSON.stringify(message) + "\n");
|
|
86
|
+
};
|
|
87
|
+
const approvals = new CodexNativeApprovals({ ...options, signal, shared: true, reply: (id, result) => {
|
|
88
|
+
if (!unanswered.delete(id)) throw new Error("Native request already answered");
|
|
89
|
+
write({ id, result });
|
|
90
|
+
} });
|
|
91
|
+
const observeNative = (message) => {
|
|
92
|
+
if (typeof message.method !== "string") return;
|
|
93
|
+
if (requestId(message.id)) unanswered.add(message.id);
|
|
94
|
+
if (!record(message.params)) return;
|
|
95
|
+
if (message.method === "serverRequest/resolved" && requestId(message.params.requestId)) unanswered.delete(message.params.requestId);
|
|
96
|
+
approvals.handle({ id: message.id, method: message.method, params: message.params }, typeof message.params.threadId === "string" ? message.params.threadId : null);
|
|
97
|
+
};
|
|
98
|
+
child.stdout.setEncoding("utf8");
|
|
99
|
+
child.stdout.on("data", (chunk) => {
|
|
100
|
+
buffered += chunk;
|
|
101
|
+
let end;
|
|
102
|
+
while ((end = buffered.indexOf("\n")) >= 0) {
|
|
103
|
+
const line = buffered.slice(0, end);
|
|
104
|
+
buffered = buffered.slice(end + 1);
|
|
105
|
+
if (!line.trim()) continue;
|
|
106
|
+
if (Buffer.byteLength(line) > MAX_MESSAGE_BYTES) {
|
|
107
|
+
controller.abort();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const message = JSON.parse(line);
|
|
112
|
+
if (!record(message)) throw new Error("Invalid Codex message");
|
|
113
|
+
observeNative(message);
|
|
114
|
+
if (terminal?.readyState === WebSocket.OPEN) terminal.send(line);
|
|
115
|
+
} catch {
|
|
116
|
+
controller.abort();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (Buffer.byteLength(buffered) > MAX_MESSAGE_BYTES) controller.abort();
|
|
121
|
+
});
|
|
122
|
+
child.stdin.on("error", () => controller.abort());
|
|
123
|
+
websocket.on("connection", (client) => {
|
|
124
|
+
if (terminal || signal.aborted) {
|
|
125
|
+
client.close();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
terminal = client;
|
|
129
|
+
client.on("error", () => controller.abort());
|
|
130
|
+
client.on("close", () => controller.abort());
|
|
131
|
+
client.on("message", (bytes) => {
|
|
132
|
+
try {
|
|
133
|
+
const message = JSON.parse(bytes.toString());
|
|
134
|
+
if (!record(message)) throw new Error("Invalid terminal message");
|
|
135
|
+
if (requestId(message.id) && !("method" in message)) {
|
|
136
|
+
if (!unanswered.delete(message.id)) return;
|
|
137
|
+
approvals.handle({ method: "serverRequest/resolved", params: { requestId: message.id } }, null);
|
|
138
|
+
}
|
|
139
|
+
write(message);
|
|
140
|
+
} catch {
|
|
141
|
+
controller.abort();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
const signalServerGroup = (signal2) => {
|
|
146
|
+
if (!child.pid) return false;
|
|
147
|
+
try {
|
|
148
|
+
process.kill(-child.pid, signal2);
|
|
149
|
+
return true;
|
|
150
|
+
} catch (error) {
|
|
151
|
+
if (record(error) && error.code === "ESRCH") return false;
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const stopServer = async () => {
|
|
156
|
+
signalServerGroup("SIGTERM");
|
|
157
|
+
const deadline = Date.now() + 2e3;
|
|
158
|
+
while (signalServerGroup(0) && Date.now() < deadline) await new Promise((resolve2) => setTimeout(resolve2, 25));
|
|
159
|
+
if (signalServerGroup(0)) signalServerGroup("SIGKILL");
|
|
160
|
+
await exited;
|
|
161
|
+
};
|
|
162
|
+
const close = () => {
|
|
163
|
+
if (closing) return closing;
|
|
164
|
+
closing = Promise.resolve().then(async () => {
|
|
165
|
+
controller.abort();
|
|
166
|
+
terminal?.terminate();
|
|
167
|
+
websocket.close();
|
|
168
|
+
http.close();
|
|
169
|
+
try {
|
|
170
|
+
await Promise.all([approvals.close(), stopServer()]);
|
|
171
|
+
} finally {
|
|
172
|
+
await rm(directory, { recursive: true, force: true });
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
return closing;
|
|
176
|
+
};
|
|
177
|
+
signal.addEventListener("abort", () => {
|
|
178
|
+
void close();
|
|
179
|
+
}, { once: true });
|
|
180
|
+
try {
|
|
181
|
+
await new Promise((resolve2, reject) => {
|
|
182
|
+
http.once("error", reject);
|
|
183
|
+
http.listen(socketPath, resolve2);
|
|
184
|
+
});
|
|
185
|
+
signal.throwIfAborted();
|
|
186
|
+
return { endpoint: "unix://" + socketPath, signal, close };
|
|
187
|
+
} catch (error) {
|
|
188
|
+
await close();
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// src/codex-session-launch.ts
|
|
194
|
+
var codexSessionDirectory = (args2, cwd) => {
|
|
195
|
+
if (args2.length === 0) return cwd;
|
|
196
|
+
if (args2.length === 2 && args2[0] === "--cwd" && args2[1]) return resolve(cwd, args2[1]);
|
|
197
|
+
throw new Error("Usage: pushary codex [--cwd <directory>]");
|
|
198
|
+
};
|
|
199
|
+
var launchCodexSession = async (options) => {
|
|
200
|
+
if (!(await stat(options.cwd)).isDirectory()) throw new Error("Codex needs a project directory");
|
|
201
|
+
const session = await startCodexSharedSession(options);
|
|
202
|
+
try {
|
|
203
|
+
process.stderr.write("[pushary] Managed Codex session. Supported native permissions can reach Pushary; other prompts stay in this terminal.\n");
|
|
204
|
+
const tui = spawn2(options.binary, ["--remote", session.endpoint], {
|
|
205
|
+
cwd: options.cwd,
|
|
206
|
+
env: { ...options.env ?? process.env, PUSHARY_CODEX_BRIDGE: "1" },
|
|
207
|
+
stdio: "inherit"
|
|
208
|
+
});
|
|
209
|
+
const stop = () => {
|
|
210
|
+
tui.kill("SIGTERM");
|
|
211
|
+
};
|
|
212
|
+
session.signal.addEventListener("abort", stop, { once: true });
|
|
213
|
+
if (session.signal.aborted) stop();
|
|
214
|
+
try {
|
|
215
|
+
return await new Promise((resolve2, reject) => {
|
|
216
|
+
tui.once("error", reject);
|
|
217
|
+
tui.once("close", (code) => resolve2(code ?? 1));
|
|
218
|
+
});
|
|
219
|
+
} finally {
|
|
220
|
+
session.signal.removeEventListener("abort", stop);
|
|
221
|
+
}
|
|
222
|
+
} finally {
|
|
223
|
+
await session.close();
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// bin/pushary-codex-session.ts
|
|
228
|
+
exitOnHelpFlag("codex");
|
|
229
|
+
var args = process.argv.slice(2);
|
|
230
|
+
if (args[0] === "codex") args.shift();
|
|
231
|
+
{
|
|
232
|
+
const abort = new AbortController();
|
|
233
|
+
const stop = () => abort.abort();
|
|
234
|
+
for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, stop);
|
|
235
|
+
try {
|
|
236
|
+
const binary = resolveProviderBinary("codex");
|
|
237
|
+
if (!binary) throw new Error("Install Codex first, then run pushary codex");
|
|
238
|
+
process.exitCode = await launchCodexSession({
|
|
239
|
+
binary,
|
|
240
|
+
cwd: codexSessionDirectory(args, process.cwd()),
|
|
241
|
+
apiKey: getApiKey(),
|
|
242
|
+
baseUrl: getBaseUrl(),
|
|
243
|
+
machineId: getMachineId(),
|
|
244
|
+
signal: abort.signal
|
|
245
|
+
});
|
|
246
|
+
} catch (error) {
|
|
247
|
+
process.stderr.write(`[pushary] ${error instanceof Error ? error.message : "Codex session failed"}
|
|
248
|
+
`);
|
|
249
|
+
process.exitCode = 1;
|
|
250
|
+
} finally {
|
|
251
|
+
for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.off(signal, stop);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
reportEvent
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-BKK3JCTD.js";
|
|
5
|
+
import "../chunk-CAJCCQ7N.js";
|
|
6
6
|
import {
|
|
7
7
|
askUser,
|
|
8
8
|
isDecisionStopped,
|
|
9
9
|
waitForAnswer
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-5ZSBQHCM.js";
|
|
11
|
+
import "../chunk-M2L7625S.js";
|
|
12
|
+
import "../chunk-GOEIW2VH.js";
|
|
11
13
|
import "../chunk-POFBE6ZY.js";
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-
|
|
14
|
+
import "../chunk-53UZN7JW.js";
|
|
15
|
+
import "../chunk-TKTS3SIM.js";
|
|
16
|
+
import "../chunk-S2ALW446.js";
|
|
15
17
|
import {
|
|
16
18
|
getMachineId
|
|
17
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-WMO2XVG4.js";
|
|
18
20
|
import "../chunk-7QLSKOSU.js";
|
|
19
21
|
import "../chunk-KZERVKTD.js";
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-EBZK2SJ2.js";
|
|
22
|
+
import "../chunk-4JHEZ2PV.js";
|
|
22
23
|
import "../chunk-AQFEP65J.js";
|
|
23
24
|
import {
|
|
24
25
|
getApiKey
|
|
25
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-OWQOMGBF.js";
|
|
26
27
|
import {
|
|
27
28
|
NPX_LATEST_COMMAND
|
|
28
|
-
} from "../chunk-
|
|
29
|
-
import "../chunk-
|
|
29
|
+
} from "../chunk-T3KMJI4W.js";
|
|
30
|
+
import "../chunk-JNU3LV47.js";
|
|
30
31
|
|
|
31
32
|
// bin/pushary-codex.ts
|
|
32
33
|
import { basename } from "path";
|
|
@@ -3,61 +3,62 @@ import {
|
|
|
3
3
|
connectDevice,
|
|
4
4
|
connectExistingApp,
|
|
5
5
|
printConnectInstructions
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-KILK6SWZ.js";
|
|
7
7
|
import "../chunk-3EGEA4KH.js";
|
|
8
8
|
import "../chunk-QCGNGEGE.js";
|
|
9
9
|
import {
|
|
10
10
|
printKeyCheck
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-SWDPCDLT.js";
|
|
12
12
|
import {
|
|
13
13
|
CONNECTED_THROUGH_MAC_APP,
|
|
14
14
|
PAIR_FROM_MAC_APP,
|
|
15
15
|
readMacAppConnection
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
16
|
+
} from "../chunk-LEHBWBCG.js";
|
|
17
|
+
import "../chunk-42CVAOC5.js";
|
|
18
|
+
import "../chunk-UZVF6MP2.js";
|
|
19
19
|
import {
|
|
20
20
|
createIo
|
|
21
21
|
} from "../chunk-FO3MDD26.js";
|
|
22
|
-
import
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
import "../chunk-
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-3U3FU6ZX.js";
|
|
28
|
-
import "../chunk-KYFWYPHN.js";
|
|
29
|
-
import "../chunk-Y3HTWB5S.js";
|
|
22
|
+
import "../chunk-FKDZU6YX.js";
|
|
23
|
+
import "../chunk-T4CKP47U.js";
|
|
24
|
+
import "../chunk-SI2NC6UU.js";
|
|
25
|
+
import "../chunk-6EV3B5CD.js";
|
|
26
|
+
import "../chunk-OSMNLNPF.js";
|
|
30
27
|
import {
|
|
31
28
|
parseFlags
|
|
32
29
|
} from "../chunk-GMXKITVA.js";
|
|
33
|
-
import "../chunk-6ICPEJY5.js";
|
|
34
30
|
import {
|
|
35
31
|
readKeySource
|
|
36
|
-
} from "../chunk-
|
|
37
|
-
import
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
} from "../chunk-TJZUQRMH.js";
|
|
33
|
+
import {
|
|
34
|
+
exitOnHelpFlag
|
|
35
|
+
} from "../chunk-OR6KJOHE.js";
|
|
36
|
+
import "../chunk-6ICPEJY5.js";
|
|
37
|
+
import "../chunk-BKK3JCTD.js";
|
|
38
|
+
import "../chunk-CAJCCQ7N.js";
|
|
39
|
+
import "../chunk-5ZSBQHCM.js";
|
|
40
|
+
import "../chunk-M2L7625S.js";
|
|
41
|
+
import "../chunk-GOEIW2VH.js";
|
|
40
42
|
import "../chunk-POFBE6ZY.js";
|
|
41
|
-
import "../chunk-
|
|
43
|
+
import "../chunk-53UZN7JW.js";
|
|
42
44
|
import {
|
|
43
45
|
checkApiKey
|
|
44
|
-
} from "../chunk-
|
|
45
|
-
import "../chunk-
|
|
46
|
-
import "../chunk-
|
|
46
|
+
} from "../chunk-TKTS3SIM.js";
|
|
47
|
+
import "../chunk-S2ALW446.js";
|
|
48
|
+
import "../chunk-WMO2XVG4.js";
|
|
47
49
|
import {
|
|
48
50
|
UsageError
|
|
49
51
|
} from "../chunk-7QLSKOSU.js";
|
|
50
52
|
import {
|
|
51
53
|
EXIT
|
|
52
54
|
} from "../chunk-KZERVKTD.js";
|
|
53
|
-
import "../chunk-
|
|
54
|
-
import "../chunk-EBZK2SJ2.js";
|
|
55
|
+
import "../chunk-4JHEZ2PV.js";
|
|
55
56
|
import "../chunk-AQFEP65J.js";
|
|
56
|
-
import "../chunk-
|
|
57
|
+
import "../chunk-OWQOMGBF.js";
|
|
57
58
|
import {
|
|
58
59
|
isInvocationOf
|
|
59
|
-
} from "../chunk-
|
|
60
|
-
import "../chunk-
|
|
60
|
+
} from "../chunk-T3KMJI4W.js";
|
|
61
|
+
import "../chunk-JNU3LV47.js";
|
|
61
62
|
|
|
62
63
|
// bin/pushary-connect.ts
|
|
63
64
|
exitOnHelpFlag("pair");
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
import {
|
|
3
3
|
coworkOutput,
|
|
4
4
|
parseCoworkOptions
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-GBCR2FH2.js";
|
|
6
6
|
import {
|
|
7
7
|
canOpenBrowser,
|
|
8
8
|
openInBrowser
|
|
9
9
|
} from "../chunk-PUZZELE6.js";
|
|
10
|
+
import "../chunk-6EV3B5CD.js";
|
|
11
|
+
import "../chunk-GMXKITVA.js";
|
|
10
12
|
import {
|
|
11
13
|
exitOnHelpFlag
|
|
12
|
-
} from "../chunk-
|
|
13
|
-
import "../chunk-KYFWYPHN.js";
|
|
14
|
-
import "../chunk-GMXKITVA.js";
|
|
14
|
+
} from "../chunk-OR6KJOHE.js";
|
|
15
15
|
import {
|
|
16
16
|
UsageError
|
|
17
17
|
} from "../chunk-7QLSKOSU.js";
|
|
18
18
|
import {
|
|
19
19
|
EXIT
|
|
20
20
|
} from "../chunk-KZERVKTD.js";
|
|
21
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-T3KMJI4W.js";
|
|
22
22
|
import {
|
|
23
23
|
CLAUDE_CONNECTOR_GUIDE
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-JNU3LV47.js";
|
|
25
25
|
|
|
26
26
|
// bin/pushary-cowork.ts
|
|
27
27
|
exitOnHelpFlag("cowork");
|