@pushary/agent-hooks 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +1 -1
  3. package/data/SKILL.md +3 -3
  4. package/data/cursor-plugin/skills/pushary/SKILL.md +2 -2
  5. package/data/vscode-plugin/skills/pushary/SKILL.md +2 -2
  6. package/dist/bin/pushary-bell-hook.js +20 -20
  7. package/dist/bin/pushary-bell.js +9 -9
  8. package/dist/bin/pushary-claude.js +20 -20
  9. package/dist/bin/pushary-clean.js +472 -94
  10. package/dist/bin/pushary-codex-bridge.js +11 -11
  11. package/dist/bin/pushary-codex-hook.js +30 -28
  12. package/dist/bin/pushary-codex.js +7 -7
  13. package/dist/bin/pushary-connect.js +9 -9
  14. package/dist/bin/pushary-cowork.js +5 -5
  15. package/dist/bin/pushary-daemon.js +26 -26
  16. package/dist/bin/pushary-disconnect.js +13 -13
  17. package/dist/bin/pushary-doctor.js +86 -24
  18. package/dist/bin/pushary-elicitation-hook.js +19 -19
  19. package/dist/bin/pushary-gemini-bridge.js +10 -10
  20. package/dist/bin/pushary-gemini-hook.js +21 -21
  21. package/dist/bin/pushary-hook.js +34 -44
  22. package/dist/bin/pushary-login.js +10 -10
  23. package/dist/bin/pushary-logout.js +7 -7
  24. package/dist/bin/pushary-mode.js +5 -5
  25. package/dist/bin/pushary-notification-hook.js +22 -22
  26. package/dist/bin/pushary-opencode-hook.js +21 -21
  27. package/dist/bin/pushary-permission-denied-hook.js +26 -26
  28. package/dist/bin/pushary-permission-hook.js +32 -31
  29. package/dist/bin/pushary-post-hook.js +22 -22
  30. package/dist/bin/pushary-prompt-hook.js +22 -22
  31. package/dist/bin/pushary-session-end-hook.js +22 -22
  32. package/dist/bin/pushary-session-start-hook.js +24 -24
  33. package/dist/bin/pushary-setup.js +39 -60
  34. package/dist/bin/pushary-stats.js +4 -4
  35. package/dist/bin/pushary-status.js +13 -13
  36. package/dist/bin/pushary-stop-hook.js +22 -22
  37. package/dist/bin/pushary-stopfailure-hook.js +22 -22
  38. package/dist/bin/pushary-suggestions.js +2 -2
  39. package/dist/bin/pushary-transcript-register.js +18 -18
  40. package/dist/bin/pushary-transcripts.js +8 -8
  41. package/dist/bin/pushary-upgrade.js +17 -17
  42. package/dist/bin/pushary-wait.js +5 -5
  43. package/dist/bin/pushary.js +1 -1
  44. package/dist/{chunk-3AIFWTVB.js → chunk-2TOTCUJC.js} +2 -2
  45. package/dist/{chunk-X3KIGNIP.js → chunk-43Z3RLS5.js} +83 -24
  46. package/dist/{chunk-YF4JDCU4.js → chunk-5F5QQMCA.js} +1 -1
  47. package/dist/{chunk-ZHL62DRA.js → chunk-5IBVIMWT.js} +3 -3
  48. package/dist/{chunk-BYGEZI7B.js → chunk-5MSBI6NP.js} +1 -1
  49. package/dist/{chunk-WPJS3OZH.js → chunk-7IEB2GV4.js} +100 -9
  50. package/dist/{chunk-2PLEJ7SY.js → chunk-7PQZYCEP.js} +1 -1
  51. package/dist/{chunk-OE6U2AXM.js → chunk-A7XIL2WD.js} +3 -3
  52. package/dist/{chunk-A2URMNFM.js → chunk-BYAXXBNO.js} +1 -1
  53. package/dist/{chunk-DON24PNT.js → chunk-D4TNSUDY.js} +1 -1
  54. package/dist/{chunk-EU6JH7KU.js → chunk-ESLLVHDY.js} +8 -8
  55. package/dist/{chunk-LZQVAEWP.js → chunk-FAH3D74E.js} +2 -1
  56. package/dist/{chunk-MU275U5A.js → chunk-GIXLZFEY.js} +2 -2
  57. package/dist/{chunk-4V24U44H.js → chunk-GLPWCQ6V.js} +2 -2
  58. package/dist/{chunk-BL4SQNO6.js → chunk-GS5EI2YL.js} +1 -1
  59. package/dist/{chunk-EKQAKSGI.js → chunk-H25UB3CG.js} +1 -1
  60. package/dist/{chunk-BNDHXPTQ.js → chunk-HGN6VZTY.js} +20 -13
  61. package/dist/{chunk-WXXDHGTZ.js → chunk-IF46POXX.js} +5 -4
  62. package/dist/{chunk-A5ZWYQFV.js → chunk-JCWCTBYH.js} +4 -4
  63. package/dist/{chunk-IAEVVUXO.js → chunk-KZIXHLPQ.js} +1 -1
  64. package/dist/{chunk-FGVNU7XD.js → chunk-NBCTKC4Z.js} +34 -3
  65. package/dist/{chunk-XBO42HKH.js → chunk-NYHNLMQO.js} +12 -3
  66. package/dist/{chunk-K4TAUYUJ.js → chunk-O5L2OJBB.js} +3 -3
  67. package/dist/{chunk-DVO4SZMJ.js → chunk-O6RN46OS.js} +3 -3
  68. package/dist/{chunk-POAFXBNH.js → chunk-P4JVVJ2D.js} +1 -1
  69. package/dist/{chunk-E7WBNGJS.js → chunk-Q4UAMWXK.js} +1 -1
  70. package/dist/{chunk-KS4P6F3R.js → chunk-RGZY77CD.js} +4 -4
  71. package/dist/{chunk-K7UIAE7I.js → chunk-RQM5SMMR.js} +2 -2
  72. package/dist/{chunk-UVXNYYHG.js → chunk-S3CLZSV3.js} +6 -6
  73. package/dist/{chunk-B3S4SF3D.js → chunk-S3EUZZJB.js} +1 -1
  74. package/dist/{chunk-XBJW4MV5.js → chunk-SGZ3IAWF.js} +1 -1
  75. package/dist/{chunk-YKLCWWEI.js → chunk-SGZJ5LYH.js} +1 -1
  76. package/dist/{chunk-4LL6LG5X.js → chunk-T7E75EKA.js} +4 -3
  77. package/dist/{chunk-GOQHN2UH.js → chunk-TWWLVOPB.js} +1 -1
  78. package/dist/{chunk-RVDHN2TJ.js → chunk-U4FB623J.js} +2 -2
  79. package/dist/{chunk-RHLUJE4H.js → chunk-UCGQEAKZ.js} +1 -1
  80. package/dist/{chunk-KPNGPRYU.js → chunk-UIN3RD2U.js} +4 -4
  81. package/dist/{chunk-XEXOHUJ6.js → chunk-UTYTPDWN.js} +4 -4
  82. package/dist/{chunk-EJZCV5G4.js → chunk-VENQSVKA.js} +1 -1
  83. package/dist/{chunk-EYMMU5HC.js → chunk-XJWMPQ6X.js} +1 -1
  84. package/dist/{chunk-JYEGOYQC.js → chunk-YYRZPEMA.js} +1 -1
  85. package/dist/{chunk-N43EQPJK.js → chunk-ZIGGEKZW.js} +41 -7
  86. package/dist/{reapply-FUCAKR6Z.js → reapply-B3S2LRMT.js} +9 -9
  87. package/dist/src/index.d.ts +20 -17
  88. package/dist/src/index.js +13 -13
  89. package/package.json +1 -1
  90. /package/dist/{chunk-KBITFQST.js → chunk-P32LPT2L.js} +0 -0
@@ -9,10 +9,10 @@ import {
9
9
  import {
10
10
  readMachineReadiness,
11
11
  readManagedControlEvidence
12
- } from "../chunk-KPNGPRYU.js";
12
+ } from "../chunk-UIN3RD2U.js";
13
13
  import {
14
14
  CURSOR_GATE_SCRIPT
15
- } from "../chunk-KBITFQST.js";
15
+ } from "../chunk-P32LPT2L.js";
16
16
  import {
17
17
  agentProbes,
18
18
  detectAgent,
@@ -22,35 +22,35 @@ import {
22
22
  isPluginRegistered,
23
23
  shortenHome,
24
24
  vscodeSettingsTargets
25
- } from "../chunk-K4TAUYUJ.js";
25
+ } from "../chunk-O5L2OJBB.js";
26
26
  import {
27
27
  OPENCODE_PLUGIN_PLACEHOLDER,
28
28
  openCodePluginDir,
29
29
  openCodePluginFile,
30
30
  openCodeWired
31
- } from "../chunk-E7WBNGJS.js";
31
+ } from "../chunk-Q4UAMWXK.js";
32
32
  import {
33
33
  compatibleConfigFile,
34
34
  compatibleInstructionsFile,
35
35
  compatibleMcpFile,
36
36
  hasCompatibleHooks,
37
37
  missingCompatibleHookEvents
38
- } from "../chunk-BNDHXPTQ.js";
39
- import "../chunk-ZHL62DRA.js";
38
+ } from "../chunk-HGN6VZTY.js";
39
+ import "../chunk-5IBVIMWT.js";
40
40
  import {
41
41
  detectProviderLiveCapabilities,
42
42
  hasSpawnProvider,
43
43
  resolveControlPolicy
44
- } from "../chunk-4V24U44H.js";
44
+ } from "../chunk-GLPWCQ6V.js";
45
45
  import {
46
46
  readLedgerSummary
47
- } from "../chunk-YF4JDCU4.js";
47
+ } from "../chunk-5F5QQMCA.js";
48
48
  import {
49
49
  describeBridgeResolution,
50
50
  isBridgeLocator,
51
51
  liveBridgeProbe,
52
52
  resolveBridgeStub
53
- } from "../chunk-JYEGOYQC.js";
53
+ } from "../chunk-YYRZPEMA.js";
54
54
  import {
55
55
  claudeOtherHolders,
56
56
  claudeUnprovenHolds,
@@ -67,7 +67,7 @@ import {
67
67
  geminiWired,
68
68
  holdsLong,
69
69
  pusharyHookExecutable
70
- } from "../chunk-DVO4SZMJ.js";
70
+ } from "../chunk-O6RN46OS.js";
71
71
  import {
72
72
  daemonHasRemoteProof,
73
73
  daemonServiceManagerAvailable,
@@ -76,19 +76,19 @@ import {
76
76
  readDaemonNeedsLogin,
77
77
  readDaemonStatus,
78
78
  readInstalledDaemonService
79
- } from "../chunk-KS4P6F3R.js";
79
+ } from "../chunk-RGZY77CD.js";
80
80
  import {
81
81
  GEMINI_HOOK_BINARY,
82
82
  hasGeminiHooks,
83
83
  missingGeminiHookEvents
84
- } from "../chunk-OE6U2AXM.js";
84
+ } from "../chunk-A7XIL2WD.js";
85
85
  import "../chunk-XHKBHWLX.js";
86
- import "../chunk-WXXDHGTZ.js";
87
- import "../chunk-IAEVVUXO.js";
86
+ import "../chunk-IF46POXX.js";
87
+ import "../chunk-KZIXHLPQ.js";
88
88
  import "../chunk-LGXUGYUH.js";
89
89
  import {
90
90
  getMachineId
91
- } from "../chunk-K7UIAE7I.js";
91
+ } from "../chunk-RQM5SMMR.js";
92
92
  import {
93
93
  CODEX_HOOK_EVENTS,
94
94
  claudeJson,
@@ -111,7 +111,7 @@ import {
111
111
  pusharyConfigFile,
112
112
  readCodexMcpAuth,
113
113
  vscodePluginDir
114
- } from "../chunk-RHLUJE4H.js";
114
+ } from "../chunk-UCGQEAKZ.js";
115
115
  import {
116
116
  describeReach,
117
117
  describeRoundTrip,
@@ -119,20 +119,20 @@ import {
119
119
  reachVerdict,
120
120
  roundTripEvidence,
121
121
  verifyRoundTrip
122
- } from "../chunk-RVDHN2TJ.js";
122
+ } from "../chunk-U4FB623J.js";
123
123
  import "../chunk-3EGEA4KH.js";
124
124
  import {
125
125
  checkApiKey,
126
126
  describeKeyCheck
127
- } from "../chunk-DON24PNT.js";
127
+ } from "../chunk-D4TNSUDY.js";
128
128
  import "../chunk-QCGNGEGE.js";
129
129
  import {
130
130
  createIo
131
131
  } from "../chunk-5RUIFDTP.js";
132
132
  import {
133
133
  exitOnHelpFlag
134
- } from "../chunk-GOQHN2UH.js";
135
- import "../chunk-LZQVAEWP.js";
134
+ } from "../chunk-TWWLVOPB.js";
135
+ import "../chunk-FAH3D74E.js";
136
136
  import {
137
137
  parseFlags
138
138
  } from "../chunk-GMXKITVA.js";
@@ -143,7 +143,7 @@ import {
143
143
  keyPrefix,
144
144
  readControlMode,
145
145
  readKeySource
146
- } from "../chunk-XBO42HKH.js";
146
+ } from "../chunk-NYHNLMQO.js";
147
147
  import {
148
148
  callMcpTool,
149
149
  sendMcpRequest
@@ -155,8 +155,8 @@ import {
155
155
  import {
156
156
  EXIT
157
157
  } from "../chunk-KZERVKTD.js";
158
- import "../chunk-POAFXBNH.js";
159
- import "../chunk-4LL6LG5X.js";
158
+ import "../chunk-P4JVVJ2D.js";
159
+ import "../chunk-T7E75EKA.js";
160
160
  import {
161
161
  getBaseUrl
162
162
  } from "../chunk-2UMNXADU.js";
@@ -165,9 +165,13 @@ import {
165
165
  CURSOR_GATE_EVENTS,
166
166
  HOOK_COMPATIBLE_PROFILES,
167
167
  HOOK_LOCATOR_BINARY,
168
+ HOOK_SOURCES,
169
+ SUPPORT_DISCORD,
170
+ SUPPORT_EMAIL,
168
171
  hookActivationResult,
172
+ hookCompatibleProfile,
169
173
  isHookActivationReport
170
- } from "../chunk-WPJS3OZH.js";
174
+ } from "../chunk-7IEB2GV4.js";
171
175
 
172
176
  // bin/pushary-doctor.ts
173
177
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -249,6 +253,58 @@ var describeRewriterFinding = ({ rewriter, agent, state }) => state === "armed"
249
253
  var rewriterMechanism = ({ rewriter }) => `${rewriter.label} ${rewriter.what}.`;
250
254
  var rewriterRemedy = ({ state }) => state === "armed" ? 'Tick "Apply Common Config" on the provider so a switch keeps them, or re-run setup after each switch' : 'Re-run setup to put them back, then tick "Apply Common Config" on the provider so a switch keeps them';
251
255
 
256
+ // src/diagnostics/inert-registrations.ts
257
+ var REGISTRATION_FLAGS = ["agent", "source"];
258
+ var FLAG_PATTERNS = {
259
+ agent: /--agent(?:=|\s+)([A-Za-z0-9_-]*)/g,
260
+ source: /--source(?:=|\s+)([A-Za-z0-9_-]*)/g
261
+ };
262
+ function collectHookCommands(value) {
263
+ if (value === null || typeof value !== "object") return [];
264
+ const commands = [];
265
+ for (const [key, nested] of Object.entries(value)) {
266
+ if (key === "command" && typeof nested === "string") commands.push(nested);
267
+ else commands.push(...collectHookCommands(nested));
268
+ }
269
+ return commands;
270
+ }
271
+ function readHookCommands(contents) {
272
+ try {
273
+ return collectHookCommands(JSON.parse(contents));
274
+ } catch {
275
+ return contents.split("\n");
276
+ }
277
+ }
278
+ function registeredNames(contents, flag) {
279
+ const names = /* @__PURE__ */ new Set();
280
+ for (const command of readHookCommands(contents)) {
281
+ if (pusharyHookExecutable(command) === null) continue;
282
+ for (const match of command.matchAll(FLAG_PATTERNS[flag])) names.add(match[1] ?? "");
283
+ }
284
+ return [...names];
285
+ }
286
+ function pusharyAgentsNamedIn(contents) {
287
+ return registeredNames(contents, "agent");
288
+ }
289
+ function resolvesHookRegistration(name, flag) {
290
+ if (flag === "agent") return hookCompatibleProfile(name) !== void 0;
291
+ return HOOK_SOURCES.includes(name);
292
+ }
293
+ function inertRegistrations(configs, resolves) {
294
+ const findings = [];
295
+ for (const config of configs) {
296
+ for (const flag of REGISTRATION_FLAGS) {
297
+ const names = flag === "agent" ? pusharyAgentsNamedIn(config.contents) : registeredNames(config.contents, flag);
298
+ for (const name of names) {
299
+ if (!resolves(name, flag)) findings.push({ file: config.file, named: name });
300
+ }
301
+ }
302
+ }
303
+ return findings;
304
+ }
305
+ var describeInertRegistration = ({ named }) => `hooks here are registered for "${named}", which this CLI has no profile for, so every one of them stands aside`;
306
+ var inertRegistrationRemedy = () => "Upgrade with npx @pushary/agent-hooks@latest upgrade, or re-run setup to rewrite them for an agent this version knows";
307
+
252
308
  // src/diagnostics/activation.ts
253
309
  var readHookActivation = async (apiKey, agentType, target, deps = {}) => {
254
310
  const machineId = deps.machineId ?? getMachineId();
@@ -334,6 +390,7 @@ var pass = green("\u2713");
334
390
  var fail = red("\u2717");
335
391
  var warn = yellow("!");
336
392
  var CLAUDE_SETTINGS = claudeSettings();
393
+ var registeredConfigs = () => [CLAUDE_SETTINGS, codexHooksJson(), ...HOOK_COMPATIBLE_PROFILES.map((profile) => compatibleConfigFile(profile))].filter(existsSync).map((file) => ({ file, contents: readFileSync(file, "utf-8") }));
337
394
  var SKILL_PATH = join(claudeSkillDir(), "SKILL.md");
338
395
  var SHELL_FILES = [".zshrc", ".zprofile", ".bashrc", ".bash_profile"].map((f) => join(homedir2(), f));
339
396
  var readJson = (path) => {
@@ -702,6 +759,10 @@ var main = async () => {
702
759
  } else {
703
760
  skipped("Gemini CLI", installed("gemini_cli") ? "installed, but Pushary is not set up for it" : "not installed");
704
761
  }
762
+ for (const finding of inertRegistrations(registeredConfigs(), resolvesHookRegistration)) {
763
+ console.log(` ${warn} ${shortenHome(finding.file)}: ${describeInertRegistration(finding)}`);
764
+ console.log(` ${dim(inertRegistrationRemedy())}`);
765
+ }
705
766
  for (const profile of HOOK_COMPATIBLE_PROFILES) {
706
767
  const configPath = compatibleConfigFile(profile);
707
768
  const config = readJson(configPath);
@@ -1150,6 +1211,7 @@ var main = async () => {
1150
1211
  }
1151
1212
  console.log();
1152
1213
  console.log(` ${dim("Run")} ${cyan("npx @pushary/agent-hooks@latest clean")} ${dim("then")} ${cyan("setup")} ${dim("to fix.")}`);
1214
+ console.log(` ${dim("Still failing after that? Send this report to")} ${cyan(SUPPORT_EMAIL)} ${dim("or ask on")} ${cyan(SUPPORT_DISCORD)}`);
1153
1215
  }
1154
1216
  console.log();
1155
1217
  const keyExit = keyVerdict && (keyVerdict.kind === "rejected" || keyVerdict.kind === "locked" || keyVerdict.kind === "malformed") ? describeKeyCheck(keyVerdict).exitCode : null;
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readHookInput
4
- } from "../chunk-N43EQPJK.js";
4
+ } from "../chunk-ZIGGEKZW.js";
5
5
  import {
6
6
  isDeferAnswer
7
7
  } from "../chunk-YHG74UFF.js";
8
- import "../chunk-EU6JH7KU.js";
9
- import "../chunk-YKLCWWEI.js";
10
- import "../chunk-XEXOHUJ6.js";
11
- import "../chunk-BYGEZI7B.js";
12
- import "../chunk-JYEGOYQC.js";
13
- import "../chunk-DVO4SZMJ.js";
14
- import "../chunk-KS4P6F3R.js";
15
- import "../chunk-OE6U2AXM.js";
16
- import "../chunk-2PLEJ7SY.js";
17
- import "../chunk-B3S4SF3D.js";
8
+ import "../chunk-ESLLVHDY.js";
9
+ import "../chunk-SGZJ5LYH.js";
10
+ import "../chunk-UTYTPDWN.js";
11
+ import "../chunk-5MSBI6NP.js";
12
+ import "../chunk-YYRZPEMA.js";
13
+ import "../chunk-O6RN46OS.js";
14
+ import "../chunk-RGZY77CD.js";
15
+ import "../chunk-A7XIL2WD.js";
16
+ import "../chunk-7PQZYCEP.js";
17
+ import "../chunk-S3EUZZJB.js";
18
18
  import "../chunk-EQRS3SGM.js";
19
- import "../chunk-A2URMNFM.js";
19
+ import "../chunk-BYAXXBNO.js";
20
20
  import "../chunk-XHKBHWLX.js";
21
- import "../chunk-IAEVVUXO.js";
21
+ import "../chunk-KZIXHLPQ.js";
22
22
  import {
23
23
  askUser,
24
24
  isDecisionStopped,
@@ -26,17 +26,17 @@ import {
26
26
  } from "../chunk-LGXUGYUH.js";
27
27
  import {
28
28
  getMachineId
29
- } from "../chunk-K7UIAE7I.js";
30
- import "../chunk-RHLUJE4H.js";
29
+ } from "../chunk-RQM5SMMR.js";
30
+ import "../chunk-UCGQEAKZ.js";
31
31
  import "../chunk-GMXKITVA.js";
32
32
  import "../chunk-DINDL2CF.js";
33
- import "../chunk-XBO42HKH.js";
33
+ import "../chunk-NYHNLMQO.js";
34
34
  import "../chunk-EYRGBYZG.js";
35
35
  import "../chunk-SAF6HGAA.js";
36
36
  import "../chunk-7QLSKOSU.js";
37
37
  import "../chunk-KZERVKTD.js";
38
- import "../chunk-POAFXBNH.js";
39
- import "../chunk-4LL6LG5X.js";
38
+ import "../chunk-P4JVVJ2D.js";
39
+ import "../chunk-T7E75EKA.js";
40
40
  import {
41
41
  getApiKey
42
42
  } from "../chunk-2UMNXADU.js";
@@ -50,7 +50,7 @@ import {
50
50
  planElicitationAsk,
51
51
  readElicitationFields,
52
52
  renderElicitationOutput
53
- } from "../chunk-WPJS3OZH.js";
53
+ } from "../chunk-7IEB2GV4.js";
54
54
 
55
55
  // bin/pushary-elicitation-hook.ts
56
56
  import { basename } from "path";
@@ -5,36 +5,36 @@ import {
5
5
  postLiveSession,
6
6
  postLiveSessionUntilAccepted,
7
7
  startLiveSessionHeartbeat
8
- } from "../chunk-EKQAKSGI.js";
8
+ } from "../chunk-H25UB3CG.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-MU275U5A.js";
16
- import "../chunk-B3S4SF3D.js";
15
+ } from "../chunk-GIXLZFEY.js";
16
+ import "../chunk-S3EUZZJB.js";
17
17
  import "../chunk-EQRS3SGM.js";
18
18
  import {
19
19
  transcriptsEnabled
20
- } from "../chunk-A2URMNFM.js";
20
+ } from "../chunk-BYAXXBNO.js";
21
21
  import {
22
22
  spawnClaude
23
23
  } from "../chunk-XHKBHWLX.js";
24
24
  import {
25
25
  getMachineId
26
- } from "../chunk-K7UIAE7I.js";
26
+ } from "../chunk-RQM5SMMR.js";
27
27
  import {
28
28
  resolveBinary
29
- } from "../chunk-RHLUJE4H.js";
30
- import "../chunk-XBO42HKH.js";
31
- import "../chunk-POAFXBNH.js";
32
- import "../chunk-4LL6LG5X.js";
29
+ } from "../chunk-UCGQEAKZ.js";
30
+ import "../chunk-NYHNLMQO.js";
31
+ import "../chunk-P4JVVJ2D.js";
32
+ import "../chunk-T7E75EKA.js";
33
33
  import {
34
34
  getApiKey,
35
35
  getBaseUrl
36
36
  } from "../chunk-2UMNXADU.js";
37
- import "../chunk-WPJS3OZH.js";
37
+ import "../chunk-7IEB2GV4.js";
38
38
 
39
39
  // bin/pushary-gemini-bridge.ts
40
40
  import { existsSync } from "fs";
@@ -2,26 +2,26 @@
2
2
  import {
3
3
  isGatingMoment,
4
4
  recordKeylessMoment
5
- } from "../chunk-YF4JDCU4.js";
5
+ } from "../chunk-5F5QQMCA.js";
6
6
  import {
7
7
  readHookInput
8
- } from "../chunk-N43EQPJK.js";
8
+ } from "../chunk-ZIGGEKZW.js";
9
9
  import {
10
10
  denyReasonFrom,
11
11
  isDeferAnswer
12
12
  } from "../chunk-YHG74UFF.js";
13
- import "../chunk-EU6JH7KU.js";
14
- import "../chunk-YKLCWWEI.js";
15
- import "../chunk-XEXOHUJ6.js";
16
- import "../chunk-BYGEZI7B.js";
17
- import "../chunk-JYEGOYQC.js";
18
- import "../chunk-DVO4SZMJ.js";
19
- import "../chunk-KS4P6F3R.js";
20
- import "../chunk-OE6U2AXM.js";
21
- import "../chunk-2PLEJ7SY.js";
22
- import "../chunk-B3S4SF3D.js";
13
+ import "../chunk-ESLLVHDY.js";
14
+ import "../chunk-SGZJ5LYH.js";
15
+ import "../chunk-UTYTPDWN.js";
16
+ import "../chunk-5MSBI6NP.js";
17
+ import "../chunk-YYRZPEMA.js";
18
+ import "../chunk-O6RN46OS.js";
19
+ import "../chunk-RGZY77CD.js";
20
+ import "../chunk-A7XIL2WD.js";
21
+ import "../chunk-7PQZYCEP.js";
22
+ import "../chunk-S3EUZZJB.js";
23
23
  import "../chunk-EQRS3SGM.js";
24
- import "../chunk-A2URMNFM.js";
24
+ import "../chunk-BYAXXBNO.js";
25
25
  import "../chunk-XHKBHWLX.js";
26
26
  import {
27
27
  DEFAULT_SESSION,
@@ -42,8 +42,8 @@ import {
42
42
  repoKeyFor,
43
43
  reportEvent,
44
44
  scopePathFor
45
- } from "../chunk-WXXDHGTZ.js";
46
- import "../chunk-IAEVVUXO.js";
45
+ } from "../chunk-IF46POXX.js";
46
+ import "../chunk-KZIXHLPQ.js";
47
47
  import {
48
48
  DECISION_STOP_REASON,
49
49
  askUser,
@@ -54,17 +54,17 @@ import {
54
54
  } from "../chunk-LGXUGYUH.js";
55
55
  import {
56
56
  getMachineId
57
- } from "../chunk-K7UIAE7I.js";
58
- import "../chunk-RHLUJE4H.js";
57
+ } from "../chunk-RQM5SMMR.js";
58
+ import "../chunk-UCGQEAKZ.js";
59
59
  import "../chunk-GMXKITVA.js";
60
60
  import "../chunk-DINDL2CF.js";
61
- import "../chunk-XBO42HKH.js";
61
+ import "../chunk-NYHNLMQO.js";
62
62
  import "../chunk-EYRGBYZG.js";
63
63
  import "../chunk-SAF6HGAA.js";
64
64
  import "../chunk-7QLSKOSU.js";
65
65
  import "../chunk-KZERVKTD.js";
66
- import "../chunk-POAFXBNH.js";
67
- import "../chunk-4LL6LG5X.js";
66
+ import "../chunk-P4JVVJ2D.js";
67
+ import "../chunk-T7E75EKA.js";
68
68
  import {
69
69
  getApiKey
70
70
  } from "../chunk-2UMNXADU.js";
@@ -76,7 +76,7 @@ import {
76
76
  hookWaitClamped,
77
77
  hookWaitDeadline,
78
78
  resolveGate
79
- } from "../chunk-WPJS3OZH.js";
79
+ } from "../chunk-7IEB2GV4.js";
80
80
 
81
81
  // bin/pushary-gemini-hook.ts
82
82
  import { basename } from "path";
@@ -1,55 +1,56 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  handlePreToolUse
4
- } from "../chunk-X3KIGNIP.js";
4
+ } from "../chunk-43Z3RLS5.js";
5
5
  import {
6
6
  activeHookSource,
7
7
  normalizeToolCall,
8
- profileFromArgv,
9
- unreadableTool
10
- } from "../chunk-BNDHXPTQ.js";
11
- import "../chunk-ZHL62DRA.js";
12
- import "../chunk-A5ZWYQFV.js";
13
- import "../chunk-YF4JDCU4.js";
8
+ profileFromArgv
9
+ } from "../chunk-HGN6VZTY.js";
10
+ import "../chunk-5IBVIMWT.js";
11
+ import "../chunk-JCWCTBYH.js";
12
+ import "../chunk-5F5QQMCA.js";
14
13
  import {
15
- readHookInput
16
- } from "../chunk-N43EQPJK.js";
14
+ readToolHookInput
15
+ } from "../chunk-ZIGGEKZW.js";
17
16
  import "../chunk-YHG74UFF.js";
18
- import "../chunk-EU6JH7KU.js";
19
- import "../chunk-YKLCWWEI.js";
20
- import "../chunk-XEXOHUJ6.js";
21
- import "../chunk-BYGEZI7B.js";
22
- import "../chunk-JYEGOYQC.js";
23
- import "../chunk-DVO4SZMJ.js";
24
- import "../chunk-KS4P6F3R.js";
25
- import "../chunk-OE6U2AXM.js";
26
- import "../chunk-2PLEJ7SY.js";
27
- import "../chunk-B3S4SF3D.js";
17
+ import "../chunk-ESLLVHDY.js";
18
+ import "../chunk-SGZJ5LYH.js";
19
+ import "../chunk-UTYTPDWN.js";
20
+ import "../chunk-5MSBI6NP.js";
21
+ import "../chunk-YYRZPEMA.js";
22
+ import "../chunk-O6RN46OS.js";
23
+ import "../chunk-RGZY77CD.js";
24
+ import "../chunk-A7XIL2WD.js";
25
+ import "../chunk-7PQZYCEP.js";
26
+ import "../chunk-S3EUZZJB.js";
28
27
  import "../chunk-EQRS3SGM.js";
29
- import "../chunk-A2URMNFM.js";
28
+ import "../chunk-BYAXXBNO.js";
30
29
  import "../chunk-XHKBHWLX.js";
31
- import "../chunk-WXXDHGTZ.js";
32
- import "../chunk-IAEVVUXO.js";
30
+ import {
31
+ canonicalGateInputs
32
+ } from "../chunk-IF46POXX.js";
33
+ import "../chunk-KZIXHLPQ.js";
33
34
  import "../chunk-LGXUGYUH.js";
34
- import "../chunk-K7UIAE7I.js";
35
- import "../chunk-RHLUJE4H.js";
35
+ import "../chunk-RQM5SMMR.js";
36
+ import "../chunk-UCGQEAKZ.js";
36
37
  import {
37
38
  exitOnHelpFlag
38
- } from "../chunk-GOQHN2UH.js";
39
- import "../chunk-LZQVAEWP.js";
39
+ } from "../chunk-TWWLVOPB.js";
40
+ import "../chunk-FAH3D74E.js";
40
41
  import "../chunk-GMXKITVA.js";
41
42
  import "../chunk-DINDL2CF.js";
42
- import "../chunk-XBO42HKH.js";
43
+ import "../chunk-NYHNLMQO.js";
43
44
  import "../chunk-EYRGBYZG.js";
44
45
  import "../chunk-SAF6HGAA.js";
45
46
  import "../chunk-7QLSKOSU.js";
46
47
  import "../chunk-KZERVKTD.js";
47
- import "../chunk-POAFXBNH.js";
48
- import "../chunk-4LL6LG5X.js";
48
+ import "../chunk-P4JVVJ2D.js";
49
+ import "../chunk-T7E75EKA.js";
49
50
  import "../chunk-2UMNXADU.js";
50
51
  import {
51
52
  renderPreToolUseVerdict
52
- } from "../chunk-WPJS3OZH.js";
53
+ } from "../chunk-7IEB2GV4.js";
53
54
 
54
55
  // bin/pushary-hook.ts
55
56
  exitOnHelpFlag("hook");
@@ -61,19 +62,12 @@ var FALLBACK_TO_TERMINAL = {
61
62
  permissionDecisionReason: "Pushary hook error, falling back to terminal"
62
63
  }
63
64
  };
64
- var askBecauseUnreadable = (toolName) => ({
65
- hookSpecificOutput: {
66
- hookEventName: "PreToolUse",
67
- permissionDecision: "ask",
68
- permissionDecisionReason: `Pushary could not read what ${toolName} acts on`
69
- }
70
- });
71
65
  var emit = (verdict) => {
72
66
  const output = verdict && profile ? renderPreToolUseVerdict(profile, verdict) : verdict;
73
67
  if (output !== void 0) process.stdout.write(JSON.stringify(output));
74
68
  };
75
69
  var main = async () => {
76
- const raw = await readHookInput(
70
+ const raw = await readToolHookInput(
77
71
  activeHookSource(process.argv),
78
72
  "PreToolUse"
79
73
  );
@@ -81,12 +75,8 @@ var main = async () => {
81
75
  process.exit(0);
82
76
  }
83
77
  try {
84
- const unreadable = unreadableTool(profile, raw);
85
- if (unreadable) {
86
- emit(askBecauseUnreadable(unreadable));
87
- return;
88
- }
89
- emit(await handlePreToolUse(normalizeToolCall(profile, raw)));
78
+ const canonical = profile ? canonicalGateInputs(profile.source, raw.tool_name, [raw.tool_input ?? {}], raw.cwd) : void 0;
79
+ emit(await handlePreToolUse(normalizeToolCall(profile, raw), canonical));
90
80
  } catch (err) {
91
81
  process.stderr.write(
92
82
  `[pushary-hook] Error: ${err instanceof Error ? err.message : String(err)}
@@ -5,22 +5,22 @@ import {
5
5
  import "../chunk-PUZZELE6.js";
6
6
  import {
7
7
  recoverDaemonAfterLogin
8
- } from "../chunk-KS4P6F3R.js";
8
+ } from "../chunk-RGZY77CD.js";
9
9
  import "../chunk-XHKBHWLX.js";
10
- import "../chunk-K7UIAE7I.js";
11
- import "../chunk-RHLUJE4H.js";
10
+ import "../chunk-RQM5SMMR.js";
11
+ import "../chunk-UCGQEAKZ.js";
12
12
  import "../chunk-3EGEA4KH.js";
13
13
  import {
14
14
  checkApiKey,
15
15
  describeKeyCheck
16
- } from "../chunk-DON24PNT.js";
16
+ } from "../chunk-D4TNSUDY.js";
17
17
  import {
18
18
  createIo
19
19
  } from "../chunk-5RUIFDTP.js";
20
20
  import {
21
21
  exitOnHelpFlag
22
- } from "../chunk-GOQHN2UH.js";
23
- import "../chunk-LZQVAEWP.js";
22
+ } from "../chunk-TWWLVOPB.js";
23
+ import "../chunk-FAH3D74E.js";
24
24
  import {
25
25
  parseFlags
26
26
  } from "../chunk-GMXKITVA.js";
@@ -32,7 +32,7 @@ import {
32
32
  readControlMode,
33
33
  readKeySource,
34
34
  writeKey
35
- } from "../chunk-XBO42HKH.js";
35
+ } from "../chunk-NYHNLMQO.js";
36
36
  import "../chunk-SAF6HGAA.js";
37
37
  import {
38
38
  UsageError
@@ -40,12 +40,12 @@ import {
40
40
  import {
41
41
  EXIT
42
42
  } from "../chunk-KZERVKTD.js";
43
- import "../chunk-POAFXBNH.js";
44
- import "../chunk-4LL6LG5X.js";
43
+ import "../chunk-P4JVVJ2D.js";
44
+ import "../chunk-T7E75EKA.js";
45
45
  import "../chunk-2UMNXADU.js";
46
46
  import {
47
47
  isValidApiKey
48
- } from "../chunk-WPJS3OZH.js";
48
+ } from "../chunk-7IEB2GV4.js";
49
49
 
50
50
  // bin/pushary-login.ts
51
51
  exitOnHelpFlag("login");
@@ -4,14 +4,14 @@ import {
4
4
  codexConfigToml,
5
5
  cursorUserMcp,
6
6
  geminiSettings
7
- } from "../chunk-RHLUJE4H.js";
7
+ } from "../chunk-UCGQEAKZ.js";
8
8
  import {
9
9
  createIo
10
10
  } from "../chunk-5RUIFDTP.js";
11
11
  import {
12
12
  exitOnHelpFlag
13
- } from "../chunk-GOQHN2UH.js";
14
- import "../chunk-LZQVAEWP.js";
13
+ } from "../chunk-TWWLVOPB.js";
14
+ import "../chunk-FAH3D74E.js";
15
15
  import {
16
16
  parseFlags
17
17
  } from "../chunk-GMXKITVA.js";
@@ -19,19 +19,19 @@ import "../chunk-DINDL2CF.js";
19
19
  import {
20
20
  clearKey,
21
21
  readKeySource
22
- } from "../chunk-XBO42HKH.js";
22
+ } from "../chunk-NYHNLMQO.js";
23
23
  import {
24
24
  UsageError
25
25
  } from "../chunk-7QLSKOSU.js";
26
26
  import {
27
27
  EXIT
28
28
  } from "../chunk-KZERVKTD.js";
29
- import "../chunk-POAFXBNH.js";
30
- import "../chunk-4LL6LG5X.js";
29
+ import "../chunk-P4JVVJ2D.js";
30
+ import "../chunk-T7E75EKA.js";
31
31
  import {
32
32
  getBaseUrl
33
33
  } from "../chunk-2UMNXADU.js";
34
- import "../chunk-WPJS3OZH.js";
34
+ import "../chunk-7IEB2GV4.js";
35
35
 
36
36
  // bin/pushary-logout.ts
37
37
  import { existsSync } from "fs";