@pushary/agent-hooks 1.7.1 → 1.7.2

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 (101) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/bin/pushary-bell-hook.js +23 -23
  3. package/dist/bin/pushary-bell.js +10 -10
  4. package/dist/bin/pushary-claude.js +46 -35
  5. package/dist/bin/pushary-clean.js +107 -60
  6. package/dist/bin/pushary-codex-bridge.js +18 -17
  7. package/dist/bin/pushary-codex-hook.js +53 -39
  8. package/dist/bin/pushary-codex.js +14 -12
  9. package/dist/bin/pushary-connect.js +16 -16
  10. package/dist/bin/pushary-cowork.js +5 -5
  11. package/dist/bin/pushary-daemon.js +27 -27
  12. package/dist/bin/pushary-disconnect.js +19 -17
  13. package/dist/bin/pushary-doctor.js +63 -35
  14. package/dist/bin/pushary-elicitation-hook.js +35 -26
  15. package/dist/bin/pushary-gemini-bridge.js +12 -12
  16. package/dist/bin/pushary-gemini-hook.js +47 -32
  17. package/dist/bin/pushary-hook.js +34 -32
  18. package/dist/bin/pushary-login.js +16 -16
  19. package/dist/bin/pushary-logout.js +8 -8
  20. package/dist/bin/pushary-mcp.js +9 -8
  21. package/dist/bin/pushary-mode.js +10 -10
  22. package/dist/bin/pushary-notification-hook.js +29 -27
  23. package/dist/bin/pushary-opencode-hook.js +46 -32
  24. package/dist/bin/pushary-permission-denied-hook.js +34 -32
  25. package/dist/bin/pushary-permission-hook.js +33 -31
  26. package/dist/bin/pushary-post-hook.js +29 -27
  27. package/dist/bin/pushary-prompt-hook.js +29 -27
  28. package/dist/bin/pushary-session-end-hook.js +29 -27
  29. package/dist/bin/pushary-session-start-hook.js +33 -31
  30. package/dist/bin/pushary-setup.js +69 -56
  31. package/dist/bin/pushary-stats.js +5 -5
  32. package/dist/bin/pushary-status.js +19 -19
  33. package/dist/bin/pushary-stop-hook.js +29 -27
  34. package/dist/bin/pushary-stopfailure-hook.js +29 -27
  35. package/dist/bin/pushary-suggestions.js +5 -5
  36. package/dist/bin/pushary-transcript-register.js +19 -19
  37. package/dist/bin/pushary-transcripts.js +7 -7
  38. package/dist/bin/pushary-upgrade.js +20 -20
  39. package/dist/bin/pushary-wait.js +10 -10
  40. package/dist/bin/pushary.js +6 -6
  41. package/dist/{chunk-WM3U2RUK.js → chunk-2B4XCMH6.js} +75 -232
  42. package/dist/{chunk-ZIIYTQHC.js → chunk-2XOHXZRC.js} +12 -4
  43. package/dist/{chunk-3QE3BHBW.js → chunk-3NSRL5E7.js} +2 -2
  44. package/dist/{chunk-7GI6QC3M.js → chunk-3RO2UWJQ.js} +2 -2
  45. package/dist/{chunk-AAGLDXH4.js → chunk-4S7CCOXB.js} +5 -5
  46. package/dist/{chunk-6SJQ442W.js → chunk-5GIBNUBD.js} +2 -2
  47. package/dist/chunk-5OP5MQI7.js +45 -0
  48. package/dist/{chunk-EIZW73P5.js → chunk-65RN6ZCO.js} +1 -1
  49. package/dist/{chunk-6PV2JQ64.js → chunk-6NHXKTQU.js} +2 -2
  50. package/dist/{chunk-KSNAAMU5.js → chunk-6QZK4O36.js} +4 -4
  51. package/dist/{chunk-WZWXBTRF.js → chunk-A6WQF7FQ.js} +3 -3
  52. package/dist/{chunk-62TEPRWQ.js → chunk-AWZNDM3B.js} +1 -1
  53. package/dist/{chunk-NQFGVAT6.js → chunk-D4OGEWLH.js} +19 -2
  54. package/dist/{chunk-SVEMF2VO.js → chunk-E3PLF7YB.js} +4 -4
  55. package/dist/{chunk-MCNS4725.js → chunk-F6BMJOSW.js} +1 -1
  56. package/dist/{chunk-P5CBNSYL.js → chunk-HOIGXMI7.js} +1 -1
  57. package/dist/{chunk-XMN37YJH.js → chunk-I7B2DNVU.js} +1 -1
  58. package/dist/{chunk-ZEMSCGDD.js → chunk-INR3RVQ3.js} +8 -3
  59. package/dist/{chunk-3QORH5EJ.js → chunk-IZVAVXHQ.js} +6 -4
  60. package/dist/{chunk-MWVCDP64.js → chunk-JMSB6CJT.js} +1 -1
  61. package/dist/{chunk-WSC53O7I.js → chunk-KAJT6HPI.js} +3 -3
  62. package/dist/{chunk-XPMOCJHN.js → chunk-KLXYMPTM.js} +1 -1
  63. package/dist/{chunk-XDASEYRS.js → chunk-L6IF4JOF.js} +3 -3
  64. package/dist/{chunk-UPKP67TA.js → chunk-LI3C2IQY.js} +2 -2
  65. package/dist/{chunk-H6JV44TE.js → chunk-M2JGLFFS.js} +1 -1
  66. package/dist/chunk-MY3UZO5U.js +99 -0
  67. package/dist/chunk-N6IOSZOE.js +185 -0
  68. package/dist/{chunk-454KMJHF.js → chunk-NYBZJ44G.js} +34 -1
  69. package/dist/{chunk-QPR33SHS.js → chunk-OJRB5QKN.js} +6 -6
  70. package/dist/{chunk-3T35OE7C.js → chunk-OXEF6JHD.js} +4 -4
  71. package/dist/{chunk-SNWNA3MQ.js → chunk-PWNQGITG.js} +1 -1
  72. package/dist/{chunk-XPTCPU6V.js → chunk-Q7CDBJXU.js} +1 -1
  73. package/dist/{chunk-OTZHT34O.js → chunk-QSZ37ROP.js} +1 -1
  74. package/dist/{chunk-O5JD7UI5.js → chunk-R7ZETVNR.js} +1 -1
  75. package/dist/{chunk-4C4NRDIC.js → chunk-RLRDPZG4.js} +1 -1
  76. package/dist/{chunk-IGBDOZUO.js → chunk-SEIZQZEE.js} +1 -1
  77. package/dist/{chunk-OAL44FM2.js → chunk-SJN64NJX.js} +1 -1
  78. package/dist/{chunk-NID4UZDN.js → chunk-SKEW3TQX.js} +1 -1
  79. package/dist/{chunk-NAAZCNKI.js → chunk-SKMWPXGV.js} +351 -37
  80. package/dist/{chunk-KBLIVEFJ.js → chunk-T3PRPFDY.js} +5 -5
  81. package/dist/{chunk-2FU43B5Q.js → chunk-TVJYGZXB.js} +2 -2
  82. package/dist/{chunk-Y6GKOZBT.js → chunk-U3MS6D5X.js} +1 -1
  83. package/dist/{chunk-O5PRIYFZ.js → chunk-U4TMAANR.js} +3 -0
  84. package/dist/{chunk-JTQDP4ZL.js → chunk-UFNBKYWT.js} +3 -3
  85. package/dist/{chunk-42XR73I2.js → chunk-UUTWHVSV.js} +35 -35
  86. package/dist/{chunk-43SSQCWO.js → chunk-VQDJ6KB3.js} +3 -3
  87. package/dist/{chunk-YZKS3ME3.js → chunk-VSGKQ3HI.js} +2 -2
  88. package/dist/{chunk-XFNVG3OV.js → chunk-WWTLAZQA.js} +24 -7
  89. package/dist/{chunk-VCMFKZON.js → chunk-WXIVUIXA.js} +2 -2
  90. package/dist/{chunk-AHWJHLG5.js → chunk-YLCSKVQQ.js} +7 -5
  91. package/dist/{chunk-Q7QRR6YL.js → chunk-YNJ2H2FD.js} +2 -2
  92. package/dist/{chunk-BYVB3RX3.js → chunk-YU4222G2.js} +2 -2
  93. package/dist/{chunk-YQN7S57T.js → chunk-YU54LNC6.js} +6 -6
  94. package/dist/{chunk-7GYGVQBU.js → chunk-ZMWX5SDA.js} +8 -8
  95. package/dist/{chunk-55RO62FV.js → chunk-ZUKZJQGR.js} +1 -1
  96. package/dist/{reapply-66GQIBXN.js → reapply-D6RSDYCK.js} +9 -9
  97. package/dist/src/index.d.ts +1 -0
  98. package/dist/src/index.js +22 -20
  99. package/package.json +2 -1
  100. package/dist/chunk-JMBG47WV.js +0 -336
  101. package/dist/chunk-YHG74UFF.js +0 -12
@@ -6,20 +6,22 @@ import {
6
6
  readServiceExecPath,
7
7
  retryAgentCommand,
8
8
  versionManagerOf
9
- } from "../chunk-ZEMSCGDD.js";
9
+ } from "../chunk-INR3RVQ3.js";
10
10
  import {
11
11
  assessCodexHookTrust,
12
12
  readCodexTrustForPusharyHooks
13
- } from "../chunk-6SJQ442W.js";
13
+ } from "../chunk-5GIBNUBD.js";
14
14
  import {
15
15
  readMachineReadiness,
16
16
  readManagedControlEvidence
17
- } from "../chunk-YQN7S57T.js";
17
+ } from "../chunk-YU54LNC6.js";
18
18
  import {
19
19
  FX_PROFILE_REFUSALS,
20
20
  FX_PUSHARY_TOOLS_RULE,
21
21
  FX_QUESTION_TOOL,
22
22
  FX_SETTINGS_REFUSALS,
23
+ HERMES_PIP_PACKAGE,
24
+ HERMES_PLUGIN_NAME,
23
25
  agentProbes,
24
26
  detectAgent,
25
27
  detectAllAgents,
@@ -27,6 +29,7 @@ import {
27
29
  fxPusharyEntryOf,
28
30
  fxQuestionRouting,
29
31
  hasInstructionBlock,
32
+ hermesWiredByPushary,
30
33
  isDetected,
31
34
  isFxPusharyEntry,
32
35
  isPluginRegistered,
@@ -34,30 +37,32 @@ import {
34
37
  readFxFile,
35
38
  readFxProfile,
36
39
  readFxSettings,
40
+ readHermesStatus,
41
+ resolveHermesPython,
37
42
  shortenHome,
38
43
  vscodeSettingsTargets,
39
44
  workspacesShowingQuestionTool
40
- } from "../chunk-NAAZCNKI.js";
41
- import "../chunk-2FU43B5Q.js";
45
+ } from "../chunk-SKMWPXGV.js";
46
+ import "../chunk-TVJYGZXB.js";
42
47
  import {
43
48
  OPENCODE_PLUGIN_PLACEHOLDER,
44
49
  openCodePluginDir,
45
50
  openCodePluginFile,
46
51
  openCodeWired
47
- } from "../chunk-NID4UZDN.js";
52
+ } from "../chunk-SKEW3TQX.js";
48
53
  import {
49
54
  compatibleConfigFile,
50
55
  compatibleInstructionsFile,
51
56
  compatibleMcpFile,
52
57
  hasCompatibleHooks,
53
58
  missingCompatibleHookEvents
54
- } from "../chunk-KBLIVEFJ.js";
55
- import "../chunk-WSC53O7I.js";
59
+ } from "../chunk-T3PRPFDY.js";
60
+ import "../chunk-KAJT6HPI.js";
56
61
  import {
57
62
  detectProviderLiveCapabilities,
58
63
  hasSpawnProvider,
59
64
  resolveControlPolicy
60
- } from "../chunk-Q7QRR6YL.js";
65
+ } from "../chunk-YNJ2H2FD.js";
61
66
  import {
62
67
  AUTO_UPDATE_DISABLE_ENV,
63
68
  autoUpdateOffReason,
@@ -65,16 +70,16 @@ import {
65
70
  describeAutoUpdateCheck,
66
71
  readAutoUpdateState,
67
72
  takeAutoUpdateAnnouncement
68
- } from "../chunk-BYVB3RX3.js";
73
+ } from "../chunk-YU4222G2.js";
69
74
  import {
70
75
  readLedgerSummary
71
- } from "../chunk-MCNS4725.js";
76
+ } from "../chunk-F6BMJOSW.js";
72
77
  import {
73
78
  describeBridgeResolution,
74
79
  isBridgeLocator,
75
80
  liveBridgeProbe,
76
81
  resolveBridgeStub
77
- } from "../chunk-MWVCDP64.js";
82
+ } from "../chunk-JMSB6CJT.js";
78
83
  import {
79
84
  claudeOtherHolders,
80
85
  claudeUnprovenHolds,
@@ -91,7 +96,7 @@ import {
91
96
  geminiWired,
92
97
  holdsLong,
93
98
  pusharyHookExecutable
94
- } from "../chunk-XDASEYRS.js";
99
+ } from "../chunk-L6IF4JOF.js";
95
100
  import {
96
101
  daemonHasRemoteProof,
97
102
  daemonServiceManagerAvailable,
@@ -100,17 +105,18 @@ import {
100
105
  readDaemonNeedsLogin,
101
106
  readDaemonStatus,
102
107
  readInstalledDaemonService
103
- } from "../chunk-AAGLDXH4.js";
108
+ } from "../chunk-4S7CCOXB.js";
104
109
  import {
105
110
  GEMINI_HOOK_BINARY,
106
111
  hasGeminiHooks,
107
112
  missingGeminiHookEvents
108
- } from "../chunk-WZWXBTRF.js";
113
+ } from "../chunk-A6WQF7FQ.js";
109
114
  import "../chunk-XHKBHWLX.js";
110
- import "../chunk-WM3U2RUK.js";
111
- import "../chunk-4C4NRDIC.js";
112
- import "../chunk-ZIIYTQHC.js";
113
- import "../chunk-KSNAAMU5.js";
115
+ import "../chunk-2B4XCMH6.js";
116
+ import "../chunk-N6IOSZOE.js";
117
+ import "../chunk-RLRDPZG4.js";
118
+ import "../chunk-2XOHXZRC.js";
119
+ import "../chunk-6QZK4O36.js";
114
120
  import "../chunk-POFBE6ZY.js";
115
121
  import {
116
122
  describeReach,
@@ -119,19 +125,15 @@ import {
119
125
  reachVerdict,
120
126
  roundTripEvidence,
121
127
  verifyRoundTrip
122
- } from "../chunk-AHWJHLG5.js";
128
+ } from "../chunk-YLCSKVQQ.js";
123
129
  import "../chunk-3EGEA4KH.js";
124
- import {
125
- checkApiKey,
126
- describeKeyCheck
127
- } from "../chunk-43SSQCWO.js";
128
130
  import "../chunk-QCGNGEGE.js";
129
131
  import {
130
132
  createIo
131
- } from "../chunk-O5PRIYFZ.js";
133
+ } from "../chunk-U4TMAANR.js";
132
134
  import {
133
135
  exitOnHelpFlag
134
- } from "../chunk-6PV2JQ64.js";
136
+ } from "../chunk-6NHXKTQU.js";
135
137
  import {
136
138
  parseFlags
137
139
  } from "../chunk-GMXKITVA.js";
@@ -139,22 +141,26 @@ import {
139
141
  keyPrefix,
140
142
  readControlMode,
141
143
  readKeySource
142
- } from "../chunk-YZKS3ME3.js";
144
+ } from "../chunk-VSGKQ3HI.js";
143
145
  import {
144
146
  callMcpTool,
145
147
  sendMcpRequest
146
- } from "../chunk-NQFGVAT6.js";
147
- import "../chunk-JTQDP4ZL.js";
148
+ } from "../chunk-D4OGEWLH.js";
149
+ import {
150
+ checkApiKey,
151
+ describeKeyCheck
152
+ } from "../chunk-VQDJ6KB3.js";
153
+ import "../chunk-UFNBKYWT.js";
148
154
  import {
149
155
  getMachineId
150
- } from "../chunk-P5CBNSYL.js";
156
+ } from "../chunk-HOIGXMI7.js";
151
157
  import {
152
158
  UsageError
153
159
  } from "../chunk-7QLSKOSU.js";
154
160
  import {
155
161
  EXIT
156
162
  } from "../chunk-KZERVKTD.js";
157
- import "../chunk-UPKP67TA.js";
163
+ import "../chunk-LI3C2IQY.js";
158
164
  import {
159
165
  CODEX_HOOK_EVENTS,
160
166
  autoUpdateState,
@@ -177,19 +183,21 @@ import {
177
183
  geminiMd,
178
184
  geminiSettings,
179
185
  hasCodexHooks,
186
+ hermesConfig,
187
+ hermesConfigReceipt,
180
188
  missingCodexHookEvents,
181
189
  pusharyConfigFile,
182
190
  readCodexMcpAuth,
183
191
  resolvePathBinary,
184
192
  vscodePluginDir
185
- } from "../chunk-454KMJHF.js";
193
+ } from "../chunk-NYBZJ44G.js";
186
194
  import "../chunk-T7E75EKA.js";
187
195
  import {
188
196
  getBaseUrl
189
- } from "../chunk-OAL44FM2.js";
197
+ } from "../chunk-SJN64NJX.js";
190
198
  import {
191
199
  NPX_LATEST_COMMAND
192
- } from "../chunk-EIZW73P5.js";
200
+ } from "../chunk-65RN6ZCO.js";
193
201
  import {
194
202
  AGENTS,
195
203
  CURSOR_GATE_EVENTS,
@@ -203,7 +211,7 @@ import {
203
211
  hookCompatibleProfile,
204
212
  isHookActivationReport,
205
213
  isNewerVersion
206
- } from "../chunk-XFNVG3OV.js";
214
+ } from "../chunk-WWTLAZQA.js";
207
215
 
208
216
  // bin/pushary-doctor.ts
209
217
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -466,6 +474,15 @@ var reportFxQuestionRouting = (routing) => {
466
474
  }
467
475
  console.log(` ${warn} fx: questions can still stop in the terminal ${dim(`(${FX_QUESTION_ROUTING_WARNINGS[routing]})`)}`);
468
476
  };
477
+ var reportHermesStatus = (status) => {
478
+ const config = hermesConfig();
479
+ check(status.pluginInstalled, "Hermes: plugin installed", status.pluginInstalled ? HERMES_PIP_PACKAGE : `${HERMES_PIP_PACKAGE} is not installed in Hermes' Python \u2014 run ${retryAgentCommand("hermes")}`);
480
+ check(status.pluginEnabled, "Hermes: plugin enabled", status.pluginEnabled ? config : `"${HERMES_PLUGIN_NAME}" is missing from plugins.enabled in ${config} \u2014 run ${retryAgentCommand("hermes")}`);
481
+ if (status.approvalsRouted) check(true, "Hermes: approvals go through Pushary", `security.approval.transport in ${config}`);
482
+ else console.log(` ${warn} Hermes: approvals stay in the terminal ${dim(`(security.approval.transport is not "pushary" in ${config})`)}`);
483
+ if (status.questionsRouted) check(true, "Hermes: questions go through Pushary", `clarify is off in ${config}`);
484
+ else console.log(` ${warn} Hermes: questions can stop in the terminal ${dim(`(clarify is not in agent.disabled_toolsets in ${config})`)}`);
485
+ };
469
486
  var fxSettingsProblem = (read) => {
470
487
  if (read.kind === "missing") return `${fxSettings()} is missing, so fx runs with no Pushary rules; re-run ${retryAgentCommand("fx")}`;
471
488
  if (read.kind === "unreadable") return `${fxSettings()} could not be read`;
@@ -1124,6 +1141,17 @@ var main = async () => {
1124
1141
  } else {
1125
1142
  skipped("fx", installed("fx") ? "installed, but Pushary is not set up for it" : "not installed");
1126
1143
  }
1144
+ const hermesPython = resolveHermesPython();
1145
+ const hermesStatus = hermesPython ? readHermesStatus(hermesPython) : null;
1146
+ const hermesSetupRecorded = existsSync(hermesConfigReceipt());
1147
+ if (hermesStatus && hermesWiredByPushary(hermesStatus, hermesSetupRecorded)) {
1148
+ checking("Hermes");
1149
+ reportHermesStatus(hermesStatus);
1150
+ } else if (hermesPython && hermesStatus === null && hermesSetupRecorded) {
1151
+ check(false, "Hermes: config readable", `${hermesConfig()} could not be read with Hermes' Python \u2014 run ${retryAgentCommand("hermes")}`);
1152
+ } else {
1153
+ skipped("Hermes", installed("hermes") ? "installed, but Pushary is not set up for it" : "not installed");
1154
+ }
1127
1155
  if (bridgeStub) {
1128
1156
  const resolution = resolveBridgeStub(bridgeStub, liveBridgeProbe());
1129
1157
  check(resolution.kind === "bundle", "Mac app behind pushary-bridge", describeBridgeResolution(resolution));
@@ -1,47 +1,52 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-7GI6QC3M.js";
4
+ } from "../chunk-3RO2UWJQ.js";
5
5
  import {
6
+ announceSubscriptionRequired,
6
7
  isDeferAnswer
7
- } from "../chunk-YHG74UFF.js";
8
- import "../chunk-7GYGVQBU.js";
8
+ } from "../chunk-5OP5MQI7.js";
9
+ import "../chunk-ZMWX5SDA.js";
9
10
  import "../chunk-SGZJ5LYH.js";
10
- import "../chunk-SVEMF2VO.js";
11
- import "../chunk-XMN37YJH.js";
12
- import "../chunk-MWVCDP64.js";
13
- import "../chunk-XDASEYRS.js";
14
- import "../chunk-AAGLDXH4.js";
15
- import "../chunk-WZWXBTRF.js";
16
- import "../chunk-XPMOCJHN.js";
17
- import "../chunk-O5JD7UI5.js";
18
- import "../chunk-OTZHT34O.js";
19
- import "../chunk-XPTCPU6V.js";
11
+ import "../chunk-E3PLF7YB.js";
12
+ import "../chunk-I7B2DNVU.js";
13
+ import "../chunk-JMSB6CJT.js";
14
+ import "../chunk-L6IF4JOF.js";
15
+ import "../chunk-4S7CCOXB.js";
16
+ import "../chunk-A6WQF7FQ.js";
17
+ import "../chunk-KLXYMPTM.js";
18
+ import "../chunk-R7ZETVNR.js";
19
+ import "../chunk-QSZ37ROP.js";
20
+ import "../chunk-Q7CDBJXU.js";
20
21
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-4C4NRDIC.js";
22
+ import "../chunk-N6IOSZOE.js";
23
+ import "../chunk-RLRDPZG4.js";
22
24
  import {
23
25
  askUser,
24
26
  isDecisionStopped,
25
27
  waitForQuestion
26
- } from "../chunk-ZIIYTQHC.js";
27
- import "../chunk-KSNAAMU5.js";
28
+ } from "../chunk-2XOHXZRC.js";
29
+ import "../chunk-6QZK4O36.js";
28
30
  import "../chunk-POFBE6ZY.js";
29
31
  import "../chunk-GMXKITVA.js";
30
- import "../chunk-YZKS3ME3.js";
31
- import "../chunk-NQFGVAT6.js";
32
- import "../chunk-JTQDP4ZL.js";
32
+ import "../chunk-VSGKQ3HI.js";
33
+ import {
34
+ SubscriptionRequiredError
35
+ } from "../chunk-D4OGEWLH.js";
36
+ import "../chunk-VQDJ6KB3.js";
37
+ import "../chunk-UFNBKYWT.js";
33
38
  import {
34
39
  getMachineId
35
- } from "../chunk-P5CBNSYL.js";
40
+ } from "../chunk-HOIGXMI7.js";
36
41
  import "../chunk-7QLSKOSU.js";
37
42
  import "../chunk-KZERVKTD.js";
38
- import "../chunk-UPKP67TA.js";
39
- import "../chunk-454KMJHF.js";
43
+ import "../chunk-LI3C2IQY.js";
44
+ import "../chunk-NYBZJ44G.js";
40
45
  import "../chunk-T7E75EKA.js";
41
46
  import {
42
47
  getApiKey
43
- } from "../chunk-OAL44FM2.js";
44
- import "../chunk-EIZW73P5.js";
48
+ } from "../chunk-SJN64NJX.js";
49
+ import "../chunk-65RN6ZCO.js";
45
50
  import {
46
51
  ELICITATION_ANSWERABLE_MODE,
47
52
  effectiveWaitSeconds,
@@ -52,7 +57,7 @@ import {
52
57
  planElicitationAsk,
53
58
  readElicitationFields,
54
59
  renderElicitationOutput
55
- } from "../chunk-XFNVG3OV.js";
60
+ } from "../chunk-WWTLAZQA.js";
56
61
 
57
62
  // bin/pushary-elicitation-hook.ts
58
63
  import { basename } from "path";
@@ -105,7 +110,11 @@ var main = async () => {
105
110
  let created;
106
111
  try {
107
112
  created = await askUser(apiKey, { ...common, ...prompt });
108
- } catch {
113
+ } catch (error) {
114
+ if (error instanceof SubscriptionRequiredError) {
115
+ announceSubscriptionRequired(error.upgradeUrl, input.session_id);
116
+ return;
117
+ }
109
118
  process.stdout.write(renderElicitationOutput(input.hook_event_name ?? "Elicitation", "cancel") ?? "");
110
119
  return;
111
120
  }
@@ -5,37 +5,37 @@ import {
5
5
  postLiveSession,
6
6
  postLiveSessionUntilAccepted,
7
7
  startLiveSessionHeartbeat
8
- } from "../chunk-VCMFKZON.js";
8
+ } from "../chunk-WXIVUIXA.js";
9
9
  import {
10
10
  SESSION_IDLE_TIMEOUT_MS,
11
11
  describeIdleWindow,
12
12
  idleDeadlinePassed,
13
13
  startProcessOwnership,
14
14
  withSpawnProcessOwnership
15
- } from "../chunk-SNWNA3MQ.js";
16
- import "../chunk-O5JD7UI5.js";
17
- import "../chunk-OTZHT34O.js";
15
+ } from "../chunk-PWNQGITG.js";
16
+ import "../chunk-R7ZETVNR.js";
17
+ import "../chunk-QSZ37ROP.js";
18
18
  import {
19
19
  transcriptsEnabled
20
- } from "../chunk-XPTCPU6V.js";
20
+ } from "../chunk-Q7CDBJXU.js";
21
21
  import {
22
22
  spawnClaude
23
23
  } from "../chunk-XHKBHWLX.js";
24
- import "../chunk-YZKS3ME3.js";
24
+ import "../chunk-VSGKQ3HI.js";
25
25
  import {
26
26
  getMachineId
27
- } from "../chunk-P5CBNSYL.js";
28
- import "../chunk-UPKP67TA.js";
27
+ } from "../chunk-HOIGXMI7.js";
28
+ import "../chunk-LI3C2IQY.js";
29
29
  import {
30
30
  resolveBinary
31
- } from "../chunk-454KMJHF.js";
31
+ } from "../chunk-NYBZJ44G.js";
32
32
  import "../chunk-T7E75EKA.js";
33
33
  import {
34
34
  getApiKey,
35
35
  getBaseUrl
36
- } from "../chunk-OAL44FM2.js";
37
- import "../chunk-EIZW73P5.js";
38
- import "../chunk-XFNVG3OV.js";
36
+ } from "../chunk-SJN64NJX.js";
37
+ import "../chunk-65RN6ZCO.js";
38
+ import "../chunk-WWTLAZQA.js";
39
39
 
40
40
  // bin/pushary-gemini-bridge.ts
41
41
  import { existsSync } from "fs";
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  triggerAutoUpdate
4
- } from "../chunk-BYVB3RX3.js";
4
+ } from "../chunk-YU4222G2.js";
5
5
  import {
6
6
  isGatingMoment,
7
7
  recordKeylessMoment
8
- } from "../chunk-MCNS4725.js";
8
+ } from "../chunk-F6BMJOSW.js";
9
9
  import {
10
10
  readHookInput
11
- } from "../chunk-7GI6QC3M.js";
11
+ } from "../chunk-3RO2UWJQ.js";
12
12
  import {
13
+ announceSubscriptionRequired,
13
14
  denyReasonFrom,
14
15
  isDeferAnswer
15
- } from "../chunk-YHG74UFF.js";
16
- import "../chunk-7GYGVQBU.js";
16
+ } from "../chunk-5OP5MQI7.js";
17
+ import "../chunk-ZMWX5SDA.js";
17
18
  import "../chunk-SGZJ5LYH.js";
18
- import "../chunk-SVEMF2VO.js";
19
- import "../chunk-XMN37YJH.js";
20
- import "../chunk-MWVCDP64.js";
21
- import "../chunk-XDASEYRS.js";
22
- import "../chunk-AAGLDXH4.js";
23
- import "../chunk-WZWXBTRF.js";
24
- import "../chunk-XPMOCJHN.js";
25
- import "../chunk-O5JD7UI5.js";
26
- import "../chunk-OTZHT34O.js";
27
- import "../chunk-XPTCPU6V.js";
19
+ import "../chunk-E3PLF7YB.js";
20
+ import "../chunk-I7B2DNVU.js";
21
+ import "../chunk-JMSB6CJT.js";
22
+ import "../chunk-L6IF4JOF.js";
23
+ import "../chunk-4S7CCOXB.js";
24
+ import "../chunk-A6WQF7FQ.js";
25
+ import "../chunk-KLXYMPTM.js";
26
+ import "../chunk-R7ZETVNR.js";
27
+ import "../chunk-QSZ37ROP.js";
28
+ import "../chunk-Q7CDBJXU.js";
28
29
  import "../chunk-XHKBHWLX.js";
29
30
  import {
30
- DEFAULT_SESSION,
31
31
  UNNAMED_ACTION,
32
32
  deriveActionBody,
33
33
  deriveBlocker,
@@ -45,38 +45,45 @@ import {
45
45
  repoKeyFor,
46
46
  reportEvent,
47
47
  scopePathFor
48
- } from "../chunk-WM3U2RUK.js";
49
- import "../chunk-4C4NRDIC.js";
48
+ } from "../chunk-2B4XCMH6.js";
49
+ import {
50
+ DEFAULT_SESSION
51
+ } from "../chunk-N6IOSZOE.js";
52
+ import "../chunk-RLRDPZG4.js";
50
53
  import {
51
54
  DECISION_STOP_REASON,
55
+ UNVERIFIABLE_APPROVAL_REASON,
52
56
  askUser,
53
57
  isDecisionStopped,
54
58
  isLocalQuestionHandoff,
55
59
  sendNotification,
56
60
  waitForQuestion
57
- } from "../chunk-ZIIYTQHC.js";
61
+ } from "../chunk-2XOHXZRC.js";
58
62
  import {
59
63
  exitAfterClientReports
60
- } from "../chunk-KSNAAMU5.js";
64
+ } from "../chunk-6QZK4O36.js";
61
65
  import "../chunk-POFBE6ZY.js";
62
66
  import "../chunk-GMXKITVA.js";
63
- import "../chunk-YZKS3ME3.js";
64
- import "../chunk-NQFGVAT6.js";
65
- import "../chunk-JTQDP4ZL.js";
67
+ import "../chunk-VSGKQ3HI.js";
68
+ import {
69
+ SubscriptionRequiredError
70
+ } from "../chunk-D4OGEWLH.js";
71
+ import "../chunk-VQDJ6KB3.js";
72
+ import "../chunk-UFNBKYWT.js";
66
73
  import {
67
74
  getMachineId
68
- } from "../chunk-P5CBNSYL.js";
75
+ } from "../chunk-HOIGXMI7.js";
69
76
  import "../chunk-7QLSKOSU.js";
70
77
  import {
71
78
  EXIT
72
79
  } from "../chunk-KZERVKTD.js";
73
- import "../chunk-UPKP67TA.js";
74
- import "../chunk-454KMJHF.js";
80
+ import "../chunk-LI3C2IQY.js";
81
+ import "../chunk-NYBZJ44G.js";
75
82
  import "../chunk-T7E75EKA.js";
76
83
  import {
77
84
  getApiKey
78
- } from "../chunk-OAL44FM2.js";
79
- import "../chunk-EIZW73P5.js";
85
+ } from "../chunk-SJN64NJX.js";
86
+ import "../chunk-65RN6ZCO.js";
80
87
  import {
81
88
  DECISION_LINE_MAX,
82
89
  KILL_REASON,
@@ -85,7 +92,7 @@ import {
85
92
  hookWaitClamped,
86
93
  hookWaitDeadline,
87
94
  resolveGate
88
- } from "../chunk-XFNVG3OV.js";
95
+ } from "../chunk-WWTLAZQA.js";
89
96
 
90
97
  // bin/pushary-gemini-hook.ts
91
98
  import { basename } from "path";
@@ -125,7 +132,9 @@ var NO_LOCAL_INPUT = "This unattended Gemini session has no local approval input
125
132
  var NO_ANSWER_IN_TIME = "No answer from your phone in time, and this unattended Gemini session has no local approval input. Retry when you can answer on your phone.";
126
133
  var HANDLED_ON_MACHINE = "You chose to handle this on your machine, but this unattended Gemini session has no local approval input. Use an interactive session.";
127
134
  var NO_DEVICE = "No phone or other notification channel is connected to Pushary, and this unattended Gemini session has no local approval input. Connect one in Pushary, then retry.";
135
+ var SUBSCRIPTION_REQUIRED = "Your Pushary workspace has no active subscription, so approvals cannot reach your phone, and this unattended Gemini session has no local approval input. Renew Pushary, then retry.";
128
136
  var geminiLocalHandoff = (bridge, reason = NO_LOCAL_INPUT) => geminiOwnsLifecycle(bridge) ? geminiPass() : geminiDeny(reason);
137
+ var geminiSubscriptionRequiredDecision = (bridge) => geminiLocalHandoff(bridge, SUBSCRIPTION_REQUIRED);
129
138
  var geminiPushOnlyHandoff = (askStatus, bridge) => askStatus === "notified" || askStatus === "terminal" ? geminiLocalHandoff(bridge) : geminiPass();
130
139
  var fromPhoneAnswer = (answer) => answer.value === "yes" ? geminiAllow() : geminiDeny(denyReasonFrom(answer.value, answer.note));
131
140
  var geminiPushFirstDecision = (pushed, bridge) => {
@@ -137,7 +146,7 @@ var geminiPushFirstDecision = (pushed, bridge) => {
137
146
  return geminiLocalHandoff(bridge, NO_ANSWER_IN_TIME);
138
147
  };
139
148
  var geminiPushOnlyDecision = (pushed, timeoutAction, bridge) => {
140
- if (!pushed) return geminiDeny("Pushary could not create a verifiable approval. Retry the action.");
149
+ if (!pushed) return geminiDeny(UNVERIFIABLE_APPROVAL_REASON);
141
150
  const { answer, localHandoff, clampCut, askStatus } = pushed;
142
151
  if (isDecisionStopped(answer)) return geminiDeny(DECISION_STOP_REASON);
143
152
  if (localHandoff) return geminiPushOnlyHandoff(askStatus, bridge);
@@ -205,11 +214,16 @@ var notifyApprovalNeeded = async (apiKey, input, lookup) => {
205
214
  } catch {
206
215
  }
207
216
  };
217
+ var geminiStepsAside = (error, input) => {
218
+ announceSubscriptionRequired(error.upgradeUrl, input.session_id);
219
+ return geminiSubscriptionRequiredDecision(process.env.PUSHARY_GEMINI_BRIDGE);
220
+ };
208
221
  var handlePushOnly = async (apiKey, input, lookup, timeoutSeconds, timeoutAction) => {
209
222
  let pushed;
210
223
  try {
211
224
  pushed = await pushQuestion(apiKey, input, lookup, effectiveWaitSeconds(timeoutAction, timeoutSeconds, "gemini"), "push_only");
212
- } catch {
225
+ } catch (error) {
226
+ if (error instanceof SubscriptionRequiredError) return geminiStepsAside(error, input);
213
227
  pushed = void 0;
214
228
  }
215
229
  return geminiPushOnlyDecision(pushed, timeoutAction, process.env.PUSHARY_GEMINI_BRIDGE);
@@ -218,7 +232,8 @@ var handlePushFirst = async (apiKey, input, lookup, pushFirstSeconds) => {
218
232
  let pushed;
219
233
  try {
220
234
  pushed = await pushQuestion(apiKey, input, lookup, pushFirstSeconds, "push_first", 1500);
221
- } catch {
235
+ } catch (error) {
236
+ if (error instanceof SubscriptionRequiredError) return geminiStepsAside(error, input);
222
237
  pushed = void 0;
223
238
  }
224
239
  return geminiPushFirstDecision(pushed, process.env.PUSHARY_GEMINI_BRIDGE);
@@ -1,61 +1,63 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-42XR73I2.js";
4
+ } from "../chunk-UUTWHVSV.js";
5
5
  import {
6
6
  activeHookSource,
7
7
  normalizeToolCall,
8
8
  profileFromArgv
9
- } from "../chunk-KBLIVEFJ.js";
10
- import "../chunk-WSC53O7I.js";
11
- import "../chunk-3QORH5EJ.js";
12
- import "../chunk-MCNS4725.js";
9
+ } from "../chunk-T3PRPFDY.js";
10
+ import "../chunk-KAJT6HPI.js";
11
+ import "../chunk-IZVAVXHQ.js";
12
+ import "../chunk-F6BMJOSW.js";
13
13
  import {
14
14
  readToolHookInput
15
- } from "../chunk-7GI6QC3M.js";
16
- import "../chunk-YHG74UFF.js";
17
- import "../chunk-7GYGVQBU.js";
15
+ } from "../chunk-3RO2UWJQ.js";
16
+ import "../chunk-5OP5MQI7.js";
17
+ import "../chunk-ZMWX5SDA.js";
18
18
  import "../chunk-SGZJ5LYH.js";
19
- import "../chunk-SVEMF2VO.js";
20
- import "../chunk-XMN37YJH.js";
21
- import "../chunk-MWVCDP64.js";
22
- import "../chunk-XDASEYRS.js";
23
- import "../chunk-AAGLDXH4.js";
24
- import "../chunk-WZWXBTRF.js";
25
- import "../chunk-XPMOCJHN.js";
26
- import "../chunk-O5JD7UI5.js";
27
- import "../chunk-OTZHT34O.js";
28
- import "../chunk-XPTCPU6V.js";
19
+ import "../chunk-E3PLF7YB.js";
20
+ import "../chunk-I7B2DNVU.js";
21
+ import "../chunk-JMSB6CJT.js";
22
+ import "../chunk-L6IF4JOF.js";
23
+ import "../chunk-4S7CCOXB.js";
24
+ import "../chunk-A6WQF7FQ.js";
25
+ import "../chunk-KLXYMPTM.js";
26
+ import "../chunk-R7ZETVNR.js";
27
+ import "../chunk-QSZ37ROP.js";
28
+ import "../chunk-Q7CDBJXU.js";
29
29
  import "../chunk-XHKBHWLX.js";
30
30
  import {
31
31
  canonicalGateInputs
32
- } from "../chunk-WM3U2RUK.js";
33
- import "../chunk-4C4NRDIC.js";
34
- import "../chunk-ZIIYTQHC.js";
32
+ } from "../chunk-2B4XCMH6.js";
33
+ import "../chunk-N6IOSZOE.js";
34
+ import "../chunk-RLRDPZG4.js";
35
+ import "../chunk-2XOHXZRC.js";
35
36
  import {
36
37
  exitAfterClientReports
37
- } from "../chunk-KSNAAMU5.js";
38
+ } from "../chunk-6QZK4O36.js";
38
39
  import "../chunk-POFBE6ZY.js";
39
40
  import {
40
41
  exitOnHelpFlag
41
- } from "../chunk-6PV2JQ64.js";
42
+ } from "../chunk-6NHXKTQU.js";
42
43
  import "../chunk-GMXKITVA.js";
43
- import "../chunk-YZKS3ME3.js";
44
- import "../chunk-NQFGVAT6.js";
45
- import "../chunk-JTQDP4ZL.js";
46
- import "../chunk-P5CBNSYL.js";
44
+ import "../chunk-VSGKQ3HI.js";
45
+ import "../chunk-D4OGEWLH.js";
46
+ import "../chunk-VQDJ6KB3.js";
47
+ import "../chunk-UFNBKYWT.js";
48
+ import "../chunk-HOIGXMI7.js";
47
49
  import "../chunk-7QLSKOSU.js";
48
50
  import {
49
51
  EXIT
50
52
  } from "../chunk-KZERVKTD.js";
51
- import "../chunk-UPKP67TA.js";
52
- import "../chunk-454KMJHF.js";
53
+ import "../chunk-LI3C2IQY.js";
54
+ import "../chunk-NYBZJ44G.js";
53
55
  import "../chunk-T7E75EKA.js";
54
- import "../chunk-OAL44FM2.js";
55
- import "../chunk-EIZW73P5.js";
56
+ import "../chunk-SJN64NJX.js";
57
+ import "../chunk-65RN6ZCO.js";
56
58
  import {
57
59
  renderPreToolUseVerdict
58
- } from "../chunk-XFNVG3OV.js";
60
+ } from "../chunk-WWTLAZQA.js";
59
61
 
60
62
  // bin/pushary-hook.ts
61
63
  exitOnHelpFlag("hook");