@pushary/agent-hooks 1.9.6 → 1.9.8

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 (111) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +3 -3
  3. package/data/cursor-plugin/README.md +3 -7
  4. package/data/vscode-plugin/README.md +1 -1
  5. package/dist/bin/pushary-bell-hook.js +22 -23
  6. package/dist/bin/pushary-bell.js +9 -9
  7. package/dist/bin/pushary-claude.js +27 -28
  8. package/dist/bin/pushary-clean.js +98 -76
  9. package/dist/bin/pushary-codex-bridge.js +18 -18
  10. package/dist/bin/pushary-codex-hook.js +32 -33
  11. package/dist/bin/pushary-codex.js +13 -13
  12. package/dist/bin/pushary-connect.js +24 -21
  13. package/dist/bin/pushary-cowork.js +5 -5
  14. package/dist/bin/pushary-daemon.js +51 -38
  15. package/dist/bin/pushary-disconnect.js +187 -52
  16. package/dist/bin/pushary-doctor.js +68 -56
  17. package/dist/bin/pushary-elicitation-hook.js +24 -25
  18. package/dist/bin/pushary-gemini-bridge.js +13 -13
  19. package/dist/bin/pushary-gemini-hook.js +29 -30
  20. package/dist/bin/pushary-hook.js +30 -32
  21. package/dist/bin/pushary-login.js +12 -12
  22. package/dist/bin/pushary-logout.js +105 -42
  23. package/dist/bin/pushary-mcp.js +9 -9
  24. package/dist/bin/pushary-mode.js +28 -31
  25. package/dist/bin/pushary-notification-hook.js +26 -28
  26. package/dist/bin/pushary-opencode-hook.js +28 -29
  27. package/dist/bin/pushary-permission-denied-hook.js +30 -32
  28. package/dist/bin/pushary-permission-hook.js +29 -31
  29. package/dist/bin/pushary-post-hook.js +26 -28
  30. package/dist/bin/pushary-prompt-hook.js +26 -28
  31. package/dist/bin/pushary-session-end-hook.js +26 -28
  32. package/dist/bin/pushary-session-start-hook.js +31 -31
  33. package/dist/bin/pushary-setup.js +98 -106
  34. package/dist/bin/pushary-stats.js +5 -5
  35. package/dist/bin/pushary-status.js +34 -18
  36. package/dist/bin/pushary-stop-hook.js +26 -28
  37. package/dist/bin/pushary-stopfailure-hook.js +26 -28
  38. package/dist/bin/pushary-suggestions.js +19 -21
  39. package/dist/bin/pushary-transcript-register.js +18 -19
  40. package/dist/bin/pushary-transcripts.js +7 -7
  41. package/dist/bin/pushary-upgrade.js +67 -31
  42. package/dist/bin/pushary-wait.js +23 -19
  43. package/dist/bin/pushary.js +15 -14
  44. package/dist/{chunk-BSZ7VBVT.js → chunk-2A53H4S6.js} +17 -15
  45. package/dist/{chunk-D7SOOVHX.js → chunk-2QGYMY7A.js} +83 -3
  46. package/dist/{chunk-SVTHEMM3.js → chunk-2QTO5YIT.js} +6 -6
  47. package/dist/{chunk-WN6WYUCV.js → chunk-2VZAALEJ.js} +5 -9
  48. package/dist/chunk-2WXF3QJR.js +49 -0
  49. package/dist/{chunk-UKNKYTTY.js → chunk-3I6IVOZV.js} +3 -3
  50. package/dist/chunk-3Z3A37WD.js +77 -0
  51. package/dist/{chunk-2QRE6QH2.js → chunk-5QUPKDI5.js} +1 -1
  52. package/dist/chunk-6TE27XZR.js +69 -0
  53. package/dist/{chunk-L6USMDTW.js → chunk-7DVNSQWF.js} +59 -15
  54. package/dist/{chunk-SNJ3BOCP.js → chunk-7PT35RY2.js} +27 -8
  55. package/dist/{chunk-CBVDW2N6.js → chunk-B64KHETR.js} +3 -3
  56. package/dist/chunk-BEJRK4DF.js +94 -0
  57. package/dist/chunk-BXET3ALR.js +46 -0
  58. package/dist/{chunk-DJ4BB264.js → chunk-CD47ZFFZ.js} +1 -1
  59. package/dist/{chunk-FBD3QGVJ.js → chunk-CKV3UPMU.js} +2 -2
  60. package/dist/{chunk-7JTVYR5B.js → chunk-CLOSJ4ES.js} +1 -1
  61. package/dist/{chunk-DA4FTGTK.js → chunk-DKMD6AWR.js} +4 -4
  62. package/dist/{chunk-SPXBXN23.js → chunk-DL7XWKYV.js} +7 -5
  63. package/dist/{chunk-VRT3EEZN.js → chunk-DPGSLWOS.js} +8 -8
  64. package/dist/{chunk-3BUAEQCY.js → chunk-DUZVXBBU.js} +1 -1
  65. package/dist/{chunk-6GERGJHF.js → chunk-EUW7JL2K.js} +0 -32
  66. package/dist/{chunk-75CA37FZ.js → chunk-FQ2GORVG.js} +2 -2
  67. package/dist/{chunk-WUKUXICK.js → chunk-HRULIYDU.js} +2 -2
  68. package/dist/{chunk-Q4E56K4X.js → chunk-I5IJRMNV.js} +78 -8
  69. package/dist/{chunk-MKJ3RTUS.js → chunk-I6MJXLMY.js} +2 -2
  70. package/dist/{chunk-YPXUD6DW.js → chunk-IAD2RT4L.js} +14 -14
  71. package/dist/{chunk-LBLCFD5K.js → chunk-IHFDPV7C.js} +2 -2
  72. package/dist/{chunk-BVCHY4OY.js → chunk-IHO3YQAN.js} +2 -2
  73. package/dist/{chunk-RDK7FX5F.js → chunk-KF3UZLYI.js} +1 -1
  74. package/dist/chunk-KFF7G225.js +599 -0
  75. package/dist/{chunk-TE5M6GGK.js → chunk-KHNFLYJO.js} +204 -28
  76. package/dist/{chunk-CCDVL63C.js → chunk-KRCR2CRQ.js} +9 -9
  77. package/dist/{chunk-ZC3TF4LR.js → chunk-LKLVTG3V.js} +18 -9
  78. package/dist/{chunk-4QKM44N6.js → chunk-LWOO567I.js} +4 -3
  79. package/dist/{chunk-KK54WQ74.js → chunk-M6BZZFVQ.js} +1 -1
  80. package/dist/{chunk-RIC6OOJX.js → chunk-MFF3ONG5.js} +21 -1
  81. package/dist/{chunk-IMGJYFCX.js → chunk-MGRFDGWU.js} +3 -2
  82. package/dist/{chunk-ZPW4MJOV.js → chunk-MKTJEXZ3.js} +3 -3
  83. package/dist/{chunk-2I23NFVT.js → chunk-MXHTGVFZ.js} +52 -9
  84. package/dist/{chunk-5BHROGRB.js → chunk-N4QSPI3B.js} +54 -5
  85. package/dist/{chunk-DGQTJDSJ.js → chunk-NWDG3MSW.js} +1 -1
  86. package/dist/chunk-OP7IHC2I.js +24 -0
  87. package/dist/{chunk-EVFY3VE6.js → chunk-QOLITCIP.js} +1 -1
  88. package/dist/{chunk-W4Q7NFXU.js → chunk-TCQ43LSG.js} +3 -3
  89. package/dist/chunk-TCWKTUAE.js +50 -0
  90. package/dist/{chunk-EZAFBC2C.js → chunk-V5HPPF3E.js} +8 -4
  91. package/dist/{chunk-Q23MMVTD.js → chunk-WG3K4TCH.js} +1 -1
  92. package/dist/{chunk-F56SB65Y.js → chunk-WS4H76EP.js} +2 -2
  93. package/dist/{chunk-HWQNQVY6.js → chunk-WWOHTTVP.js} +2 -2
  94. package/dist/{chunk-NVGDMTX3.js → chunk-YIG2R3BJ.js} +9 -7
  95. package/dist/{chunk-HJXZJF6O.js → chunk-ZBHUHJG6.js} +4 -4
  96. package/dist/{chunk-5AXCOTIT.js → chunk-ZBK6E2OR.js} +1 -1
  97. package/dist/{chunk-5PMTC2CB.js → chunk-ZN3C6GBG.js} +84 -673
  98. package/dist/{chunk-GQHZIBAZ.js → chunk-ZSTSEBG7.js} +1 -1
  99. package/dist/{chunk-PYZC54KA.js → chunk-ZW3XZLJC.js} +61 -17
  100. package/dist/{global-upgrade-7F5RP45B.js → global-upgrade-I56HNM23.js} +6 -6
  101. package/dist/{paths-MELXIVBO.js → paths-AGY43CXS.js} +2 -2
  102. package/dist/reapply-IA5XUKWW.js +57 -0
  103. package/dist/src/index.d.ts +1 -0
  104. package/dist/src/index.js +19 -20
  105. package/dist/{upgrade-lock-AHRBA66K.js → upgrade-lock-B34TAUKV.js} +5 -3
  106. package/package.json +1 -1
  107. package/dist/chunk-HT3WMM6Q.js +0 -44
  108. package/dist/chunk-IR5FRUPQ.js +0 -197
  109. package/dist/chunk-JUFKJCZG.js +0 -38
  110. package/dist/chunk-SJN22ADZ.js +0 -86
  111. package/dist/reapply-NOB2Q6C4.js +0 -35
@@ -2,52 +2,64 @@
2
2
  import {
3
3
  describeLastSeen,
4
4
  listMachines
5
- } from "../chunk-SVTHEMM3.js";
6
- import "../chunk-MKJ3RTUS.js";
5
+ } from "../chunk-2QTO5YIT.js";
6
+ import "../chunk-I6MJXLMY.js";
7
7
  import "../chunk-RIVNNBEK.js";
8
- import "../chunk-ZC3TF4LR.js";
8
+ import "../chunk-LKLVTG3V.js";
9
9
  import "../chunk-XHKBHWLX.js";
10
10
  import "../chunk-6ICPEJY5.js";
11
11
  import {
12
12
  describeReach,
13
13
  fetchChannels,
14
14
  reachVerdict
15
- } from "../chunk-YPXUD6DW.js";
15
+ } from "../chunk-IAD2RT4L.js";
16
16
  import "../chunk-3EGEA4KH.js";
17
17
  import "../chunk-QCGNGEGE.js";
18
+ import {
19
+ SIGNED_OUT_ON_MAC_MESSAGE,
20
+ activeKeyVerdictOf,
21
+ describeSignedOutKey,
22
+ readSignedOutDiagnosis
23
+ } from "../chunk-2WXF3QJR.js";
18
24
  import {
19
25
  createIo
20
26
  } from "../chunk-U4TMAANR.js";
21
27
  import {
22
28
  exitOnHelpFlag
23
- } from "../chunk-FBD3QGVJ.js";
29
+ } from "../chunk-CKV3UPMU.js";
24
30
  import {
25
31
  rejectUnknownFlags
26
32
  } from "../chunk-GMXKITVA.js";
27
33
  import {
28
34
  readKeySource
29
- } from "../chunk-5BHROGRB.js";
30
- import "../chunk-ZPW4MJOV.js";
35
+ } from "../chunk-N4QSPI3B.js";
36
+ import "../chunk-MKTJEXZ3.js";
31
37
  import {
32
38
  checkApiKey,
33
39
  describeKeyCheck
34
- } from "../chunk-4QKM44N6.js";
35
- import "../chunk-W4Q7NFXU.js";
36
- import "../chunk-3BUAEQCY.js";
40
+ } from "../chunk-LWOO567I.js";
41
+ import "../chunk-TCQ43LSG.js";
42
+ import "../chunk-DUZVXBBU.js";
37
43
  import {
38
44
  UsageError
39
45
  } from "../chunk-7QLSKOSU.js";
40
46
  import {
41
47
  EXIT
42
48
  } from "../chunk-KZERVKTD.js";
43
- import "../chunk-75CA37FZ.js";
44
- import "../chunk-HJXZJF6O.js";
49
+ import "../chunk-FQ2GORVG.js";
50
+ import "../chunk-ZBHUHJG6.js";
45
51
  import "../chunk-T7E75EKA.js";
46
- import "../chunk-2QRE6QH2.js";
47
- import "../chunk-L6USMDTW.js";
48
- import "../chunk-Q4E56K4X.js";
52
+ import "../chunk-5QUPKDI5.js";
53
+ import "../chunk-7DVNSQWF.js";
54
+ import "../chunk-I5IJRMNV.js";
49
55
 
50
56
  // src/status.ts
57
+ var signedOutReport = (facts, lines) => {
58
+ const signedOut = facts.signedOut;
59
+ if (signedOut?.kind !== "signed_out_on_mac") return null;
60
+ lines.push({ label: "Server", value: "key signed out on this Mac", ok: false });
61
+ return { lines, headline: SIGNED_OUT_ON_MAC_MESSAGE, next: [...describeSignedOutKey(signedOut)], exitCode: EXIT.UNAUTHENTICATED };
62
+ };
51
63
  var keySourceLine = (source) => {
52
64
  if (source.kind === "none") {
53
65
  return { label: "Key", value: "none found", ok: false };
@@ -86,6 +98,8 @@ var buildStatusReport = (facts) => {
86
98
  });
87
99
  }
88
100
  if (facts.source.kind === "none") {
101
+ const signedOut = signedOutReport(facts, lines);
102
+ if (signedOut) return signedOut;
89
103
  return {
90
104
  lines,
91
105
  headline: "Not set up on this machine.",
@@ -95,6 +109,8 @@ var buildStatusReport = (facts) => {
95
109
  }
96
110
  const check = facts.keyCheck;
97
111
  if (check && check.kind !== "ok") {
112
+ const signedOut = check.kind === "rejected" ? signedOutReport(facts, lines) : null;
113
+ if (signedOut) return signedOut;
98
114
  const report = describeKeyCheck(check);
99
115
  lines.push({ label: "Server", value: report.message, ok: check.kind === "unreachable" ? null : false });
100
116
  return { lines, headline: report.message, next: [...report.next], exitCode: report.exitCode };
@@ -148,7 +164,7 @@ var buildStatusReport = (facts) => {
148
164
  return {
149
165
  lines,
150
166
  headline: verdict.kind === "nobody" ? "Configured, but no device can receive an approval." : verdict.kind === "others" ? "Configured, but the only devices here are your teammates'." : "Configured, and nothing proves an approval reaches you.",
151
- next: verdict.kind === "nobody" ? ["Run `pushary connect` to add your phone, or install the Pushary app."] : ["Run `pushary connect` to add your own phone.", "Or `pushary doctor --roundtrip` to prove one of these is yours."],
167
+ next: verdict.kind === "nobody" ? ["Run `pushary pair` to pair your phone, or install the Pushary app."] : ["Run `pushary pair` to pair your own phone.", "Or `pushary doctor --roundtrip` to prove one of these is yours."],
152
168
  exitCode: EXIT.NO_DEVICE
153
169
  };
154
170
  }
@@ -156,7 +172,7 @@ var buildStatusReport = (facts) => {
156
172
  return {
157
173
  lines,
158
174
  headline: "Configured, but nothing in your pocket can receive an approval.",
159
- next: ["Run `pushary connect` and connect your phone, or install the Pushary app."],
175
+ next: ["Run `pushary pair` to pair your phone, or install the Pushary app."],
160
176
  exitCode: EXIT.NO_DEVICE
161
177
  };
162
178
  }
@@ -208,7 +224,7 @@ var main = async () => {
208
224
  if (keyCheck.kind === "ok") channels = await fetchChannels(source.key);
209
225
  }
210
226
  const machines = devices && keyCheck?.kind === "ok" ? await listMachines(source.key) : null;
211
- const facts = { source, keyCheck, channels };
227
+ const facts = { source, keyCheck, channels, signedOut: readSignedOutDiagnosis(source.key, activeKeyVerdictOf(keyCheck)) };
212
228
  const report = buildStatusReport(facts);
213
229
  if (json) {
214
230
  const payload = statusJson(facts, report);
@@ -2,49 +2,47 @@
2
2
  import {
3
3
  activeHookSource,
4
4
  activeIdentity
5
- } from "../chunk-TE5M6GGK.js";
6
- import "../chunk-IR5FRUPQ.js";
5
+ } from "../chunk-KHNFLYJO.js";
7
6
  import {
8
7
  readHookInput
9
- } from "../chunk-HWQNQVY6.js";
10
- import "../chunk-VRT3EEZN.js";
8
+ } from "../chunk-WWOHTTVP.js";
9
+ import "../chunk-DPGSLWOS.js";
11
10
  import "../chunk-SGZJ5LYH.js";
12
- import "../chunk-NVGDMTX3.js";
13
- import "../chunk-SPXBXN23.js";
14
- import "../chunk-SJN22ADZ.js";
15
- import "../chunk-D7SOOVHX.js";
16
- import "../chunk-ZC3TF4LR.js";
17
- import "../chunk-UKNKYTTY.js";
18
- import "../chunk-Q23MMVTD.js";
19
- import "../chunk-5AXCOTIT.js";
20
- import "../chunk-7JTVYR5B.js";
21
- import "../chunk-KK54WQ74.js";
11
+ import "../chunk-YIG2R3BJ.js";
12
+ import "../chunk-DL7XWKYV.js";
13
+ import "../chunk-LKLVTG3V.js";
14
+ import "../chunk-2QGYMY7A.js";
15
+ import "../chunk-3I6IVOZV.js";
16
+ import "../chunk-WG3K4TCH.js";
17
+ import "../chunk-ZBK6E2OR.js";
18
+ import "../chunk-CLOSJ4ES.js";
19
+ import "../chunk-M6BZZFVQ.js";
22
20
  import "../chunk-XHKBHWLX.js";
23
21
  import "../chunk-6ICPEJY5.js";
24
22
  import {
25
23
  handleStop,
26
24
  handleSubagentStop,
27
25
  isSubagentStop
28
- } from "../chunk-CCDVL63C.js";
26
+ } from "../chunk-KRCR2CRQ.js";
29
27
  import "../chunk-N6IOSZOE.js";
30
- import "../chunk-DJ4BB264.js";
31
- import "../chunk-WN6WYUCV.js";
32
- import "../chunk-DA4FTGTK.js";
28
+ import "../chunk-CD47ZFFZ.js";
29
+ import "../chunk-2VZAALEJ.js";
30
+ import "../chunk-DKMD6AWR.js";
33
31
  import "../chunk-POFBE6ZY.js";
34
32
  import "../chunk-GMXKITVA.js";
35
- import "../chunk-5BHROGRB.js";
36
- import "../chunk-ZPW4MJOV.js";
37
- import "../chunk-4QKM44N6.js";
38
- import "../chunk-W4Q7NFXU.js";
39
- import "../chunk-3BUAEQCY.js";
33
+ import "../chunk-N4QSPI3B.js";
34
+ import "../chunk-MKTJEXZ3.js";
35
+ import "../chunk-LWOO567I.js";
36
+ import "../chunk-TCQ43LSG.js";
37
+ import "../chunk-DUZVXBBU.js";
40
38
  import "../chunk-7QLSKOSU.js";
41
39
  import "../chunk-KZERVKTD.js";
42
- import "../chunk-75CA37FZ.js";
43
- import "../chunk-HJXZJF6O.js";
40
+ import "../chunk-FQ2GORVG.js";
41
+ import "../chunk-ZBHUHJG6.js";
44
42
  import "../chunk-T7E75EKA.js";
45
- import "../chunk-2QRE6QH2.js";
46
- import "../chunk-L6USMDTW.js";
47
- import "../chunk-Q4E56K4X.js";
43
+ import "../chunk-5QUPKDI5.js";
44
+ import "../chunk-7DVNSQWF.js";
45
+ import "../chunk-I5IJRMNV.js";
48
46
 
49
47
  // bin/pushary-stop-hook.ts
50
48
  var AGENT = activeIdentity(process.argv);
@@ -2,47 +2,45 @@
2
2
  import {
3
3
  activeHookSource,
4
4
  activeIdentity
5
- } from "../chunk-TE5M6GGK.js";
6
- import "../chunk-IR5FRUPQ.js";
5
+ } from "../chunk-KHNFLYJO.js";
7
6
  import {
8
7
  readHookInput
9
- } from "../chunk-HWQNQVY6.js";
10
- import "../chunk-VRT3EEZN.js";
8
+ } from "../chunk-WWOHTTVP.js";
9
+ import "../chunk-DPGSLWOS.js";
11
10
  import "../chunk-SGZJ5LYH.js";
12
- import "../chunk-NVGDMTX3.js";
13
- import "../chunk-SPXBXN23.js";
14
- import "../chunk-SJN22ADZ.js";
15
- import "../chunk-D7SOOVHX.js";
16
- import "../chunk-ZC3TF4LR.js";
17
- import "../chunk-UKNKYTTY.js";
18
- import "../chunk-Q23MMVTD.js";
19
- import "../chunk-5AXCOTIT.js";
20
- import "../chunk-7JTVYR5B.js";
21
- import "../chunk-KK54WQ74.js";
11
+ import "../chunk-YIG2R3BJ.js";
12
+ import "../chunk-DL7XWKYV.js";
13
+ import "../chunk-LKLVTG3V.js";
14
+ import "../chunk-2QGYMY7A.js";
15
+ import "../chunk-3I6IVOZV.js";
16
+ import "../chunk-WG3K4TCH.js";
17
+ import "../chunk-ZBK6E2OR.js";
18
+ import "../chunk-CLOSJ4ES.js";
19
+ import "../chunk-M6BZZFVQ.js";
22
20
  import "../chunk-XHKBHWLX.js";
23
21
  import "../chunk-6ICPEJY5.js";
24
22
  import {
25
23
  handleStopFailure
26
- } from "../chunk-CCDVL63C.js";
24
+ } from "../chunk-KRCR2CRQ.js";
27
25
  import "../chunk-N6IOSZOE.js";
28
- import "../chunk-DJ4BB264.js";
29
- import "../chunk-WN6WYUCV.js";
30
- import "../chunk-DA4FTGTK.js";
26
+ import "../chunk-CD47ZFFZ.js";
27
+ import "../chunk-2VZAALEJ.js";
28
+ import "../chunk-DKMD6AWR.js";
31
29
  import "../chunk-POFBE6ZY.js";
32
30
  import "../chunk-GMXKITVA.js";
33
- import "../chunk-5BHROGRB.js";
34
- import "../chunk-ZPW4MJOV.js";
35
- import "../chunk-4QKM44N6.js";
36
- import "../chunk-W4Q7NFXU.js";
37
- import "../chunk-3BUAEQCY.js";
31
+ import "../chunk-N4QSPI3B.js";
32
+ import "../chunk-MKTJEXZ3.js";
33
+ import "../chunk-LWOO567I.js";
34
+ import "../chunk-TCQ43LSG.js";
35
+ import "../chunk-DUZVXBBU.js";
38
36
  import "../chunk-7QLSKOSU.js";
39
37
  import "../chunk-KZERVKTD.js";
40
- import "../chunk-75CA37FZ.js";
41
- import "../chunk-HJXZJF6O.js";
38
+ import "../chunk-FQ2GORVG.js";
39
+ import "../chunk-ZBHUHJG6.js";
42
40
  import "../chunk-T7E75EKA.js";
43
- import "../chunk-2QRE6QH2.js";
44
- import "../chunk-L6USMDTW.js";
45
- import "../chunk-Q4E56K4X.js";
41
+ import "../chunk-5QUPKDI5.js";
42
+ import "../chunk-7DVNSQWF.js";
43
+ import "../chunk-I5IJRMNV.js";
46
44
 
47
45
  // bin/pushary-stopfailure-hook.ts
48
46
  var AGENT = activeIdentity(process.argv);
@@ -1,37 +1,40 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ exitOnFailedSettingsRequest
4
+ } from "../chunk-BEJRK4DF.js";
5
+ import "../chunk-2WXF3QJR.js";
2
6
  import {
3
7
  createIo
4
8
  } from "../chunk-U4TMAANR.js";
5
9
  import {
6
10
  exitOnHelpFlag
7
- } from "../chunk-FBD3QGVJ.js";
11
+ } from "../chunk-CKV3UPMU.js";
8
12
  import {
9
13
  rejectUnknownFlags
10
14
  } from "../chunk-GMXKITVA.js";
15
+ import "../chunk-N4QSPI3B.js";
16
+ import "../chunk-LWOO567I.js";
17
+ import "../chunk-TCQ43LSG.js";
18
+ import "../chunk-DUZVXBBU.js";
11
19
  import {
12
20
  UsageError
13
21
  } from "../chunk-7QLSKOSU.js";
14
22
  import {
15
23
  EXIT
16
24
  } from "../chunk-KZERVKTD.js";
25
+ import "../chunk-FQ2GORVG.js";
26
+ import "../chunk-ZBHUHJG6.js";
27
+ import "../chunk-T7E75EKA.js";
17
28
  import {
18
29
  getApiKey,
19
30
  getBaseUrl
20
- } from "../chunk-2QRE6QH2.js";
21
- import "../chunk-L6USMDTW.js";
22
- import "../chunk-Q4E56K4X.js";
31
+ } from "../chunk-5QUPKDI5.js";
32
+ import "../chunk-7DVNSQWF.js";
33
+ import "../chunk-I5IJRMNV.js";
23
34
 
24
35
  // bin/pushary-suggestions.ts
25
36
  exitOnHelpFlag("suggestions");
26
- var { dim, green, cyan, red } = createIo();
27
- var errorMessage = async (res) => {
28
- try {
29
- const body = await res.json();
30
- return body.error ?? `HTTP ${res.status}`;
31
- } catch {
32
- return `HTTP ${res.status}`;
33
- }
34
- };
37
+ var { dim, green, cyan } = createIo();
35
38
  {
36
39
  const raw = process.argv.slice(2);
37
40
  const positional = raw[0] === "suggestions" ? raw.slice(1) : raw;
@@ -46,6 +49,7 @@ var errorMessage = async (res) => {
46
49
  var main = async () => {
47
50
  const apiKey = getApiKey();
48
51
  const baseUrl = getBaseUrl();
52
+ const settings = { request: "suggestions", apiKey, baseUrl };
49
53
  const headers = { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" };
50
54
  const rest = process.argv.slice(2);
51
55
  const args = rest[0] === "suggestions" ? rest.slice(1) : rest;
@@ -61,18 +65,12 @@ var main = async () => {
61
65
  headers,
62
66
  body: JSON.stringify({ id })
63
67
  });
64
- if (!res2.ok) {
65
- console.error(` ${red("\u2717")} ${await errorMessage(res2)}`);
66
- process.exit(1);
67
- }
68
+ if (!res2.ok) await exitOnFailedSettingsRequest(res2, settings);
68
69
  console.log(` ${green("\u2713")} Accepted. The rule is live now; your agents will pick it up on their next check.`);
69
70
  return;
70
71
  }
71
72
  const res = await fetch(`${baseUrl}/api/mcp/suggestions`, { headers });
72
- if (!res.ok) {
73
- console.error(` ${red("\u2717")} ${await errorMessage(res)}`);
74
- process.exit(1);
75
- }
73
+ if (!res.ok) await exitOnFailedSettingsRequest(res, settings);
76
74
  const { suggestions } = await res.json();
77
75
  if (suggestions.length === 0) {
78
76
  console.log(` ${dim("No pending suggestions. Keep approving; a rule is offered once a pattern is earned.")}`);
@@ -1,32 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  registerTranscript
4
- } from "../chunk-VRT3EEZN.js";
4
+ } from "../chunk-DPGSLWOS.js";
5
5
  import "../chunk-SGZJ5LYH.js";
6
- import "../chunk-NVGDMTX3.js";
7
- import "../chunk-SPXBXN23.js";
8
- import "../chunk-SJN22ADZ.js";
9
- import "../chunk-D7SOOVHX.js";
10
- import "../chunk-ZC3TF4LR.js";
11
- import "../chunk-UKNKYTTY.js";
12
- import "../chunk-Q23MMVTD.js";
13
- import "../chunk-5AXCOTIT.js";
14
- import "../chunk-7JTVYR5B.js";
15
- import "../chunk-KK54WQ74.js";
6
+ import "../chunk-YIG2R3BJ.js";
7
+ import "../chunk-DL7XWKYV.js";
8
+ import "../chunk-LKLVTG3V.js";
9
+ import "../chunk-2QGYMY7A.js";
10
+ import "../chunk-3I6IVOZV.js";
11
+ import "../chunk-WG3K4TCH.js";
12
+ import "../chunk-ZBK6E2OR.js";
13
+ import "../chunk-CLOSJ4ES.js";
14
+ import "../chunk-M6BZZFVQ.js";
16
15
  import "../chunk-XHKBHWLX.js";
17
16
  import "../chunk-6ICPEJY5.js";
18
- import "../chunk-DJ4BB264.js";
17
+ import "../chunk-CD47ZFFZ.js";
19
18
  import "../chunk-GMXKITVA.js";
20
- import "../chunk-5BHROGRB.js";
21
- import "../chunk-3BUAEQCY.js";
19
+ import "../chunk-N4QSPI3B.js";
20
+ import "../chunk-DUZVXBBU.js";
22
21
  import "../chunk-7QLSKOSU.js";
23
22
  import "../chunk-KZERVKTD.js";
24
- import "../chunk-75CA37FZ.js";
25
- import "../chunk-HJXZJF6O.js";
23
+ import "../chunk-FQ2GORVG.js";
24
+ import "../chunk-ZBHUHJG6.js";
26
25
  import "../chunk-T7E75EKA.js";
27
- import "../chunk-2QRE6QH2.js";
28
- import "../chunk-L6USMDTW.js";
29
- import "../chunk-Q4E56K4X.js";
26
+ import "../chunk-5QUPKDI5.js";
27
+ import "../chunk-7DVNSQWF.js";
28
+ import "../chunk-I5IJRMNV.js";
30
29
 
31
30
  // bin/pushary-transcript-register.ts
32
31
  var raw = "";
@@ -6,17 +6,17 @@ import {
6
6
  } from "../chunk-SGZJ5LYH.js";
7
7
  import {
8
8
  transcriptsEnabled
9
- } from "../chunk-KK54WQ74.js";
9
+ } from "../chunk-M6BZZFVQ.js";
10
10
  import {
11
11
  exitOnHelpFlag
12
- } from "../chunk-FBD3QGVJ.js";
13
- import "../chunk-5BHROGRB.js";
12
+ } from "../chunk-CKV3UPMU.js";
13
+ import "../chunk-N4QSPI3B.js";
14
14
  import "../chunk-KZERVKTD.js";
15
- import "../chunk-75CA37FZ.js";
15
+ import "../chunk-FQ2GORVG.js";
16
16
  import "../chunk-T7E75EKA.js";
17
- import "../chunk-2QRE6QH2.js";
18
- import "../chunk-L6USMDTW.js";
19
- import "../chunk-Q4E56K4X.js";
17
+ import "../chunk-5QUPKDI5.js";
18
+ import "../chunk-7DVNSQWF.js";
19
+ import "../chunk-I5IJRMNV.js";
20
20
 
21
21
  // bin/pushary-transcripts.ts
22
22
  exitOnHelpFlag("transcripts");
@@ -5,42 +5,52 @@ import {
5
5
  finishUpgradeWithLock,
6
6
  readGlobalUpgradeSubject,
7
7
  runAutoUpdate,
8
+ upgradeFinishExitCode,
9
+ upgradeFinishOutcome,
8
10
  upgradeInstalledPackage,
9
11
  withUpgradeLock
10
- } from "../chunk-PYZC54KA.js";
12
+ } from "../chunk-ZW3XZLJC.js";
11
13
  import {
12
14
  installWithUpgradeLock
13
- } from "../chunk-EZAFBC2C.js";
14
- import {
15
- describeCodexTrustConfirmation
16
- } from "../chunk-JUFKJCZG.js";
15
+ } from "../chunk-V5HPPF3E.js";
17
16
  import {
18
17
  ensureCodexTrustAfterReapply,
19
18
  reapplyAllAgents
20
- } from "../chunk-2I23NFVT.js";
21
- import "../chunk-IMGJYFCX.js";
19
+ } from "../chunk-MXHTGVFZ.js";
20
+ import "../chunk-3Z3A37WD.js";
21
+ import {
22
+ describeCodexTrustConfirmation
23
+ } from "../chunk-6TE27XZR.js";
24
+ import "../chunk-MGRFDGWU.js";
22
25
  import {
23
26
  waitForMachineReadiness
24
- } from "../chunk-SVTHEMM3.js";
25
- import "../chunk-IR5FRUPQ.js";
27
+ } from "../chunk-2QTO5YIT.js";
28
+ import {
29
+ appAgentKey
30
+ } from "../chunk-OP7IHC2I.js";
31
+ import "../chunk-MFF3ONG5.js";
32
+ import "../chunk-KHNFLYJO.js";
26
33
  import {
27
34
  detectProviderLiveCapabilities,
28
35
  expectedLaunchCapabilities,
29
36
  hasSpawnProvider,
30
37
  resolveControlPolicy
31
- } from "../chunk-MKJ3RTUS.js";
38
+ } from "../chunk-I6MJXLMY.js";
32
39
  import "../chunk-RIVNNBEK.js";
33
40
  import {
34
41
  AUTO_UPDATE_DISABLE_ENV,
35
42
  describeAutoUpdateCheck,
36
43
  hasPendingUpgradeFinish,
37
44
  isAutoUpdateDisabledByEnv,
45
+ isUnfinishedAutoUpdate,
38
46
  parseAutoUpdateFlag,
39
47
  readAutoUpdateState,
40
48
  updateAutoUpdateState
41
- } from "../chunk-SNJ3BOCP.js";
42
- import "../chunk-D7SOOVHX.js";
49
+ } from "../chunk-7PT35RY2.js";
50
+ import "../chunk-YIG2R3BJ.js";
51
+ import "../chunk-DL7XWKYV.js";
43
52
  import {
53
+ DAEMON_COLD_START_TIMEOUT_MS,
44
54
  daemonHasRemoteProof,
45
55
  daemonServiceManagerAvailable,
46
56
  disableDaemonService,
@@ -50,45 +60,60 @@ import {
50
60
  replaceDaemonService,
51
61
  stopDaemonService,
52
62
  waitForDaemonRemoteProof
53
- } from "../chunk-ZC3TF4LR.js";
54
- import "../chunk-UKNKYTTY.js";
63
+ } from "../chunk-LKLVTG3V.js";
64
+ import "../chunk-2QGYMY7A.js";
65
+ import "../chunk-3I6IVOZV.js";
66
+ import "../chunk-WG3K4TCH.js";
55
67
  import "../chunk-XHKBHWLX.js";
56
68
  import "../chunk-6ICPEJY5.js";
57
- import "../chunk-DJ4BB264.js";
69
+ import "../chunk-KRCR2CRQ.js";
70
+ import "../chunk-N6IOSZOE.js";
71
+ import "../chunk-CD47ZFFZ.js";
72
+ import "../chunk-2VZAALEJ.js";
73
+ import "../chunk-DKMD6AWR.js";
58
74
  import "../chunk-POFBE6ZY.js";
59
75
  import {
60
76
  exitOnHelpFlag
61
- } from "../chunk-FBD3QGVJ.js";
77
+ } from "../chunk-CKV3UPMU.js";
78
+ import "../chunk-GMXKITVA.js";
62
79
  import {
63
- readControlMode
64
- } from "../chunk-5BHROGRB.js";
65
- import "../chunk-3BUAEQCY.js";
80
+ readControlMode,
81
+ recordMacAppKeyPrefix
82
+ } from "../chunk-N4QSPI3B.js";
83
+ import "../chunk-MKTJEXZ3.js";
84
+ import "../chunk-LWOO567I.js";
85
+ import "../chunk-TCQ43LSG.js";
86
+ import "../chunk-DUZVXBBU.js";
87
+ import "../chunk-7QLSKOSU.js";
66
88
  import {
67
89
  EXIT
68
90
  } from "../chunk-KZERVKTD.js";
69
- import "../chunk-75CA37FZ.js";
91
+ import "../chunk-FQ2GORVG.js";
70
92
  import {
71
93
  LATEST_TAG,
72
94
  autoUpdateState,
95
+ bridgeAgentKey,
73
96
  claudeJson,
74
97
  codexConfigToml,
75
98
  cursorPluginDir,
76
99
  fetchLatestPublishedVersion,
77
100
  geminiSettings,
78
101
  vscodePluginDir
79
- } from "../chunk-HJXZJF6O.js";
80
- import "../chunk-T7E75EKA.js";
102
+ } from "../chunk-ZBHUHJG6.js";
103
+ import {
104
+ readJsonSafe
105
+ } from "../chunk-T7E75EKA.js";
81
106
  import {
82
107
  getApiKey
83
- } from "../chunk-2QRE6QH2.js";
108
+ } from "../chunk-5QUPKDI5.js";
84
109
  import {
85
110
  NPX_LATEST_COMMAND
86
- } from "../chunk-L6USMDTW.js";
111
+ } from "../chunk-7DVNSQWF.js";
87
112
  import {
88
113
  CANONICAL_PACKAGE,
89
114
  LEGACY_PACKAGE,
90
115
  getPackageVersion
91
- } from "../chunk-Q4E56K4X.js";
116
+ } from "../chunk-I5IJRMNV.js";
92
117
 
93
118
  // bin/pushary-upgrade.ts
94
119
  import { existsSync } from "fs";
@@ -137,9 +162,13 @@ var finishUpgrade = async () => {
137
162
  } catch {
138
163
  apiKey = void 0;
139
164
  }
165
+ const bridgeAgentKey2 = readJsonSafe(bridgeAgentKey());
166
+ const macAppKey = bridgeAgentKey2.kind === "ok" ? appAgentKey(bridgeAgentKey2.value) : null;
167
+ if (macAppKey) recordMacAppKeyPrefix(macAppKey);
140
168
  const inspectedAgents = reapplyAllAgents(apiKey);
141
169
  const codexTrust = await ensureCodexTrustAfterReapply(inspectedAgents);
142
170
  const refreshed = inspectedAgents.filter((agent) => agent.result.reapplied);
171
+ const keptForApp = inspectedAgents.filter((agent) => agent.heldBy === "app");
143
172
  const failedRefreshes = inspectedAgents.filter((agent) => agent.result.failed);
144
173
  const configuredControlProviders = inspectedAgents.filter((agent) => agent.result.configured && (agent.id === "claude" || agent.id === "codex" || agent.id === "gemini")).map((agent) => agent.id);
145
174
  const controlMode = readControlMode();
@@ -166,7 +195,7 @@ var finishUpgrade = async () => {
166
195
  } else {
167
196
  const service = await replaceDaemonService();
168
197
  const daemon = service.kind === "ok" ? await ensureDaemonRunning({ spawnDaemon: () => {
169
- } }) : null;
198
+ }, waitTimeoutMs: DAEMON_COLD_START_TIMEOUT_MS }) : null;
170
199
  const localProof = daemon?.kind === "running" || daemon?.kind === "started" ? await waitForDaemonRemoteProof() : null;
171
200
  const serverProof = localProof && daemonHasRemoteProof(localProof) ? await waitForMachineReadiness(apiKey, expectedLaunchCapabilities(configuredControlProviders)) : null;
172
201
  daemonReady = service.kind === "ok" && localProof !== null && daemonHasRemoteProof(localProof) && (serverProof?.kind === "ready" || serverProof?.kind === "unsupported");
@@ -174,6 +203,7 @@ var finishUpgrade = async () => {
174
203
  } else if (controlMode === "on" && controlPolicy === "unsupported") {
175
204
  daemonReady = false;
176
205
  }
206
+ const finishOutcome = upgradeFinishOutcome({ controlMode, controlPolicy, daemonReady, failedRefreshCount: failedRefreshes.length });
177
207
  console.log();
178
208
  if (refreshed.length > 0) {
179
209
  console.log("Refreshed so the new hook set is active now:");
@@ -185,9 +215,14 @@ var finishUpgrade = async () => {
185
215
  console.log();
186
216
  console.log("No key was readable here, so MCP entries kept the key they already had.");
187
217
  }
188
- } else if (failedRefreshes.length === 0) {
218
+ } else if (failedRefreshes.length === 0 && keptForApp.length === 0) {
189
219
  console.log("No agent config on this machine needed refreshing.");
190
220
  }
221
+ if (keptForApp.length > 0) {
222
+ if (refreshed.length > 0) console.log();
223
+ console.log(KEPT_FOR_APP_HEADING);
224
+ for (const agent of keptForApp) console.log(` ${agent.label}`);
225
+ }
191
226
  if (codexTrust) {
192
227
  console.log();
193
228
  console.log(describeCodexTrustConfirmation(codexTrust));
@@ -195,17 +230,18 @@ var finishUpgrade = async () => {
195
230
  console.log();
196
231
  if (!daemonReady) {
197
232
  console.error(controlPolicy === "disabled" ? "Upgrade installed, but the disabled background service could not be fully removed. Re-run setup with --control off." : controlPolicy === "legacy" ? legacyStopFailure ? `Upgrade installed, but the legacy background service could not be stopped: ${legacyStopFailure}. Run setup with --control off.` : "Upgrade installed and the legacy background service was stopped, but it cannot be safely adopted. Run setup with --control off, or restore its provider and native service manager." : controlPolicy === "enabled" && !apiKey ? "Upgrade installed, but phone-start could not be reconciled because no API key was readable. Re-run setup." : "Upgrade installed, but the background service did not start. Run: pushary daemon install");
198
- process.exitCode = 1;
233
+ process.exitCode = upgradeFinishExitCode(finishOutcome);
199
234
  return;
200
235
  }
201
236
  if (failedRefreshes.length > 0) {
202
237
  console.error(`Upgrade installed, but refreshing agent configuration failed for: ${failedRefreshes.map((agent) => agent.label).join(", ")}. Check the config files and run pushary upgrade again.`);
203
- process.exitCode = 1;
238
+ process.exitCode = upgradeFinishExitCode(finishOutcome);
204
239
  return;
205
240
  }
206
241
  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.");
207
242
  console.log("Verify with: pushary doctor");
208
243
  };
244
+ var KEPT_FOR_APP_HEADING = "Kept for the Pushary Mac app, which owns these agents. Nothing in their config was changed:";
209
245
  var AUTO_UPDATE_ON_MESSAGE = "Automatic updates are on. Pushary checks for a new version once a day, when an agent session starts.";
210
246
  var AUTO_UPDATE_OFF_MESSAGE = "Automatic updates are off. Turn them back on with: pushary upgrade --auto=on";
211
247
  var AUTO_UPDATE_RUN_MESSAGES = {
@@ -227,7 +263,7 @@ var runAutomaticUpdate = async () => {
227
263
  return;
228
264
  }
229
265
  console.log(`Automatic update: ${describeAutoUpdateCheck(outcome.state)}`);
230
- if (outcome.state.lastResult === "failed" || outcome.state.lastResult === "finish_pending") process.exitCode = 1;
266
+ if (isUnfinishedAutoUpdate(outcome.state)) process.exitCode = 1;
231
267
  };
232
268
  var FINISH_FAILED_MESSAGE = "Upgrade installed, but refreshing the agent configs did not finish. Fix the problem printed above, then run pushary upgrade again.";
233
269
  var describeFinishFailure = (finish) => finish.kind === "entry_missing" ? `Upgrade installed, but the new pushary-upgrade entry was not found at ${finish.entry}.` : FINISH_FAILED_MESSAGE;
@@ -272,7 +308,7 @@ var upgradeSubject = async (subject) => {
272
308
  fetchLatest: (packageName) => fetchLatestPublishedVersion({ packageName }),
273
309
  hasPendingFinish: (installed) => hasPendingUpgradeFinish(readAutoUpdateState(autoUpdateState()), installed),
274
310
  recordFinished: () => {
275
- updateAutoUpdateState(autoUpdateState(), { lastResult: "updated", detail: void 0, announced: false });
311
+ updateAutoUpdateState(autoUpdateState(), { lastResult: "updated", detail: void 0, announced: false, finishAttempts: void 0 });
276
312
  },
277
313
  announce: (line) => console.log(line),
278
314
  install: (packageName) => installWithUpgradeLock({ packageName, version: LATEST_TAG, timeoutMs: 12e4 }),