@pushary/agent-hooks 1.4.1 → 1.5.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 (92) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +27 -0
  3. package/data/vscode-plugin/README.md +1 -1
  4. package/data/vscode-plugin/scripts/pushary-gate.mjs +2 -2
  5. package/dist/bin/pushary-bell-hook.js +22 -21
  6. package/dist/bin/pushary-bell.js +10 -10
  7. package/dist/bin/pushary-claude.js +28 -24
  8. package/dist/bin/pushary-clean.js +30 -26
  9. package/dist/bin/pushary-codex-bridge.js +16 -14
  10. package/dist/bin/pushary-codex-hook.js +41 -31
  11. package/dist/bin/pushary-codex.js +15 -10
  12. package/dist/bin/pushary-connect.js +11 -11
  13. package/dist/bin/pushary-cowork.js +6 -6
  14. package/dist/bin/pushary-daemon.js +31 -28
  15. package/dist/bin/pushary-disconnect.js +16 -16
  16. package/dist/bin/pushary-doctor.js +81 -38
  17. package/dist/bin/pushary-elicitation-hook.js +23 -22
  18. package/dist/bin/pushary-gemini-bridge.js +13 -11
  19. package/dist/bin/pushary-gemini-hook.js +29 -24
  20. package/dist/bin/pushary-hook.js +30 -30
  21. package/dist/bin/pushary-login.js +14 -14
  22. package/dist/bin/pushary-logout.js +8 -8
  23. package/dist/bin/pushary-mode.js +7 -7
  24. package/dist/bin/pushary-notification-hook.js +26 -25
  25. package/dist/bin/pushary-opencode-hook.js +25 -24
  26. package/dist/bin/pushary-permission-denied-hook.js +30 -29
  27. package/dist/bin/pushary-permission-hook.js +29 -28
  28. package/dist/bin/pushary-post-hook.js +26 -25
  29. package/dist/bin/pushary-prompt-hook.js +26 -25
  30. package/dist/bin/pushary-session-end-hook.js +26 -25
  31. package/dist/bin/pushary-session-start-hook.js +32 -27
  32. package/dist/bin/pushary-setup.js +85 -59
  33. package/dist/bin/pushary-stats.js +6 -6
  34. package/dist/bin/pushary-status.js +15 -15
  35. package/dist/bin/pushary-stop-hook.js +26 -25
  36. package/dist/bin/pushary-stopfailure-hook.js +26 -25
  37. package/dist/bin/pushary-suggestions.js +4 -4
  38. package/dist/bin/pushary-transcript-register.js +20 -19
  39. package/dist/bin/pushary-transcripts.js +8 -8
  40. package/dist/bin/pushary-upgrade.js +231 -37
  41. package/dist/bin/pushary-wait.js +7 -7
  42. package/dist/bin/pushary.js +8 -8
  43. package/dist/{chunk-MN3XOVRK.js → chunk-2QT3GCU4.js} +1 -1
  44. package/dist/{chunk-LUT2EZLG.js → chunk-3NBODGQS.js} +1 -1
  45. package/dist/{chunk-43JKGLZZ.js → chunk-3ZSGKLSO.js} +2 -2
  46. package/dist/{chunk-QBS6LGEK.js → chunk-43LJSM4F.js} +2 -2
  47. package/dist/{chunk-SWFF5U2N.js → chunk-43ZDACBO.js} +1 -1
  48. package/dist/{chunk-HK3IXIQJ.js → chunk-5HYNICS7.js} +1 -1
  49. package/dist/{chunk-EQRS3SGM.js → chunk-66H2QQAK.js} +1 -1
  50. package/dist/{chunk-3BPB2HYZ.js → chunk-7XT76LWT.js} +7 -7
  51. package/dist/{chunk-ALFT7H5B.js → chunk-CQYHOHOK.js} +56 -5
  52. package/dist/{chunk-3UA6FPRC.js → chunk-DLJN5XEU.js} +3 -3
  53. package/dist/{chunk-BZBUPZC6.js → chunk-DTQNDR7C.js} +1 -1
  54. package/dist/{chunk-SAF6NNXY.js → chunk-DYHXOXUF.js} +43 -6
  55. package/dist/{chunk-FAH3D74E.js → chunk-EA3IELHP.js} +6 -0
  56. package/dist/{chunk-ED5TA2FJ.js → chunk-EADZPVYW.js} +3 -3
  57. package/dist/{chunk-I6HRQOMT.js → chunk-F57RGL7K.js} +8 -8
  58. package/dist/{chunk-LNGYW6G4.js → chunk-FDHMNT24.js} +20 -16
  59. package/dist/{chunk-37VLIYLI.js → chunk-H5LHTC5X.js} +1 -1
  60. package/dist/{chunk-EYRGBYZG.js → chunk-HETOKNIL.js} +1 -1
  61. package/dist/{chunk-K6I5M2ME.js → chunk-HU5LSYL2.js} +2 -2
  62. package/dist/{chunk-SKXLIVFM.js → chunk-HVBF35GT.js} +2 -2
  63. package/dist/{chunk-DINDL2CF.js → chunk-HWJW3CPO.js} +25 -5
  64. package/dist/{chunk-GOFDGTEI.js → chunk-IYTQ4B5I.js} +18 -45
  65. package/dist/{chunk-WIOXWUUH.js → chunk-J4J45VPZ.js} +3 -3
  66. package/dist/{chunk-HQLAZWJJ.js → chunk-JF736N4C.js} +5 -5
  67. package/dist/{chunk-LYXX5NSB.js → chunk-K3QVDAZW.js} +1 -1
  68. package/dist/{chunk-KI36MAT6.js → chunk-KEOLNHR3.js} +2 -2
  69. package/dist/{chunk-S3EP4B35.js → chunk-KJRALILH.js} +28 -11
  70. package/dist/{chunk-PHHGHHOW.js → chunk-MYP4UUFH.js} +1 -1
  71. package/dist/{chunk-TNS3YLFE.js → chunk-NFKVRMTM.js} +8 -8
  72. package/dist/{chunk-TF4IOINR.js → chunk-NTQSICPJ.js} +3 -3
  73. package/dist/{chunk-4FN6VV56.js → chunk-ORLJNJEO.js} +2 -2
  74. package/dist/{chunk-2UMNXADU.js → chunk-OSJEMXSR.js} +5 -1
  75. package/dist/chunk-OSSDK5RS.js +162 -0
  76. package/dist/{chunk-TWWLVOPB.js → chunk-P4BNYJ5Q.js} +5 -5
  77. package/dist/{chunk-KEMEBTCJ.js → chunk-PCGZXWGQ.js} +4 -4
  78. package/dist/{chunk-2GMI6JH6.js → chunk-PNNBMH4E.js} +5 -5
  79. package/dist/{chunk-LGXUGYUH.js → chunk-PYCQXCI5.js} +2 -2
  80. package/dist/{chunk-JOVWYVSR.js → chunk-SOCEY746.js} +1 -1
  81. package/dist/{chunk-FVKFDTN6.js → chunk-T4QY64OR.js} +19 -14
  82. package/dist/{chunk-R3AMKNIW.js → chunk-TFKBFQCE.js} +1 -1
  83. package/dist/{chunk-CRNAXFQ6.js → chunk-TIWURSLS.js} +1 -1
  84. package/dist/{chunk-VYUDGQM7.js → chunk-TUXFIVOH.js} +1 -1
  85. package/dist/{chunk-3T52B2OF.js → chunk-UQHUUZ5H.js} +1 -1
  86. package/dist/{chunk-TI3ZWXZG.js → chunk-USQDVBEV.js} +2 -2
  87. package/dist/{chunk-WEO5JCB4.js → chunk-UYDTFCHW.js} +1 -1
  88. package/dist/{chunk-D7ERHWYB.js → chunk-XWEONSLV.js} +1 -1
  89. package/dist/{chunk-GKIUEIDX.js → chunk-YQMFGWBD.js} +1 -1
  90. package/dist/{reapply-BAWDJTG7.js → reapply-D2TFN6XK.js} +9 -8
  91. package/dist/src/index.js +18 -16
  92. package/package.json +1 -1
@@ -1,31 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reportEvent
4
- } from "../chunk-LNGYW6G4.js";
5
- import "../chunk-WEO5JCB4.js";
4
+ } from "../chunk-FDHMNT24.js";
5
+ import "../chunk-UYDTFCHW.js";
6
6
  import {
7
7
  askUser,
8
8
  isDecisionStopped,
9
9
  waitForAnswer
10
- } from "../chunk-LGXUGYUH.js";
10
+ } from "../chunk-PYCQXCI5.js";
11
11
  import {
12
12
  getMachineId
13
- } from "../chunk-3T52B2OF.js";
14
- import "../chunk-SAF6NNXY.js";
15
- import "../chunk-EYRGBYZG.js";
13
+ } from "../chunk-UQHUUZ5H.js";
14
+ import "../chunk-DYHXOXUF.js";
15
+ import "../chunk-HETOKNIL.js";
16
16
  import "../chunk-SAF6HGAA.js";
17
17
  import "../chunk-7QLSKOSU.js";
18
18
  import "../chunk-KZERVKTD.js";
19
- import "../chunk-K6I5M2ME.js";
19
+ import "../chunk-HU5LSYL2.js";
20
20
  import "../chunk-T7E75EKA.js";
21
21
  import {
22
22
  getApiKey
23
- } from "../chunk-2UMNXADU.js";
24
- import "../chunk-FVKFDTN6.js";
23
+ } from "../chunk-OSJEMXSR.js";
24
+ import "../chunk-T4QY64OR.js";
25
+ import {
26
+ NPX_LATEST_COMMAND
27
+ } from "../chunk-EA3IELHP.js";
28
+ import "../chunk-HWJW3CPO.js";
25
29
 
26
30
  // bin/pushary-codex.ts
27
31
  import { basename } from "path";
28
- var DEPRECATION_NOTICE = "[pushary-codex] Deprecated: this is the legacy Codex notify handler. Native Codex hooks via pushary-codex-hook replace it. Run npx @pushary/agent-hooks setup to migrate.\n";
32
+ var DEPRECATION_NOTICE = `[pushary-codex] Deprecated: this is the legacy Codex notify handler. Native Codex hooks via pushary-codex-hook replace it. Run ${NPX_LATEST_COMMAND} setup to migrate.
33
+ `;
29
34
  var readStdin = async () => {
30
35
  let raw = "";
31
36
  for await (const chunk of process.stdin) raw += chunk;
@@ -1,32 +1,30 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  printKeyCheck
4
- } from "../chunk-D7ERHWYB.js";
4
+ } from "../chunk-XWEONSLV.js";
5
5
  import {
6
6
  connectDevice,
7
7
  connectExistingApp,
8
8
  printConnectInstructions
9
- } from "../chunk-S3EP4B35.js";
9
+ } from "../chunk-KJRALILH.js";
10
10
  import "../chunk-3EGEA4KH.js";
11
11
  import {
12
12
  checkApiKey
13
- } from "../chunk-QBS6LGEK.js";
13
+ } from "../chunk-43LJSM4F.js";
14
14
  import "../chunk-QCGNGEGE.js";
15
15
  import {
16
16
  createIo
17
17
  } from "../chunk-5RUIFDTP.js";
18
18
  import {
19
19
  exitOnHelpFlag
20
- } from "../chunk-TWWLVOPB.js";
21
- import "../chunk-FAH3D74E.js";
20
+ } from "../chunk-P4BNYJ5Q.js";
22
21
  import {
23
22
  parseFlags
24
23
  } from "../chunk-GMXKITVA.js";
25
- import "../chunk-DINDL2CF.js";
26
24
  import {
27
25
  readKeySource
28
- } from "../chunk-TI3ZWXZG.js";
29
- import "../chunk-EYRGBYZG.js";
26
+ } from "../chunk-USQDVBEV.js";
27
+ import "../chunk-HETOKNIL.js";
30
28
  import "../chunk-SAF6HGAA.js";
31
29
  import {
32
30
  UsageError
@@ -34,10 +32,12 @@ import {
34
32
  import {
35
33
  EXIT
36
34
  } from "../chunk-KZERVKTD.js";
37
- import "../chunk-K6I5M2ME.js";
35
+ import "../chunk-HU5LSYL2.js";
38
36
  import "../chunk-T7E75EKA.js";
39
- import "../chunk-2UMNXADU.js";
40
- import "../chunk-FVKFDTN6.js";
37
+ import "../chunk-OSJEMXSR.js";
38
+ import "../chunk-T4QY64OR.js";
39
+ import "../chunk-EA3IELHP.js";
40
+ import "../chunk-HWJW3CPO.js";
41
41
 
42
42
  // bin/pushary-connect.ts
43
43
  exitOnHelpFlag("connect");
@@ -2,18 +2,16 @@
2
2
  import {
3
3
  coworkOutput,
4
4
  parseCoworkOptions
5
- } from "../chunk-43JKGLZZ.js";
5
+ } from "../chunk-3ZSGKLSO.js";
6
6
  import {
7
7
  canOpenBrowser,
8
8
  openInBrowser
9
9
  } from "../chunk-PUZZELE6.js";
10
- import "../chunk-R3AMKNIW.js";
10
+ import "../chunk-TFKBFQCE.js";
11
11
  import {
12
12
  exitOnHelpFlag
13
- } from "../chunk-TWWLVOPB.js";
14
- import "../chunk-FAH3D74E.js";
13
+ } from "../chunk-P4BNYJ5Q.js";
15
14
  import "../chunk-GMXKITVA.js";
16
- import "../chunk-DINDL2CF.js";
17
15
  import {
18
16
  UsageError
19
17
  } from "../chunk-7QLSKOSU.js";
@@ -22,7 +20,9 @@ import {
22
20
  } from "../chunk-KZERVKTD.js";
23
21
  import {
24
22
  CLAUDE_CONNECTOR_GUIDE
25
- } from "../chunk-FVKFDTN6.js";
23
+ } from "../chunk-T4QY64OR.js";
24
+ import "../chunk-EA3IELHP.js";
25
+ import "../chunk-HWJW3CPO.js";
26
26
 
27
27
  // bin/pushary-cowork.ts
28
28
  exitOnHelpFlag("cowork");
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  inspectConfiguredManagedProviders
4
- } from "../chunk-2GMI6JH6.js";
5
- import "../chunk-LUT2EZLG.js";
4
+ } from "../chunk-PNNBMH4E.js";
5
+ import "../chunk-3NBODGQS.js";
6
6
  import {
7
7
  HEARTBEAT_INTERVAL_MS,
8
8
  sendHeartbeat
9
- } from "../chunk-I6HRQOMT.js";
10
- import "../chunk-WIOXWUUH.js";
9
+ } from "../chunk-F57RGL7K.js";
10
+ import "../chunk-J4J45VPZ.js";
11
11
  import {
12
12
  detectProviderLiveCapabilities,
13
13
  hasSpawnProvider,
14
14
  resolveControlPolicy
15
- } from "../chunk-KI36MAT6.js";
15
+ } from "../chunk-KEOLNHR3.js";
16
16
  import {
17
17
  SESSION_REAP_SILENCE_MS,
18
18
  describeIdleWindow,
@@ -20,15 +20,15 @@ import {
20
20
  listProcessProofs,
21
21
  ownsLiveProcess,
22
22
  silentSpawnedProofs
23
- } from "../chunk-PHHGHHOW.js";
23
+ } from "../chunk-MYP4UUFH.js";
24
24
  import {
25
25
  startRegisteredTranscripts
26
- } from "../chunk-TNS3YLFE.js";
26
+ } from "../chunk-NFKVRMTM.js";
27
27
  import "../chunk-SGZJ5LYH.js";
28
- import "../chunk-KEMEBTCJ.js";
29
- import "../chunk-R3AMKNIW.js";
30
- import "../chunk-LYXX5NSB.js";
31
- import "../chunk-TF4IOINR.js";
28
+ import "../chunk-PCGZXWGQ.js";
29
+ import "../chunk-TFKBFQCE.js";
30
+ import "../chunk-K3QVDAZW.js";
31
+ import "../chunk-NTQSICPJ.js";
32
32
  import {
33
33
  DAEMON_LEASE_RENEW_INTERVAL_MS,
34
34
  acquireDaemonLease,
@@ -45,45 +45,47 @@ import {
45
45
  requestDaemonHandoff,
46
46
  stopDaemonRunning,
47
47
  writeDaemonNeedsLogin
48
- } from "../chunk-3BPB2HYZ.js";
49
- import "../chunk-ED5TA2FJ.js";
50
- import "../chunk-JOVWYVSR.js";
51
- import "../chunk-CRNAXFQ6.js";
52
- import "../chunk-EQRS3SGM.js";
53
- import "../chunk-MN3XOVRK.js";
48
+ } from "../chunk-7XT76LWT.js";
49
+ import "../chunk-EADZPVYW.js";
50
+ import "../chunk-SOCEY746.js";
51
+ import "../chunk-TIWURSLS.js";
52
+ import "../chunk-66H2QQAK.js";
53
+ import "../chunk-2QT3GCU4.js";
54
54
  import {
55
55
  spawnClaude
56
56
  } from "../chunk-XHKBHWLX.js";
57
- import "../chunk-WEO5JCB4.js";
57
+ import "../chunk-UYDTFCHW.js";
58
58
  import {
59
59
  getMachineId
60
- } from "../chunk-3T52B2OF.js";
60
+ } from "../chunk-UQHUUZ5H.js";
61
61
  import {
62
62
  resolveBinary
63
- } from "../chunk-SAF6NNXY.js";
63
+ } from "../chunk-DYHXOXUF.js";
64
64
  import {
65
65
  writeHuman
66
66
  } from "../chunk-QCGNGEGE.js";
67
67
  import {
68
68
  exitOnHelpFlag
69
- } from "../chunk-TWWLVOPB.js";
70
- import "../chunk-FAH3D74E.js";
69
+ } from "../chunk-P4BNYJ5Q.js";
71
70
  import "../chunk-GMXKITVA.js";
72
- import "../chunk-DINDL2CF.js";
73
71
  import {
74
72
  readControlMode
75
- } from "../chunk-TI3ZWXZG.js";
73
+ } from "../chunk-USQDVBEV.js";
76
74
  import "../chunk-7QLSKOSU.js";
77
75
  import {
78
76
  EXIT
79
77
  } from "../chunk-KZERVKTD.js";
80
- import "../chunk-K6I5M2ME.js";
78
+ import "../chunk-HU5LSYL2.js";
81
79
  import "../chunk-T7E75EKA.js";
82
80
  import {
83
81
  getApiKey,
84
82
  getBaseUrl
85
- } from "../chunk-2UMNXADU.js";
86
- import "../chunk-FVKFDTN6.js";
83
+ } from "../chunk-OSJEMXSR.js";
84
+ import "../chunk-T4QY64OR.js";
85
+ import {
86
+ NPX_LATEST_COMMAND
87
+ } from "../chunk-EA3IELHP.js";
88
+ import "../chunk-HWJW3CPO.js";
87
89
 
88
90
  // src/spawn-daemon.ts
89
91
  import { execFileSync, spawn } from "child_process";
@@ -306,7 +308,8 @@ var runSpawnDaemon = async () => {
306
308
  try {
307
309
  apiKey = getApiKey();
308
310
  } catch {
309
- stderr("[pushary] daemon needs an API key. Run `npx @pushary/agent-hooks setup`.\n");
311
+ stderr(`[pushary] daemon needs an API key. Run \`${NPX_LATEST_COMMAND} setup\`.
312
+ `);
310
313
  return 1;
311
314
  }
312
315
  const loginBlock = readDaemonNeedsLogin();
@@ -8,28 +8,28 @@ import {
8
8
  openCodePluginDir,
9
9
  openCodePluginFile,
10
10
  removeOpenCodeMcpServer
11
- } from "../chunk-VYUDGQM7.js";
11
+ } from "../chunk-TUXFIVOH.js";
12
12
  import {
13
13
  compatibleConfigFile,
14
14
  compatibleMcpFile,
15
15
  compatiblePermissionRuleFile,
16
16
  removeCompatibleHooks,
17
17
  removeCompatibleMcpServer
18
- } from "../chunk-HQLAZWJJ.js";
18
+ } from "../chunk-JF736N4C.js";
19
19
  import {
20
20
  isClaudeMcpSnapshot,
21
21
  removeClaudeMcpServers,
22
22
  removePusharySettings,
23
23
  removePusharyToolPermissions,
24
24
  restoreClaudeMcpServer
25
- } from "../chunk-WIOXWUUH.js";
25
+ } from "../chunk-J4J45VPZ.js";
26
26
  import {
27
27
  removeGeminiSettings
28
- } from "../chunk-ED5TA2FJ.js";
29
- import "../chunk-LNGYW6G4.js";
30
- import "../chunk-WEO5JCB4.js";
31
- import "../chunk-LGXUGYUH.js";
32
- import "../chunk-3T52B2OF.js";
28
+ } from "../chunk-EADZPVYW.js";
29
+ import "../chunk-FDHMNT24.js";
30
+ import "../chunk-UYDTFCHW.js";
31
+ import "../chunk-PYCQXCI5.js";
32
+ import "../chunk-UQHUUZ5H.js";
33
33
  import {
34
34
  claudeJson,
35
35
  claudeMcpReceipt,
@@ -43,23 +43,23 @@ import {
43
43
  geminiSettings,
44
44
  removeCodexHooks,
45
45
  removeCodexSettings
46
- } from "../chunk-SAF6NNXY.js";
46
+ } from "../chunk-DYHXOXUF.js";
47
47
  import {
48
48
  exitOnHelpFlag
49
- } from "../chunk-TWWLVOPB.js";
50
- import "../chunk-FAH3D74E.js";
51
- import "../chunk-DINDL2CF.js";
52
- import "../chunk-EYRGBYZG.js";
49
+ } from "../chunk-P4BNYJ5Q.js";
50
+ import "../chunk-HETOKNIL.js";
53
51
  import "../chunk-SAF6HGAA.js";
54
52
  import "../chunk-7QLSKOSU.js";
55
53
  import "../chunk-KZERVKTD.js";
56
- import "../chunk-K6I5M2ME.js";
54
+ import "../chunk-HU5LSYL2.js";
57
55
  import "../chunk-T7E75EKA.js";
58
- import "../chunk-2UMNXADU.js";
56
+ import "../chunk-OSJEMXSR.js";
59
57
  import {
60
58
  DISCONNECTABLE_AGENTS,
61
59
  hookCompatibleProfileBySource
62
- } from "../chunk-FVKFDTN6.js";
60
+ } from "../chunk-T4QY64OR.js";
61
+ import "../chunk-EA3IELHP.js";
62
+ import "../chunk-HWJW3CPO.js";
63
63
 
64
64
  // bin/pushary-disconnect.ts
65
65
  import { readdirSync, readFileSync, rmSync, writeFileSync } from "fs";
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  readMachineReadiness,
11
11
  readManagedControlEvidence
12
- } from "../chunk-I6HRQOMT.js";
12
+ } from "../chunk-F57RGL7K.js";
13
13
  import {
14
14
  CURSOR_GATE_SCRIPT
15
15
  } from "../chunk-P32LPT2L.js";
@@ -22,35 +22,43 @@ import {
22
22
  isPluginRegistered,
23
23
  shortenHome,
24
24
  vscodeSettingsTargets
25
- } from "../chunk-3UA6FPRC.js";
25
+ } from "../chunk-DLJN5XEU.js";
26
26
  import {
27
27
  OPENCODE_PLUGIN_PLACEHOLDER,
28
28
  openCodePluginDir,
29
29
  openCodePluginFile,
30
30
  openCodeWired
31
- } from "../chunk-VYUDGQM7.js";
31
+ } from "../chunk-TUXFIVOH.js";
32
32
  import {
33
33
  compatibleConfigFile,
34
34
  compatibleInstructionsFile,
35
35
  compatibleMcpFile,
36
36
  hasCompatibleHooks,
37
37
  missingCompatibleHookEvents
38
- } from "../chunk-HQLAZWJJ.js";
39
- import "../chunk-WIOXWUUH.js";
38
+ } from "../chunk-JF736N4C.js";
39
+ import "../chunk-J4J45VPZ.js";
40
40
  import {
41
41
  detectProviderLiveCapabilities,
42
42
  hasSpawnProvider,
43
43
  resolveControlPolicy
44
- } from "../chunk-KI36MAT6.js";
44
+ } from "../chunk-KEOLNHR3.js";
45
+ import {
46
+ AUTO_UPDATE_DISABLE_ENV,
47
+ autoUpdateOffReason,
48
+ describeAutoUpdateAnnouncement,
49
+ describeAutoUpdateCheck,
50
+ readAutoUpdateState,
51
+ takeAutoUpdateAnnouncement
52
+ } from "../chunk-OSSDK5RS.js";
45
53
  import {
46
54
  readLedgerSummary
47
- } from "../chunk-SWFF5U2N.js";
55
+ } from "../chunk-43ZDACBO.js";
48
56
  import {
49
57
  describeBridgeResolution,
50
58
  isBridgeLocator,
51
59
  liveBridgeProbe,
52
60
  resolveBridgeStub
53
- } from "../chunk-LYXX5NSB.js";
61
+ } from "../chunk-K3QVDAZW.js";
54
62
  import {
55
63
  claudeOtherHolders,
56
64
  claudeUnprovenHolds,
@@ -67,7 +75,7 @@ import {
67
75
  geminiWired,
68
76
  holdsLong,
69
77
  pusharyHookExecutable
70
- } from "../chunk-TF4IOINR.js";
78
+ } from "../chunk-NTQSICPJ.js";
71
79
  import {
72
80
  daemonHasRemoteProof,
73
81
  daemonServiceManagerAvailable,
@@ -76,21 +84,22 @@ import {
76
84
  readDaemonNeedsLogin,
77
85
  readDaemonStatus,
78
86
  readInstalledDaemonService
79
- } from "../chunk-3BPB2HYZ.js";
87
+ } from "../chunk-7XT76LWT.js";
80
88
  import {
81
89
  GEMINI_HOOK_BINARY,
82
90
  hasGeminiHooks,
83
91
  missingGeminiHookEvents
84
- } from "../chunk-ED5TA2FJ.js";
92
+ } from "../chunk-EADZPVYW.js";
85
93
  import "../chunk-XHKBHWLX.js";
86
- import "../chunk-LNGYW6G4.js";
87
- import "../chunk-WEO5JCB4.js";
88
- import "../chunk-LGXUGYUH.js";
94
+ import "../chunk-FDHMNT24.js";
95
+ import "../chunk-UYDTFCHW.js";
96
+ import "../chunk-PYCQXCI5.js";
89
97
  import {
90
98
  getMachineId
91
- } from "../chunk-3T52B2OF.js";
99
+ } from "../chunk-UQHUUZ5H.js";
92
100
  import {
93
101
  CODEX_HOOK_EVENTS,
102
+ autoUpdateState,
94
103
  claudeJson,
95
104
  claudeSettings,
96
105
  claudeSkillDir,
@@ -104,6 +113,7 @@ import {
104
113
  cursorUserHooks,
105
114
  cursorUserMcp,
106
115
  execNpm,
116
+ fetchLatestPublishedVersion,
107
117
  geminiMd,
108
118
  geminiSettings,
109
119
  hasCodexHooks,
@@ -111,7 +121,7 @@ import {
111
121
  pusharyConfigFile,
112
122
  readCodexMcpAuth,
113
123
  vscodePluginDir
114
- } from "../chunk-SAF6NNXY.js";
124
+ } from "../chunk-DYHXOXUF.js";
115
125
  import {
116
126
  describeReach,
117
127
  describeRoundTrip,
@@ -119,35 +129,31 @@ import {
119
129
  reachVerdict,
120
130
  roundTripEvidence,
121
131
  verifyRoundTrip
122
- } from "../chunk-S3EP4B35.js";
132
+ } from "../chunk-KJRALILH.js";
123
133
  import "../chunk-3EGEA4KH.js";
124
134
  import {
125
135
  checkApiKey,
126
136
  describeKeyCheck
127
- } from "../chunk-QBS6LGEK.js";
137
+ } from "../chunk-43LJSM4F.js";
128
138
  import "../chunk-QCGNGEGE.js";
129
139
  import {
130
140
  createIo
131
141
  } from "../chunk-5RUIFDTP.js";
132
142
  import {
133
143
  exitOnHelpFlag
134
- } from "../chunk-TWWLVOPB.js";
135
- import "../chunk-FAH3D74E.js";
144
+ } from "../chunk-P4BNYJ5Q.js";
136
145
  import {
137
146
  parseFlags
138
147
  } from "../chunk-GMXKITVA.js";
139
- import {
140
- getPackageVersion
141
- } from "../chunk-DINDL2CF.js";
142
148
  import {
143
149
  keyPrefix,
144
150
  readControlMode,
145
151
  readKeySource
146
- } from "../chunk-TI3ZWXZG.js";
152
+ } from "../chunk-USQDVBEV.js";
147
153
  import {
148
154
  callMcpTool,
149
155
  sendMcpRequest
150
- } from "../chunk-EYRGBYZG.js";
156
+ } from "../chunk-HETOKNIL.js";
151
157
  import "../chunk-SAF6HGAA.js";
152
158
  import {
153
159
  UsageError
@@ -155,11 +161,11 @@ import {
155
161
  import {
156
162
  EXIT
157
163
  } from "../chunk-KZERVKTD.js";
158
- import "../chunk-K6I5M2ME.js";
164
+ import "../chunk-HU5LSYL2.js";
159
165
  import "../chunk-T7E75EKA.js";
160
166
  import {
161
167
  getBaseUrl
162
- } from "../chunk-2UMNXADU.js";
168
+ } from "../chunk-OSJEMXSR.js";
163
169
  import {
164
170
  AGENTS,
165
171
  CURSOR_GATE_EVENTS,
@@ -171,7 +177,14 @@ import {
171
177
  hookActivationResult,
172
178
  hookCompatibleProfile,
173
179
  isHookActivationReport
174
- } from "../chunk-FVKFDTN6.js";
180
+ } from "../chunk-T4QY64OR.js";
181
+ import {
182
+ NPX_LATEST_COMMAND
183
+ } from "../chunk-EA3IELHP.js";
184
+ import {
185
+ getPackageVersion,
186
+ isNewerVersion
187
+ } from "../chunk-HWJW3CPO.js";
175
188
 
176
189
  // bin/pushary-doctor.ts
177
190
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -181,6 +194,36 @@ import { execFileSync } from "child_process";
181
194
  import { confirm } from "@inquirer/prompts";
182
195
  import { parse as parseTOML } from "smol-toml";
183
196
 
197
+ // src/diagnostics/auto-update.ts
198
+ var globalPackageFreshness = (installed2, latest) => isNewerVersion(latest, installed2) ? { upToDate: false, detail: `${installed2} installed, ${latest} available \u2014 run ${NPX_LATEST_COMMAND} upgrade` } : { upToDate: true, detail: installed2 };
199
+ var AUTO_UPDATE_ON = "on: once a day at session start, within the same major version";
200
+ var AUTO_UPDATE_OFF = {
201
+ disabled_by_env: `off: ${AUTO_UPDATE_DISABLE_ENV} is set`,
202
+ disabled_by_user: "off: turn it back on with pushary upgrade --auto=on",
203
+ ci: "off in CI",
204
+ windows: "not available on Windows yet"
205
+ };
206
+ var needsAttention = (input) => input.state.lastResult === "failed" || input.state.lastResult === "needs_manual" || Boolean(input.state.detail);
207
+ var LAST_CHECK_LABEL = "Last automatic update check";
208
+ var describeAutoUpdateStatus = (input) => {
209
+ const offReason = autoUpdateOffReason(input);
210
+ const status = {
211
+ tone: "info",
212
+ label: "Automatic updates",
213
+ detail: offReason === null ? AUTO_UPDATE_ON : AUTO_UPDATE_OFF[offReason]
214
+ };
215
+ const checkedAt = input.state.at ?? input.state.lastCheckAt;
216
+ if (checkedAt === void 0) return [status];
217
+ return [
218
+ status,
219
+ {
220
+ tone: needsAttention(input) ? "warn" : "info",
221
+ label: LAST_CHECK_LABEL,
222
+ detail: `${checkedAt}: ${describeAutoUpdateCheck(input.state)}`
223
+ }
224
+ ];
225
+ };
226
+
184
227
  // src/diagnostics/bundle.ts
185
228
  import { homedir, hostname } from "os";
186
229
  var globalVersion = () => {
@@ -1008,18 +1051,18 @@ var main = async () => {
1008
1051
  }
1009
1052
  check(!!globalVersion2, "Global package installed", globalVersion2 || "not found");
1010
1053
  if (globalVersion2) {
1011
- try {
1012
- const res = await fetch("https://registry.npmjs.org/@pushary/agent-hooks/latest", {
1013
- signal: AbortSignal.timeout(5e3)
1014
- });
1015
- const latest = res.ok ? (await res.json()).version ?? "" : "";
1016
- if (latest) {
1017
- const upToDate = latest === globalVersion2;
1018
- check(upToDate, "Global package up to date", upToDate ? globalVersion2 : `${globalVersion2} installed, ${latest} available \u2014 run npx @pushary/agent-hooks@latest upgrade`);
1019
- }
1020
- } catch {
1054
+ const latest = await fetchLatestPublishedVersion();
1055
+ if (latest) {
1056
+ const freshness = globalPackageFreshness(globalVersion2, latest);
1057
+ check(freshness.upToDate, "Global package up to date", freshness.detail);
1021
1058
  }
1022
1059
  }
1060
+ const autoUpdateStatePath = autoUpdateState();
1061
+ const autoUpdateAnnouncement = takeAutoUpdateAnnouncement(autoUpdateStatePath, true);
1062
+ if (autoUpdateAnnouncement) console.log(` ${pass} ${describeAutoUpdateAnnouncement(autoUpdateAnnouncement)}`);
1063
+ for (const note of describeAutoUpdateStatus({ env: process.env, platform: process.platform, state: readAutoUpdateState(autoUpdateStatePath) })) {
1064
+ console.log(` ${note.tone === "warn" ? warn : dim("\u2013")} ${note.label} ${dim(`(${note.detail})`)}`);
1065
+ }
1023
1066
  console.log();
1024
1067
  console.log(` ${dim("Remote control")}`);
1025
1068
  const aliasRc = SHELL_FILES.find((f) => {
@@ -1,45 +1,44 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-4FN6VV56.js";
4
+ } from "../chunk-ORLJNJEO.js";
5
5
  import {
6
6
  isDeferAnswer
7
7
  } from "../chunk-YHG74UFF.js";
8
- import "../chunk-TNS3YLFE.js";
8
+ import "../chunk-NFKVRMTM.js";
9
9
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-KEMEBTCJ.js";
11
- import "../chunk-R3AMKNIW.js";
12
- import "../chunk-LYXX5NSB.js";
13
- import "../chunk-TF4IOINR.js";
14
- import "../chunk-3BPB2HYZ.js";
15
- import "../chunk-ED5TA2FJ.js";
16
- import "../chunk-JOVWYVSR.js";
17
- import "../chunk-CRNAXFQ6.js";
18
- import "../chunk-EQRS3SGM.js";
19
- import "../chunk-MN3XOVRK.js";
10
+ import "../chunk-PCGZXWGQ.js";
11
+ import "../chunk-TFKBFQCE.js";
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";
17
+ import "../chunk-TIWURSLS.js";
18
+ import "../chunk-66H2QQAK.js";
19
+ import "../chunk-2QT3GCU4.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-WEO5JCB4.js";
21
+ import "../chunk-UYDTFCHW.js";
22
22
  import {
23
23
  askUser,
24
24
  isDecisionStopped,
25
25
  waitForQuestion
26
- } from "../chunk-LGXUGYUH.js";
26
+ } from "../chunk-PYCQXCI5.js";
27
27
  import {
28
28
  getMachineId
29
- } from "../chunk-3T52B2OF.js";
30
- import "../chunk-SAF6NNXY.js";
29
+ } from "../chunk-UQHUUZ5H.js";
30
+ import "../chunk-DYHXOXUF.js";
31
31
  import "../chunk-GMXKITVA.js";
32
- import "../chunk-DINDL2CF.js";
33
- import "../chunk-TI3ZWXZG.js";
34
- import "../chunk-EYRGBYZG.js";
32
+ import "../chunk-USQDVBEV.js";
33
+ import "../chunk-HETOKNIL.js";
35
34
  import "../chunk-SAF6HGAA.js";
36
35
  import "../chunk-7QLSKOSU.js";
37
36
  import "../chunk-KZERVKTD.js";
38
- import "../chunk-K6I5M2ME.js";
37
+ import "../chunk-HU5LSYL2.js";
39
38
  import "../chunk-T7E75EKA.js";
40
39
  import {
41
40
  getApiKey
42
- } from "../chunk-2UMNXADU.js";
41
+ } from "../chunk-OSJEMXSR.js";
43
42
  import {
44
43
  ELICITATION_ANSWERABLE_MODE,
45
44
  effectiveWaitSeconds,
@@ -50,7 +49,9 @@ import {
50
49
  planElicitationAsk,
51
50
  readElicitationFields,
52
51
  renderElicitationOutput
53
- } from "../chunk-FVKFDTN6.js";
52
+ } from "../chunk-T4QY64OR.js";
53
+ import "../chunk-EA3IELHP.js";
54
+ import "../chunk-HWJW3CPO.js";
54
55
 
55
56
  // bin/pushary-elicitation-hook.ts
56
57
  import { basename } from "path";