@pushary/agent-hooks 1.9.65 → 1.9.66

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 (123) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/{api-32B3XLJR.js → api-GDSVUTI2.js} +12 -10
  3. package/dist/bin/pushary-bell-hook.js +25 -27
  4. package/dist/bin/pushary-bell.js +10 -10
  5. package/dist/bin/pushary-claude.js +26 -28
  6. package/dist/bin/pushary-clean.js +34 -36
  7. package/dist/bin/pushary-codex-bridge.js +21 -22
  8. package/dist/bin/pushary-codex-hook.js +30 -32
  9. package/dist/bin/pushary-codex-session.js +8 -8
  10. package/dist/bin/pushary-codex.js +13 -13
  11. package/dist/bin/pushary-connect.js +25 -26
  12. package/dist/bin/pushary-cowork.js +5 -5
  13. package/dist/bin/pushary-daemon.js +37 -39
  14. package/dist/bin/pushary-disconnect.js +25 -26
  15. package/dist/bin/pushary-doctor.js +42 -44
  16. package/dist/bin/pushary-elicitation-hook.js +25 -27
  17. package/dist/bin/pushary-gemini-bridge.js +15 -16
  18. package/dist/bin/pushary-gemini-hook.js +27 -29
  19. package/dist/bin/pushary-hook.js +29 -31
  20. package/dist/bin/pushary-login.js +19 -19
  21. package/dist/bin/pushary-logout.js +25 -26
  22. package/dist/bin/pushary-mcp.js +11 -11
  23. package/dist/bin/pushary-mode.js +14 -14
  24. package/dist/bin/pushary-notification-hook.js +24 -26
  25. package/dist/bin/pushary-opencode-hook.js +26 -28
  26. package/dist/bin/pushary-permission-denied-hook.js +29 -31
  27. package/dist/bin/pushary-permission-hook.js +32 -31
  28. package/dist/bin/pushary-post-hook.js +24 -26
  29. package/dist/bin/pushary-prompt-hook.js +24 -26
  30. package/dist/bin/pushary-session-end-hook.js +26 -28
  31. package/dist/bin/pushary-session-start-hook.js +33 -35
  32. package/dist/bin/pushary-setup.js +47 -49
  33. package/dist/bin/pushary-stats.js +5 -5
  34. package/dist/bin/pushary-status.js +30 -31
  35. package/dist/bin/pushary-stop-hook.js +24 -26
  36. package/dist/bin/pushary-stopfailure-hook.js +24 -26
  37. package/dist/bin/pushary-suggestions.js +14 -14
  38. package/dist/bin/pushary-transcript-register.js +16 -18
  39. package/dist/bin/pushary-transcripts.js +17 -17
  40. package/dist/bin/pushary-upgrade.js +37 -38
  41. package/dist/bin/pushary-wait.js +14 -14
  42. package/dist/bin/pushary.js +7 -7
  43. package/dist/{chunk-FFSIYBBU.js → chunk-26W46E46.js} +4 -4
  44. package/dist/{chunk-3UNAPXED.js → chunk-2BL6KWN7.js} +9 -9
  45. package/dist/{chunk-GA257T2E.js → chunk-32ZT2ATY.js} +5 -5
  46. package/dist/{chunk-CSKABVSH.js → chunk-376TUN72.js} +3 -3
  47. package/dist/{chunk-6CZX6YOE.js → chunk-3ELJIG2R.js} +3 -3
  48. package/dist/{chunk-WY6YAMZW.js → chunk-3EZP5ZPS.js} +5 -4
  49. package/dist/{chunk-4LUWNBGD.js → chunk-3FQX74E4.js} +3 -3
  50. package/dist/{chunk-HVOQUPSO.js → chunk-45KMS76L.js} +1 -1
  51. package/dist/{chunk-JCWHOB36.js → chunk-4APD2DPI.js} +2 -2
  52. package/dist/{chunk-ADXHPGBZ.js → chunk-57NTMVMI.js} +6 -6
  53. package/dist/{chunk-W5L2ZLHE.js → chunk-5FJDODOA.js} +3 -3
  54. package/dist/{chunk-CZ65D6Q5.js → chunk-5J7OZBJ4.js} +2 -2
  55. package/dist/{chunk-XJIIU36L.js → chunk-6BGVSV2Q.js} +1 -1
  56. package/dist/{chunk-I2UBF2SS.js → chunk-6RJZSBPD.js} +1 -1
  57. package/dist/{chunk-QNZ6G3LY.js → chunk-6ZXCWK27.js} +5 -5
  58. package/dist/{chunk-P5HZEGT7.js → chunk-7LK3Y6ET.js} +6 -6
  59. package/dist/{chunk-Y64JGYTB.js → chunk-A47UKPC7.js} +1 -1
  60. package/dist/{chunk-JFKMPLNF.js → chunk-AVWECJSN.js} +2 -2
  61. package/dist/{chunk-XZCJC3QO.js → chunk-AWGBL4P3.js} +211 -24
  62. package/dist/{chunk-LMC5UPL7.js → chunk-B6JC676X.js} +1 -1
  63. package/dist/{chunk-U2P2LQ5B.js → chunk-CN6JFM62.js} +5 -5
  64. package/dist/{chunk-ED2SWTPC.js → chunk-CNJ7SI5V.js} +4 -4
  65. package/dist/{chunk-SZBMTOUZ.js → chunk-DBUHSUL7.js} +1 -1
  66. package/dist/{chunk-EEVE7H5Z.js → chunk-DIUTSF6I.js} +4 -4
  67. package/dist/{chunk-UM2X7HL6.js → chunk-DKMVVBXO.js} +13 -15
  68. package/dist/{chunk-OA6EADFT.js → chunk-DPU6H4JY.js} +3 -3
  69. package/dist/{chunk-MNKIR2ZB.js → chunk-EJR5JXMV.js} +24 -1
  70. package/dist/{chunk-VHKK3US3.js → chunk-EU2ZOZC3.js} +3 -3
  71. package/dist/{chunk-AN7C3CHH.js → chunk-G6VJZ3RB.js} +1 -1
  72. package/dist/{chunk-ATPJGHUP.js → chunk-GDLT32I4.js} +3 -3
  73. package/dist/{chunk-7ILQX47W.js → chunk-GECU7V44.js} +3 -3
  74. package/dist/{chunk-BAGBCSXA.js → chunk-GO7YKPT3.js} +1 -1
  75. package/dist/{chunk-F56GTJFG.js → chunk-GWYCKTXS.js} +5 -5
  76. package/dist/{chunk-BEQ3MEE3.js → chunk-HUGVJBDN.js} +2 -2
  77. package/dist/{chunk-FWS2KLV2.js → chunk-IA5VWIHV.js} +2 -2
  78. package/dist/{chunk-CU2PXLZ6.js → chunk-IGO3AGZK.js} +4 -4
  79. package/dist/{chunk-Z3M627TQ.js → chunk-IQ3GKPFM.js} +1 -1
  80. package/dist/{chunk-HDGB6SQ4.js → chunk-JL3SZJJP.js} +2 -2
  81. package/dist/{chunk-SCMEVDAR.js → chunk-KS3O6O7E.js} +3 -3
  82. package/dist/{chunk-HIYLAC3C.js → chunk-MDIGG3Q7.js} +3 -3
  83. package/dist/{chunk-ICFHMJTW.js → chunk-MNNQEUQC.js} +3 -3
  84. package/dist/{chunk-BKCI53W6.js → chunk-Q5RNYE2L.js} +4 -4
  85. package/dist/{chunk-ONBL2GCU.js → chunk-QBNICXMC.js} +6 -6
  86. package/dist/{chunk-PP7FC3Y7.js → chunk-QN25WBXL.js} +9 -7
  87. package/dist/{chunk-NUEPJ5W6.js → chunk-QOIPUYUD.js} +3 -5
  88. package/dist/{chunk-UHS5MMAI.js → chunk-QR2QWGQI.js} +3 -3
  89. package/dist/{chunk-NOH3EJFH.js → chunk-R7C2FS33.js} +1 -1
  90. package/dist/{chunk-RABLE5R6.js → chunk-RJ6JEHCP.js} +1 -1
  91. package/dist/{chunk-WOHP7EL6.js → chunk-RSZQEEEW.js} +6 -6
  92. package/dist/{chunk-Q2BD4IBX.js → chunk-SVKCYUYP.js} +11 -13
  93. package/dist/{chunk-R4FL5JHK.js → chunk-T6YLXO6N.js} +4 -4
  94. package/dist/{chunk-3LF7T3NW.js → chunk-TQNFDNJA.js} +6 -6
  95. package/dist/{chunk-SROWUG5W.js → chunk-UTAARXYQ.js} +1 -1
  96. package/dist/{chunk-DXMUJTYF.js → chunk-V3YBVOTZ.js} +2 -2
  97. package/dist/{chunk-RRHHWYPX.js → chunk-V4EOFOB2.js} +6 -6
  98. package/dist/{chunk-DM24VZOI.js → chunk-VURDLVAQ.js} +3 -3
  99. package/dist/{chunk-IZVEBBDH.js → chunk-XDDSURY3.js} +3 -3
  100. package/dist/{chunk-QSW3HAKI.js → chunk-XEXF2OFZ.js} +61 -2
  101. package/dist/{chunk-2Z7I7DHT.js → chunk-XFQAK35L.js} +1 -1
  102. package/dist/{chunk-TK4JU2F7.js → chunk-XGFFNERF.js} +1 -1
  103. package/dist/{chunk-2VADJ6JH.js → chunk-XIJTXRWB.js} +2 -2
  104. package/dist/{chunk-3KXBRSL3.js → chunk-XXIJBYNW.js} +1 -1
  105. package/dist/{chunk-ITYKN2K3.js → chunk-YB3HMDKE.js} +2 -2
  106. package/dist/{chunk-GTBWWCCM.js → chunk-YQDCTID4.js} +115 -9
  107. package/dist/{chunk-DTVHZDYM.js → chunk-ZAZUDYSF.js} +26 -12
  108. package/dist/{chunk-UMTMFDL2.js → chunk-ZJV7SFIJ.js} +1 -1
  109. package/dist/{codex-app-cards-switch-HK4RMOBI.js → codex-app-cards-switch-W7OLKOMO.js} +11 -11
  110. package/dist/{codex-desktop-launch-OCO6N7SA.js → codex-desktop-launch-U6V3AXZF.js} +1 -1
  111. package/dist/{codex-session-launch-ETZQTVFS.js → codex-session-launch-EFU46WBL.js} +18 -19
  112. package/dist/{config-YY54G3CC.js → config-UC4LMCNX.js} +3 -3
  113. package/dist/{global-upgrade-5DN5G3ZQ.js → global-upgrade-ABF5O3HU.js} +10 -10
  114. package/dist/{identity-EGL6HAWG.js → identity-3ZUZPHN6.js} +4 -4
  115. package/dist/{live-capabilities-WU3FYJJG.js → live-capabilities-BXWXJARK.js} +5 -5
  116. package/dist/{paths-ZG6KDM6Y.js → paths-FO76CFRQ.js} +3 -3
  117. package/dist/{reapply-AQLNCCTE.js → reapply-3T3DFUAI.js} +26 -27
  118. package/dist/src/index.js +30 -20
  119. package/dist/{upgrade-lock-BIRXIKHJ.js → upgrade-lock-EZ5JIPJE.js} +4 -4
  120. package/dist/{usage-43C2DHDU.js → usage-Y6BL7RUD.js} +3 -3
  121. package/package.json +1 -1
  122. package/dist/chunk-ANP3DIST.js +0 -118
  123. package/dist/chunk-TJUJAK5L.js +0 -62
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  readJsonSafe,
3
3
  writeJsonAtomic
4
- } from "./chunk-SCMEVDAR.js";
4
+ } from "./chunk-KS3O6O7E.js";
5
5
  import {
6
6
  configFilePath
7
- } from "./chunk-Y64JGYTB.js";
7
+ } from "./chunk-A47UKPC7.js";
8
8
  import {
9
9
  readSetupOutcomeProperties
10
- } from "./chunk-MNKIR2ZB.js";
10
+ } from "./chunk-EJR5JXMV.js";
11
11
 
12
12
  // src/diagnostics/service-runtime.ts
13
13
  var unescapeXml = (value) => value.replaceAll("&quot;", '"').replaceAll("&apos;", "'").replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&");
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-ATPJGHUP.js";
3
+ } from "./chunk-GDLT32I4.js";
4
4
  import {
5
5
  readJsonSafe
6
- } from "./chunk-SCMEVDAR.js";
6
+ } from "./chunk-KS3O6O7E.js";
7
7
  import {
8
8
  isRecord
9
- } from "./chunk-MNKIR2ZB.js";
9
+ } from "./chunk-EJR5JXMV.js";
10
10
 
11
11
  // src/process-ownership.ts
12
12
  import { createHash, randomUUID } from "crypto";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  addGeminiMcpServer,
3
3
  removeGeminiMcpServer
4
- } from "./chunk-ANP3DIST.js";
4
+ } from "./chunk-YQDCTID4.js";
5
5
  import {
6
6
  CLAUDE_CODE_AGENT,
7
7
  compatibleToolLookup
8
- } from "./chunk-3UNAPXED.js";
8
+ } from "./chunk-2BL6KWN7.js";
9
9
  import {
10
10
  CLAUDE_HOOK_EVENTS,
11
11
  PUSHARY_MCP_URL,
@@ -17,7 +17,7 @@ import {
17
17
  isPusharyHook,
18
18
  registerHookEntry,
19
19
  removeClaudeMcpServers
20
- } from "./chunk-ATPJGHUP.js";
20
+ } from "./chunk-GDLT32I4.js";
21
21
  import {
22
22
  HOOK_COMPATIBLE_PROFILES,
23
23
  PHONE_ANSWERED_TOOLS,
@@ -28,7 +28,7 @@ import {
28
28
  pusharyMissingReason,
29
29
  refusalOutput,
30
30
  withHookHoldBudget
31
- } from "./chunk-MNKIR2ZB.js";
31
+ } from "./chunk-EJR5JXMV.js";
32
32
 
33
33
  // src/config-document.ts
34
34
  import { parse, stringify } from "smol-toml";
@@ -312,6 +312,7 @@ export {
312
312
  profileFromArgv,
313
313
  activeIdentity,
314
314
  namedEvent,
315
+ namedSource,
315
316
  activeHookSource,
316
317
  normalizeToolCall,
317
318
  grokHome,
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  notificationAnswerStep
3
- } from "./chunk-ICFHMJTW.js";
3
+ } from "./chunk-MNNQEUQC.js";
4
4
  import {
5
5
  matchMacAccountStep,
6
6
  retryAgentCommand
7
- } from "./chunk-W5L2ZLHE.js";
7
+ } from "./chunk-5FJDODOA.js";
8
8
  import {
9
9
  EXIT
10
10
  } from "./chunk-KZERVKTD.js";
11
11
  import {
12
12
  NPX_LATEST_COMMAND
13
- } from "./chunk-BAGBCSXA.js";
13
+ } from "./chunk-GO7YKPT3.js";
14
14
 
15
15
  // src/setup/closing.ts
16
16
  var ACTIVITY_URL = "pushary.com/dashboard/agent/activity";
@@ -2,7 +2,7 @@ import {
2
2
  isApprovalMode,
3
3
  isRecord,
4
4
  isTimeoutAction
5
- } from "./chunk-MNKIR2ZB.js";
5
+ } from "./chunk-EJR5JXMV.js";
6
6
 
7
7
  // src/cli/settings-response.ts
8
8
  var isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CODEX_HOOK_STATUS
3
- } from "./chunk-HDGB6SQ4.js";
3
+ } from "./chunk-JL3SZJJP.js";
4
4
  import {
5
5
  NPX_LATEST_COMMAND
6
- } from "./chunk-BAGBCSXA.js";
6
+ } from "./chunk-GO7YKPT3.js";
7
7
 
8
8
  // src/setup/codex-trust.ts
9
9
  var CODEX_TRUST_TELEMETRY = {
@@ -4,23 +4,23 @@ import {
4
4
  } from "./chunk-XHKBHWLX.js";
5
5
  import {
6
6
  readControlMode
7
- } from "./chunk-ED2SWTPC.js";
7
+ } from "./chunk-CNJ7SI5V.js";
8
8
  import {
9
9
  getMachineId
10
- } from "./chunk-FWS2KLV2.js";
10
+ } from "./chunk-IA5VWIHV.js";
11
11
  import {
12
12
  pusharyDir
13
- } from "./chunk-ATPJGHUP.js";
13
+ } from "./chunk-GDLT32I4.js";
14
14
  import {
15
15
  readJsonSafe,
16
16
  resolveGlobalBinary,
17
17
  writeFileAtomic,
18
18
  writeJsonAtomic,
19
19
  writeJsonAtomicDurable
20
- } from "./chunk-SCMEVDAR.js";
20
+ } from "./chunk-KS3O6O7E.js";
21
21
  import {
22
22
  getApiKey
23
- } from "./chunk-Y64JGYTB.js";
23
+ } from "./chunk-A47UKPC7.js";
24
24
  import {
25
25
  CLI_PACKAGE_NAMES,
26
26
  cmdShimTarget,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-QTOLNRET.js";
31
31
  import {
32
32
  isRecord
33
- } from "./chunk-MNKIR2ZB.js";
33
+ } from "./chunk-EJR5JXMV.js";
34
34
 
35
35
  // src/daemon-lifecycle.ts
36
36
  import { dirname, join, win32 as win32Path } from "path";
@@ -3,13 +3,13 @@ import {
3
3
  NpmMissingError,
4
4
  NpmPermissionError,
5
5
  writeFileAtomic
6
- } from "./chunk-SCMEVDAR.js";
6
+ } from "./chunk-KS3O6O7E.js";
7
7
  import {
8
8
  NPX_LATEST_COMMAND
9
- } from "./chunk-BAGBCSXA.js";
9
+ } from "./chunk-GO7YKPT3.js";
10
10
  import {
11
11
  readSetupAgentFailures
12
- } from "./chunk-MNKIR2ZB.js";
12
+ } from "./chunk-EJR5JXMV.js";
13
13
 
14
14
  // src/setup/config-write.ts
15
15
  var AgentConfigWriteError = class extends Error {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  findNativeClaudeInstall
3
- } from "./chunk-RABLE5R6.js";
3
+ } from "./chunk-RJ6JEHCP.js";
4
4
  import {
5
5
  isFile
6
- } from "./chunk-SCMEVDAR.js";
6
+ } from "./chunk-KS3O6O7E.js";
7
7
 
8
8
  // src/wrapper/claudeBinary.ts
9
9
  import { homedir } from "os";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isSafeReadOnlyCommand
3
- } from "./chunk-MNKIR2ZB.js";
3
+ } from "./chunk-EJR5JXMV.js";
4
4
 
5
5
  // src/ledger.ts
6
6
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readConfigFileKey
3
- } from "./chunk-ED2SWTPC.js";
3
+ } from "./chunk-CNJ7SI5V.js";
4
4
 
5
5
  // src/bell/fleet.ts
6
6
  import { closeSync, constants, futimesSync, lstatSync, mkdirSync, openSync, readdirSync, unlinkSync } from "fs";
@@ -4,13 +4,13 @@ import {
4
4
  configFailureKind,
5
5
  retryAgentCommand,
6
6
  writeSetupConfigFile
7
- } from "./chunk-W5L2ZLHE.js";
7
+ } from "./chunk-5FJDODOA.js";
8
8
  import {
9
9
  MCP_BRIDGE_BINARY
10
- } from "./chunk-BEQ3MEE3.js";
10
+ } from "./chunk-HUGVJBDN.js";
11
11
  import {
12
12
  KEY_FILE_MODE
13
- } from "./chunk-ED2SWTPC.js";
13
+ } from "./chunk-CNJ7SI5V.js";
14
14
  import {
15
15
  CLINE_SERVER_NAME_TAKEN,
16
16
  CLINE_SETTINGS_REFUSALS,
@@ -30,12 +30,12 @@ import {
30
30
  withClinePusharyServer,
31
31
  withRefreshedClineKey,
32
32
  withoutClinePusharyServer
33
- } from "./chunk-ATPJGHUP.js";
33
+ } from "./chunk-GDLT32I4.js";
34
34
  import {
35
35
  readJsonSafe,
36
36
  writeFileAtomic,
37
37
  writeJsonAtomic
38
- } from "./chunk-SCMEVDAR.js";
38
+ } from "./chunk-KS3O6O7E.js";
39
39
 
40
40
  // src/fx-config.ts
41
41
  var FX_SERVER_NAME = "pushary";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  compatibleConfigFile
3
- } from "./chunk-WY6YAMZW.js";
3
+ } from "./chunk-3EZP5ZPS.js";
4
4
  import {
5
5
  hookOwnerOf,
6
6
  hookOwnerOfCommands,
7
7
  liveBridgeProbe,
8
8
  resolveBridgeStub
9
- } from "./chunk-GTBWWCCM.js";
9
+ } from "./chunk-YQDCTID4.js";
10
10
  import {
11
11
  AGENT_CHOICES
12
- } from "./chunk-SROWUG5W.js";
12
+ } from "./chunk-UTAARXYQ.js";
13
13
  import {
14
14
  claudeSettings,
15
15
  codexHooksJson,
@@ -18,10 +18,10 @@ import {
18
18
  guardedArgv,
19
19
  pusharyDir,
20
20
  vscodePluginDir
21
- } from "./chunk-ATPJGHUP.js";
21
+ } from "./chunk-GDLT32I4.js";
22
22
  import {
23
23
  readJsonSafe
24
- } from "./chunk-SCMEVDAR.js";
24
+ } from "./chunk-KS3O6O7E.js";
25
25
  import {
26
26
  HOOK_BUDGETS,
27
27
  HOOK_COMPATIBLE_PROFILES,
@@ -29,7 +29,7 @@ import {
29
29
  OPENCODE_APPROVAL_EVENT,
30
30
  hookCompatibleProfile,
31
31
  isRecord
32
- } from "./chunk-MNKIR2ZB.js";
32
+ } from "./chunk-EJR5JXMV.js";
33
33
 
34
34
  // src/opencode-plugin.ts
35
35
  var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  NPX_LATEST_COMMAND
3
- } from "./chunk-BAGBCSXA.js";
3
+ } from "./chunk-GO7YKPT3.js";
4
4
 
5
5
  // src/config.ts
6
6
  import { readFileSync } from "fs";
@@ -294,7 +294,7 @@ var loadedOnce = (load) => {
294
294
  };
295
295
 
296
296
  // src/codex-desktop-proxy.ts
297
- var loadThePhone = () => import("./api-32B3XLJR.js");
297
+ var loadThePhone = () => import("./api-GDSVUTI2.js");
298
298
  var theFirstCardLoadsAgain = () => {
299
299
  };
300
300
  var APP_SERVER_COMMAND = "app-server";
@@ -827,7 +827,7 @@ var codexDesktopCommand = async (args, entry, readAccount) => {
827
827
  return runCodexDesktopProxy(engine2, args.slice(3), readAccount, { watchesForCards: layoutIsKnown });
828
828
  }
829
829
  if (args[0] === APP_CARDS_FLAG) {
830
- const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-HK4RMOBI.js");
830
+ const { codexAppCardsCommandOnThisMac } = await import("./codex-app-cards-switch-W7OLKOMO.js");
831
831
  return codexAppCardsCommandOnThisMac(args.slice(1), entry, readAccount);
832
832
  }
833
833
  if (args.length > 2) throw new Error("Usage: pushary codex --desktop [path/to/Codex.app]");