pushary 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.
- package/CHANGELOG.md +11 -0
- package/README.md +1 -0
- package/dist/bin/pushary-bell-hook.js +26 -26
- package/dist/bin/pushary-bell.js +11 -11
- package/dist/bin/pushary-claude.js +33 -33
- package/dist/bin/pushary-clean.js +38 -38
- package/dist/bin/pushary-codex-bridge.js +22 -680
- package/dist/bin/pushary-codex-hook.js +32 -32
- package/dist/bin/pushary-codex-session.d.ts +1 -0
- package/dist/bin/pushary-codex-session.js +649 -0
- package/dist/bin/pushary-codex.js +12 -12
- package/dist/bin/pushary-connect.js +27 -27
- package/dist/bin/pushary-cowork.js +6 -6
- package/dist/bin/pushary-daemon.js +55 -55
- package/dist/bin/pushary-disconnect.js +26 -26
- package/dist/bin/pushary-doctor.js +84 -82
- package/dist/bin/pushary-elicitation-hook.js +26 -26
- package/dist/bin/pushary-gemini-bridge.js +15 -15
- package/dist/bin/pushary-gemini-hook.js +29 -29
- package/dist/bin/pushary-hook.js +32 -32
- package/dist/bin/pushary-login.js +16 -16
- package/dist/bin/pushary-logout.js +27 -27
- package/dist/bin/pushary-mcp.js +9 -9
- package/dist/bin/pushary-mode.js +14 -14
- package/dist/bin/pushary-notification-hook.js +25 -25
- package/dist/bin/pushary-opencode-hook.js +28 -28
- package/dist/bin/pushary-permission-denied-hook.js +30 -30
- package/dist/bin/pushary-permission-hook.js +29 -29
- package/dist/bin/pushary-post-hook.js +25 -25
- package/dist/bin/pushary-prompt-hook.js +25 -25
- package/dist/bin/pushary-session-end-hook.js +25 -25
- package/dist/bin/pushary-session-start-hook.js +30 -30
- package/dist/bin/pushary-setup.js +164 -112
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +34 -34
- package/dist/bin/pushary-stop-hook.js +25 -25
- package/dist/bin/pushary-stopfailure-hook.js +25 -25
- package/dist/bin/pushary-suggestions.js +14 -14
- package/dist/bin/pushary-transcript-register.js +18 -18
- package/dist/bin/pushary-transcripts.js +7 -7
- package/dist/bin/pushary-upgrade.js +41 -41
- package/dist/bin/pushary-wait.js +14 -14
- package/dist/bin/pushary.js +7 -6
- package/dist/{chunk-HC4DQXAT.js → chunk-2DORVRDB.js} +2 -2
- package/dist/{chunk-C6QBNBL4.js → chunk-2FUHSKXH.js} +7 -7
- package/dist/{chunk-45W43U2Q.js → chunk-2SXXH6JY.js} +5 -5
- package/dist/{chunk-JE6GG3OV.js → chunk-335ZDJ7R.js} +1 -1
- package/dist/{chunk-S4QT3YFG.js → chunk-3PM62C2R.js} +15 -15
- package/dist/{chunk-Y3N3SYBX.js → chunk-46F4BRUQ.js} +1 -1
- package/dist/{chunk-W3BO56VE.js → chunk-4A6VUVXV.js} +1 -1
- package/dist/{chunk-LDCRV6HG.js → chunk-57M4ERJK.js} +2 -1
- package/dist/{chunk-IMD5FN6Y.js → chunk-5DCZL3BC.js} +3 -3
- package/dist/chunk-6JPDAUFP.js +866 -0
- package/dist/{chunk-H6V5S52A.js → chunk-6TYKZ4DN.js} +3 -3
- package/dist/{chunk-VQL62ECJ.js → chunk-7SGYCU5C.js} +1 -1
- package/dist/{chunk-SATOTPXW.js → chunk-7URSJMAB.js} +1 -1
- package/dist/{chunk-PIZ65U3D.js → chunk-ASK2MSD2.js} +5 -5
- package/dist/{chunk-SCYAXV7U.js → chunk-AUOSFZJ3.js} +7 -7
- package/dist/{chunk-LOUZNXTJ.js → chunk-BT57FUMT.js} +2 -2
- package/dist/{chunk-4T2TGP4T.js → chunk-CDERSTBO.js} +94 -7
- package/dist/{chunk-LAAOHBLO.js → chunk-CFMCV6Z7.js} +2 -2
- package/dist/{chunk-ENGASUEL.js → chunk-DSGB5JLG.js} +4 -4
- package/dist/{chunk-ZJXEQV3A.js → chunk-ECFEYB6Z.js} +1 -1
- package/dist/{chunk-CIERFMQT.js → chunk-EH5ZDG6V.js} +4 -4
- package/dist/{chunk-IDVKJICN.js → chunk-EKGQEDQ4.js} +3 -11
- package/dist/{chunk-GTOBOC6M.js → chunk-EWC4P4ZL.js} +1 -1
- package/dist/{chunk-F7SZ2RCK.js → chunk-FOUK4CBO.js} +4 -4
- package/dist/{chunk-LE2YVPAT.js → chunk-GQ5KCVGK.js} +11 -11
- package/dist/{chunk-YRE6GUFZ.js → chunk-GZSSAY6N.js} +75 -161
- package/dist/{chunk-LWW7SBK3.js → chunk-H4ODQD3Y.js} +2 -2
- package/dist/{chunk-O7ADPLBF.js → chunk-HHX6IRSH.js} +1 -1
- package/dist/{chunk-H64CU2VB.js → chunk-IFT3GU7Y.js} +2 -2
- package/dist/{chunk-FPJHS6PA.js → chunk-IKYI63RF.js} +6 -6
- package/dist/{chunk-S3OWTQ6Z.js → chunk-IOVJVGIT.js} +12 -5
- package/dist/{chunk-RXXKFM22.js → chunk-K7EGWMDU.js} +370 -138
- package/dist/{chunk-AVT7GPOF.js → chunk-KS7NA5CK.js} +10 -10
- package/dist/{chunk-A64UCGX3.js → chunk-N2K3BSCA.js} +5 -5
- package/dist/{chunk-ZORCUL3Z.js → chunk-NJN5NRHZ.js} +4 -4
- package/dist/{chunk-Q7CUTGT4.js → chunk-OHFC3GJY.js} +1 -1
- package/dist/{chunk-JW4S4O4W.js → chunk-P2F3JUFX.js} +4 -4
- package/dist/{chunk-C54VJJ37.js → chunk-PWUIPQ2I.js} +3 -3
- package/dist/{chunk-F5ALKPNS.js → chunk-QQXP3CQA.js} +1 -1
- package/dist/{chunk-EA5NWDK7.js → chunk-R7ZQHAVL.js} +29 -0
- package/dist/{chunk-V5SUKRRI.js → chunk-RBJWPUI6.js} +4 -4
- package/dist/{chunk-J6MVBWF2.js → chunk-RFQWB5ZV.js} +1 -1
- package/dist/{chunk-NKBAEGT7.js → chunk-S6EGJBI5.js} +1 -1
- package/dist/{chunk-53KLSE2F.js → chunk-SFQSOBLM.js} +3 -3
- package/dist/{chunk-MSUMSXTI.js → chunk-SIN7NJD7.js} +1 -1
- package/dist/{chunk-55FB6OSG.js → chunk-U45OINYS.js} +1 -1
- package/dist/{chunk-TH74SUVV.js → chunk-U6Z56IQS.js} +2 -2
- package/dist/{chunk-JJWG7CBT.js → chunk-VO6XI6AX.js} +3 -3
- package/dist/{chunk-VIVLJK3T.js → chunk-WDIX4XZH.js} +2 -2
- package/dist/{chunk-Y4VZYKSW.js → chunk-WM76AN4X.js} +11 -11
- package/dist/{chunk-NV2LARV4.js → chunk-WPPKXVV3.js} +2 -2
- package/dist/{chunk-VGPEXMYM.js → chunk-XFHISCJM.js} +42 -7
- package/dist/{chunk-C3RVRTHS.js → chunk-YK7FGPYS.js} +3 -3
- package/dist/{chunk-JB4JCGRW.js → chunk-YWIFK2UB.js} +2 -2
- package/dist/{chunk-O4SYJVAF.js → chunk-YXGWG5PO.js} +5 -5
- package/dist/{chunk-XLHFWG2E.js → chunk-ZSY6BWUD.js} +2 -2
- package/dist/{global-upgrade-FFWOHOJ4.js → global-upgrade-U6NWZA5W.js} +6 -6
- package/dist/{paths-Y2WPCM5Y.js → paths-IQTB3ZZI.js} +2 -2
- package/dist/{reapply-N3MV3CKD.js → reapply-LILGWJO3.js} +21 -21
- package/dist/src/index.js +19 -19
- package/dist/{upgrade-lock-ZXXNRH2P.js → upgrade-lock-2BVFIDU4.js} +3 -3
- 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-
|
|
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-
|
|
17
|
+
} from "./chunk-CDERSTBO.js";
|
|
14
18
|
import {
|
|
15
19
|
withRetry
|
|
16
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-SFQSOBLM.js";
|
|
17
21
|
import {
|
|
18
22
|
getMachineId
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import {
|
|
21
|
-
reportedInstallSource
|
|
22
|
-
} from "./chunk-LAAOHBLO.js";
|
|
23
|
+
} from "./chunk-4A6VUVXV.js";
|
|
23
24
|
import {
|
|
24
25
|
canonicalJson
|
|
25
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
1098
|
-
import { join as
|
|
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
|
|
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 (
|
|
1052
|
+
if (existsSync2(path)) {
|
|
1138
1053
|
try {
|
|
1139
|
-
const stat =
|
|
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
|
|
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 (!
|
|
1174
|
-
const parsed = JSON.parse(
|
|
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
|
|
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
|
|
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() ||
|
|
1256
|
-
var stateFile = (sessionId) =>
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
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 ?
|
|
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 ?
|
|
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
|
|
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
|
|
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 = () =>
|
|
1454
|
-
var decisionFile = (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 =
|
|
1408
|
+
const path = join4(dir, name);
|
|
1494
1409
|
try {
|
|
1495
|
-
if (nowMs -
|
|
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 (!
|
|
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() -
|
|
1520
|
-
const raw =
|
|
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
|
|
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
|
|
1542
|
-
var THROTTLE_DIR =
|
|
1543
|
-
var markerPath = (key) =>
|
|
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 (
|
|
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
|
|
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
|
|
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 = () =>
|
|
1581
|
-
var hintFile = (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 =
|
|
1501
|
+
const path = join6(dir, name);
|
|
1587
1502
|
try {
|
|
1588
|
-
if (isExpired(
|
|
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 (!
|
|
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 =
|
|
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(
|
|
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 } =
|
|
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
|
|
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
|
|
1581
|
+
import { join as join7 } from "path";
|
|
1667
1582
|
var BACKGROUND_WORK_TTL_MS = 60 * 60 * 1e3;
|
|
1668
|
-
var backgroundWorkDir = () =>
|
|
1669
|
-
var markerFor = (sessionKey) =>
|
|
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 -
|
|
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
|
|
1693
|
-
import { existsSync as
|
|
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 =
|
|
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) =>
|
|
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) &&
|
|
1713
|
-
const value =
|
|
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 (!
|
|
1778
|
-
const cached = JSON.parse(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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-
|
|
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-
|
|
9
|
+
} from "./chunk-K7EGWMDU.js";
|
|
10
10
|
|
|
11
11
|
// src/process-ownership.ts
|
|
12
12
|
import { createHash, randomUUID } from "crypto";
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-POFBE6ZY.js";
|
|
4
4
|
import {
|
|
5
5
|
autoUpdateState
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
13
|
+
} from "./chunk-GZSSAY6N.js";
|
|
14
14
|
import {
|
|
15
15
|
askUser,
|
|
16
16
|
isDecisionStopped,
|
|
17
17
|
waitForQuestion
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-CDERSTBO.js";
|
|
19
19
|
import {
|
|
20
20
|
SubscriptionRequiredError
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-SFQSOBLM.js";
|
|
22
22
|
import {
|
|
23
23
|
getMachineId
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-4A6VUVXV.js";
|
|
25
25
|
import {
|
|
26
26
|
machineDecisionFor,
|
|
27
27
|
parseAgentQuestionAnswers,
|
|
28
28
|
shouldDeferToNativeMode,
|
|
29
29
|
wireVerdictFor
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-K7EGWMDU.js";
|
|
31
31
|
|
|
32
32
|
// src/machine-decision-audit.ts
|
|
33
33
|
import { basename } from "path";
|