@pushary/agent-hooks 1.5.0 → 1.5.1

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 (59) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -1
  3. package/dist/bin/pushary-bell-hook.js +9 -9
  4. package/dist/bin/pushary-bell.js +2 -2
  5. package/dist/bin/pushary-claude.js +10 -10
  6. package/dist/bin/pushary-clean.js +12 -12
  7. package/dist/bin/pushary-codex-bridge.js +4 -4
  8. package/dist/bin/pushary-codex-hook.js +13 -13
  9. package/dist/bin/pushary-codex.js +3 -3
  10. package/dist/bin/pushary-daemon.js +15 -14
  11. package/dist/bin/pushary-disconnect.js +6 -6
  12. package/dist/bin/pushary-doctor.js +43 -15
  13. package/dist/bin/pushary-elicitation-hook.js +9 -9
  14. package/dist/bin/pushary-gemini-bridge.js +3 -3
  15. package/dist/bin/pushary-gemini-hook.js +11 -11
  16. package/dist/bin/pushary-hook.js +14 -14
  17. package/dist/bin/pushary-login.js +3 -3
  18. package/dist/bin/pushary-logout.js +1 -1
  19. package/dist/bin/pushary-notification-hook.js +12 -12
  20. package/dist/bin/pushary-opencode-hook.js +10 -10
  21. package/dist/bin/pushary-permission-denied-hook.js +14 -14
  22. package/dist/bin/pushary-permission-hook.js +14 -14
  23. package/dist/bin/pushary-post-hook.js +12 -12
  24. package/dist/bin/pushary-prompt-hook.js +12 -12
  25. package/dist/bin/pushary-session-end-hook.js +12 -12
  26. package/dist/bin/pushary-session-start-hook.js +16 -15
  27. package/dist/bin/pushary-setup.js +52 -51
  28. package/dist/bin/pushary-status.js +5 -5
  29. package/dist/bin/pushary-stop-hook.js +12 -12
  30. package/dist/bin/pushary-stopfailure-hook.js +12 -12
  31. package/dist/bin/pushary-transcript-register.js +8 -8
  32. package/dist/bin/pushary-upgrade.js +57 -27
  33. package/dist/{chunk-EADZPVYW.js → chunk-2AUIEZYS.js} +1 -1
  34. package/dist/{chunk-J4J45VPZ.js → chunk-4ERLRNOK.js} +2 -2
  35. package/dist/{chunk-SOCEY746.js → chunk-5UQ5ATIE.js} +1 -1
  36. package/dist/{chunk-KEOLNHR3.js → chunk-5ZZG76S2.js} +1 -1
  37. package/dist/chunk-6EEANS74.js +300 -0
  38. package/dist/{chunk-DYHXOXUF.js → chunk-6IU45EHE.js} +6 -20
  39. package/dist/{chunk-ORLJNJEO.js → chunk-6QFEQIPM.js} +1 -1
  40. package/dist/chunk-BY2CRWBO.js +38 -0
  41. package/dist/{chunk-FDHMNT24.js → chunk-D573TLP6.js} +1 -1
  42. package/dist/{chunk-3NBODGQS.js → chunk-HUAOMX4U.js} +1 -1
  43. package/dist/{chunk-F57RGL7K.js → chunk-IV3RHICU.js} +3 -3
  44. package/dist/{chunk-PNNBMH4E.js → chunk-JKBDGZFL.js} +12 -6
  45. package/dist/{chunk-DLJN5XEU.js → chunk-KHXVTWYS.js} +1 -1
  46. package/dist/{chunk-MYP4UUFH.js → chunk-M2LMXPJZ.js} +1 -1
  47. package/dist/{chunk-CQYHOHOK.js → chunk-MDJJW3LP.js} +2 -2
  48. package/dist/{chunk-OSSDK5RS.js → chunk-MU3WU2FO.js} +6 -2
  49. package/dist/{chunk-IYTQ4B5I.js → chunk-PJ27EHCD.js} +4 -4
  50. package/dist/{chunk-JF736N4C.js → chunk-R5KY3PBN.js} +4 -4
  51. package/dist/{chunk-NFKVRMTM.js → chunk-TZGCUNOX.js} +3 -3
  52. package/dist/{chunk-PCGZXWGQ.js → chunk-WNJSGZY7.js} +2 -2
  53. package/dist/{chunk-UQHUUZ5H.js → chunk-WOLPADR6.js} +1 -1
  54. package/dist/{chunk-7XT76LWT.js → chunk-X7FESZTD.js} +2 -2
  55. package/dist/{chunk-H5LHTC5X.js → chunk-YAWXKL2X.js} +1 -1
  56. package/dist/{chunk-NTQSICPJ.js → chunk-Z4VGIBJ7.js} +2 -2
  57. package/dist/{reapply-D2TFN6XK.js → reapply-5CZSTJZI.js} +10 -6
  58. package/dist/src/index.js +8 -8
  59. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.1
4
+
5
+ - Setup no longer stops at a Codex version. It writes the Pushary hooks, asks Codex to trust them, and checks Codex's answer. It used to trust the hooks itself only up to Codex 0.155.1, and on anything newer told you to open Codex and trust them by hand.
6
+ - Pushary asks Codex only when you run setup, upgrade or doctor yourself at a terminal, only through the `codex` command on your PATH, and only if Codex has been opened on this machine before. It never starts the Codex inside the ChatGPT app, and never while a hook is running.
7
+ - If Codex does not accept the trust, setup says so and tells you to open Codex, run `/hooks`, and choose Trust for the Pushary hooks. When Codex is not asked, setup says why in one line and keeps the trust entries it wrote itself, as it did before.
8
+ - `pushary upgrade` asks Codex the same way after it refreshes the Codex hooks. The daily automatic update refreshes the hooks and writes the same trust entries but does not start Codex, so an install left untrusted by the old version limit is fixed on its next update either way. Machines older than 1.5.0 do not update themselves: run `npx @pushary/agent-hooks@latest upgrade` once.
9
+ - `pushary doctor` shows what Codex itself reports for each Pushary hook: trusted, untrusted, modified, not listed, or turned off. When Codex is not asked or cannot be asked, doctor says so and uses its own check instead.
10
+ - Pause automatic updates on Linux to preserve phone-started sessions during daemon replacement.
11
+ - Retry incomplete configuration and daemon refreshes after an automatic installation, including when the installed version is already current.
12
+
3
13
  ## 1.5.0
4
14
 
5
15
  - Pushary now updates itself in the background. When an agent session starts, it checks at most once a day for a newer version within the same major version, installs it into the global npm folder your hooks already run from, and refreshes each agent's config the way `pushary upgrade` does. The session never waits for it. A new major version is shown in `pushary doctor` and left for you to install.
package/README.md CHANGED
@@ -258,7 +258,8 @@ The session does not wait for it, and the new version runs from the next hook ca
258
258
  app updates by its own route.
259
259
  - It never uses `sudo`. If npm cannot write to the global folder, the attempt is
260
260
  recorded as failed and nothing changes.
261
- - It does not run on Windows yet, or when `CI` is set.
261
+ - It does not run on Windows yet, or when `CI` is set. Linux automatic updates are paused because restarting the systemd daemon can terminate phone-started sessions. On Linux, finish running sessions before upgrading manually.
262
+ - If installation succeeds but configuration refresh fails, the next automatic check or manual upgrade retries the refresh before checking for another release.
262
263
 
263
264
  Turn it off with either of these:
264
265
 
@@ -4,23 +4,23 @@ import {
4
4
  } from "../chunk-DTQNDR7C.js";
5
5
  import {
6
6
  readHookInput
7
- } from "../chunk-ORLJNJEO.js";
8
- import "../chunk-NFKVRMTM.js";
7
+ } from "../chunk-6QFEQIPM.js";
8
+ import "../chunk-TZGCUNOX.js";
9
9
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-PCGZXWGQ.js";
10
+ import "../chunk-WNJSGZY7.js";
11
11
  import "../chunk-TFKBFQCE.js";
12
12
  import "../chunk-K3QVDAZW.js";
13
- import "../chunk-NTQSICPJ.js";
14
- import "../chunk-7XT76LWT.js";
15
- import "../chunk-EADZPVYW.js";
16
- import "../chunk-SOCEY746.js";
13
+ import "../chunk-Z4VGIBJ7.js";
14
+ import "../chunk-X7FESZTD.js";
15
+ import "../chunk-2AUIEZYS.js";
16
+ import "../chunk-5UQ5ATIE.js";
17
17
  import "../chunk-TIWURSLS.js";
18
18
  import "../chunk-66H2QQAK.js";
19
19
  import "../chunk-2QT3GCU4.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
21
  import "../chunk-UYDTFCHW.js";
22
- import "../chunk-UQHUUZ5H.js";
23
- import "../chunk-DYHXOXUF.js";
22
+ import "../chunk-WOLPADR6.js";
23
+ import "../chunk-6IU45EHE.js";
24
24
  import "../chunk-GMXKITVA.js";
25
25
  import "../chunk-USQDVBEV.js";
26
26
  import "../chunk-7QLSKOSU.js";
@@ -10,10 +10,10 @@ import {
10
10
  addBellHooks,
11
11
  bellInstalled,
12
12
  removeBellHooks
13
- } from "../chunk-SOCEY746.js";
13
+ } from "../chunk-5UQ5ATIE.js";
14
14
  import {
15
15
  claudeSettings
16
- } from "../chunk-DYHXOXUF.js";
16
+ } from "../chunk-6IU45EHE.js";
17
17
  import {
18
18
  createIo
19
19
  } from "../chunk-5RUIFDTP.js";
@@ -8,7 +8,7 @@ import {
8
8
  describeIdleWindow,
9
9
  startProcessOwnership,
10
10
  withSpawnProcessOwnership
11
- } from "../chunk-MYP4UUFH.js";
11
+ } from "../chunk-M2LMXPJZ.js";
12
12
  import {
13
13
  isDeferAnswer
14
14
  } from "../chunk-YHG74UFF.js";
@@ -17,17 +17,17 @@ import {
17
17
  loadSessionKey,
18
18
  registerTranscript,
19
19
  registeredTranscriptEnabled
20
- } from "../chunk-NFKVRMTM.js";
20
+ } from "../chunk-TZGCUNOX.js";
21
21
  import "../chunk-SGZJ5LYH.js";
22
- import "../chunk-PCGZXWGQ.js";
22
+ import "../chunk-WNJSGZY7.js";
23
23
  import "../chunk-TFKBFQCE.js";
24
24
  import "../chunk-K3QVDAZW.js";
25
- import "../chunk-NTQSICPJ.js";
25
+ import "../chunk-Z4VGIBJ7.js";
26
26
  import {
27
27
  ensureDaemonRunning
28
- } from "../chunk-7XT76LWT.js";
29
- import "../chunk-EADZPVYW.js";
30
- import "../chunk-SOCEY746.js";
28
+ } from "../chunk-X7FESZTD.js";
29
+ import "../chunk-2AUIEZYS.js";
30
+ import "../chunk-5UQ5ATIE.js";
31
31
  import {
32
32
  encryptRecord
33
33
  } from "../chunk-TIWURSLS.js";
@@ -56,7 +56,7 @@ import {
56
56
  reportEvent,
57
57
  savePendingCommand,
58
58
  scopePathFor
59
- } from "../chunk-FDHMNT24.js";
59
+ } from "../chunk-D573TLP6.js";
60
60
  import "../chunk-UYDTFCHW.js";
61
61
  import {
62
62
  DECISION_STOP_REASON,
@@ -70,8 +70,8 @@ import {
70
70
  } from "../chunk-PYCQXCI5.js";
71
71
  import {
72
72
  getMachineId
73
- } from "../chunk-UQHUUZ5H.js";
74
- import "../chunk-DYHXOXUF.js";
73
+ } from "../chunk-WOLPADR6.js";
74
+ import "../chunk-6IU45EHE.js";
75
75
  import "../chunk-GMXKITVA.js";
76
76
  import "../chunk-USQDVBEV.js";
77
77
  import "../chunk-HETOKNIL.js";
@@ -7,14 +7,14 @@ import {
7
7
  createGuards,
8
8
  resolveHermesPython,
9
9
  runHermesPythonScript
10
- } from "../chunk-H5LHTC5X.js";
10
+ } from "../chunk-YAWXKL2X.js";
11
11
  import "../chunk-P32LPT2L.js";
12
12
  import {
13
13
  removeInstructionBlock,
14
14
  shortenHome,
15
15
  unregisterPluginLocation,
16
16
  vscodeSettingsTargets
17
- } from "../chunk-DLJN5XEU.js";
17
+ } from "../chunk-KHXVTWYS.js";
18
18
  import {
19
19
  OPENCODE_PLUGIN_SIBLING,
20
20
  OPENCODE_PLUGIN_SIBLING_CONTENTS,
@@ -32,20 +32,20 @@ import {
32
32
  compatiblePermissionRuleFile,
33
33
  removeCompatibleHooks,
34
34
  removeCompatibleMcpServer
35
- } from "../chunk-JF736N4C.js";
35
+ } from "../chunk-R5KY3PBN.js";
36
36
  import {
37
37
  isClaudeMcpSnapshot,
38
38
  removeClaudeMcpServers,
39
39
  removePusharySettings,
40
40
  removePusharyToolPermissions,
41
41
  restoreClaudeMcpServer
42
- } from "../chunk-J4J45VPZ.js";
42
+ } from "../chunk-4ERLRNOK.js";
43
43
  import {
44
44
  hookOwnerOf,
45
45
  isHookTakeoverReceipt,
46
46
  restoreHookTakeover,
47
47
  restoreMcpServer
48
- } from "../chunk-PCGZXWGQ.js";
48
+ } from "../chunk-WNJSGZY7.js";
49
49
  import "../chunk-TFKBFQCE.js";
50
50
  import {
51
51
  liveBridgeProbe,
@@ -53,19 +53,19 @@ import {
53
53
  } from "../chunk-K3QVDAZW.js";
54
54
  import {
55
55
  pusharyHookExecutable
56
- } from "../chunk-NTQSICPJ.js";
56
+ } from "../chunk-Z4VGIBJ7.js";
57
57
  import {
58
58
  disableDaemonService
59
- } from "../chunk-7XT76LWT.js";
59
+ } from "../chunk-X7FESZTD.js";
60
60
  import {
61
61
  removeGeminiSettings
62
- } from "../chunk-EADZPVYW.js";
63
- import "../chunk-SOCEY746.js";
62
+ } from "../chunk-2AUIEZYS.js";
63
+ import "../chunk-5UQ5ATIE.js";
64
64
  import "../chunk-XHKBHWLX.js";
65
- import "../chunk-FDHMNT24.js";
65
+ import "../chunk-D573TLP6.js";
66
66
  import "../chunk-UYDTFCHW.js";
67
67
  import "../chunk-PYCQXCI5.js";
68
- import "../chunk-UQHUUZ5H.js";
68
+ import "../chunk-WOLPADR6.js";
69
69
  import {
70
70
  bridgeAgentKey,
71
71
  claudeJson,
@@ -94,7 +94,7 @@ import {
94
94
  restoreCodexHookTrust,
95
95
  vscodePluginDir,
96
96
  vscodePluginMcp
97
- } from "../chunk-DYHXOXUF.js";
97
+ } from "../chunk-6IU45EHE.js";
98
98
  import {
99
99
  exitOnHelpFlag
100
100
  } from "../chunk-P4BNYJ5Q.js";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import "../chunk-KEOLNHR3.js";
2
+ import "../chunk-5ZZG76S2.js";
3
3
  import {
4
4
  LiveTranscriptRelay,
5
5
  liveSessionSleep,
@@ -13,7 +13,7 @@ import {
13
13
  idleDeadlinePassed,
14
14
  startProcessOwnership,
15
15
  withSpawnProcessOwnership
16
- } from "../chunk-MYP4UUFH.js";
16
+ } from "../chunk-M2LMXPJZ.js";
17
17
  import "../chunk-TIWURSLS.js";
18
18
  import "../chunk-66H2QQAK.js";
19
19
  import {
@@ -28,10 +28,10 @@ import {
28
28
  } from "../chunk-PYCQXCI5.js";
29
29
  import {
30
30
  getMachineId
31
- } from "../chunk-UQHUUZ5H.js";
31
+ } from "../chunk-WOLPADR6.js";
32
32
  import {
33
33
  resolveBinary
34
- } from "../chunk-DYHXOXUF.js";
34
+ } from "../chunk-6IU45EHE.js";
35
35
  import "../chunk-USQDVBEV.js";
36
36
  import {
37
37
  callMcpTool
@@ -13,30 +13,30 @@ import {
13
13
  recordCodexCallDecision,
14
14
  reportMachineDenial,
15
15
  userScope
16
- } from "../chunk-CQYHOHOK.js";
16
+ } from "../chunk-MDJJW3LP.js";
17
17
  import {
18
18
  triggerAutoUpdate
19
- } from "../chunk-OSSDK5RS.js";
19
+ } from "../chunk-MU3WU2FO.js";
20
20
  import {
21
21
  isGatingMoment,
22
22
  recordKeylessMoment
23
23
  } from "../chunk-43ZDACBO.js";
24
24
  import {
25
25
  readHookInput
26
- } from "../chunk-ORLJNJEO.js";
26
+ } from "../chunk-6QFEQIPM.js";
27
27
  import {
28
28
  denyReasonFrom,
29
29
  isDeferAnswer
30
30
  } from "../chunk-YHG74UFF.js";
31
- import "../chunk-NFKVRMTM.js";
31
+ import "../chunk-TZGCUNOX.js";
32
32
  import "../chunk-SGZJ5LYH.js";
33
- import "../chunk-PCGZXWGQ.js";
33
+ import "../chunk-WNJSGZY7.js";
34
34
  import "../chunk-TFKBFQCE.js";
35
35
  import "../chunk-K3QVDAZW.js";
36
- import "../chunk-NTQSICPJ.js";
37
- import "../chunk-7XT76LWT.js";
38
- import "../chunk-EADZPVYW.js";
39
- import "../chunk-SOCEY746.js";
36
+ import "../chunk-Z4VGIBJ7.js";
37
+ import "../chunk-X7FESZTD.js";
38
+ import "../chunk-2AUIEZYS.js";
39
+ import "../chunk-5UQ5ATIE.js";
40
40
  import "../chunk-TIWURSLS.js";
41
41
  import "../chunk-66H2QQAK.js";
42
42
  import "../chunk-2QT3GCU4.js";
@@ -76,7 +76,7 @@ import {
76
76
  toCodexWire,
77
77
  toPolicyLookup,
78
78
  toPolicyLookups
79
- } from "../chunk-FDHMNT24.js";
79
+ } from "../chunk-D573TLP6.js";
80
80
  import "../chunk-UYDTFCHW.js";
81
81
  import {
82
82
  DECISION_STOP_REASON,
@@ -92,10 +92,10 @@ import {
92
92
  } from "../chunk-PYCQXCI5.js";
93
93
  import {
94
94
  getMachineId
95
- } from "../chunk-UQHUUZ5H.js";
95
+ } from "../chunk-WOLPADR6.js";
96
96
  import {
97
97
  canonicalJson
98
- } from "../chunk-DYHXOXUF.js";
98
+ } from "../chunk-6IU45EHE.js";
99
99
  import "../chunk-GMXKITVA.js";
100
100
  import "../chunk-USQDVBEV.js";
101
101
  import "../chunk-HETOKNIL.js";
@@ -745,7 +745,7 @@ var decidePreToolUse = async (input) => {
745
745
  };
746
746
  var repairCodexHoldsQuietly = async () => {
747
747
  try {
748
- const { repairCodexHolds } = await import("../reapply-D2TFN6XK.js");
748
+ const { repairCodexHolds } = await import("../reapply-5CZSTJZI.js");
749
749
  repairCodexHolds();
750
750
  } catch {
751
751
  return;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reportEvent
4
- } from "../chunk-FDHMNT24.js";
4
+ } from "../chunk-D573TLP6.js";
5
5
  import "../chunk-UYDTFCHW.js";
6
6
  import {
7
7
  askUser,
@@ -10,8 +10,8 @@ import {
10
10
  } from "../chunk-PYCQXCI5.js";
11
11
  import {
12
12
  getMachineId
13
- } from "../chunk-UQHUUZ5H.js";
14
- import "../chunk-DYHXOXUF.js";
13
+ } from "../chunk-WOLPADR6.js";
14
+ import "../chunk-6IU45EHE.js";
15
15
  import "../chunk-HETOKNIL.js";
16
16
  import "../chunk-SAF6HGAA.js";
17
17
  import "../chunk-7QLSKOSU.js";
@@ -1,18 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  inspectConfiguredManagedProviders
4
- } from "../chunk-PNNBMH4E.js";
5
- import "../chunk-3NBODGQS.js";
4
+ } from "../chunk-JKBDGZFL.js";
5
+ import "../chunk-HUAOMX4U.js";
6
+ import "../chunk-6EEANS74.js";
6
7
  import {
7
8
  HEARTBEAT_INTERVAL_MS,
8
9
  sendHeartbeat
9
- } from "../chunk-F57RGL7K.js";
10
- import "../chunk-J4J45VPZ.js";
10
+ } from "../chunk-IV3RHICU.js";
11
+ import "../chunk-4ERLRNOK.js";
11
12
  import {
12
13
  detectProviderLiveCapabilities,
13
14
  hasSpawnProvider,
14
15
  resolveControlPolicy
15
- } from "../chunk-KEOLNHR3.js";
16
+ } from "../chunk-5ZZG76S2.js";
16
17
  import {
17
18
  SESSION_REAP_SILENCE_MS,
18
19
  describeIdleWindow,
@@ -20,15 +21,15 @@ import {
20
21
  listProcessProofs,
21
22
  ownsLiveProcess,
22
23
  silentSpawnedProofs
23
- } from "../chunk-MYP4UUFH.js";
24
+ } from "../chunk-M2LMXPJZ.js";
24
25
  import {
25
26
  startRegisteredTranscripts
26
- } from "../chunk-NFKVRMTM.js";
27
+ } from "../chunk-TZGCUNOX.js";
27
28
  import "../chunk-SGZJ5LYH.js";
28
- import "../chunk-PCGZXWGQ.js";
29
+ import "../chunk-WNJSGZY7.js";
29
30
  import "../chunk-TFKBFQCE.js";
30
31
  import "../chunk-K3QVDAZW.js";
31
- import "../chunk-NTQSICPJ.js";
32
+ import "../chunk-Z4VGIBJ7.js";
32
33
  import {
33
34
  DAEMON_LEASE_RENEW_INTERVAL_MS,
34
35
  acquireDaemonLease,
@@ -45,9 +46,9 @@ import {
45
46
  requestDaemonHandoff,
46
47
  stopDaemonRunning,
47
48
  writeDaemonNeedsLogin
48
- } from "../chunk-7XT76LWT.js";
49
- import "../chunk-EADZPVYW.js";
50
- import "../chunk-SOCEY746.js";
49
+ } from "../chunk-X7FESZTD.js";
50
+ import "../chunk-2AUIEZYS.js";
51
+ import "../chunk-5UQ5ATIE.js";
51
52
  import "../chunk-TIWURSLS.js";
52
53
  import "../chunk-66H2QQAK.js";
53
54
  import "../chunk-2QT3GCU4.js";
@@ -57,10 +58,10 @@ import {
57
58
  import "../chunk-UYDTFCHW.js";
58
59
  import {
59
60
  getMachineId
60
- } from "../chunk-UQHUUZ5H.js";
61
+ } from "../chunk-WOLPADR6.js";
61
62
  import {
62
63
  resolveBinary
63
- } from "../chunk-DYHXOXUF.js";
64
+ } from "../chunk-6IU45EHE.js";
64
65
  import {
65
66
  writeHuman
66
67
  } from "../chunk-QCGNGEGE.js";
@@ -15,21 +15,21 @@ import {
15
15
  compatiblePermissionRuleFile,
16
16
  removeCompatibleHooks,
17
17
  removeCompatibleMcpServer
18
- } from "../chunk-JF736N4C.js";
18
+ } from "../chunk-R5KY3PBN.js";
19
19
  import {
20
20
  isClaudeMcpSnapshot,
21
21
  removeClaudeMcpServers,
22
22
  removePusharySettings,
23
23
  removePusharyToolPermissions,
24
24
  restoreClaudeMcpServer
25
- } from "../chunk-J4J45VPZ.js";
25
+ } from "../chunk-4ERLRNOK.js";
26
26
  import {
27
27
  removeGeminiSettings
28
- } from "../chunk-EADZPVYW.js";
29
- import "../chunk-FDHMNT24.js";
28
+ } from "../chunk-2AUIEZYS.js";
29
+ import "../chunk-D573TLP6.js";
30
30
  import "../chunk-UYDTFCHW.js";
31
31
  import "../chunk-PYCQXCI5.js";
32
- import "../chunk-UQHUUZ5H.js";
32
+ import "../chunk-WOLPADR6.js";
33
33
  import {
34
34
  claudeJson,
35
35
  claudeMcpReceipt,
@@ -43,7 +43,7 @@ import {
43
43
  geminiSettings,
44
44
  removeCodexHooks,
45
45
  removeCodexSettings
46
- } from "../chunk-DYHXOXUF.js";
46
+ } from "../chunk-6IU45EHE.js";
47
47
  import {
48
48
  exitOnHelpFlag
49
49
  } from "../chunk-P4BNYJ5Q.js";
@@ -6,10 +6,14 @@ import {
6
6
  readServiceExecPath,
7
7
  versionManagerOf
8
8
  } from "../chunk-GU3EJCVV.js";
9
+ import {
10
+ assessCodexHookTrust,
11
+ readCodexTrustForPusharyHooks
12
+ } from "../chunk-6EEANS74.js";
9
13
  import {
10
14
  readMachineReadiness,
11
15
  readManagedControlEvidence
12
- } from "../chunk-F57RGL7K.js";
16
+ } from "../chunk-IV3RHICU.js";
13
17
  import {
14
18
  CURSOR_GATE_SCRIPT
15
19
  } from "../chunk-P32LPT2L.js";
@@ -22,7 +26,7 @@ import {
22
26
  isPluginRegistered,
23
27
  shortenHome,
24
28
  vscodeSettingsTargets
25
- } from "../chunk-DLJN5XEU.js";
29
+ } from "../chunk-KHXVTWYS.js";
26
30
  import {
27
31
  OPENCODE_PLUGIN_PLACEHOLDER,
28
32
  openCodePluginDir,
@@ -35,13 +39,13 @@ import {
35
39
  compatibleMcpFile,
36
40
  hasCompatibleHooks,
37
41
  missingCompatibleHookEvents
38
- } from "../chunk-JF736N4C.js";
39
- import "../chunk-J4J45VPZ.js";
42
+ } from "../chunk-R5KY3PBN.js";
43
+ import "../chunk-4ERLRNOK.js";
40
44
  import {
41
45
  detectProviderLiveCapabilities,
42
46
  hasSpawnProvider,
43
47
  resolveControlPolicy
44
- } from "../chunk-KEOLNHR3.js";
48
+ } from "../chunk-5ZZG76S2.js";
45
49
  import {
46
50
  AUTO_UPDATE_DISABLE_ENV,
47
51
  autoUpdateOffReason,
@@ -49,7 +53,7 @@ import {
49
53
  describeAutoUpdateCheck,
50
54
  readAutoUpdateState,
51
55
  takeAutoUpdateAnnouncement
52
- } from "../chunk-OSSDK5RS.js";
56
+ } from "../chunk-MU3WU2FO.js";
53
57
  import {
54
58
  readLedgerSummary
55
59
  } from "../chunk-43ZDACBO.js";
@@ -75,7 +79,7 @@ import {
75
79
  geminiWired,
76
80
  holdsLong,
77
81
  pusharyHookExecutable
78
- } from "../chunk-NTQSICPJ.js";
82
+ } from "../chunk-Z4VGIBJ7.js";
79
83
  import {
80
84
  daemonHasRemoteProof,
81
85
  daemonServiceManagerAvailable,
@@ -84,19 +88,19 @@ import {
84
88
  readDaemonNeedsLogin,
85
89
  readDaemonStatus,
86
90
  readInstalledDaemonService
87
- } from "../chunk-7XT76LWT.js";
91
+ } from "../chunk-X7FESZTD.js";
88
92
  import {
89
93
  GEMINI_HOOK_BINARY,
90
94
  hasGeminiHooks,
91
95
  missingGeminiHookEvents
92
- } from "../chunk-EADZPVYW.js";
96
+ } from "../chunk-2AUIEZYS.js";
93
97
  import "../chunk-XHKBHWLX.js";
94
- import "../chunk-FDHMNT24.js";
98
+ import "../chunk-D573TLP6.js";
95
99
  import "../chunk-UYDTFCHW.js";
96
100
  import "../chunk-PYCQXCI5.js";
97
101
  import {
98
102
  getMachineId
99
- } from "../chunk-UQHUUZ5H.js";
103
+ } from "../chunk-WOLPADR6.js";
100
104
  import {
101
105
  CODEX_HOOK_EVENTS,
102
106
  autoUpdateState,
@@ -121,7 +125,7 @@ import {
121
125
  pusharyConfigFile,
122
126
  readCodexMcpAuth,
123
127
  vscodePluginDir
124
- } from "../chunk-DYHXOXUF.js";
128
+ } from "../chunk-6IU45EHE.js";
125
129
  import {
126
130
  describeReach,
127
131
  describeRoundTrip,
@@ -201,7 +205,8 @@ var AUTO_UPDATE_OFF = {
201
205
  disabled_by_env: `off: ${AUTO_UPDATE_DISABLE_ENV} is set`,
202
206
  disabled_by_user: "off: turn it back on with pushary upgrade --auto=on",
203
207
  ci: "off in CI",
204
- windows: "not available on Windows yet"
208
+ windows: "not available on Windows yet",
209
+ linux: "paused on Linux to protect running sessions; upgrade manually after sessions finish"
205
210
  };
206
211
  var needsAttention = (input) => input.state.lastResult === "failed" || input.state.lastResult === "needs_manual" || Boolean(input.state.detail);
207
212
  var LAST_CHECK_LABEL = "Last automatic update check";
@@ -507,6 +512,21 @@ var reportOtherHolders = (agentLabel, holders) => {
507
512
  }
508
513
  console.log(` ${dim(describeHoldSentence(agentLabel))}`);
509
514
  };
515
+ var describeReadings = (readings) => readings.map((reading) => `${reading.event} ${reading.status}`).join(", ");
516
+ var CODEX_NONE_LISTED = "Codex lists none of the Pushary hooks, so it runs none of them. Check [features].hooks in config.toml, then re-run setup";
517
+ var reportCodexOwnTrust = (assessment) => {
518
+ if (assessment.kind === "unlisted") {
519
+ check(false, "Codex: hooks trusted", CODEX_NONE_LISTED);
520
+ return;
521
+ }
522
+ check(assessment.kind === "trusted", "Codex: hooks trusted", assessment.kind === "trusted" ? `Codex reports ${assessment.trusted} of ${assessment.total} trusted` : `Codex reports ${describeReadings(assessment.failures)}. Type /hooks in Codex and trust them, once`);
523
+ if (assessment.notListed.length > 0) {
524
+ console.log(` ${warn} Codex: does not list ${assessment.notListed.join(", ")} ${dim("(this Codex may not support those events yet)")}`);
525
+ }
526
+ if (assessment.disabled.length > 0) {
527
+ console.log(` ${warn} Codex: ${assessment.disabled.join(", ")} turned off in Codex ${dim("(turn them back on in /hooks)")}`);
528
+ }
529
+ };
510
530
  var skipped = (label, why) => {
511
531
  console.log(` ${dim("\u2013")} ${label} ${dim(`(${why})`)}`);
512
532
  };
@@ -722,16 +742,24 @@ var main = async () => {
722
742
  console.log(` ${warn} Codex: stale legacy notify entry ${dim("(double-push risk, re-run setup to remove it)")}`);
723
743
  }
724
744
  if (hookCommand) {
745
+ const positions = codexHookPositions(codexHooksConfig);
725
746
  const gaps = codexTrustGaps(
726
747
  codexParsed,
727
748
  codexHooksConfig,
728
749
  codexHooksPath,
729
750
  hookCommand,
730
- codexHookPositions(codexHooksConfig)
751
+ positions
731
752
  );
732
753
  const untrusted = gaps.filter((gap) => gap.kind === "untrusted").map((gap) => gap.event);
733
754
  const stale = gaps.filter((gap) => gap.kind === "stale").map((gap) => gap.event);
734
- check(untrusted.length === 0, "Codex: hooks trusted", untrusted.length === 0 ? "all events trusted" : `untrusted (${untrusted.join(", ")}) \u2014 type /hooks in Codex and trust them, once`);
755
+ const codexTrust = await readCodexTrustForPusharyHooks();
756
+ if (codexTrust.kind === "listed") {
757
+ reportCodexOwnTrust(assessCodexHookTrust(Object.keys(positions), codexTrust.hooks));
758
+ } else {
759
+ const why = codexTrust.kind === "skipped" ? "did not ask" : "could not ask";
760
+ console.log(` ${warn} Codex: ${why} Codex about hook trust ${dim(`(${codexTrust.reason}); checking Pushary's own record instead`)}`);
761
+ check(untrusted.length === 0, "Codex: hooks trusted", untrusted.length === 0 ? "all events trusted" : `untrusted (${untrusted.join(", ")}) \u2014 type /hooks in Codex and trust them, once`);
762
+ }
735
763
  if (stale.length > 0) {
736
764
  console.log(` ${warn} Codex: ${stale.join(", ")} trusted at an older shape ${dim("(fires normally; re-run setup to pick up the current one)")}`);
737
765
  }
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-ORLJNJEO.js";
4
+ } from "../chunk-6QFEQIPM.js";
5
5
  import {
6
6
  isDeferAnswer
7
7
  } from "../chunk-YHG74UFF.js";
8
- import "../chunk-NFKVRMTM.js";
8
+ import "../chunk-TZGCUNOX.js";
9
9
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-PCGZXWGQ.js";
10
+ import "../chunk-WNJSGZY7.js";
11
11
  import "../chunk-TFKBFQCE.js";
12
12
  import "../chunk-K3QVDAZW.js";
13
- import "../chunk-NTQSICPJ.js";
14
- import "../chunk-7XT76LWT.js";
15
- import "../chunk-EADZPVYW.js";
16
- import "../chunk-SOCEY746.js";
13
+ import "../chunk-Z4VGIBJ7.js";
14
+ import "../chunk-X7FESZTD.js";
15
+ import "../chunk-2AUIEZYS.js";
16
+ import "../chunk-5UQ5ATIE.js";
17
17
  import "../chunk-TIWURSLS.js";
18
18
  import "../chunk-66H2QQAK.js";
19
19
  import "../chunk-2QT3GCU4.js";
@@ -26,8 +26,8 @@ import {
26
26
  } from "../chunk-PYCQXCI5.js";
27
27
  import {
28
28
  getMachineId
29
- } from "../chunk-UQHUUZ5H.js";
30
- import "../chunk-DYHXOXUF.js";
29
+ } from "../chunk-WOLPADR6.js";
30
+ import "../chunk-6IU45EHE.js";
31
31
  import "../chunk-GMXKITVA.js";
32
32
  import "../chunk-USQDVBEV.js";
33
33
  import "../chunk-HETOKNIL.js";
@@ -12,7 +12,7 @@ import {
12
12
  idleDeadlinePassed,
13
13
  startProcessOwnership,
14
14
  withSpawnProcessOwnership
15
- } from "../chunk-MYP4UUFH.js";
15
+ } from "../chunk-M2LMXPJZ.js";
16
16
  import "../chunk-TIWURSLS.js";
17
17
  import "../chunk-66H2QQAK.js";
18
18
  import {
@@ -23,10 +23,10 @@ import {
23
23
  } from "../chunk-XHKBHWLX.js";
24
24
  import {
25
25
  getMachineId
26
- } from "../chunk-UQHUUZ5H.js";
26
+ } from "../chunk-WOLPADR6.js";
27
27
  import {
28
28
  resolveBinary
29
- } from "../chunk-DYHXOXUF.js";
29
+ } from "../chunk-6IU45EHE.js";
30
30
  import "../chunk-USQDVBEV.js";
31
31
  import "../chunk-HU5LSYL2.js";
32
32
  import "../chunk-T7E75EKA.js";