@pushary/agent-hooks 0.78.0 → 0.80.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 (58) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +52 -0
  3. package/data/SKILL.md +18 -5
  4. package/data/cursor-plugin/skills/pushary/SKILL.md +17 -4
  5. package/data/vscode-plugin/skills/pushary/SKILL.md +17 -4
  6. package/dist/bin/pushary-bell-hook.d.ts +1 -0
  7. package/dist/bin/pushary-bell-hook.js +22 -0
  8. package/dist/bin/pushary-bell.d.ts +1 -0
  9. package/dist/bin/pushary-bell.js +203 -0
  10. package/dist/bin/pushary-claude.js +8 -7
  11. package/dist/bin/pushary-clean.js +14 -14
  12. package/dist/bin/pushary-codex-hook.js +8 -7
  13. package/dist/bin/pushary-codex.js +3 -2
  14. package/dist/bin/pushary-connect.js +15 -14
  15. package/dist/bin/pushary-daemon.js +5 -5
  16. package/dist/bin/pushary-doctor.js +34 -64
  17. package/dist/bin/pushary-gemini-hook.js +8 -7
  18. package/dist/bin/pushary-hook.js +11 -10
  19. package/dist/bin/pushary-login.js +15 -14
  20. package/dist/bin/pushary-logout.js +12 -11
  21. package/dist/bin/pushary-mode.js +7 -7
  22. package/dist/bin/pushary-notification-hook.js +3 -2
  23. package/dist/bin/pushary-permission-denied-hook.js +7 -6
  24. package/dist/bin/pushary-permission-hook.js +7 -6
  25. package/dist/bin/pushary-post-hook.js +3 -2
  26. package/dist/bin/pushary-prompt-hook.js +3 -2
  27. package/dist/bin/pushary-session-end-hook.js +3 -2
  28. package/dist/bin/pushary-session-start-hook.js +3 -2
  29. package/dist/bin/pushary-setup.js +131 -41
  30. package/dist/bin/pushary-stats.js +7 -7
  31. package/dist/bin/pushary-status.js +17 -16
  32. package/dist/bin/pushary-stop-hook.js +3 -2
  33. package/dist/bin/pushary-stopfailure-hook.js +3 -2
  34. package/dist/bin/pushary-suggestions.js +4 -4
  35. package/dist/bin/pushary-upgrade.js +10 -10
  36. package/dist/bin/pushary-wait.js +9 -9
  37. package/dist/bin/pushary.js +6 -5
  38. package/dist/chunk-22EQOB2T.js +212 -0
  39. package/dist/{chunk-CC2K2SST.js → chunk-7DYFAM32.js} +1 -1
  40. package/dist/{chunk-FWWBEB6L.js → chunk-A5DAEWBZ.js} +2 -2
  41. package/dist/{chunk-MGFZXUUR.js → chunk-BOMF4C2Q.js} +114 -14
  42. package/dist/{chunk-HPDLDQC5.js → chunk-DUYM5SHH.js} +10 -1
  43. package/dist/{chunk-NHKWU7MN.js → chunk-E6I3DBJW.js} +8 -1
  44. package/dist/{chunk-DLBW37U6.js → chunk-EBP4YG75.js} +1 -1
  45. package/dist/{chunk-NQTRA7H5.js → chunk-GQLB2GBJ.js} +3 -3
  46. package/dist/{chunk-IA5GBKNL.js → chunk-MHA2WB7S.js} +1 -1
  47. package/dist/chunk-PPD3HHNJ.js +44 -0
  48. package/dist/{chunk-QCYN5VXB.js → chunk-Q4QULGAV.js} +1 -1
  49. package/dist/{chunk-3CBPY2G5.js → chunk-R6AYBATA.js} +1 -1
  50. package/dist/{chunk-BBK3TTU2.js → chunk-RRZZ7TFJ.js} +1 -1
  51. package/dist/{chunk-TJJBF73A.js → chunk-T6BNEQ2A.js} +23 -0
  52. package/dist/{chunk-7BBUTWBD.js → chunk-U2PZKYZM.js} +1 -1
  53. package/dist/{chunk-46UEJXQO.js → chunk-UBUPETEQ.js} +2 -2
  54. package/dist/{chunk-NN4GTN6Q.js → chunk-ULITFWLG.js} +8 -8
  55. package/dist/{chunk-IZA7SWXX.js → chunk-WYVKPLVT.js} +3 -3
  56. package/dist/{chunk-7OYGFJYZ.js → chunk-ZUKH2NPJ.js} +18 -0
  57. package/dist/src/index.js +7 -6
  58. package/package.json +4 -2
@@ -1,17 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- runBrowserLogin
4
- } from "../chunk-Z3Z4VK5F.js";
5
- import {
6
- addClaudeMcpServer,
7
- addPusharyHooks,
8
- addPusharyToolPermissions
9
- } from "../chunk-3CBPY2G5.js";
10
2
  import {
11
3
  claudeWired,
12
4
  codexWired,
13
5
  geminiWired
14
- } from "../chunk-46UEJXQO.js";
6
+ } from "../chunk-UBUPETEQ.js";
7
+ import {
8
+ runBrowserLogin
9
+ } from "../chunk-Z3Z4VK5F.js";
15
10
  import {
16
11
  describeDetection,
17
12
  detectAllAgents,
@@ -23,12 +18,17 @@ import {
23
18
  shortenHome,
24
19
  vscodeSettingsTargets,
25
20
  writeInstructionBlock
26
- } from "../chunk-IZA7SWXX.js";
21
+ } from "../chunk-WYVKPLVT.js";
27
22
  import {
28
23
  GEMINI_HOOK_BINARY,
29
24
  addGeminiHooks,
30
25
  addGeminiMcpServer
31
- } from "../chunk-CC2K2SST.js";
26
+ } from "../chunk-7DYFAM32.js";
27
+ import {
28
+ addClaudeMcpServer,
29
+ addPusharyHooks,
30
+ addPusharyToolPermissions
31
+ } from "../chunk-R6AYBATA.js";
32
32
  import {
33
33
  addCodexHookTrust,
34
34
  addCodexHooks,
@@ -46,15 +46,24 @@ import {
46
46
  geminiSettings,
47
47
  pusharyConfigFile,
48
48
  vscodePluginDir
49
- } from "../chunk-QCYN5VXB.js";
49
+ } from "../chunk-Q4QULGAV.js";
50
+ import {
51
+ reportEvent
52
+ } from "../chunk-DUYM5SHH.js";
50
53
  import {
51
54
  confirmAppConnection,
52
55
  connectDevice,
53
56
  connectViaAppPairing,
57
+ describeRoundTrip,
54
58
  printConnectInstructions,
55
- setHumanStream
56
- } from "../chunk-MGFZXUUR.js";
59
+ setHumanStream,
60
+ verifyRoundTrip
61
+ } from "../chunk-BOMF4C2Q.js";
57
62
  import "../chunk-3EGEA4KH.js";
63
+ import {
64
+ checkApiKey,
65
+ describeKeyCheck
66
+ } from "../chunk-EBP4YG75.js";
58
67
  import {
59
68
  KEY_FILE_MODE,
60
69
  exportLine,
@@ -62,7 +71,7 @@ import {
62
71
  readConfigFileKey,
63
72
  readKeySource,
64
73
  writeKey
65
- } from "../chunk-NHKWU7MN.js";
74
+ } from "../chunk-E6I3DBJW.js";
66
75
  import {
67
76
  backupFile,
68
77
  readJsonSafe,
@@ -70,16 +79,21 @@ import {
70
79
  writeJsonAtomic
71
80
  } from "../chunk-6MTNS63X.js";
72
81
  import {
73
- checkApiKey,
74
- describeKeyCheck
75
- } from "../chunk-DLBW37U6.js";
82
+ parseFlags
83
+ } from "../chunk-GMXKITVA.js";
76
84
  import {
77
85
  installClaudeAlias,
78
86
  resolveShellRc
79
87
  } from "../chunk-BC3VCZ3E.js";
88
+ import "../chunk-BSZYIAZL.js";
89
+ import "../chunk-SAF6HGAA.js";
90
+ import "../chunk-PPD3HHNJ.js";
80
91
  import {
81
- parseFlags
82
- } from "../chunk-GMXKITVA.js";
92
+ UsageError
93
+ } from "../chunk-7QLSKOSU.js";
94
+ import {
95
+ isValidApiKey
96
+ } from "../chunk-T6BNEQ2A.js";
83
97
  import {
84
98
  installGlobally,
85
99
  npmErrorMessage,
@@ -87,23 +101,12 @@ import {
87
101
  resolveGlobalBinDir,
88
102
  resolveGlobalBinary
89
103
  } from "../chunk-MUEW424A.js";
104
+ import "../chunk-RN3NOEJF.js";
90
105
  import {
91
106
  getPackageVersion,
92
107
  isNewerVersion,
93
108
  renderCommandHelp
94
- } from "../chunk-7OYGFJYZ.js";
95
- import {
96
- reportEvent
97
- } from "../chunk-HPDLDQC5.js";
98
- import "../chunk-BSZYIAZL.js";
99
- import "../chunk-SAF6HGAA.js";
100
- import {
101
- UsageError
102
- } from "../chunk-7QLSKOSU.js";
103
- import {
104
- isValidApiKey
105
- } from "../chunk-TJJBF73A.js";
106
- import "../chunk-RN3NOEJF.js";
109
+ } from "../chunk-ZUKH2NPJ.js";
107
110
  import "../chunk-2UMNXADU.js";
108
111
  import {
109
112
  EXIT
@@ -166,6 +169,14 @@ var describeClosing = (facts) => {
166
169
  exitCode: EXIT.PROBLEMS_FOUND
167
170
  };
168
171
  }
172
+ if (facts.roundTripAnswered === true) {
173
+ return {
174
+ ok: true,
175
+ headline: "Setup complete, and proven.",
176
+ next: [...nextSteps(facts, true), "", `Approvals: ${ACTIVITY_URL}`],
177
+ exitCode: EXIT.OK
178
+ };
179
+ }
169
180
  if (facts.reachChecked && !facts.reachesYou) {
170
181
  return {
171
182
  ok: false,
@@ -178,6 +189,22 @@ var describeClosing = (facts) => {
178
189
  exitCode: EXIT.NO_DEVICE
179
190
  };
180
191
  }
192
+ if (facts.roundTripAnswered === false) {
193
+ return {
194
+ ok: false,
195
+ headline: "Agents configured. Nobody answered the test question.",
196
+ next: [
197
+ "The push reached a device and no answer came back, which is the failure that usually",
198
+ "goes unnoticed: approvals will keep arriving and keep going unanswered.",
199
+ "",
200
+ "Check the notification opened something you could tap, then:",
201
+ "pushary doctor --roundtrip send another one",
202
+ "",
203
+ "If you simply were not looking, re-run setup or pass --verify push to skip this check."
204
+ ],
205
+ exitCode: EXIT.PROBLEMS_FOUND
206
+ };
207
+ }
181
208
  if (!facts.reachChecked) {
182
209
  return {
183
210
  ok: true,
@@ -307,6 +334,20 @@ var installAgentSkill = async (request, effects) => {
307
334
  };
308
335
 
309
336
  // src/setup/telemetry.ts
337
+ var roundTripOutcome = (outcome) => {
338
+ switch (outcome?.kind) {
339
+ case "answered":
340
+ return "answered";
341
+ case "notify-only":
342
+ return "delivered";
343
+ case "unanswered":
344
+ return "delivered";
345
+ case "no-recipients":
346
+ return "unreachable";
347
+ default:
348
+ return null;
349
+ }
350
+ };
310
351
  var currentStep = "start";
311
352
  var markStep = (step) => {
312
353
  currentStep = step;
@@ -373,9 +414,20 @@ var parseConnectMode = (raw) => {
373
414
  if (CONNECT_MODES.includes(value)) return value;
374
415
  throw new UsageError(`--connect must be one of: ${CONNECT_MODES.join(", ")} (got ${raw})`);
375
416
  };
417
+ var VERIFY_MODES = ["roundtrip", "push", "none"];
418
+ var parseVerifyMode = (raw) => {
419
+ const value = raw.trim().toLowerCase();
420
+ if (VERIFY_MODES.includes(value)) return value;
421
+ throw new UsageError(`--verify must be one of: ${VERIFY_MODES.join(", ")} (got ${raw})`);
422
+ };
423
+ var effectiveVerify = (options, context) => {
424
+ if (options.verifyExplicit) return options.verify;
425
+ if (options.verify === "roundtrip") return "roundtrip";
426
+ return context.paired ? "roundtrip" : options.verify;
427
+ };
376
428
  var SETUP_FLAGS = {
377
429
  bools: ["key-stdin", "skip-phone", "yes", "y", "json", "dry-run", "help", "h"],
378
- values: ["key", "connect", "agents"]
430
+ values: ["key", "connect", "agents", "verify"]
379
431
  };
380
432
  var isAgentChoice = (value) => AGENT_CHOICES.includes(value);
381
433
  var parseAgentSelection = (raw, yes) => {
@@ -412,6 +464,9 @@ var parseSetupOptions = (input2) => {
412
464
  const agents = parseAgentSelection(agentsFlag, yes);
413
465
  const connectRaw = flags.values.get("connect");
414
466
  const connectMode = connectRaw === void 0 ? "app" : parseConnectMode(connectRaw);
467
+ const verifyRaw = flags.values.get("verify");
468
+ const nonInteractive = yes || agentsFlag !== void 0 || flags.bools.has("json") || !input2.stdinIsTty;
469
+ const verify = verifyRaw !== void 0 ? parseVerifyMode(verifyRaw) : nonInteractive ? "push" : "roundtrip";
415
470
  const key = flags.values.get("key")?.trim() || null;
416
471
  const keyStdin = flags.bools.has("key-stdin");
417
472
  if (key && keyStdin) {
@@ -437,13 +492,15 @@ var parseSetupOptions = (input2) => {
437
492
  // cannot see it is waiting for, and whatever is reading stdout waits forever
438
493
  // for an object that never arrives. Asking for machine-readable output is
439
494
  // itself a statement that no human is watching.
440
- nonInteractive: yes || agentsFlag !== void 0 || flags.bools.has("json") || !input2.stdinIsTty,
495
+ nonInteractive,
441
496
  json: flags.bools.has("json"),
442
497
  dryRun: flags.bools.has("dry-run"),
443
498
  help,
444
499
  agents,
445
500
  key,
446
- keyStdin
501
+ keyStdin,
502
+ verify,
503
+ verifyExplicit: verifyRaw !== void 0
447
504
  };
448
505
  };
449
506
 
@@ -1722,6 +1779,31 @@ var main = async () => {
1722
1779
  } else {
1723
1780
  phone = await connectDevice(trimmedKey, { showCapabilities: !options.connectExplicit });
1724
1781
  }
1782
+ let roundTrip = null;
1783
+ const verifyMode = effectiveVerify(options, { paired: keyFromPairing });
1784
+ if (verifyMode === "roundtrip" && keyCheck?.kind !== "locked" && !skipPhone && // Reaching nobody is already reported by the delivery check above, in copy
1785
+ // that names the fix. Asking a question nobody can receive would repeat it
1786
+ // 55 seconds later and add nothing.
1787
+ //
1788
+ // `unattributable` is the exception and the case this is best at. It means
1789
+ // the push landed on a multi-member site through a channel that carries no
1790
+ // owner, so nothing in the counts can say whether it was THIS user's device.
1791
+ // A tap settles it, which is why describeVerifyOutcome already tells people
1792
+ // to run `doctor --roundtrip` here. Doing it inline saves the round trip
1793
+ // being a thing they have to know to run.
1794
+ (phone?.reachesYou || phone?.outcome?.kind === "unattributable")) {
1795
+ console.log();
1796
+ console.log(` ${dim("One last check. Answering it is the proof.")}`);
1797
+ await spinner("Waiting for you to tap the notification", async () => {
1798
+ roundTrip = await verifyRoundTrip(trimmedKey);
1799
+ });
1800
+ const report = describeRoundTrip(roundTrip);
1801
+ console.log(` ${report.ok ? check : yellow("!")} ${report.message}`);
1802
+ for (const line of report.next) console.log(` ${dim(line)}`);
1803
+ } else if (verifyMode === "roundtrip") {
1804
+ console.log();
1805
+ console.log(` ${dim("Skipped the round trip: nothing is connected that could answer it.")}`);
1806
+ }
1725
1807
  console.log();
1726
1808
  if (keyCheck?.kind === "locked") {
1727
1809
  const report = describeKeyCheck(keyCheck);
@@ -1765,7 +1847,10 @@ var main = async () => {
1765
1847
  completed,
1766
1848
  failed,
1767
1849
  reachChecked,
1768
- reachesYou
1850
+ reachesYou,
1851
+ // null when the check did not run, so it changes nothing. Only an outright
1852
+ // `false` is allowed to hold back "Setup complete.".
1853
+ roundTripAnswered: roundTrip === null ? null : roundTrip.kind === "answered" ? true : roundTrip.kind === "unanswered" ? false : null
1769
1854
  });
1770
1855
  console.log(` ${closing.ok ? green(bold(closing.headline)) : yellow(bold(closing.headline))}`);
1771
1856
  if (failed.length > 0) {
@@ -1785,10 +1870,11 @@ var main = async () => {
1785
1870
  completed,
1786
1871
  skipped,
1787
1872
  failed,
1788
- // 'answered' is deliberately unreachable here: it means a human tapped, and
1789
- // setup no longer sends a question. It stays in the type for doctor
1790
- // --roundtrip, which does.
1791
- connectOutcome: phone === null ? "skipped" : phone.reachesYou ? "delivered" : "unreachable",
1873
+ // 'answered' is finally reachable. It was in the enum from the start and
1874
+ // nothing produced it, because setup stopped at a delivered notification, so
1875
+ // the one value meaning "a human tapped" was never emitted by the command
1876
+ // whose job is to prove a human can.
1877
+ connectOutcome: roundTripOutcome(roundTrip) ?? (phone === null ? "skipped" : phone.reachesYou ? "delivered" : "unreachable"),
1792
1878
  keyCheck: keyCheck?.kind ?? "skipped",
1793
1879
  exitCode
1794
1880
  });
@@ -1800,6 +1886,10 @@ var main = async () => {
1800
1886
  failed,
1801
1887
  keyCheck: keyCheck?.kind ?? "skipped",
1802
1888
  reach: phone === null ? "skipped" : phone.reachesYou ? "yours" : phone.outcome?.kind ?? phone.detail ?? "unreachable",
1889
+ // Named separately from `reach` so a caller can tell "a push landed" from
1890
+ // "a person answered" without inferring it. 'skipped' means the check did
1891
+ // not run, never that it failed.
1892
+ roundTrip: roundTrip === null ? "skipped" : roundTrip.kind,
1803
1893
  rc: rc.kind,
1804
1894
  rcPath: rc.path,
1805
1895
  exitCode
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- exitOnHelpFlag
4
- } from "../chunk-BBK3TTU2.js";
5
- import "../chunk-7OYGFJYZ.js";
6
2
  import {
7
3
  readLedgerSummary
8
- } from "../chunk-IA5GBKNL.js";
9
- import "../chunk-TJJBF73A.js";
4
+ } from "../chunk-MHA2WB7S.js";
5
+ import "../chunk-T6BNEQ2A.js";
6
+ import {
7
+ exitOnHelpFlag
8
+ } from "../chunk-RRZZ7TFJ.js";
9
+ import "../chunk-ZUKH2NPJ.js";
10
10
  import {
11
11
  getApiKey
12
12
  } from "../chunk-2UMNXADU.js";
@@ -40,5 +40,5 @@ if (connected) {
40
40
  console.log("A key is configured now, so new moments reach your phone instead of waiting in the terminal.");
41
41
  } else {
42
42
  console.log("Each of those sat in the terminal until you noticed. With Pushary they land on your lock screen as a yes or no.");
43
- console.log("7-day trial: https://pushary.com/sign-up?utm_source=cli&utm_medium=stats");
43
+ console.log("3-day trial: https://pushary.com/sign-up?utm_source=cli&utm_medium=stats");
44
44
  }
@@ -1,40 +1,41 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- describeLastSeen,
4
- listMachines
5
- } from "../chunk-NQTRA7H5.js";
6
2
  import {
7
3
  describeReach,
8
4
  fetchChannels,
9
5
  reachVerdict
10
- } from "../chunk-MGFZXUUR.js";
6
+ } from "../chunk-BOMF4C2Q.js";
11
7
  import "../chunk-3EGEA4KH.js";
12
- import {
13
- readKeySource
14
- } from "../chunk-NHKWU7MN.js";
15
- import "../chunk-6MTNS63X.js";
16
8
  import {
17
9
  checkApiKey,
18
10
  describeKeyCheck
19
- } from "../chunk-DLBW37U6.js";
11
+ } from "../chunk-EBP4YG75.js";
20
12
  import {
21
13
  createIo
22
14
  } from "../chunk-TX7KBKT7.js";
23
- import "../chunk-BC3VCZ3E.js";
15
+ import {
16
+ readKeySource
17
+ } from "../chunk-E6I3DBJW.js";
18
+ import "../chunk-6MTNS63X.js";
24
19
  import {
25
20
  rejectUnknownFlags
26
21
  } from "../chunk-GMXKITVA.js";
27
- import {
28
- exitOnHelpFlag
29
- } from "../chunk-BBK3TTU2.js";
30
- import "../chunk-7OYGFJYZ.js";
22
+ import "../chunk-BC3VCZ3E.js";
31
23
  import "../chunk-BSZYIAZL.js";
32
24
  import "../chunk-SAF6HGAA.js";
25
+ import "../chunk-PPD3HHNJ.js";
33
26
  import {
34
27
  UsageError
35
28
  } from "../chunk-7QLSKOSU.js";
36
- import "../chunk-TJJBF73A.js";
29
+ import "../chunk-T6BNEQ2A.js";
30
+ import {
31
+ describeLastSeen,
32
+ listMachines
33
+ } from "../chunk-GQLB2GBJ.js";
37
34
  import "../chunk-RN3NOEJF.js";
35
+ import {
36
+ exitOnHelpFlag
37
+ } from "../chunk-RRZZ7TFJ.js";
38
+ import "../chunk-ZUKH2NPJ.js";
38
39
  import "../chunk-2UMNXADU.js";
39
40
  import {
40
41
  EXIT
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleStop
4
- } from "../chunk-HPDLDQC5.js";
4
+ } from "../chunk-DUYM5SHH.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-PPD3HHNJ.js";
7
8
  import "../chunk-7QLSKOSU.js";
8
- import "../chunk-TJJBF73A.js";
9
+ import "../chunk-T6BNEQ2A.js";
9
10
  import "../chunk-RN3NOEJF.js";
10
11
  import "../chunk-2UMNXADU.js";
11
12
  import "../chunk-KZERVKTD.js";
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleStopFailure
4
- } from "../chunk-HPDLDQC5.js";
4
+ } from "../chunk-DUYM5SHH.js";
5
5
  import "../chunk-BSZYIAZL.js";
6
6
  import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-PPD3HHNJ.js";
7
8
  import "../chunk-7QLSKOSU.js";
8
- import "../chunk-TJJBF73A.js";
9
+ import "../chunk-T6BNEQ2A.js";
9
10
  import "../chunk-RN3NOEJF.js";
10
11
  import "../chunk-2UMNXADU.js";
11
12
  import "../chunk-KZERVKTD.js";
@@ -5,13 +5,13 @@ import {
5
5
  import {
6
6
  rejectUnknownFlags
7
7
  } from "../chunk-GMXKITVA.js";
8
- import {
9
- exitOnHelpFlag
10
- } from "../chunk-BBK3TTU2.js";
11
- import "../chunk-7OYGFJYZ.js";
12
8
  import {
13
9
  UsageError
14
10
  } from "../chunk-7QLSKOSU.js";
11
+ import {
12
+ exitOnHelpFlag
13
+ } from "../chunk-RRZZ7TFJ.js";
14
+ import "../chunk-ZUKH2NPJ.js";
15
15
  import {
16
16
  getApiKey,
17
17
  getBaseUrl
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- addClaudeMcpServer,
4
- addPusharyHooks,
5
- addPusharyToolPermissions
6
- } from "../chunk-3CBPY2G5.js";
7
2
  import {
8
3
  GEMINI_HOOK_BINARY,
9
4
  addGeminiHooks,
10
5
  addGeminiMcpServer,
11
6
  hasGeminiHooks
12
- } from "../chunk-CC2K2SST.js";
7
+ } from "../chunk-7DYFAM32.js";
8
+ import {
9
+ addClaudeMcpServer,
10
+ addPusharyHooks,
11
+ addPusharyToolPermissions
12
+ } from "../chunk-R6AYBATA.js";
13
13
  import {
14
14
  CODEX_HOOK_BINARY,
15
15
  addCodexHookTrust,
@@ -23,10 +23,11 @@ import {
23
23
  hasCodexHooks,
24
24
  vscodePluginDir,
25
25
  vscodePluginMcp
26
- } from "../chunk-QCYN5VXB.js";
26
+ } from "../chunk-Q4QULGAV.js";
27
27
  import {
28
28
  readJsonSafe
29
29
  } from "../chunk-6MTNS63X.js";
30
+ import "../chunk-T6BNEQ2A.js";
30
31
  import {
31
32
  execNpm,
32
33
  npmErrorMessage,
@@ -36,11 +37,10 @@ import {
36
37
  } from "../chunk-MUEW424A.js";
37
38
  import {
38
39
  exitOnHelpFlag
39
- } from "../chunk-BBK3TTU2.js";
40
+ } from "../chunk-RRZZ7TFJ.js";
40
41
  import {
41
42
  isNewerVersion
42
- } from "../chunk-7OYGFJYZ.js";
43
- import "../chunk-TJJBF73A.js";
43
+ } from "../chunk-ZUKH2NPJ.js";
44
44
  import {
45
45
  getApiKey
46
46
  } from "../chunk-2UMNXADU.js";
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- exitOnFailedResponse
4
- } from "../chunk-7BBUTWBD.js";
5
2
  import {
6
3
  describeWaitLadder
7
4
  } from "../chunk-IIENZE2J.js";
8
- import "../chunk-DLBW37U6.js";
5
+ import {
6
+ exitOnFailedResponse
7
+ } from "../chunk-U2PZKYZM.js";
8
+ import "../chunk-EBP4YG75.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-TX7KBKT7.js";
12
12
  import {
13
13
  rejectUnknownFlags
14
14
  } from "../chunk-GMXKITVA.js";
15
- import {
16
- exitOnHelpFlag
17
- } from "../chunk-BBK3TTU2.js";
18
- import "../chunk-7OYGFJYZ.js";
19
15
  import "../chunk-SAF6HGAA.js";
20
16
  import {
21
17
  UsageError
22
18
  } from "../chunk-7QLSKOSU.js";
23
- import "../chunk-TJJBF73A.js";
19
+ import "../chunk-T6BNEQ2A.js";
20
+ import {
21
+ exitOnHelpFlag
22
+ } from "../chunk-RRZZ7TFJ.js";
23
+ import "../chunk-ZUKH2NPJ.js";
24
24
  import {
25
25
  getApiKey,
26
26
  getBaseUrl
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ installProxyDispatcher
4
+ } from "../chunk-SAF6HGAA.js";
5
+ import "../chunk-7QLSKOSU.js";
2
6
  import {
3
7
  COMMANDS,
4
8
  getPackageVersion,
5
9
  isCommandName,
6
10
  renderHelp
7
- } from "../chunk-7OYGFJYZ.js";
8
- import {
9
- installProxyDispatcher
10
- } from "../chunk-SAF6HGAA.js";
11
- import "../chunk-7QLSKOSU.js";
11
+ } from "../chunk-ZUKH2NPJ.js";
12
12
  import {
13
13
  EXIT
14
14
  } from "../chunk-KZERVKTD.js";
@@ -22,6 +22,7 @@ var LOADERS = {
22
22
  login: () => import("./pushary-login.js"),
23
23
  logout: () => import("./pushary-logout.js"),
24
24
  connect: () => import("./pushary-connect.js"),
25
+ bell: () => import("./pushary-bell.js"),
25
26
  doctor: () => import("./pushary-doctor.js"),
26
27
  clean: () => import("./pushary-clean.js"),
27
28
  mode: () => import("./pushary-mode.js"),