pushary 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.
Files changed (111) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +1 -0
  3. package/data/SKILL.md +7 -1
  4. package/data/cowork/SKILL.md +3 -1
  5. package/data/cursor-plugin/.cursor-plugin/plugin.json +1 -1
  6. package/data/cursor-plugin/skills/pushary/SKILL.md +6 -0
  7. package/data/vscode-plugin/skills/pushary/SKILL.md +6 -0
  8. package/dist/bin/pushary-bell-hook.js +27 -26
  9. package/dist/bin/pushary-bell.js +11 -11
  10. package/dist/bin/pushary-claude.js +30 -28
  11. package/dist/bin/pushary-clean.js +39 -38
  12. package/dist/bin/pushary-codex-bridge.js +38 -28
  13. package/dist/bin/pushary-codex-hook.js +35 -33
  14. package/dist/bin/pushary-codex-session.d.ts +1 -0
  15. package/dist/bin/pushary-codex-session.js +253 -0
  16. package/dist/bin/pushary-codex.js +13 -12
  17. package/dist/bin/pushary-connect.js +28 -27
  18. package/dist/bin/pushary-cowork.js +6 -6
  19. package/dist/bin/pushary-daemon.js +48 -47
  20. package/dist/bin/pushary-disconnect.js +27 -26
  21. package/dist/bin/pushary-doctor.js +85 -82
  22. package/dist/bin/pushary-elicitation-hook.js +27 -26
  23. package/dist/bin/pushary-gemini-bridge.js +22 -22
  24. package/dist/bin/pushary-gemini-hook.js +32 -30
  25. package/dist/bin/pushary-hook.js +33 -32
  26. package/dist/bin/pushary-login.js +16 -16
  27. package/dist/bin/pushary-logout.js +28 -27
  28. package/dist/bin/pushary-mcp.js +9 -9
  29. package/dist/bin/pushary-mode.js +14 -14
  30. package/dist/bin/pushary-notification-hook.js +26 -25
  31. package/dist/bin/pushary-opencode-hook.js +31 -29
  32. package/dist/bin/pushary-permission-denied-hook.js +31 -30
  33. package/dist/bin/pushary-permission-hook.js +30 -29
  34. package/dist/bin/pushary-post-hook.js +26 -25
  35. package/dist/bin/pushary-prompt-hook.js +26 -25
  36. package/dist/bin/pushary-session-end-hook.js +26 -25
  37. package/dist/bin/pushary-session-start-hook.js +31 -30
  38. package/dist/bin/pushary-setup.js +165 -112
  39. package/dist/bin/pushary-stats.js +5 -5
  40. package/dist/bin/pushary-status.js +35 -34
  41. package/dist/bin/pushary-stop-hook.js +26 -25
  42. package/dist/bin/pushary-stopfailure-hook.js +26 -25
  43. package/dist/bin/pushary-suggestions.js +14 -14
  44. package/dist/bin/pushary-transcript-register.js +18 -18
  45. package/dist/bin/pushary-transcripts.js +7 -7
  46. package/dist/bin/pushary-upgrade.js +41 -40
  47. package/dist/bin/pushary-wait.js +14 -14
  48. package/dist/bin/pushary.js +7 -6
  49. package/dist/{chunk-ZX3PFROQ.js → chunk-2NVXFWQY.js} +1 -1
  50. package/dist/{chunk-7L6YSHZO.js → chunk-3IRC3XFG.js} +2 -2
  51. package/dist/{chunk-IXNVIWNN.js → chunk-42CVAOC5.js} +2 -2
  52. package/dist/{chunk-EBZK2SJ2.js → chunk-4JHEZ2PV.js} +12 -5
  53. package/dist/{chunk-JBK47Y2M.js → chunk-4WBAHVBK.js} +11 -11
  54. package/dist/{chunk-AW4TDBUJ.js → chunk-53UZN7JW.js} +3 -3
  55. package/dist/{chunk-I7EZMNKI.js → chunk-5ZSBQHCM.js} +12 -173
  56. package/dist/{chunk-KYFWYPHN.js → chunk-6EV3B5CD.js} +1 -1
  57. package/dist/{chunk-X7TNLYNZ.js → chunk-75M7NFFC.js} +1 -1
  58. package/dist/{chunk-AUDM6HU6.js → chunk-7UM4NCUI.js} +2 -2
  59. package/dist/{chunk-5INZFKHL.js → chunk-ALY7ZBNB.js} +1 -1
  60. package/dist/{chunk-CGRVIUKE.js → chunk-BKK3JCTD.js} +80 -164
  61. package/dist/{chunk-K2SSNAUW.js → chunk-CAJCCQ7N.js} +1 -1
  62. package/dist/{chunk-B7PZBWBU.js → chunk-CESLE4UN.js} +10 -10
  63. package/dist/{chunk-MI67QQEQ.js → chunk-CEZTYTBN.js} +13 -11
  64. package/dist/{chunk-6PABNQVH.js → chunk-DD6IBKEJ.js} +4 -4
  65. package/dist/{chunk-Z4RM54LU.js → chunk-E76QCZIA.js} +2 -2
  66. package/dist/{chunk-RBUCXUT7.js → chunk-FI2F5KZJ.js} +4 -4
  67. package/dist/{chunk-IVUP2EE4.js → chunk-FKDZU6YX.js} +4 -4
  68. package/dist/{chunk-EA5NWDK7.js → chunk-FYNMFSIZ.js} +29 -0
  69. package/dist/{chunk-M2YE3OEC.js → chunk-GBCR2FH2.js} +3 -3
  70. package/dist/chunk-GOEIW2VH.js +266 -0
  71. package/dist/{chunk-JQX2L3ES.js → chunk-GRAPJKDK.js} +1 -1
  72. package/dist/{chunk-DPISXMLL.js → chunk-HV4TEKNP.js} +4 -4
  73. package/dist/{chunk-FMYXPJYS.js → chunk-IWHDNMM3.js} +5 -5
  74. package/dist/{chunk-ORLTWJ2O.js → chunk-JNU3LV47.js} +355 -138
  75. package/dist/{chunk-ZJY4KON3.js → chunk-KILK6SWZ.js} +7 -7
  76. package/dist/{chunk-J7OBJZ5S.js → chunk-KYLY6UMN.js} +1 -1
  77. package/dist/{chunk-T3Q4B6WV.js → chunk-L2ZM7LXN.js} +2 -2
  78. package/dist/{chunk-PJ3C6IID.js → chunk-LEHBWBCG.js} +4 -4
  79. package/dist/{chunk-ODPULZZG.js → chunk-M2L7625S.js} +2 -2
  80. package/dist/{chunk-BDSIE2MT.js → chunk-MIBCRQWK.js} +2 -2
  81. package/dist/{chunk-MAB6CGL5.js → chunk-MRQJCIFO.js} +1 -1
  82. package/dist/{chunk-F43LAKAK.js → chunk-OR6KJOHE.js} +2 -2
  83. package/dist/{chunk-Y3HTWB5S.js → chunk-OSMNLNPF.js} +1 -1
  84. package/dist/{chunk-CHD6IUNM.js → chunk-OWQOMGBF.js} +1 -1
  85. package/dist/{chunk-RTM5GVRZ.js → chunk-OZ7MLVDM.js} +15 -15
  86. package/dist/{chunk-4WM7IVVQ.js → chunk-PGHN5D4N.js} +2 -2
  87. package/dist/{chunk-OLLWYLQX.js → chunk-PQAFH4DF.js} +3 -11
  88. package/dist/{chunk-E47JEBUR.js → chunk-RGBTKOCC.js} +45 -8
  89. package/dist/{chunk-4UCTKLHY.js → chunk-S2ALW446.js} +3 -3
  90. package/dist/{chunk-3U3FU6ZX.js → chunk-SI2NC6UU.js} +3 -3
  91. package/dist/chunk-SVCT5D7K.js +196 -0
  92. package/dist/{chunk-ZVMFRUBD.js → chunk-SWDPCDLT.js} +4 -4
  93. package/dist/{chunk-DIJ532S7.js → chunk-T3KMJI4W.js} +2 -1
  94. package/dist/{chunk-NRSTNZYJ.js → chunk-T4CKP47U.js} +5 -5
  95. package/dist/{chunk-M7VKFAAK.js → chunk-TJZUQRMH.js} +3 -3
  96. package/dist/{chunk-ZV56INA6.js → chunk-TKTS3SIM.js} +3 -3
  97. package/dist/{chunk-RETRVO47.js → chunk-TWATOPHK.js} +2 -2
  98. package/dist/{chunk-WZNRDDC4.js → chunk-UC4PNLMK.js} +6 -6
  99. package/dist/{chunk-ASXBYX2N.js → chunk-UJXLVH66.js} +1 -1
  100. package/dist/{chunk-Q3QRD67J.js → chunk-UY5E2UUW.js} +5 -5
  101. package/dist/{chunk-FP2ZJK3T.js → chunk-UZVF6MP2.js} +5 -5
  102. package/dist/{chunk-STETTN4K.js → chunk-W2TA4EVZ.js} +5 -5
  103. package/dist/{chunk-QRNNIDGY.js → chunk-WBD7HZEZ.js} +1 -1
  104. package/dist/{chunk-QPT4PTUG.js → chunk-WMO2XVG4.js} +1 -1
  105. package/dist/{chunk-BZIXDIIT.js → chunk-XPQDBTW4.js} +1 -1
  106. package/dist/{global-upgrade-YEAGJG4G.js → global-upgrade-QSSDYZCZ.js} +6 -6
  107. package/dist/{paths-HQAICWAF.js → paths-55DDFLY4.js} +2 -2
  108. package/dist/{reapply-XBEB2B5A.js → reapply-MEU66ALO.js} +23 -22
  109. package/dist/src/index.js +20 -19
  110. package/dist/{upgrade-lock-GIO5QZ7E.js → upgrade-lock-YLXAU4AD.js} +3 -3
  111. package/package.json +5 -2
@@ -1,41 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  takeHookHoldBudget
4
- } from "../chunk-J7OBJZ5S.js";
4
+ } from "../chunk-KYLY6UMN.js";
5
5
  import {
6
6
  askAgentQuestions,
7
7
  defersToNativeMode,
8
8
  reportMachineDenial
9
- } from "../chunk-WZNRDDC4.js";
9
+ } from "../chunk-UC4PNLMK.js";
10
10
  import {
11
11
  isGatingMoment,
12
12
  recordKeylessMoment
13
- } from "../chunk-JQX2L3ES.js";
13
+ } from "../chunk-GRAPJKDK.js";
14
14
  import {
15
15
  triggerAutoUpdate
16
- } from "../chunk-7L6YSHZO.js";
16
+ } from "../chunk-3IRC3XFG.js";
17
17
  import {
18
18
  readHookInput
19
- } from "../chunk-6PABNQVH.js";
19
+ } from "../chunk-DD6IBKEJ.js";
20
20
  import {
21
21
  announceSubscriptionRequired,
22
22
  isDeferAnswer
23
- } from "../chunk-ZX3PFROQ.js";
24
- import "../chunk-RTM5GVRZ.js";
23
+ } from "../chunk-2NVXFWQY.js";
24
+ import "../chunk-OZ7MLVDM.js";
25
25
  import "../chunk-DWQYCOPI.js";
26
- import "../chunk-STETTN4K.js";
27
- import "../chunk-X7TNLYNZ.js";
28
- import "../chunk-MAB6CGL5.js";
29
- import "../chunk-QRNNIDGY.js";
30
- import "../chunk-XHKBHWLX.js";
31
- import "../chunk-IVUP2EE4.js";
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-CGRVIUKE.js";
83
- import "../chunk-K2SSNAUW.js";
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-I7EZMNKI.js";
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-AW4TDBUJ.js";
102
- import "../chunk-ZV56INA6.js";
103
- import "../chunk-4UCTKLHY.js";
104
+ } from "../chunk-53UZN7JW.js";
105
+ import "../chunk-TKTS3SIM.js";
106
+ import "../chunk-S2ALW446.js";
104
107
  import {
105
108
  getMachineId
106
- } from "../chunk-QPT4PTUG.js";
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-EBZK2SJ2.js";
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-CHD6IUNM.js";
121
- import "../chunk-DIJ532S7.js";
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-ORLTWJ2O.js";
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-XBEB2B5A.js");
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-CGRVIUKE.js";
5
- import "../chunk-K2SSNAUW.js";
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-I7EZMNKI.js";
10
+ } from "../chunk-5ZSBQHCM.js";
11
+ import "../chunk-M2L7625S.js";
12
+ import "../chunk-GOEIW2VH.js";
11
13
  import "../chunk-POFBE6ZY.js";
12
- import "../chunk-AW4TDBUJ.js";
13
- import "../chunk-ZV56INA6.js";
14
- import "../chunk-4UCTKLHY.js";
14
+ import "../chunk-53UZN7JW.js";
15
+ import "../chunk-TKTS3SIM.js";
16
+ import "../chunk-S2ALW446.js";
15
17
  import {
16
18
  getMachineId
17
- } from "../chunk-QPT4PTUG.js";
19
+ } from "../chunk-WMO2XVG4.js";
18
20
  import "../chunk-7QLSKOSU.js";
19
21
  import "../chunk-KZERVKTD.js";
20
- import "../chunk-ODPULZZG.js";
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-CHD6IUNM.js";
26
+ } from "../chunk-OWQOMGBF.js";
26
27
  import {
27
28
  NPX_LATEST_COMMAND
28
- } from "../chunk-DIJ532S7.js";
29
- import "../chunk-ORLTWJ2O.js";
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-ZJY4KON3.js";
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-ZVMFRUBD.js";
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-PJ3C6IID.js";
17
- import "../chunk-IXNVIWNN.js";
18
- import "../chunk-FP2ZJK3T.js";
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
- exitOnHelpFlag
24
- } from "../chunk-F43LAKAK.js";
25
- import "../chunk-IVUP2EE4.js";
26
- import "../chunk-NRSTNZYJ.js";
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-M7VKFAAK.js";
37
- import "../chunk-CGRVIUKE.js";
38
- import "../chunk-K2SSNAUW.js";
39
- import "../chunk-I7EZMNKI.js";
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-AW4TDBUJ.js";
43
+ import "../chunk-53UZN7JW.js";
42
44
  import {
43
45
  checkApiKey
44
- } from "../chunk-ZV56INA6.js";
45
- import "../chunk-4UCTKLHY.js";
46
- import "../chunk-QPT4PTUG.js";
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-ODPULZZG.js";
54
- import "../chunk-EBZK2SJ2.js";
55
+ import "../chunk-4JHEZ2PV.js";
55
56
  import "../chunk-AQFEP65J.js";
56
- import "../chunk-CHD6IUNM.js";
57
+ import "../chunk-OWQOMGBF.js";
57
58
  import {
58
59
  isInvocationOf
59
- } from "../chunk-DIJ532S7.js";
60
- import "../chunk-ORLTWJ2O.js";
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-M2YE3OEC.js";
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-F43LAKAK.js";
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-DIJ532S7.js";
21
+ import "../chunk-T3KMJI4W.js";
22
22
  import {
23
23
  CLAUDE_CONNECTOR_GUIDE
24
- } from "../chunk-ORLTWJ2O.js";
24
+ } from "../chunk-JNU3LV47.js";
25
25
 
26
26
  // bin/pushary-cowork.ts
27
27
  exitOnHelpFlag("cowork");