@pushary/agent-hooks 0.93.0 → 0.94.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 (67) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/bin/pushary-bell-hook.js +4 -4
  3. package/dist/bin/pushary-bell.js +5 -5
  4. package/dist/bin/pushary-claude.js +12 -12
  5. package/dist/bin/pushary-clean.js +11 -11
  6. package/dist/bin/pushary-codex-bridge.js +9 -9
  7. package/dist/bin/pushary-codex-hook.js +9 -9
  8. package/dist/bin/pushary-codex.js +7 -7
  9. package/dist/bin/pushary-connect.js +6 -6
  10. package/dist/bin/pushary-daemon.js +13 -13
  11. package/dist/bin/pushary-disconnect.js +5 -5
  12. package/dist/bin/pushary-doctor.js +16 -16
  13. package/dist/bin/pushary-elicitation-hook.js +3 -3
  14. package/dist/bin/pushary-gemini-bridge.js +9 -9
  15. package/dist/bin/pushary-gemini-hook.js +8 -8
  16. package/dist/bin/pushary-hook.js +10 -10
  17. package/dist/bin/pushary-login.js +7 -7
  18. package/dist/bin/pushary-logout.js +4 -4
  19. package/dist/bin/pushary-mode.js +3 -3
  20. package/dist/bin/pushary-notification-hook.js +7 -7
  21. package/dist/bin/pushary-opencode-hook.js +8 -8
  22. package/dist/bin/pushary-permission-denied-hook.js +10 -10
  23. package/dist/bin/pushary-permission-hook.js +10 -10
  24. package/dist/bin/pushary-post-hook.js +7 -7
  25. package/dist/bin/pushary-prompt-hook.js +7 -7
  26. package/dist/bin/pushary-session-end-hook.js +7 -7
  27. package/dist/bin/pushary-session-start-hook.js +11 -11
  28. package/dist/bin/pushary-setup.js +19 -19
  29. package/dist/bin/pushary-stats.js +2 -2
  30. package/dist/bin/pushary-status.js +8 -8
  31. package/dist/bin/pushary-stop-hook.js +7 -7
  32. package/dist/bin/pushary-stopfailure-hook.js +7 -7
  33. package/dist/bin/pushary-transcripts.js +4 -4
  34. package/dist/bin/pushary-upgrade.js +12 -12
  35. package/dist/bin/pushary-wait.js +3 -3
  36. package/dist/bin/pushary.js +10 -0
  37. package/dist/{chunk-VHWCVD42.js → chunk-2ORRI66J.js} +1 -1
  38. package/dist/{chunk-TFN7ZCTI.js → chunk-36LR2LOT.js} +5 -5
  39. package/dist/{chunk-7FE2KABY.js → chunk-46P3VES5.js} +1 -1
  40. package/dist/{chunk-UAFQC35P.js → chunk-4PE2SQVM.js} +1 -1
  41. package/dist/{chunk-G5L3WVFV.js → chunk-5HGLZGI4.js} +24 -9
  42. package/dist/{chunk-OSALSIUF.js → chunk-6BIMJIRG.js} +1 -1
  43. package/dist/{chunk-UZNKVRLE.js → chunk-6WYL3XIP.js} +1 -1
  44. package/dist/{chunk-CELX75MW.js → chunk-BSEAOCCQ.js} +1 -1
  45. package/dist/{chunk-NZQTIDXN.js → chunk-FYOIW5RV.js} +3 -3
  46. package/dist/{chunk-6Y4IKMQT.js → chunk-HSAVPZ46.js} +3 -3
  47. package/dist/{chunk-72FWXLW2.js → chunk-NVPYRDCT.js} +1 -1
  48. package/dist/{chunk-KHTFHUL3.js → chunk-OB4RF2TF.js} +1 -1
  49. package/dist/{chunk-JW4KO5AF.js → chunk-ODL52O5V.js} +1 -1
  50. package/dist/{chunk-I463AEG3.js → chunk-OYNPLEXP.js} +1 -1
  51. package/dist/{chunk-T2PKGGDM.js → chunk-QGA2ZB4I.js} +1 -1
  52. package/dist/{chunk-HCLSTQ3N.js → chunk-QKNLW7H6.js} +7 -7
  53. package/dist/{chunk-5NAZ7SFS.js → chunk-RH3TM7TO.js} +1 -1
  54. package/dist/{chunk-UPCPR7QW.js → chunk-ROHFVGXM.js} +1 -1
  55. package/dist/{chunk-YUZYMAL7.js → chunk-RX75MRGC.js} +3 -3
  56. package/dist/{chunk-GKMQMSTB.js → chunk-TDUTNYAQ.js} +1 -1
  57. package/dist/{chunk-BXTJVM7O.js → chunk-UZFVNEEU.js} +6 -6
  58. package/dist/{chunk-Z6RFZKY4.js → chunk-WY4ALDYN.js} +1 -1
  59. package/dist/{chunk-QQSQWLFR.js → chunk-Y3UGCQQC.js} +1 -1
  60. package/dist/{chunk-N3TF3RQ2.js → chunk-Y6XXFXVB.js} +1 -1
  61. package/dist/{chunk-NXZYC3B3.js → chunk-YANV5TGK.js} +3 -3
  62. package/dist/{chunk-VNMKIJZB.js → chunk-Z6CP5ZZD.js} +3 -0
  63. package/dist/{chunk-WEDYCMHU.js → chunk-ZO2XG3CX.js} +1 -1
  64. package/dist/{chunk-TWVZHZM3.js → chunk-ZTJF6ANY.js} +2 -2
  65. package/dist/src/index.d.ts +2 -0
  66. package/dist/src/index.js +10 -10
  67. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readLedgerSummary
4
- } from "../chunk-VHWCVD42.js";
4
+ } from "../chunk-2ORRI66J.js";
5
5
  import {
6
6
  exitOnHelpFlag
7
7
  } from "../chunk-BVBEURWJ.js";
@@ -11,7 +11,7 @@ import "../chunk-KZERVKTD.js";
11
11
  import {
12
12
  getApiKey
13
13
  } from "../chunk-2UMNXADU.js";
14
- import "../chunk-VNMKIJZB.js";
14
+ import "../chunk-Z6CP5ZZD.js";
15
15
 
16
16
  // bin/pushary-stats.ts
17
17
  exitOnHelpFlag("stats");
@@ -2,19 +2,19 @@
2
2
  import {
3
3
  describeLastSeen,
4
4
  listMachines
5
- } from "../chunk-T2PKGGDM.js";
6
- import "../chunk-72FWXLW2.js";
7
- import "../chunk-N3TF3RQ2.js";
5
+ } from "../chunk-QGA2ZB4I.js";
6
+ import "../chunk-NVPYRDCT.js";
7
+ import "../chunk-Y6XXFXVB.js";
8
8
  import {
9
9
  describeReach,
10
10
  fetchChannels,
11
11
  reachVerdict
12
- } from "../chunk-UPCPR7QW.js";
12
+ } from "../chunk-ROHFVGXM.js";
13
13
  import "../chunk-3EGEA4KH.js";
14
14
  import {
15
15
  checkApiKey,
16
16
  describeKeyCheck
17
- } from "../chunk-BXTJVM7O.js";
17
+ } from "../chunk-UZFVNEEU.js";
18
18
  import "../chunk-QCGNGEGE.js";
19
19
  import {
20
20
  createIo
@@ -29,7 +29,7 @@ import "../chunk-43GMYSS4.js";
29
29
  import "../chunk-DINDL2CF.js";
30
30
  import {
31
31
  readKeySource
32
- } from "../chunk-OSALSIUF.js";
32
+ } from "../chunk-6BIMJIRG.js";
33
33
  import "../chunk-BC3VCZ3E.js";
34
34
  import "../chunk-EYRGBYZG.js";
35
35
  import "../chunk-SAF6HGAA.js";
@@ -39,10 +39,10 @@ import {
39
39
  import {
40
40
  EXIT
41
41
  } from "../chunk-KZERVKTD.js";
42
- import "../chunk-JW4KO5AF.js";
42
+ import "../chunk-ODL52O5V.js";
43
43
  import "../chunk-4LL6LG5X.js";
44
44
  import "../chunk-2UMNXADU.js";
45
- import "../chunk-VNMKIJZB.js";
45
+ import "../chunk-Z6CP5ZZD.js";
46
46
 
47
47
  // src/status.ts
48
48
  var keySourceLine = (source) => {
@@ -6,20 +6,20 @@ import {
6
6
  handleStop,
7
7
  handleSubagentStop,
8
8
  isSubagentStop
9
- } from "../chunk-G5L3WVFV.js";
9
+ } from "../chunk-5HGLZGI4.js";
10
10
  import "../chunk-RER3FRTD.js";
11
- import "../chunk-UAFQC35P.js";
12
- import "../chunk-QQSQWLFR.js";
13
- import "../chunk-72FWXLW2.js";
14
- import "../chunk-N3TF3RQ2.js";
11
+ import "../chunk-4PE2SQVM.js";
12
+ import "../chunk-Y3UGCQQC.js";
13
+ import "../chunk-NVPYRDCT.js";
14
+ import "../chunk-Y6XXFXVB.js";
15
15
  import "../chunk-EYRGBYZG.js";
16
16
  import "../chunk-SAF6HGAA.js";
17
17
  import "../chunk-7QLSKOSU.js";
18
18
  import "../chunk-KZERVKTD.js";
19
- import "../chunk-JW4KO5AF.js";
19
+ import "../chunk-ODL52O5V.js";
20
20
  import "../chunk-4LL6LG5X.js";
21
21
  import "../chunk-2UMNXADU.js";
22
- import "../chunk-VNMKIJZB.js";
22
+ import "../chunk-Z6CP5ZZD.js";
23
23
 
24
24
  // bin/pushary-stop-hook.ts
25
25
  var main = async () => {
@@ -4,20 +4,20 @@ import {
4
4
  } from "../chunk-6CUUA7HO.js";
5
5
  import {
6
6
  handleStopFailure
7
- } from "../chunk-G5L3WVFV.js";
7
+ } from "../chunk-5HGLZGI4.js";
8
8
  import "../chunk-RER3FRTD.js";
9
- import "../chunk-UAFQC35P.js";
10
- import "../chunk-QQSQWLFR.js";
11
- import "../chunk-72FWXLW2.js";
12
- import "../chunk-N3TF3RQ2.js";
9
+ import "../chunk-4PE2SQVM.js";
10
+ import "../chunk-Y3UGCQQC.js";
11
+ import "../chunk-NVPYRDCT.js";
12
+ import "../chunk-Y6XXFXVB.js";
13
13
  import "../chunk-EYRGBYZG.js";
14
14
  import "../chunk-SAF6HGAA.js";
15
15
  import "../chunk-7QLSKOSU.js";
16
16
  import "../chunk-KZERVKTD.js";
17
- import "../chunk-JW4KO5AF.js";
17
+ import "../chunk-ODL52O5V.js";
18
18
  import "../chunk-4LL6LG5X.js";
19
19
  import "../chunk-2UMNXADU.js";
20
- import "../chunk-VNMKIJZB.js";
20
+ import "../chunk-Z6CP5ZZD.js";
21
21
 
22
22
  // bin/pushary-stopfailure-hook.ts
23
23
  var main = async () => {
@@ -6,19 +6,19 @@ import {
6
6
  } from "../chunk-YKLCWWEI.js";
7
7
  import {
8
8
  transcriptsEnabled
9
- } from "../chunk-UZNKVRLE.js";
9
+ } from "../chunk-6WYL3XIP.js";
10
10
  import {
11
11
  exitOnHelpFlag
12
12
  } from "../chunk-BVBEURWJ.js";
13
13
  import "../chunk-43GMYSS4.js";
14
14
  import "../chunk-DINDL2CF.js";
15
- import "../chunk-OSALSIUF.js";
15
+ import "../chunk-6BIMJIRG.js";
16
16
  import "../chunk-BC3VCZ3E.js";
17
17
  import "../chunk-KZERVKTD.js";
18
- import "../chunk-JW4KO5AF.js";
18
+ import "../chunk-ODL52O5V.js";
19
19
  import "../chunk-4LL6LG5X.js";
20
20
  import "../chunk-2UMNXADU.js";
21
- import "../chunk-VNMKIJZB.js";
21
+ import "../chunk-Z6CP5ZZD.js";
22
22
 
23
23
  // bin/pushary-transcripts.ts
24
24
  exitOnHelpFlag("transcripts");
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  reapplyAllAgents
4
- } from "../chunk-TFN7ZCTI.js";
5
- import "../chunk-WEDYCMHU.js";
4
+ } from "../chunk-36LR2LOT.js";
5
+ import "../chunk-ZO2XG3CX.js";
6
6
  import {
7
7
  waitForMachineReadiness
8
- } from "../chunk-T2PKGGDM.js";
9
- import "../chunk-6Y4IKMQT.js";
10
- import "../chunk-YUZYMAL7.js";
8
+ } from "../chunk-QGA2ZB4I.js";
9
+ import "../chunk-HSAVPZ46.js";
10
+ import "../chunk-RX75MRGC.js";
11
11
  import "../chunk-EZIEXHYM.js";
12
12
  import {
13
13
  daemonHasRemoteProof,
@@ -19,7 +19,7 @@ import {
19
19
  replaceDaemonService,
20
20
  stopDaemonService,
21
21
  waitForDaemonRemoteProof
22
- } from "../chunk-TWVZHZM3.js";
22
+ } from "../chunk-ZTJF6ANY.js";
23
23
  import {
24
24
  detectProviderLiveCapabilities,
25
25
  hasSpawnProvider,
@@ -33,15 +33,15 @@ import {
33
33
  npmErrorMessage,
34
34
  resolveGlobalBinary
35
35
  } from "../chunk-L4ZCFMWW.js";
36
- import "../chunk-QQSQWLFR.js";
37
- import "../chunk-72FWXLW2.js";
36
+ import "../chunk-Y3UGCQQC.js";
37
+ import "../chunk-NVPYRDCT.js";
38
38
  import {
39
39
  claudeJson,
40
40
  codexConfigToml,
41
41
  cursorPluginDir,
42
42
  geminiSettings,
43
43
  vscodePluginDir
44
- } from "../chunk-N3TF3RQ2.js";
44
+ } from "../chunk-Y6XXFXVB.js";
45
45
  import {
46
46
  exitOnHelpFlag
47
47
  } from "../chunk-BVBEURWJ.js";
@@ -51,15 +51,15 @@ import {
51
51
  } from "../chunk-DINDL2CF.js";
52
52
  import {
53
53
  readControlMode
54
- } from "../chunk-OSALSIUF.js";
54
+ } from "../chunk-6BIMJIRG.js";
55
55
  import "../chunk-BC3VCZ3E.js";
56
56
  import "../chunk-KZERVKTD.js";
57
- import "../chunk-JW4KO5AF.js";
57
+ import "../chunk-ODL52O5V.js";
58
58
  import "../chunk-4LL6LG5X.js";
59
59
  import {
60
60
  getApiKey
61
61
  } from "../chunk-2UMNXADU.js";
62
- import "../chunk-VNMKIJZB.js";
62
+ import "../chunk-Z6CP5ZZD.js";
63
63
 
64
64
  // bin/pushary-upgrade.ts
65
65
  import { existsSync } from "fs";
@@ -4,8 +4,8 @@ import {
4
4
  } from "../chunk-IIENZE2J.js";
5
5
  import {
6
6
  exitOnFailedResponse
7
- } from "../chunk-Z6RFZKY4.js";
8
- import "../chunk-BXTJVM7O.js";
7
+ } from "../chunk-WY4ALDYN.js";
8
+ import "../chunk-UZFVNEEU.js";
9
9
  import {
10
10
  createIo
11
11
  } from "../chunk-5RUIFDTP.js";
@@ -28,7 +28,7 @@ import {
28
28
  getApiKey,
29
29
  getBaseUrl
30
30
  } from "../chunk-2UMNXADU.js";
31
- import "../chunk-VNMKIJZB.js";
31
+ import "../chunk-Z6CP5ZZD.js";
32
32
 
33
33
  // bin/pushary-wait.ts
34
34
  exitOnHelpFlag("wait");
@@ -15,6 +15,12 @@ import {
15
15
  EXIT
16
16
  } from "../chunk-KZERVKTD.js";
17
17
 
18
+ // src/cli/runtime.ts
19
+ var supportsRuntime = (version) => {
20
+ const [major, minor] = version.split(".").map(Number);
21
+ return major >= 24 || major === 23 && minor >= 5 || major === 22 && minor >= 13 || major === 20 && minor >= 17;
22
+ };
23
+
18
24
  // bin/pushary.ts
19
25
  var LOADERS = {
20
26
  setup: () => import("./pushary-setup.js"),
@@ -36,6 +42,10 @@ var LOADERS = {
36
42
  hook: () => import("./pushary-hook.js"),
37
43
  transcripts: () => import("./pushary-transcripts.js")
38
44
  };
45
+ if (!supportsRuntime(process.versions.node)) {
46
+ process.stderr.write("Pushary requires Node 20.17+, 22.13+, or 23.5+. Upgrade to a current Node LTS and retry.\n");
47
+ process.exit(EXIT.USAGE);
48
+ }
39
49
  installProxyDispatcher();
40
50
  var argv = process.argv.slice(2);
41
51
  var command = argv[0] ?? "";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isSafeReadOnlyCommand
3
- } from "./chunk-VNMKIJZB.js";
3
+ } from "./chunk-Z6CP5ZZD.js";
4
4
 
5
5
  // src/ledger.ts
6
6
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync } from "fs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  detectClaudeVersion
3
- } from "./chunk-WEDYCMHU.js";
3
+ } from "./chunk-ZO2XG3CX.js";
4
4
  import {
5
5
  claudeWired,
6
6
  codexWired,
7
7
  geminiWired
8
- } from "./chunk-6Y4IKMQT.js";
8
+ } from "./chunk-HSAVPZ46.js";
9
9
  import {
10
10
  CLAUDE_HOOK_EVENTS,
11
11
  GEMINI_HOOK_BINARY,
@@ -19,7 +19,7 @@ import {
19
19
  needsReregistration,
20
20
  registrationSignatures,
21
21
  supportedClaudeEvents
22
- } from "./chunk-YUZYMAL7.js";
22
+ } from "./chunk-RX75MRGC.js";
23
23
  import {
24
24
  guardBinary
25
25
  } from "./chunk-EZIEXHYM.js";
@@ -38,14 +38,14 @@ import {
38
38
  codexHooksJson,
39
39
  hasCodexHooks,
40
40
  vscodePluginMcp
41
- } from "./chunk-N3TF3RQ2.js";
41
+ } from "./chunk-Y6XXFXVB.js";
42
42
  import {
43
43
  readJsonSafe,
44
44
  writeJsonAtomic
45
45
  } from "./chunk-4LL6LG5X.js";
46
46
  import {
47
47
  HOOK_LOCATOR_BINARY
48
- } from "./chunk-VNMKIJZB.js";
48
+ } from "./chunk-Z6CP5ZZD.js";
49
49
 
50
50
  // src/reapply.ts
51
51
  import { join } from "path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactSecrets
3
- } from "./chunk-VNMKIJZB.js";
3
+ } from "./chunk-Z6CP5ZZD.js";
4
4
 
5
5
  // src/crypto.ts
6
6
  import nacl from "tweetnacl";
@@ -5,7 +5,7 @@ import {
5
5
  FILE_TARGET_TOOLS,
6
6
  redactSecrets,
7
7
  redactSecretsDeep
8
- } from "./chunk-VNMKIJZB.js";
8
+ } from "./chunk-Z6CP5ZZD.js";
9
9
 
10
10
  // ../hook-mapping/src/describe.ts
11
11
  import { isAbsolute, relative, resolve } from "path";
@@ -34,20 +34,20 @@ import {
34
34
  summarizeStop,
35
35
  taskTitleFrom,
36
36
  toolResultErrorText
37
- } from "./chunk-UAFQC35P.js";
37
+ } from "./chunk-4PE2SQVM.js";
38
38
  import {
39
39
  NOTIFICATION_PUSH_TYPES,
40
40
  POSTTOOLUSE_MIRROR_ONLY_TOOLS
41
- } from "./chunk-QQSQWLFR.js";
41
+ } from "./chunk-Y3UGCQQC.js";
42
42
  import {
43
43
  getMachineId
44
- } from "./chunk-72FWXLW2.js";
44
+ } from "./chunk-NVPYRDCT.js";
45
45
  import {
46
46
  withRetry
47
47
  } from "./chunk-EYRGBYZG.js";
48
48
  import {
49
49
  reportedInstallSource
50
- } from "./chunk-JW4KO5AF.js";
50
+ } from "./chunk-ODL52O5V.js";
51
51
  import {
52
52
  getApiKey,
53
53
  getBaseUrl
@@ -63,7 +63,7 @@ import {
63
63
  pendingCommandEvents,
64
64
  resolveAutoResolveOrigin,
65
65
  resolvePolicy
66
- } from "./chunk-VNMKIJZB.js";
66
+ } from "./chunk-Z6CP5ZZD.js";
67
67
 
68
68
  // src/policy.ts
69
69
  import { createHash } from "crypto";
@@ -292,6 +292,7 @@ var repoKeyFor = (cwd) => {
292
292
 
293
293
  // src/usage.ts
294
294
  import { closeSync, mkdirSync, openSync, readFileSync as readFileSync3, readSync, statSync as statSync2, writeFileSync as writeFileSync2 } from "fs";
295
+ import { createHash as createHash2 } from "crypto";
295
296
  import { join as join3 } from "path";
296
297
  import { tmpdir as tmpdir2 } from "os";
297
298
  var DEFAULT_PRICES = [
@@ -431,10 +432,12 @@ var readLastUserPrompt = (transcriptPath) => {
431
432
  };
432
433
  var readNewUsage = (transcriptPath, sessionId) => {
433
434
  try {
434
- const size = statSync2(transcriptPath).size;
435
+ const file = statSync2(transcriptPath);
436
+ const size = file.size;
435
437
  const path = stateFile(sessionId);
436
438
  let state = readState(path);
437
439
  if (size < state.offset) state = { ...emptyState(), recentIds: state.recentIds };
440
+ const startOffset = state.offset;
438
441
  let deltaUsd = 0;
439
442
  if (size > state.offset) {
440
443
  const buffer = readRange(transcriptPath, state.offset, size);
@@ -451,6 +454,18 @@ var readNewUsage = (transcriptPath, sessionId) => {
451
454
  writeFileSync2(path, JSON.stringify(state), "utf-8");
452
455
  if (state.tokensIn === 0 && state.tokensOut === 0) return null;
453
456
  return {
457
+ // Identical cursor-range reports share an identity across transport retries.
458
+ // Native message identity distinguishes an in-place rotation of the range.
459
+ // This does not serialize readers of different, potentially overlapping ranges.
460
+ eventId: createHash2("sha256").update(JSON.stringify([
461
+ sessionId,
462
+ file.dev,
463
+ file.ino,
464
+ startOffset,
465
+ state.offset,
466
+ state.recentIds.at(-1)
467
+ ])).digest("hex").slice(0, 32),
468
+ reportedAt: Date.now(),
454
469
  tokensIn: state.tokensIn,
455
470
  tokensOut: state.tokensOut,
456
471
  costUsd: state.costUsd,
@@ -529,10 +544,10 @@ var phoneDrivenEnv = (base) => ({
529
544
  // src/throttle.ts
530
545
  import { join as join4 } from "path";
531
546
  import { tmpdir as tmpdir3 } from "os";
532
- import { createHash as createHash2 } from "crypto";
547
+ import { createHash as createHash3 } from "crypto";
533
548
  import { existsSync as existsSync3, mkdirSync as mkdirSync2, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
534
549
  var THROTTLE_DIR = join4(tmpdir3(), "pushary-throttle");
535
- var markerPath = (key) => join4(THROTTLE_DIR, createHash2("sha256").update(key).digest("hex").slice(0, 16));
550
+ var markerPath = (key) => join4(THROTTLE_DIR, createHash3("sha256").update(key).digest("hex").slice(0, 16));
536
551
  var throttlePass = (key, windowMs) => {
537
552
  try {
538
553
  const path = markerPath(key);
@@ -767,7 +782,7 @@ var reportEvent = async (event, options = {}) => {
767
782
  }),
768
783
  signal: AbortSignal.any([AbortSignal.timeout(timeoutMs), ...options.signal ? [options.signal] : []])
769
784
  });
770
- if (options.requireOk && !res.ok) throw new Error(`/api/agent/event rejected (${res.status})`);
785
+ if ((options.requireOk || event.usage !== void 0) && !res.ok) throw new Error(`/api/agent/event rejected (${res.status})`);
771
786
  try {
772
787
  const result = await res.json();
773
788
  const withoutPending = () => ({ ...result, pendingCommand: void 0, pendingCommandId: void 0 });
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-BC3VCZ3E.js";
4
4
  import {
5
5
  resolveInstallSourceFor
6
- } from "./chunk-JW4KO5AF.js";
6
+ } from "./chunk-ODL52O5V.js";
7
7
  import {
8
8
  backupFile,
9
9
  readJsonSafe,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readTranscriptPreference
3
- } from "./chunk-OSALSIUF.js";
3
+ } from "./chunk-6BIMJIRG.js";
4
4
 
5
5
  // src/transcript-setting.ts
6
6
  var fromEnv = () => {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOOK_BUDGETS,
3
3
  OPENCODE_APPROVAL_EVENT
4
- } from "./chunk-VNMKIJZB.js";
4
+ } from "./chunk-Z6CP5ZZD.js";
5
5
 
6
6
  // src/opencode-plugin.ts
7
7
  var OPENCODE_PLUGIN_MARKER = "pushary-opencode-plugin w1";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  isBridgeLocator
3
- } from "./chunk-NXZYC3B3.js";
3
+ } from "./chunk-YANV5TGK.js";
4
4
  import {
5
5
  pusharyHookExecutable
6
- } from "./chunk-6Y4IKMQT.js";
6
+ } from "./chunk-HSAVPZ46.js";
7
7
  import {
8
8
  BELL_HOOK_BINARY
9
9
  } from "./chunk-DSTLA2TC.js";
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-7QLSKOSU.js";
19
19
  import {
20
20
  isValidApiKey
21
- } from "./chunk-VNMKIJZB.js";
21
+ } from "./chunk-Z6CP5ZZD.js";
22
22
 
23
23
  // src/hermes-config.ts
24
24
  import { execFileSync } from "child_process";
@@ -2,15 +2,15 @@ import {
2
2
  CLAUDE_HOOK_EVENTS,
3
3
  GEMINI_HOOK_EVENTS,
4
4
  hasGeminiHooks
5
- } from "./chunk-YUZYMAL7.js";
5
+ } from "./chunk-RX75MRGC.js";
6
6
  import {
7
7
  CODEX_HOOK_EVENTS,
8
8
  hasCodexHooks
9
- } from "./chunk-N3TF3RQ2.js";
9
+ } from "./chunk-Y6XXFXVB.js";
10
10
  import {
11
11
  CURSOR_GATE_EVENTS,
12
12
  HOOK_LOCATOR_BINARY
13
- } from "./chunk-VNMKIJZB.js";
13
+ } from "./chunk-Z6CP5ZZD.js";
14
14
 
15
15
  // src/diagnostics/wiring.ts
16
16
  var record = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-N3TF3RQ2.js";
3
+ } from "./chunk-Y6XXFXVB.js";
4
4
  import {
5
5
  writeFileAtomic
6
6
  } from "./chunk-4LL6LG5X.js";
@@ -3,7 +3,7 @@ import {
3
3
  decodePublicKey,
4
4
  generateSessionKey,
5
5
  wrapSessionKey
6
- } from "./chunk-7FE2KABY.js";
6
+ } from "./chunk-46P3VES5.js";
7
7
  import {
8
8
  fetchTranscriptRecipients,
9
9
  uploadTranscriptRecords
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2UMNXADU.js";
4
4
  import {
5
5
  normalizeInstallSource
6
- } from "./chunk-VNMKIJZB.js";
6
+ } from "./chunk-Z6CP5ZZD.js";
7
7
 
8
8
  // src/install-source.ts
9
9
  import { readFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shouldDeferToNativeMode
3
- } from "./chunk-VNMKIJZB.js";
3
+ } from "./chunk-Z6CP5ZZD.js";
4
4
 
5
5
  // src/native-defer.ts
6
6
  var nativeDeferOptions = () => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getMachineId
3
- } from "./chunk-72FWXLW2.js";
3
+ } from "./chunk-NVPYRDCT.js";
4
4
  import {
5
5
  getPackageVersion
6
6
  } from "./chunk-DINDL2CF.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  defersToNativeMode
3
- } from "./chunk-I463AEG3.js";
3
+ } from "./chunk-OYNPLEXP.js";
4
4
  import {
5
5
  isGatingMoment,
6
6
  recordKeylessMoment
7
- } from "./chunk-VHWCVD42.js";
7
+ } from "./chunk-2ORRI66J.js";
8
8
  import {
9
9
  denyReasonFrom,
10
10
  isDeferAnswer
@@ -19,7 +19,7 @@ import {
19
19
  reportEvent,
20
20
  settleQuestionsForToolUse,
21
21
  throttlePass
22
- } from "./chunk-G5L3WVFV.js";
22
+ } from "./chunk-5HGLZGI4.js";
23
23
  import {
24
24
  DEFAULT_SESSION,
25
25
  askUser,
@@ -37,14 +37,14 @@ import {
37
37
  describeToolCall,
38
38
  permissionDeniedAction,
39
39
  scopePathFor
40
- } from "./chunk-UAFQC35P.js";
40
+ } from "./chunk-4PE2SQVM.js";
41
41
  import {
42
42
  PRETOOLUSE_HANDLED_TOOLS,
43
43
  PRETOOLUSE_PHONE_ANSWERED_TOOLS
44
- } from "./chunk-QQSQWLFR.js";
44
+ } from "./chunk-Y3UGCQQC.js";
45
45
  import {
46
46
  getMachineId
47
- } from "./chunk-72FWXLW2.js";
47
+ } from "./chunk-NVPYRDCT.js";
48
48
  import {
49
49
  getApiKey,
50
50
  getBaseUrl
@@ -61,7 +61,7 @@ import {
61
61
  parseAgentQuestions,
62
62
  resolveGate,
63
63
  stoppedOutput
64
- } from "./chunk-VNMKIJZB.js";
64
+ } from "./chunk-Z6CP5ZZD.js";
65
65
 
66
66
  // src/decision-episode.ts
67
67
  var EPISODE_PATH = "/api/agent/decision-episode";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  readConfigFileKey
3
- } from "./chunk-OSALSIUF.js";
3
+ } from "./chunk-6BIMJIRG.js";
4
4
 
5
5
  // src/bell/fleet.ts
6
6
  import { closeSync, constants, futimesSync, lstatSync, mkdirSync, openSync, readdirSync, unlinkSync } from "fs";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-EYRGBYZG.js";
16
16
  import {
17
17
  reportedInstallSource
18
- } from "./chunk-JW4KO5AF.js";
18
+ } from "./chunk-ODL52O5V.js";
19
19
 
20
20
  // src/reach.ts
21
21
  var reachVerdict = (channels) => {
@@ -6,14 +6,14 @@ import {
6
6
  POSTTOOLUSE_MIRRORED_TOOLS,
7
7
  PRETOOLUSE_GATED_TOOLS,
8
8
  PRETOOLUSE_PHONE_ANSWERED_TOOLS
9
- } from "./chunk-QQSQWLFR.js";
9
+ } from "./chunk-Y3UGCQQC.js";
10
10
  import {
11
11
  isProtectedByScope
12
- } from "./chunk-N3TF3RQ2.js";
12
+ } from "./chunk-Y6XXFXVB.js";
13
13
  import {
14
14
  HOOK_BUDGETS,
15
15
  HOOK_LOCATOR_BINARY
16
- } from "./chunk-VNMKIJZB.js";
16
+ } from "./chunk-Z6CP5ZZD.js";
17
17
 
18
18
  // src/claude-config.ts
19
19
  import { join } from "path";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-N3TF3RQ2.js";
3
+ } from "./chunk-Y6XXFXVB.js";
4
4
  import {
5
5
  readJsonSafe
6
6
  } from "./chunk-4LL6LG5X.js";