@pushary/agent-hooks 0.62.0 → 0.62.2

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 (45) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/bin/pushary-claude.js +5 -2
  3. package/dist/bin/pushary-clean.js +24 -6
  4. package/dist/bin/pushary-codex-hook.js +5 -2
  5. package/dist/bin/pushary-codex.js +5 -2
  6. package/dist/bin/pushary-connect.js +16 -13
  7. package/dist/bin/pushary-daemon.js +5 -4
  8. package/dist/bin/pushary-doctor.js +20 -14
  9. package/dist/bin/pushary-gemini-hook.js +5 -2
  10. package/dist/bin/pushary-hook.js +8 -5
  11. package/dist/bin/pushary-login.js +15 -11
  12. package/dist/bin/pushary-logout.js +11 -9
  13. package/dist/bin/pushary-mode.js +29 -6
  14. package/dist/bin/pushary-notification-hook.js +5 -2
  15. package/dist/bin/pushary-permission-denied-hook.js +6 -3
  16. package/dist/bin/pushary-permission-hook.js +6 -3
  17. package/dist/bin/pushary-post-hook.js +5 -2
  18. package/dist/bin/pushary-prompt-hook.js +5 -2
  19. package/dist/bin/pushary-session-end-hook.js +5 -2
  20. package/dist/bin/pushary-session-start-hook.js +5 -2
  21. package/dist/bin/pushary-setup.js +21 -16
  22. package/dist/bin/pushary-stats.js +3 -2
  23. package/dist/bin/pushary-status.js +22 -8
  24. package/dist/bin/pushary-stop-hook.js +5 -2
  25. package/dist/bin/pushary-stopfailure-hook.js +5 -2
  26. package/dist/bin/pushary-suggestions.js +27 -2
  27. package/dist/bin/pushary-upgrade.js +16 -9
  28. package/dist/bin/pushary-wait.js +29 -6
  29. package/dist/bin/pushary.js +9 -2
  30. package/dist/{chunk-HIIBSYFJ.js → chunk-5ZDYDU2Q.js} +5 -1
  31. package/dist/chunk-6MTNS63X.js +55 -0
  32. package/dist/{chunk-SP7OZXCQ.js → chunk-7OXIC7E3.js} +1 -15
  33. package/dist/{chunk-HNTKTK5B.js → chunk-BSZYIAZL.js} +4 -0
  34. package/dist/{chunk-247C4RE5.js → chunk-COC6NPWG.js} +12 -59
  35. package/dist/{chunk-YJ7YZRVV.js → chunk-G4TARJAY.js} +8 -54
  36. package/dist/{chunk-N4DA4CJB.js → chunk-GMXKITVA.js} +13 -0
  37. package/dist/chunk-KZERVKTD.js +16 -0
  38. package/dist/{chunk-3O27ZSRE.js → chunk-NGZMVCXN.js} +1 -1
  39. package/dist/chunk-SAF6HGAA.js +57 -0
  40. package/dist/{chunk-5SO3CEGJ.js → chunk-SDXF5I46.js} +1 -1
  41. package/dist/{chunk-ONVEYEVR.js → chunk-SR52774M.js} +2 -2
  42. package/dist/{chunk-IIZZYUWK.js → chunk-WXFEK7KD.js} +4 -2
  43. package/dist/{chunk-QHOVJXOT.js → chunk-Z3Z4VK5F.js} +2 -1
  44. package/dist/src/index.js +6 -3
  45. package/package.json +1 -1
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleUserPrompt
4
- } from "../chunk-HIIBSYFJ.js";
5
- import "../chunk-HNTKTK5B.js";
4
+ } from "../chunk-5ZDYDU2Q.js";
5
+ import "../chunk-BSZYIAZL.js";
6
+ import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-7QLSKOSU.js";
6
8
  import "../chunk-DQAN3JQP.js";
7
9
  import "../chunk-RN3NOEJF.js";
8
10
  import "../chunk-2UMNXADU.js";
11
+ import "../chunk-KZERVKTD.js";
9
12
 
10
13
  // bin/pushary-prompt-hook.ts
11
14
  var main = async () => {
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleSessionEnd
4
- } from "../chunk-HIIBSYFJ.js";
5
- import "../chunk-HNTKTK5B.js";
4
+ } from "../chunk-5ZDYDU2Q.js";
5
+ import "../chunk-BSZYIAZL.js";
6
+ import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-7QLSKOSU.js";
6
8
  import "../chunk-DQAN3JQP.js";
7
9
  import "../chunk-RN3NOEJF.js";
8
10
  import "../chunk-2UMNXADU.js";
11
+ import "../chunk-KZERVKTD.js";
9
12
 
10
13
  // bin/pushary-session-end-hook.ts
11
14
  var main = async () => {
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleSessionStart
4
- } from "../chunk-HIIBSYFJ.js";
5
- import "../chunk-HNTKTK5B.js";
4
+ } from "../chunk-5ZDYDU2Q.js";
5
+ import "../chunk-BSZYIAZL.js";
6
+ import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-7QLSKOSU.js";
6
8
  import "../chunk-DQAN3JQP.js";
7
9
  import "../chunk-RN3NOEJF.js";
8
10
  import "../chunk-2UMNXADU.js";
11
+ import "../chunk-KZERVKTD.js";
9
12
 
10
13
  // bin/pushary-session-start-hook.ts
11
14
  var main = async () => {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runBrowserLogin
4
- } from "../chunk-QHOVJXOT.js";
4
+ } from "../chunk-Z3Z4VK5F.js";
5
5
  import {
6
6
  addClaudeMcpServer,
7
7
  addPusharyHooks,
@@ -35,27 +35,26 @@ import {
35
35
  connectViaAppPairing,
36
36
  printConnectInstructions,
37
37
  setHumanStream
38
- } from "../chunk-3O27ZSRE.js";
38
+ } from "../chunk-NGZMVCXN.js";
39
39
  import "../chunk-3EGEA4KH.js";
40
- import {
41
- parseFlags
42
- } from "../chunk-N4DA4CJB.js";
43
40
  import {
44
41
  KEY_FILE_MODE,
45
- backupFile,
46
42
  exportLine,
43
+ writeKey
44
+ } from "../chunk-COC6NPWG.js";
45
+ import {
46
+ backupFile,
47
47
  readJsonSafe,
48
48
  writeFileAtomic,
49
- writeJsonAtomic,
50
- writeKey
51
- } from "../chunk-247C4RE5.js";
49
+ writeJsonAtomic
50
+ } from "../chunk-6MTNS63X.js";
52
51
  import {
53
52
  checkApiKey,
54
53
  describeKeyCheck
55
- } from "../chunk-YJ7YZRVV.js";
54
+ } from "../chunk-G4TARJAY.js";
56
55
  import {
57
- UsageError
58
- } from "../chunk-7QLSKOSU.js";
56
+ parseFlags
57
+ } from "../chunk-GMXKITVA.js";
59
58
  import {
60
59
  installClaudeAlias,
61
60
  resolveShellRc
@@ -68,19 +67,25 @@ import {
68
67
  resolveGlobalBinary
69
68
  } from "../chunk-MUEW424A.js";
70
69
  import {
71
- EXIT,
72
70
  getPackageVersion,
73
71
  renderCommandHelp
74
- } from "../chunk-SP7OZXCQ.js";
72
+ } from "../chunk-7OXIC7E3.js";
75
73
  import {
76
74
  reportEvent
77
- } from "../chunk-HIIBSYFJ.js";
78
- import "../chunk-HNTKTK5B.js";
75
+ } from "../chunk-5ZDYDU2Q.js";
76
+ import "../chunk-BSZYIAZL.js";
77
+ import "../chunk-SAF6HGAA.js";
78
+ import {
79
+ UsageError
80
+ } from "../chunk-7QLSKOSU.js";
79
81
  import {
80
82
  isValidApiKey
81
83
  } from "../chunk-DQAN3JQP.js";
82
84
  import "../chunk-RN3NOEJF.js";
83
85
  import "../chunk-2UMNXADU.js";
86
+ import {
87
+ EXIT
88
+ } from "../chunk-KZERVKTD.js";
84
89
 
85
90
  // bin/pushary-setup.ts
86
91
  import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync, rmSync, renameSync } from "fs";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exitOnHelpFlag
4
- } from "../chunk-IIZZYUWK.js";
5
- import "../chunk-SP7OZXCQ.js";
4
+ } from "../chunk-WXFEK7KD.js";
5
+ import "../chunk-7OXIC7E3.js";
6
6
  import {
7
7
  readLedgerSummary
8
8
  } from "../chunk-WLGEY4UX.js";
@@ -10,6 +10,7 @@ import "../chunk-DQAN3JQP.js";
10
10
  import {
11
11
  getApiKey
12
12
  } from "../chunk-2UMNXADU.js";
13
+ import "../chunk-KZERVKTD.js";
13
14
 
14
15
  // bin/pushary-stats.ts
15
16
  exitOnHelpFlag("stats");
@@ -3,29 +3,37 @@ import {
3
3
  describeReach,
4
4
  fetchChannels,
5
5
  reachVerdict
6
- } from "../chunk-3O27ZSRE.js";
6
+ } from "../chunk-NGZMVCXN.js";
7
7
  import "../chunk-3EGEA4KH.js";
8
8
  import {
9
9
  readKeySource
10
- } from "../chunk-247C4RE5.js";
10
+ } from "../chunk-COC6NPWG.js";
11
+ import "../chunk-6MTNS63X.js";
11
12
  import {
12
13
  checkApiKey,
13
14
  describeKeyCheck
14
- } from "../chunk-YJ7YZRVV.js";
15
+ } from "../chunk-G4TARJAY.js";
15
16
  import {
16
17
  createIo
17
18
  } from "../chunk-TX7KBKT7.js";
18
- import "../chunk-7QLSKOSU.js";
19
+ import {
20
+ rejectUnknownFlags
21
+ } from "../chunk-GMXKITVA.js";
19
22
  import "../chunk-BC3VCZ3E.js";
20
23
  import {
21
24
  exitOnHelpFlag
22
- } from "../chunk-IIZZYUWK.js";
25
+ } from "../chunk-WXFEK7KD.js";
26
+ import "../chunk-7OXIC7E3.js";
27
+ import "../chunk-BSZYIAZL.js";
28
+ import "../chunk-SAF6HGAA.js";
23
29
  import {
24
- EXIT
25
- } from "../chunk-SP7OZXCQ.js";
26
- import "../chunk-HNTKTK5B.js";
30
+ UsageError
31
+ } from "../chunk-7QLSKOSU.js";
27
32
  import "../chunk-DQAN3JQP.js";
28
33
  import "../chunk-2UMNXADU.js";
34
+ import {
35
+ EXIT
36
+ } from "../chunk-KZERVKTD.js";
29
37
 
30
38
  // src/status.ts
31
39
  var keySourceLine = (source) => {
@@ -170,6 +178,7 @@ var statusJson = (facts, report) => ({
170
178
  exitOnHelpFlag("status");
171
179
  var { bold, dim, green, red, yellow } = createIo();
172
180
  var args = process.argv.slice(2);
181
+ rejectUnknownFlags(args.filter((a) => a !== "status"), ["--json"]);
173
182
  var json = args.includes("--json");
174
183
  var main = async () => {
175
184
  const source = readKeySource();
@@ -201,6 +210,11 @@ var main = async () => {
201
210
  process.exit(report.exitCode);
202
211
  };
203
212
  main().catch((err) => {
213
+ if (err instanceof UsageError) {
214
+ process.stderr.write(` ! ${err.message}
215
+ `);
216
+ process.exit(EXIT.USAGE);
217
+ }
204
218
  console.error(` ${yellow("!")} status failed: ${err instanceof Error ? err.message : String(err)}`);
205
219
  process.exit(1);
206
220
  });
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleStop
4
- } from "../chunk-HIIBSYFJ.js";
5
- import "../chunk-HNTKTK5B.js";
4
+ } from "../chunk-5ZDYDU2Q.js";
5
+ import "../chunk-BSZYIAZL.js";
6
+ import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-7QLSKOSU.js";
6
8
  import "../chunk-DQAN3JQP.js";
7
9
  import "../chunk-RN3NOEJF.js";
8
10
  import "../chunk-2UMNXADU.js";
11
+ import "../chunk-KZERVKTD.js";
9
12
 
10
13
  // bin/pushary-stop-hook.ts
11
14
  var main = async () => {
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handleStopFailure
4
- } from "../chunk-HIIBSYFJ.js";
5
- import "../chunk-HNTKTK5B.js";
4
+ } from "../chunk-5ZDYDU2Q.js";
5
+ import "../chunk-BSZYIAZL.js";
6
+ import "../chunk-SAF6HGAA.js";
7
+ import "../chunk-7QLSKOSU.js";
6
8
  import "../chunk-DQAN3JQP.js";
7
9
  import "../chunk-RN3NOEJF.js";
8
10
  import "../chunk-2UMNXADU.js";
11
+ import "../chunk-KZERVKTD.js";
9
12
 
10
13
  // bin/pushary-stopfailure-hook.ts
11
14
  var main = async () => {
@@ -2,14 +2,23 @@
2
2
  import {
3
3
  createIo
4
4
  } from "../chunk-TX7KBKT7.js";
5
+ import {
6
+ rejectUnknownFlags
7
+ } from "../chunk-GMXKITVA.js";
5
8
  import {
6
9
  exitOnHelpFlag
7
- } from "../chunk-IIZZYUWK.js";
8
- import "../chunk-SP7OZXCQ.js";
10
+ } from "../chunk-WXFEK7KD.js";
11
+ import "../chunk-7OXIC7E3.js";
12
+ import {
13
+ UsageError
14
+ } from "../chunk-7QLSKOSU.js";
9
15
  import {
10
16
  getApiKey,
11
17
  getBaseUrl
12
18
  } from "../chunk-2UMNXADU.js";
19
+ import {
20
+ EXIT
21
+ } from "../chunk-KZERVKTD.js";
13
22
 
14
23
  // bin/pushary-suggestions.ts
15
24
  exitOnHelpFlag("suggestions");
@@ -22,6 +31,17 @@ var errorMessage = async (res) => {
22
31
  return `HTTP ${res.status}`;
23
32
  }
24
33
  };
34
+ {
35
+ const raw = process.argv.slice(2);
36
+ const positional = raw[0] === "suggestions" ? raw.slice(1) : raw;
37
+ try {
38
+ rejectUnknownFlags(positional, []);
39
+ } catch (err) {
40
+ process.stderr.write(` ! ${err instanceof Error ? err.message : String(err)}
41
+ `);
42
+ process.exit(EXIT.USAGE);
43
+ }
44
+ }
25
45
  var main = async () => {
26
46
  const apiKey = getApiKey();
27
47
  const baseUrl = getBaseUrl();
@@ -69,6 +89,11 @@ var main = async () => {
69
89
  }
70
90
  };
71
91
  main().catch((err) => {
92
+ if (err instanceof UsageError) {
93
+ process.stderr.write(` ! ${err.message}
94
+ `);
95
+ process.exit(EXIT.USAGE);
96
+ }
72
97
  console.error(err instanceof Error ? err.message : String(err));
73
98
  process.exit(1);
74
99
  });
@@ -19,6 +19,9 @@ import {
19
19
  codexHooksJson,
20
20
  hasCodexHooks
21
21
  } from "../chunk-ER657KRJ.js";
22
+ import {
23
+ readJsonSafe
24
+ } from "../chunk-6MTNS63X.js";
22
25
  import {
23
26
  execNpm,
24
27
  npmErrorMessage,
@@ -28,12 +31,13 @@ import {
28
31
  } from "../chunk-MUEW424A.js";
29
32
  import {
30
33
  exitOnHelpFlag
31
- } from "../chunk-IIZZYUWK.js";
32
- import "../chunk-SP7OZXCQ.js";
34
+ } from "../chunk-WXFEK7KD.js";
35
+ import "../chunk-7OXIC7E3.js";
33
36
  import "../chunk-DQAN3JQP.js";
34
37
  import {
35
38
  getApiKey
36
39
  } from "../chunk-2UMNXADU.js";
40
+ import "../chunk-KZERVKTD.js";
37
41
 
38
42
  // bin/pushary-upgrade.ts
39
43
  import { existsSync as existsSync2 } from "fs";
@@ -48,11 +52,10 @@ import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
48
52
  var CLAUDE_SETTINGS = join(homedir(), ".claude", "settings.json");
49
53
  var CLAUDE_JSON = join(homedir(), ".claude.json");
50
54
  var readJson = (filePath) => {
51
- try {
52
- return JSON.parse(readFileSync(filePath, "utf-8"));
53
- } catch {
54
- return null;
55
- }
55
+ const result = readJsonSafe(filePath);
56
+ if (result.kind === "ok") return result.value;
57
+ if (result.kind === "missing") return {};
58
+ return null;
56
59
  };
57
60
  var writeJson = (filePath, data) => {
58
61
  const dir = dirname(filePath);
@@ -68,10 +71,13 @@ var reapplyClaudeSettings = (apiKey, paths = {}) => {
68
71
  const claudeJson = readJson(claudeJsonPath);
69
72
  const configured = settings != null && hasPusharyClaudeHooks(settings) || claudeJson != null && hasPusharyMcp(claudeJson);
70
73
  if (!configured) return { reapplied: false, hooks: false, mcp: false };
74
+ const settingsWritable = settings != null;
75
+ const claudeJsonWritable = claudeJson != null;
71
76
  let hooks = false;
72
77
  let mcp = false;
73
78
  try {
74
- const s = settings ?? {};
79
+ if (!settingsWritable) throw new Error("settings.json could not be parsed");
80
+ const s = settings;
75
81
  addPusharyToolPermissions(s);
76
82
  addPusharyHooks(s, resolveGlobalBinDir("pushary-hook"));
77
83
  writeJson(settingsPath, s);
@@ -80,7 +86,8 @@ var reapplyClaudeSettings = (apiKey, paths = {}) => {
80
86
  }
81
87
  if (apiKey) {
82
88
  try {
83
- const cj = claudeJson ?? {};
89
+ if (!claudeJsonWritable) throw new Error(".claude.json could not be parsed");
90
+ const cj = claudeJson;
84
91
  addClaudeMcpServer(cj, apiKey);
85
92
  writeJson(claudeJsonPath, cj);
86
93
  mcp = true;
@@ -1,26 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exitOnFailedResponse
4
- } from "../chunk-ONVEYEVR.js";
4
+ } from "../chunk-SR52774M.js";
5
5
  import {
6
6
  describeWaitLadder
7
7
  } from "../chunk-IIENZE2J.js";
8
- import "../chunk-YJ7YZRVV.js";
8
+ import "../chunk-G4TARJAY.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-TX7KBKT7.js";
12
- import "../chunk-7QLSKOSU.js";
12
+ import {
13
+ rejectUnknownFlags
14
+ } from "../chunk-GMXKITVA.js";
13
15
  import {
14
16
  exitOnHelpFlag
15
- } from "../chunk-IIZZYUWK.js";
17
+ } from "../chunk-WXFEK7KD.js";
18
+ import "../chunk-7OXIC7E3.js";
19
+ import "../chunk-SAF6HGAA.js";
16
20
  import {
17
- EXIT
18
- } from "../chunk-SP7OZXCQ.js";
21
+ UsageError
22
+ } from "../chunk-7QLSKOSU.js";
19
23
  import "../chunk-DQAN3JQP.js";
20
24
  import {
21
25
  getApiKey,
22
26
  getBaseUrl
23
27
  } from "../chunk-2UMNXADU.js";
28
+ import {
29
+ EXIT
30
+ } from "../chunk-KZERVKTD.js";
24
31
 
25
32
  // bin/pushary-wait.ts
26
33
  exitOnHelpFlag("wait");
@@ -61,6 +68,17 @@ var setWindow = async (baseUrl, headers, seconds) => {
61
68
  const data = await res.json();
62
69
  return data.defaultPushFirstSeconds;
63
70
  };
71
+ {
72
+ const raw = process.argv.slice(2);
73
+ const positional = raw[0] === "wait" ? raw.slice(1) : raw;
74
+ try {
75
+ rejectUnknownFlags(positional, []);
76
+ } catch (err) {
77
+ process.stderr.write(` ! ${err instanceof Error ? err.message : String(err)}
78
+ `);
79
+ process.exit(EXIT.USAGE);
80
+ }
81
+ }
64
82
  var main = async () => {
65
83
  const apiKey = getApiKey();
66
84
  const baseUrl = getBaseUrl();
@@ -90,6 +108,11 @@ var main = async () => {
90
108
  console.log(` ${green("\u2713")} Default push window set to ${cyan(`${value}s`)} ${dim("\u2014 ping your phone that long, then the terminal takes over")}`);
91
109
  };
92
110
  main().catch((err) => {
111
+ if (err instanceof UsageError) {
112
+ process.stderr.write(` ! ${err.message}
113
+ `);
114
+ process.exit(EXIT.USAGE);
115
+ }
93
116
  console.error(` ${yellow("!")} ${err instanceof Error ? err.message : err}`);
94
117
  process.exit(1);
95
118
  });
@@ -1,11 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  COMMANDS,
4
- EXIT,
5
4
  getPackageVersion,
6
5
  isCommandName,
7
6
  renderHelp
8
- } from "../chunk-SP7OZXCQ.js";
7
+ } from "../chunk-7OXIC7E3.js";
8
+ import {
9
+ installProxyDispatcher
10
+ } from "../chunk-SAF6HGAA.js";
11
+ import "../chunk-7QLSKOSU.js";
12
+ import {
13
+ EXIT
14
+ } from "../chunk-KZERVKTD.js";
9
15
 
10
16
  // bin/pushary.ts
11
17
  var LOADERS = {
@@ -25,6 +31,7 @@ var LOADERS = {
25
31
  upgrade: () => import("./pushary-upgrade.js"),
26
32
  hook: () => import("./pushary-hook.js")
27
33
  };
34
+ installProxyDispatcher();
28
35
  var argv = process.argv.slice(2);
29
36
  var command = argv[0] ?? "";
30
37
  var wants = (...names) => argv.some((arg) => names.includes(arg));
@@ -1,7 +1,10 @@
1
1
  import {
2
2
  callMcpTool,
3
3
  withRetry
4
- } from "./chunk-HNTKTK5B.js";
4
+ } from "./chunk-BSZYIAZL.js";
5
+ import {
6
+ installProxyDispatcher
7
+ } from "./chunk-SAF6HGAA.js";
5
8
  import {
6
9
  ACTION_BODY_MAX,
7
10
  DECISION_LINE_MAX,
@@ -204,6 +207,7 @@ var fetchModeState = async (apiKey, sessionId) => {
204
207
  var fetchModeOverride = async (apiKey) => (await fetchModeState(apiKey)).mode;
205
208
 
206
209
  // src/api.ts
210
+ installProxyDispatcher();
207
211
  var askUser = async (apiKey, params, timeoutMs = 15e3) => {
208
212
  const result = await callMcpTool(apiKey, "ask_user", { ...params, wait: false }, { maxRetries: 3, timeoutMs });
209
213
  if (!isAskUserResponse(result)) throw new Error("Invalid ask_user response");
@@ -0,0 +1,55 @@
1
+ // src/cli/fsx.ts
2
+ import { copyFileSync, existsSync, fsyncSync, mkdirSync, openSync, closeSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "fs";
3
+ import { dirname, join } from "path";
4
+ var readJsonSafe = (filePath) => {
5
+ let raw;
6
+ try {
7
+ raw = readFileSync(filePath, "utf-8");
8
+ } catch (err) {
9
+ const error = err;
10
+ if (error.code === "ENOENT") return { kind: "missing" };
11
+ return { kind: "unreadable", error };
12
+ }
13
+ if (raw.trim() === "") return { kind: "ok", value: {} };
14
+ try {
15
+ return { kind: "ok", value: JSON.parse(raw) };
16
+ } catch (err) {
17
+ return { kind: "unparseable", error: err, raw };
18
+ }
19
+ };
20
+ var stamp = () => (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
21
+ var backupFile = (filePath) => {
22
+ const target = `${filePath}.pushary-backup-${stamp()}`;
23
+ copyFileSync(filePath, target);
24
+ return target;
25
+ };
26
+ var writeFileAtomic = (filePath, contents, mode) => {
27
+ const dir = dirname(filePath);
28
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
29
+ const temp = join(dir, `.${process.pid}-${stamp()}.pushary-tmp`);
30
+ try {
31
+ writeFileSync(temp, contents, mode === void 0 ? "utf-8" : { encoding: "utf-8", mode });
32
+ const handle = openSync(temp, "r+");
33
+ try {
34
+ fsyncSync(handle);
35
+ } finally {
36
+ closeSync(handle);
37
+ }
38
+ renameSync(temp, filePath);
39
+ } catch (err) {
40
+ try {
41
+ if (existsSync(temp)) unlinkSync(temp);
42
+ } catch {
43
+ }
44
+ throw err;
45
+ }
46
+ };
47
+ var writeJsonAtomic = (filePath, data, mode) => writeFileAtomic(filePath, `${JSON.stringify(data, null, 2)}
48
+ `, mode);
49
+
50
+ export {
51
+ readJsonSafe,
52
+ backupFile,
53
+ writeFileAtomic,
54
+ writeJsonAtomic
55
+ };
@@ -201,24 +201,10 @@ var getPackageVersion = () => {
201
201
  }
202
202
  };
203
203
 
204
- // src/exit.ts
205
- var EXIT = {
206
- OK: 0,
207
- FAILED: 1,
208
- USAGE: 2,
209
- NOT_CONFIGURED: 3,
210
- UNAUTHENTICATED: 4,
211
- PROBLEMS_FOUND: 5,
212
- NO_DEVICE: 6,
213
- INPUT_REQUIRED: 7,
214
- UNREACHABLE: 8
215
- };
216
-
217
204
  export {
218
205
  COMMANDS,
219
206
  isCommandName,
220
207
  renderHelp,
221
208
  renderCommandHelp,
222
- getPackageVersion,
223
- EXIT
209
+ getPackageVersion
224
210
  };
@@ -1,3 +1,6 @@
1
+ import {
2
+ installProxyDispatcher
3
+ } from "./chunk-SAF6HGAA.js";
1
4
  import {
2
5
  getBaseUrl
3
6
  } from "./chunk-2UMNXADU.js";
@@ -31,6 +34,7 @@ var withRetry = async (fn, options = {}) => {
31
34
  };
32
35
 
33
36
  // src/mcp-http.ts
37
+ installProxyDispatcher();
34
38
  var parseSseJson = (body) => {
35
39
  const messages = [];
36
40
  for (const event of body.split(/\r?\n\r?\n/)) {