pushary 1.9.140 → 1.9.142
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 +22 -0
- package/dist/{api-ZV6JN5J3.js → api-JR3YAO4I.js} +11 -11
- package/dist/bin/pushary-audit.js +3 -3
- package/dist/bin/pushary-bell-hook.js +28 -28
- package/dist/bin/pushary-bell.js +10 -10
- package/dist/bin/pushary-claude.js +27 -27
- package/dist/bin/pushary-clean.js +36 -36
- package/dist/bin/pushary-codex-bridge.js +23 -23
- package/dist/bin/pushary-codex-hook.js +35 -35
- package/dist/bin/pushary-codex-session.js +9 -9
- package/dist/bin/pushary-codex.js +16 -16
- package/dist/bin/pushary-connect.js +29 -29
- package/dist/bin/pushary-cowork.js +5 -5
- package/dist/bin/pushary-daemon.js +52 -65
- package/dist/bin/pushary-disconnect.js +28 -28
- package/dist/bin/pushary-display-hook.js +8 -1
- package/dist/bin/pushary-doctor.js +43 -43
- package/dist/bin/pushary-elicitation-hook.js +28 -28
- package/dist/bin/pushary-gemini-bridge.js +17 -17
- package/dist/bin/pushary-gemini-hook.js +32 -32
- package/dist/bin/pushary-hook.js +35 -35
- package/dist/bin/pushary-login.js +21 -21
- package/dist/bin/pushary-logout.js +27 -27
- package/dist/bin/pushary-mcp.js +12 -12
- package/dist/bin/pushary-mode.js +15 -15
- package/dist/bin/pushary-notification-hook.js +27 -27
- package/dist/bin/pushary-opencode-hook.js +31 -31
- package/dist/bin/pushary-permission-denied-hook.js +35 -35
- package/dist/bin/pushary-permission-hook.js +35 -35
- package/dist/bin/pushary-post-hook.js +28 -28
- package/dist/bin/pushary-prompt-hook.js +27 -27
- package/dist/bin/pushary-session-end-hook.js +27 -27
- package/dist/bin/pushary-session-start-hook.js +36 -36
- package/dist/bin/pushary-setup.js +51 -51
- package/dist/bin/pushary-stats.js +5 -5
- package/dist/bin/pushary-status.js +33 -33
- package/dist/bin/pushary-stop-hook.js +27 -27
- package/dist/bin/pushary-stopfailure-hook.js +27 -27
- package/dist/bin/pushary-suggestions.js +15 -15
- package/dist/bin/pushary-transcript-register.js +17 -17
- package/dist/bin/pushary-transcripts.js +25 -25
- package/dist/bin/pushary-upgrade.js +41 -41
- package/dist/bin/pushary-wait.js +15 -15
- package/dist/bin/pushary.js +7 -7
- package/dist/{chunk-7OBROSQL.js → chunk-22CXL7YI.js} +3 -3
- package/dist/{chunk-T5GZUMBP.js → chunk-34JVH6VP.js} +5 -5
- package/dist/{chunk-UGU566AU.js → chunk-3KW7WC4L.js} +6 -6
- package/dist/{chunk-SQB57AJR.js → chunk-3VOUWGFF.js} +4 -4
- package/dist/{chunk-Y7LBB6YM.js → chunk-4EBJ4PTZ.js} +1 -1
- package/dist/{chunk-MTVAACOE.js → chunk-4JTZZXB3.js} +3 -3
- package/dist/{chunk-7LBMCU3S.js → chunk-4KVGNCMN.js} +4 -4
- package/dist/{chunk-3FJO3HIA.js → chunk-4OX4SJGA.js} +3 -3
- package/dist/{chunk-LURIPMCB.js → chunk-4YH326C5.js} +6 -6
- package/dist/{chunk-L7BWJD25.js → chunk-4Z7YVVKQ.js} +1 -1
- package/dist/{chunk-7W4XA2WF.js → chunk-53KLGXFL.js} +1 -1
- package/dist/{chunk-MFRNEOCN.js → chunk-5GE7PKK4.js} +11 -11
- package/dist/{chunk-B4KAY45V.js → chunk-5N6Q5XGF.js} +16 -12
- package/dist/{chunk-SANGITZF.js → chunk-5TZYAMGW.js} +1 -1
- package/dist/{chunk-AQVXXXFZ.js → chunk-6JLANX5L.js} +4 -4
- package/dist/{chunk-FSDTFT7J.js → chunk-76N6DCSP.js} +2 -2
- package/dist/{chunk-UHB7G2XC.js → chunk-77ZUOR3U.js} +5 -5
- package/dist/{chunk-7DPPMWTR.js → chunk-7K3KDCOX.js} +3 -3
- package/dist/{chunk-7WLNPGEY.js → chunk-7PJLQRRM.js} +4 -4
- package/dist/{chunk-6WBHYQ2P.js → chunk-7QWH257P.js} +1 -1
- package/dist/{chunk-YB7V6V6O.js → chunk-7VMVMC4H.js} +1 -1
- package/dist/{chunk-E4MC6B6U.js → chunk-A3DVD55C.js} +4 -4
- package/dist/{chunk-5TPC3M45.js → chunk-B4VIT5N3.js} +1 -1
- package/dist/{chunk-RACM64B6.js → chunk-BHKODM4L.js} +2 -2
- package/dist/{chunk-QCIZDJSU.js → chunk-C5LIS3XM.js} +477 -28
- package/dist/{chunk-6Z7VJ65F.js → chunk-CZCLJXUA.js} +5 -5
- package/dist/{chunk-BMBWFLIT.js → chunk-DDJHPMBJ.js} +1 -1
- package/dist/{chunk-HNN46FYL.js → chunk-DV4ZWKI6.js} +4 -4
- package/dist/{chunk-4SMS5DND.js → chunk-DZLLKJJT.js} +3 -3
- package/dist/{chunk-O55PACNP.js → chunk-EECOWW5X.js} +4 -4
- package/dist/{chunk-MDRNNK3L.js → chunk-EMODTMHE.js} +1 -1
- package/dist/{chunk-OZY4EU6V.js → chunk-FFAVOHI5.js} +8 -8
- package/dist/{chunk-HJFTPNP6.js → chunk-FS47XZCE.js} +2 -2
- package/dist/{chunk-GUVTHNCX.js → chunk-G562FBHB.js} +5 -5
- package/dist/{chunk-UH25VEQI.js → chunk-H33CFJOF.js} +4 -4
- package/dist/{chunk-RQPVEBKR.js → chunk-HIIXYZYV.js} +3 -3
- package/dist/{chunk-QDQHIQWH.js → chunk-HLWS6ADK.js} +2 -2
- package/dist/{chunk-2MELVDYD.js → chunk-I6HXZIER.js} +2 -2
- package/dist/{chunk-IJMWFHZZ.js → chunk-IG7NGXBS.js} +2 -2
- package/dist/{chunk-N346VCKX.js → chunk-KP6FVUCC.js} +3 -3
- package/dist/{chunk-H2EXF6DB.js → chunk-KRSZFHNS.js} +3 -3
- package/dist/{chunk-S6LB3SZE.js → chunk-KY6AHZ2P.js} +12 -12
- package/dist/{chunk-TA3YQY6I.js → chunk-LS6BU5RM.js} +1 -1
- package/dist/{chunk-7TXUHOQW.js → chunk-LTPKSJWY.js} +10 -10
- package/dist/{chunk-4IAFTTNQ.js → chunk-LUVSHGLH.js} +1 -1
- package/dist/{chunk-V5VSSRV6.js → chunk-MDIBO7U7.js} +6 -6
- package/dist/{chunk-MEFTOIUI.js → chunk-MH5BRZOQ.js} +1 -1
- package/dist/{chunk-3HORJAQX.js → chunk-MOYEHNFP.js} +2 -2
- package/dist/{chunk-TJX25WUQ.js → chunk-NOTW7GOC.js} +2 -2
- package/dist/{chunk-E67Y7DSA.js → chunk-NQF652IG.js} +2 -2
- package/dist/{chunk-IEHY7DCR.js → chunk-P5QXH5QI.js} +1 -1
- package/dist/{chunk-O66URN57.js → chunk-POXASZR6.js} +3 -3
- package/dist/{chunk-TRCJWAZD.js → chunk-PYSDCPZ3.js} +6 -6
- package/dist/{chunk-S7DTAH7Q.js → chunk-QESEICW4.js} +1 -1
- package/dist/{chunk-AXAO3JF5.js → chunk-QFZNPZRO.js} +3 -3
- package/dist/{chunk-D7AJ3ZCI.js → chunk-QLGLUUOP.js} +1 -1
- package/dist/{chunk-PHZYLAHL.js → chunk-QQHUUPPW.js} +2 -2
- package/dist/{chunk-YD3PTYOT.js → chunk-R27HXRSK.js} +3 -3
- package/dist/{chunk-MGBYRHT3.js → chunk-R7FSMUHG.js} +1 -1
- package/dist/{chunk-NBJ7N7KL.js → chunk-SMF4TBPU.js} +5 -5
- package/dist/{chunk-4YIVV4PY.js → chunk-TKFNIDZK.js} +2 -2
- package/dist/{chunk-LW7TXMCP.js → chunk-TKYGEPBH.js} +1 -1
- package/dist/{chunk-QAT2PWRX.js → chunk-TPQDOZGK.js} +16 -16
- package/dist/{chunk-SSAGWDBN.js → chunk-TYQITMXN.js} +3 -3
- package/dist/{chunk-E46NE7FB.js → chunk-U4P4NDVB.js} +2 -0
- package/dist/{chunk-JYOC6N7C.js → chunk-UIZE4YMU.js} +2 -2
- package/dist/{chunk-XJ6CRGD2.js → chunk-UPI4IIX3.js} +4 -4
- package/dist/{chunk-LAAGGP7K.js → chunk-XIU5ER6S.js} +5 -5
- package/dist/{chunk-3TQ4NPFC.js → chunk-XWYCFODT.js} +3 -3
- package/dist/{chunk-6LK6I62M.js → chunk-YCU7Y77H.js} +1 -1
- package/dist/{chunk-YIIGX653.js → chunk-Z5OFTJGZ.js} +5 -5
- package/dist/{chunk-RVKCG7DK.js → chunk-ZF4CPOO7.js} +6 -6
- package/dist/{chunk-JHRJ3KKG.js → chunk-ZGYVUZEZ.js} +5 -5
- package/dist/{chunk-BAT4TJOE.js → chunk-ZJHZICA4.js} +8 -8
- package/dist/{chunk-ULRZGJSL.js → chunk-ZKKZEVNI.js} +2 -2
- package/dist/{chunk-7AXEKUXY.js → chunk-ZVJIJPQY.js} +1 -1
- package/dist/{codex-app-cards-switch-YW4R5WTG.js → codex-app-cards-switch-FAWUGM7P.js} +12 -12
- package/dist/{codex-card-routing-5EHXCS7Y.js → codex-card-routing-I6YOJBTT.js} +2 -2
- package/dist/{codex-desktop-launch-VEPL7OFZ.js → codex-desktop-launch-WPN7UNS7.js} +2 -2
- package/dist/{codex-session-launch-7UKI32XL.js → codex-session-launch-YPPBWBBH.js} +20 -20
- package/dist/{config-5YVCM3JL.js → config-2CHOLFNB.js} +3 -3
- package/dist/{global-upgrade-YNLHN2LI.js → global-upgrade-CCVIYELF.js} +9 -9
- package/dist/{identity-ZF5BYVAH.js → identity-7QA3EDOM.js} +4 -4
- package/dist/{live-capabilities-UDAEQC25.js → live-capabilities-SDMX6CPZ.js} +4 -4
- package/dist/{paths-5CUJRNH3.js → paths-ZC6XY73Q.js} +3 -3
- package/dist/{reapply-EHYJUX67.js → reapply-4PUJZT73.js} +29 -29
- package/dist/src/index.js +34 -34
- package/dist/{upgrade-lock-ONZN26ZJ.js → upgrade-lock-BRVUBSLD.js} +4 -4
- package/dist/{usage-GF3ZBAH4.js → usage-GWUTCS5A.js} +3 -3
- package/package.json +1 -1
|
@@ -1799,6 +1799,7 @@ var A_SHELL_RUNNING_A_SUBSTITUTION = new RegExp(
|
|
|
1799
1799
|
String.raw`${COMMAND_POSITION}${COMMAND_PREFIXES}(?:[^\s;&|()<>` + "`" + String.raw`]*/)?(?:sh|bash|zsh|dash|ksh|source|\.)(?:[ \t]+-[^\s<]*){0,8}[ \t]+(?:<[ \t]*)?[<=](?=\()`,
|
|
1800
1800
|
"g"
|
|
1801
1801
|
);
|
|
1802
|
+
var AN_EVAL_THAT_RUNS = new RegExp(String.raw`${COMMAND_POSITION}${COMMAND_PREFIXES}eval[ \t]+`, "g");
|
|
1802
1803
|
var CASE_HEAD = /(^|[\s;&|(])case[ \t]+(?:"[^"\n]*"|'[^'\n]*'|\S+)[ \t\n]+in(?=[\s;])/g;
|
|
1803
1804
|
var CASE_ARM_OPENING = /;[;&]{0,2}[ \t\n]*\(?[^()\s;][^()\n;]*\)[ \t\n]*/g;
|
|
1804
1805
|
var CASE_ARM_ENDING = /;;&?|;&/g;
|
|
@@ -1861,8 +1862,70 @@ var readingWithShellFormsSpelledOut = (text3) => {
|
|
|
1861
1862
|
const reading = SHELL_FORM_REWRITES.reduce((current, rewrite) => rewrite(current), text3);
|
|
1862
1863
|
return reading === text3 ? null : reading;
|
|
1863
1864
|
};
|
|
1865
|
+
var SHELLS_THAT_RUN_A_SCRIPT_ARGUMENT = /* @__PURE__ */ new Set(["sh", "bash", "zsh", "dash", "ksh"]);
|
|
1866
|
+
var SHORT_FLAGS_WITH_THE_COMMAND_FLAG = /^-[A-Za-z]*c[A-Za-z]*$/;
|
|
1867
|
+
var SHELL_LONG_OPTIONS_WITH_A_VALUE = /* @__PURE__ */ new Set(["--rcfile", "--init-file"]);
|
|
1868
|
+
var SHELL_SHORT_FLAGS_ENDING_IN_AN_OPTION_NAME = /^[-+][A-Za-z]*[oO]$/;
|
|
1869
|
+
var SHELL_OPTION_WORD = /^[-+]/;
|
|
1870
|
+
var COMMAND_SEPARATOR_INSIDE_A_WORD = /[;&|()`]/;
|
|
1864
1871
|
var DEEPEST_NESTED_SCRIPT_READ = 3;
|
|
1865
1872
|
var MOST_SCRIPTS_READ_FROM_ONE_COMMAND = 16;
|
|
1873
|
+
var programNamedBy = (word) => basenameOf(word.split(COMMAND_SEPARATOR_INSIDE_A_WORD).filter((piece) => piece !== "").pop() ?? "");
|
|
1874
|
+
var scriptArgumentOfAShellAt = (words, index) => {
|
|
1875
|
+
if (!SHELLS_THAT_RUN_A_SCRIPT_ARGUMENT.has(programNamedBy(words[index]?.text ?? ""))) return void 0;
|
|
1876
|
+
for (let next = index + 1; SHELL_OPTION_WORD.test(words[next]?.text ?? ""); next += 1) {
|
|
1877
|
+
const option = words[next]?.text ?? "";
|
|
1878
|
+
if (SHORT_FLAGS_WITH_THE_COMMAND_FLAG.test(option)) return words[next + 1]?.text;
|
|
1879
|
+
if (SHELL_LONG_OPTIONS_WITH_A_VALUE.has(option) || SHELL_SHORT_FLAGS_ENDING_IN_AN_OPTION_NAME.test(option)) next += 1;
|
|
1880
|
+
}
|
|
1881
|
+
return void 0;
|
|
1882
|
+
};
|
|
1883
|
+
var scriptsOfShellsIn = (text3) => {
|
|
1884
|
+
const words = shellWordsOf(text3);
|
|
1885
|
+
return words === null ? [] : words.flatMap((_, index) => scriptArgumentOfAShellAt(words, index) ?? []);
|
|
1886
|
+
};
|
|
1887
|
+
var endsTheCommandAsAControlOperator = (text3, index) => {
|
|
1888
|
+
const char = text3.charAt(index);
|
|
1889
|
+
const before = text3.charAt(index - 1);
|
|
1890
|
+
if (char === "|") return before !== ">";
|
|
1891
|
+
return char === "&" && before !== ">" && before !== "<" && text3.charAt(index + 1) !== ">";
|
|
1892
|
+
};
|
|
1893
|
+
var endOfTheSimpleCommandAt = (text3, from) => {
|
|
1894
|
+
let depth = 0;
|
|
1895
|
+
let quote = null;
|
|
1896
|
+
let inBackticks = false;
|
|
1897
|
+
for (let index = from; index < text3.length; index += 1) {
|
|
1898
|
+
const char = text3.charAt(index);
|
|
1899
|
+
if (quote === "'") {
|
|
1900
|
+
if (char === "'") quote = null;
|
|
1901
|
+
} else if (char === "\\") {
|
|
1902
|
+
index += 1;
|
|
1903
|
+
} else if (quote === '"') {
|
|
1904
|
+
if (char === '"') quote = null;
|
|
1905
|
+
} else if (char === "'" || char === '"') {
|
|
1906
|
+
quote = char;
|
|
1907
|
+
} else if (char === "`") {
|
|
1908
|
+
inBackticks = !inBackticks;
|
|
1909
|
+
} else if (inBackticks) {
|
|
1910
|
+
continue;
|
|
1911
|
+
} else if (char === "(") {
|
|
1912
|
+
depth += 1;
|
|
1913
|
+
} else if (char === ")" && depth > 0) {
|
|
1914
|
+
depth -= 1;
|
|
1915
|
+
} else if (depth === 0 && (char === "\n" || char === ";" || char === ")" || endsTheCommandAsAControlOperator(text3, index))) {
|
|
1916
|
+
return index;
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
return text3.length;
|
|
1920
|
+
};
|
|
1921
|
+
var scriptOfAnEvalEndingAt = (text3, end) => {
|
|
1922
|
+
const words = shellWordsOf(text3.slice(end, endOfTheSimpleCommandAt(text3, end)));
|
|
1923
|
+
if (words === null) return [];
|
|
1924
|
+
const firstComment = words.findIndex((word) => word.comment);
|
|
1925
|
+
return [(firstComment === -1 ? words : words.slice(0, firstComment)).map((word) => word.text).join(" ")];
|
|
1926
|
+
};
|
|
1927
|
+
var scriptsOfEvalsIn = (text3) => [...text3.matchAll(AN_EVAL_THAT_RUNS)].slice(0, MOST_SCRIPTS_READ_FROM_ONE_COMMAND + 1).flatMap((match) => scriptOfAnEvalEndingAt(text3, match.index + match[0].length));
|
|
1928
|
+
var scriptsWrittenForAShellOrAnEval = (text3) => [...scriptsOfEvalsIn(text3), ...scriptsOfShellsIn(text3)];
|
|
1866
1929
|
var READING_OF_SCRIPTS_TOO_MANY_TO_READ = ": | sh";
|
|
1867
1930
|
var readingsOfNestedShellScripts = (text3, scriptsDirectlyInside) => {
|
|
1868
1931
|
const readings = [];
|
|
@@ -3853,6 +3916,310 @@ var codexPermissionPaths = (profile, access) => [
|
|
|
3853
3916
|
...profile.fileSystem?.[access] ?? [],
|
|
3854
3917
|
...(profile.fileSystem?.entries ?? []).filter((entry2) => entry2.access === access).map((entry2) => entry2.path.path)
|
|
3855
3918
|
];
|
|
3919
|
+
var CODEX_PERMISSION_QUESTION_MAX_UNITS = 180;
|
|
3920
|
+
var CODEX_PERMISSION_QUESTION_WITHOUT_A_GRANT = "Allow a Codex permission request that names no network access and no file paths?";
|
|
3921
|
+
var BROAD_ROOT_LABELS = {
|
|
3922
|
+
computer: "the whole computer",
|
|
3923
|
+
drive: "the whole drive",
|
|
3924
|
+
volume: "a whole volume",
|
|
3925
|
+
share: "a network share",
|
|
3926
|
+
everyHome: "every home folder",
|
|
3927
|
+
home: "a home folder",
|
|
3928
|
+
topLevel: "a top-level folder"
|
|
3929
|
+
};
|
|
3930
|
+
var BROAD_ROOTS_IN_NAMING_ORDER = ["computer", "drive", "volume", "share", "everyHome", "home", "topLevel"];
|
|
3931
|
+
var RANK_IN_A_SENSITIVE_PLACE = BROAD_ROOTS_IN_NAMING_ORDER.length;
|
|
3932
|
+
var RANK_OUTSIDE_THE_WORKING_DIRECTORY = RANK_IN_A_SENSITIVE_PLACE + 1;
|
|
3933
|
+
var RANK_INSIDE_THE_WORKING_DIRECTORY = RANK_OUTSIDE_THE_WORKING_DIRECTORY + 1;
|
|
3934
|
+
var DRIVE_PREFIX = /^[a-z]:/i;
|
|
3935
|
+
var PATH_SEPARATOR = /[\\/]/;
|
|
3936
|
+
var TWO_SEPARATORS_THEN_A_NAME = /^[\\/]{2}[^\\/]/;
|
|
3937
|
+
var DOTS_AND_SPACES_WINDOWS_DROPS = /[. ]+$/;
|
|
3938
|
+
var PROCESS_WHOSE_ROOT_IS_LINKED = /^(?:self|thread-self|\d+)$/;
|
|
3939
|
+
var MACOS_DATA_VOLUME_FOLDERS = ["system", "volumes", "data"];
|
|
3940
|
+
var PROCESS_FOLDER = "proc";
|
|
3941
|
+
var PROCESS_ROOT_LINK = "root";
|
|
3942
|
+
var PROCESS_ROOT_FOLDERS = 3;
|
|
3943
|
+
var MOUNT_PARENT_FOLDERS = ["volumes", "mnt"];
|
|
3944
|
+
var MOUNT_FOLDERS = 2;
|
|
3945
|
+
var MACOS_PRIVATE_FOLDER = "private";
|
|
3946
|
+
var MACOS_PRIVATE_FOLDERS = 1;
|
|
3947
|
+
var FOLDERS_MACOS_KEEPS_UNDER_PRIVATE = ["etc", "var", "tmp"];
|
|
3948
|
+
var HOME_PARENT_FOLDERS = ["users", "home"];
|
|
3949
|
+
var FOLDERS_EVERY_HOME_SHARES = ["shared", "public"];
|
|
3950
|
+
var SUPERUSER_HOME_FOLDER = "root";
|
|
3951
|
+
var MACOS_SUPERUSER_HOME_PARENT = "var";
|
|
3952
|
+
var HIDDEN_ENTRY_PREFIX = ".";
|
|
3953
|
+
var HOME_APP_DATA_FOLDERS = ["library", "appdata"];
|
|
3954
|
+
var HOME_APP_DATA_FOLDERS_HOLDING_NOTHING_KEPT = ["caches", "logs"];
|
|
3955
|
+
var SYSTEM_FOLDERS_OF_A_COMPUTER = ["etc", "library", "system", "usr", "bin", "sbin", "dev", "boot", "lib", "lib64", "var", "applications", "opt", "proc", "sys"];
|
|
3956
|
+
var ENTRIES_OF_A_SYSTEM_FOLDER_HOLDING_NOTHING_KEPT = {
|
|
3957
|
+
dev: ["null", "zero", "tty", "stdin", "stdout", "stderr", "fd", "random", "urandom"],
|
|
3958
|
+
var: ["folders", "tmp", "log"]
|
|
3959
|
+
};
|
|
3960
|
+
var SYSTEM_FOLDERS_OF_A_DRIVE = ["windows", "program files", "program files (x86)", "programdata"];
|
|
3961
|
+
var SENSITIVE_PLACE_LABELS = {
|
|
3962
|
+
hiddenInAHome: "hidden in a home folder",
|
|
3963
|
+
appDataOfAHome: "app data in a home folder",
|
|
3964
|
+
system: "a system folder"
|
|
3965
|
+
};
|
|
3966
|
+
var SEPARATOR_RUN = /[\\/]{2,}/g;
|
|
3967
|
+
var NETWORK_GRANT = "use the network";
|
|
3968
|
+
var WRITABLE_LEAD = "read and write ";
|
|
3969
|
+
var READ_ONLY_LEAD = "read ";
|
|
3970
|
+
var LIST_SEPARATOR = ", ";
|
|
3971
|
+
var QUOTE_UNITS = 2;
|
|
3972
|
+
var DETAILS_NOTE = " The details list every path.";
|
|
3973
|
+
var PERMISSIONS_HEADING = "Requested permissions:";
|
|
3974
|
+
var ELISION_MARK = "\u2026";
|
|
3975
|
+
var PATH_NO_REDACTION_SETTLES = "[redacted]";
|
|
3976
|
+
var SETTLING_PASSES = 4;
|
|
3977
|
+
var NAMED_PATH_FLOOR_UNITS = 32;
|
|
3978
|
+
var ONLY_NAMED_PATH_FLOOR_UNITS = 12;
|
|
3979
|
+
var NEVER_DRAWN_OR_BLANK = /^(?:[\p{C}\p{Zl}\p{Zp}\p{Default_Ignorable_Code_Point}\u2800]|(?! )\p{Zs})$/u;
|
|
3980
|
+
var COMBINING_MARK = /^\p{M}$/u;
|
|
3981
|
+
var LETTER_OR_DIGIT = /^[\p{L}\p{N}]$/u;
|
|
3982
|
+
var DISPLAY_UNIT = /\\ud[89ab][0-9a-f]{2}\\ud[c-f][0-9a-f]{2}|\\u[0-9a-f]{4}|\\["\\]|\[redacted(?: key)?\]|[\s\S]/gu;
|
|
3983
|
+
var PATH_IN_A_QUESTION = { backslashed: '"\\', reserved: ELISION_MARK };
|
|
3984
|
+
var PROSE_IN_QUOTES = { backslashed: '"\\', reserved: "" };
|
|
3985
|
+
var TEXT_ALREADY_ESCAPED = { backslashed: "", reserved: "" };
|
|
3986
|
+
var unitEscapes = (text3) => Array.from({ length: text3.length }, (_, index) => `\\u${text3.charCodeAt(index).toString(16).padStart(4, "0")}`).join("");
|
|
3987
|
+
var withCodePointVisible = (rules) => (shown, codePoint) => {
|
|
3988
|
+
if (rules.backslashed.includes(codePoint)) return { text: `${shown.text}\\${codePoint}`, marksHaveABase: false };
|
|
3989
|
+
if (rules.reserved.includes(codePoint) || NEVER_DRAWN_OR_BLANK.test(codePoint)) return { text: `${shown.text}${unitEscapes(codePoint)}`, marksHaveABase: false };
|
|
3990
|
+
if (COMBINING_MARK.test(codePoint)) return { text: `${shown.text}${shown.marksHaveABase ? codePoint : unitEscapes(codePoint)}`, marksHaveABase: shown.marksHaveABase };
|
|
3991
|
+
return { text: `${shown.text}${codePoint}`, marksHaveABase: LETTER_OR_DIGIT.test(codePoint) };
|
|
3992
|
+
};
|
|
3993
|
+
var visibleText = (text3, rules) => Array.from(text3).reduce(withCodePointVisible(rules), { text: "", marksHaveABase: false }).text;
|
|
3994
|
+
var inQuotes = (inside) => `"${inside}"`;
|
|
3995
|
+
var leadingUnitsWithin = (displayUnits, maxUnits) => {
|
|
3996
|
+
const kept = [];
|
|
3997
|
+
let units = 0;
|
|
3998
|
+
for (const displayUnit of displayUnits) {
|
|
3999
|
+
if (units + displayUnit.length > maxUnits) break;
|
|
4000
|
+
kept.push(displayUnit);
|
|
4001
|
+
units += displayUnit.length;
|
|
4002
|
+
}
|
|
4003
|
+
return kept;
|
|
4004
|
+
};
|
|
4005
|
+
var shortenedInTheMiddle = (text3, maxUnits) => {
|
|
4006
|
+
if (text3.length <= maxUnits) return text3;
|
|
4007
|
+
const displayUnits = text3.match(DISPLAY_UNIT) ?? [];
|
|
4008
|
+
const keptUnits = maxUnits - ELISION_MARK.length;
|
|
4009
|
+
const headUnits = Math.ceil(keptUnits / 2);
|
|
4010
|
+
const head = leadingUnitsWithin(displayUnits, headUnits);
|
|
4011
|
+
const tail = [...leadingUnitsWithin([...displayUnits].reverse(), keptUnits - headUnits)].reverse();
|
|
4012
|
+
return `${head.join("")}${ELISION_MARK}${tail.join("")}`;
|
|
4013
|
+
};
|
|
4014
|
+
var isStillInQuotes = (text3) => text3.length >= QUOTE_UNITS && text3.startsWith('"') && text3.endsWith('"');
|
|
4015
|
+
var settledWithin = (inside, maxUnits, passesLeft = SETTLING_PASSES) => {
|
|
4016
|
+
const shortened = shortenedInTheMiddle(inside, maxUnits);
|
|
4017
|
+
const redacted = redactSecrets(inQuotes(shortened));
|
|
4018
|
+
if (redacted === inQuotes(shortened)) return shortened;
|
|
4019
|
+
if (passesLeft === 0 || !isStillInQuotes(redacted)) return PATH_NO_REDACTION_SETTLES;
|
|
4020
|
+
return settledWithin(visibleText(redacted.slice(1, -1), TEXT_ALREADY_ESCAPED), maxUnits, passesLeft - 1);
|
|
4021
|
+
};
|
|
4022
|
+
var isNamedSegment = (segment) => segment.length > 0;
|
|
4023
|
+
var withoutWhatWindowsDrops = (segment) => segment.replace(DOTS_AND_SPACES_WINDOWS_DROPS, "");
|
|
4024
|
+
var pathShape = (path) => {
|
|
4025
|
+
const drive = DRIVE_PREFIX.exec(path)?.[0].toLowerCase() ?? null;
|
|
4026
|
+
const segments = path.slice(drive?.length ?? 0).split(PATH_SEPARATOR);
|
|
4027
|
+
return {
|
|
4028
|
+
drive,
|
|
4029
|
+
doubleSlashed: drive === null && TWO_SEPARATORS_THEN_A_NAME.test(path),
|
|
4030
|
+
segments: (drive === null ? segments : segments.map(withoutWhatWindowsDrops)).filter(isNamedSegment)
|
|
4031
|
+
};
|
|
4032
|
+
};
|
|
4033
|
+
var spellingOf = ({ drive, doubleSlashed, segments }) => `${drive ?? ""}${doubleSlashed ? "//" : "/"}${segments.join("/")}`;
|
|
4034
|
+
var startsWithTheDataVolume = (folders) => MACOS_DATA_VOLUME_FOLDERS.every((folder, index) => folders[index] === folder);
|
|
4035
|
+
var startsWithAProcessRoot = ([first, second, third]) => first === PROCESS_FOLDER && second !== void 0 && PROCESS_WHOSE_ROOT_IS_LINKED.test(second) && third === PROCESS_ROOT_LINK;
|
|
4036
|
+
var startsWithAMount = ([first, second]) => first !== void 0 && second !== void 0 && MOUNT_PARENT_FOLDERS.includes(first);
|
|
4037
|
+
var startsWithAFolderMacosKeepsUnderPrivate = ([first, second]) => first === MACOS_PRIVATE_FOLDER && second !== void 0 && FOLDERS_MACOS_KEEPS_UNDER_PRIVATE.includes(second);
|
|
4038
|
+
var beyondRootAliases = ({ root, folders }) => {
|
|
4039
|
+
if (startsWithTheDataVolume(folders)) return beyondRootAliases({ root: "volume", folders: folders.slice(MACOS_DATA_VOLUME_FOLDERS.length) });
|
|
4040
|
+
if (startsWithAProcessRoot(folders)) return beyondRootAliases({ root: "computer", folders: folders.slice(PROCESS_ROOT_FOLDERS) });
|
|
4041
|
+
if (startsWithAMount(folders)) return beyondRootAliases({ root: "volume", folders: folders.slice(MOUNT_FOLDERS) });
|
|
4042
|
+
if (startsWithAFolderMacosKeepsUnderPrivate(folders)) return beyondRootAliases({ root, folders: folders.slice(MACOS_PRIVATE_FOLDERS) });
|
|
4043
|
+
return { root, folders };
|
|
4044
|
+
};
|
|
4045
|
+
var placeOf = ({ drive, segments }) => {
|
|
4046
|
+
const folders = segments.map((segment) => segment.toLowerCase());
|
|
4047
|
+
return drive === null ? beyondRootAliases({ root: "computer", folders }) : { root: "drive", folders };
|
|
4048
|
+
};
|
|
4049
|
+
var namesAHome = (parent, folder) => HOME_PARENT_FOLDERS.includes(parent) && !FOLDERS_EVERY_HOME_SHARES.includes(folder) || parent === MACOS_SUPERUSER_HOME_PARENT && folder === SUPERUSER_HOME_FOLDER;
|
|
4050
|
+
var homeRelativePlace = ({ root, folders }) => {
|
|
4051
|
+
const [first, second] = folders;
|
|
4052
|
+
if (first === SUPERUSER_HOME_FOLDER) return { home: `${root}/${first}`, inside: folders.slice(1) };
|
|
4053
|
+
if (first === void 0 || second === void 0 || !namesAHome(first, second)) return null;
|
|
4054
|
+
return { home: `${root}/${first}/${second}`, inside: folders.slice(2) };
|
|
4055
|
+
};
|
|
4056
|
+
var sensitivePlaceInAHome = ({ home, inside }) => {
|
|
4057
|
+
const [entry2, kept] = inside;
|
|
4058
|
+
if (entry2 === void 0) return null;
|
|
4059
|
+
if (entry2.startsWith(HIDDEN_ENTRY_PREFIX)) return { kind: "hiddenInAHome", folder: `${home}/${entry2}`, isTheFolderItself: kept === void 0 };
|
|
4060
|
+
if (!HOME_APP_DATA_FOLDERS.includes(entry2) || kept !== void 0 && HOME_APP_DATA_FOLDERS_HOLDING_NOTHING_KEPT.includes(kept)) return null;
|
|
4061
|
+
return { kind: "appDataOfAHome", folder: `${home}/${entry2}`, isTheFolderItself: kept === void 0 };
|
|
4062
|
+
};
|
|
4063
|
+
var holdsNothingKept = (systemFolder, entry2) => entry2 !== void 0 && (ENTRIES_OF_A_SYSTEM_FOLDER_HOLDING_NOTHING_KEPT[systemFolder] ?? []).includes(entry2);
|
|
4064
|
+
var systemFoldersOf = (root) => root === "drive" ? SYSTEM_FOLDERS_OF_A_DRIVE : SYSTEM_FOLDERS_OF_A_COMPUTER;
|
|
4065
|
+
var sensitivePlaceOf = (place) => {
|
|
4066
|
+
const home = homeRelativePlace(place);
|
|
4067
|
+
if (home !== null) return sensitivePlaceInAHome(home);
|
|
4068
|
+
const [first, entry2] = place.folders;
|
|
4069
|
+
if (first === void 0 || !systemFoldersOf(place.root).includes(first) || holdsNothingKept(first, entry2)) return null;
|
|
4070
|
+
return { kind: "system", folder: `${place.root}/${first}`, isTheFolderItself: entry2 === void 0 };
|
|
4071
|
+
};
|
|
4072
|
+
var broadRootOf = (shape, place, sensitivePlace) => {
|
|
4073
|
+
const [first, second] = place.folders;
|
|
4074
|
+
if (first === void 0) return place.root;
|
|
4075
|
+
if (homeRelativePlace(place)?.inside.length === 0) return "home";
|
|
4076
|
+
if (second === void 0) return HOME_PARENT_FOLDERS.includes(first) ? "everyHome" : "topLevel";
|
|
4077
|
+
return shape.doubleSlashed && shape.segments.length === 2 && sensitivePlace === null ? "share" : null;
|
|
4078
|
+
};
|
|
4079
|
+
var isInside = (path, folder) => folder.segments.length > 0 && path.drive === folder.drive && path.doubleSlashed === folder.doubleSlashed && folder.segments.every((segment, index) => path.segments[index] === segment);
|
|
4080
|
+
var FITTING_PLANS = [
|
|
4081
|
+
{ pointsToTheDetails: false, onlyWhenNothingIsLeftOut: true },
|
|
4082
|
+
{ pointsToTheDetails: true, onlyWhenNothingIsLeftOut: false },
|
|
4083
|
+
{ pointsToTheDetails: false, onlyWhenNothingIsLeftOut: false }
|
|
4084
|
+
];
|
|
4085
|
+
var workingDirectory = (cwd) => {
|
|
4086
|
+
const shape = pathShape(cwd);
|
|
4087
|
+
const placed = sensitivePlaceOf(placeOf(shape));
|
|
4088
|
+
return { shape, sensitiveFolder: placed === null || placed.isTheFolderItself ? null : placed.folder };
|
|
4089
|
+
};
|
|
4090
|
+
var namingRank = (broadRoot, sensitivePlace, insideTheWorkingDirectory) => {
|
|
4091
|
+
if (broadRoot !== null) return BROAD_ROOTS_IN_NAMING_ORDER.indexOf(broadRoot);
|
|
4092
|
+
if (sensitivePlace !== null) return RANK_IN_A_SENSITIVE_PLACE;
|
|
4093
|
+
return insideTheWorkingDirectory ? RANK_INSIDE_THE_WORKING_DIRECTORY : RANK_OUTSIDE_THE_WORKING_DIRECTORY;
|
|
4094
|
+
};
|
|
4095
|
+
var firstSeparatorOfARun = (run) => run.slice(0, 1);
|
|
4096
|
+
var withSeparatorRunsCollapsed = (path, { doubleSlashed }) => {
|
|
4097
|
+
const collapsed = path.replace(SEPARATOR_RUN, firstSeparatorOfARun);
|
|
4098
|
+
return doubleSlashed ? `${collapsed.slice(0, 1)}${collapsed}` : collapsed;
|
|
4099
|
+
};
|
|
4100
|
+
var isAWholeSystemFolder = (broadRoot, sensitivePlace) => broadRoot === "topLevel" && sensitivePlace?.kind === "system";
|
|
4101
|
+
var placeLabel = (broadRoot, sensitivePlace) => {
|
|
4102
|
+
if (broadRoot !== null && !isAWholeSystemFolder(broadRoot, sensitivePlace)) return ` (${BROAD_ROOT_LABELS[broadRoot]})`;
|
|
4103
|
+
return sensitivePlace === null ? "" : ` (${SENSITIVE_PLACE_LABELS[sensitivePlace.kind]})`;
|
|
4104
|
+
};
|
|
4105
|
+
var grantedPath = (path, cwd) => {
|
|
4106
|
+
const shape = pathShape(path);
|
|
4107
|
+
const place = placeOf(shape);
|
|
4108
|
+
const placed = sensitivePlaceOf(place);
|
|
4109
|
+
const insideTheWorkingDirectory = isInside(shape, cwd.shape);
|
|
4110
|
+
const sensitivePlace = placed !== null && insideTheWorkingDirectory && placed.folder === cwd.sensitiveFolder ? null : placed;
|
|
4111
|
+
const broadRoot = broadRootOf(shape, place, sensitivePlace);
|
|
4112
|
+
return {
|
|
4113
|
+
shown: settledWithin(visibleText(redactSecrets(withSeparatorRunsCollapsed(path, shape)), PATH_IN_A_QUESTION), Number.POSITIVE_INFINITY),
|
|
4114
|
+
label: placeLabel(broadRoot, sensitivePlace),
|
|
4115
|
+
sensitive: broadRoot !== null || sensitivePlace !== null,
|
|
4116
|
+
rank: namingRank(broadRoot, sensitivePlace, insideTheWorkingDirectory)
|
|
4117
|
+
};
|
|
4118
|
+
};
|
|
4119
|
+
var firstSpellings = (paths2) => {
|
|
4120
|
+
const spelled = /* @__PURE__ */ new Map();
|
|
4121
|
+
for (const path of paths2) {
|
|
4122
|
+
const spelling = spellingOf(pathShape(path));
|
|
4123
|
+
if (!spelled.has(spelling)) spelled.set(spelling, path);
|
|
4124
|
+
}
|
|
4125
|
+
return spelled;
|
|
4126
|
+
};
|
|
4127
|
+
var mostImportantFirst = (first, second) => first.rank - second.rank;
|
|
4128
|
+
var hasPaths = (list) => list.paths.length > 0;
|
|
4129
|
+
var permissionGrant = (profile, cwd) => {
|
|
4130
|
+
const from = workingDirectory(cwd);
|
|
4131
|
+
const writable = firstSpellings(codexPermissionPaths(profile, "write"));
|
|
4132
|
+
const isNotAlsoWritable = ([spelling]) => !writable.has(spelling);
|
|
4133
|
+
const readOnly = [...firstSpellings(codexPermissionPaths(profile, "read"))].filter(isNotAlsoWritable).map(([, path]) => path);
|
|
4134
|
+
const listOf = (lead, listed) => ({ lead, paths: listed.map((path) => grantedPath(path, from)).sort(mostImportantFirst) });
|
|
4135
|
+
return { network: profile.network?.enabled === true, lists: [listOf(WRITABLE_LEAD, [...writable.values()]), listOf(READ_ONLY_LEAD, readOnly)].filter(hasPaths) };
|
|
4136
|
+
};
|
|
4137
|
+
var isSensitive = (path) => path.sensitive;
|
|
4138
|
+
var sensitiveNote = (counted) => {
|
|
4139
|
+
const sensitive = counted.filter(isSensitive).length;
|
|
4140
|
+
if (sensitive === 0) return "";
|
|
4141
|
+
return sensitive === counted.length ? ", all sensitive" : `, ${sensitive} of them sensitive`;
|
|
4142
|
+
};
|
|
4143
|
+
var restOf = (unnamed) => unnamed.length === 0 ? "" : ` and ${unnamed.length} more${sensitiveNote(unnamed)}`;
|
|
4144
|
+
var countedOnly = ({ lead, paths: paths2 }) => ({
|
|
4145
|
+
text: `${lead}${paths2.length} ${paths2.length === 1 ? "path" : "paths"}${sensitiveNote(paths2)}`,
|
|
4146
|
+
named: 0,
|
|
4147
|
+
complete: false
|
|
4148
|
+
});
|
|
4149
|
+
var leastNamedUnits = ({ lead, paths: paths2 }) => {
|
|
4150
|
+
const [first, ...rest] = paths2;
|
|
4151
|
+
if (first === void 0) return 0;
|
|
4152
|
+
return lead.length + QUOTE_UNITS + Math.min(first.shown.length, ONLY_NAMED_PATH_FLOOR_UNITS) + first.label.length + restOf(rest).length;
|
|
4153
|
+
};
|
|
4154
|
+
var fairShareOf = (lengths, units) => {
|
|
4155
|
+
const shortestFirst = [...lengths].sort((first, second) => first - second);
|
|
4156
|
+
let unitsLeft = units;
|
|
4157
|
+
for (const [position, length] of shortestFirst.entries()) {
|
|
4158
|
+
const share = Math.floor(unitsLeft / (shortestFirst.length - position));
|
|
4159
|
+
if (length > share) return share;
|
|
4160
|
+
unitsLeft -= length;
|
|
4161
|
+
}
|
|
4162
|
+
return Number.POSITIVE_INFINITY;
|
|
4163
|
+
};
|
|
4164
|
+
var namingTheFirst = ({ lead, paths: paths2 }, count, units) => {
|
|
4165
|
+
const named = paths2.slice(0, count);
|
|
4166
|
+
const rest = restOf(paths2.slice(count));
|
|
4167
|
+
const lengths = named.map((path) => path.shown.length);
|
|
4168
|
+
const floor = count === 1 ? ONLY_NAMED_PATH_FLOOR_UNITS : NAMED_PATH_FLOOR_UNITS;
|
|
4169
|
+
const pathUnits = units - lead.length - rest.length - LIST_SEPARATOR.length * (count - 1) - named.reduce((sum, path) => sum + QUOTE_UNITS + path.label.length, 0);
|
|
4170
|
+
if (pathUnits < lengths.reduce((sum, length) => sum + Math.min(length, floor), 0)) return null;
|
|
4171
|
+
const share = fairShareOf(lengths, pathUnits);
|
|
4172
|
+
const fitted = named.map((path) => ({ path, shown: settledWithin(path.shown, share) }));
|
|
4173
|
+
return {
|
|
4174
|
+
text: `${lead}${fitted.map(({ path, shown }) => `${inQuotes(shown)}${path.label}`).join(LIST_SEPARATOR)}${rest}`,
|
|
4175
|
+
named: count,
|
|
4176
|
+
complete: count === paths2.length && fitted.every(({ path, shown }) => shown === path.shown)
|
|
4177
|
+
};
|
|
4178
|
+
};
|
|
4179
|
+
var namedWithin = (list, units) => {
|
|
4180
|
+
for (let count = list.paths.length; count > 0; count -= 1) {
|
|
4181
|
+
const fitted = namingTheFirst(list, count, units);
|
|
4182
|
+
if (fitted !== null) return fitted;
|
|
4183
|
+
}
|
|
4184
|
+
return null;
|
|
4185
|
+
};
|
|
4186
|
+
var namesAsMany = (shared, unshared) => shared !== null && shared.named === unshared.named;
|
|
4187
|
+
var fittedAlone = (list, units) => {
|
|
4188
|
+
const named = namedWithin(list, units);
|
|
4189
|
+
return named === null ? null : [named];
|
|
4190
|
+
};
|
|
4191
|
+
var fittedLists = ([first, second], units) => {
|
|
4192
|
+
if (first === void 0) return [];
|
|
4193
|
+
if (second === void 0) return fittedAlone(first, units);
|
|
4194
|
+
const counted = countedOnly(second);
|
|
4195
|
+
const unshared = namedWithin(first, units - counted.text.length);
|
|
4196
|
+
if (unshared === null) return null;
|
|
4197
|
+
const shared = namedWithin(first, units - leastNamedUnits(second));
|
|
4198
|
+
const leading = namesAsMany(shared, unshared) ? shared : unshared;
|
|
4199
|
+
return [leading, namedWithin(second, units - leading.text.length) ?? counted];
|
|
4200
|
+
};
|
|
4201
|
+
var asAQuestion = (network, lists, pointsToTheDetails) => {
|
|
4202
|
+
const grants = [...network ? [NETWORK_GRANT] : [], ...lists];
|
|
4203
|
+
const inAList = grants.length < 2 ? grants.join("") : `${grants.slice(0, -1).join(", ")}, and ${grants.slice(-1).join("")}`;
|
|
4204
|
+
return `Allow Codex to ${inAList}?${pointsToTheDetails ? DETAILS_NOTE : ""}`;
|
|
4205
|
+
};
|
|
4206
|
+
var questionUnder = ({ network, lists }, plan) => {
|
|
4207
|
+
const frameUnits = asAQuestion(network, lists.map(() => ""), plan.pointsToTheDetails).length;
|
|
4208
|
+
const fitted = fittedLists(lists, CODEX_PERMISSION_QUESTION_MAX_UNITS - frameUnits);
|
|
4209
|
+
if (fitted === null) return null;
|
|
4210
|
+
const nothingIsLeftOut = fitted.every((list) => list.complete);
|
|
4211
|
+
if (plan.onlyWhenNothingIsLeftOut && !nothingIsLeftOut) return null;
|
|
4212
|
+
return asAQuestion(network, fitted.map((list) => list.text), plan.pointsToTheDetails && !nothingIsLeftOut);
|
|
4213
|
+
};
|
|
4214
|
+
var isAskable = (question) => question !== null && question.length <= CODEX_PERMISSION_QUESTION_MAX_UNITS && redactSecrets(question) === question;
|
|
4215
|
+
var codexPermissionProfileQuestion = (profile, cwd) => {
|
|
4216
|
+
const grant = permissionGrant(profile, cwd);
|
|
4217
|
+
if (!grant.network && grant.lists.length === 0) return CODEX_PERMISSION_QUESTION_WITHOUT_A_GRANT;
|
|
4218
|
+
return FITTING_PLANS.map((plan) => questionUnder(grant, plan)).find(isAskable) ?? asAQuestion(grant.network, grant.lists.map((list) => countedOnly(list).text), true);
|
|
4219
|
+
};
|
|
4220
|
+
var codexPermissionProfileDetail = (profile) => `${PERMISSIONS_HEADING}
|
|
4221
|
+
${JSON.stringify(profile, null, 2).split("\n").map((line) => visibleText(line, TEXT_ALREADY_ESCAPED)).join("\n")}`;
|
|
4222
|
+
var codexProseOnOneQuotedLine = (prose) => inQuotes(visibleText(prose, PROSE_IN_QUOTES));
|
|
3856
4223
|
var codexPermissionProfileResponse = (permissions, answer) => ({
|
|
3857
4224
|
permissions: answer === CODEX_PERMISSION_PROFILE_CHOICES.turn || answer === CODEX_PERMISSION_PROFILE_CHOICES.session ? permissions : {},
|
|
3858
4225
|
scope: answer === CODEX_PERMISSION_PROFILE_CHOICES.session ? "session" : "turn"
|
|
@@ -3901,9 +4268,9 @@ var fileChangeQuestion = (changes) => {
|
|
|
3901
4268
|
return `Allow these ${changes.length} file changes once? ${named}${unnamed > 0 ? ` and ${unnamed} more` : ""}`;
|
|
3902
4269
|
};
|
|
3903
4270
|
var codexElicitationToolName = (serverName, toolName) => `mcp__${serverName}__${toolName}`;
|
|
3904
|
-
var
|
|
3905
|
-
|
|
3906
|
-
|
|
4271
|
+
var CODEX_REASON_LEAD = "\n\nCodex's reason: ";
|
|
4272
|
+
var withCodexReason = (detail, reason) => text(reason) ? `${detail}${CODEX_REASON_LEAD}${redactSecrets(reason)}` : detail;
|
|
4273
|
+
var withCodexReasonOnOneQuotedLine = (detail, reason) => text(reason) ? `${detail}${CODEX_REASON_LEAD}${codexProseOnOneQuotedLine(redactSecrets(reason))}` : detail;
|
|
3907
4274
|
var parseCodexNativeApproval = (value) => {
|
|
3908
4275
|
if (!record3(value) || !keys2(value, ["method", "params", "changes"]) || !isMethod(value.method) || !record3(value.params) || !boundedJson(value)) return null;
|
|
3909
4276
|
const p = value.params;
|
|
@@ -3964,8 +4331,8 @@ var parseCodexNativeApproval = (value) => {
|
|
|
3964
4331
|
toolName: "request_permissions",
|
|
3965
4332
|
toolInputs: [{ permissions: p.permissions }],
|
|
3966
4333
|
scopePaths: [...codexPermissionPaths(p.permissions, "read"), ...codexPermissionPaths(p.permissions, "write")],
|
|
3967
|
-
question:
|
|
3968
|
-
detail:
|
|
4334
|
+
question: codexPermissionProfileQuestion(p.permissions, p.cwd),
|
|
4335
|
+
detail: withCodexReasonOnOneQuotedLine(codexPermissionProfileDetail(p.permissions), p.reason),
|
|
3969
4336
|
options: [CODEX_PERMISSION_PROFILE_CHOICES.turn, CODEX_PERMISSION_PROFILE_CHOICES.session, CODEX_PERMISSION_PROFILE_CHOICES.deny]
|
|
3970
4337
|
};
|
|
3971
4338
|
}
|
|
@@ -4039,6 +4406,12 @@ var SPAWN_RECOVERY = {
|
|
|
4039
4406
|
receiptRetentionMs: 7 * 24 * 60 * 60 * 1e3,
|
|
4040
4407
|
retrySendWindowMs: 60 * 60 * 1e3
|
|
4041
4408
|
};
|
|
4409
|
+
var SPAWN_LAUNCH_FAILED_CODE = "launch_failed";
|
|
4410
|
+
var SPAWN_UNCONFIRMED_ATTEMPT_FAILURE = {
|
|
4411
|
+
code: SPAWN_LAUNCH_FAILED_CODE,
|
|
4412
|
+
message: "The previous launch could not be confirmed. Check your sessions before starting another.",
|
|
4413
|
+
retryable: true
|
|
4414
|
+
};
|
|
4042
4415
|
|
|
4043
4416
|
// ../contracts/src/claude-inbox.ts
|
|
4044
4417
|
var CLAUDE_INBOX = {
|
|
@@ -6923,11 +7296,32 @@ var substitutionFedTo = (pieces, index) => {
|
|
|
6923
7296
|
const next = pieces[index + 1];
|
|
6924
7297
|
return next !== void 0 && SUBSTITUTION_OPENERS.has(next.before) ? next.text : null;
|
|
6925
7298
|
};
|
|
7299
|
+
var REDIRECTION_REMOVED = " ";
|
|
7300
|
+
var arrowReadingInForce = null;
|
|
7301
|
+
var anArrowWasReadAsText = false;
|
|
7302
|
+
var underEachArrowReading = (judge) => {
|
|
7303
|
+
if (arrowReadingInForce !== null) return [judge()];
|
|
7304
|
+
try {
|
|
7305
|
+
anArrowWasReadAsText = false;
|
|
7306
|
+
arrowReadingInForce = "arrows_the_shell_sees";
|
|
7307
|
+
const withArrowsTheShellSees = judge();
|
|
7308
|
+
if (!anArrowWasReadAsText) return [withArrowsTheShellSees];
|
|
7309
|
+
arrowReadingInForce = "every_arrow";
|
|
7310
|
+
return [withArrowsTheShellSees, judge()];
|
|
7311
|
+
} finally {
|
|
7312
|
+
arrowReadingInForce = null;
|
|
7313
|
+
}
|
|
7314
|
+
};
|
|
7315
|
+
var isTrue = (answer) => answer;
|
|
7316
|
+
var underEitherArrowReading = (judge) => underEachArrowReading(judge).some(isTrue);
|
|
6926
7317
|
var withoutOutputRedirectionTargets = (text3) => {
|
|
7318
|
+
if (arrowReadingInForce === "every_arrow") return text3.replace(OUTPUT_REDIRECTION, REDIRECTION_REMOVED);
|
|
6927
7319
|
const visible = shellVisibleText(text3);
|
|
6928
7320
|
const removeVisibleRedirection = (match, _target, offset) => {
|
|
6929
7321
|
const operator = offset + match.search(REDIRECTION_OPERATOR_CHARACTER);
|
|
6930
|
-
|
|
7322
|
+
if (visible === null || REDIRECTION_OPERATOR_CHARACTER.test(visible.charAt(operator))) return REDIRECTION_REMOVED;
|
|
7323
|
+
anArrowWasReadAsText = true;
|
|
7324
|
+
return match;
|
|
6931
7325
|
};
|
|
6932
7326
|
return text3.replace(OUTPUT_REDIRECTION, removeVisibleRedirection);
|
|
6933
7327
|
};
|
|
@@ -8315,6 +8709,7 @@ var ANSWER_SOURCES = [
|
|
|
8315
8709
|
"inbox",
|
|
8316
8710
|
"slack",
|
|
8317
8711
|
"mac_app",
|
|
8712
|
+
"voice_call",
|
|
8318
8713
|
// Nobody. A decision opened on a workspace's sandbox site is settled by the
|
|
8319
8714
|
// simulator instead of being delivered, and the ledger has to say so: a
|
|
8320
8715
|
// sandbox row that looked like a human answer would be indistinguishable
|
|
@@ -8401,6 +8796,7 @@ var CAPABILITY_PATTERNS = {
|
|
|
8401
8796
|
"Bash(mkfs:*)"
|
|
8402
8797
|
]
|
|
8403
8798
|
};
|
|
8799
|
+
var MAX_PUSH_WINDOW_SECONDS = 300;
|
|
8404
8800
|
var DECISION_EPISODE_SCHEMA_VERSION = 1;
|
|
8405
8801
|
var DECISION_FEATURE_EXTRACTOR = `pushary-hooks/schema-${DECISION_EPISODE_SCHEMA_VERSION}`;
|
|
8406
8802
|
var DECISION_ORIGIN = {
|
|
@@ -8562,7 +8958,7 @@ var isScopeContract = (value) => {
|
|
|
8562
8958
|
if (c.promises !== void 0 && !strings(c.promises)) return false;
|
|
8563
8959
|
return strings(c.allowedPaths) && strings(c.offLimitsPaths) && typeof c.doneWhen === "string";
|
|
8564
8960
|
};
|
|
8565
|
-
var
|
|
8961
|
+
var routeMatchingBestUnderOneArrowReading = (routes, toolName, args, repoKey) => {
|
|
8566
8962
|
let best;
|
|
8567
8963
|
let bestWeight = 0;
|
|
8568
8964
|
let bestScoped = -1;
|
|
@@ -8583,7 +8979,13 @@ var findBestRoute = (routes, toolName, args, repoKey) => {
|
|
|
8583
8979
|
bestLength = length;
|
|
8584
8980
|
}
|
|
8585
8981
|
}
|
|
8586
|
-
return best
|
|
8982
|
+
return best;
|
|
8983
|
+
};
|
|
8984
|
+
var isAMatchedRoute = (route) => route !== void 0;
|
|
8985
|
+
var routeWaitsForSomeoneElse = (route) => route.answeredBySomeoneElse === true;
|
|
8986
|
+
var findBestRoute = (routes, toolName, args, repoKey) => {
|
|
8987
|
+
const matched = underEachArrowReading(() => routeMatchingBestUnderOneArrowReading(routes, toolName, args, repoKey)).filter(isAMatchedRoute);
|
|
8988
|
+
return matched.find(routeWaitsForSomeoneElse) ?? matched[0] ?? routes.find((r) => r.toolPattern === "*");
|
|
8587
8989
|
};
|
|
8588
8990
|
var autoApprove = (tool) => ({
|
|
8589
8991
|
tool,
|
|
@@ -8698,11 +9100,13 @@ var resolvePolicyReading = (reach, config, toolName, modeOverride, toolInput, cw
|
|
|
8698
9100
|
}
|
|
8699
9101
|
return base;
|
|
8700
9102
|
};
|
|
8701
|
-
var
|
|
9103
|
+
var policyUnderOneArrowReading = (config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId) => {
|
|
8702
9104
|
const withoutRunners = resolvePolicyReading(SPELLS_WITHOUT_COMMAND_RUNNERS, config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId);
|
|
8703
9105
|
const withRunners = resolvePolicyReading(SPELLS_COMMAND_RUNNERS_TOO, config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId);
|
|
8704
9106
|
return strictestReadingOf(withRunners, withoutRunners);
|
|
8705
9107
|
};
|
|
9108
|
+
var keepingTheStrictestReading = (strictest, reading) => strictestReadingOf(reading, strictest);
|
|
9109
|
+
var resolvePolicy = (config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId) => underEachArrowReading(() => policyUnderOneArrowReading(config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId)).reduce(keepingTheStrictestReading);
|
|
8706
9110
|
var VERDICT_RESTRAINT = { allow: 0, requires_human: 1, deny: 2 };
|
|
8707
9111
|
var verdictRestraint = (policy) => VERDICT_RESTRAINT[verdictForPolicy(policy)];
|
|
8708
9112
|
var asksAtLeastAsHard = (policy, than) => restraintRank(policy) >= restraintRank(than) && TIMEOUT_ACTION_STRICTNESS[policy.timeoutAction] >= TIMEOUT_ACTION_STRICTNESS[than.timeoutAction] && policy.timeoutSeconds >= than.timeoutSeconds && policy.pushFirstSeconds <= than.pushFirstSeconds;
|
|
@@ -8927,15 +9331,18 @@ var policyForScopeQuestion = (policy) => policy.timeoutAction === "approve" ? {
|
|
|
8927
9331
|
pushFirstSeconds: policy.pushFirstSeconds > 0 ? policy.pushFirstSeconds : SCOPE_QUESTION_FIRST_WAIT_SECONDS
|
|
8928
9332
|
} : policy;
|
|
8929
9333
|
var isAReading = (reading) => reading !== null && reading.trim() !== "";
|
|
9334
|
+
var readingsOfScriptsWrittenForAShell = (command) => readingsOfNestedShellScripts(command, scriptsWrittenForAShellOrAnEval);
|
|
8930
9335
|
var extraReadingsOf = (toolInput) => {
|
|
8931
9336
|
const { command } = toolInput;
|
|
8932
9337
|
if (typeof command !== "string" || command.length > LONGEST_COMMAND_READ_FOR_A_PUSH) return [];
|
|
8933
9338
|
const commentFree = readingWithoutCommentsOrAnsiEscapes(command);
|
|
8934
9339
|
const spelledOut = [command, commentFree].filter(isAReading).map(readingWithShellFormsSpelledOut);
|
|
9340
|
+
const scanned = [command, commentFree, ...spelledOut].filter(isAReading);
|
|
8935
9341
|
const readings = [
|
|
8936
9342
|
commentFree,
|
|
8937
9343
|
...spelledOut,
|
|
8938
|
-
...
|
|
9344
|
+
...scanned.flatMap(readingsOfScriptsPassedToAShell),
|
|
9345
|
+
...scanned.flatMap(readingsOfScriptsWrittenForAShell)
|
|
8939
9346
|
];
|
|
8940
9347
|
return readings.filter(isAReading).map((reading) => ({ ...toolInput, command: reading }));
|
|
8941
9348
|
};
|
|
@@ -8948,7 +9355,16 @@ var readingsNotYetJudged = (toolInputs) => {
|
|
|
8948
9355
|
});
|
|
8949
9356
|
};
|
|
8950
9357
|
var withExtraReadings = (input) => shellDialectOf(input.toolName) !== void 0 ? { ...input, toolInputs: [...input.toolInputs, ...readingsNotYetJudged(input.toolInputs)] } : input;
|
|
8951
|
-
var
|
|
9358
|
+
var GATE_VERDICT_RESTRAINT = { allow: 0, defer: 1, gate: 2, deny: 3, kill: 4 };
|
|
9359
|
+
var strictestGateVerdictOf = (strictest, verdict) => {
|
|
9360
|
+
const restraint = GATE_VERDICT_RESTRAINT[verdict.kind] - GATE_VERDICT_RESTRAINT[strictest.kind];
|
|
9361
|
+
if (restraint !== 0) return restraint > 0 ? verdict : strictest;
|
|
9362
|
+
return strictest.kind === "gate" && verdict.kind === "gate" ? { ...strictest, policy: strictestReadingOf(verdict.policy, strictest.policy) } : strictest;
|
|
9363
|
+
};
|
|
9364
|
+
var policyOfReadings = (readings) => readings.policy;
|
|
9365
|
+
var toolInputsOfReadings = (readings) => readings.toolInputs;
|
|
9366
|
+
var readingsAreAllowed = (readings) => verdictForPolicy(readings.policy) === "allow";
|
|
9367
|
+
var gateVerdictUnderOneArrowReading = (rawInput) => {
|
|
8952
9368
|
const input = withExtraReadings(rawInput);
|
|
8953
9369
|
const { modeState, config, toolName, toolInputs, cwd, sessionId } = input;
|
|
8954
9370
|
const repoKey = input.sharedRepoKey ?? input.repoKey;
|
|
@@ -8964,16 +9380,23 @@ var resolveGate = (rawInput) => {
|
|
|
8964
9380
|
const legacyPolicy = (toolInputs.length ? toolInputs : [void 0]).map((toolInput) => resolvePolicy(config, toolName, modeState.mode, toolInput, cwd, input.repoKey, sessionId)).find((policy2) => policy2.repoKey === input.repoKey && verdictForPolicy(policy2) === "deny");
|
|
8965
9381
|
if (legacyPolicy) return { kind: "deny", policy: legacyPolicy, reason: `Denied by policy for ${legacyPolicy.tool}` };
|
|
8966
9382
|
}
|
|
8967
|
-
const
|
|
8968
|
-
|
|
8969
|
-
resolvePolicyAcross(config, toolName, modeState.mode, rawInput.toolInputs, cwd, repoKey, sessionId)
|
|
8970
|
-
|
|
9383
|
+
const written = {
|
|
9384
|
+
toolInputs: rawInput.toolInputs,
|
|
9385
|
+
policy: resolvePolicyAcross(config, toolName, modeState.mode, rawInput.toolInputs, cwd, repoKey, sessionId)
|
|
9386
|
+
};
|
|
9387
|
+
const extra = toolInputs.slice(rawInput.toolInputs.length).map((reading) => ({
|
|
9388
|
+
toolInputs: [reading],
|
|
9389
|
+
policy: resolvePolicy(config, toolName, modeState.mode, reading, cwd, repoKey, sessionId)
|
|
9390
|
+
}));
|
|
9391
|
+
const policy = extra.map(policyOfReadings).reduce(keepingTheStrictestReading, written.policy);
|
|
8971
9392
|
const verdict = verdictForPolicy(policy);
|
|
8972
9393
|
const autoDenies = verdict === "deny";
|
|
8973
9394
|
const allowedByBypassMode = !autoDenies && verdict !== "allow" && bypassModeAllows(input);
|
|
8974
|
-
const
|
|
9395
|
+
const allowed = [written, ...extra].filter(readingsAreAllowed);
|
|
9396
|
+
const allowedBy = allowed[0]?.policy;
|
|
9397
|
+
const askBesideARoutedPush = autoDenies || allowedBy === void 0 ? void 0 : askAtTheRouteOfAPush({ ...input, toolInputs: allowed.flatMap(toolInputsOfReadings) }, repoKey, allowedBy);
|
|
8975
9398
|
const autoApproves = (verdict === "allow" || allowedByBypassMode) && askBesideARoutedPush === void 0;
|
|
8976
|
-
const askedPolicy = askBesideARoutedPush
|
|
9399
|
+
const askedPolicy = askBesideARoutedPush === void 0 ? policy : strictestReadingOf(policy, askBesideARoutedPush);
|
|
8977
9400
|
if (autoDenies) return { kind: "deny", policy, reason: `Denied by policy for ${policy.tool}` };
|
|
8978
9401
|
if (isAskedInEveryMode(toolName)) return { kind: "gate", policy };
|
|
8979
9402
|
if (isModeStateDegraded(modeState)) {
|
|
@@ -9003,6 +9426,10 @@ var resolveGate = (rawInput) => {
|
|
|
9003
9426
|
scopePath: scopeReason && "path" in scopeVerdict ? widenablePath(scopeVerdict.path) : void 0
|
|
9004
9427
|
};
|
|
9005
9428
|
};
|
|
9429
|
+
var resolveGate = (rawInput) => {
|
|
9430
|
+
const verdict = underEachArrowReading(() => gateVerdictUnderOneArrowReading(rawInput)).reduce(strictestGateVerdictOf);
|
|
9431
|
+
return verdict.kind === "gate" ? { ...verdict, policy: withApprovalRouteWait(rawInput, verdict.policy) } : verdict;
|
|
9432
|
+
};
|
|
9006
9433
|
var noModeOverrideIsActive = (input) => (input.modeState.mode ?? input.config.modeOverride ?? null) === null;
|
|
9007
9434
|
var editAsksAtTheAgentsPrompt = (input, verdict) => verdict.kind === "gate" && !verdict.scopeReason && noModeOverrideIsActive(input) && !aChosenRuleGoverns(input) && verdict.policy.mode === "push_first" && FILE_EDIT_TOOLS.has(input.toolName);
|
|
9008
9435
|
var claudePromptsBeforeAnEdit = (permissionMode) => permissionMode === "default";
|
|
@@ -9037,10 +9464,11 @@ var codexDeferredPreToolUse = () => ({ kind: "deny", reason: CODEX_PRE_TOOL_USE_
|
|
|
9037
9464
|
var isScopeReason = (scopeReason) => typeof scopeReason === "string" && scopeReason.length > 0;
|
|
9038
9465
|
var scopeBreachReasonOf = (verdict) => verdict.kind === "gate" && isScopeReason(verdict.scopeReason) ? verdict.scopeReason : void 0;
|
|
9039
9466
|
var onlyCodexPreToolUseCanAsk = (verdict, permissionMode) => verdict.kind === "gate" && (scopeBreachReasonOf(verdict) !== void 0 || !codexRaisesItsOwnPrompts(permissionMode));
|
|
9040
|
-
var
|
|
9467
|
+
var runsACommandThatNeedsAPersonUnderOneArrowReading = ({ toolName, toolInputs }) => SHELL_DIALECT_BY_TOOL.has(toolName) && toolInputs.some((toolInput) => {
|
|
9041
9468
|
const command = extractPolicyArg(toolName, toolInput);
|
|
9042
9469
|
return command !== void 0 && (commandNeedsAPerson(toolName, command) || commandWritesThroughARemoteApi(command));
|
|
9043
9470
|
});
|
|
9471
|
+
var runsACommandThatNeedsAPerson = (input) => underEitherArrowReading(() => runsACommandThatNeedsAPersonUnderOneArrowReading(input));
|
|
9044
9472
|
var namesASecretOrWorkflowFile = (path) => {
|
|
9045
9473
|
const written = withoutDotSegments(normalizeSeparators(path));
|
|
9046
9474
|
return SECRET_FILE_NAME.test(basenameOf(written)) || CI_WORKFLOW_FILE.test(written);
|
|
@@ -9051,10 +9479,11 @@ var editsAFileThatNeedsAPerson = ({ toolName, toolInputs }) => toolInputs.some((
|
|
|
9051
9479
|
const path = extractPolicyArg(toolName, toolInput);
|
|
9052
9480
|
return path !== void 0 && fileEditNeedsAPerson(toolName, path);
|
|
9053
9481
|
});
|
|
9054
|
-
var
|
|
9482
|
+
var runsADestructiveCommandUnderOneArrowReading = ({ toolName, toolInputs }) => SHELL_DIALECT_BY_TOOL.has(toolName) && toolInputs.some((toolInput) => {
|
|
9055
9483
|
const command = extractPolicyArg(toolName, toolInput);
|
|
9056
9484
|
return command !== void 0 && commandIsDestructive(toolName, command);
|
|
9057
9485
|
});
|
|
9486
|
+
var runsADestructiveCommand = (input) => underEitherArrowReading(() => runsADestructiveCommandUnderOneArrowReading(input));
|
|
9058
9487
|
var codexCallIsDestructive = (input, call) => call.deletesFiles || runsADestructiveCommand(input);
|
|
9059
9488
|
var connectorCallOnlyReads = ({ toolName, toolInputs }) => isCodexConnectorTool(toolName) && mcpToolOnlyReads(toolName) && !mcpToolAppNamesADatabase(toolName) && toolInputs.length > 0 && toolInputs.every((toolInput) => mcpToolInputOnlyReads(toolName, toolInput));
|
|
9060
9489
|
var fullAccessRunsThisConnectorReadUnasked = (input, verdict, call) => !codexRaisesItsOwnPrompts(call.permissionMode) && scopeBreachReasonOf(verdict) === void 0 && noModeOverrideIsActive(input) && connectorCallOnlyReads(input);
|
|
@@ -9110,7 +9539,11 @@ var agentRulesAllowEveryInput = (rules, toolName, toolInputs, cwd) => rules.allo
|
|
|
9110
9539
|
return allowRulesGrant(rules.allow, toolName, args) && !anyRuleRestrictsReading(rules.ask, toolName, reading) && !anyRuleRestrictsReading(rules.deny, toolName, reading) && !inputNeedsAPerson(toolName, toolInput);
|
|
9111
9540
|
});
|
|
9112
9541
|
var isDefaultRule = (policy) => policy.origin === "builtin" || policy.tool === WILDCARD_TOOL_PATTERN;
|
|
9113
|
-
var
|
|
9542
|
+
var isValidRouteWait = (value) => {
|
|
9543
|
+
if (!("minimumPushWaitSeconds" in value) || value.minimumPushWaitSeconds === void 0) return true;
|
|
9544
|
+
return typeof value.minimumPushWaitSeconds === "number" && Number.isInteger(value.minimumPushWaitSeconds) && value.minimumPushWaitSeconds >= 0 && value.minimumPushWaitSeconds <= MAX_PUSH_WINDOW_SECONDS;
|
|
9545
|
+
};
|
|
9546
|
+
var isApprovalRoutePattern = (value) => typeof value === "object" && value !== null && typeof value.toolPattern === "string" && ["string", "undefined"].includes(typeof value.repoKey) && ["boolean", "undefined"].includes(typeof value.answeredBySomeoneElse) && isValidRouteWait(value);
|
|
9114
9547
|
var approvalRoutesOf = (config) => {
|
|
9115
9548
|
const routes = config.approvalRoutes ?? [];
|
|
9116
9549
|
return Array.isArray(routes) && routes.every(isApprovalRoutePattern) ? routes : null;
|
|
@@ -9232,7 +9665,7 @@ var pushSpellingsBeyondTheWrittenOnesIn = (input, toolInput) => [...pushesOfTheC
|
|
|
9232
9665
|
var writtenRouteArgumentsOf = (input, toolInput) => [...policyArgForms(input.toolName, toolInput, input.cwd), ...pushesOfTheCurrentBranchIn(input, toolInput)];
|
|
9233
9666
|
var routeArgumentsOf = (input, toolInput) => [...writtenRouteArgumentsOf(input, toolInput), ...pushSpellingsBeyondTheWrittenOnesIn(input, toolInput)];
|
|
9234
9667
|
var everyRule = () => true;
|
|
9235
|
-
var
|
|
9668
|
+
var aChosenRuleGovernsUnderOneArrowReading = (input, counts) => {
|
|
9236
9669
|
const chosen = input.config.policies.filter((policy) => !isDefaultRule(policy));
|
|
9237
9670
|
const routes = approvalRoutesOf(input.config);
|
|
9238
9671
|
if (routes === null) return true;
|
|
@@ -9243,8 +9676,8 @@ var aChosenRuleGoverns = (input, counts = everyRule) => {
|
|
|
9243
9676
|
return governing !== void 0 && counts(governing.policy) || findBestRoute(routes, input.toolName, routeArgumentsOf(input, toolInput), input.repoKey) !== void 0;
|
|
9244
9677
|
});
|
|
9245
9678
|
};
|
|
9679
|
+
var aChosenRuleGoverns = (input, counts = everyRule) => underEitherArrowReading(() => aChosenRuleGovernsUnderOneArrowReading(input, counts));
|
|
9246
9680
|
var AUTO_PERMISSION_MODE = "auto";
|
|
9247
|
-
var routeWaitsForSomeoneElse = (route) => route.answeredBySomeoneElse === true;
|
|
9248
9681
|
var routeDeliveredFor = (input, routes, toolInput) => {
|
|
9249
9682
|
const repoKey = input.sharedRepoKey ?? input.repoKey;
|
|
9250
9683
|
const written = writtenRouteArgumentsOf(input, toolInput);
|
|
@@ -9256,12 +9689,13 @@ var routeDeliveredFor = (input, routes, toolInput) => {
|
|
|
9256
9689
|
if (heldSpelledRoute !== void 0 && heldSpelledRoute.toolPattern.length > (writtenRoute?.toolPattern.length ?? -1)) return heldSpelledRoute;
|
|
9257
9690
|
return writtenRoute ?? findBestRoute(routes, input.toolName, spelled, repoKey);
|
|
9258
9691
|
};
|
|
9259
|
-
var
|
|
9692
|
+
var callWaitsForSomeoneElseUnderOneArrowReading = (input) => {
|
|
9260
9693
|
const routes = approvalRoutesOf(input.config);
|
|
9261
9694
|
if (routes === null) return false;
|
|
9262
9695
|
return withExtraReadings(input).toolInputs.some((toolInput) => routeDeliveredFor(input, routes, toolInput)?.answeredBySomeoneElse === true);
|
|
9263
9696
|
};
|
|
9264
|
-
var
|
|
9697
|
+
var callWaitsForSomeoneElse = (input) => underEitherArrowReading(() => callWaitsForSomeoneElseUnderOneArrowReading(input));
|
|
9698
|
+
var namedRouteWaitsForSomeoneElseUnderOneArrowReading = (input) => {
|
|
9265
9699
|
const routes = approvalRoutesOf(input.config);
|
|
9266
9700
|
if (routes === null) return false;
|
|
9267
9701
|
return withExtraReadings(input).toolInputs.some((toolInput) => {
|
|
@@ -9269,11 +9703,24 @@ var namedRouteWaitsForSomeoneElse = (input) => {
|
|
|
9269
9703
|
return route?.answeredBySomeoneElse === true && patternToolName(route.toolPattern) === input.toolName;
|
|
9270
9704
|
});
|
|
9271
9705
|
};
|
|
9272
|
-
var
|
|
9706
|
+
var namedRouteWaitsForSomeoneElse = (input) => underEitherArrowReading(() => namedRouteWaitsForSomeoneElseUnderOneArrowReading(input));
|
|
9707
|
+
var firstRouteHeldForSomeoneElseOrFirstOf = (matched) => matched.find(routeWaitsForSomeoneElse) ?? matched[0];
|
|
9708
|
+
var routesMatchedUnderOneArrowReading = (input) => {
|
|
9273
9709
|
const routes = approvalRoutesOf(input.config);
|
|
9274
|
-
if (routes === null) return
|
|
9275
|
-
|
|
9276
|
-
|
|
9710
|
+
if (routes === null) return [];
|
|
9711
|
+
return withExtraReadings(input).toolInputs.flatMap((toolInput) => routeDeliveredFor(input, routes, toolInput) ?? []);
|
|
9712
|
+
};
|
|
9713
|
+
var withApprovalRouteWait = (input, policy) => {
|
|
9714
|
+
if (verdictForPolicy(policy) !== "requires_human" || policy.timeoutAction === "approve") return policy;
|
|
9715
|
+
const routes = underEachArrowReading(() => routesMatchedUnderOneArrowReading(input)).flat();
|
|
9716
|
+
const minimum = Math.max(0, ...routes.map((route) => route.minimumPushWaitSeconds ?? 0));
|
|
9717
|
+
if (minimum === 0) return policy;
|
|
9718
|
+
if (policy.mode === "push_first") return { ...policy, pushFirstSeconds: Math.max(policy.pushFirstSeconds, minimum) };
|
|
9719
|
+
if (policy.mode === "push_only" && policy.timeoutAction !== "wait") return { ...policy, timeoutSeconds: Math.max(policy.timeoutSeconds, minimum) };
|
|
9720
|
+
return policy;
|
|
9721
|
+
};
|
|
9722
|
+
var matchedRouteOf = (input) => {
|
|
9723
|
+
const route = firstRouteHeldForSomeoneElseOrFirstOf(underEachArrowReading(() => routesMatchedUnderOneArrowReading(input)).flat());
|
|
9277
9724
|
if (route === void 0) return void 0;
|
|
9278
9725
|
return route.repoKey ? { toolPattern: route.toolPattern, repoKey: route.repoKey } : { toolPattern: route.toolPattern };
|
|
9279
9726
|
};
|
|
@@ -9768,6 +10215,8 @@ export {
|
|
|
9768
10215
|
codexNativeApprovalResponse,
|
|
9769
10216
|
transcriptRecordPlaintext,
|
|
9770
10217
|
compressTranscriptRecord,
|
|
10218
|
+
SPAWN_LAUNCH_FAILED_CODE,
|
|
10219
|
+
SPAWN_UNCONFIRMED_ATTEMPT_FAILURE,
|
|
9771
10220
|
CLAUDE_INBOX,
|
|
9772
10221
|
parseClaudeInboxSession,
|
|
9773
10222
|
claudeInboxAction,
|