@pushary/agent-hooks 0.89.8 → 0.89.10

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 (67) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/bin/pushary-bell-hook.js +4 -4
  3. package/dist/bin/pushary-bell.js +7 -7
  4. package/dist/bin/pushary-claude.js +64 -33
  5. package/dist/bin/pushary-clean.js +53 -46
  6. package/dist/bin/pushary-codex-bridge.js +8 -8
  7. package/dist/bin/pushary-codex-hook.js +12 -8
  8. package/dist/bin/pushary-codex.js +7 -7
  9. package/dist/bin/pushary-connect.js +6 -6
  10. package/dist/bin/pushary-daemon.js +57 -22
  11. package/dist/bin/pushary-disconnect.js +34 -9
  12. package/dist/bin/pushary-doctor.js +43 -22
  13. package/dist/bin/pushary-elicitation-hook.js +4 -4
  14. package/dist/bin/pushary-gemini-bridge.js +7 -7
  15. package/dist/bin/pushary-gemini-hook.js +8 -8
  16. package/dist/bin/pushary-hook.js +11 -10
  17. package/dist/bin/pushary-login.js +4 -4
  18. package/dist/bin/pushary-logout.js +4 -4
  19. package/dist/bin/pushary-mode.js +3 -3
  20. package/dist/bin/pushary-notification-hook.js +7 -7
  21. package/dist/bin/pushary-opencode-hook.js +8 -8
  22. package/dist/bin/pushary-permission-denied-hook.js +11 -10
  23. package/dist/bin/pushary-permission-hook.js +11 -10
  24. package/dist/bin/pushary-post-hook.js +7 -7
  25. package/dist/bin/pushary-prompt-hook.js +7 -7
  26. package/dist/bin/pushary-session-end-hook.js +7 -7
  27. package/dist/bin/pushary-session-start-hook.js +7 -7
  28. package/dist/bin/pushary-setup.js +66 -55
  29. package/dist/bin/pushary-stats.js +2 -2
  30. package/dist/bin/pushary-status.js +8 -8
  31. package/dist/bin/pushary-stop-hook.js +7 -7
  32. package/dist/bin/pushary-stopfailure-hook.js +7 -7
  33. package/dist/bin/pushary-upgrade.js +25 -17
  34. package/dist/bin/pushary-wait.js +3 -3
  35. package/dist/{chunk-SS72Z7FV.js → chunk-253WC6O5.js} +1 -1
  36. package/dist/{chunk-T3LRWZKI.js → chunk-2LPEZYMC.js} +1 -1
  37. package/dist/{chunk-O5B7EK5U.js → chunk-34GN3IPX.js} +1 -1
  38. package/dist/{chunk-V6N4Q223.js → chunk-3CUDMTL4.js} +1 -1
  39. package/dist/{chunk-VZKXBFUA.js → chunk-3HFK3UXM.js} +1 -1
  40. package/dist/{chunk-R2AGKCXL.js → chunk-3SQYKLBW.js} +52 -22
  41. package/dist/{chunk-ATBKJNWS.js → chunk-6EKQZA6R.js} +5 -1
  42. package/dist/{chunk-NKHEHEUM.js → chunk-6XUABEX2.js} +1 -1
  43. package/dist/{chunk-I5L6SK5V.js → chunk-BLODMQKJ.js} +1 -1
  44. package/dist/{chunk-DKDDLF5P.js → chunk-DKWM5T3P.js} +1 -1
  45. package/dist/{chunk-BAE45YLP.js → chunk-FZ73G2RO.js} +3 -3
  46. package/dist/{chunk-EJT2ER6G.js → chunk-GSSFSVAQ.js} +15 -21
  47. package/dist/{chunk-4XZCDSNG.js → chunk-GTZLL7F4.js} +5 -5
  48. package/dist/{chunk-PMHTCDEO.js → chunk-IUN6VOKV.js} +1 -1
  49. package/dist/{chunk-OFRNZWC4.js → chunk-IUWRVTQK.js} +1 -1
  50. package/dist/{chunk-J2JZJZKB.js → chunk-KVE5RCQL.js} +1 -1
  51. package/dist/{chunk-A4O5ROZK.js → chunk-MZGWKIUZ.js} +2 -2
  52. package/dist/chunk-NCVIWGVA.js +18 -0
  53. package/dist/{chunk-C623LWJR.js → chunk-OLAGKKSR.js} +1 -1
  54. package/dist/{chunk-EA3E74P2.js → chunk-PZRWFWSR.js} +6 -6
  55. package/dist/{chunk-VA7VUNRD.js → chunk-Q223OM5J.js} +58 -8
  56. package/dist/{chunk-GMI5QZLG.js → chunk-QA72MKIT.js} +5 -1
  57. package/dist/{chunk-AIGDBRIJ.js → chunk-SYUIXXQW.js} +1 -1
  58. package/dist/{chunk-TF247BET.js → chunk-TEZ2FZD6.js} +1 -1
  59. package/dist/{chunk-KOPUTJQC.js → chunk-TG3T3M4K.js} +1 -1
  60. package/dist/{chunk-FX5QSMPY.js → chunk-TRVIRETT.js} +1 -1
  61. package/dist/{chunk-ZL7HEF2T.js → chunk-TY5HVMXT.js} +32 -1
  62. package/dist/chunk-UDBJHQMG.js +240 -0
  63. package/dist/{chunk-GKAKAOKC.js → chunk-UXHMWF4H.js} +64 -11
  64. package/dist/{chunk-PZA7G4CN.js → chunk-X4ZUUFKV.js} +1 -0
  65. package/dist/{chunk-L4C2JXJS.js → chunk-X6RXX2NF.js} +5 -0
  66. package/dist/src/index.js +11 -10
  67. package/package.json +1 -1
@@ -4,14 +4,14 @@ import {
4
4
  codexConfigToml,
5
5
  cursorUserMcp,
6
6
  geminiSettings
7
- } from "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-QA72MKIT.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-V6N4Q223.js";
14
+ } from "../chunk-3CUDMTL4.js";
15
15
  import {
16
16
  parseFlags
17
17
  } from "../chunk-GMXKITVA.js";
@@ -21,7 +21,7 @@ import {
21
21
  import "../chunk-3XTFX4CL.js";
22
22
  import "../chunk-BC3VCZ3E.js";
23
23
  import "../chunk-DINDL2CF.js";
24
- import "../chunk-OFRNZWC4.js";
24
+ import "../chunk-IUWRVTQK.js";
25
25
  import {
26
26
  UsageError
27
27
  } from "../chunk-7QLSKOSU.js";
@@ -32,7 +32,7 @@ import "../chunk-XX2V4QS5.js";
32
32
  import {
33
33
  getBaseUrl
34
34
  } from "../chunk-2UMNXADU.js";
35
- import "../chunk-L4C2JXJS.js";
35
+ import "../chunk-X6RXX2NF.js";
36
36
 
37
37
  // bin/pushary-logout.ts
38
38
  import { existsSync } from "fs";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exitOnFailedResponse
4
- } from "../chunk-SS72Z7FV.js";
5
- import "../chunk-I5L6SK5V.js";
4
+ } from "../chunk-253WC6O5.js";
5
+ import "../chunk-BLODMQKJ.js";
6
6
  import {
7
7
  createIo
8
8
  } from "../chunk-5RUIFDTP.js";
@@ -25,7 +25,7 @@ import {
25
25
  getApiKey,
26
26
  getBaseUrl
27
27
  } from "../chunk-2UMNXADU.js";
28
- import "../chunk-L4C2JXJS.js";
28
+ import "../chunk-X6RXX2NF.js";
29
29
 
30
30
  // bin/pushary-mode.ts
31
31
  exitOnHelpFlag("mode");
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleNotification
7
- } from "../chunk-4XZCDSNG.js";
8
- import "../chunk-GKAKAOKC.js";
9
- import "../chunk-KOPUTJQC.js";
10
- import "../chunk-DKDDLF5P.js";
11
- import "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-GTZLL7F4.js";
8
+ import "../chunk-UXHMWF4H.js";
9
+ import "../chunk-TG3T3M4K.js";
10
+ import "../chunk-DKWM5T3P.js";
11
+ import "../chunk-QA72MKIT.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-OFRNZWC4.js";
14
+ import "../chunk-IUWRVTQK.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
17
  import "../chunk-XX2V4QS5.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-L4C2JXJS.js";
19
+ import "../chunk-X6RXX2NF.js";
20
20
 
21
21
  // bin/pushary-notification-hook.ts
22
22
  var main = async () => {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  isGatingMoment,
4
4
  recordKeylessMoment
5
- } from "../chunk-VZKXBFUA.js";
5
+ } from "../chunk-3HFK3UXM.js";
6
6
  import {
7
7
  readHookInput
8
8
  } from "../chunk-6CUUA7HO.js";
@@ -19,7 +19,7 @@ import {
19
19
  policyRequestFor,
20
20
  readLastPrompt,
21
21
  repoKeyFor
22
- } from "../chunk-4XZCDSNG.js";
22
+ } from "../chunk-GTZLL7F4.js";
23
23
  import {
24
24
  DEFAULT_SESSION,
25
25
  askUser,
@@ -27,7 +27,7 @@ import {
27
27
  savePendingQuestion,
28
28
  sendNotification,
29
29
  waitForAnswer
30
- } from "../chunk-GKAKAOKC.js";
30
+ } from "../chunk-UXHMWF4H.js";
31
31
  import {
32
32
  HOOK_FALLBACK_MAX,
33
33
  OPENCODE_TOOL_NAMES,
@@ -36,14 +36,14 @@ import {
36
36
  deriveToolTarget,
37
37
  describeToolCall,
38
38
  scopePathFor
39
- } from "../chunk-KOPUTJQC.js";
39
+ } from "../chunk-TG3T3M4K.js";
40
40
  import {
41
41
  getMachineId
42
- } from "../chunk-DKDDLF5P.js";
43
- import "../chunk-GMI5QZLG.js";
42
+ } from "../chunk-DKWM5T3P.js";
43
+ import "../chunk-QA72MKIT.js";
44
44
  import "../chunk-BSZYIAZL.js";
45
45
  import "../chunk-SAF6HGAA.js";
46
- import "../chunk-OFRNZWC4.js";
46
+ import "../chunk-IUWRVTQK.js";
47
47
  import "../chunk-7QLSKOSU.js";
48
48
  import "../chunk-KZERVKTD.js";
49
49
  import "../chunk-XX2V4QS5.js";
@@ -60,7 +60,7 @@ import {
60
60
  hookWaitDeadline,
61
61
  redactSecrets,
62
62
  resolveGate
63
- } from "../chunk-L4C2JXJS.js";
63
+ } from "../chunk-X6RXX2NF.js";
64
64
 
65
65
  // bin/pushary-opencode-hook.ts
66
66
  import { basename } from "path";
@@ -1,26 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionDenied
4
- } from "../chunk-EJT2ER6G.js";
5
- import "../chunk-ATBKJNWS.js";
6
- import "../chunk-VZKXBFUA.js";
4
+ } from "../chunk-GSSFSVAQ.js";
5
+ import "../chunk-6EKQZA6R.js";
6
+ import "../chunk-NCVIWGVA.js";
7
+ import "../chunk-3HFK3UXM.js";
7
8
  import {
8
9
  readHookInput
9
10
  } from "../chunk-6CUUA7HO.js";
10
11
  import "../chunk-YHG74UFF.js";
11
- import "../chunk-4XZCDSNG.js";
12
- import "../chunk-GKAKAOKC.js";
13
- import "../chunk-KOPUTJQC.js";
14
- import "../chunk-DKDDLF5P.js";
15
- import "../chunk-GMI5QZLG.js";
12
+ import "../chunk-GTZLL7F4.js";
13
+ import "../chunk-UXHMWF4H.js";
14
+ import "../chunk-TG3T3M4K.js";
15
+ import "../chunk-DKWM5T3P.js";
16
+ import "../chunk-QA72MKIT.js";
16
17
  import "../chunk-BSZYIAZL.js";
17
18
  import "../chunk-SAF6HGAA.js";
18
- import "../chunk-OFRNZWC4.js";
19
+ import "../chunk-IUWRVTQK.js";
19
20
  import "../chunk-7QLSKOSU.js";
20
21
  import "../chunk-KZERVKTD.js";
21
22
  import "../chunk-XX2V4QS5.js";
22
23
  import "../chunk-2UMNXADU.js";
23
- import "../chunk-L4C2JXJS.js";
24
+ import "../chunk-X6RXX2NF.js";
24
25
 
25
26
  // bin/pushary-permission-denied-hook.ts
26
27
  var main = async () => {
@@ -1,26 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionRequest
4
- } from "../chunk-EJT2ER6G.js";
5
- import "../chunk-ATBKJNWS.js";
6
- import "../chunk-VZKXBFUA.js";
4
+ } from "../chunk-GSSFSVAQ.js";
5
+ import "../chunk-6EKQZA6R.js";
6
+ import "../chunk-NCVIWGVA.js";
7
+ import "../chunk-3HFK3UXM.js";
7
8
  import {
8
9
  readHookInput
9
10
  } from "../chunk-6CUUA7HO.js";
10
11
  import "../chunk-YHG74UFF.js";
11
- import "../chunk-4XZCDSNG.js";
12
- import "../chunk-GKAKAOKC.js";
13
- import "../chunk-KOPUTJQC.js";
14
- import "../chunk-DKDDLF5P.js";
15
- import "../chunk-GMI5QZLG.js";
12
+ import "../chunk-GTZLL7F4.js";
13
+ import "../chunk-UXHMWF4H.js";
14
+ import "../chunk-TG3T3M4K.js";
15
+ import "../chunk-DKWM5T3P.js";
16
+ import "../chunk-QA72MKIT.js";
16
17
  import "../chunk-BSZYIAZL.js";
17
18
  import "../chunk-SAF6HGAA.js";
18
- import "../chunk-OFRNZWC4.js";
19
+ import "../chunk-IUWRVTQK.js";
19
20
  import "../chunk-7QLSKOSU.js";
20
21
  import "../chunk-KZERVKTD.js";
21
22
  import "../chunk-XX2V4QS5.js";
22
23
  import "../chunk-2UMNXADU.js";
23
- import "../chunk-L4C2JXJS.js";
24
+ import "../chunk-X6RXX2NF.js";
24
25
 
25
26
  // bin/pushary-permission-hook.ts
26
27
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handlePostToolUse
7
- } from "../chunk-4XZCDSNG.js";
8
- import "../chunk-GKAKAOKC.js";
9
- import "../chunk-KOPUTJQC.js";
10
- import "../chunk-DKDDLF5P.js";
11
- import "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-GTZLL7F4.js";
8
+ import "../chunk-UXHMWF4H.js";
9
+ import "../chunk-TG3T3M4K.js";
10
+ import "../chunk-DKWM5T3P.js";
11
+ import "../chunk-QA72MKIT.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-OFRNZWC4.js";
14
+ import "../chunk-IUWRVTQK.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
17
  import "../chunk-XX2V4QS5.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-L4C2JXJS.js";
19
+ import "../chunk-X6RXX2NF.js";
20
20
 
21
21
  // bin/pushary-post-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleUserPrompt
7
- } from "../chunk-4XZCDSNG.js";
8
- import "../chunk-GKAKAOKC.js";
9
- import "../chunk-KOPUTJQC.js";
10
- import "../chunk-DKDDLF5P.js";
11
- import "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-GTZLL7F4.js";
8
+ import "../chunk-UXHMWF4H.js";
9
+ import "../chunk-TG3T3M4K.js";
10
+ import "../chunk-DKWM5T3P.js";
11
+ import "../chunk-QA72MKIT.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-OFRNZWC4.js";
14
+ import "../chunk-IUWRVTQK.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
17
  import "../chunk-XX2V4QS5.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-L4C2JXJS.js";
19
+ import "../chunk-X6RXX2NF.js";
20
20
 
21
21
  // bin/pushary-prompt-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleSessionEnd
7
- } from "../chunk-4XZCDSNG.js";
8
- import "../chunk-GKAKAOKC.js";
9
- import "../chunk-KOPUTJQC.js";
10
- import "../chunk-DKDDLF5P.js";
11
- import "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-GTZLL7F4.js";
8
+ import "../chunk-UXHMWF4H.js";
9
+ import "../chunk-TG3T3M4K.js";
10
+ import "../chunk-DKWM5T3P.js";
11
+ import "../chunk-QA72MKIT.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-OFRNZWC4.js";
14
+ import "../chunk-IUWRVTQK.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
17
  import "../chunk-XX2V4QS5.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-L4C2JXJS.js";
19
+ import "../chunk-X6RXX2NF.js";
20
20
 
21
21
  // bin/pushary-session-end-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleSessionStart
7
- } from "../chunk-4XZCDSNG.js";
8
- import "../chunk-GKAKAOKC.js";
9
- import "../chunk-KOPUTJQC.js";
10
- import "../chunk-DKDDLF5P.js";
11
- import "../chunk-GMI5QZLG.js";
7
+ } from "../chunk-GTZLL7F4.js";
8
+ import "../chunk-UXHMWF4H.js";
9
+ import "../chunk-TG3T3M4K.js";
10
+ import "../chunk-DKWM5T3P.js";
11
+ import "../chunk-QA72MKIT.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-OFRNZWC4.js";
14
+ import "../chunk-IUWRVTQK.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
17
  import "../chunk-XX2V4QS5.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-L4C2JXJS.js";
19
+ import "../chunk-X6RXX2NF.js";
20
20
 
21
21
  // bin/pushary-session-start-hook.ts
22
22
  var main = async () => {
@@ -1,15 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  detectClaudeVersion
4
- } from "../chunk-J2JZJZKB.js";
4
+ } from "../chunk-KVE5RCQL.js";
5
5
  import {
6
6
  claudeWired,
7
7
  codexWired,
8
8
  geminiWired
9
- } from "../chunk-BAE45YLP.js";
9
+ } from "../chunk-FZ73G2RO.js";
10
+ import {
11
+ waitForMachineReadiness
12
+ } from "../chunk-TY5HVMXT.js";
10
13
  import {
11
14
  runBrowserLogin
12
15
  } from "../chunk-Z3Z4VK5F.js";
16
+ import {
17
+ HERMES_CONFIG_SCRIPT,
18
+ isHermesConfigReceipt,
19
+ resolveHermesPython,
20
+ runHermesPythonScript
21
+ } from "../chunk-UDBJHQMG.js";
13
22
  import {
14
23
  describeDetection,
15
24
  detectAllAgents,
@@ -21,7 +30,7 @@ import {
21
30
  shortenHome,
22
31
  vscodeSettingsTargets,
23
32
  writeInstructionBlock
24
- } from "../chunk-A4O5ROZK.js";
33
+ } from "../chunk-MZGWKIUZ.js";
25
34
  import {
26
35
  OPENCODE_HOOK_BINARY,
27
36
  addOpenCodeMcpServer,
@@ -32,7 +41,7 @@ import {
32
41
  openCodePluginDir,
33
42
  openCodePluginFile,
34
43
  openCodeWired
35
- } from "../chunk-O5B7EK5U.js";
44
+ } from "../chunk-34GN3IPX.js";
36
45
  import {
37
46
  GEMINI_HOOK_BINARY,
38
47
  addClaudeMcpServer,
@@ -40,47 +49,53 @@ import {
40
49
  addGeminiMcpServer,
41
50
  addPusharyHooks,
42
51
  addPusharyToolPermissions,
52
+ captureClaudeMcpServer,
43
53
  compareVersion,
44
- parseVersion
45
- } from "../chunk-VA7VUNRD.js";
46
- import "../chunk-ATBKJNWS.js";
54
+ isClaudeMcpSnapshot,
55
+ parseVersion,
56
+ updateClaudeMcpSnapshot
57
+ } from "../chunk-Q223OM5J.js";
58
+ import "../chunk-6EKQZA6R.js";
47
59
  import {
48
60
  guardBinary,
49
61
  guardNodeScript,
50
62
  guardedArgv
51
- } from "../chunk-AIGDBRIJ.js";
63
+ } from "../chunk-SYUIXXQW.js";
52
64
  import {
65
+ daemonHasRemoteProof,
53
66
  daemonServiceManagerAvailable,
54
67
  disableDaemonService,
55
68
  ensureDaemonRunning,
56
69
  hasDaemonServiceDefinition,
57
70
  readDaemonStatus,
58
71
  replaceDaemonService,
59
- stopDaemonService
60
- } from "../chunk-R2AGKCXL.js";
72
+ stopDaemonService,
73
+ waitForDaemonRemoteProof
74
+ } from "../chunk-3SQYKLBW.js";
61
75
  import {
62
76
  detectProviderLiveCapabilities,
63
77
  hasSpawnProvider,
64
78
  resolveControlPolicy
65
- } from "../chunk-NKHEHEUM.js";
79
+ } from "../chunk-6XUABEX2.js";
66
80
  import "../chunk-XHKBHWLX.js";
67
81
  import {
68
82
  installGlobally,
69
83
  npmErrorMessage,
70
84
  resolveGlobalBinDir,
71
85
  resolveGlobalBinary
72
- } from "../chunk-PZA7G4CN.js";
86
+ } from "../chunk-X4ZUUFKV.js";
73
87
  import {
74
88
  reportEvent
75
- } from "../chunk-4XZCDSNG.js";
76
- import "../chunk-GKAKAOKC.js";
77
- import "../chunk-KOPUTJQC.js";
78
- import "../chunk-DKDDLF5P.js";
89
+ } from "../chunk-GTZLL7F4.js";
90
+ import "../chunk-UXHMWF4H.js";
91
+ import "../chunk-TG3T3M4K.js";
92
+ import "../chunk-DKWM5T3P.js";
79
93
  import {
80
94
  addCodexHookTrust,
81
95
  addCodexHooks,
82
96
  addCodexMcpServer,
83
97
  claudeJson,
98
+ claudeMcpReceipt,
84
99
  claudeSettings,
85
100
  claudeSkillDir,
86
101
  codexAgentsMd2 as codexAgentsMd,
@@ -93,9 +108,10 @@ import {
93
108
  cursorUserHooks,
94
109
  geminiMd,
95
110
  geminiSettings,
111
+ hermesConfigReceipt,
96
112
  pusharyConfigFile,
97
113
  vscodePluginDir
98
- } from "../chunk-GMI5QZLG.js";
114
+ } from "../chunk-QA72MKIT.js";
99
115
  import {
100
116
  confirmAppConnection,
101
117
  connectDevice,
@@ -104,12 +120,12 @@ import {
104
120
  printConnectInstructions,
105
121
  setHumanStream,
106
122
  verifyRoundTrip
107
- } from "../chunk-T3LRWZKI.js";
123
+ } from "../chunk-2LPEZYMC.js";
108
124
  import "../chunk-3EGEA4KH.js";
109
125
  import {
110
126
  checkApiKey,
111
127
  describeKeyCheck
112
- } from "../chunk-I5L6SK5V.js";
128
+ } from "../chunk-BLODMQKJ.js";
113
129
  import {
114
130
  useColor
115
131
  } from "../chunk-5RUIFDTP.js";
@@ -121,7 +137,7 @@ import {
121
137
  readControlMode,
122
138
  readKeySource,
123
139
  writeKey
124
- } from "../chunk-V6N4Q223.js";
140
+ } from "../chunk-3CUDMTL4.js";
125
141
  import {
126
142
  parseFlags
127
143
  } from "../chunk-GMXKITVA.js";
@@ -138,7 +154,7 @@ import {
138
154
  } from "../chunk-DINDL2CF.js";
139
155
  import "../chunk-BSZYIAZL.js";
140
156
  import "../chunk-SAF6HGAA.js";
141
- import "../chunk-OFRNZWC4.js";
157
+ import "../chunk-IUWRVTQK.js";
142
158
  import {
143
159
  UsageError
144
160
  } from "../chunk-7QLSKOSU.js";
@@ -155,12 +171,12 @@ import "../chunk-2UMNXADU.js";
155
171
  import {
156
172
  CURSOR_GATE_EVENTS,
157
173
  isValidApiKey
158
- } from "../chunk-L4C2JXJS.js";
174
+ } from "../chunk-X6RXX2NF.js";
159
175
 
160
176
  // bin/pushary-setup.ts
161
177
  import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync, rmSync, renameSync, realpathSync, readdirSync, statSync, openSync, readSync, closeSync } from "fs";
162
178
  import { join as join3, dirname as dirname2, basename } from "path";
163
- import { homedir, tmpdir } from "os";
179
+ import { homedir } from "os";
164
180
  import { execSync as execSync2 } from "child_process";
165
181
  import { checkbox, input, confirm } from "@inquirer/prompts";
166
182
  import { fileURLToPath } from "url";
@@ -595,6 +611,8 @@ var parseSetupOptions = (input2) => {
595
611
  // bin/pushary-setup.ts
596
612
  var CLAUDE_SETTINGS = claudeSettings();
597
613
  var CLAUDE_JSON = claudeJson();
614
+ var CLAUDE_MCP_RECEIPT = claudeMcpReceipt();
615
+ var HERMES_CONFIG_RECEIPT = hermesConfigReceipt();
598
616
  var CURSOR_PLUGIN_DIR = cursorPluginDir();
599
617
  var CURSOR_USER_HOOKS = cursorUserHooks();
600
618
  var VSCODE_PLUGIN_DIR = vscodePluginDir();
@@ -790,6 +808,17 @@ var setupClaudeCode = async (apiKey) => {
790
808
  await installGlobally2();
791
809
  const claudeJson2 = readAgentJson(CLAUDE_JSON);
792
810
  const settings = readAgentJson(CLAUDE_SETTINGS);
811
+ const mcpReceipt = readJsonSafe(CLAUDE_MCP_RECEIPT);
812
+ let mcpSnapshot;
813
+ if (mcpReceipt.kind === "missing") {
814
+ mcpSnapshot = captureClaudeMcpServer(claudeJson2, apiKey);
815
+ } else {
816
+ if (mcpReceipt.kind !== "ok" || !isClaudeMcpSnapshot(mcpReceipt.value)) {
817
+ throw new Error(`Cannot safely replace Claude's Pushary MCP entry: ${CLAUDE_MCP_RECEIPT} is unreadable or invalid.`);
818
+ }
819
+ mcpSnapshot = updateClaudeMcpSnapshot(mcpReceipt.value, apiKey);
820
+ }
821
+ writeJsonAtomic(CLAUDE_MCP_RECEIPT, mcpSnapshot, 384);
793
822
  await spinner("Adding MCP server (type: http)", async () => {
794
823
  addClaudeMcpServer(claudeJson2, apiKey);
795
824
  });
@@ -814,23 +843,6 @@ var setupClaudeCode = async (apiKey) => {
814
843
  console.log(` ${dim("\u2022")} Auto-allowed tools: no permission prompts for Pushary MCP calls`);
815
844
  };
816
845
  var IS_WINDOWS = process.platform === "win32";
817
- var resolveHermesPython = () => {
818
- try {
819
- const probe = IS_WINDOWS ? "where hermes" : "command -v hermes";
820
- const launcher = execSync2(probe, { encoding: "utf-8", stdio: "pipe", timeout: 5e3 }).split("\n")[0].trim();
821
- if (launcher && !IS_WINDOWS) {
822
- const shebang = readFileSync(launcher, "utf-8").split("\n", 1)[0];
823
- if (shebang.startsWith("#!")) {
824
- const interpreter = shebang.slice(2).trim().split(/\s+/)[0];
825
- if (interpreter && /python/i.test(interpreter) && existsSync(interpreter)) return interpreter;
826
- }
827
- }
828
- } catch {
829
- }
830
- const venvRoot = join3(homedir(), ".hermes", "hermes-agent", "venv");
831
- const candidates = IS_WINDOWS ? [join3(venvRoot, "Scripts", "python.exe"), join3(venvRoot, "Scripts", "python3.exe")] : [join3(venvRoot, "bin", "python3"), join3(venvRoot, "bin", "python")];
832
- return candidates.find(existsSync) ?? null;
833
- };
834
846
  var ensurePip = (python) => {
835
847
  try {
836
848
  execSync2(`"${python}" -m pip --version`, { stdio: "ignore", timeout: 15e3 });
@@ -843,20 +855,7 @@ var ensurePip = (python) => {
843
855
  }
844
856
  };
845
857
  var enablePusharyPlugin = (python) => {
846
- const snippet = 'from hermes_cli.config import load_config, save_config; c = load_config(); s = c.get("security") if isinstance(c.get("security"), dict) else {}; ap = s.get("approval") if isinstance(s.get("approval"), dict) else {}; ap["transport"] = "pushary"; ap["transport_fallback"] = "builtin"; s["approval"] = ap; c["security"] = s; p = c.get("plugins") if isinstance(c.get("plugins"), dict) else {}; e = p.get("enabled") if isinstance(p.get("enabled"), list) else []; p["enabled"] = (e + ["pushary"]) if "pushary" not in e else e; c["plugins"] = p; a = c.get("agent") if isinstance(c.get("agent"), dict) else {}; d = a.get("disabled_toolsets") if isinstance(a.get("disabled_toolsets"), list) else []; a["disabled_toolsets"] = (d + ["clarify"]) if "clarify" not in d else d; c["agent"] = a; save_config(c)';
847
- const scriptPath = join3(tmpdir(), `pushary-hermes-${process.pid}.py`);
848
- try {
849
- writeFileSync(scriptPath, snippet.split("; ").join("\n"), "utf-8");
850
- execSync2(`"${python}" "${scriptPath}"`, { stdio: "pipe", timeout: 15e3 });
851
- return true;
852
- } catch {
853
- return false;
854
- } finally {
855
- try {
856
- rmSync(scriptPath, { force: true });
857
- } catch {
858
- }
859
- }
858
+ return runHermesPythonScript(python, HERMES_CONFIG_SCRIPT, "setup", HERMES_CONFIG_RECEIPT);
860
859
  };
861
860
  var setupHermes = async (_apiKey) => {
862
861
  console.log(`
@@ -873,6 +872,10 @@ var setupHermes = async (_apiKey) => {
873
872
  noteManual("Install the Hermes plugin by hand: <hermes-python> -m pip install hermes-plugin-pushary");
874
873
  return "skipped";
875
874
  }
875
+ const existingReceipt = readJsonSafe(HERMES_CONFIG_RECEIPT);
876
+ if (existingReceipt.kind !== "missing" && (existingReceipt.kind !== "ok" || !isHermesConfigReceipt(existingReceipt.value))) {
877
+ throw new Error(`Cannot safely configure Hermes: ${HERMES_CONFIG_RECEIPT} is unreadable or invalid.`);
878
+ }
876
879
  await spinner("Installing hermes-plugin-pushary into Hermes\u2019 environment", async () => {
877
880
  ensurePip(python);
878
881
  execSync2(`"${python}" -m pip install --upgrade hermes-plugin-pushary`, { stdio: "pipe", timeout: 18e4 });
@@ -2125,6 +2128,14 @@ var main = async () => {
2125
2128
  return { kind: "unavailable", detail: formatError(err) };
2126
2129
  }
2127
2130
  })() : controlMode === "on" || controlPolicy === "legacy" ? { kind: "unavailable", detail: "Managed control is required but no usable provider/service-manager pair is available" } : null;
2131
+ const localControlProof = daemon?.kind === "running" || daemon?.kind === "started" ? await waitForDaemonRemoteProof() : null;
2132
+ const serverControlProof = localControlProof && daemonHasRemoteProof(localControlProof) ? await waitForMachineReadiness(trimmedKey, ["spawn", ...controlCapabilities]) : null;
2133
+ const daemonReady = daemon === null ? null : localControlProof !== null && daemonHasRemoteProof(localControlProof) && (serverControlProof?.kind === "ready" || serverControlProof?.kind === "unsupported");
2134
+ if (serverControlProof?.kind === "unsupported") {
2135
+ console.log(` ${yellow("!")} This server predates control-readiness reporting; local heartbeat and queue checks passed.`);
2136
+ } else if (serverControlProof && serverControlProof.kind !== "ready") {
2137
+ console.log(` ${yellow("!")} Managed control could not be verified by the server: ${serverControlProof.detail}`);
2138
+ }
2128
2139
  const closing = describeClosing({
2129
2140
  agentsOk,
2130
2141
  configuredNothing,
@@ -2132,7 +2143,7 @@ var main = async () => {
2132
2143
  failed,
2133
2144
  reachChecked,
2134
2145
  reachesYou,
2135
- daemonReady: controlLifecycleFailure ? false : daemon === null ? null : daemon.kind === "running" || daemon.kind === "started",
2146
+ daemonReady: controlLifecycleFailure ? false : daemonReady,
2136
2147
  // null when the check did not run, so it changes nothing. Only an outright
2137
2148
  // `false` is allowed to hold back "Setup complete.".
2138
2149
  roundTripAnswered: roundTrip === null ? null : roundTrip.kind === "answered" ? true : roundTrip.kind === "unanswered" ? false : null
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readLedgerSummary
4
- } from "../chunk-VZKXBFUA.js";
4
+ } from "../chunk-3HFK3UXM.js";
5
5
  import {
6
6
  exitOnHelpFlag
7
7
  } from "../chunk-LURY4WNF.js";
@@ -11,7 +11,7 @@ import "../chunk-KZERVKTD.js";
11
11
  import {
12
12
  getApiKey
13
13
  } from "../chunk-2UMNXADU.js";
14
- import "../chunk-L4C2JXJS.js";
14
+ import "../chunk-X6RXX2NF.js";
15
15
 
16
16
  // bin/pushary-stats.ts
17
17
  exitOnHelpFlag("stats");
@@ -2,25 +2,25 @@
2
2
  import {
3
3
  describeLastSeen,
4
4
  listMachines
5
- } from "../chunk-ZL7HEF2T.js";
6
- import "../chunk-DKDDLF5P.js";
7
- import "../chunk-GMI5QZLG.js";
5
+ } from "../chunk-TY5HVMXT.js";
6
+ import "../chunk-DKWM5T3P.js";
7
+ import "../chunk-QA72MKIT.js";
8
8
  import {
9
9
  describeReach,
10
10
  fetchChannels,
11
11
  reachVerdict
12
- } from "../chunk-T3LRWZKI.js";
12
+ } from "../chunk-2LPEZYMC.js";
13
13
  import "../chunk-3EGEA4KH.js";
14
14
  import {
15
15
  checkApiKey,
16
16
  describeKeyCheck
17
- } from "../chunk-I5L6SK5V.js";
17
+ } from "../chunk-BLODMQKJ.js";
18
18
  import {
19
19
  createIo
20
20
  } from "../chunk-5RUIFDTP.js";
21
21
  import {
22
22
  readKeySource
23
- } from "../chunk-V6N4Q223.js";
23
+ } from "../chunk-3CUDMTL4.js";
24
24
  import {
25
25
  rejectUnknownFlags
26
26
  } from "../chunk-GMXKITVA.js";
@@ -32,7 +32,7 @@ import "../chunk-BC3VCZ3E.js";
32
32
  import "../chunk-DINDL2CF.js";
33
33
  import "../chunk-BSZYIAZL.js";
34
34
  import "../chunk-SAF6HGAA.js";
35
- import "../chunk-OFRNZWC4.js";
35
+ import "../chunk-IUWRVTQK.js";
36
36
  import {
37
37
  UsageError
38
38
  } from "../chunk-7QLSKOSU.js";
@@ -41,7 +41,7 @@ import {
41
41
  } from "../chunk-KZERVKTD.js";
42
42
  import "../chunk-XX2V4QS5.js";
43
43
  import "../chunk-2UMNXADU.js";
44
- import "../chunk-L4C2JXJS.js";
44
+ import "../chunk-X6RXX2NF.js";
45
45
 
46
46
  // src/status.ts
47
47
  var keySourceLine = (source) => {