@pushary/agent-hooks 1.4.2 → 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 +11 -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 +25 -25
  9. package/dist/bin/pushary-codex-bridge.js +16 -14
  10. package/dist/bin/pushary-codex-hook.js +32 -27
  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 +58 -53
  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-4BROEAKH.js → chunk-2QT3GCU4.js} +1 -1
  44. package/dist/{chunk-PC6DU5C4.js → chunk-3NBODGQS.js} +1 -1
  45. package/dist/{chunk-55KW4FLG.js → chunk-3ZSGKLSO.js} +2 -2
  46. package/dist/{chunk-NY6XQ6CA.js → chunk-43LJSM4F.js} +2 -2
  47. package/dist/{chunk-LEAAERSQ.js → chunk-43ZDACBO.js} +1 -1
  48. package/dist/{chunk-M5CTUFF3.js → chunk-5HYNICS7.js} +1 -1
  49. package/dist/{chunk-EQRS3SGM.js → chunk-66H2QQAK.js} +1 -1
  50. package/dist/{chunk-BZ4GDOJX.js → chunk-7XT76LWT.js} +7 -7
  51. package/dist/{chunk-SUWRZYQG.js → chunk-CQYHOHOK.js} +3 -3
  52. package/dist/{chunk-MUVTZNJW.js → chunk-DLJN5XEU.js} +3 -3
  53. package/dist/{chunk-25RTLTQD.js → chunk-DTQNDR7C.js} +1 -1
  54. package/dist/{chunk-TRLFZKVG.js → chunk-DYHXOXUF.js} +43 -6
  55. package/dist/{chunk-FAH3D74E.js → chunk-EA3IELHP.js} +6 -0
  56. package/dist/{chunk-LPYCPFBZ.js → chunk-EADZPVYW.js} +3 -3
  57. package/dist/{chunk-VW66JEGU.js → chunk-F57RGL7K.js} +8 -8
  58. package/dist/{chunk-G653QPTR.js → chunk-FDHMNT24.js} +7 -7
  59. package/dist/{chunk-Y3MM6PYN.js → chunk-H5LHTC5X.js} +1 -1
  60. package/dist/{chunk-EYRGBYZG.js → chunk-HETOKNIL.js} +1 -1
  61. package/dist/{chunk-UM5J3J4V.js → chunk-HU5LSYL2.js} +2 -2
  62. package/dist/{chunk-2V2IKOGJ.js → chunk-HVBF35GT.js} +2 -2
  63. package/dist/{chunk-DINDL2CF.js → chunk-HWJW3CPO.js} +25 -5
  64. package/dist/{chunk-XDP3UYH5.js → chunk-IYTQ4B5I.js} +8 -8
  65. package/dist/{chunk-II7PUMPB.js → chunk-J4J45VPZ.js} +3 -3
  66. package/dist/{chunk-VIOL2DJS.js → chunk-JF736N4C.js} +5 -5
  67. package/dist/{chunk-ZVY25BMK.js → chunk-K3QVDAZW.js} +1 -1
  68. package/dist/{chunk-TYEO6T5J.js → chunk-KEOLNHR3.js} +2 -2
  69. package/dist/{chunk-T5SZ4PML.js → chunk-KJRALILH.js} +7 -4
  70. package/dist/{chunk-VOMOZ4D5.js → chunk-MYP4UUFH.js} +1 -1
  71. package/dist/{chunk-UJBZIKSY.js → chunk-NFKVRMTM.js} +8 -8
  72. package/dist/{chunk-WPVHRUDT.js → chunk-NTQSICPJ.js} +3 -3
  73. package/dist/{chunk-JVTOML54.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-4ZDKSDVW.js → chunk-PCGZXWGQ.js} +4 -4
  78. package/dist/{chunk-ACYIZ3KH.js → chunk-PNNBMH4E.js} +5 -5
  79. package/dist/{chunk-LGXUGYUH.js → chunk-PYCQXCI5.js} +2 -2
  80. package/dist/{chunk-MW6ZPC6R.js → chunk-SOCEY746.js} +1 -1
  81. package/dist/{chunk-SOUZBGYJ.js → chunk-T4QY64OR.js} +15 -14
  82. package/dist/{chunk-DY4ILT6L.js → chunk-TFKBFQCE.js} +1 -1
  83. package/dist/{chunk-GZ7E6VOB.js → chunk-TIWURSLS.js} +1 -1
  84. package/dist/{chunk-F4UWL4NY.js → chunk-TUXFIVOH.js} +1 -1
  85. package/dist/{chunk-NHTAHAIS.js → chunk-UQHUUZ5H.js} +1 -1
  86. package/dist/{chunk-FU2DFEAZ.js → chunk-USQDVBEV.js} +2 -2
  87. package/dist/{chunk-YXP3WPAI.js → chunk-UYDTFCHW.js} +1 -1
  88. package/dist/{chunk-NOWZUGZW.js → chunk-XWEONSLV.js} +1 -1
  89. package/dist/{chunk-GKIUEIDX.js → chunk-YQMFGWBD.js} +1 -1
  90. package/dist/{reapply-J527BCJG.js → reapply-D2TFN6XK.js} +9 -8
  91. package/dist/src/index.js +18 -16
  92. package/package.json +1 -1
@@ -2,38 +2,36 @@
2
2
  import {
3
3
  describeLastSeen,
4
4
  listMachines
5
- } from "../chunk-VW66JEGU.js";
6
- import "../chunk-TYEO6T5J.js";
7
- import "../chunk-BZ4GDOJX.js";
5
+ } from "../chunk-F57RGL7K.js";
6
+ import "../chunk-KEOLNHR3.js";
7
+ import "../chunk-7XT76LWT.js";
8
8
  import "../chunk-XHKBHWLX.js";
9
- import "../chunk-NHTAHAIS.js";
10
- import "../chunk-TRLFZKVG.js";
9
+ import "../chunk-UQHUUZ5H.js";
10
+ import "../chunk-DYHXOXUF.js";
11
11
  import {
12
12
  describeReach,
13
13
  fetchChannels,
14
14
  reachVerdict
15
- } from "../chunk-T5SZ4PML.js";
15
+ } from "../chunk-KJRALILH.js";
16
16
  import "../chunk-3EGEA4KH.js";
17
17
  import {
18
18
  checkApiKey,
19
19
  describeKeyCheck
20
- } from "../chunk-NY6XQ6CA.js";
20
+ } from "../chunk-43LJSM4F.js";
21
21
  import "../chunk-QCGNGEGE.js";
22
22
  import {
23
23
  createIo
24
24
  } from "../chunk-5RUIFDTP.js";
25
25
  import {
26
26
  exitOnHelpFlag
27
- } from "../chunk-TWWLVOPB.js";
28
- import "../chunk-FAH3D74E.js";
27
+ } from "../chunk-P4BNYJ5Q.js";
29
28
  import {
30
29
  rejectUnknownFlags
31
30
  } from "../chunk-GMXKITVA.js";
32
- import "../chunk-DINDL2CF.js";
33
31
  import {
34
32
  readKeySource
35
- } from "../chunk-FU2DFEAZ.js";
36
- import "../chunk-EYRGBYZG.js";
33
+ } from "../chunk-USQDVBEV.js";
34
+ import "../chunk-HETOKNIL.js";
37
35
  import "../chunk-SAF6HGAA.js";
38
36
  import {
39
37
  UsageError
@@ -41,10 +39,12 @@ import {
41
39
  import {
42
40
  EXIT
43
41
  } from "../chunk-KZERVKTD.js";
44
- import "../chunk-UM5J3J4V.js";
42
+ import "../chunk-HU5LSYL2.js";
45
43
  import "../chunk-T7E75EKA.js";
46
- import "../chunk-2UMNXADU.js";
47
- import "../chunk-SOUZBGYJ.js";
44
+ import "../chunk-OSJEMXSR.js";
45
+ import "../chunk-T4QY64OR.js";
46
+ import "../chunk-EA3IELHP.js";
47
+ import "../chunk-HWJW3CPO.js";
48
48
 
49
49
  // src/status.ts
50
50
  var keySourceLine = (source) => {
@@ -2,44 +2,45 @@
2
2
  import {
3
3
  activeHookSource,
4
4
  activeIdentity
5
- } from "../chunk-VIOL2DJS.js";
6
- import "../chunk-II7PUMPB.js";
5
+ } from "../chunk-JF736N4C.js";
6
+ import "../chunk-J4J45VPZ.js";
7
7
  import {
8
8
  readHookInput
9
- } from "../chunk-JVTOML54.js";
10
- import "../chunk-UJBZIKSY.js";
9
+ } from "../chunk-ORLJNJEO.js";
10
+ import "../chunk-NFKVRMTM.js";
11
11
  import "../chunk-SGZJ5LYH.js";
12
- import "../chunk-4ZDKSDVW.js";
13
- import "../chunk-DY4ILT6L.js";
14
- import "../chunk-ZVY25BMK.js";
15
- import "../chunk-WPVHRUDT.js";
16
- import "../chunk-BZ4GDOJX.js";
17
- import "../chunk-LPYCPFBZ.js";
18
- import "../chunk-MW6ZPC6R.js";
19
- import "../chunk-GZ7E6VOB.js";
20
- import "../chunk-EQRS3SGM.js";
21
- import "../chunk-4BROEAKH.js";
12
+ import "../chunk-PCGZXWGQ.js";
13
+ import "../chunk-TFKBFQCE.js";
14
+ import "../chunk-K3QVDAZW.js";
15
+ import "../chunk-NTQSICPJ.js";
16
+ import "../chunk-7XT76LWT.js";
17
+ import "../chunk-EADZPVYW.js";
18
+ import "../chunk-SOCEY746.js";
19
+ import "../chunk-TIWURSLS.js";
20
+ import "../chunk-66H2QQAK.js";
21
+ import "../chunk-2QT3GCU4.js";
22
22
  import "../chunk-XHKBHWLX.js";
23
23
  import {
24
24
  handleStop,
25
25
  handleSubagentStop,
26
26
  isSubagentStop
27
- } from "../chunk-G653QPTR.js";
28
- import "../chunk-YXP3WPAI.js";
29
- import "../chunk-LGXUGYUH.js";
30
- import "../chunk-NHTAHAIS.js";
31
- import "../chunk-TRLFZKVG.js";
27
+ } from "../chunk-FDHMNT24.js";
28
+ import "../chunk-UYDTFCHW.js";
29
+ import "../chunk-PYCQXCI5.js";
30
+ import "../chunk-UQHUUZ5H.js";
31
+ import "../chunk-DYHXOXUF.js";
32
32
  import "../chunk-GMXKITVA.js";
33
- import "../chunk-DINDL2CF.js";
34
- import "../chunk-FU2DFEAZ.js";
35
- import "../chunk-EYRGBYZG.js";
33
+ import "../chunk-USQDVBEV.js";
34
+ import "../chunk-HETOKNIL.js";
36
35
  import "../chunk-SAF6HGAA.js";
37
36
  import "../chunk-7QLSKOSU.js";
38
37
  import "../chunk-KZERVKTD.js";
39
- import "../chunk-UM5J3J4V.js";
38
+ import "../chunk-HU5LSYL2.js";
40
39
  import "../chunk-T7E75EKA.js";
41
- import "../chunk-2UMNXADU.js";
42
- import "../chunk-SOUZBGYJ.js";
40
+ import "../chunk-OSJEMXSR.js";
41
+ import "../chunk-T4QY64OR.js";
42
+ import "../chunk-EA3IELHP.js";
43
+ import "../chunk-HWJW3CPO.js";
43
44
 
44
45
  // bin/pushary-stop-hook.ts
45
46
  var AGENT = activeIdentity(process.argv);
@@ -2,42 +2,43 @@
2
2
  import {
3
3
  activeHookSource,
4
4
  activeIdentity
5
- } from "../chunk-VIOL2DJS.js";
6
- import "../chunk-II7PUMPB.js";
5
+ } from "../chunk-JF736N4C.js";
6
+ import "../chunk-J4J45VPZ.js";
7
7
  import {
8
8
  readHookInput
9
- } from "../chunk-JVTOML54.js";
10
- import "../chunk-UJBZIKSY.js";
9
+ } from "../chunk-ORLJNJEO.js";
10
+ import "../chunk-NFKVRMTM.js";
11
11
  import "../chunk-SGZJ5LYH.js";
12
- import "../chunk-4ZDKSDVW.js";
13
- import "../chunk-DY4ILT6L.js";
14
- import "../chunk-ZVY25BMK.js";
15
- import "../chunk-WPVHRUDT.js";
16
- import "../chunk-BZ4GDOJX.js";
17
- import "../chunk-LPYCPFBZ.js";
18
- import "../chunk-MW6ZPC6R.js";
19
- import "../chunk-GZ7E6VOB.js";
20
- import "../chunk-EQRS3SGM.js";
21
- import "../chunk-4BROEAKH.js";
12
+ import "../chunk-PCGZXWGQ.js";
13
+ import "../chunk-TFKBFQCE.js";
14
+ import "../chunk-K3QVDAZW.js";
15
+ import "../chunk-NTQSICPJ.js";
16
+ import "../chunk-7XT76LWT.js";
17
+ import "../chunk-EADZPVYW.js";
18
+ import "../chunk-SOCEY746.js";
19
+ import "../chunk-TIWURSLS.js";
20
+ import "../chunk-66H2QQAK.js";
21
+ import "../chunk-2QT3GCU4.js";
22
22
  import "../chunk-XHKBHWLX.js";
23
23
  import {
24
24
  handleStopFailure
25
- } from "../chunk-G653QPTR.js";
26
- import "../chunk-YXP3WPAI.js";
27
- import "../chunk-LGXUGYUH.js";
28
- import "../chunk-NHTAHAIS.js";
29
- import "../chunk-TRLFZKVG.js";
25
+ } from "../chunk-FDHMNT24.js";
26
+ import "../chunk-UYDTFCHW.js";
27
+ import "../chunk-PYCQXCI5.js";
28
+ import "../chunk-UQHUUZ5H.js";
29
+ import "../chunk-DYHXOXUF.js";
30
30
  import "../chunk-GMXKITVA.js";
31
- import "../chunk-DINDL2CF.js";
32
- import "../chunk-FU2DFEAZ.js";
33
- import "../chunk-EYRGBYZG.js";
31
+ import "../chunk-USQDVBEV.js";
32
+ import "../chunk-HETOKNIL.js";
34
33
  import "../chunk-SAF6HGAA.js";
35
34
  import "../chunk-7QLSKOSU.js";
36
35
  import "../chunk-KZERVKTD.js";
37
- import "../chunk-UM5J3J4V.js";
36
+ import "../chunk-HU5LSYL2.js";
38
37
  import "../chunk-T7E75EKA.js";
39
- import "../chunk-2UMNXADU.js";
40
- import "../chunk-SOUZBGYJ.js";
38
+ import "../chunk-OSJEMXSR.js";
39
+ import "../chunk-T4QY64OR.js";
40
+ import "../chunk-EA3IELHP.js";
41
+ import "../chunk-HWJW3CPO.js";
41
42
 
42
43
  // bin/pushary-stopfailure-hook.ts
43
44
  var AGENT = activeIdentity(process.argv);
@@ -4,12 +4,10 @@ import {
4
4
  } from "../chunk-5RUIFDTP.js";
5
5
  import {
6
6
  exitOnHelpFlag
7
- } from "../chunk-TWWLVOPB.js";
8
- import "../chunk-FAH3D74E.js";
7
+ } from "../chunk-P4BNYJ5Q.js";
9
8
  import {
10
9
  rejectUnknownFlags
11
10
  } from "../chunk-GMXKITVA.js";
12
- import "../chunk-DINDL2CF.js";
13
11
  import {
14
12
  UsageError
15
13
  } from "../chunk-7QLSKOSU.js";
@@ -19,7 +17,9 @@ import {
19
17
  import {
20
18
  getApiKey,
21
19
  getBaseUrl
22
- } from "../chunk-2UMNXADU.js";
20
+ } from "../chunk-OSJEMXSR.js";
21
+ import "../chunk-EA3IELHP.js";
22
+ import "../chunk-HWJW3CPO.js";
23
23
 
24
24
  // bin/pushary-suggestions.ts
25
25
  exitOnHelpFlag("suggestions");
@@ -1,31 +1,32 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  registerTranscript
4
- } from "../chunk-UJBZIKSY.js";
4
+ } from "../chunk-NFKVRMTM.js";
5
5
  import "../chunk-SGZJ5LYH.js";
6
- import "../chunk-4ZDKSDVW.js";
7
- import "../chunk-DY4ILT6L.js";
8
- import "../chunk-ZVY25BMK.js";
9
- import "../chunk-WPVHRUDT.js";
10
- import "../chunk-BZ4GDOJX.js";
11
- import "../chunk-LPYCPFBZ.js";
12
- import "../chunk-MW6ZPC6R.js";
13
- import "../chunk-GZ7E6VOB.js";
14
- import "../chunk-EQRS3SGM.js";
15
- import "../chunk-4BROEAKH.js";
6
+ import "../chunk-PCGZXWGQ.js";
7
+ import "../chunk-TFKBFQCE.js";
8
+ import "../chunk-K3QVDAZW.js";
9
+ import "../chunk-NTQSICPJ.js";
10
+ import "../chunk-7XT76LWT.js";
11
+ import "../chunk-EADZPVYW.js";
12
+ import "../chunk-SOCEY746.js";
13
+ import "../chunk-TIWURSLS.js";
14
+ import "../chunk-66H2QQAK.js";
15
+ import "../chunk-2QT3GCU4.js";
16
16
  import "../chunk-XHKBHWLX.js";
17
- import "../chunk-YXP3WPAI.js";
18
- import "../chunk-NHTAHAIS.js";
19
- import "../chunk-TRLFZKVG.js";
17
+ import "../chunk-UYDTFCHW.js";
18
+ import "../chunk-UQHUUZ5H.js";
19
+ import "../chunk-DYHXOXUF.js";
20
20
  import "../chunk-GMXKITVA.js";
21
- import "../chunk-DINDL2CF.js";
22
- import "../chunk-FU2DFEAZ.js";
21
+ import "../chunk-USQDVBEV.js";
23
22
  import "../chunk-7QLSKOSU.js";
24
23
  import "../chunk-KZERVKTD.js";
25
- import "../chunk-UM5J3J4V.js";
24
+ import "../chunk-HU5LSYL2.js";
26
25
  import "../chunk-T7E75EKA.js";
27
- import "../chunk-2UMNXADU.js";
28
- import "../chunk-SOUZBGYJ.js";
26
+ import "../chunk-OSJEMXSR.js";
27
+ import "../chunk-T4QY64OR.js";
28
+ import "../chunk-EA3IELHP.js";
29
+ import "../chunk-HWJW3CPO.js";
29
30
 
30
31
  // bin/pushary-transcript-register.ts
31
32
  var raw = "";
@@ -6,18 +6,18 @@ import {
6
6
  } from "../chunk-SGZJ5LYH.js";
7
7
  import {
8
8
  transcriptsEnabled
9
- } from "../chunk-4BROEAKH.js";
9
+ } from "../chunk-2QT3GCU4.js";
10
10
  import {
11
11
  exitOnHelpFlag
12
- } from "../chunk-TWWLVOPB.js";
13
- import "../chunk-FAH3D74E.js";
14
- import "../chunk-DINDL2CF.js";
15
- import "../chunk-FU2DFEAZ.js";
12
+ } from "../chunk-P4BNYJ5Q.js";
13
+ import "../chunk-USQDVBEV.js";
16
14
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-UM5J3J4V.js";
15
+ import "../chunk-HU5LSYL2.js";
18
16
  import "../chunk-T7E75EKA.js";
19
- import "../chunk-2UMNXADU.js";
20
- import "../chunk-SOUZBGYJ.js";
17
+ import "../chunk-OSJEMXSR.js";
18
+ import "../chunk-T4QY64OR.js";
19
+ import "../chunk-EA3IELHP.js";
20
+ import "../chunk-HWJW3CPO.js";
21
21
 
22
22
  // bin/pushary-transcripts.ts
23
23
  exitOnHelpFlag("transcripts");
@@ -1,18 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reapplyAllAgents
4
- } from "../chunk-ACYIZ3KH.js";
5
- import "../chunk-PC6DU5C4.js";
4
+ } from "../chunk-PNNBMH4E.js";
5
+ import "../chunk-3NBODGQS.js";
6
6
  import {
7
7
  waitForMachineReadiness
8
- } from "../chunk-VW66JEGU.js";
9
- import "../chunk-II7PUMPB.js";
8
+ } from "../chunk-F57RGL7K.js";
9
+ import "../chunk-J4J45VPZ.js";
10
10
  import {
11
11
  detectProviderLiveCapabilities,
12
12
  hasSpawnProvider,
13
13
  resolveControlPolicy
14
- } from "../chunk-TYEO6T5J.js";
15
- import "../chunk-WPVHRUDT.js";
14
+ } from "../chunk-KEOLNHR3.js";
15
+ import {
16
+ AUTO_UPDATE_DISABLE_ENV,
17
+ describeAutoUpdateCheck,
18
+ globalInstallPrefix,
19
+ isAutoUpdateDisabledByEnv,
20
+ parseAutoUpdateFlag,
21
+ updateAutoUpdateState,
22
+ upgradeEntryFor
23
+ } from "../chunk-OSSDK5RS.js";
24
+ import "../chunk-NTQSICPJ.js";
16
25
  import {
17
26
  daemonHasRemoteProof,
18
27
  daemonServiceManagerAvailable,
@@ -23,46 +32,207 @@ import {
23
32
  replaceDaemonService,
24
33
  stopDaemonService,
25
34
  waitForDaemonRemoteProof
26
- } from "../chunk-BZ4GDOJX.js";
27
- import "../chunk-LPYCPFBZ.js";
35
+ } from "../chunk-7XT76LWT.js";
36
+ import "../chunk-EADZPVYW.js";
28
37
  import {
29
38
  needsShell
30
39
  } from "../chunk-XHKBHWLX.js";
31
- import "../chunk-YXP3WPAI.js";
32
- import "../chunk-NHTAHAIS.js";
40
+ import "../chunk-UYDTFCHW.js";
41
+ import "../chunk-UQHUUZ5H.js";
33
42
  import {
43
+ LATEST_TAG,
44
+ autoUpdateLock,
45
+ autoUpdateLog,
46
+ autoUpdateState,
34
47
  claudeJson,
35
48
  codexConfigToml,
36
49
  cursorPluginDir,
37
50
  execNpm,
51
+ fetchLatestPublishedVersion,
38
52
  geminiSettings,
53
+ installAgentHooksGlobally,
39
54
  npmErrorMessage,
40
55
  resolveGlobalBinary,
41
56
  vscodePluginDir
42
- } from "../chunk-TRLFZKVG.js";
57
+ } from "../chunk-DYHXOXUF.js";
43
58
  import {
44
59
  exitOnHelpFlag
45
- } from "../chunk-TWWLVOPB.js";
46
- import "../chunk-FAH3D74E.js";
47
- import {
48
- isNewerVersion
49
- } from "../chunk-DINDL2CF.js";
60
+ } from "../chunk-P4BNYJ5Q.js";
50
61
  import {
51
62
  readControlMode
52
- } from "../chunk-FU2DFEAZ.js";
53
- import "../chunk-KZERVKTD.js";
54
- import "../chunk-UM5J3J4V.js";
63
+ } from "../chunk-USQDVBEV.js";
64
+ import {
65
+ EXIT
66
+ } from "../chunk-KZERVKTD.js";
67
+ import "../chunk-HU5LSYL2.js";
55
68
  import "../chunk-T7E75EKA.js";
56
69
  import {
57
70
  getApiKey
58
- } from "../chunk-2UMNXADU.js";
59
- import "../chunk-SOUZBGYJ.js";
71
+ } from "../chunk-OSJEMXSR.js";
72
+ import "../chunk-T4QY64OR.js";
73
+ import {
74
+ NPX_LATEST_COMMAND
75
+ } from "../chunk-EA3IELHP.js";
76
+ import {
77
+ isNewerVersion,
78
+ isReleaseVersion,
79
+ isSameMajorVersion,
80
+ ownPackageRoot,
81
+ packageVersionAt
82
+ } from "../chunk-HWJW3CPO.js";
60
83
 
61
84
  // bin/pushary-upgrade.ts
62
85
  import { existsSync } from "fs";
63
86
  import { homedir } from "os";
64
87
  import { join } from "path";
88
+ import { execFileSync as execFileSync2 } from "child_process";
89
+
90
+ // src/auto-update-run.ts
65
91
  import { execFileSync } from "child_process";
92
+ import { closeSync, mkdirSync, openSync, statSync, unlinkSync, writeSync } from "fs";
93
+ import { dirname } from "path";
94
+ var FINISH_UPGRADE_FLAG = "--finish-upgrade";
95
+ var LOCK_STALE_MS = 10 * 60 * 1e3;
96
+ var INSTALL_TIMEOUT_MS = 12e4;
97
+ var FINISH_TIMEOUT_MS = 5 * 60 * 1e3;
98
+ var LOG_LIMIT_BYTES = 256 * 1024;
99
+ var UNREADABLE_INSTALLED_VERSION = "could not read the installed version";
100
+ var UNREACHABLE_REGISTRY = "could not read the latest version from the npm registry";
101
+ var MANUAL_UPGRADE_COMMAND = `${NPX_LATEST_COMMAND} upgrade`;
102
+ var isAlreadyExists = (error) => error instanceof Error && "code" in error && error.code === "EEXIST";
103
+ var createLock = (lockPath, now) => {
104
+ const handle = openSync(lockPath, "wx");
105
+ try {
106
+ writeSync(handle, `${JSON.stringify({ pid: process.pid, at: new Date(now).toISOString() })}
107
+ `);
108
+ } finally {
109
+ closeSync(handle);
110
+ }
111
+ };
112
+ var tryCreateLock = (lockPath, now) => {
113
+ try {
114
+ createLock(lockPath, now);
115
+ return "acquired";
116
+ } catch (error) {
117
+ if (isAlreadyExists(error)) return "held";
118
+ throw error;
119
+ }
120
+ };
121
+ var isStaleLock = (lockPath, now) => {
122
+ const modifiedAt = statSync(lockPath, { throwIfNoEntry: false })?.mtimeMs;
123
+ return modifiedAt !== void 0 && now - modifiedAt > LOCK_STALE_MS;
124
+ };
125
+ var acquireAutoUpdateLock = (lockPath, now) => {
126
+ mkdirSync(dirname(lockPath), { recursive: true });
127
+ if (tryCreateLock(lockPath, now) === "acquired") return "acquired";
128
+ if (!isStaleLock(lockPath, now)) return "held";
129
+ try {
130
+ unlinkSync(lockPath);
131
+ } catch {
132
+ return "held";
133
+ }
134
+ return tryCreateLock(lockPath, now);
135
+ };
136
+ var releaseAutoUpdateLock = (lockPath) => {
137
+ try {
138
+ unlinkSync(lockPath);
139
+ } catch {
140
+ return;
141
+ }
142
+ };
143
+ var openAutoUpdateLog = (logPath) => {
144
+ mkdirSync(dirname(logPath), { recursive: true });
145
+ const size = statSync(logPath, { throwIfNoEntry: false })?.size ?? 0;
146
+ return openSync(logPath, size > LOG_LIMIT_BYTES ? "w" : "a");
147
+ };
148
+ var appendAutoUpdateLog = (logPath, line) => {
149
+ try {
150
+ const handle = openAutoUpdateLog(logPath);
151
+ try {
152
+ writeSync(handle, `${line}
153
+ `);
154
+ } finally {
155
+ closeSync(handle);
156
+ }
157
+ } catch {
158
+ return;
159
+ }
160
+ };
161
+ var finishInNewInstall = (request) => {
162
+ const handle = openAutoUpdateLog(request.logPath);
163
+ try {
164
+ execFileSync(process.execPath, [request.entry, FINISH_UPGRADE_FLAG], {
165
+ stdio: ["ignore", handle, handle],
166
+ env: { ...process.env, npm_config_prefix: request.prefix },
167
+ timeout: FINISH_TIMEOUT_MS
168
+ });
169
+ } finally {
170
+ closeSync(handle);
171
+ }
172
+ };
173
+ var incompleteFinishDetail = (logPath) => `installed, but refreshing the agent configs did not finish cleanly; see ${logPath}`;
174
+ var newMajorDetail = (latest) => `${latest} is a new major version; run ${MANUAL_UPGRADE_COMMAND}`;
175
+ var checkAndInstall = async (context) => {
176
+ const installed = packageVersionAt(context.packageRoot);
177
+ if (installed === void 0 || !isReleaseVersion(installed)) {
178
+ return { result: "failed", from: installed, detail: UNREADABLE_INSTALLED_VERSION };
179
+ }
180
+ const latest = await fetchLatestPublishedVersion({ fetchImpl: context.fetchImpl });
181
+ if (latest === void 0) return { result: "failed", from: installed, detail: UNREACHABLE_REGISTRY };
182
+ if (!isNewerVersion(latest, installed)) return { result: "current", from: installed };
183
+ if (!isSameMajorVersion(latest, installed)) {
184
+ return { result: "needs_manual", from: installed, to: latest, detail: newMajorDetail(latest) };
185
+ }
186
+ appendAutoUpdateLog(context.logPath, `${new Date(context.now()).toISOString()} installing ${latest} into ${context.prefix}`);
187
+ try {
188
+ installAgentHooksGlobally({ version: latest, prefix: context.prefix, timeoutMs: INSTALL_TIMEOUT_MS }, context.runNpm);
189
+ } catch (error) {
190
+ return { result: "failed", from: installed, to: latest, detail: npmErrorMessage(error) };
191
+ }
192
+ try {
193
+ context.finish({ entry: upgradeEntryFor(context.prefix), prefix: context.prefix, logPath: context.logPath });
194
+ } catch {
195
+ return { result: "updated", from: installed, to: latest, detail: incompleteFinishDetail(context.logPath) };
196
+ }
197
+ return { result: "updated", from: installed, to: latest };
198
+ };
199
+ var recordAutoUpdateCheck = (statePath, check, at) => updateAutoUpdateState(statePath, {
200
+ lastCheckAt: at,
201
+ lastResult: check.result,
202
+ from: check.from,
203
+ to: check.to,
204
+ at,
205
+ detail: check.detail,
206
+ announced: check.result === "updated" ? false : void 0
207
+ });
208
+ var runAutoUpdate = async (run = {}) => {
209
+ const packageRoot = run.packageRoot ?? ownPackageRoot();
210
+ const prefix = packageRoot === void 0 ? null : globalInstallPrefix(packageRoot);
211
+ if (packageRoot === void 0 || prefix === null) return { kind: "not_global_install" };
212
+ const now = run.now ?? Date.now;
213
+ const lockPath = run.lockPath ?? autoUpdateLock();
214
+ const logPath = run.logPath ?? autoUpdateLog();
215
+ if (acquireAutoUpdateLock(lockPath, now()) === "held") return { kind: "locked" };
216
+ try {
217
+ const check = await checkAndInstall({
218
+ packageRoot,
219
+ prefix,
220
+ logPath,
221
+ now,
222
+ fetchImpl: run.fetchImpl ?? fetch,
223
+ runNpm: run.runNpm ?? execNpm,
224
+ finish: run.finish ?? finishInNewInstall
225
+ });
226
+ const at = new Date(now()).toISOString();
227
+ const state = recordAutoUpdateCheck(run.statePath ?? autoUpdateState(), check, at);
228
+ appendAutoUpdateLog(logPath, `${at} ${describeAutoUpdateCheck(state)}`);
229
+ return { kind: "recorded", state };
230
+ } finally {
231
+ releaseAutoUpdateLock(lockPath);
232
+ }
233
+ };
234
+
235
+ // bin/pushary-upgrade.ts
66
236
  exitOnHelpFlag("upgrade");
67
237
  var detectInstallModes = () => {
68
238
  const candidates = [
@@ -106,18 +276,6 @@ var getInstalledVersion = () => {
106
276
  return "";
107
277
  }
108
278
  };
109
- var fetchLatestVersion = async () => {
110
- try {
111
- const res = await fetch("https://registry.npmjs.org/@pushary/agent-hooks/latest", {
112
- signal: AbortSignal.timeout(5e3)
113
- });
114
- if (!res.ok) return void 0;
115
- const data = await res.json();
116
- return data.version;
117
- } catch {
118
- return void 0;
119
- }
120
- };
121
279
  var finishUpgrade = async () => {
122
280
  let apiKey;
123
281
  try {
@@ -183,11 +341,47 @@ var finishUpgrade = async () => {
183
341
  console.log(controlPolicy === "disabled" ? "Done. Your hooks use the new global install; phone-start remains disabled." : controlPolicy === "unsupported" || controlPolicy === "preserve-absent" ? "Done. Your hooks use the new global install; no background service was added." : "Done. Your hooks and background service use the new global install.");
184
342
  console.log("Verify with: pushary doctor");
185
343
  };
344
+ var AUTO_UPDATE_ON_MESSAGE = "Automatic updates are on. Pushary checks for a new version once a day, when an agent session starts.";
345
+ var AUTO_UPDATE_OFF_MESSAGE = "Automatic updates are off. Turn them back on with: pushary upgrade --auto=on";
346
+ var AUTO_UPDATE_RUN_MESSAGES = {
347
+ not_global_install: `This copy of Pushary is not a global npm install, so it does not update itself. Run: ${NPX_LATEST_COMMAND} upgrade`,
348
+ locked: "Another automatic update is already running."
349
+ };
350
+ var setAutomaticUpdates = (enabled) => {
351
+ updateAutoUpdateState(autoUpdateState(), { disabled: !enabled });
352
+ console.log(enabled ? AUTO_UPDATE_ON_MESSAGE : AUTO_UPDATE_OFF_MESSAGE);
353
+ if (enabled && isAutoUpdateDisabledByEnv(process.env)) {
354
+ console.log(`${AUTO_UPDATE_DISABLE_ENV} is set in this shell, and it keeps them off wherever it is set.`);
355
+ }
356
+ };
357
+ var runAutomaticUpdate = async () => {
358
+ const outcome = await runAutoUpdate();
359
+ if (outcome.kind !== "recorded") {
360
+ console.log(AUTO_UPDATE_RUN_MESSAGES[outcome.kind]);
361
+ return;
362
+ }
363
+ console.log(`Automatic update: ${describeAutoUpdateCheck(outcome.state)}`);
364
+ if (outcome.state.lastResult === "failed") process.exitCode = 1;
365
+ };
186
366
  var main = async () => {
187
- if (process.argv.includes("--finish-upgrade")) {
367
+ if (process.argv.includes(FINISH_UPGRADE_FLAG)) {
188
368
  await finishUpgrade();
189
369
  return;
190
370
  }
371
+ const autoFlag = parseAutoUpdateFlag(process.argv.slice(2));
372
+ if (autoFlag.kind === "invalid") {
373
+ console.error(`--auto takes on or off (got ${autoFlag.value || "nothing"}).`);
374
+ process.exitCode = EXIT.USAGE;
375
+ return;
376
+ }
377
+ if (autoFlag.kind === "set") {
378
+ setAutomaticUpdates(autoFlag.enabled);
379
+ return;
380
+ }
381
+ if (autoFlag.kind === "run") {
382
+ await runAutomaticUpdate();
383
+ return;
384
+ }
191
385
  const installed = getInstalledVersion();
192
386
  if (!installed) {
193
387
  const found = detectInstallModes();
@@ -206,14 +400,14 @@ var main = async () => {
206
400
  console.log("Check the result with: pushary doctor");
207
401
  return;
208
402
  }
209
- const latest = await fetchLatestVersion();
403
+ const latest = await fetchLatestPublishedVersion();
210
404
  if (latest && !isNewerVersion(latest, installed)) {
211
405
  console.log(`Already on the latest version (${installed}).`);
212
406
  return;
213
407
  }
214
408
  console.log(`Upgrading @pushary/agent-hooks ${installed} -> ${latest ?? "latest"}`);
215
409
  try {
216
- execNpm("install -g --no-workspaces @pushary/agent-hooks@latest", { timeout: 12e4 });
410
+ installAgentHooksGlobally({ version: LATEST_TAG, timeoutMs: 12e4 });
217
411
  } catch (err) {
218
412
  console.error(`Upgrade failed: ${npmErrorMessage(err)}`);
219
413
  process.exit(1);
@@ -223,7 +417,7 @@ var main = async () => {
223
417
  console.error("Upgrade installed, but the new pushary-upgrade binary could not be found on PATH.");
224
418
  process.exit(1);
225
419
  }
226
- execFileSync(upgradedBinary, ["--finish-upgrade"], {
420
+ execFileSync2(upgradedBinary, [FINISH_UPGRADE_FLAG], {
227
421
  stdio: "inherit",
228
422
  shell: needsShell(upgradedBinary)
229
423
  });