@pushary/agent-hooks 1.7.3 → 1.8.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 (102) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +13 -1
  3. package/data/cursor-plugin/scripts/pushary-gate.mjs +2 -21
  4. package/data/cursor-plugin/scripts/redaction.mjs +51 -0
  5. package/data/vscode-plugin/scripts/pushary-gate.mjs +1 -21
  6. package/data/vscode-plugin/scripts/redaction.mjs +51 -0
  7. package/dist/bin/pushary-bell-hook.js +23 -23
  8. package/dist/bin/pushary-bell.js +9 -9
  9. package/dist/bin/pushary-claude.js +26 -26
  10. package/dist/bin/pushary-clean.js +91 -107
  11. package/dist/bin/pushary-codex-bridge.js +18 -18
  12. package/dist/bin/pushary-codex-hook.js +42 -43
  13. package/dist/bin/pushary-codex.js +13 -13
  14. package/dist/bin/pushary-connect.js +13 -13
  15. package/dist/bin/pushary-cowork.js +5 -5
  16. package/dist/bin/pushary-daemon.js +27 -27
  17. package/dist/bin/pushary-disconnect.js +18 -18
  18. package/dist/bin/pushary-doctor.js +85 -79
  19. package/dist/bin/pushary-elicitation-hook.js +25 -25
  20. package/dist/bin/pushary-gemini-bridge.js +12 -12
  21. package/dist/bin/pushary-gemini-hook.js +29 -30
  22. package/dist/bin/pushary-hook.js +32 -32
  23. package/dist/bin/pushary-login.js +12 -12
  24. package/dist/bin/pushary-logout.js +7 -7
  25. package/dist/bin/pushary-mcp.js +85 -28
  26. package/dist/bin/pushary-mode.js +9 -9
  27. package/dist/bin/pushary-notification-hook.js +28 -28
  28. package/dist/bin/pushary-opencode-hook.js +28 -29
  29. package/dist/bin/pushary-permission-denied-hook.js +32 -32
  30. package/dist/bin/pushary-permission-hook.js +31 -31
  31. package/dist/bin/pushary-post-hook.js +28 -28
  32. package/dist/bin/pushary-prompt-hook.js +28 -28
  33. package/dist/bin/pushary-session-end-hook.js +28 -28
  34. package/dist/bin/pushary-session-start-hook.js +32 -32
  35. package/dist/bin/pushary-setup.js +60 -127
  36. package/dist/bin/pushary-stats.js +5 -5
  37. package/dist/bin/pushary-status.js +15 -15
  38. package/dist/bin/pushary-stop-hook.js +28 -28
  39. package/dist/bin/pushary-stopfailure-hook.js +28 -28
  40. package/dist/bin/pushary-suggestions.js +4 -4
  41. package/dist/bin/pushary-transcript-register.js +19 -19
  42. package/dist/bin/pushary-transcripts.js +7 -7
  43. package/dist/bin/pushary-upgrade.js +231 -105
  44. package/dist/bin/pushary-wait.js +9 -9
  45. package/dist/bin/pushary.js +6 -6
  46. package/dist/{chunk-EEEJ2JIL.js → chunk-2ABTSGFT.js} +3 -3
  47. package/dist/{chunk-DUQO4C4I.js → chunk-2OY3ZZ5N.js} +3 -3
  48. package/dist/{chunk-MIXWMA73.js → chunk-3EVPNIBE.js} +3 -3
  49. package/dist/{chunk-WTJM7PSL.js → chunk-6J2JC2RT.js} +3 -3
  50. package/dist/{chunk-EADXTSHE.js → chunk-7Z7Q4GGS.js} +2 -2
  51. package/dist/{chunk-MZBRL5H5.js → chunk-A2A2YTMG.js} +108 -25
  52. package/dist/{chunk-KEL5MXRL.js → chunk-AHV4LNB5.js} +1 -1
  53. package/dist/{chunk-G3OMOTJ4.js → chunk-AXPCESYO.js} +3 -3
  54. package/dist/{chunk-3EUBQARL.js → chunk-C2WCPBF7.js} +1 -1
  55. package/dist/chunk-CJVVKOSR.js +73 -0
  56. package/dist/{chunk-U6RVDUJ5.js → chunk-CULUZTWQ.js} +283 -41
  57. package/dist/{chunk-N5MZH5A6.js → chunk-CVQYGMSR.js} +4 -4
  58. package/dist/{chunk-VKVSRCBO.js → chunk-D2FX3EPW.js} +1 -1
  59. package/dist/{chunk-62CVUUNU.js → chunk-DB3ONZB4.js} +2 -2
  60. package/dist/{chunk-WGMW7OXW.js → chunk-DE4Y6TCC.js} +6 -6
  61. package/dist/{chunk-YYCTF4Q5.js → chunk-E4FJTUH4.js} +1 -1
  62. package/dist/{chunk-EUGNVLMG.js → chunk-EPCXUP3P.js} +3 -1
  63. package/dist/{chunk-PRNFSORD.js → chunk-EX3GAPA4.js} +1 -1
  64. package/dist/{chunk-TCVMK6GI.js → chunk-EYK3GSRH.js} +4 -4
  65. package/dist/{chunk-R6OYCUNK.js → chunk-GPEGOGRJ.js} +1 -1
  66. package/dist/chunk-GU3EJCVV.js +43 -0
  67. package/dist/{chunk-Y4ZH64UK.js → chunk-HQ6G3B5R.js} +2 -2
  68. package/dist/{chunk-5S2VBSJI.js → chunk-HZVVNGEW.js} +2 -2
  69. package/dist/{chunk-IWJKSIB4.js → chunk-IPVKH2ST.js} +1 -1
  70. package/dist/{chunk-UOQRM7JQ.js → chunk-J5TIV3J6.js} +5 -5
  71. package/dist/{chunk-IRZG3HEU.js → chunk-JU6W3XAU.js} +1 -1
  72. package/dist/{chunk-G62JL2NT.js → chunk-JYG4B33G.js} +1 -1
  73. package/dist/{chunk-OTNOANMX.js → chunk-JZTHGAPA.js} +8 -8
  74. package/dist/{chunk-7RUJKCR4.js → chunk-KGDWDSNL.js} +2 -2
  75. package/dist/{chunk-6JQFIHZC.js → chunk-KVQBWI5T.js} +3 -3
  76. package/dist/{chunk-OVC5QXN5.js → chunk-LXQ5FBBD.js} +1 -1
  77. package/dist/{chunk-VE7TXLR4.js → chunk-M5ICYGHT.js} +3 -3
  78. package/dist/{chunk-YPUBA2FL.js → chunk-M5JDZ45W.js} +4 -4
  79. package/dist/{chunk-O3JDWNLU.js → chunk-MDEPU45E.js} +183 -28
  80. package/dist/{chunk-P2VIBGXA.js → chunk-MPWXGONV.js} +1 -1
  81. package/dist/{chunk-YC27PROF.js → chunk-NGDD6TXY.js} +20 -5
  82. package/dist/{chunk-G4GLCLKK.js → chunk-NQTHFF4W.js} +138 -17
  83. package/dist/{chunk-NOI3XTCY.js → chunk-OKXS7WDZ.js} +1 -1
  84. package/dist/{chunk-LPNJLKBQ.js → chunk-OLQRRFBX.js} +1 -1
  85. package/dist/{chunk-D6OODZCM.js → chunk-P7WQEVWA.js} +2 -2
  86. package/dist/{chunk-62VT3BPH.js → chunk-Q7E4I6UA.js} +28 -16
  87. package/dist/{chunk-BIH2Y2HP.js → chunk-R7437YI3.js} +2 -2
  88. package/dist/{chunk-RLW3JWDY.js → chunk-RHR6NARM.js} +2 -2
  89. package/dist/{chunk-WPX67AKT.js → chunk-SAXBC4AZ.js} +1 -1
  90. package/dist/{chunk-IPSRMLCJ.js → chunk-SIFVFP6T.js} +1 -1
  91. package/dist/{chunk-7OA34PNW.js → chunk-SLFABHW3.js} +40 -10
  92. package/dist/{chunk-AWVNAYGD.js → chunk-TY4JT7W3.js} +1 -1
  93. package/dist/{chunk-KJXUIPS4.js → chunk-UI36QSBI.js} +28 -16
  94. package/dist/{chunk-G6RRVJOG.js → chunk-VQKRG3AC.js} +6 -6
  95. package/dist/{chunk-ZKJ34T2F.js → chunk-WE2J62NC.js} +31 -17
  96. package/dist/{chunk-LHC45YUC.js → chunk-ZSZSSJCV.js} +1 -1
  97. package/dist/{chunk-BGBLLHZ4.js → chunk-ZVSKMPBZ.js} +1 -1
  98. package/dist/{reapply-PH5T4BGR.js → reapply-CW3MA66V.js} +9 -9
  99. package/dist/src/index.js +20 -20
  100. package/package.json +1 -1
  101. package/dist/chunk-5GB22QYL.js +0 -255
  102. package/dist/chunk-VYPJHGG6.js +0 -92
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  printKeyCheck
4
- } from "../chunk-PRNFSORD.js";
4
+ } from "../chunk-EX3GAPA4.js";
5
5
  import {
6
6
  connectDevice,
7
7
  connectExistingApp,
8
8
  printConnectInstructions
9
- } from "../chunk-YPUBA2FL.js";
9
+ } from "../chunk-M5JDZ45W.js";
10
10
  import "../chunk-3EGEA4KH.js";
11
11
  import "../chunk-QCGNGEGE.js";
12
12
  import {
@@ -14,31 +14,31 @@ import {
14
14
  } from "../chunk-U4TMAANR.js";
15
15
  import {
16
16
  exitOnHelpFlag
17
- } from "../chunk-5S2VBSJI.js";
17
+ } from "../chunk-HZVVNGEW.js";
18
18
  import {
19
19
  parseFlags
20
20
  } from "../chunk-GMXKITVA.js";
21
21
  import {
22
22
  readKeySource
23
- } from "../chunk-D6OODZCM.js";
24
- import "../chunk-VE7TXLR4.js";
23
+ } from "../chunk-P7WQEVWA.js";
24
+ import "../chunk-M5ICYGHT.js";
25
25
  import {
26
26
  checkApiKey
27
- } from "../chunk-EEEJ2JIL.js";
28
- import "../chunk-DUQO4C4I.js";
29
- import "../chunk-OVC5QXN5.js";
27
+ } from "../chunk-2ABTSGFT.js";
28
+ import "../chunk-2OY3ZZ5N.js";
29
+ import "../chunk-LXQ5FBBD.js";
30
30
  import {
31
31
  UsageError
32
32
  } from "../chunk-7QLSKOSU.js";
33
33
  import {
34
34
  EXIT
35
35
  } from "../chunk-KZERVKTD.js";
36
- import "../chunk-62CVUUNU.js";
37
- import "../chunk-MZBRL5H5.js";
36
+ import "../chunk-DB3ONZB4.js";
37
+ import "../chunk-A2A2YTMG.js";
38
38
  import "../chunk-T7E75EKA.js";
39
- import "../chunk-R6OYCUNK.js";
40
- import "../chunk-YYCTF4Q5.js";
41
- import "../chunk-G4GLCLKK.js";
39
+ import "../chunk-GPEGOGRJ.js";
40
+ import "../chunk-E4FJTUH4.js";
41
+ import "../chunk-NQTHFF4W.js";
42
42
 
43
43
  // bin/pushary-connect.ts
44
44
  exitOnHelpFlag("connect");
@@ -2,15 +2,15 @@
2
2
  import {
3
3
  coworkOutput,
4
4
  parseCoworkOptions
5
- } from "../chunk-EADXTSHE.js";
5
+ } from "../chunk-7Z7Q4GGS.js";
6
6
  import {
7
7
  canOpenBrowser,
8
8
  openInBrowser
9
9
  } from "../chunk-PUZZELE6.js";
10
- import "../chunk-BGBLLHZ4.js";
10
+ import "../chunk-ZVSKMPBZ.js";
11
11
  import {
12
12
  exitOnHelpFlag
13
- } from "../chunk-5S2VBSJI.js";
13
+ } from "../chunk-HZVVNGEW.js";
14
14
  import "../chunk-GMXKITVA.js";
15
15
  import {
16
16
  UsageError
@@ -18,10 +18,10 @@ import {
18
18
  import {
19
19
  EXIT
20
20
  } from "../chunk-KZERVKTD.js";
21
- import "../chunk-YYCTF4Q5.js";
21
+ import "../chunk-E4FJTUH4.js";
22
22
  import {
23
23
  CLAUDE_CONNECTOR_GUIDE
24
- } from "../chunk-G4GLCLKK.js";
24
+ } from "../chunk-NQTHFF4W.js";
25
25
 
26
26
  // bin/pushary-cowork.ts
27
27
  exitOnHelpFlag("cowork");
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  inspectConfiguredManagedProviders
4
- } from "../chunk-G6RRVJOG.js";
5
- import "../chunk-IPSRMLCJ.js";
6
- import "../chunk-RLW3JWDY.js";
4
+ } from "../chunk-VQKRG3AC.js";
5
+ import "../chunk-SIFVFP6T.js";
6
+ import "../chunk-RHR6NARM.js";
7
7
  import {
8
8
  HEARTBEAT_INTERVAL_MS,
9
9
  sendHeartbeat
10
- } from "../chunk-WGMW7OXW.js";
11
- import "../chunk-G3OMOTJ4.js";
10
+ } from "../chunk-DE4Y6TCC.js";
11
+ import "../chunk-AXPCESYO.js";
12
12
  import {
13
13
  detectProviderLiveCapabilities,
14
14
  hasSpawnProvider,
15
15
  resolveControlPolicy
16
- } from "../chunk-Y4ZH64UK.js";
16
+ } from "../chunk-HQ6G3B5R.js";
17
17
  import {
18
18
  SESSION_REAP_SILENCE_MS,
19
19
  describeIdleWindow,
@@ -21,15 +21,15 @@ import {
21
21
  listProcessProofs,
22
22
  ownsLiveProcess,
23
23
  silentSpawnedProofs
24
- } from "../chunk-LHC45YUC.js";
24
+ } from "../chunk-ZSZSSJCV.js";
25
25
  import {
26
26
  startRegisteredTranscripts
27
- } from "../chunk-OTNOANMX.js";
27
+ } from "../chunk-JZTHGAPA.js";
28
28
  import "../chunk-SGZJ5LYH.js";
29
- import "../chunk-TCVMK6GI.js";
30
- import "../chunk-BGBLLHZ4.js";
31
- import "../chunk-3EUBQARL.js";
32
- import "../chunk-WTJM7PSL.js";
29
+ import "../chunk-EYK3GSRH.js";
30
+ import "../chunk-ZVSKMPBZ.js";
31
+ import "../chunk-C2WCPBF7.js";
32
+ import "../chunk-6J2JC2RT.js";
33
33
  import {
34
34
  DAEMON_LEASE_RENEW_INTERVAL_MS,
35
35
  acquireDaemonLease,
@@ -46,46 +46,46 @@ import {
46
46
  requestDaemonHandoff,
47
47
  stopDaemonRunning,
48
48
  writeDaemonNeedsLogin
49
- } from "../chunk-ZKJ34T2F.js";
50
- import "../chunk-MIXWMA73.js";
51
- import "../chunk-NOI3XTCY.js";
52
- import "../chunk-P2VIBGXA.js";
53
- import "../chunk-WPX67AKT.js";
54
- import "../chunk-LPNJLKBQ.js";
49
+ } from "../chunk-WE2J62NC.js";
50
+ import "../chunk-3EVPNIBE.js";
51
+ import "../chunk-OKXS7WDZ.js";
52
+ import "../chunk-MPWXGONV.js";
53
+ import "../chunk-SAXBC4AZ.js";
54
+ import "../chunk-OLQRRFBX.js";
55
55
  import {
56
56
  spawnClaude
57
57
  } from "../chunk-XHKBHWLX.js";
58
- import "../chunk-EUGNVLMG.js";
58
+ import "../chunk-EPCXUP3P.js";
59
59
  import {
60
60
  writeHuman
61
61
  } from "../chunk-QCGNGEGE.js";
62
62
  import {
63
63
  exitOnHelpFlag
64
- } from "../chunk-5S2VBSJI.js";
64
+ } from "../chunk-HZVVNGEW.js";
65
65
  import "../chunk-GMXKITVA.js";
66
66
  import {
67
67
  readControlMode
68
- } from "../chunk-D6OODZCM.js";
68
+ } from "../chunk-P7WQEVWA.js";
69
69
  import {
70
70
  getMachineId
71
- } from "../chunk-OVC5QXN5.js";
71
+ } from "../chunk-LXQ5FBBD.js";
72
72
  import "../chunk-7QLSKOSU.js";
73
73
  import {
74
74
  EXIT
75
75
  } from "../chunk-KZERVKTD.js";
76
- import "../chunk-62CVUUNU.js";
76
+ import "../chunk-DB3ONZB4.js";
77
77
  import {
78
78
  resolveBinary
79
- } from "../chunk-MZBRL5H5.js";
79
+ } from "../chunk-A2A2YTMG.js";
80
80
  import "../chunk-T7E75EKA.js";
81
81
  import {
82
82
  getApiKey,
83
83
  getBaseUrl
84
- } from "../chunk-R6OYCUNK.js";
84
+ } from "../chunk-GPEGOGRJ.js";
85
85
  import {
86
86
  NPX_LATEST_COMMAND
87
- } from "../chunk-YYCTF4Q5.js";
88
- import "../chunk-G4GLCLKK.js";
87
+ } from "../chunk-E4FJTUH4.js";
88
+ import "../chunk-NQTHFF4W.js";
89
89
 
90
90
  // src/spawn-daemon.ts
91
91
  import { execFileSync, spawn } from "child_process";
@@ -8,40 +8,40 @@ import {
8
8
  openCodePluginDir,
9
9
  openCodePluginFile,
10
10
  removeOpenCodeMcpServer
11
- } from "../chunk-KEL5MXRL.js";
11
+ } from "../chunk-AHV4LNB5.js";
12
12
  import {
13
13
  compatibleConfigFile,
14
14
  compatibleMcpFile,
15
15
  compatiblePermissionRuleFile,
16
16
  removeCompatibleHooks,
17
17
  removeCompatibleMcpServer
18
- } from "../chunk-UOQRM7JQ.js";
18
+ } from "../chunk-J5TIV3J6.js";
19
19
  import {
20
20
  isClaudeMcpSnapshot,
21
21
  removeClaudeMcpServers,
22
22
  removePusharySettings,
23
23
  removePusharyToolPermissions,
24
24
  restoreClaudeMcpServer
25
- } from "../chunk-G3OMOTJ4.js";
25
+ } from "../chunk-AXPCESYO.js";
26
26
  import {
27
27
  removeGeminiSettings
28
- } from "../chunk-MIXWMA73.js";
29
- import "../chunk-U6RVDUJ5.js";
28
+ } from "../chunk-3EVPNIBE.js";
29
+ import "../chunk-CULUZTWQ.js";
30
30
  import "../chunk-N6IOSZOE.js";
31
- import "../chunk-EUGNVLMG.js";
32
- import "../chunk-YC27PROF.js";
33
- import "../chunk-N5MZH5A6.js";
31
+ import "../chunk-EPCXUP3P.js";
32
+ import "../chunk-NGDD6TXY.js";
33
+ import "../chunk-CVQYGMSR.js";
34
34
  import "../chunk-POFBE6ZY.js";
35
35
  import {
36
36
  exitOnHelpFlag
37
- } from "../chunk-5S2VBSJI.js";
38
- import "../chunk-VE7TXLR4.js";
39
- import "../chunk-EEEJ2JIL.js";
40
- import "../chunk-DUQO4C4I.js";
41
- import "../chunk-OVC5QXN5.js";
37
+ } from "../chunk-HZVVNGEW.js";
38
+ import "../chunk-M5ICYGHT.js";
39
+ import "../chunk-2ABTSGFT.js";
40
+ import "../chunk-2OY3ZZ5N.js";
41
+ import "../chunk-LXQ5FBBD.js";
42
42
  import "../chunk-7QLSKOSU.js";
43
43
  import "../chunk-KZERVKTD.js";
44
- import "../chunk-62CVUUNU.js";
44
+ import "../chunk-DB3ONZB4.js";
45
45
  import {
46
46
  claudeJson,
47
47
  claudeMcpReceipt,
@@ -55,14 +55,14 @@ import {
55
55
  geminiSettings,
56
56
  removeCodexHooks,
57
57
  removeCodexSettings
58
- } from "../chunk-MZBRL5H5.js";
58
+ } from "../chunk-A2A2YTMG.js";
59
59
  import "../chunk-T7E75EKA.js";
60
- import "../chunk-R6OYCUNK.js";
61
- import "../chunk-YYCTF4Q5.js";
60
+ import "../chunk-GPEGOGRJ.js";
61
+ import "../chunk-E4FJTUH4.js";
62
62
  import {
63
63
  DISCONNECTABLE_AGENTS,
64
64
  hookCompatibleProfileBySource
65
- } from "../chunk-G4GLCLKK.js";
65
+ } from "../chunk-NQTHFF4W.js";
66
66
 
67
67
  // bin/pushary-disconnect.ts
68
68
  import { readdirSync, readFileSync, rmSync, writeFileSync } from "fs";
@@ -4,65 +4,56 @@ import {
4
4
  } from "../chunk-CVWG2N3Y.js";
5
5
  import {
6
6
  readServiceExecPath,
7
- retryAgentCommand,
8
7
  versionManagerOf
9
- } from "../chunk-VYPJHGG6.js";
8
+ } from "../chunk-GU3EJCVV.js";
10
9
  import {
11
10
  assessCodexHookTrust,
12
11
  readCodexTrustForPusharyHooks
13
- } from "../chunk-RLW3JWDY.js";
12
+ } from "../chunk-RHR6NARM.js";
14
13
  import {
15
14
  readMachineReadiness,
16
15
  readManagedControlEvidence
17
- } from "../chunk-WGMW7OXW.js";
16
+ } from "../chunk-DE4Y6TCC.js";
18
17
  import {
19
18
  FX_PROFILE_REFUSALS,
20
19
  FX_PUSHARY_TOOLS_RULE,
21
20
  FX_QUESTION_TOOL,
22
- FX_SETTINGS_REFUSALS,
23
21
  HERMES_PIP_PACKAGE,
24
22
  HERMES_PLUGIN_NAME,
25
23
  agentProbes,
26
24
  detectAgent,
27
25
  detectAllAgents,
28
- fxBridgeTargetOf,
29
- fxPusharyEntryOf,
30
- fxQuestionRouting,
31
26
  hasInstructionBlock,
32
27
  hermesWiredByPushary,
28
+ inspectFxInstallation,
33
29
  isDetected,
34
- isFxPusharyEntry,
35
30
  isPluginRegistered,
36
- pusharyToolsAllowed,
37
- readFxFile,
38
- readFxProfile,
39
- readFxSettings,
40
31
  readHermesStatus,
41
32
  resolveHermesPython,
33
+ retryAgentCommand,
42
34
  shortenHome,
43
- vscodeSettingsTargets,
44
- workspacesShowingQuestionTool
45
- } from "../chunk-O3JDWNLU.js";
46
- import "../chunk-7OA34PNW.js";
35
+ vscodeSettingsTargets
36
+ } from "../chunk-MDEPU45E.js";
37
+ import "../chunk-SLFABHW3.js";
47
38
  import {
48
39
  OPENCODE_PLUGIN_PLACEHOLDER,
49
40
  openCodePluginDir,
50
41
  openCodePluginFile,
51
42
  openCodeWired
52
- } from "../chunk-KEL5MXRL.js";
43
+ } from "../chunk-AHV4LNB5.js";
53
44
  import {
54
45
  compatibleConfigFile,
55
46
  compatibleInstructionsFile,
56
47
  compatibleMcpFile,
57
48
  hasCompatibleHooks,
58
49
  missingCompatibleHookEvents
59
- } from "../chunk-UOQRM7JQ.js";
60
- import "../chunk-G3OMOTJ4.js";
50
+ } from "../chunk-J5TIV3J6.js";
51
+ import "../chunk-AXPCESYO.js";
61
52
  import {
62
53
  detectProviderLiveCapabilities,
63
54
  hasSpawnProvider,
64
55
  resolveControlPolicy
65
- } from "../chunk-Y4ZH64UK.js";
56
+ } from "../chunk-HQ6G3B5R.js";
66
57
  import {
67
58
  AUTO_UPDATE_DISABLE_ENV,
68
59
  autoUpdateOffReason,
@@ -70,16 +61,16 @@ import {
70
61
  describeAutoUpdateCheck,
71
62
  readAutoUpdateState,
72
63
  takeAutoUpdateAnnouncement
73
- } from "../chunk-KJXUIPS4.js";
64
+ } from "../chunk-UI36QSBI.js";
74
65
  import {
75
66
  readLedgerSummary
76
- } from "../chunk-IRZG3HEU.js";
67
+ } from "../chunk-JU6W3XAU.js";
77
68
  import {
78
69
  describeBridgeResolution,
79
70
  isBridgeLocator,
80
71
  liveBridgeProbe,
81
72
  resolveBridgeStub
82
- } from "../chunk-3EUBQARL.js";
73
+ } from "../chunk-C2WCPBF7.js";
83
74
  import {
84
75
  claudeOtherHolders,
85
76
  claudeUnprovenHolds,
@@ -96,7 +87,7 @@ import {
96
87
  geminiWired,
97
88
  holdsLong,
98
89
  pusharyHookExecutable
99
- } from "../chunk-WTJM7PSL.js";
90
+ } from "../chunk-6J2JC2RT.js";
100
91
  import {
101
92
  daemonHasRemoteProof,
102
93
  daemonServiceManagerAvailable,
@@ -105,18 +96,18 @@ import {
105
96
  readDaemonNeedsLogin,
106
97
  readDaemonStatus,
107
98
  readInstalledDaemonService
108
- } from "../chunk-ZKJ34T2F.js";
99
+ } from "../chunk-WE2J62NC.js";
109
100
  import {
110
101
  GEMINI_HOOK_BINARY,
111
102
  hasGeminiHooks,
112
103
  missingGeminiHookEvents
113
- } from "../chunk-MIXWMA73.js";
104
+ } from "../chunk-3EVPNIBE.js";
114
105
  import "../chunk-XHKBHWLX.js";
115
- import "../chunk-U6RVDUJ5.js";
106
+ import "../chunk-CULUZTWQ.js";
116
107
  import "../chunk-N6IOSZOE.js";
117
- import "../chunk-EUGNVLMG.js";
118
- import "../chunk-YC27PROF.js";
119
- import "../chunk-N5MZH5A6.js";
108
+ import "../chunk-EPCXUP3P.js";
109
+ import "../chunk-NGDD6TXY.js";
110
+ import "../chunk-CVQYGMSR.js";
120
111
  import "../chunk-POFBE6ZY.js";
121
112
  import {
122
113
  describeReach,
@@ -125,7 +116,7 @@ import {
125
116
  reachVerdict,
126
117
  roundTripEvidence,
127
118
  verifyRoundTrip
128
- } from "../chunk-YPUBA2FL.js";
119
+ } from "../chunk-M5JDZ45W.js";
129
120
  import "../chunk-3EGEA4KH.js";
130
121
  import "../chunk-QCGNGEGE.js";
131
122
  import {
@@ -133,7 +124,7 @@ import {
133
124
  } from "../chunk-U4TMAANR.js";
134
125
  import {
135
126
  exitOnHelpFlag
136
- } from "../chunk-5S2VBSJI.js";
127
+ } from "../chunk-HZVVNGEW.js";
137
128
  import {
138
129
  parseFlags
139
130
  } from "../chunk-GMXKITVA.js";
@@ -141,26 +132,26 @@ import {
141
132
  keyPrefix,
142
133
  readControlMode,
143
134
  readKeySource
144
- } from "../chunk-D6OODZCM.js";
135
+ } from "../chunk-P7WQEVWA.js";
145
136
  import {
146
137
  callMcpTool,
147
138
  sendMcpRequest
148
- } from "../chunk-VE7TXLR4.js";
139
+ } from "../chunk-M5ICYGHT.js";
149
140
  import {
150
141
  checkApiKey,
151
142
  describeKeyCheck
152
- } from "../chunk-EEEJ2JIL.js";
153
- import "../chunk-DUQO4C4I.js";
143
+ } from "../chunk-2ABTSGFT.js";
144
+ import "../chunk-2OY3ZZ5N.js";
154
145
  import {
155
146
  getMachineId
156
- } from "../chunk-OVC5QXN5.js";
147
+ } from "../chunk-LXQ5FBBD.js";
157
148
  import {
158
149
  UsageError
159
150
  } from "../chunk-7QLSKOSU.js";
160
151
  import {
161
152
  EXIT
162
153
  } from "../chunk-KZERVKTD.js";
163
- import "../chunk-62CVUUNU.js";
154
+ import "../chunk-DB3ONZB4.js";
164
155
  import {
165
156
  CODEX_HOOK_EVENTS,
166
157
  autoUpdateState,
@@ -176,7 +167,6 @@ import {
176
167
  cursorPluginDir,
177
168
  cursorUserHooks,
178
169
  cursorUserMcp,
179
- execNpm,
180
170
  fetchLatestPublishedVersion,
181
171
  fxMcpProfile,
182
172
  fxSettings,
@@ -188,16 +178,17 @@ import {
188
178
  missingCodexHookEvents,
189
179
  pusharyConfigFile,
190
180
  readCodexMcpAuth,
181
+ readGlobalCliInstall,
191
182
  resolvePathBinary,
192
183
  vscodePluginDir
193
- } from "../chunk-MZBRL5H5.js";
184
+ } from "../chunk-A2A2YTMG.js";
194
185
  import "../chunk-T7E75EKA.js";
195
186
  import {
196
187
  getBaseUrl
197
- } from "../chunk-R6OYCUNK.js";
188
+ } from "../chunk-GPEGOGRJ.js";
198
189
  import {
199
190
  NPX_LATEST_COMMAND
200
- } from "../chunk-YYCTF4Q5.js";
191
+ } from "../chunk-E4FJTUH4.js";
201
192
  import {
202
193
  AGENTS,
203
194
  CURSOR_GATE_EVENTS,
@@ -206,12 +197,13 @@ import {
206
197
  HOOK_SOURCES,
207
198
  SUPPORT_DISCORD,
208
199
  SUPPORT_EMAIL,
200
+ commandsPackage,
209
201
  getPackageVersion,
210
202
  hookActivationResult,
211
203
  hookCompatibleProfile,
212
204
  isHookActivationReport,
213
205
  isNewerVersion
214
- } from "../chunk-G4GLCLKK.js";
206
+ } from "../chunk-NQTHFF4W.js";
215
207
 
216
208
  // bin/pushary-doctor.ts
217
209
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -221,6 +213,33 @@ import { execFileSync } from "child_process";
221
213
  import { confirm } from "@inquirer/prompts";
222
214
  import { parse as parseTOML } from "smol-toml";
223
215
 
216
+ // src/diagnostics/global-package.ts
217
+ var NOT_FOUND = "not found";
218
+ var NPM_PREFIX_UNREADABLE = "not found (npm could not report its global prefix)";
219
+ var BOTH_INSTALLED_WARNING = "npm uninstall -g of either name removes every Pushary command";
220
+ var describeInstalledPackage = (installed2) => installed2.version === void 0 ? `${installed2.name}, version unreadable` : `${installed2.name} ${installed2.version}`;
221
+ var describeCommandOwner = (owner) => owner.kind === "owned" ? `the commands run from ${owner.name}` : "which one owns the commands could not be read";
222
+ var globalPackageCheck = (install) => {
223
+ switch (install.kind) {
224
+ case "unavailable":
225
+ return { ok: false, detail: NPM_PREFIX_UNREADABLE, commands: void 0 };
226
+ case "absent":
227
+ return { ok: false, detail: NOT_FOUND, commands: void 0 };
228
+ case "single":
229
+ return {
230
+ ok: install.installed.version !== void 0,
231
+ detail: describeInstalledPackage(install.installed),
232
+ commands: install.installed
233
+ };
234
+ case "both":
235
+ return {
236
+ ok: false,
237
+ detail: `both installed: ${install.installed.map(describeInstalledPackage).join(" and ")}; ${describeCommandOwner(install.owner)}; ${BOTH_INSTALLED_WARNING}`,
238
+ commands: commandsPackage(install)
239
+ };
240
+ }
241
+ };
242
+
224
243
  // src/diagnostics/auto-update.ts
225
244
  var globalPackageFreshness = (installed2, latest) => isNewerVersion(latest, installed2) ? { upToDate: false, detail: `${installed2} installed, ${latest} available \u2014 run ${NPX_LATEST_COMMAND} upgrade` } : { upToDate: true, detail: installed2 };
226
245
  var AUTO_UPDATE_ON = "on: once a day at session start, within the same major version";
@@ -254,22 +273,21 @@ var describeAutoUpdateStatus = (input) => {
254
273
 
255
274
  // src/diagnostics/bundle.ts
256
275
  import { homedir, hostname } from "os";
257
- var globalVersion = () => {
258
- try {
259
- return execNpm("list -g --no-workspaces @pushary/agent-hooks --depth=0", { timeout: 1e4 }).toString().match(/@pushary\/agent-hooks@([\d.]+)/)?.[1] ?? null;
260
- } catch {
261
- return null;
262
- }
276
+ var installedGlobalPackages = (install) => {
277
+ if (install.kind === "single") return [install.installed];
278
+ if (install.kind === "both") return install.installed;
279
+ return [];
263
280
  };
264
281
  var collectBundle = async (options2 = {}) => {
265
282
  const now = options2.now ?? (() => /* @__PURE__ */ new Date());
266
- const readGlobalVersion = options2.readGlobalVersion ?? globalVersion;
283
+ const globalInstall = (options2.readGlobalInstall ?? readGlobalCliInstall)();
267
284
  const source = readKeySource();
268
285
  const identity = options2.identity ?? null;
269
286
  return {
270
287
  generatedAt: now().toISOString(),
271
288
  cliVersion: getPackageVersion(),
272
- globalVersion: readGlobalVersion(),
289
+ globalVersion: commandsPackage(globalInstall)?.version ?? null,
290
+ globalPackages: installedGlobalPackages(globalInstall),
273
291
  node: process.version,
274
292
  platform: process.platform,
275
293
  arch: process.arch,
@@ -483,12 +501,6 @@ var reportHermesStatus = (status) => {
483
501
  if (status.questionsRouted) check(true, "Hermes: questions go through Pushary", `clarify is off in ${config}`);
484
502
  else console.log(` ${warn} Hermes: questions can stop in the terminal ${dim(`(clarify is not in agent.disabled_toolsets in ${config})`)}`);
485
503
  };
486
- var fxSettingsProblem = (read) => {
487
- if (read.kind === "missing") return `${fxSettings()} is missing, so fx runs with no Pushary rules; re-run ${retryAgentCommand("fx")}`;
488
- if (read.kind === "unreadable") return `${fxSettings()} could not be read`;
489
- if (read.kind === "refused") return `${fxSettings()} ${FX_SETTINGS_REFUSALS[read.reason]}`;
490
- return null;
491
- };
492
504
  var FX_QUESTION_ROUTING_WARNINGS = {
493
505
  "full-access": "full-access mode ignores permission rules, so fx's terminal question tool stays on; its instructions ask it to use Pushary instead",
494
506
  overridden: `a rule in ${fxSettings()} keeps ${FX_QUESTION_TOOL} on; make "${FX_QUESTION_TOOL}": "deny" the last rule that matches it`
@@ -1112,27 +1124,25 @@ var main = async () => {
1112
1124
  } else {
1113
1125
  skipped("OpenCode", installed("opencode") ? "installed, but Pushary is not set up for it" : "not installed");
1114
1126
  }
1115
- const fxProfile = readFxFile(fxMcpProfile(), readFxProfile);
1116
- const fxEntry = fxProfile.kind === "profile" ? fxPusharyEntryOf(fxProfile.profile) : void 0;
1117
- if (isFxPusharyEntry(fxEntry)) {
1127
+ const fx = inspectFxInstallation(fxMcpProfile(), fxSettings(), process.env);
1128
+ const fxProfile = fx.profile;
1129
+ if (fx.configured) {
1118
1130
  checking("fx");
1119
1131
  check(true, "fx: Pushary MCP server configured", fxMcpProfile());
1120
- const bridge = fxBridgeTargetOf(fxEntry);
1132
+ const bridge = fx.bridge;
1121
1133
  if (bridge) {
1122
1134
  const found = fxBridgeFound(bridge);
1123
1135
  check(found, "fx: bridge binary resolves", found ? bridge : `${bridge} is not installed or not on PATH \u2014 re-run ${retryAgentCommand("fx")}`);
1124
1136
  }
1125
- const fxSettingsRead = readFxFile(fxSettings(), readFxSettings);
1126
- const settingsProblem = fxSettingsProblem(fxSettingsRead);
1127
- const fxSettings2 = fxSettingsRead.kind === "settings" ? fxSettingsRead.settings : {};
1137
+ const settingsProblem = fx.settingsProblem;
1128
1138
  if (settingsProblem) {
1129
1139
  console.log(` ${warn} fx: Pushary tools are not auto-allowed and questions can still stop in the terminal ${dim(`(${settingsProblem})`)}`);
1130
- } else if (!pusharyToolsAllowed(fxSettings2)) {
1140
+ } else if (!fx.toolsAllowed) {
1131
1141
  console.log(` ${warn} fx: Pushary tools are not auto-allowed ${dim(`(fx will review or prompt for each call; add "${FX_PUSHARY_TOOLS_RULE}": "allow" to permission in ${fxSettings()})`)}`);
1132
1142
  }
1133
- const questionRouting = fxQuestionRouting(fxSettings2, process.env);
1143
+ const questionRouting = fx.questionRouting;
1134
1144
  if (settingsProblem === null) reportFxQuestionRouting(questionRouting);
1135
- const workspacesShowingQuestions = workspacesShowingQuestionTool(fxSettings2);
1145
+ const workspacesShowingQuestions = fx.workspacesShowingQuestions;
1136
1146
  if (workspacesShowingQuestions.length > 0) {
1137
1147
  console.log(` ${warn} fx: ${workspacesShowingQuestions.length} workspace(s) replace the global rules and keep ${FX_QUESTION_TOOL} on ${dim(`(add "${FX_QUESTION_TOOL}": "deny" to their permission rules in ${fxSettings()})`)}`);
1138
1148
  }
@@ -1164,17 +1174,13 @@ var main = async () => {
1164
1174
  if (claudeInPlay) {
1165
1175
  check(existsSync(SKILL_PATH), "Skill installed", existsSync(SKILL_PATH) ? SKILL_PATH : "not found");
1166
1176
  }
1167
- let globalVersion2 = "";
1168
- try {
1169
- globalVersion2 = execNpm("list -g --no-workspaces @pushary/agent-hooks --depth=0", { timeout: 1e4 }).toString().match(/@pushary\/agent-hooks@([\d.]+)/)?.[1] ?? "";
1170
- } catch {
1171
- globalVersion2 = "";
1172
- }
1173
- check(!!globalVersion2, "Global package installed", globalVersion2 || "not found");
1174
- if (globalVersion2) {
1175
- const latest = await fetchLatestPublishedVersion();
1177
+ const globalPackage = globalPackageCheck(readGlobalCliInstall());
1178
+ const globalVersion = globalPackage.commands?.version ?? "";
1179
+ check(globalPackage.ok, "Global package installed", globalPackage.detail);
1180
+ if (globalPackage.commands && globalVersion) {
1181
+ const latest = await fetchLatestPublishedVersion({ packageName: globalPackage.commands.name });
1176
1182
  if (latest) {
1177
- const freshness = globalPackageFreshness(globalVersion2, latest);
1183
+ const freshness = globalPackageFreshness(globalVersion, latest);
1178
1184
  check(freshness.upToDate, "Global package up to date", freshness.detail);
1179
1185
  }
1180
1186
  }
@@ -1194,7 +1200,7 @@ var main = async () => {
1194
1200
  }
1195
1201
  });
1196
1202
  if (aliasRc) {
1197
- if (globalVersion2) {
1203
+ if (globalVersion) {
1198
1204
  check(true, "claude alias \u2192 pushary claude", `set in ${aliasRc.split("/").pop()}`);
1199
1205
  } else {
1200
1206
  check(false, "claude alias \u2192 pushary claude", "alias is set but pushary is not installed \u2014 run `unalias claude` (this shell) or reinstall");