@pushary/agent-hooks 0.89.11 → 0.89.13

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 (80) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +4 -2
  3. package/dist/bin/pushary-bell-hook.js +5 -5
  4. package/dist/bin/pushary-bell.js +11 -11
  5. package/dist/bin/pushary-claude.js +225 -48
  6. package/dist/bin/pushary-clean.js +49 -29
  7. package/dist/bin/pushary-codex-bridge.js +17 -16
  8. package/dist/bin/pushary-codex-hook.js +11 -10
  9. package/dist/bin/pushary-codex.js +7 -7
  10. package/dist/bin/pushary-connect.js +12 -12
  11. package/dist/bin/pushary-daemon-supervisor.d.ts +1 -0
  12. package/dist/bin/pushary-daemon-supervisor.js +27 -0
  13. package/dist/bin/pushary-daemon.js +22 -22
  14. package/dist/bin/pushary-disconnect.js +9 -9
  15. package/dist/bin/pushary-doctor.js +59 -49
  16. package/dist/bin/pushary-elicitation-hook.js +4 -4
  17. package/dist/bin/pushary-gemini-bridge.js +16 -15
  18. package/dist/bin/pushary-gemini-hook.js +10 -9
  19. package/dist/bin/pushary-hook.js +13 -13
  20. package/dist/bin/pushary-login.js +11 -11
  21. package/dist/bin/pushary-logout.js +11 -11
  22. package/dist/bin/pushary-mode.js +5 -5
  23. package/dist/bin/pushary-notification-hook.js +7 -7
  24. package/dist/bin/pushary-opencode-hook.js +10 -9
  25. package/dist/bin/pushary-permission-denied-hook.js +11 -11
  26. package/dist/bin/pushary-permission-hook.js +11 -11
  27. package/dist/bin/pushary-post-hook.js +7 -7
  28. package/dist/bin/pushary-prompt-hook.js +7 -7
  29. package/dist/bin/pushary-session-end-hook.js +7 -7
  30. package/dist/bin/pushary-session-start-hook.js +7 -7
  31. package/dist/bin/pushary-setup.js +87 -59
  32. package/dist/bin/pushary-stats.js +4 -4
  33. package/dist/bin/pushary-status.js +14 -14
  34. package/dist/bin/pushary-stop-hook.js +7 -7
  35. package/dist/bin/pushary-stopfailure-hook.js +7 -7
  36. package/dist/bin/pushary-suggestions.js +2 -2
  37. package/dist/bin/pushary-transcripts.d.ts +1 -0
  38. package/dist/bin/pushary-transcripts.js +79 -0
  39. package/dist/bin/pushary-upgrade.js +21 -21
  40. package/dist/bin/pushary-wait.js +5 -5
  41. package/dist/bin/pushary.js +3 -2
  42. package/dist/{chunk-6XUABEX2.js → chunk-3OXHYPZG.js} +1 -1
  43. package/dist/{chunk-QA72MKIT.js → chunk-3YGGEDJK.js} +5 -5
  44. package/dist/{chunk-IUN6VOKV.js → chunk-4IPSMEGT.js} +68 -46
  45. package/dist/{chunk-XX2V4QS5.js → chunk-4LL6LG5X.js} +2 -2
  46. package/dist/{chunk-J4K75V4D.js → chunk-5MNTWAAJ.js} +10 -9
  47. package/dist/{chunk-KVE5RCQL.js → chunk-5YEF55AX.js} +1 -1
  48. package/dist/{chunk-3SQYKLBW.js → chunk-7JZCADBR.js} +46 -18
  49. package/dist/{chunk-IUWRVTQK.js → chunk-ANMHIZZY.js} +1 -1
  50. package/dist/{chunk-6EKQZA6R.js → chunk-B2HND22S.js} +1 -1
  51. package/dist/{chunk-TRVIRETT.js → chunk-C56VHSXU.js} +1 -1
  52. package/dist/{chunk-TEZ2FZD6.js → chunk-CBGGUEKE.js} +2 -2
  53. package/dist/{chunk-3HFK3UXM.js → chunk-FOGW6O2Y.js} +1 -1
  54. package/dist/{chunk-3XTFX4CL.js → chunk-GMJDQDXU.js} +17 -2
  55. package/dist/{chunk-DKWM5T3P.js → chunk-JTBDBKHU.js} +2 -2
  56. package/dist/{chunk-Q223OM5J.js → chunk-JVLB5CAJ.js} +4 -4
  57. package/dist/{chunk-2LPEZYMC.js → chunk-KNLKHJZR.js} +1 -1
  58. package/dist/{chunk-X4ZUUFKV.js → chunk-L4ZCFMWW.js} +63 -1
  59. package/dist/chunk-M3UABYRT.js +20 -0
  60. package/dist/{chunk-PZRWFWSR.js → chunk-MNTZKFZI.js} +7 -7
  61. package/dist/{chunk-FZ73G2RO.js → chunk-MSTHT2M7.js} +25 -6
  62. package/dist/{chunk-TG3T3M4K.js → chunk-N4QJ3CLX.js} +6 -2
  63. package/dist/{chunk-3CUDMTL4.js → chunk-NBDU3R3G.js} +10 -3
  64. package/dist/{chunk-FXIL7RCL.js → chunk-OX35BSPV.js} +4 -4
  65. package/dist/{chunk-UDBJHQMG.js → chunk-QFJZHVVL.js} +1 -1
  66. package/dist/chunk-QZCFVWA7.js +58 -0
  67. package/dist/{chunk-TY5HVMXT.js → chunk-RAEPAUNJ.js} +1 -1
  68. package/dist/{chunk-NCVIWGVA.js → chunk-S4BLNILH.js} +1 -1
  69. package/dist/{chunk-MZGWKIUZ.js → chunk-VASZ6TWW.js} +7 -3
  70. package/dist/{chunk-SYUIXXQW.js → chunk-VF3RTVWY.js} +1 -1
  71. package/dist/{chunk-LURY4WNF.js → chunk-WHDSJ6PD.js} +1 -1
  72. package/dist/chunk-YKLCWWEI.js +76 -0
  73. package/dist/{chunk-253WC6O5.js → chunk-YXT55PYF.js} +1 -1
  74. package/dist/{chunk-BLODMQKJ.js → chunk-ZO43JTT3.js} +1 -1
  75. package/dist/{chunk-OLAGKKSR.js → chunk-ZP3SNUP7.js} +16 -6
  76. package/dist/{chunk-34GN3IPX.js → chunk-ZWEKONU6.js} +1 -1
  77. package/dist/src/index.d.ts +3 -1
  78. package/dist/src/index.js +15 -11
  79. package/package.json +4 -2
  80. /package/dist/{chunk-X6RXX2NF.js → chunk-QINYXLA5.js} +0 -0
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionDenied
4
- } from "../chunk-J4K75V4D.js";
5
- import "../chunk-6EKQZA6R.js";
6
- import "../chunk-NCVIWGVA.js";
7
- import "../chunk-3HFK3UXM.js";
4
+ } from "../chunk-5MNTWAAJ.js";
5
+ import "../chunk-B2HND22S.js";
6
+ import "../chunk-S4BLNILH.js";
7
+ import "../chunk-FOGW6O2Y.js";
8
8
  import {
9
9
  readHookInput
10
10
  } from "../chunk-6CUUA7HO.js";
11
11
  import "../chunk-YHG74UFF.js";
12
- import "../chunk-FXIL7RCL.js";
12
+ import "../chunk-OX35BSPV.js";
13
13
  import "../chunk-JHJHCMAF.js";
14
- import "../chunk-TG3T3M4K.js";
15
- import "../chunk-DKWM5T3P.js";
16
- import "../chunk-QA72MKIT.js";
14
+ import "../chunk-N4QJ3CLX.js";
15
+ import "../chunk-JTBDBKHU.js";
16
+ import "../chunk-3YGGEDJK.js";
17
17
  import "../chunk-BSZYIAZL.js";
18
18
  import "../chunk-SAF6HGAA.js";
19
- import "../chunk-IUWRVTQK.js";
20
19
  import "../chunk-7QLSKOSU.js";
21
20
  import "../chunk-KZERVKTD.js";
22
- import "../chunk-XX2V4QS5.js";
21
+ import "../chunk-ANMHIZZY.js";
22
+ import "../chunk-4LL6LG5X.js";
23
23
  import "../chunk-2UMNXADU.js";
24
- import "../chunk-X6RXX2NF.js";
24
+ import "../chunk-QINYXLA5.js";
25
25
 
26
26
  // bin/pushary-permission-denied-hook.ts
27
27
  var main = async () => {
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePermissionRequest
4
- } from "../chunk-J4K75V4D.js";
5
- import "../chunk-6EKQZA6R.js";
6
- import "../chunk-NCVIWGVA.js";
7
- import "../chunk-3HFK3UXM.js";
4
+ } from "../chunk-5MNTWAAJ.js";
5
+ import "../chunk-B2HND22S.js";
6
+ import "../chunk-S4BLNILH.js";
7
+ import "../chunk-FOGW6O2Y.js";
8
8
  import {
9
9
  readHookInput
10
10
  } from "../chunk-6CUUA7HO.js";
11
11
  import "../chunk-YHG74UFF.js";
12
- import "../chunk-FXIL7RCL.js";
12
+ import "../chunk-OX35BSPV.js";
13
13
  import "../chunk-JHJHCMAF.js";
14
- import "../chunk-TG3T3M4K.js";
15
- import "../chunk-DKWM5T3P.js";
16
- import "../chunk-QA72MKIT.js";
14
+ import "../chunk-N4QJ3CLX.js";
15
+ import "../chunk-JTBDBKHU.js";
16
+ import "../chunk-3YGGEDJK.js";
17
17
  import "../chunk-BSZYIAZL.js";
18
18
  import "../chunk-SAF6HGAA.js";
19
- import "../chunk-IUWRVTQK.js";
20
19
  import "../chunk-7QLSKOSU.js";
21
20
  import "../chunk-KZERVKTD.js";
22
- import "../chunk-XX2V4QS5.js";
21
+ import "../chunk-ANMHIZZY.js";
22
+ import "../chunk-4LL6LG5X.js";
23
23
  import "../chunk-2UMNXADU.js";
24
- import "../chunk-X6RXX2NF.js";
24
+ import "../chunk-QINYXLA5.js";
25
25
 
26
26
  // bin/pushary-permission-hook.ts
27
27
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handlePostToolUse
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-post-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleUserPrompt
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-prompt-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleSessionEnd
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-session-end-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleSessionStart
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-session-start-hook.ts
22
22
  var main = async () => {
@@ -1,24 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- detectClaudeVersion
4
- } from "../chunk-KVE5RCQL.js";
3
+ runBrowserLogin
4
+ } from "../chunk-Z3Z4VK5F.js";
5
5
  import {
6
- claudeWired,
7
- codexWired,
8
- geminiWired
9
- } from "../chunk-FZ73G2RO.js";
6
+ detectClaudeVersion
7
+ } from "../chunk-5YEF55AX.js";
10
8
  import {
11
9
  waitForMachineReadiness
12
- } from "../chunk-TY5HVMXT.js";
13
- import {
14
- runBrowserLogin
15
- } from "../chunk-Z3Z4VK5F.js";
10
+ } from "../chunk-RAEPAUNJ.js";
16
11
  import {
17
12
  HERMES_CONFIG_SCRIPT,
18
13
  isHermesConfigReceipt,
19
14
  resolveHermesPython,
20
15
  runHermesPythonScript
21
- } from "../chunk-UDBJHQMG.js";
16
+ } from "../chunk-QFJZHVVL.js";
22
17
  import {
23
18
  describeDetection,
24
19
  detectAllAgents,
@@ -30,7 +25,13 @@ import {
30
25
  shortenHome,
31
26
  vscodeSettingsTargets,
32
27
  writeInstructionBlock
33
- } from "../chunk-MZGWKIUZ.js";
28
+ } from "../chunk-VASZ6TWW.js";
29
+ import {
30
+ claudeWired,
31
+ codexWired,
32
+ geminiWired,
33
+ pusharyHookExecutable
34
+ } from "../chunk-MSTHT2M7.js";
34
35
  import {
35
36
  OPENCODE_HOOK_BINARY,
36
37
  addOpenCodeMcpServer,
@@ -41,7 +42,7 @@ import {
41
42
  openCodePluginDir,
42
43
  openCodePluginFile,
43
44
  openCodeWired
44
- } from "../chunk-34GN3IPX.js";
45
+ } from "../chunk-ZWEKONU6.js";
45
46
  import {
46
47
  GEMINI_HOOK_BINARY,
47
48
  addClaudeMcpServer,
@@ -54,13 +55,13 @@ import {
54
55
  isClaudeMcpSnapshot,
55
56
  parseVersion,
56
57
  updateClaudeMcpSnapshot
57
- } from "../chunk-Q223OM5J.js";
58
- import "../chunk-6EKQZA6R.js";
58
+ } from "../chunk-JVLB5CAJ.js";
59
+ import "../chunk-B2HND22S.js";
59
60
  import {
60
61
  guardBinary,
61
62
  guardNodeScript,
62
63
  guardedArgv
63
- } from "../chunk-SYUIXXQW.js";
64
+ } from "../chunk-VF3RTVWY.js";
64
65
  import {
65
66
  daemonHasRemoteProof,
66
67
  daemonServiceManagerAvailable,
@@ -71,25 +72,28 @@ import {
71
72
  replaceDaemonService,
72
73
  stopDaemonService,
73
74
  waitForDaemonRemoteProof
74
- } from "../chunk-3SQYKLBW.js";
75
+ } from "../chunk-7JZCADBR.js";
75
76
  import {
76
77
  detectProviderLiveCapabilities,
77
78
  hasSpawnProvider,
78
79
  resolveControlPolicy
79
- } from "../chunk-6XUABEX2.js";
80
+ } from "../chunk-3OXHYPZG.js";
81
+ import {
82
+ transcriptPreferenceForSetup
83
+ } from "../chunk-M3UABYRT.js";
80
84
  import "../chunk-XHKBHWLX.js";
81
85
  import {
82
86
  installGlobally,
83
87
  npmErrorMessage,
84
88
  resolveGlobalBinDir,
85
89
  resolveGlobalBinary
86
- } from "../chunk-X4ZUUFKV.js";
90
+ } from "../chunk-L4ZCFMWW.js";
87
91
  import {
88
92
  reportEvent
89
- } from "../chunk-FXIL7RCL.js";
93
+ } from "../chunk-OX35BSPV.js";
90
94
  import "../chunk-JHJHCMAF.js";
91
- import "../chunk-TG3T3M4K.js";
92
- import "../chunk-DKWM5T3P.js";
95
+ import "../chunk-N4QJ3CLX.js";
96
+ import "../chunk-JTBDBKHU.js";
93
97
  import {
94
98
  addCodexHookTrust,
95
99
  addCodexHooks,
@@ -111,7 +115,7 @@ import {
111
115
  hermesConfigReceipt,
112
116
  pusharyConfigFile,
113
117
  vscodePluginDir
114
- } from "../chunk-QA72MKIT.js";
118
+ } from "../chunk-3YGGEDJK.js";
115
119
  import {
116
120
  confirmAppConnection,
117
121
  connectDevice,
@@ -120,15 +124,25 @@ import {
120
124
  printConnectInstructions,
121
125
  setHumanStream,
122
126
  verifyRoundTrip
123
- } from "../chunk-2LPEZYMC.js";
127
+ } from "../chunk-KNLKHJZR.js";
124
128
  import "../chunk-3EGEA4KH.js";
125
129
  import {
126
130
  checkApiKey,
127
131
  describeKeyCheck
128
- } from "../chunk-BLODMQKJ.js";
132
+ } from "../chunk-ZO43JTT3.js";
129
133
  import {
130
134
  useColor
131
135
  } from "../chunk-5RUIFDTP.js";
136
+ import {
137
+ parseFlags
138
+ } from "../chunk-GMXKITVA.js";
139
+ import {
140
+ renderCommandHelp
141
+ } from "../chunk-GMJDQDXU.js";
142
+ import {
143
+ getPackageVersion,
144
+ isNewerVersion
145
+ } from "../chunk-DINDL2CF.js";
132
146
  import {
133
147
  KEY_FILE_MODE,
134
148
  exportLine,
@@ -137,41 +151,31 @@ import {
137
151
  readControlMode,
138
152
  readKeySource,
139
153
  writeKey
140
- } from "../chunk-3CUDMTL4.js";
141
- import {
142
- parseFlags
143
- } from "../chunk-GMXKITVA.js";
144
- import {
145
- renderCommandHelp
146
- } from "../chunk-3XTFX4CL.js";
154
+ } from "../chunk-NBDU3R3G.js";
147
155
  import {
148
156
  installClaudeAlias,
149
157
  resolveShellRc
150
158
  } from "../chunk-BC3VCZ3E.js";
151
- import {
152
- getPackageVersion,
153
- isNewerVersion
154
- } from "../chunk-DINDL2CF.js";
155
159
  import "../chunk-BSZYIAZL.js";
156
160
  import "../chunk-SAF6HGAA.js";
157
- import "../chunk-IUWRVTQK.js";
158
161
  import {
159
162
  UsageError
160
163
  } from "../chunk-7QLSKOSU.js";
161
164
  import {
162
165
  EXIT
163
166
  } from "../chunk-KZERVKTD.js";
167
+ import "../chunk-ANMHIZZY.js";
164
168
  import {
165
169
  backupFile,
166
170
  readJsonSafe,
167
171
  writeFileAtomic,
168
172
  writeJsonAtomic
169
- } from "../chunk-XX2V4QS5.js";
173
+ } from "../chunk-4LL6LG5X.js";
170
174
  import "../chunk-2UMNXADU.js";
171
175
  import {
172
176
  CURSOR_GATE_EVENTS,
173
177
  isValidApiKey
174
- } from "../chunk-X6RXX2NF.js";
178
+ } from "../chunk-QINYXLA5.js";
175
179
 
176
180
  // bin/pushary-setup.ts
177
181
  import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync, rmSync, renameSync, realpathSync, readdirSync, statSync, openSync, readSync, closeSync } from "fs";
@@ -192,13 +196,20 @@ var COMMAND_SURFACE = [
192
196
  { command: "pushary mode", summary: "switch between ask, auto and notify-only" },
193
197
  { command: "pushary wait", summary: "block until a pending question is answered" },
194
198
  { command: "pushary stats", summary: "what your agents have been asking" },
195
- { command: "pushary claude", summary: "run Claude Code with the Pushary wrapper" },
199
+ { command: "pushary claude", summary: "run Claude Code with encrypted transcript support" },
196
200
  { command: "pushary doctor", summary: "check the install" }
197
201
  ];
198
202
  var SURFACE_COLUMN = Math.max(...COMMAND_SURFACE.map((entry) => entry.command.length)) + 2;
199
203
  var renderCommandSurface = () => COMMAND_SURFACE.map((entry) => `${entry.command.padEnd(SURFACE_COLUMN)}${entry.summary}`);
200
204
  var nextSteps = (facts, reachable) => {
201
205
  const lines = [];
206
+ if (facts.transcriptSync === false) {
207
+ lines.push("Transcripts: disabled on this machine.");
208
+ lines.push("pushary setup --transcripts on enable encrypted transcript sync");
209
+ } else {
210
+ lines.push("Transcripts: Pushary-launched Claude, Codex and Gemini sessions sync redacted, encrypted content. Your phone can decrypt it; authorized Pushary compliance admins can recover it for documented legal obligations.");
211
+ lines.push("pushary setup --transcripts off disable transcript sync on this machine");
212
+ }
202
213
  if (facts.completed.includes("claude_code")) {
203
214
  lines.push("pushary claude run Claude Code so your phone can start and steer it");
204
215
  }
@@ -304,19 +315,22 @@ import { dirname, join } from "path";
304
315
  var parseCodexVersion = parseVersion;
305
316
  var compareCodexVersion = compareVersion;
306
317
  var versionFromManifest = (probe, binPath) => {
318
+ const readVersion = (path) => {
319
+ const raw = probe.readFile(path);
320
+ if (!raw) return null;
321
+ try {
322
+ const { version } = JSON.parse(raw);
323
+ return typeof version === "string" ? parseCodexVersion(version) : null;
324
+ } catch {
325
+ return null;
326
+ }
327
+ };
307
328
  let dir = dirname(binPath);
329
+ const shimVersion = readVersion(join(dir, "node_modules", "@openai", "codex", "package.json"));
330
+ if (shimVersion) return shimVersion;
308
331
  for (let depth = 0; depth < 4; depth++) {
309
- const raw = probe.readFile(join(dir, "package.json"));
310
- if (raw) {
311
- try {
312
- const { version } = JSON.parse(raw);
313
- if (typeof version === "string") {
314
- const parsed = parseCodexVersion(version);
315
- if (parsed) return parsed;
316
- }
317
- } catch {
318
- }
319
- }
332
+ const version = readVersion(join(dir, "package.json"));
333
+ if (version) return version;
320
334
  const parent = dirname(dir);
321
335
  if (parent === dir) break;
322
336
  dir = parent;
@@ -527,7 +541,7 @@ var effectiveVerify = (options, context) => {
527
541
  };
528
542
  var SETUP_FLAGS = {
529
543
  bools: ["key-stdin", "skip-phone", "yes", "y", "json", "dry-run", "help", "h"],
530
- values: ["key", "connect", "agents", "verify", "control"]
544
+ values: ["key", "connect", "agents", "verify", "control", "transcripts"]
531
545
  };
532
546
  var effectiveControlMode = (options, stored, configPresent) => options.controlExplicit ? options.control : stored ?? (configPresent ? null : options.control);
533
547
  var isAgentChoice = (value) => AGENT_CHOICES.includes(value);
@@ -567,6 +581,10 @@ var parseSetupOptions = (input2) => {
567
581
  const connectMode = connectRaw === void 0 ? "app" : parseConnectMode(connectRaw);
568
582
  const verifyRaw = flags.values.get("verify");
569
583
  const controlRaw = flags.values.get("control");
584
+ const transcriptsRaw = flags.values.get("transcripts")?.trim().toLowerCase();
585
+ if (transcriptsRaw !== void 0 && transcriptsRaw !== "on" && transcriptsRaw !== "off") {
586
+ throw new UsageError(`--transcripts must be one of: on, off (got ${transcriptsRaw})`);
587
+ }
570
588
  const nonInteractive = yes || agentsFlag !== void 0 || flags.bools.has("json") || !input2.stdinIsTty;
571
589
  const verify = verifyRaw !== void 0 ? parseVerifyMode(verifyRaw) : nonInteractive ? "push" : "roundtrip";
572
590
  const key = flags.values.get("key")?.trim() || null;
@@ -604,7 +622,8 @@ var parseSetupOptions = (input2) => {
604
622
  verify,
605
623
  verifyExplicit: verifyRaw !== void 0,
606
624
  control: controlRaw === void 0 ? "auto" : parseControlMode(controlRaw),
607
- controlExplicit: controlRaw !== void 0
625
+ controlExplicit: controlRaw !== void 0,
626
+ transcripts: transcriptsRaw === void 0 ? null : transcriptsRaw === "on"
608
627
  };
609
628
  };
610
629
 
@@ -1190,7 +1209,7 @@ var installCursorUserHooks = (gateScript) => {
1190
1209
  const template = bundled[event]?.[0];
1191
1210
  if (!template) throw new Error(`bundled Cursor hooks.json missing a ${event} entry`);
1192
1211
  const existing = Array.isArray(hooks[event]) ? hooks[event] : [];
1193
- const others = existing.filter((h) => !String(h.command ?? "").includes("pushary-gate"));
1212
+ const others = existing.filter((h) => pusharyHookExecutable(String(h.command ?? "")) === null);
1194
1213
  hooks[event] = [...others, { ...template, command: guardNodeScript(gateScript) }];
1195
1214
  }
1196
1215
  writeJson(CURSOR_USER_HOOKS, { ...userHooks, version: userHooks.version ?? 1, hooks });
@@ -1373,10 +1392,13 @@ ${pluginLocationSnippet(VSCODE_PLUGIN_DIR)}`
1373
1392
  console.log(` ${dim("\u2022")} Fully quit and reopen VS Code to load the plugin`);
1374
1393
  noteManual("Fully quit and reopen VS Code. A Reload Window may not pick up a new plugin location.");
1375
1394
  };
1376
- var saveApiKey = async (apiKey, controlMode) => {
1395
+ var saveApiKey = async (apiKey, controlMode, transcriptSync) => {
1377
1396
  let result;
1378
1397
  await spinner("Saving your API key", async () => {
1379
- result = writeKey(apiKey, controlMode === null ? {} : { controlMode });
1398
+ result = writeKey(apiKey, {
1399
+ ...controlMode === null ? {} : { controlMode },
1400
+ transcriptsEnabled: transcriptSync
1401
+ });
1380
1402
  });
1381
1403
  if (!result) throw new Error("Could not save the API key");
1382
1404
  if (result.configBackupPath) {
@@ -1837,7 +1859,7 @@ var main = async () => {
1837
1859
  const plannedAgents = await resolveAgents(options);
1838
1860
  reportDryRun(null, plannedAgents, null, controlMode);
1839
1861
  emitJson(options, { ok: true, dryRun: true, agents: plannedAgents, control: controlMode, keyCheck: "skipped", key: "none" });
1840
- process.exit(EXIT.OK);
1862
+ return;
1841
1863
  } else if (connectMode === "app" && canShowPairingQr() && !options.skipPhone) {
1842
1864
  console.log(` ${dim("Pairing with your Pushary app.")}`);
1843
1865
  console.log(` ${dim("Agent control requires a paid plan after the trial. Current pricing:")} ${cyan("https://pushary.com/pricing")}`);
@@ -1925,10 +1947,15 @@ var main = async () => {
1925
1947
  if (options.dryRun) {
1926
1948
  reportDryRun(trimmedKey, agents, keyCheck, controlMode);
1927
1949
  emitJson(options, { ok: true, dryRun: true, agents, control: controlMode, keyCheck: keyCheck?.kind ?? "skipped" });
1928
- process.exit(EXIT.OK);
1950
+ return;
1929
1951
  }
1930
1952
  markStep("save-key");
1931
- const rc = await saveApiKey(trimmedKey, controlMode);
1953
+ const transcriptSync = transcriptPreferenceForSetup(options.transcripts);
1954
+ if (transcriptSync) {
1955
+ console.log();
1956
+ console.log("Transcript sync: enabling locally redacted, encrypted sync for Pushary-launched sessions. Your phone can decrypt it; authorized Pushary compliance admins can recover it for documented legal obligations. Disable with pushary setup --transcripts off.");
1957
+ }
1958
+ const rc = await saveApiKey(trimmedKey, controlMode, transcriptSync);
1932
1959
  const context = { rc };
1933
1960
  if (envKey && envKey !== trimmedKey) {
1934
1961
  noteManual(
@@ -2144,6 +2171,7 @@ var main = async () => {
2144
2171
  reachChecked,
2145
2172
  reachesYou,
2146
2173
  daemonReady: controlLifecycleFailure ? false : daemonReady,
2174
+ transcriptSync,
2147
2175
  // null when the check did not run, so it changes nothing. Only an outright
2148
2176
  // `false` is allowed to hold back "Setup complete.".
2149
2177
  roundTripAnswered: roundTrip === null ? null : roundTrip.kind === "answered" ? true : roundTrip.kind === "unanswered" ? false : null
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readLedgerSummary
4
- } from "../chunk-3HFK3UXM.js";
4
+ } from "../chunk-FOGW6O2Y.js";
5
5
  import {
6
6
  exitOnHelpFlag
7
- } from "../chunk-LURY4WNF.js";
8
- import "../chunk-3XTFX4CL.js";
7
+ } from "../chunk-WHDSJ6PD.js";
8
+ import "../chunk-GMJDQDXU.js";
9
9
  import "../chunk-DINDL2CF.js";
10
10
  import "../chunk-KZERVKTD.js";
11
11
  import {
12
12
  getApiKey
13
13
  } from "../chunk-2UMNXADU.js";
14
- import "../chunk-X6RXX2NF.js";
14
+ import "../chunk-QINYXLA5.js";
15
15
 
16
16
  // bin/pushary-stats.ts
17
17
  exitOnHelpFlag("stats");
@@ -2,46 +2,46 @@
2
2
  import {
3
3
  describeLastSeen,
4
4
  listMachines
5
- } from "../chunk-TY5HVMXT.js";
6
- import "../chunk-DKWM5T3P.js";
7
- import "../chunk-QA72MKIT.js";
5
+ } from "../chunk-RAEPAUNJ.js";
6
+ import "../chunk-JTBDBKHU.js";
7
+ import "../chunk-3YGGEDJK.js";
8
8
  import {
9
9
  describeReach,
10
10
  fetchChannels,
11
11
  reachVerdict
12
- } from "../chunk-2LPEZYMC.js";
12
+ } from "../chunk-KNLKHJZR.js";
13
13
  import "../chunk-3EGEA4KH.js";
14
14
  import {
15
15
  checkApiKey,
16
16
  describeKeyCheck
17
- } from "../chunk-BLODMQKJ.js";
17
+ } from "../chunk-ZO43JTT3.js";
18
18
  import {
19
19
  createIo
20
20
  } from "../chunk-5RUIFDTP.js";
21
- import {
22
- readKeySource
23
- } from "../chunk-3CUDMTL4.js";
24
21
  import {
25
22
  rejectUnknownFlags
26
23
  } from "../chunk-GMXKITVA.js";
27
24
  import {
28
25
  exitOnHelpFlag
29
- } from "../chunk-LURY4WNF.js";
30
- import "../chunk-3XTFX4CL.js";
31
- import "../chunk-BC3VCZ3E.js";
26
+ } from "../chunk-WHDSJ6PD.js";
27
+ import "../chunk-GMJDQDXU.js";
32
28
  import "../chunk-DINDL2CF.js";
29
+ import {
30
+ readKeySource
31
+ } from "../chunk-NBDU3R3G.js";
32
+ import "../chunk-BC3VCZ3E.js";
33
33
  import "../chunk-BSZYIAZL.js";
34
34
  import "../chunk-SAF6HGAA.js";
35
- import "../chunk-IUWRVTQK.js";
36
35
  import {
37
36
  UsageError
38
37
  } from "../chunk-7QLSKOSU.js";
39
38
  import {
40
39
  EXIT
41
40
  } from "../chunk-KZERVKTD.js";
42
- import "../chunk-XX2V4QS5.js";
41
+ import "../chunk-ANMHIZZY.js";
42
+ import "../chunk-4LL6LG5X.js";
43
43
  import "../chunk-2UMNXADU.js";
44
- import "../chunk-X6RXX2NF.js";
44
+ import "../chunk-QINYXLA5.js";
45
45
 
46
46
  // src/status.ts
47
47
  var keySourceLine = (source) => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleStop
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-stop-hook.ts
22
22
  var main = async () => {
@@ -4,19 +4,19 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleStopFailure
7
- } from "../chunk-FXIL7RCL.js";
7
+ } from "../chunk-OX35BSPV.js";
8
8
  import "../chunk-JHJHCMAF.js";
9
- import "../chunk-TG3T3M4K.js";
10
- import "../chunk-DKWM5T3P.js";
11
- import "../chunk-QA72MKIT.js";
9
+ import "../chunk-N4QJ3CLX.js";
10
+ import "../chunk-JTBDBKHU.js";
11
+ import "../chunk-3YGGEDJK.js";
12
12
  import "../chunk-BSZYIAZL.js";
13
13
  import "../chunk-SAF6HGAA.js";
14
- import "../chunk-IUWRVTQK.js";
15
14
  import "../chunk-7QLSKOSU.js";
16
15
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-XX2V4QS5.js";
16
+ import "../chunk-ANMHIZZY.js";
17
+ import "../chunk-4LL6LG5X.js";
18
18
  import "../chunk-2UMNXADU.js";
19
- import "../chunk-X6RXX2NF.js";
19
+ import "../chunk-QINYXLA5.js";
20
20
 
21
21
  // bin/pushary-stopfailure-hook.ts
22
22
  var main = async () => {
@@ -7,8 +7,8 @@ import {
7
7
  } from "../chunk-GMXKITVA.js";
8
8
  import {
9
9
  exitOnHelpFlag
10
- } from "../chunk-LURY4WNF.js";
11
- import "../chunk-3XTFX4CL.js";
10
+ } from "../chunk-WHDSJ6PD.js";
11
+ import "../chunk-GMJDQDXU.js";
12
12
  import "../chunk-DINDL2CF.js";
13
13
  import {
14
14
  UsageError