@pushary/agent-hooks 1.9.43 → 1.9.45

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 (105) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -0
  3. package/dist/bin/pushary-bell-hook.js +26 -26
  4. package/dist/bin/pushary-bell.js +11 -11
  5. package/dist/bin/pushary-claude.js +33 -33
  6. package/dist/bin/pushary-clean.js +38 -38
  7. package/dist/bin/pushary-codex-bridge.js +22 -680
  8. package/dist/bin/pushary-codex-hook.js +32 -32
  9. package/dist/bin/pushary-codex-session.d.ts +1 -0
  10. package/dist/bin/pushary-codex-session.js +649 -0
  11. package/dist/bin/pushary-codex.js +12 -12
  12. package/dist/bin/pushary-connect.js +27 -27
  13. package/dist/bin/pushary-cowork.js +6 -6
  14. package/dist/bin/pushary-daemon.js +55 -55
  15. package/dist/bin/pushary-disconnect.js +26 -26
  16. package/dist/bin/pushary-doctor.js +84 -82
  17. package/dist/bin/pushary-elicitation-hook.js +26 -26
  18. package/dist/bin/pushary-gemini-bridge.js +15 -15
  19. package/dist/bin/pushary-gemini-hook.js +29 -29
  20. package/dist/bin/pushary-hook.js +32 -32
  21. package/dist/bin/pushary-login.js +16 -16
  22. package/dist/bin/pushary-logout.js +27 -27
  23. package/dist/bin/pushary-mcp.js +9 -9
  24. package/dist/bin/pushary-mode.js +14 -14
  25. package/dist/bin/pushary-notification-hook.js +25 -25
  26. package/dist/bin/pushary-opencode-hook.js +28 -28
  27. package/dist/bin/pushary-permission-denied-hook.js +30 -30
  28. package/dist/bin/pushary-permission-hook.js +29 -29
  29. package/dist/bin/pushary-post-hook.js +25 -25
  30. package/dist/bin/pushary-prompt-hook.js +25 -25
  31. package/dist/bin/pushary-session-end-hook.js +25 -25
  32. package/dist/bin/pushary-session-start-hook.js +30 -30
  33. package/dist/bin/pushary-setup.js +164 -112
  34. package/dist/bin/pushary-stats.js +5 -5
  35. package/dist/bin/pushary-status.js +34 -34
  36. package/dist/bin/pushary-stop-hook.js +25 -25
  37. package/dist/bin/pushary-stopfailure-hook.js +25 -25
  38. package/dist/bin/pushary-suggestions.js +14 -14
  39. package/dist/bin/pushary-transcript-register.js +18 -18
  40. package/dist/bin/pushary-transcripts.js +7 -7
  41. package/dist/bin/pushary-upgrade.js +41 -41
  42. package/dist/bin/pushary-wait.js +14 -14
  43. package/dist/bin/pushary.js +7 -6
  44. package/dist/{chunk-HC4DQXAT.js → chunk-2DORVRDB.js} +2 -2
  45. package/dist/{chunk-C6QBNBL4.js → chunk-2FUHSKXH.js} +7 -7
  46. package/dist/{chunk-45W43U2Q.js → chunk-2SXXH6JY.js} +5 -5
  47. package/dist/{chunk-JE6GG3OV.js → chunk-335ZDJ7R.js} +1 -1
  48. package/dist/{chunk-S4QT3YFG.js → chunk-3PM62C2R.js} +15 -15
  49. package/dist/{chunk-Y3N3SYBX.js → chunk-46F4BRUQ.js} +1 -1
  50. package/dist/{chunk-W3BO56VE.js → chunk-4A6VUVXV.js} +1 -1
  51. package/dist/{chunk-LDCRV6HG.js → chunk-57M4ERJK.js} +2 -1
  52. package/dist/{chunk-IMD5FN6Y.js → chunk-5DCZL3BC.js} +3 -3
  53. package/dist/chunk-6JPDAUFP.js +866 -0
  54. package/dist/{chunk-H6V5S52A.js → chunk-6TYKZ4DN.js} +3 -3
  55. package/dist/{chunk-VQL62ECJ.js → chunk-7SGYCU5C.js} +1 -1
  56. package/dist/{chunk-SATOTPXW.js → chunk-7URSJMAB.js} +1 -1
  57. package/dist/{chunk-PIZ65U3D.js → chunk-ASK2MSD2.js} +5 -5
  58. package/dist/{chunk-SCYAXV7U.js → chunk-AUOSFZJ3.js} +7 -7
  59. package/dist/{chunk-LOUZNXTJ.js → chunk-BT57FUMT.js} +2 -2
  60. package/dist/{chunk-4T2TGP4T.js → chunk-CDERSTBO.js} +94 -7
  61. package/dist/{chunk-LAAOHBLO.js → chunk-CFMCV6Z7.js} +2 -2
  62. package/dist/{chunk-ENGASUEL.js → chunk-DSGB5JLG.js} +4 -4
  63. package/dist/{chunk-ZJXEQV3A.js → chunk-ECFEYB6Z.js} +1 -1
  64. package/dist/{chunk-CIERFMQT.js → chunk-EH5ZDG6V.js} +4 -4
  65. package/dist/{chunk-IDVKJICN.js → chunk-EKGQEDQ4.js} +3 -11
  66. package/dist/{chunk-GTOBOC6M.js → chunk-EWC4P4ZL.js} +1 -1
  67. package/dist/{chunk-F7SZ2RCK.js → chunk-FOUK4CBO.js} +4 -4
  68. package/dist/{chunk-LE2YVPAT.js → chunk-GQ5KCVGK.js} +11 -11
  69. package/dist/{chunk-YRE6GUFZ.js → chunk-GZSSAY6N.js} +75 -161
  70. package/dist/{chunk-LWW7SBK3.js → chunk-H4ODQD3Y.js} +2 -2
  71. package/dist/{chunk-O7ADPLBF.js → chunk-HHX6IRSH.js} +1 -1
  72. package/dist/{chunk-H64CU2VB.js → chunk-IFT3GU7Y.js} +2 -2
  73. package/dist/{chunk-FPJHS6PA.js → chunk-IKYI63RF.js} +6 -6
  74. package/dist/{chunk-S3OWTQ6Z.js → chunk-IOVJVGIT.js} +12 -5
  75. package/dist/{chunk-RXXKFM22.js → chunk-K7EGWMDU.js} +370 -138
  76. package/dist/{chunk-AVT7GPOF.js → chunk-KS7NA5CK.js} +10 -10
  77. package/dist/{chunk-A64UCGX3.js → chunk-N2K3BSCA.js} +5 -5
  78. package/dist/{chunk-ZORCUL3Z.js → chunk-NJN5NRHZ.js} +4 -4
  79. package/dist/{chunk-Q7CUTGT4.js → chunk-OHFC3GJY.js} +1 -1
  80. package/dist/{chunk-JW4S4O4W.js → chunk-P2F3JUFX.js} +4 -4
  81. package/dist/{chunk-C54VJJ37.js → chunk-PWUIPQ2I.js} +3 -3
  82. package/dist/{chunk-F5ALKPNS.js → chunk-QQXP3CQA.js} +1 -1
  83. package/dist/{chunk-EA5NWDK7.js → chunk-R7ZQHAVL.js} +29 -0
  84. package/dist/{chunk-V5SUKRRI.js → chunk-RBJWPUI6.js} +4 -4
  85. package/dist/{chunk-J6MVBWF2.js → chunk-RFQWB5ZV.js} +1 -1
  86. package/dist/{chunk-NKBAEGT7.js → chunk-S6EGJBI5.js} +1 -1
  87. package/dist/{chunk-53KLSE2F.js → chunk-SFQSOBLM.js} +3 -3
  88. package/dist/{chunk-MSUMSXTI.js → chunk-SIN7NJD7.js} +1 -1
  89. package/dist/{chunk-55FB6OSG.js → chunk-U45OINYS.js} +1 -1
  90. package/dist/{chunk-TH74SUVV.js → chunk-U6Z56IQS.js} +2 -2
  91. package/dist/{chunk-JJWG7CBT.js → chunk-VO6XI6AX.js} +3 -3
  92. package/dist/{chunk-VIVLJK3T.js → chunk-WDIX4XZH.js} +2 -2
  93. package/dist/{chunk-Y4VZYKSW.js → chunk-WM76AN4X.js} +11 -11
  94. package/dist/{chunk-NV2LARV4.js → chunk-WPPKXVV3.js} +2 -2
  95. package/dist/{chunk-VGPEXMYM.js → chunk-XFHISCJM.js} +42 -7
  96. package/dist/{chunk-C3RVRTHS.js → chunk-YK7FGPYS.js} +3 -3
  97. package/dist/{chunk-JB4JCGRW.js → chunk-YWIFK2UB.js} +2 -2
  98. package/dist/{chunk-O4SYJVAF.js → chunk-YXGWG5PO.js} +5 -5
  99. package/dist/{chunk-XLHFWG2E.js → chunk-ZSY6BWUD.js} +2 -2
  100. package/dist/{global-upgrade-FFWOHOJ4.js → global-upgrade-U6NWZA5W.js} +6 -6
  101. package/dist/{paths-Y2WPCM5Y.js → paths-IQTB3ZZI.js} +2 -2
  102. package/dist/{reapply-N3MV3CKD.js → reapply-LILGWJO3.js} +21 -21
  103. package/dist/src/index.js +19 -19
  104. package/dist/{upgrade-lock-ZXXNRH2P.js → upgrade-lock-2BVFIDU4.js} +3 -3
  105. package/package.json +5 -2
@@ -2,34 +2,35 @@ import {
2
2
  IDLE_PROMPT_NOTIFICATION,
3
3
  NOTIFICATION_PUSH_TYPES,
4
4
  POSTTOOLUSE_MIRROR_ONLY_TOOLS
5
- } from "./chunk-O7ADPLBF.js";
5
+ } from "./chunk-HHX6IRSH.js";
6
+ import {
7
+ reportedInstallSource
8
+ } from "./chunk-CFMCV6Z7.js";
6
9
  import {
7
10
  cancelQuestion,
8
11
  clientErrorKindOf,
9
12
  isPolicyConfig,
13
+ repoKeyFor,
10
14
  reportClientError,
11
15
  sendNotification,
12
16
  waitForAnswer
13
- } from "./chunk-4T2TGP4T.js";
17
+ } from "./chunk-CDERSTBO.js";
14
18
  import {
15
19
  withRetry
16
- } from "./chunk-53KLSE2F.js";
20
+ } from "./chunk-SFQSOBLM.js";
17
21
  import {
18
22
  getMachineId
19
- } from "./chunk-W3BO56VE.js";
20
- import {
21
- reportedInstallSource
22
- } from "./chunk-LAAOHBLO.js";
23
+ } from "./chunk-4A6VUVXV.js";
23
24
  import {
24
25
  canonicalJson
25
- } from "./chunk-S3OWTQ6Z.js";
26
+ } from "./chunk-IOVJVGIT.js";
26
27
  import {
27
28
  writeFileAtomic
28
29
  } from "./chunk-AQFEP65J.js";
29
30
  import {
30
31
  getApiKey,
31
32
  getBaseUrl
32
- } from "./chunk-GTOBOC6M.js";
33
+ } from "./chunk-EWC4P4ZL.js";
33
34
  import {
34
35
  ACTION_BODY_MAX,
35
36
  AGENTS,
@@ -51,9 +52,7 @@ import {
51
52
  hookCompatibleProfileBySource,
52
53
  isAutoApprove,
53
54
  isTokenCount,
54
- localRepoKey,
55
55
  modeStateFromResponse,
56
- normalizeRepoRemote,
57
56
  parseMcpToolName,
58
57
  pendingCommandEvents,
59
58
  redactSecrets,
@@ -64,7 +63,7 @@ import {
64
63
  toToolLookup,
65
64
  truncateLine,
66
65
  unansweredRefusalReason
67
- } from "./chunk-RXXKFM22.js";
66
+ } from "./chunk-K7EGWMDU.js";
68
67
 
69
68
  // ../hook-mapping/src/describe.ts
70
69
  import { isAbsolute, relative, resolve } from "path";
@@ -1008,94 +1007,10 @@ var removePendingSession = (sessionId) => {
1008
1007
  }
1009
1008
  };
1010
1009
 
1011
- // src/repo.ts
1012
- import { existsSync as existsSync2, readFileSync as readFileSync2, statSync as statSync2 } from "fs";
1013
- import { basename as basename2, dirname, isAbsolute as isAbsolute2, join as join2, resolve as resolve2 } from "path";
1014
- var MAX_PARENT_WALK = 64;
1015
- var GIT_FILE_PREFIX = "gitdir:";
1016
- var findGitDir = (startDir) => {
1017
- let current = resolve2(startDir);
1018
- for (let depth = 0; depth < MAX_PARENT_WALK; depth += 1) {
1019
- const candidate = join2(current, ".git");
1020
- try {
1021
- if (existsSync2(candidate)) {
1022
- if (statSync2(candidate).isDirectory()) return candidate;
1023
- const pointer = readFileSync2(candidate, "utf-8").trim();
1024
- if (pointer.startsWith(GIT_FILE_PREFIX)) {
1025
- const target = pointer.slice(GIT_FILE_PREFIX.length).trim();
1026
- return isAbsolute2(target) ? target : resolve2(current, target);
1027
- }
1028
- }
1029
- } catch {
1030
- }
1031
- const parent = dirname(current);
1032
- if (parent === current) return void 0;
1033
- current = parent;
1034
- }
1035
- return void 0;
1036
- };
1037
- var configPathFor = (gitDir) => {
1038
- const index = gitDir.replace(/\\/g, "/").indexOf("/worktrees/");
1039
- return index === -1 ? join2(gitDir, "config") : join2(gitDir.slice(0, index), "config");
1040
- };
1041
- var ORIGIN_SECTION = /^\[remote "origin"\]/;
1042
- var SECTION_HEADER = /^\[/;
1043
- var URL_LINE = /^url\s*=\s*(.+)$/;
1044
- var readOriginRemote = (gitDir) => {
1045
- try {
1046
- const configPath = configPathFor(gitDir);
1047
- if (!existsSync2(configPath)) return void 0;
1048
- let inOrigin = false;
1049
- for (const rawLine of readFileSync2(configPath, "utf-8").split("\n")) {
1050
- const line = rawLine.trim();
1051
- if (SECTION_HEADER.test(line)) {
1052
- inOrigin = ORIGIN_SECTION.test(line);
1053
- continue;
1054
- }
1055
- if (!inOrigin) continue;
1056
- const url = URL_LINE.exec(line);
1057
- if (url) return url[1]?.trim();
1058
- }
1059
- } catch {
1060
- }
1061
- return void 0;
1062
- };
1063
- var deriveRepoKey = (cwd) => {
1064
- const dir = cwd && cwd.length > 0 ? cwd : process.cwd();
1065
- try {
1066
- const gitDir = findGitDir(dir);
1067
- if (gitDir) {
1068
- const remote = readOriginRemote(gitDir);
1069
- const normalized = remote ? normalizeRepoRemote(remote) : void 0;
1070
- if (normalized) return normalized;
1071
- const root = gitDir.endsWith(".git") ? dirname(gitDir) : dir;
1072
- return localRepoKey(basename2(root));
1073
- }
1074
- return localRepoKey(basename2(resolve2(dir)));
1075
- } catch {
1076
- return void 0;
1077
- }
1078
- };
1079
- var repoKeyCache = /* @__PURE__ */ new Map();
1080
- var REPO_KEY_ENV = "PUSHARY_REPO_KEY";
1081
- var repoKeyFor = (cwd) => {
1082
- const override = process.env[REPO_KEY_ENV];
1083
- if (typeof override === "string") {
1084
- const trimmed = override.trim();
1085
- if (trimmed.toLowerCase() === "off") return void 0;
1086
- if (trimmed.length > 0) return trimmed.toLowerCase();
1087
- }
1088
- const dir = cwd && cwd.length > 0 ? cwd : process.cwd();
1089
- if (repoKeyCache.has(dir)) return repoKeyCache.get(dir);
1090
- const derived = deriveRepoKey(dir);
1091
- repoKeyCache.set(dir, derived);
1092
- return derived;
1093
- };
1094
-
1095
1010
  // src/policy.ts
1096
1011
  import { createHash as createHash2 } from "crypto";
1097
- import { existsSync as existsSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
1098
- import { join as join3 } from "path";
1012
+ import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
1013
+ import { join as join2 } from "path";
1099
1014
  import { tmpdir as tmpdir2 } from "os";
1100
1015
  var CACHE_TTL_MS = 60 * 1e3;
1101
1016
  var STALE_CACHE_MAX_MS = 12 * 60 * 60 * 1e3;
@@ -1106,7 +1021,7 @@ var policyRequestFor = (agentType) => ({
1106
1021
  var policyCacheFile = (apiKey, agent, repoAware = false) => {
1107
1022
  const parts = [apiKey, agent, repoAware ? "repoAware" : void 0, "sessionToolAware"].filter(Boolean);
1108
1023
  const hash = createHash2("sha256").update(parts.join(":")).digest("hex").slice(0, 12);
1109
- return join3(tmpdir2(), `pushary-policy-${hash}.json`);
1024
+ return join2(tmpdir2(), `pushary-policy-${hash}.json`);
1110
1025
  };
1111
1026
  var fetchPolicy = async (apiKey, agent, repoAware = false, sessionId) => {
1112
1027
  return withRetry(async () => {
@@ -1134,9 +1049,9 @@ var fetchPolicy = async (apiKey, agent, repoAware = false, sessionId) => {
1134
1049
  var getPolicy = async (apiKey, expectedVersion, agent, repoAware = false, sessionId) => {
1135
1050
  const path = policyCacheFile(apiKey, agent, repoAware);
1136
1051
  let staleCache = null;
1137
- if (existsSync3(path)) {
1052
+ if (existsSync2(path)) {
1138
1053
  try {
1139
- const stat = readFileSync3(path, "utf-8");
1054
+ const stat = readFileSync2(path, "utf-8");
1140
1055
  const cached = JSON.parse(stat);
1141
1056
  if (!isPolicyConfig(cached)) throw new Error("Corrupted cache");
1142
1057
  const versionStale = expectedVersion != null && (cached._policyVersion ?? null) !== expectedVersion;
@@ -1165,13 +1080,13 @@ var getPolicy = async (apiKey, expectedVersion, agent, repoAware = false, sessio
1165
1080
  var MODE_GRACE_MS = 60 * 1e3;
1166
1081
  var modeStateCacheFile = (apiKey) => {
1167
1082
  const hash = createHash2("sha256").update(`mode:${apiKey}`).digest("hex").slice(0, 12);
1168
- return join3(tmpdir2(), `pushary-mode-${hash}.json`);
1083
+ return join2(tmpdir2(), `pushary-mode-${hash}.json`);
1169
1084
  };
1170
1085
  var readLastGoodMode = (apiKey) => {
1171
1086
  try {
1172
1087
  const path = modeStateCacheFile(apiKey);
1173
- if (!existsSync3(path)) return null;
1174
- const parsed = JSON.parse(readFileSync3(path, "utf-8"));
1088
+ if (!existsSync2(path)) return null;
1089
+ const parsed = JSON.parse(readFileSync2(path, "utf-8"));
1175
1090
  if (!parsed || typeof parsed.at !== "number" || !parsed.state) return null;
1176
1091
  return parsed;
1177
1092
  } catch {
@@ -1236,9 +1151,9 @@ var fetchModeState = async (apiKey, sessionId, reuseWithinMs = 0, signal) => {
1236
1151
  var fetchModeOverride = async (apiKey) => (await fetchModeState(apiKey)).mode;
1237
1152
 
1238
1153
  // src/usage.ts
1239
- import { closeSync, mkdirSync as mkdirSync2, openSync, readFileSync as readFileSync4, readSync, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
1154
+ import { closeSync, mkdirSync as mkdirSync2, openSync, readFileSync as readFileSync3, readSync, statSync as statSync2, writeFileSync as writeFileSync3 } from "fs";
1240
1155
  import { createHash as createHash3 } from "crypto";
1241
- import { join as join4 } from "path";
1156
+ import { join as join3 } from "path";
1242
1157
  import { tmpdir as tmpdir3 } from "os";
1243
1158
  var READ_CHUNK_BYTES = 1024 * 1024;
1244
1159
  var priceTable = () => {
@@ -1252,12 +1167,12 @@ var priceTable = () => {
1252
1167
  return DEFAULT_MODEL_PRICES;
1253
1168
  };
1254
1169
  var estimateCostUsd = (usage, model) => estimateMessageCostUsd(usage, model, priceTable());
1255
- var stateDir = () => process.env.PUSHARY_USAGE_DIR?.trim() || join4(tmpdir3(), "pushary-usage");
1256
- var stateFile = (sessionId) => join4(stateDir(), sessionId.replace(/[^a-zA-Z0-9_-]/g, "_"));
1170
+ var stateDir = () => process.env.PUSHARY_USAGE_DIR?.trim() || join3(tmpdir3(), "pushary-usage");
1171
+ var stateFile = (sessionId) => join3(stateDir(), sessionId.replace(/[^a-zA-Z0-9_-]/g, "_"));
1257
1172
  var emptyState = () => ({ offset: 0, tokensIn: 0, tokensOut: 0, costUsd: 0, recentIds: [] });
1258
1173
  var readState = (path) => {
1259
1174
  try {
1260
- const parsed = JSON.parse(readFileSync4(path, "utf-8"));
1175
+ const parsed = JSON.parse(readFileSync3(path, "utf-8"));
1261
1176
  if (typeof parsed.offset === "number" && parsed.offset >= 0 && typeof parsed.tokensIn === "number" && typeof parsed.tokensOut === "number" && typeof parsed.costUsd === "number" && Array.isArray(parsed.recentIds)) {
1262
1177
  return {
1263
1178
  offset: parsed.offset,
@@ -1313,7 +1228,7 @@ var extractUserText = (content) => {
1313
1228
  };
1314
1229
  var readLastUserPrompt = (transcriptPath) => {
1315
1230
  try {
1316
- const size = statSync3(transcriptPath).size;
1231
+ const size = statSync2(transcriptPath).size;
1317
1232
  const start = Math.max(0, size - USER_PROMPT_TAIL_BYTES);
1318
1233
  const lines = readRange(transcriptPath, start, size).toString("utf-8").split("\n");
1319
1234
  for (let i = lines.length - 1; i >= 0; i -= 1) {
@@ -1336,7 +1251,7 @@ var readLastUserPrompt = (transcriptPath) => {
1336
1251
  };
1337
1252
  var readNewUsage = (transcriptPath, sessionId) => {
1338
1253
  try {
1339
- const file = statSync3(transcriptPath);
1254
+ const file = statSync2(transcriptPath);
1340
1255
  const size = file.size;
1341
1256
  const path = stateFile(sessionId);
1342
1257
  let state = readState(path);
@@ -1381,7 +1296,7 @@ var readNewUsage = (transcriptPath, sessionId) => {
1381
1296
  };
1382
1297
 
1383
1298
  // src/codex-adapter.ts
1384
- import { resolve as resolve3 } from "path";
1299
+ import { resolve as resolve2 } from "path";
1385
1300
  var CODEX_AGENT = { type: "codex", label: "Codex" };
1386
1301
  var codexAllow = () => ({ kind: "allow" });
1387
1302
  var codexDeny = (reason) => ({ kind: "deny", reason });
@@ -1410,7 +1325,7 @@ var toPolicyLookup = (toolName, toolInput, cwd) => {
1410
1325
  const command = toolInput.command;
1411
1326
  const files = parseApplyPatchFiles(command);
1412
1327
  if (files.length === 1) {
1413
- return { tool: "Edit", input: { file_path: cwd ? resolve3(cwd, files[0]) : files[0] } };
1328
+ return { tool: "Edit", input: { file_path: cwd ? resolve2(cwd, files[0]) : files[0] } };
1414
1329
  }
1415
1330
  return { tool: "Edit", input: typeof command === "string" ? { file_path: command } : {} };
1416
1331
  };
@@ -1426,7 +1341,7 @@ var toPolicyLookups = (toolName, toolInput, cwd) => {
1426
1341
  }
1427
1342
  return {
1428
1343
  tool: "Edit",
1429
- inputs: files.map((file) => ({ file_path: cwd ? resolve3(cwd, file) : file }))
1344
+ inputs: files.map((file) => ({ file_path: cwd ? resolve2(cwd, file) : file }))
1430
1345
  };
1431
1346
  };
1432
1347
  var permissionTimeoutDecision = (timeoutAction, paused) => {
@@ -1437,9 +1352,9 @@ var permissionTimeoutDecision = (timeoutAction, paused) => {
1437
1352
 
1438
1353
  // src/codex-call-decision.ts
1439
1354
  import { createHash as createHash4 } from "crypto";
1440
- import { existsSync as existsSync4, mkdirSync as mkdirSync3, readFileSync as readFileSync5, readdirSync as readdirSync2, rmSync as rmSync2, statSync as statSync4, writeFileSync as writeFileSync4 } from "fs";
1355
+ import { existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync4, readdirSync as readdirSync2, rmSync as rmSync2, statSync as statSync3, writeFileSync as writeFileSync4 } from "fs";
1441
1356
  import { tmpdir as tmpdir4, userInfo } from "os";
1442
- import { join as join5 } from "path";
1357
+ import { join as join4 } from "path";
1443
1358
  var CODEX_DECISION_TTL_MS = 60 * 1e3;
1444
1359
  var userScope = () => {
1445
1360
  try {
@@ -1450,8 +1365,8 @@ var userScope = () => {
1450
1365
  return "default";
1451
1366
  }
1452
1367
  };
1453
- var decisionDir = () => join5(tmpdir4(), `pushary-codex-decisions-${userScope()}`);
1454
- var decisionFile = (key) => join5(decisionDir(), key);
1368
+ var decisionDir = () => join4(tmpdir4(), `pushary-codex-decisions-${userScope()}`);
1369
+ var decisionFile = (key) => join4(decisionDir(), key);
1455
1370
  var PRESENTATION_ONLY_INPUT_KEYS = ["description"];
1456
1371
  var identifyingToolInput = (toolInput) => {
1457
1372
  if (!toolInput) return {};
@@ -1490,9 +1405,9 @@ var parseDecision = (raw) => {
1490
1405
  var sweepExpired = (dir, nowMs) => {
1491
1406
  try {
1492
1407
  for (const name of readdirSync2(dir)) {
1493
- const path = join5(dir, name);
1408
+ const path = join4(dir, name);
1494
1409
  try {
1495
- if (nowMs - statSync4(path).mtimeMs >= CODEX_DECISION_TTL_MS) rmSync2(path, { force: true });
1410
+ if (nowMs - statSync3(path).mtimeMs >= CODEX_DECISION_TTL_MS) rmSync2(path, { force: true });
1496
1411
  } catch {
1497
1412
  continue;
1498
1413
  }
@@ -1505,7 +1420,7 @@ var recordCodexCallDecision = (key, decision) => {
1505
1420
  if (!key) return;
1506
1421
  try {
1507
1422
  const dir = decisionDir();
1508
- if (!existsSync4(dir)) mkdirSync3(dir, { recursive: true, mode: 448 });
1423
+ if (!existsSync3(dir)) mkdirSync3(dir, { recursive: true, mode: 448 });
1509
1424
  else sweepExpired(dir, Date.now());
1510
1425
  writeFileSync4(decisionFile(key), JSON.stringify(decision), { encoding: "utf-8", mode: 384 });
1511
1426
  } catch {
@@ -1516,8 +1431,8 @@ var consumeCodexCallDecision = (key) => {
1516
1431
  if (!key) return null;
1517
1432
  const path = decisionFile(key);
1518
1433
  try {
1519
- const fresh = Date.now() - statSync4(path).mtimeMs < CODEX_DECISION_TTL_MS;
1520
- const raw = readFileSync5(path, "utf-8");
1434
+ const fresh = Date.now() - statSync3(path).mtimeMs < CODEX_DECISION_TTL_MS;
1435
+ const raw = readFileSync4(path, "utf-8");
1521
1436
  rmSync2(path, { force: true });
1522
1437
  return fresh ? parseDecision(raw) : null;
1523
1438
  } catch {
@@ -1535,16 +1450,16 @@ var phoneDrivenEnv = (base) => ({
1535
1450
  });
1536
1451
 
1537
1452
  // src/throttle.ts
1538
- import { join as join6 } from "path";
1453
+ import { join as join5 } from "path";
1539
1454
  import { tmpdir as tmpdir5 } from "os";
1540
1455
  import { createHash as createHash5 } from "crypto";
1541
- import { existsSync as existsSync5, mkdirSync as mkdirSync4, statSync as statSync5, writeFileSync as writeFileSync5, rmSync as rmSync3 } from "fs";
1542
- var THROTTLE_DIR = join6(tmpdir5(), "pushary-throttle");
1543
- var markerPath = (key) => join6(THROTTLE_DIR, createHash5("sha256").update(key).digest("hex").slice(0, 16));
1456
+ import { existsSync as existsSync4, mkdirSync as mkdirSync4, statSync as statSync4, writeFileSync as writeFileSync5, rmSync as rmSync3 } from "fs";
1457
+ var THROTTLE_DIR = join5(tmpdir5(), "pushary-throttle");
1458
+ var markerPath = (key) => join5(THROTTLE_DIR, createHash5("sha256").update(key).digest("hex").slice(0, 16));
1544
1459
  var claimThrottle = (key, windowMs) => {
1545
1460
  try {
1546
1461
  const path = markerPath(key);
1547
- if (existsSync5(path) && Date.now() - statSync5(path).mtimeMs < windowMs) return "throttled";
1462
+ if (existsSync4(path) && Date.now() - statSync4(path).mtimeMs < windowMs) return "throttled";
1548
1463
  mkdirSync4(THROTTLE_DIR, { recursive: true });
1549
1464
  writeFileSync5(path, "", "utf-8");
1550
1465
  return "passed";
@@ -1558,9 +1473,9 @@ var releaseThrottle = (key) => {
1558
1473
 
1559
1474
  // src/blocked-action-hint.ts
1560
1475
  import { createHash as createHash6 } from "crypto";
1561
- import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync6, readdirSync as readdirSync3, rmSync as rmSync4, statSync as statSync6, utimesSync } from "fs";
1476
+ import { existsSync as existsSync5, mkdirSync as mkdirSync5, readFileSync as readFileSync5, readdirSync as readdirSync3, rmSync as rmSync4, statSync as statSync5, utimesSync } from "fs";
1562
1477
  import { tmpdir as tmpdir6 } from "os";
1563
- import { join as join7 } from "path";
1478
+ import { join as join6 } from "path";
1564
1479
  var BLOCKED_ACTION_HINT_TTL_MS = BLOCKED_ACTION_GRANT_TTL_SECONDS * 1e3;
1565
1480
  var FINGERPRINT = /^[0-9a-f]{64}$/;
1566
1481
  var isFingerprint = (value) => typeof value === "string" && FINGERPRINT.test(value);
@@ -1577,15 +1492,15 @@ var blockedActionFingerprint = ({ source = "claude", sessionId, toolName, toolIn
1577
1492
  const subject = blockedActionSubject(source, sessionId, canonical.toolName, canonicalInput, cwd);
1578
1493
  return subject ? createHash6("sha256").update(blockedActionIdentity(subject), "utf8").digest("hex") : null;
1579
1494
  };
1580
- var hintDir = () => join7(tmpdir6(), `pushary-blocked-action-hints-${userScope()}`);
1581
- var hintFile = (fingerprint) => join7(hintDir(), fingerprint);
1495
+ var hintDir = () => join6(tmpdir6(), `pushary-blocked-action-hints-${userScope()}`);
1496
+ var hintFile = (fingerprint) => join6(hintDir(), fingerprint);
1582
1497
  var isExpired = (mtimeMs, nowMs) => nowMs - mtimeMs >= BLOCKED_ACTION_HINT_TTL_MS;
1583
1498
  var sweepExpired2 = (dir, nowMs) => {
1584
1499
  try {
1585
1500
  for (const name of readdirSync3(dir)) {
1586
- const path = join7(dir, name);
1501
+ const path = join6(dir, name);
1587
1502
  try {
1588
- if (isExpired(statSync6(path).mtimeMs, nowMs)) rmSync4(path, { force: true });
1503
+ if (isExpired(statSync5(path).mtimeMs, nowMs)) rmSync4(path, { force: true });
1589
1504
  } catch {
1590
1505
  continue;
1591
1506
  }
@@ -1598,7 +1513,7 @@ var recordBlockedActionHint = (fingerprint, approved) => {
1598
1513
  if (!isFingerprint(fingerprint)) return false;
1599
1514
  try {
1600
1515
  const dir = hintDir();
1601
- if (!existsSync6(dir)) mkdirSync5(dir, { recursive: true, mode: 448 });
1516
+ if (!existsSync5(dir)) mkdirSync5(dir, { recursive: true, mode: 448 });
1602
1517
  else sweepExpired2(dir, Date.now());
1603
1518
  writeFileAtomic(hintFile(fingerprint), JSON.stringify({ fingerprint, ...approved }), 384);
1604
1519
  return true;
@@ -1609,13 +1524,13 @@ var recordBlockedActionHint = (fingerprint, approved) => {
1609
1524
  var readLiveHint = (fingerprint) => {
1610
1525
  const path = hintFile(fingerprint);
1611
1526
  try {
1612
- const stat = statSync6(path);
1527
+ const stat = statSync5(path);
1613
1528
  if (!stat.isFile()) return null;
1614
1529
  if (isExpired(stat.mtimeMs, Date.now())) {
1615
1530
  rmSync4(path, { force: true });
1616
1531
  return null;
1617
1532
  }
1618
- const parsed = JSON.parse(readFileSync6(path, "utf-8"));
1533
+ const parsed = JSON.parse(readFileSync5(path, "utf-8"));
1619
1534
  return parsed?.fingerprint === fingerprint ? parsed : null;
1620
1535
  } catch {
1621
1536
  return null;
@@ -1642,7 +1557,7 @@ var approvalAwaitingRetry = (sessionId) => {
1642
1557
  var markApprovalReminded = (approval) => {
1643
1558
  const path = hintFile(approval.fingerprint);
1644
1559
  try {
1645
- const { atime, mtime } = statSync6(path);
1560
+ const { atime, mtime } = statSync5(path);
1646
1561
  const { fingerprint, sessionId, toolName } = approval;
1647
1562
  writeFileAtomic(path, JSON.stringify({ fingerprint, sessionId, toolName, reminded: true }), 384);
1648
1563
  utimesSync(path, atime, mtime);
@@ -1661,12 +1576,12 @@ var forgetBlockedActionHint = (fingerprint) => {
1661
1576
 
1662
1577
  // src/background-work.ts
1663
1578
  import { createHash as createHash7 } from "crypto";
1664
- import { mkdirSync as mkdirSync6, rmSync as rmSync5, statSync as statSync7, writeFileSync as writeFileSync6 } from "fs";
1579
+ import { mkdirSync as mkdirSync6, rmSync as rmSync5, statSync as statSync6, writeFileSync as writeFileSync6 } from "fs";
1665
1580
  import { tmpdir as tmpdir7 } from "os";
1666
- import { join as join8 } from "path";
1581
+ import { join as join7 } from "path";
1667
1582
  var BACKGROUND_WORK_TTL_MS = 60 * 60 * 1e3;
1668
- var backgroundWorkDir = () => join8(tmpdir7(), "pushary-background-work");
1669
- var markerFor = (sessionKey) => join8(backgroundWorkDir(), createHash7("sha256").update(sessionKey).digest("hex"));
1583
+ var backgroundWorkDir = () => join7(tmpdir7(), "pushary-background-work");
1584
+ var markerFor = (sessionKey) => join7(backgroundWorkDir(), createHash7("sha256").update(sessionKey).digest("hex"));
1670
1585
  var hasRunningBackgroundTasks = (backgroundTasks) => Array.isArray(backgroundTasks) && backgroundTasks.length > 0;
1671
1586
  var noteBackgroundWork = (sessionKey, running) => {
1672
1587
  try {
@@ -1682,21 +1597,21 @@ var noteBackgroundWork = (sessionKey, running) => {
1682
1597
  };
1683
1598
  var isWaitingOnBackgroundWork = (sessionKey, nowMs = Date.now()) => {
1684
1599
  try {
1685
- return nowMs - statSync7(markerFor(sessionKey)).mtimeMs < BACKGROUND_WORK_TTL_MS;
1600
+ return nowMs - statSync6(markerFor(sessionKey)).mtimeMs < BACKGROUND_WORK_TTL_MS;
1686
1601
  } catch {
1687
1602
  return false;
1688
1603
  }
1689
1604
  };
1690
1605
 
1691
1606
  // src/events.ts
1692
- import { basename as basename3, join as join9 } from "path";
1693
- import { existsSync as existsSync7, mkdirSync as mkdirSync7, readFileSync as readFileSync7, statSync as statSync8, writeFileSync as writeFileSync7 } from "fs";
1607
+ import { basename as basename2, join as join8 } from "path";
1608
+ import { existsSync as existsSync6, mkdirSync as mkdirSync7, readFileSync as readFileSync6, statSync as statSync7, writeFileSync as writeFileSync7 } from "fs";
1694
1609
  import { tmpdir as tmpdir8 } from "os";
1695
- var INTENT_DIR = join9(tmpdir8(), "pushary-intent");
1610
+ var INTENT_DIR = join8(tmpdir8(), "pushary-intent");
1696
1611
  var INTENT_MAX_BYTES = 2048;
1697
1612
  var INTENT_GRACE_MS = 10 * 60 * 1e3;
1698
1613
  var sanitizeSession = (sessionId) => sessionId.replace(/[^A-Za-z0-9_-]/g, "_").slice(0, 128) || DEFAULT_SESSION;
1699
- var intentFile = (sessionId) => join9(INTENT_DIR, sanitizeSession(sessionId));
1614
+ var intentFile = (sessionId) => join8(INTENT_DIR, sanitizeSession(sessionId));
1700
1615
  var saveLastPrompt = (sessionId, prompt) => {
1701
1616
  try {
1702
1617
  const trimmed = prompt.replace(/\s+/g, " ").trim().slice(0, INTENT_MAX_BYTES);
@@ -1709,8 +1624,8 @@ var saveLastPrompt = (sessionId, prompt) => {
1709
1624
  var readLastPrompt = (sessionId) => {
1710
1625
  try {
1711
1626
  const path = intentFile(sessionId);
1712
- if (isDefaultSession(sessionId) && statSync8(path).mtimeMs < Date.now() - INTENT_GRACE_MS) return void 0;
1713
- const value = readFileSync7(path, "utf-8").trim();
1627
+ if (isDefaultSession(sessionId) && statSync7(path).mtimeMs < Date.now() - INTENT_GRACE_MS) return void 0;
1628
+ const value = readFileSync6(path, "utf-8").trim();
1714
1629
  return value.length > 0 ? value : void 0;
1715
1630
  } catch {
1716
1631
  return void 0;
@@ -1774,8 +1689,8 @@ var POLICY_CACHE_TTL_MS = 5 * 60 * 1e3;
1774
1689
  var readFreshCachedPolicy = (apiKey, agentType, sessionId) => {
1775
1690
  const request = policyRequestFor(agentType);
1776
1691
  const path = policyCacheFile(apiKey, request.agent, request.repoAware);
1777
- if (!existsSync7(path)) return null;
1778
- const cached = JSON.parse(readFileSync7(path, "utf-8"));
1692
+ if (!existsSync6(path)) return null;
1693
+ const cached = JSON.parse(readFileSync6(path, "utf-8"));
1779
1694
  if (!isPolicyConfig(cached)) return null;
1780
1695
  if ((cached._sessionId ?? null) !== (sessionId ?? null)) return null;
1781
1696
  if (!cached._cachedAt || Date.now() - cached._cachedAt >= POLICY_CACHE_TTL_MS) return null;
@@ -1979,7 +1894,7 @@ var handlePostToolUse = async (input, agent = CLAUDE_CODE_AGENT) => {
1979
1894
  const deadline = Date.now() + HOOK_BUDGET_MS;
1980
1895
  const signal = AbortSignal.timeout(HOOK_BUDGET_MS);
1981
1896
  try {
1982
- const projectName = basename3(input.cwd ?? process.cwd());
1897
+ const projectName = basename2(input.cwd ?? process.cwd());
1983
1898
  const action = describeToolCall(input.tool_name, input.tool_input, "event");
1984
1899
  const lookup = toPolicyLookup(input.tool_name, input.tool_input);
1985
1900
  const toolResult = input.tool_response ?? input.tool_result;
@@ -2046,7 +1961,7 @@ var handleUserPrompt = async (input, agent = CLAUDE_CODE_AGENT) => {
2046
1961
  const deadline = Date.now() + HOOK_BUDGET_MS;
2047
1962
  const signal = AbortSignal.timeout(HOOK_BUDGET_MS);
2048
1963
  try {
2049
- const projectName = basename3(input.cwd ?? process.cwd());
1964
+ const projectName = basename2(input.cwd ?? process.cwd());
2050
1965
  const sessionKey = input.session_id || DEFAULT_SESSION;
2051
1966
  const titlesEnabled = process.env.PUSHARY_TASK_TITLES !== "off";
2052
1967
  const taskTitle = titlesEnabled ? taskTitleFrom(input.prompt) : void 0;
@@ -2080,7 +1995,7 @@ var handleStop = async (input, agent = CLAUDE_CODE_AGENT) => {
2080
1995
  const deadline = Date.now() + HOOK_BUDGET_MS;
2081
1996
  const signal = AbortSignal.timeout(HOOK_BUDGET_MS);
2082
1997
  try {
2083
- const projectName = basename3(input.cwd ?? process.cwd());
1998
+ const projectName = basename2(input.cwd ?? process.cwd());
2084
1999
  const sessionKey = input.session_id || DEFAULT_SESSION;
2085
2000
  noteBackgroundWork(sessionKey, hasRunningBackgroundTasks(input.background_tasks));
2086
2001
  const late = await reconcilePendingQuestions(sessionKey, void 0, signal);
@@ -2112,7 +2027,7 @@ var isSubagentStop = (input) => input.hook_event_name === "SubagentStop" || type
2112
2027
  var SUBAGENT_STOP_REPORT_TIMEOUT_MS = 4e3;
2113
2028
  var handleSubagentStop = async (input, agent = CLAUDE_CODE_AGENT) => {
2114
2029
  try {
2115
- const projectName = basename3(input.cwd ?? process.cwd());
2030
+ const projectName = basename2(input.cwd ?? process.cwd());
2116
2031
  await reportEvent({
2117
2032
  event: "session_end",
2118
2033
  agentType: agent.type,
@@ -2130,7 +2045,7 @@ var isCompactionEvent = (hookEventName) => hookEventName === "PreCompact" || hoo
2130
2045
  var COMPACTION_REPORT_TIMEOUT_MS = 4e3;
2131
2046
  var handleCompaction = async (input, agent = CLAUDE_CODE_AGENT) => {
2132
2047
  try {
2133
- const projectName = basename3(input.cwd ?? process.cwd());
2048
+ const projectName = basename2(input.cwd ?? process.cwd());
2134
2049
  await reportEvent({
2135
2050
  event: "compaction",
2136
2051
  agentType: agent.type,
@@ -2143,7 +2058,7 @@ var handleCompaction = async (input, agent = CLAUDE_CODE_AGENT) => {
2143
2058
  };
2144
2059
  var handleSessionStart = async (input, agent = CLAUDE_CODE_AGENT) => {
2145
2060
  try {
2146
- const projectName = basename3(input.cwd ?? process.cwd());
2061
+ const projectName = basename2(input.cwd ?? process.cwd());
2147
2062
  const action = input.agent_id ? "Subagent started" : sessionStartAction(input.source);
2148
2063
  await reportEvent({
2149
2064
  event: "session_start",
@@ -2157,7 +2072,7 @@ var handleSessionStart = async (input, agent = CLAUDE_CODE_AGENT) => {
2157
2072
  };
2158
2073
  var handleSessionEnd = async (input, agent = CLAUDE_CODE_AGENT, options = {}) => {
2159
2074
  try {
2160
- const projectName = basename3(input.cwd ?? process.cwd());
2075
+ const projectName = basename2(input.cwd ?? process.cwd());
2161
2076
  const action = sessionEndAction(input.reason);
2162
2077
  const sessionKey = input.session_id || DEFAULT_SESSION;
2163
2078
  if (options.reconcile ?? true) {
@@ -2185,7 +2100,7 @@ var pushesNotification = (notifType, sessionKey) => NOTIFICATION_PUSH_TYPES.has(
2185
2100
  var handleNotification = async (input, agent = CLAUDE_CODE_AGENT) => {
2186
2101
  const signal = AbortSignal.timeout(HOOK_BUDGET_MS);
2187
2102
  try {
2188
- const projectName = basename3(input.cwd ?? process.cwd());
2103
+ const projectName = basename2(input.cwd ?? process.cwd());
2189
2104
  const notifType = notificationTypeOf(input) ?? "";
2190
2105
  const sessionKey = input.session_id || DEFAULT_SESSION;
2191
2106
  const teammateIdle = input.hook_event_name === "TeammateIdle";
@@ -2246,7 +2161,7 @@ var handleStopFailure = async (input, agent = CLAUDE_CODE_AGENT) => {
2246
2161
  } catch {
2247
2162
  return;
2248
2163
  }
2249
- const projectName = basename3(input.cwd ?? process.cwd());
2164
+ const projectName = basename2(input.cwd ?? process.cwd());
2250
2165
  const reason = describeStopFailure(input.error);
2251
2166
  await reportEvent({
2252
2167
  event: "turn_error",
@@ -2302,7 +2217,6 @@ export {
2302
2217
  markPendingCommandDelivered,
2303
2218
  markPendingCommandFailed,
2304
2219
  removePendingCommand,
2305
- repoKeyFor,
2306
2220
  claimThrottle,
2307
2221
  releaseThrottle,
2308
2222
  policyRequestFor,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  pusharyDir
3
- } from "./chunk-S3OWTQ6Z.js";
3
+ } from "./chunk-IOVJVGIT.js";
4
4
  import {
5
5
  readJsonSafe
6
6
  } from "./chunk-AQFEP65J.js";
7
7
  import {
8
8
  isRecord
9
- } from "./chunk-RXXKFM22.js";
9
+ } from "./chunk-K7EGWMDU.js";
10
10
 
11
11
  // src/process-ownership.ts
12
12
  import { createHash, randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  PRETOOLUSE_GATED_TOOLS
3
- } from "./chunk-RXXKFM22.js";
3
+ } from "./chunk-K7EGWMDU.js";
4
4
 
5
5
  // src/claude-tools.ts
6
6
  var POSTTOOLUSE_MIRROR_ONLY_TOOLS = ["TodoWrite", "Task", "WebFetch", "WebSearch"];
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-POFBE6ZY.js";
4
4
  import {
5
5
  autoUpdateState
6
- } from "./chunk-S3OWTQ6Z.js";
6
+ } from "./chunk-IOVJVGIT.js";
7
7
  import {
8
8
  readJsonSafe,
9
9
  writeJsonAtomic
@@ -15,7 +15,7 @@ import {
15
15
  globalUpgradeEntry,
16
16
  isAutoUpdateResult,
17
17
  ownPackageRoot
18
- } from "./chunk-RXXKFM22.js";
18
+ } from "./chunk-K7EGWMDU.js";
19
19
 
20
20
  // src/auto-update.ts
21
21
  import { spawn } from "child_process";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  announceSubscriptionRequired,
3
3
  isDeferAnswer
4
- } from "./chunk-ZJXEQV3A.js";
4
+ } from "./chunk-ECFEYB6Z.js";
5
5
  import {
6
6
  AUTO_DECISION_WINDOW_MS,
7
7
  DEFAULT_SESSION,
@@ -10,24 +10,24 @@ import {
10
10
  permissionDeniedAction,
11
11
  releaseThrottle,
12
12
  reportEvent
13
- } from "./chunk-YRE6GUFZ.js";
13
+ } from "./chunk-GZSSAY6N.js";
14
14
  import {
15
15
  askUser,
16
16
  isDecisionStopped,
17
17
  waitForQuestion
18
- } from "./chunk-4T2TGP4T.js";
18
+ } from "./chunk-CDERSTBO.js";
19
19
  import {
20
20
  SubscriptionRequiredError
21
- } from "./chunk-53KLSE2F.js";
21
+ } from "./chunk-SFQSOBLM.js";
22
22
  import {
23
23
  getMachineId
24
- } from "./chunk-W3BO56VE.js";
24
+ } from "./chunk-4A6VUVXV.js";
25
25
  import {
26
26
  machineDecisionFor,
27
27
  parseAgentQuestionAnswers,
28
28
  shouldDeferToNativeMode,
29
29
  wireVerdictFor
30
- } from "./chunk-RXXKFM22.js";
30
+ } from "./chunk-K7EGWMDU.js";
31
31
 
32
32
  // src/machine-decision-audit.ts
33
33
  import { basename } from "path";