pushary 1.9.140 → 1.9.141
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 +18 -0
- package/dist/{api-ZV6JN5J3.js → api-JWLCKSWR.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-4IAFTTNQ.js → chunk-24BLJAQN.js} +1 -1
- package/dist/{chunk-7TXUHOQW.js → chunk-3MFJDZ2L.js} +10 -10
- package/dist/{chunk-SSAGWDBN.js → chunk-3MMOB5TM.js} +3 -3
- package/dist/{chunk-O55PACNP.js → chunk-3PALTBFX.js} +4 -4
- package/dist/{chunk-UGU566AU.js → chunk-3RBUCAO7.js} +6 -6
- package/dist/{chunk-3FJO3HIA.js → chunk-3YV26XPH.js} +3 -3
- package/dist/{chunk-AQVXXXFZ.js → chunk-4JR6PPIY.js} +4 -4
- package/dist/{chunk-GUVTHNCX.js → chunk-4KHBN7LI.js} +5 -5
- package/dist/{chunk-TJX25WUQ.js → chunk-4Y2LO2WB.js} +2 -2
- package/dist/{chunk-XJ6CRGD2.js → chunk-4ZTPPMLM.js} +4 -4
- package/dist/{chunk-LAAGGP7K.js → chunk-5DMGHDOT.js} +5 -5
- package/dist/{chunk-4SMS5DND.js → chunk-62V26PAL.js} +3 -3
- package/dist/{chunk-6LK6I62M.js → chunk-6DAXKHVX.js} +1 -1
- package/dist/{chunk-QAT2PWRX.js → chunk-7EYUDJQ6.js} +16 -16
- package/dist/{chunk-QDQHIQWH.js → chunk-7TKF7IFS.js} +2 -2
- package/dist/{chunk-QCIZDJSU.js → chunk-A6KNDKO5.js} +458 -27
- package/dist/{chunk-MTVAACOE.js → chunk-ACG7RC7N.js} +3 -3
- package/dist/{chunk-4YIVV4PY.js → chunk-AIZ5KC2N.js} +2 -2
- package/dist/{chunk-MEFTOIUI.js → chunk-ALJL6GDD.js} +1 -1
- package/dist/{chunk-BAT4TJOE.js → chunk-ARIJUXCG.js} +8 -8
- package/dist/{chunk-6WBHYQ2P.js → chunk-BFXIQGWS.js} +1 -1
- package/dist/{chunk-MGBYRHT3.js → chunk-BKWDG5QV.js} +1 -1
- package/dist/{chunk-IEHY7DCR.js → chunk-C4VTURGH.js} +1 -1
- package/dist/{chunk-7W4XA2WF.js → chunk-CAUSBRTJ.js} +1 -1
- package/dist/{chunk-V5VSSRV6.js → chunk-CL3OIICA.js} +6 -6
- package/dist/{chunk-3HORJAQX.js → chunk-CUJ2MGG5.js} +2 -2
- package/dist/{chunk-YIIGX653.js → chunk-CVGVWUNE.js} +5 -5
- package/dist/{chunk-S7DTAH7Q.js → chunk-CWCJFCAY.js} +1 -1
- package/dist/{chunk-HJFTPNP6.js → chunk-D35XQMWO.js} +2 -2
- package/dist/{chunk-T5GZUMBP.js → chunk-EADQYNLU.js} +5 -5
- package/dist/{chunk-LW7TXMCP.js → chunk-F335PCA4.js} +1 -1
- package/dist/{chunk-AXAO3JF5.js → chunk-FKKS4ZC5.js} +3 -3
- package/dist/{chunk-E4MC6B6U.js → chunk-FOPV3VQD.js} +4 -4
- package/dist/{chunk-BMBWFLIT.js → chunk-GA72NGS7.js} +1 -1
- package/dist/{chunk-IJMWFHZZ.js → chunk-GGXAZTSW.js} +2 -2
- package/dist/{chunk-OZY4EU6V.js → chunk-GX46NBAE.js} +8 -8
- package/dist/{chunk-SANGITZF.js → chunk-HEXX52SX.js} +1 -1
- package/dist/{chunk-HNN46FYL.js → chunk-I547BHSE.js} +4 -4
- package/dist/{chunk-O66URN57.js → chunk-I72H3AWD.js} +3 -3
- package/dist/{chunk-H2EXF6DB.js → chunk-IR7J5WY4.js} +3 -3
- package/dist/{chunk-7AXEKUXY.js → chunk-J2ELAXGI.js} +1 -1
- package/dist/{chunk-PHZYLAHL.js → chunk-J3NMHMG7.js} +2 -2
- package/dist/{chunk-MDRNNK3L.js → chunk-JBQFVXDK.js} +1 -1
- package/dist/{chunk-7OBROSQL.js → chunk-KAYK66B3.js} +3 -3
- package/dist/{chunk-6Z7VJ65F.js → chunk-LCYHJQGQ.js} +5 -5
- package/dist/{chunk-S6LB3SZE.js → chunk-ME2ZKG6Y.js} +12 -12
- package/dist/{chunk-D7AJ3ZCI.js → chunk-MQJEDVTH.js} +1 -1
- package/dist/{chunk-LURIPMCB.js → chunk-MW6MPOQZ.js} +6 -6
- package/dist/{chunk-YB7V6V6O.js → chunk-NDAJSNIZ.js} +1 -1
- package/dist/{chunk-FSDTFT7J.js → chunk-NFXWQDZ6.js} +2 -2
- package/dist/{chunk-MFRNEOCN.js → chunk-O2CW5IFD.js} +11 -11
- package/dist/{chunk-RACM64B6.js → chunk-OR47JOLE.js} +2 -2
- package/dist/{chunk-2MELVDYD.js → chunk-PD5LSNEK.js} +2 -2
- package/dist/{chunk-Y7LBB6YM.js → chunk-PDES33BK.js} +1 -1
- package/dist/{chunk-UHB7G2XC.js → chunk-PHSPXFAY.js} +5 -5
- package/dist/{chunk-RVKCG7DK.js → chunk-PNKFGNJF.js} +6 -6
- package/dist/{chunk-SQB57AJR.js → chunk-PY2JHBNC.js} +4 -4
- package/dist/{chunk-E67Y7DSA.js → chunk-Q4XW5FWF.js} +2 -2
- package/dist/{chunk-UH25VEQI.js → chunk-Q6EK2GDR.js} +4 -4
- package/dist/{chunk-ULRZGJSL.js → chunk-QNEF5JII.js} +2 -2
- package/dist/{chunk-RQPVEBKR.js → chunk-QVXNSVBS.js} +3 -3
- package/dist/{chunk-NBJ7N7KL.js → chunk-RO36S2KY.js} +5 -5
- package/dist/{chunk-5TPC3M45.js → chunk-RQCKUCWK.js} +1 -1
- package/dist/{chunk-N346VCKX.js → chunk-TIX4DZ2J.js} +3 -3
- package/dist/{chunk-E46NE7FB.js → chunk-U4P4NDVB.js} +2 -0
- package/dist/{chunk-B4KAY45V.js → chunk-UJ2WT54H.js} +16 -12
- package/dist/{chunk-7DPPMWTR.js → chunk-UOKA4ENY.js} +3 -3
- package/dist/{chunk-YD3PTYOT.js → chunk-UQ352C7S.js} +3 -3
- package/dist/{chunk-3TQ4NPFC.js → chunk-VBYWBGIJ.js} +3 -3
- package/dist/{chunk-7WLNPGEY.js → chunk-VR6VWNLQ.js} +4 -4
- package/dist/{chunk-TA3YQY6I.js → chunk-VTT3WV4C.js} +1 -1
- package/dist/{chunk-JYOC6N7C.js → chunk-XBPBYSNM.js} +2 -2
- package/dist/{chunk-TRCJWAZD.js → chunk-XYFKYZCQ.js} +6 -6
- package/dist/{chunk-L7BWJD25.js → chunk-XYRPLFMD.js} +1 -1
- package/dist/{chunk-JHRJ3KKG.js → chunk-YKL7VBKJ.js} +5 -5
- package/dist/{chunk-7LBMCU3S.js → chunk-ZE56WMFL.js} +4 -4
- package/dist/{codex-app-cards-switch-YW4R5WTG.js → codex-app-cards-switch-NRAMENRL.js} +12 -12
- package/dist/{codex-card-routing-5EHXCS7Y.js → codex-card-routing-D7ARIQKL.js} +2 -2
- package/dist/{codex-desktop-launch-VEPL7OFZ.js → codex-desktop-launch-2X4UEMRL.js} +2 -2
- package/dist/{codex-session-launch-7UKI32XL.js → codex-session-launch-FY5QIZSI.js} +20 -20
- package/dist/{config-5YVCM3JL.js → config-NDOIVL6S.js} +3 -3
- package/dist/{global-upgrade-YNLHN2LI.js → global-upgrade-MS3WGHEP.js} +9 -9
- package/dist/{identity-ZF5BYVAH.js → identity-VXA3TZ7U.js} +4 -4
- package/dist/{live-capabilities-UDAEQC25.js → live-capabilities-2LCBHUWN.js} +4 -4
- package/dist/{paths-5CUJRNH3.js → paths-HOCSWOBY.js} +3 -3
- package/dist/{reapply-EHYJUX67.js → reapply-VYMO3QM6.js} +29 -29
- package/dist/src/index.js +34 -34
- package/dist/{upgrade-lock-ONZN26ZJ.js → upgrade-lock-XH5AQIOD.js} +4 -4
- package/dist/{usage-GF3ZBAH4.js → usage-EVX6CH5H.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
|
};
|
|
@@ -8562,7 +8956,7 @@ var isScopeContract = (value) => {
|
|
|
8562
8956
|
if (c.promises !== void 0 && !strings(c.promises)) return false;
|
|
8563
8957
|
return strings(c.allowedPaths) && strings(c.offLimitsPaths) && typeof c.doneWhen === "string";
|
|
8564
8958
|
};
|
|
8565
|
-
var
|
|
8959
|
+
var routeMatchingBestUnderOneArrowReading = (routes, toolName, args, repoKey) => {
|
|
8566
8960
|
let best;
|
|
8567
8961
|
let bestWeight = 0;
|
|
8568
8962
|
let bestScoped = -1;
|
|
@@ -8583,7 +8977,13 @@ var findBestRoute = (routes, toolName, args, repoKey) => {
|
|
|
8583
8977
|
bestLength = length;
|
|
8584
8978
|
}
|
|
8585
8979
|
}
|
|
8586
|
-
return best
|
|
8980
|
+
return best;
|
|
8981
|
+
};
|
|
8982
|
+
var isAMatchedRoute = (route) => route !== void 0;
|
|
8983
|
+
var routeWaitsForSomeoneElse = (route) => route.answeredBySomeoneElse === true;
|
|
8984
|
+
var findBestRoute = (routes, toolName, args, repoKey) => {
|
|
8985
|
+
const matched = underEachArrowReading(() => routeMatchingBestUnderOneArrowReading(routes, toolName, args, repoKey)).filter(isAMatchedRoute);
|
|
8986
|
+
return matched.find(routeWaitsForSomeoneElse) ?? matched[0] ?? routes.find((r) => r.toolPattern === "*");
|
|
8587
8987
|
};
|
|
8588
8988
|
var autoApprove = (tool) => ({
|
|
8589
8989
|
tool,
|
|
@@ -8698,11 +9098,13 @@ var resolvePolicyReading = (reach, config, toolName, modeOverride, toolInput, cw
|
|
|
8698
9098
|
}
|
|
8699
9099
|
return base;
|
|
8700
9100
|
};
|
|
8701
|
-
var
|
|
9101
|
+
var policyUnderOneArrowReading = (config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId) => {
|
|
8702
9102
|
const withoutRunners = resolvePolicyReading(SPELLS_WITHOUT_COMMAND_RUNNERS, config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId);
|
|
8703
9103
|
const withRunners = resolvePolicyReading(SPELLS_COMMAND_RUNNERS_TOO, config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId);
|
|
8704
9104
|
return strictestReadingOf(withRunners, withoutRunners);
|
|
8705
9105
|
};
|
|
9106
|
+
var keepingTheStrictestReading = (strictest, reading) => strictestReadingOf(reading, strictest);
|
|
9107
|
+
var resolvePolicy = (config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId) => underEachArrowReading(() => policyUnderOneArrowReading(config, toolName, modeOverride, toolInput, cwd, repoKey, sessionId)).reduce(keepingTheStrictestReading);
|
|
8706
9108
|
var VERDICT_RESTRAINT = { allow: 0, requires_human: 1, deny: 2 };
|
|
8707
9109
|
var verdictRestraint = (policy) => VERDICT_RESTRAINT[verdictForPolicy(policy)];
|
|
8708
9110
|
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 +9329,18 @@ var policyForScopeQuestion = (policy) => policy.timeoutAction === "approve" ? {
|
|
|
8927
9329
|
pushFirstSeconds: policy.pushFirstSeconds > 0 ? policy.pushFirstSeconds : SCOPE_QUESTION_FIRST_WAIT_SECONDS
|
|
8928
9330
|
} : policy;
|
|
8929
9331
|
var isAReading = (reading) => reading !== null && reading.trim() !== "";
|
|
9332
|
+
var readingsOfScriptsWrittenForAShell = (command) => readingsOfNestedShellScripts(command, scriptsWrittenForAShellOrAnEval);
|
|
8930
9333
|
var extraReadingsOf = (toolInput) => {
|
|
8931
9334
|
const { command } = toolInput;
|
|
8932
9335
|
if (typeof command !== "string" || command.length > LONGEST_COMMAND_READ_FOR_A_PUSH) return [];
|
|
8933
9336
|
const commentFree = readingWithoutCommentsOrAnsiEscapes(command);
|
|
8934
9337
|
const spelledOut = [command, commentFree].filter(isAReading).map(readingWithShellFormsSpelledOut);
|
|
9338
|
+
const scanned = [command, commentFree, ...spelledOut].filter(isAReading);
|
|
8935
9339
|
const readings = [
|
|
8936
9340
|
commentFree,
|
|
8937
9341
|
...spelledOut,
|
|
8938
|
-
...
|
|
9342
|
+
...scanned.flatMap(readingsOfScriptsPassedToAShell),
|
|
9343
|
+
...scanned.flatMap(readingsOfScriptsWrittenForAShell)
|
|
8939
9344
|
];
|
|
8940
9345
|
return readings.filter(isAReading).map((reading) => ({ ...toolInput, command: reading }));
|
|
8941
9346
|
};
|
|
@@ -8948,7 +9353,16 @@ var readingsNotYetJudged = (toolInputs) => {
|
|
|
8948
9353
|
});
|
|
8949
9354
|
};
|
|
8950
9355
|
var withExtraReadings = (input) => shellDialectOf(input.toolName) !== void 0 ? { ...input, toolInputs: [...input.toolInputs, ...readingsNotYetJudged(input.toolInputs)] } : input;
|
|
8951
|
-
var
|
|
9356
|
+
var GATE_VERDICT_RESTRAINT = { allow: 0, defer: 1, gate: 2, deny: 3, kill: 4 };
|
|
9357
|
+
var strictestGateVerdictOf = (strictest, verdict) => {
|
|
9358
|
+
const restraint = GATE_VERDICT_RESTRAINT[verdict.kind] - GATE_VERDICT_RESTRAINT[strictest.kind];
|
|
9359
|
+
if (restraint !== 0) return restraint > 0 ? verdict : strictest;
|
|
9360
|
+
return strictest.kind === "gate" && verdict.kind === "gate" ? { ...strictest, policy: strictestReadingOf(verdict.policy, strictest.policy) } : strictest;
|
|
9361
|
+
};
|
|
9362
|
+
var policyOfReadings = (readings) => readings.policy;
|
|
9363
|
+
var toolInputsOfReadings = (readings) => readings.toolInputs;
|
|
9364
|
+
var readingsAreAllowed = (readings) => verdictForPolicy(readings.policy) === "allow";
|
|
9365
|
+
var gateVerdictUnderOneArrowReading = (rawInput) => {
|
|
8952
9366
|
const input = withExtraReadings(rawInput);
|
|
8953
9367
|
const { modeState, config, toolName, toolInputs, cwd, sessionId } = input;
|
|
8954
9368
|
const repoKey = input.sharedRepoKey ?? input.repoKey;
|
|
@@ -8964,16 +9378,23 @@ var resolveGate = (rawInput) => {
|
|
|
8964
9378
|
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
9379
|
if (legacyPolicy) return { kind: "deny", policy: legacyPolicy, reason: `Denied by policy for ${legacyPolicy.tool}` };
|
|
8966
9380
|
}
|
|
8967
|
-
const
|
|
8968
|
-
|
|
8969
|
-
resolvePolicyAcross(config, toolName, modeState.mode, rawInput.toolInputs, cwd, repoKey, sessionId)
|
|
8970
|
-
|
|
9381
|
+
const written = {
|
|
9382
|
+
toolInputs: rawInput.toolInputs,
|
|
9383
|
+
policy: resolvePolicyAcross(config, toolName, modeState.mode, rawInput.toolInputs, cwd, repoKey, sessionId)
|
|
9384
|
+
};
|
|
9385
|
+
const extra = toolInputs.slice(rawInput.toolInputs.length).map((reading) => ({
|
|
9386
|
+
toolInputs: [reading],
|
|
9387
|
+
policy: resolvePolicy(config, toolName, modeState.mode, reading, cwd, repoKey, sessionId)
|
|
9388
|
+
}));
|
|
9389
|
+
const policy = extra.map(policyOfReadings).reduce(keepingTheStrictestReading, written.policy);
|
|
8971
9390
|
const verdict = verdictForPolicy(policy);
|
|
8972
9391
|
const autoDenies = verdict === "deny";
|
|
8973
9392
|
const allowedByBypassMode = !autoDenies && verdict !== "allow" && bypassModeAllows(input);
|
|
8974
|
-
const
|
|
9393
|
+
const allowed = [written, ...extra].filter(readingsAreAllowed);
|
|
9394
|
+
const allowedBy = allowed[0]?.policy;
|
|
9395
|
+
const askBesideARoutedPush = autoDenies || allowedBy === void 0 ? void 0 : askAtTheRouteOfAPush({ ...input, toolInputs: allowed.flatMap(toolInputsOfReadings) }, repoKey, allowedBy);
|
|
8975
9396
|
const autoApproves = (verdict === "allow" || allowedByBypassMode) && askBesideARoutedPush === void 0;
|
|
8976
|
-
const askedPolicy = askBesideARoutedPush
|
|
9397
|
+
const askedPolicy = askBesideARoutedPush === void 0 ? policy : strictestReadingOf(policy, askBesideARoutedPush);
|
|
8977
9398
|
if (autoDenies) return { kind: "deny", policy, reason: `Denied by policy for ${policy.tool}` };
|
|
8978
9399
|
if (isAskedInEveryMode(toolName)) return { kind: "gate", policy };
|
|
8979
9400
|
if (isModeStateDegraded(modeState)) {
|
|
@@ -9003,6 +9424,7 @@ var resolveGate = (rawInput) => {
|
|
|
9003
9424
|
scopePath: scopeReason && "path" in scopeVerdict ? widenablePath(scopeVerdict.path) : void 0
|
|
9004
9425
|
};
|
|
9005
9426
|
};
|
|
9427
|
+
var resolveGate = (rawInput) => underEachArrowReading(() => gateVerdictUnderOneArrowReading(rawInput)).reduce(strictestGateVerdictOf);
|
|
9006
9428
|
var noModeOverrideIsActive = (input) => (input.modeState.mode ?? input.config.modeOverride ?? null) === null;
|
|
9007
9429
|
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
9430
|
var claudePromptsBeforeAnEdit = (permissionMode) => permissionMode === "default";
|
|
@@ -9037,10 +9459,11 @@ var codexDeferredPreToolUse = () => ({ kind: "deny", reason: CODEX_PRE_TOOL_USE_
|
|
|
9037
9459
|
var isScopeReason = (scopeReason) => typeof scopeReason === "string" && scopeReason.length > 0;
|
|
9038
9460
|
var scopeBreachReasonOf = (verdict) => verdict.kind === "gate" && isScopeReason(verdict.scopeReason) ? verdict.scopeReason : void 0;
|
|
9039
9461
|
var onlyCodexPreToolUseCanAsk = (verdict, permissionMode) => verdict.kind === "gate" && (scopeBreachReasonOf(verdict) !== void 0 || !codexRaisesItsOwnPrompts(permissionMode));
|
|
9040
|
-
var
|
|
9462
|
+
var runsACommandThatNeedsAPersonUnderOneArrowReading = ({ toolName, toolInputs }) => SHELL_DIALECT_BY_TOOL.has(toolName) && toolInputs.some((toolInput) => {
|
|
9041
9463
|
const command = extractPolicyArg(toolName, toolInput);
|
|
9042
9464
|
return command !== void 0 && (commandNeedsAPerson(toolName, command) || commandWritesThroughARemoteApi(command));
|
|
9043
9465
|
});
|
|
9466
|
+
var runsACommandThatNeedsAPerson = (input) => underEitherArrowReading(() => runsACommandThatNeedsAPersonUnderOneArrowReading(input));
|
|
9044
9467
|
var namesASecretOrWorkflowFile = (path) => {
|
|
9045
9468
|
const written = withoutDotSegments(normalizeSeparators(path));
|
|
9046
9469
|
return SECRET_FILE_NAME.test(basenameOf(written)) || CI_WORKFLOW_FILE.test(written);
|
|
@@ -9051,10 +9474,11 @@ var editsAFileThatNeedsAPerson = ({ toolName, toolInputs }) => toolInputs.some((
|
|
|
9051
9474
|
const path = extractPolicyArg(toolName, toolInput);
|
|
9052
9475
|
return path !== void 0 && fileEditNeedsAPerson(toolName, path);
|
|
9053
9476
|
});
|
|
9054
|
-
var
|
|
9477
|
+
var runsADestructiveCommandUnderOneArrowReading = ({ toolName, toolInputs }) => SHELL_DIALECT_BY_TOOL.has(toolName) && toolInputs.some((toolInput) => {
|
|
9055
9478
|
const command = extractPolicyArg(toolName, toolInput);
|
|
9056
9479
|
return command !== void 0 && commandIsDestructive(toolName, command);
|
|
9057
9480
|
});
|
|
9481
|
+
var runsADestructiveCommand = (input) => underEitherArrowReading(() => runsADestructiveCommandUnderOneArrowReading(input));
|
|
9058
9482
|
var codexCallIsDestructive = (input, call) => call.deletesFiles || runsADestructiveCommand(input);
|
|
9059
9483
|
var connectorCallOnlyReads = ({ toolName, toolInputs }) => isCodexConnectorTool(toolName) && mcpToolOnlyReads(toolName) && !mcpToolAppNamesADatabase(toolName) && toolInputs.length > 0 && toolInputs.every((toolInput) => mcpToolInputOnlyReads(toolName, toolInput));
|
|
9060
9484
|
var fullAccessRunsThisConnectorReadUnasked = (input, verdict, call) => !codexRaisesItsOwnPrompts(call.permissionMode) && scopeBreachReasonOf(verdict) === void 0 && noModeOverrideIsActive(input) && connectorCallOnlyReads(input);
|
|
@@ -9232,7 +9656,7 @@ var pushSpellingsBeyondTheWrittenOnesIn = (input, toolInput) => [...pushesOfTheC
|
|
|
9232
9656
|
var writtenRouteArgumentsOf = (input, toolInput) => [...policyArgForms(input.toolName, toolInput, input.cwd), ...pushesOfTheCurrentBranchIn(input, toolInput)];
|
|
9233
9657
|
var routeArgumentsOf = (input, toolInput) => [...writtenRouteArgumentsOf(input, toolInput), ...pushSpellingsBeyondTheWrittenOnesIn(input, toolInput)];
|
|
9234
9658
|
var everyRule = () => true;
|
|
9235
|
-
var
|
|
9659
|
+
var aChosenRuleGovernsUnderOneArrowReading = (input, counts) => {
|
|
9236
9660
|
const chosen = input.config.policies.filter((policy) => !isDefaultRule(policy));
|
|
9237
9661
|
const routes = approvalRoutesOf(input.config);
|
|
9238
9662
|
if (routes === null) return true;
|
|
@@ -9243,8 +9667,8 @@ var aChosenRuleGoverns = (input, counts = everyRule) => {
|
|
|
9243
9667
|
return governing !== void 0 && counts(governing.policy) || findBestRoute(routes, input.toolName, routeArgumentsOf(input, toolInput), input.repoKey) !== void 0;
|
|
9244
9668
|
});
|
|
9245
9669
|
};
|
|
9670
|
+
var aChosenRuleGoverns = (input, counts = everyRule) => underEitherArrowReading(() => aChosenRuleGovernsUnderOneArrowReading(input, counts));
|
|
9246
9671
|
var AUTO_PERMISSION_MODE = "auto";
|
|
9247
|
-
var routeWaitsForSomeoneElse = (route) => route.answeredBySomeoneElse === true;
|
|
9248
9672
|
var routeDeliveredFor = (input, routes, toolInput) => {
|
|
9249
9673
|
const repoKey = input.sharedRepoKey ?? input.repoKey;
|
|
9250
9674
|
const written = writtenRouteArgumentsOf(input, toolInput);
|
|
@@ -9256,12 +9680,13 @@ var routeDeliveredFor = (input, routes, toolInput) => {
|
|
|
9256
9680
|
if (heldSpelledRoute !== void 0 && heldSpelledRoute.toolPattern.length > (writtenRoute?.toolPattern.length ?? -1)) return heldSpelledRoute;
|
|
9257
9681
|
return writtenRoute ?? findBestRoute(routes, input.toolName, spelled, repoKey);
|
|
9258
9682
|
};
|
|
9259
|
-
var
|
|
9683
|
+
var callWaitsForSomeoneElseUnderOneArrowReading = (input) => {
|
|
9260
9684
|
const routes = approvalRoutesOf(input.config);
|
|
9261
9685
|
if (routes === null) return false;
|
|
9262
9686
|
return withExtraReadings(input).toolInputs.some((toolInput) => routeDeliveredFor(input, routes, toolInput)?.answeredBySomeoneElse === true);
|
|
9263
9687
|
};
|
|
9264
|
-
var
|
|
9688
|
+
var callWaitsForSomeoneElse = (input) => underEitherArrowReading(() => callWaitsForSomeoneElseUnderOneArrowReading(input));
|
|
9689
|
+
var namedRouteWaitsForSomeoneElseUnderOneArrowReading = (input) => {
|
|
9265
9690
|
const routes = approvalRoutesOf(input.config);
|
|
9266
9691
|
if (routes === null) return false;
|
|
9267
9692
|
return withExtraReadings(input).toolInputs.some((toolInput) => {
|
|
@@ -9269,11 +9694,15 @@ var namedRouteWaitsForSomeoneElse = (input) => {
|
|
|
9269
9694
|
return route?.answeredBySomeoneElse === true && patternToolName(route.toolPattern) === input.toolName;
|
|
9270
9695
|
});
|
|
9271
9696
|
};
|
|
9272
|
-
var
|
|
9697
|
+
var namedRouteWaitsForSomeoneElse = (input) => underEitherArrowReading(() => namedRouteWaitsForSomeoneElseUnderOneArrowReading(input));
|
|
9698
|
+
var firstRouteHeldForSomeoneElseOrFirstOf = (matched) => matched.find(routeWaitsForSomeoneElse) ?? matched[0];
|
|
9699
|
+
var routesMatchedUnderOneArrowReading = (input) => {
|
|
9273
9700
|
const routes = approvalRoutesOf(input.config);
|
|
9274
|
-
if (routes === null) return
|
|
9275
|
-
|
|
9276
|
-
|
|
9701
|
+
if (routes === null) return [];
|
|
9702
|
+
return withExtraReadings(input).toolInputs.flatMap((toolInput) => routeDeliveredFor(input, routes, toolInput) ?? []);
|
|
9703
|
+
};
|
|
9704
|
+
var matchedRouteOf = (input) => {
|
|
9705
|
+
const route = firstRouteHeldForSomeoneElseOrFirstOf(underEachArrowReading(() => routesMatchedUnderOneArrowReading(input)).flat());
|
|
9277
9706
|
if (route === void 0) return void 0;
|
|
9278
9707
|
return route.repoKey ? { toolPattern: route.toolPattern, repoKey: route.repoKey } : { toolPattern: route.toolPattern };
|
|
9279
9708
|
};
|
|
@@ -9768,6 +10197,8 @@ export {
|
|
|
9768
10197
|
codexNativeApprovalResponse,
|
|
9769
10198
|
transcriptRecordPlaintext,
|
|
9770
10199
|
compressTranscriptRecord,
|
|
10200
|
+
SPAWN_LAUNCH_FAILED_CODE,
|
|
10201
|
+
SPAWN_UNCONFIRMED_ATTEMPT_FAILURE,
|
|
9771
10202
|
CLAUDE_INBOX,
|
|
9772
10203
|
parseClaudeInboxSession,
|
|
9773
10204
|
claudeInboxAction,
|