@pushary/agent-hooks 0.83.2 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/dist/bin/pushary-bell-hook.js +5 -5
  3. package/dist/bin/pushary-bell.js +15 -14
  4. package/dist/bin/pushary-claude.js +72 -131
  5. package/dist/bin/pushary-clean.js +13 -12
  6. package/dist/bin/pushary-codex-bridge.d.ts +1 -0
  7. package/dist/bin/pushary-codex-bridge.js +348 -0
  8. package/dist/bin/pushary-codex-hook.js +15 -14
  9. package/dist/bin/pushary-codex.js +7 -7
  10. package/dist/bin/pushary-connect.js +13 -12
  11. package/dist/bin/pushary-daemon.js +313 -41
  12. package/dist/bin/pushary-doctor.js +48 -25
  13. package/dist/bin/pushary-gemini-bridge.d.ts +1 -0
  14. package/dist/bin/pushary-gemini-bridge.js +298 -0
  15. package/dist/bin/pushary-gemini-hook.js +24 -20
  16. package/dist/bin/pushary-hook.js +14 -13
  17. package/dist/bin/pushary-login.js +15 -14
  18. package/dist/bin/pushary-logout.js +12 -11
  19. package/dist/bin/pushary-mode.js +10 -9
  20. package/dist/bin/pushary-notification-hook.js +5 -5
  21. package/dist/bin/pushary-permission-denied-hook.js +9 -9
  22. package/dist/bin/pushary-permission-hook.js +9 -9
  23. package/dist/bin/pushary-post-hook.js +5 -5
  24. package/dist/bin/pushary-prompt-hook.js +5 -5
  25. package/dist/bin/pushary-session-end-hook.js +5 -5
  26. package/dist/bin/pushary-session-start-hook.js +5 -5
  27. package/dist/bin/pushary-setup.js +42 -36
  28. package/dist/bin/pushary-stats.js +6 -5
  29. package/dist/bin/pushary-status.js +17 -16
  30. package/dist/bin/pushary-stop-hook.js +5 -5
  31. package/dist/bin/pushary-stopfailure-hook.js +5 -5
  32. package/dist/bin/pushary-suggestions.js +7 -6
  33. package/dist/bin/pushary-upgrade.js +18 -17
  34. package/dist/bin/pushary-wait.js +10 -9
  35. package/dist/bin/pushary.js +8 -6
  36. package/dist/{chunk-4QQOKEOS.js → chunk-37AD5K7W.js} +6 -6
  37. package/dist/{chunk-SAA3VBDK.js → chunk-437T77TY.js} +3 -3
  38. package/dist/{chunk-U27BZWFT.js → chunk-6LC4WSCL.js} +1 -1
  39. package/dist/{chunk-7WWZPII5.js → chunk-7PZPJSWI.js} +1 -1
  40. package/dist/chunk-CCH775Y6.js +343 -0
  41. package/dist/chunk-DINDL2CF.js +45 -0
  42. package/dist/{chunk-TXF4QZSQ.js → chunk-DOXSWT4Q.js} +1 -1
  43. package/dist/chunk-EVJ6ULHN.js +153 -0
  44. package/dist/{chunk-QR6MVVQ7.js → chunk-F52SIIDG.js} +4 -4
  45. package/dist/{chunk-26D2YMDU.js → chunk-FBGBJXVC.js} +1 -1
  46. package/dist/{chunk-QF7WTF2C.js → chunk-HZNOAJGB.js} +2 -2
  47. package/dist/{chunk-RRZZ7TFJ.js → chunk-J4KFVOCQ.js} +4 -2
  48. package/dist/{chunk-WDRRULBH.js → chunk-K7CSRGKZ.js} +4 -4
  49. package/dist/{chunk-ZUKH2NPJ.js → chunk-MGJBC6DD.js} +1 -44
  50. package/dist/{chunk-GQLB2GBJ.js → chunk-MHBC2XUP.js} +1 -1
  51. package/dist/{chunk-YWRJGYUH.js → chunk-MQMPG5X4.js} +28 -2
  52. package/dist/{chunk-3AGM3TDM.js → chunk-NJ7JT26G.js} +1 -1
  53. package/dist/chunk-NRGRUOAR.js +25 -0
  54. package/dist/chunk-NWYGW7HY.js +117 -0
  55. package/dist/{chunk-7PO2VEA4.js → chunk-OPMSMF5R.js} +38 -33
  56. package/dist/{chunk-DHAZ6SOT.js → chunk-QNBA5OXQ.js} +81 -25
  57. package/dist/{chunk-EHLTWCDZ.js → chunk-SEAHGHCE.js} +1 -1
  58. package/dist/{chunk-NDC3TBHI.js → chunk-UKSQWTBH.js} +1 -1
  59. package/dist/{chunk-UVAC2KHH.js → chunk-UXWEE3QI.js} +1 -1
  60. package/dist/{chunk-MUEW424A.js → chunk-VT4IVERX.js} +50 -3
  61. package/dist/chunk-YJCMI5GF.js +133 -0
  62. package/dist/src/index.d.ts +6 -3
  63. package/dist/src/index.js +9 -9
  64. package/package.json +3 -1
@@ -0,0 +1,298 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ LiveTranscriptRelay,
4
+ liveSessionSleep,
5
+ postLiveSession,
6
+ postLiveSessionUntilAccepted,
7
+ startLiveSessionHeartbeat
8
+ } from "../chunk-YJCMI5GF.js";
9
+ import "../chunk-NWYGW7HY.js";
10
+ import {
11
+ startProcessOwnership
12
+ } from "../chunk-EVJ6ULHN.js";
13
+ import {
14
+ spawnClaude
15
+ } from "../chunk-XHKBHWLX.js";
16
+ import {
17
+ resolveBinary
18
+ } from "../chunk-VT4IVERX.js";
19
+ import "../chunk-SEAHGHCE.js";
20
+ import {
21
+ getMachineId
22
+ } from "../chunk-RN3NOEJF.js";
23
+ import "../chunk-6MTNS63X.js";
24
+ import {
25
+ getApiKey,
26
+ getBaseUrl
27
+ } from "../chunk-2UMNXADU.js";
28
+ import "../chunk-MQMPG5X4.js";
29
+
30
+ // bin/pushary-gemini-bridge.ts
31
+ import { existsSync } from "fs";
32
+
33
+ // src/gemini-bridge.ts
34
+ import { spawn } from "child_process";
35
+ import { randomUUID } from "crypto";
36
+ import { basename } from "path";
37
+ var MAX_STREAM_LINE = 1024 * 1024;
38
+ var MAX_TRANSCRIPT_TEXT = 32 * 1024;
39
+ var object = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
40
+ var string = (value) => typeof value === "string" && value.length > 0 ? value : null;
41
+ var geminiArgs = (options) => [
42
+ ...options.bridge.command.args ?? [],
43
+ ...options.bridge.model ? ["--model", options.bridge.model] : [],
44
+ options.startNew ? "--session-id" : "--resume",
45
+ options.sessionId,
46
+ "--output-format",
47
+ "stream-json",
48
+ "--prompt",
49
+ options.text
50
+ ];
51
+ var runGeminiTurn = (options) => new Promise((resolve, reject) => {
52
+ const spawnOptions = {
53
+ cwd: options.bridge.cwd,
54
+ env: { ...process.env, PUSHARY_GEMINI_BRIDGE: "1" },
55
+ stdio: ["ignore", "pipe", "pipe"],
56
+ windowsHide: true
57
+ };
58
+ const child = process.platform === "win32" ? spawnClaude(options.bridge.command.command, geminiArgs(options), spawnOptions) : spawn(options.bridge.command.command, geminiArgs(options), spawnOptions);
59
+ let buffer = "";
60
+ let assistant = "";
61
+ let initialized = false;
62
+ let successful = false;
63
+ let resultError = null;
64
+ let linkError;
65
+ let linking = null;
66
+ let settled = false;
67
+ const stop2 = () => {
68
+ if (child.exitCode == null) child.kill();
69
+ };
70
+ const fail = (error) => {
71
+ if (settled) return;
72
+ settled = true;
73
+ options.bridge.signal.removeEventListener("abort", stop2);
74
+ stop2();
75
+ reject(error instanceof Error ? error : new Error(String(error)));
76
+ };
77
+ const handle = (line) => {
78
+ let event;
79
+ try {
80
+ event = JSON.parse(line);
81
+ } catch {
82
+ return;
83
+ }
84
+ if (event.type === "init") {
85
+ if (event.session_id !== options.sessionId) {
86
+ fail(new Error("Gemini returned a different session id"));
87
+ return;
88
+ }
89
+ initialized = true;
90
+ linking ??= options.onSession().catch((error) => {
91
+ linkError = error;
92
+ stop2();
93
+ });
94
+ }
95
+ if (event.type === "message" && event.role === "assistant") {
96
+ const content = string(event.content);
97
+ if (content) assistant = `${assistant}${content}`.slice(0, MAX_TRANSCRIPT_TEXT);
98
+ }
99
+ if (event.type === "result") {
100
+ successful = event.status === "success";
101
+ resultError = string(object(event.error)?.message);
102
+ }
103
+ };
104
+ const read = (chunk) => {
105
+ buffer += chunk;
106
+ if (buffer.length > MAX_STREAM_LINE && !buffer.includes("\n")) {
107
+ fail(new Error("Gemini sent an oversized stream event"));
108
+ return;
109
+ }
110
+ let newline = buffer.indexOf("\n");
111
+ while (newline >= 0) {
112
+ const line = buffer.slice(0, newline);
113
+ buffer = buffer.slice(newline + 1);
114
+ if (line.length > MAX_STREAM_LINE) {
115
+ fail(new Error("Gemini sent an oversized stream event"));
116
+ return;
117
+ }
118
+ handle(line);
119
+ newline = buffer.indexOf("\n");
120
+ }
121
+ };
122
+ options.bridge.signal.addEventListener("abort", stop2, { once: true });
123
+ child.stdout?.setEncoding("utf8");
124
+ child.stdout?.on("data", (chunk) => read(String(chunk)));
125
+ child.stderr?.resume();
126
+ child.once("error", fail);
127
+ child.once("close", async (code) => {
128
+ if (settled) return;
129
+ await linking;
130
+ if (linkError) return fail(linkError);
131
+ settled = true;
132
+ options.bridge.signal.removeEventListener("abort", stop2);
133
+ if (options.bridge.signal.aborted) return resolve("aborted");
134
+ if (!initialized) return reject(new Error("Gemini did not initialize a session"));
135
+ if (code !== 0 || !successful) return reject(new Error(resultError ?? `Gemini exited with code ${code ?? "unknown"}`));
136
+ options.relay?.add({
137
+ type: "user",
138
+ uuid: `${options.commandId}-user`,
139
+ message: { role: "user", content: options.text }
140
+ });
141
+ if (assistant) {
142
+ options.relay?.add({
143
+ type: "assistant",
144
+ uuid: `${options.commandId}-assistant`,
145
+ message: { role: "assistant", content: assistant }
146
+ });
147
+ }
148
+ resolve("delivered");
149
+ });
150
+ });
151
+ var runGeminiBridge = async (options) => {
152
+ const sessionId = options.resumeSessionId ?? randomUUID();
153
+ const ownership = startProcessOwnership({ sessionId, pid: process.pid, spawnId: options.spawnId });
154
+ let linked = false;
155
+ let stopHeartbeat = () => {
156
+ };
157
+ let firstTurn = !options.resumeSessionId;
158
+ const relay = options.transcripts === false ? null : new LiveTranscriptRelay(options, sessionId);
159
+ const reportBody = (event, action) => ({
160
+ event,
161
+ action,
162
+ agentType: "gemini_cli",
163
+ agentName: `Gemini - ${basename(options.cwd)}`,
164
+ sessionId,
165
+ geminiSessionId: sessionId,
166
+ spawnId: options.spawnId,
167
+ machineId: options.machineId,
168
+ pid: process.pid,
169
+ cwd: options.cwd
170
+ });
171
+ const report = (event, action) => postLiveSession(options, "/api/agent/event", reportBody(event, action));
172
+ const link = async () => {
173
+ if (linked) return;
174
+ await postLiveSessionUntilAccepted(
175
+ options,
176
+ "/api/agent/event",
177
+ reportBody("session_start", options.resumeSessionId ? "Session resumed" : "Session started")
178
+ );
179
+ linked = true;
180
+ stopHeartbeat = startLiveSessionHeartbeat(options, reportBody("heartbeat", "Session online"));
181
+ };
182
+ const turn = (text, commandId) => {
183
+ const result = runGeminiTurn({
184
+ bridge: options,
185
+ sessionId,
186
+ text,
187
+ commandId,
188
+ startNew: firstTurn,
189
+ relay,
190
+ onSession: link
191
+ });
192
+ firstTurn = false;
193
+ return result;
194
+ };
195
+ try {
196
+ await ownership.ready;
197
+ if (options.resumeSessionId && !options.prompt) await link();
198
+ if (options.prompt) {
199
+ try {
200
+ await turn(options.prompt, `spawn-${options.spawnId}`);
201
+ } catch (error) {
202
+ if (!linked) throw error;
203
+ await report("turn_error", "Gemini turn failed").catch(() => null);
204
+ }
205
+ }
206
+ let pendingAck = null;
207
+ while (!options.signal.aborted) {
208
+ try {
209
+ if (pendingAck) {
210
+ const acknowledged = await postLiveSession(options, "/api/agent/command/ack", pendingAck);
211
+ if (acknowledged.ok) pendingAck = null;
212
+ }
213
+ if (pendingAck) {
214
+ await liveSessionSleep(options.pollIntervalMs ?? 2e3, options.signal);
215
+ continue;
216
+ }
217
+ const response = await postLiveSession(options, "/api/agent/command/drain", { sessionId, ackMode: true });
218
+ if (response.ok) {
219
+ const command = object((await response.json()).command);
220
+ const commandId = string(command?.id);
221
+ const text = string(command?.text);
222
+ if (commandId && text) {
223
+ try {
224
+ const outcome2 = await turn(text, commandId);
225
+ if (outcome2 === "aborted") break;
226
+ pendingAck = { commandId, state: "delivered" };
227
+ } catch (error) {
228
+ pendingAck = {
229
+ commandId,
230
+ state: "failed",
231
+ failureCode: "gemini_rejected",
232
+ failureMessage: (error instanceof Error ? error.message : String(error)).slice(0, 240)
233
+ };
234
+ }
235
+ }
236
+ }
237
+ } catch {
238
+ }
239
+ await relay?.flush();
240
+ await liveSessionSleep(options.pollIntervalMs ?? 2e3, options.signal);
241
+ }
242
+ await relay?.flush();
243
+ await report("session_closed", "Session stopped").catch(() => null);
244
+ return "stopped";
245
+ } catch (error) {
246
+ if (!linked && options.claimId) {
247
+ const message = error instanceof Error ? error.message : String(error);
248
+ for (let attempt = 0; attempt < 3; attempt++) {
249
+ const acknowledged = await postLiveSession(options, "/api/agent/spawn/ack", {
250
+ spawnId: options.spawnId,
251
+ claimId: options.claimId,
252
+ machineId: options.machineId,
253
+ state: "failed",
254
+ failure: {
255
+ code: "bridge_failed",
256
+ message: message.slice(0, 240),
257
+ retryable: false
258
+ }
259
+ }).catch(() => null);
260
+ if (acknowledged?.ok) break;
261
+ await liveSessionSleep(200 * (attempt + 1), options.signal);
262
+ }
263
+ }
264
+ await report("error", "Live bridge failed").catch(() => null);
265
+ return "failed";
266
+ } finally {
267
+ stopHeartbeat();
268
+ ownership.stop();
269
+ }
270
+ };
271
+
272
+ // bin/pushary-gemini-bridge.ts
273
+ var spawnId = process.env.PUSHARY_SPAWN_ID?.trim();
274
+ var requestedCwd = process.env.PUSHARY_BRIDGE_CWD?.trim();
275
+ if (!spawnId || !requestedCwd || !existsSync(requestedCwd)) {
276
+ process.stderr.write("[pushary] Gemini bridge received an invalid launch request\n");
277
+ process.exit(1);
278
+ }
279
+ var abort = new AbortController();
280
+ var signals = process.platform === "win32" ? ["SIGINT", "SIGTERM"] : ["SIGINT", "SIGTERM", "SIGHUP"];
281
+ var stop = () => abort.abort();
282
+ for (const signal of signals) process.on(signal, stop);
283
+ var outcome = await runGeminiBridge({
284
+ apiKey: getApiKey(),
285
+ baseUrl: getBaseUrl(),
286
+ machineId: getMachineId(),
287
+ spawnId,
288
+ claimId: process.env.PUSHARY_SPAWN_CLAIM_ID?.trim() || void 0,
289
+ cwd: requestedCwd,
290
+ prompt: process.env.PUSHARY_BRIDGE_PROMPT?.trim() || void 0,
291
+ model: process.env.PUSHARY_BRIDGE_MODEL?.trim() || void 0,
292
+ resumeSessionId: process.env.PUSHARY_BRIDGE_RESUME_SESSION_ID?.trim() || void 0,
293
+ command: { command: process.env.PUSHARY_GEMINI_COMMAND?.trim() || resolveBinary("gemini") || "gemini" },
294
+ signal: abort.signal,
295
+ transcripts: process.env.PUSHARY_TRANSCRIPTS === "1"
296
+ });
297
+ for (const signal of signals) process.off(signal, stop);
298
+ process.exit(outcome === "stopped" ? 0 : 1);
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  isGatingMoment,
4
4
  recordKeylessMoment
5
- } from "../chunk-3AGM3TDM.js";
5
+ } from "../chunk-NJ7JT26G.js";
6
6
  import {
7
7
  KILL_REASON,
8
8
  denyReasonFrom,
9
9
  isDeferAnswer,
10
10
  resolveGate
11
- } from "../chunk-4QQOKEOS.js";
11
+ } from "../chunk-37AD5K7W.js";
12
12
  import {
13
13
  DEFAULT_SESSION,
14
14
  askUser,
@@ -30,24 +30,24 @@ import {
30
30
  scopePathFor,
31
31
  sendNotification,
32
32
  waitForAnswer
33
- } from "../chunk-7PO2VEA4.js";
33
+ } from "../chunk-OPMSMF5R.js";
34
+ import {
35
+ getMachineId
36
+ } from "../chunk-RN3NOEJF.js";
34
37
  import "../chunk-BSZYIAZL.js";
35
38
  import "../chunk-SAF6HGAA.js";
36
- import "../chunk-SAA3VBDK.js";
39
+ import "../chunk-437T77TY.js";
37
40
  import "../chunk-7QLSKOSU.js";
41
+ import "../chunk-KZERVKTD.js";
42
+ import {
43
+ getApiKey
44
+ } from "../chunk-2UMNXADU.js";
38
45
  import {
39
46
  DECISION_LINE_MAX,
40
47
  effectiveWaitSeconds,
41
48
  hookWaitClamped,
42
49
  hookWaitDeadline
43
- } from "../chunk-YWRJGYUH.js";
44
- import {
45
- getMachineId
46
- } from "../chunk-RN3NOEJF.js";
47
- import {
48
- getApiKey
49
- } from "../chunk-2UMNXADU.js";
50
- import "../chunk-KZERVKTD.js";
50
+ } from "../chunk-MQMPG5X4.js";
51
51
 
52
52
  // bin/pushary-gemini-hook.ts
53
53
  import { basename } from "path";
@@ -55,6 +55,7 @@ import { basename } from "path";
55
55
  // src/gemini-adapter.ts
56
56
  import { isAbsolute, resolve } from "path";
57
57
  var GEMINI_AGENT = { type: "gemini_cli", label: "Gemini CLI" };
58
+ var geminiOwnsLifecycle = (bridge) => bridge !== "1";
58
59
  var GEMINI_TOOL_MAP = {
59
60
  run_shell_command: "Bash",
60
61
  write_file: "Write",
@@ -219,7 +220,7 @@ var decideBeforeTool = async (input) => {
219
220
  try {
220
221
  const modeState = await fetchModeState(apiKey, input.session_id);
221
222
  const lookup = toGeminiPolicyLookup(input.tool_name ?? "", input.tool_input ?? {}, input.cwd);
222
- const config = await getPolicy(apiKey, modeState.policyVersion, "gemini_cli");
223
+ const config = await getPolicy(apiKey, modeState.policyVersion, "gemini_cli", false, input.session_id);
223
224
  const scopePath = modeState.scope ? scopePathFor(lookup.tool, lookup.input, input.cwd) : void 0;
224
225
  const verdict = resolveGate({
225
226
  modeState,
@@ -228,7 +229,8 @@ var decideBeforeTool = async (input) => {
228
229
  toolInputs: [lookup.input],
229
230
  scopePaths: scopePath ? [scopePath] : [],
230
231
  cwd: input.cwd,
231
- repoKey: repoKeyFor(input.cwd)
232
+ repoKey: repoKeyFor(input.cwd),
233
+ sessionId: input.session_id
232
234
  });
233
235
  if (verdict.kind === "kill") return geminiDeny(KILL_REASON);
234
236
  if (verdict.kind === "allow") return geminiAllow();
@@ -311,14 +313,16 @@ var main = async () => {
311
313
  }, GEMINI_AGENT);
312
314
  break;
313
315
  case "SessionEnd":
314
- await handleStop({
315
- cwd: input.cwd,
316
- session_id: input.session_id,
317
- transcript_path: input.transcript_path
318
- }, GEMINI_AGENT);
316
+ if (geminiOwnsLifecycle(process.env.PUSHARY_GEMINI_BRIDGE)) {
317
+ await handleStop({
318
+ cwd: input.cwd,
319
+ session_id: input.session_id,
320
+ transcript_path: input.transcript_path
321
+ }, GEMINI_AGENT);
322
+ }
319
323
  break;
320
324
  case "SessionStart":
321
- await reportSessionStart(input);
325
+ if (geminiOwnsLifecycle(process.env.PUSHARY_GEMINI_BRIDGE)) await reportSessionStart(input);
322
326
  break;
323
327
  default:
324
328
  break;
@@ -1,23 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-DHAZ6SOT.js";
5
- import "../chunk-NDC3TBHI.js";
6
- import "../chunk-3AGM3TDM.js";
7
- import "../chunk-4QQOKEOS.js";
8
- import "../chunk-7PO2VEA4.js";
9
- import "../chunk-BSZYIAZL.js";
10
- import "../chunk-SAF6HGAA.js";
11
- import "../chunk-SAA3VBDK.js";
12
- import "../chunk-7QLSKOSU.js";
13
- import "../chunk-YWRJGYUH.js";
4
+ } from "../chunk-QNBA5OXQ.js";
5
+ import "../chunk-UKSQWTBH.js";
6
+ import "../chunk-NJ7JT26G.js";
7
+ import "../chunk-37AD5K7W.js";
8
+ import "../chunk-OPMSMF5R.js";
14
9
  import "../chunk-RN3NOEJF.js";
15
10
  import {
16
11
  exitOnHelpFlag
17
- } from "../chunk-RRZZ7TFJ.js";
18
- import "../chunk-ZUKH2NPJ.js";
19
- import "../chunk-2UMNXADU.js";
12
+ } from "../chunk-J4KFVOCQ.js";
13
+ import "../chunk-MGJBC6DD.js";
14
+ import "../chunk-DINDL2CF.js";
15
+ import "../chunk-BSZYIAZL.js";
16
+ import "../chunk-SAF6HGAA.js";
17
+ import "../chunk-437T77TY.js";
18
+ import "../chunk-7QLSKOSU.js";
20
19
  import "../chunk-KZERVKTD.js";
20
+ import "../chunk-2UMNXADU.js";
21
+ import "../chunk-MQMPG5X4.js";
21
22
 
22
23
  // bin/pushary-hook.ts
23
24
  exitOnHelpFlag("hook");
@@ -6,37 +6,38 @@ import "../chunk-3EGEA4KH.js";
6
6
  import {
7
7
  checkApiKey,
8
8
  describeKeyCheck
9
- } from "../chunk-QR6MVVQ7.js";
9
+ } from "../chunk-F52SIIDG.js";
10
10
  import {
11
11
  createIo
12
12
  } from "../chunk-5RUIFDTP.js";
13
13
  import {
14
14
  readKeySource,
15
15
  writeKey
16
- } from "../chunk-WDRRULBH.js";
17
- import "../chunk-6MTNS63X.js";
16
+ } from "../chunk-K7CSRGKZ.js";
18
17
  import {
19
18
  parseFlags
20
19
  } from "../chunk-GMXKITVA.js";
20
+ import {
21
+ exitOnHelpFlag
22
+ } from "../chunk-J4KFVOCQ.js";
23
+ import "../chunk-MGJBC6DD.js";
21
24
  import "../chunk-BC3VCZ3E.js";
25
+ import {
26
+ getPackageVersion
27
+ } from "../chunk-DINDL2CF.js";
28
+ import "../chunk-6MTNS63X.js";
22
29
  import "../chunk-SAF6HGAA.js";
23
- import "../chunk-SAA3VBDK.js";
30
+ import "../chunk-437T77TY.js";
24
31
  import {
25
32
  UsageError
26
33
  } from "../chunk-7QLSKOSU.js";
27
- import {
28
- isValidApiKey
29
- } from "../chunk-YWRJGYUH.js";
30
- import {
31
- exitOnHelpFlag
32
- } from "../chunk-RRZZ7TFJ.js";
33
- import {
34
- getPackageVersion
35
- } from "../chunk-ZUKH2NPJ.js";
36
- import "../chunk-2UMNXADU.js";
37
34
  import {
38
35
  EXIT
39
36
  } from "../chunk-KZERVKTD.js";
37
+ import "../chunk-2UMNXADU.js";
38
+ import {
39
+ isValidApiKey
40
+ } from "../chunk-MQMPG5X4.js";
40
41
 
41
42
  // bin/pushary-login.ts
42
43
  exitOnHelpFlag("login");
@@ -4,34 +4,35 @@ import {
4
4
  codexConfigToml,
5
5
  cursorUserMcp,
6
6
  geminiSettings
7
- } from "../chunk-EHLTWCDZ.js";
7
+ } from "../chunk-SEAHGHCE.js";
8
8
  import {
9
9
  createIo
10
10
  } from "../chunk-5RUIFDTP.js";
11
11
  import {
12
12
  clearKey,
13
13
  readKeySource
14
- } from "../chunk-WDRRULBH.js";
15
- import "../chunk-6MTNS63X.js";
14
+ } from "../chunk-K7CSRGKZ.js";
16
15
  import {
17
16
  parseFlags
18
17
  } from "../chunk-GMXKITVA.js";
18
+ import {
19
+ exitOnHelpFlag
20
+ } from "../chunk-J4KFVOCQ.js";
21
+ import "../chunk-MGJBC6DD.js";
19
22
  import "../chunk-BC3VCZ3E.js";
20
- import "../chunk-SAA3VBDK.js";
23
+ import "../chunk-DINDL2CF.js";
24
+ import "../chunk-6MTNS63X.js";
25
+ import "../chunk-437T77TY.js";
21
26
  import {
22
27
  UsageError
23
28
  } from "../chunk-7QLSKOSU.js";
24
- import "../chunk-YWRJGYUH.js";
25
29
  import {
26
- exitOnHelpFlag
27
- } from "../chunk-RRZZ7TFJ.js";
28
- import "../chunk-ZUKH2NPJ.js";
30
+ EXIT
31
+ } from "../chunk-KZERVKTD.js";
29
32
  import {
30
33
  getBaseUrl
31
34
  } from "../chunk-2UMNXADU.js";
32
- import {
33
- EXIT
34
- } from "../chunk-KZERVKTD.js";
35
+ import "../chunk-MQMPG5X4.js";
35
36
 
36
37
  // bin/pushary-logout.ts
37
38
  import { existsSync } from "fs";
@@ -1,30 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exitOnFailedResponse
4
- } from "../chunk-26D2YMDU.js";
5
- import "../chunk-QR6MVVQ7.js";
4
+ } from "../chunk-FBGBJXVC.js";
5
+ import "../chunk-F52SIIDG.js";
6
6
  import {
7
7
  createIo
8
8
  } from "../chunk-5RUIFDTP.js";
9
9
  import {
10
10
  rejectUnknownFlags
11
11
  } from "../chunk-GMXKITVA.js";
12
+ import {
13
+ exitOnHelpFlag
14
+ } from "../chunk-J4KFVOCQ.js";
15
+ import "../chunk-MGJBC6DD.js";
16
+ import "../chunk-DINDL2CF.js";
12
17
  import "../chunk-SAF6HGAA.js";
13
18
  import {
14
19
  UsageError
15
20
  } from "../chunk-7QLSKOSU.js";
16
- import "../chunk-YWRJGYUH.js";
17
21
  import {
18
- exitOnHelpFlag
19
- } from "../chunk-RRZZ7TFJ.js";
20
- import "../chunk-ZUKH2NPJ.js";
22
+ EXIT
23
+ } from "../chunk-KZERVKTD.js";
21
24
  import {
22
25
  getApiKey,
23
26
  getBaseUrl
24
27
  } from "../chunk-2UMNXADU.js";
25
- import {
26
- EXIT
27
- } from "../chunk-KZERVKTD.js";
28
+ import "../chunk-MQMPG5X4.js";
28
29
 
29
30
  // bin/pushary-mode.ts
30
31
  exitOnHelpFlag("mode");
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleNotification
4
- } from "../chunk-7PO2VEA4.js";
4
+ } from "../chunk-OPMSMF5R.js";
5
+ import "../chunk-RN3NOEJF.js";
5
6
  import "../chunk-BSZYIAZL.js";
6
7
  import "../chunk-SAF6HGAA.js";
7
- import "../chunk-SAA3VBDK.js";
8
+ import "../chunk-437T77TY.js";
8
9
  import "../chunk-7QLSKOSU.js";
9
- import "../chunk-YWRJGYUH.js";
10
- import "../chunk-RN3NOEJF.js";
11
- import "../chunk-2UMNXADU.js";
12
10
  import "../chunk-KZERVKTD.js";
11
+ import "../chunk-2UMNXADU.js";
12
+ import "../chunk-MQMPG5X4.js";
13
13
 
14
14
  // bin/pushary-notification-hook.ts
15
15
  var main = async () => {
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionDenied
4
- } from "../chunk-DHAZ6SOT.js";
5
- import "../chunk-NDC3TBHI.js";
6
- import "../chunk-3AGM3TDM.js";
7
- import "../chunk-4QQOKEOS.js";
8
- import "../chunk-7PO2VEA4.js";
4
+ } from "../chunk-QNBA5OXQ.js";
5
+ import "../chunk-UKSQWTBH.js";
6
+ import "../chunk-NJ7JT26G.js";
7
+ import "../chunk-37AD5K7W.js";
8
+ import "../chunk-OPMSMF5R.js";
9
+ import "../chunk-RN3NOEJF.js";
9
10
  import "../chunk-BSZYIAZL.js";
10
11
  import "../chunk-SAF6HGAA.js";
11
- import "../chunk-SAA3VBDK.js";
12
+ import "../chunk-437T77TY.js";
12
13
  import "../chunk-7QLSKOSU.js";
13
- import "../chunk-YWRJGYUH.js";
14
- import "../chunk-RN3NOEJF.js";
15
- import "../chunk-2UMNXADU.js";
16
14
  import "../chunk-KZERVKTD.js";
15
+ import "../chunk-2UMNXADU.js";
16
+ import "../chunk-MQMPG5X4.js";
17
17
 
18
18
  // bin/pushary-permission-denied-hook.ts
19
19
  var main = async () => {
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionRequest
4
- } from "../chunk-DHAZ6SOT.js";
5
- import "../chunk-NDC3TBHI.js";
6
- import "../chunk-3AGM3TDM.js";
7
- import "../chunk-4QQOKEOS.js";
8
- import "../chunk-7PO2VEA4.js";
4
+ } from "../chunk-QNBA5OXQ.js";
5
+ import "../chunk-UKSQWTBH.js";
6
+ import "../chunk-NJ7JT26G.js";
7
+ import "../chunk-37AD5K7W.js";
8
+ import "../chunk-OPMSMF5R.js";
9
+ import "../chunk-RN3NOEJF.js";
9
10
  import "../chunk-BSZYIAZL.js";
10
11
  import "../chunk-SAF6HGAA.js";
11
- import "../chunk-SAA3VBDK.js";
12
+ import "../chunk-437T77TY.js";
12
13
  import "../chunk-7QLSKOSU.js";
13
- import "../chunk-YWRJGYUH.js";
14
- import "../chunk-RN3NOEJF.js";
15
- import "../chunk-2UMNXADU.js";
16
14
  import "../chunk-KZERVKTD.js";
15
+ import "../chunk-2UMNXADU.js";
16
+ import "../chunk-MQMPG5X4.js";
17
17
 
18
18
  // bin/pushary-permission-hook.ts
19
19
  var main = async () => {
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePostToolUse
4
- } from "../chunk-7PO2VEA4.js";
4
+ } from "../chunk-OPMSMF5R.js";
5
+ import "../chunk-RN3NOEJF.js";
5
6
  import "../chunk-BSZYIAZL.js";
6
7
  import "../chunk-SAF6HGAA.js";
7
- import "../chunk-SAA3VBDK.js";
8
+ import "../chunk-437T77TY.js";
8
9
  import "../chunk-7QLSKOSU.js";
9
- import "../chunk-YWRJGYUH.js";
10
- import "../chunk-RN3NOEJF.js";
11
- import "../chunk-2UMNXADU.js";
12
10
  import "../chunk-KZERVKTD.js";
11
+ import "../chunk-2UMNXADU.js";
12
+ import "../chunk-MQMPG5X4.js";
13
13
 
14
14
  // bin/pushary-post-hook.ts
15
15
  var main = async () => {