@poe-platform/safe-bash 0.1.824 → 0.1.825
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/dist/safe-bash/command-chunks/{chunk-PLVFJ6FF.js → chunk-4EA7WI3L.js} +9 -1
- package/dist/safe-bash/command-chunks/{chunk-3UDJYSAF.js → chunk-IX3B4HCD.js} +34 -2
- package/dist/safe-bash/command-chunks/{chunk-NNGWTDVJ.js → chunk-LFTGMUAV.js} +24 -81
- package/dist/safe-bash/command-chunks/{chunk-IKBTII7C.js → chunk-RZOHZGEZ.js} +126 -13
- package/dist/safe-bash/command-chunks/{chunk-3EBQOZET.js → chunk-WY6THI6J.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-NW3S6T6R.js → chunk-XSZNL3GV.js} +1 -1
- package/dist/safe-bash/commands/llm/collections.browser.js +4 -2
- package/dist/safe-bash/commands/llm/collections.js +1 -1
- package/dist/safe-bash-command-llm/collections.d.ts +2 -0
- package/dist/safe-bash-command-llm/collections.js +146 -22
- package/dist/safe-bash-command-llm/command.js +1 -1
- package/dist/safe-bash-command-llm/import-sql.d.ts +9 -0
- package/dist/safe-bash-command-llm/index.js +1 -1
- package/dist/safe-bash-command-python/build-wheel.d.ts +11 -2
- package/dist/safe-bash-command-python/executor.js +5 -5
- package/dist/safe-bash-command-python/index.js +5 -5
- package/dist/safe-bash-command-python/jspi.js +2 -2
- package/dist/safe-bash-command-python/provisioning.d.ts +1 -1
- package/dist/safe-bash-command-python/provisioning.js +1 -1
- package/dist/safe-bash-command-python/worker.js +1 -1
- package/dist/safe-bash-sqlite-engine/safe-fs.d.ts +6 -0
- package/dist/safe-bash-sqlite-engine/safe-fs.js +1 -1
- package/dist/safe-bash-sqlite-engine/sqlite-attachments.d.ts +5 -0
- package/dist/safe-bash-sqlite-engine/sqlite-input-snapshots.d.ts +20 -0
- package/dist/safe-bash-sqlite-engine/sqlite-query-records.d.ts +9 -0
- package/dist/safe-bash-sqlite-engine/sqlite-read-session.d.ts +3 -16
- package/dist/safe-bash-sqlite-engine/sqlite-session.d.ts +4 -0
- package/dist/safe-bash-sqlite-engine/sqlite-statement.d.ts +4 -0
- package/dist/safe-bash-sqlite-engine/storage.d.ts +2 -0
- package/dist/safe-bash-sqlite-engine/storage.js +324 -31
- package/dist/safe-bash-sqlite-engine/types.d.ts +1 -0
- package/package.json +2 -2
|
@@ -1939,7 +1939,15 @@ For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/St
|
|
|
1939
1939
|
import { yieldTurn as yieldTurn9 } from "../../safe-bash-contracts/yield.js";
|
|
1940
1940
|
|
|
1941
1941
|
// packages/safe-bash-command-llm/src/word-ranges.ts
|
|
1942
|
-
var wordRanges = [[48, 57], [65, 90], [95, 95], [97, 122], [170, 170], [178, 179], [181, 181], [185, 186], [188, 190], [192, 214], [216, 246], [248, 705], [710, 721], [736, 740], [748, 748], [750, 750], [880, 884], [886, 887], [890, 893], [895, 895], [902, 902], [904, 906], [908, 908], [910, 929], [931, 1013], [1015, 1153], [1162, 1327], [1329, 1366], [1369, 1369], [1376, 1416], [1488, 1514], [1519, 1522], [1568, 1610], [1632, 1641], [1646, 1647], [1649, 1747], [1749, 1749], [1765, 1766], [1774, 1788], [1791, 1791], [1808, 1808], [1810, 1839], [1869, 1957], [1969, 1969], [1984, 2026], [2036, 2037], [2042, 2042], [2048, 2069], [2074, 2074], [2084, 2084], [2088, 2088], [2112, 2136], [2144, 2154], [2208, 2228], [2230, 2247], [2308, 2361], [2365, 2365], [2384, 2384], [2392, 2401], [2406, 2415], [2417, 2432], [2437, 2444], [2447, 2448], [2451, 2472], [2474, 2480], [2482, 2482], [2486, 2489], [2493, 2493], [2510, 2510], [2524, 2525], [2527, 2529], [2534, 2545], [2548, 2553], [2556, 2556], [2565, 2570], [2575, 2576], [2579, 2600], [2602, 2608], [2610, 2611], [2613, 2614], [2616, 2617], [2649, 2652], [2654, 2654], [2662, 2671], [2674, 2676], [2693, 2701], [2703, 2705], [2707, 2728], [2730, 2736], [2738, 2739], [2741, 2745], [2749, 2749], [2768, 2768], [2784, 2785], [2790, 2799], [2809, 2809], [2821, 2828], [2831, 2832], [2835, 2856], [2858, 2864], [2866, 2867], [2869, 2873], [2877, 2877], [2908, 2909], [2911, 2913], [2918, 2927], [2929, 2935], [2947, 2947], [2949, 2954], [2958, 2960], [2962, 2965], [2969, 2970], [2972, 2972], [2974, 2975], [2979, 2980], [2984, 2986], [2990, 3001], [3024, 3024], [3046, 3058], [3077, 3084], [3086, 3088], [3090, 3112], [3114, 3129], [3133, 3133], [3160, 3162], [3168, 3169], [3174, 3183], [3192, 3198], [3200, 3200], [3205, 3212], [3214, 3216], [3218, 3240], [3242, 3251], [3253, 3257], [3261, 3261], [3294, 3294], [3296, 3297], [3302, 3311], [3313, 3314], [3332, 3340], [3342, 3344], [3346, 3386], [3389, 3389], [3406, 3406], [3412, 3414], [3416, 3425], [3430, 3448], [3450, 3455], [3461, 3478], [3482, 3505], [3507, 3515], [3517, 3517], [3520, 3526], [3558, 3567], [3585, 3632], [3634, 3635], [3648, 3654], [3664, 3673], [3713, 3714], [3716, 3716], [3718, 3722], [3724, 3747], [3749, 3749], [3751, 3760], [3762, 3763], [3773, 3773], [3776, 3780], [3782, 3782], [3792, 3801], [3804, 3807], [3840, 3840], [3872, 3891], [3904, 3911], [3913, 3948], [3976, 3980], [4096, 4138], [4159, 4169], [4176, 4181], [4186, 4189], [4193, 4193], [4197, 4198], [4206, 4208], [4213, 4225], [4238, 4238], [4240, 4249], [4256, 4293], [4295, 4295], [4301, 4301], [4304, 4346], [4348, 4680], [4682, 4685], [4688, 4694], [4696, 4696], [4698, 4701], [4704, 4744], [4746, 4749], [4752, 4784], [4786, 4789], [4792, 4798], [4800, 4800], [4802, 4805], [4808, 4822], [4824, 4880], [4882, 4885], [4888, 4954], [4969, 4988], [4992, 5007], [5024, 5109], [5112, 5117], [5121, 5740], [5743, 5759], [5761, 5786], [5792, 5866], [5870, 5880], [5888, 5900], [5902, 5905], [5920, 5937], [5952, 5969], [5984, 5996], [5998, 6e3], [6016, 6067], [6103, 6103], [6108, 6108], [6112, 6121], [6128, 6137], [6160, 6169], [6176, 6264], [6272, 6276], [6279, 6312], [6314, 6314], [6320, 6389], [6400, 6430], [6470, 6509], [6512, 6516], [6528, 6571], [6576, 6601], [6608, 6618], [6656, 6678], [6688, 6740], [6784, 6793], [6800, 6809], [6823, 6823], [6917, 6963], [6981, 6987], [6992, 7001], [7043, 7072], [7086, 7141], [7168, 7203], [7232, 7241], [7245, 7293], [7296, 7304], [7312, 7354], [7357, 7359], [7401, 7404], [7406, 7411], [7413, 7414], [7418, 7418], [7424, 7615], [7680, 7957], [7960, 7965], [7968, 8005], [8008, 8013], [8016, 8023], [8025, 8025], [8027, 8027], [8029, 8029], [8031, 8061], [8064, 8116], [8118, 8124], [8126, 8126], [8130, 8132], [8134, 8140], [8144, 8147], [8150, 8155], [8160, 8172], [8178, 8180], [8182, 8188], [8304, 8305], [8308, 8313], [8319, 8329], [8336, 8348], [8450, 8450], [8455, 8455], [8458, 8467], [8469, 8469], [8473, 8477], [8484, 8484], [8486, 8486], [8488, 8488], [8490, 8493], [8495, 8505], [8508, 8511], [8517, 8521], [8526, 8526], [8528, 8585], [9312, 9371], [9450, 9471], [10102, 10131], [11264, 11310], [11312, 11358], [11360, 11492], [11499, 11502], [11506, 11507], [11517, 11517], [11520, 11557], [11559, 11559], [11565, 11565], [11568, 11623], [11631, 11631], [11648, 11670], [11680, 11686], [11688, 11694], [11696, 11702], [11704, 11710], [11712, 11718], [11720, 11726], [11728, 11734], [11736, 11742], [11823, 11823], [12293, 12295], [12321, 12329], [12337, 12341], [12344, 12348], [12353, 12438], [12445, 12447], [12449, 12538], [12540, 12543], [12549, 12591], [12593, 12686], [12690, 12693], [12704, 12735], [12784, 12799], [12832, 12841], [12872, 12879], [12881, 12895], [12928, 12937], [12977, 12991], [13312, 19903], [19968, 40956], [40960, 42124], [42192, 42237], [42240, 42508], [42512, 42539], [42560, 42606], [42623, 42653], [42656, 42735], [42775, 42783], [42786, 42888], [42891, 42943], [42946, 42954], [42997, 43009], [43011, 43013], [43015, 43018], [43020, 43042], [43056, 43061], [43072, 43123], [43138, 43187], [43216, 43225], [43250, 43255], [43259, 43259], [43261, 43262], [43264, 43301], [43312, 43334], [43360, 43388], [43396, 43442], [43471, 43481], [43488, 43492], [43494, 43518], [43520, 43560], [43584, 43586], [43588, 43595], [43600, 43609], [43616, 43638], [43642, 43642], [43646, 43695], [43697, 43697], [43701, 43702], [43705, 43709], [43712, 43712], [43714, 43714], [43739, 43741], [43744, 43754], [43762, 43764], [43777, 43782], [43785, 43790], [43793, 43798], [43808, 43814], [43816, 43822], [43824, 43866], [43868, 43881], [43888, 44002], [44016, 44025], [44032, 55203], [55216, 55238], [55243, 55291], [63744, 64109], [64112, 64217], [64256, 64262], [64275, 64279], [64285, 64285], [64287, 64296], [64298, 64310], [64312, 64316], [64318, 64318], [64320, 64321], [64323, 64324], [64326, 64433], [64467, 64829], [64848, 64911], [64914, 64967], [65008, 65019], [65136, 65140], [65142, 65276], [65296, 65305], [65313, 65338], [65345, 65370], [65382, 65470], [65474, 65479], [65482, 65487], [65490, 65495], [65498, 65500], [65536, 65547], [65549, 65574], [65576, 65594], [65596, 65597], [65599, 65613], [65616, 65629], [65664, 65786], [65799, 65843], [65856, 65912], [65930, 65931], [66176, 66204], [66208, 66256], [66273, 66299], [66304, 66339], [66349, 66378], [66384, 66421], [66432, 66461], [66464, 66499], [66504, 66511], [66513, 66517], [66560, 66717], [66720, 66729], [66736, 66771], [66776, 66811], [66816, 66855], [66864, 66915], [67072, 67382], [67392, 67413], [67424, 67431], [67584, 67589], [67592, 67592], [67594, 67637], [67639, 67640], [67644, 67644], [67647, 67669], [67672, 67702], [67705, 67742], [67751, 67759], [67808, 67826], [67828, 67829], [67835, 67867], [67872, 67897], [67968, 68023], [68028, 68047], [68050, 68096], [68112, 68115], [68117, 68119], [68121, 68149], [68160, 68168], [68192, 68222], [68224, 68255], [68288, 68295], [68297, 68324], [68331, 68335], [68352, 68405], [68416, 68437], [68440, 68466], [68472, 68497], [68521, 68527], [68608, 68680], [68736, 68786], [68800, 68850], [68858, 68899], [68912, 68921], [69216, 69246], [69248, 69289], [69296, 69297], [69376, 69415], [69424, 69445], [69457, 69460], [69552, 69579], [69600, 69622], [69635, 69687], [69714, 69743], [69763, 69807], [69840, 69864], [69872, 69881], [69891, 69926], [69942, 69951], [69956, 69956], [69959, 69959], [69968, 70002], [70006, 70006], [70019, 70066], [70081, 70084], [70096, 70106], [70108, 70108], [70113, 70132], [70144, 70161], [70163, 70187], [70272, 70278], [70280, 70280], [70282, 70285], [70287, 70301], [70303, 70312], [70320, 70366], [70384, 70393], [70405, 70412], [70415, 70416], [70419, 70440], [70442, 70448], [70450, 70451], [70453, 70457], [70461, 70461], [70480, 70480], [70493, 70497], [70656, 70708], [70727, 70730], [70736, 70745], [70751, 70753], [70784, 70831], [70852, 70853], [70855, 70855], [70864, 70873], [71040, 71086], [71128, 71131], [71168, 71215], [71236, 71236], [71248, 71257], [71296, 71338], [71352, 71352], [71360, 71369], [71424, 71450], [71472, 71483], [71680, 71723], [71840, 71922], [71935, 71942], [71945, 71945], [71948, 71955], [71957, 71958], [71960, 71983], [71999, 71999], [72001, 72001], [72016, 72025], [72096, 72103], [72106, 72144], [72161, 72161], [72163, 72163], [72192, 72192], [72203, 72242], [72250, 72250], [72272, 72272], [72284, 72329], [72349, 72349], [72384, 72440], [72704, 72712], [72714, 72750], [72768, 72768], [72784, 72812], [72818, 72847], [72960, 72966], [72968, 72969], [72971, 73008], [73030, 73030], [73040, 73049], [73056, 73061], [73063, 73064], [73066, 73097], [73112, 73112], [73120, 73129], [73440, 73458], [73648, 73648], [73664, 73684], [73728, 74649], [74752, 74862], [74880, 75075], [77824, 78894], [82944, 83526], [92160, 92728], [92736, 92766], [92768, 92777], [92880, 92909], [92928, 92975], [92992, 92995], [93008, 93017], [93019, 93025], [93027, 93047], [93053, 93071], [93760, 93846], [93952, 94026], [94032, 94032], [94099, 94111], [94176, 94177], [94179, 94179], [94208, 100343], [100352, 101589], [101632, 101640], [110592, 110878], [110928, 110930], [110948, 110951], [110960, 111355], [113664, 113770], [113776, 113788], [113792, 113800], [113808, 113817], [119520, 119539], [119648, 119672], [119808, 119892], [119894, 119964], [119966, 119967], [119970, 119970], [119973, 119974], [119977, 119980], [119982, 119993], [119995, 119995], [119997, 120003], [120005, 120069], [120071, 120074], [120077, 120084], [120086, 120092], [120094, 120121], [120123, 120126], [120128, 120132], [120134, 120134], [120138, 120144], [120146, 120485], [120488, 120512], [120514, 120538], [120540, 120570], [120572, 120596], [120598, 120628], [120630, 120654], [120656, 120686], [120688, 120712], [120714, 120744], [120746, 120770], [120772, 120779], [120782, 120831], [123136, 123180], [123191, 123197], [123200, 123209], [123214, 123214], [123584, 123627], [123632, 123641], [124928, 125124], [125127, 125135], [125184, 125251], [125259, 125259], [125264, 125273], [126065, 126123], [126125, 126127], [126129, 126132], [126209, 126253], [126255, 126269], [126464, 126467], [126469, 126495], [126497, 126498], [126500, 126500], [126503, 126503], [126505, 126514], [126516, 126519], [126521, 126521], [126523, 126523], [126530, 126530], [126535, 126535], [126537, 126537], [126539, 126539], [126541, 126543], [126545, 126546], [126548, 126548], [126551, 126551], [126553, 126553], [126555, 126555], [126557, 126557], [126559, 126559], [126561, 126562], [126564, 126564], [126567, 126570], [126572, 126578], [126580, 126583], [126585, 126588], [126590, 126590], [126592, 126601], [126603, 126619], [126625, 126627], [126629, 126633], [126635, 126651], [127232, 127244], [130032, 130041], [131072, 173789], [173824, 177972], [177984, 178205], [178208, 183969], [183984, 191456], [194560, 195101], [196608, 201546]];
|
|
1942
|
+
var wordRanges = /* @__PURE__ */ (() => {
|
|
1943
|
+
let end = 0;
|
|
1944
|
+
return "1c,9;8,p;5,0;2,p;1c,0;8,1;2,0;4,1;2,2;2,m;2,u;2,cp;5,b;f,4;8,0;2,0;3m,4;2,1;3,3;2,0;7,0;2,2;2,0;2,j;2,2a;2,3u;9,4l;2,11;3,0;7,14;20,q;5,3;1a,16;m,9;5,1;2,2q;2,0;g,1;8,e;3,0;h,0;2,t;u,2g;c,0;f,16;a,1;5,0;6,l;5,0;a,0;4,0;o,o;8,a;1i,k;2,h;1p,1h;4,0;j,0;8,9;5,9;2,f;5,7;3,1;3,l;2,6;2,0;4,3;4,0;h,0;e,1;2,2;5,b;3,5;3,0;9,5;5,1;3,l;2,6;2,1;2,1;2,1;w,3;2,0;8,9;3,2;h,8;2,2;2,l;2,6;2,1;2,4;4,0;j,0;g,1;5,9;a,0;c,7;3,1;3,l;2,6;2,1;2,4;4,0;v,1;2,2;5,9;2,6;c,0;2,5;4,2;2,3;4,1;2,0;2,1;4,1;4,2;4,b;n,0;m,c;j,7;2,2;2,m;2,f;4,0;r,2;6,1;5,9;9,6;2,0;5,7;2,2;2,m;2,9;2,4;4,0;x,0;2,1;5,9;2,1;i,8;2,2;2,14;3,0;h,0;6,2;2,9;5,i;2,5;6,h;4,n;2,8;2,0;3,6;w,9;i,1b;2,1;d,6;a,9;14,1;2,0;2,4;2,n;2,0;2,9;2,1;a,0;3,4;2,0;a,9;3,3;x,0;w,j;d,7;2,z;s,4;38,16;l,a;7,5;5,3;4,0;4,1;8,2;5,c;d,0;2,9;7,11;2,0;6,0;3,16;2,98;2,3;3,6;2,0;2,3;3,14;2,3;3,w;2,3;3,6;2,0;2,3;3,e;2,1k;2,3;3,1u;f,j;4,f;h,2d;3,5;4,h7;3,g;2,p;6,22;4,a;8,c;2,3;f,h;f,h;f,c;2,2;g,1f;10,0;5,0;4,9;7,9;n,9;7,2g;8,4;3,x;2,0;6,1x;b,u;14,13;3,4;c,17;5,p;7,a;12,m;a,1g;18,9;7,9;e,0;2m,1a;i,6;5,9;16,t;e,1j;r,z;t,9;4,1c;3,8;8,16;3,2;16,3;2,5;2,1;4,0;6,5b;1t,7p;3,5;3,11;3,5;3,7;2,0;2,0;2,0;2,u;3,1g;2,6;2,0;4,2;2,6;4,3;3,5;5,c;6,2;2,6;38,1;3,5;6,a;7,c;2u,0;5,0;3,9;2,0;4,4;7,0;2,0;2,0;2,3;2,a;3,3;6,4;5,0;2,1l;k7,1n;27,l;hj,t;vh,1a;2,1a;2,3o;7,3;4,1;a,0;3,11;2,0;6,0;3,1j;8,0;h,m;a,6;2,6;2,6;2,6;2,6;2,6;2,6;2,6;29,0;d2,2;q,8;8,4;3,4;5,2d;7,2;2,2h;2,3;6,16;2,2l;4,3;b,v;1d,f;x,9;v,7;2,e;x,9;14,e;8x,533;1t,g70;4,wc;1w,19;3,7g;4,r;l,1a;h,u;3,27;14,8;3,2u;3,1g;3,8;17,c;2,2;2,3;2,m;e,5;b,1f;f,1d;t,9;p,5;4,0;2,1;2,11;b,m;q,s;8,1a;t,a;7,4;2,o;2,14;o,2;2,7;5,9;7,m;4,0;4,1d;2,0;4,1;3,4;3,0;2,0;p,2;3,a;8,2;d,5;3,5;3,5;a,6;2,6;2,16;2,d;7,36;e,9;7,8mb;d,m;5,1c;6it,a5;3,2x;13,6;d,4;6,0;2,9;2,c;2,4;2,0;2,1;2,1;2,2z;y,a2;j,1r;3,1h;15,b;39,4;2,3q;k,9;8,p;7,p;c,2g;4,5;3,5;3,5;3,2;10,b;2,p;2,i;2,1;2,e;3,d;z,3e;d,18;d,1k;i,1;6t,s;4,1c;h,q;5,z;a,t;6,11;b,t;3,z;5,7;2,4;17,4d;3,9;7,z;5,z;5,13;9,1f;4d,8m;a,l;b,7;49,5;3,0;2,17;2,1;4,0;3,m;3,u;3,11;9,8;1d,i;2,1;6,w;5,p;1z,1j;5,j;3,1a;g,3;2,2;2,s;b,8;o,u;2,v;x,7;2,r;7,4;h,1h;b,l;3,q;6,p;o,6;29,20;1k,1e;e,1e;8,15;d,9;87,u;2,15;7,1;27,13;9,l;c,3;2k,r;l,m;d,1g;r,t;k,18;x,o;8,9;a,z;g,9;5,0;3,0;9,y;4,0;d,1b;f,3;c,a;2,0;5,j;c,h;2,o;2d,6;2,0;2,3;2,e;2,9;8,1a;i,9;c,7;3,1;3,l;2,6;2,1;2,4;4,0;j,0;d,4;4f,1g;j,3;6,9;6,2;v,1b;l,1;2,0;9,9;4n,1a;16,3;11,1b;l,0;c,9;13,16;e,0;8,9;1j,q;m,b;5h,17;39,2a;d,7;3,0;3,7;2,1;2,n;g,0;2,0;f,9;1z,7;3,12;h,0;2,0;t,0;b,13;8,0;m,0;c,19;k,0;z,1k;7c,8;2,10;i,0;g,s;6,t;35,6;2,1;2,11;m,0;a,9;7,5;2,1;2,v;f,0;8,9;8n,i;5a,0;g,k;18,pl;2v,32;i,5f;24d,tq;34i,g6;6nu,fs;8,u;2,9;2v,t;j,1b;h,3;d,9;2,6;2,k;6,i;j5,2e;2y,22;6,0;1v,c;1t,1;2,0;t,4qf;9,yd;17,8;6wo,7y;1e,2;i,3;9,az;1s5,2y;6,c;4,8;8,9;4ef,j;31,o;3s,2c;2,1y;2,1;3,0;3,1;3,3;2,b;2,0;2,6;2,1s;2,3;3,7;2,6;2,r;2,3;2,4;2,0;4,6;2,9f;3,o;2,o;2,u;2,o;2,u;2,o;2,u;2,o;2,u;2,o;2,7;3,1d;1s1,18;b,6;3,9;5,0;aa,17;5,9;zr,5g;3,8;1d,1v;8,0;5,9;m0,1m;2,2;2,3;25,18;2,e;5f,3;2,q;2,1;2,0;3,0;2,9;2,3;2,0;2,0;7,0;5,0;2,0;2,0;2,2;2,1;2,0;3,0;2,0;2,0;2,0;2,0;2,1;2,0;3,3;2,6;2,3;2,3;2,0;2,9;2,g;6,2;2,4;2,g;g5,c;25g,9;sn,wyl;z,378;c,65;3,4g1;f,5rk;2e8,f1;15v,3t6".split(";").map((pair) => {
|
|
1945
|
+
const [gap, length] = pair.split(",").map((value) => parseInt(value, 36));
|
|
1946
|
+
const start = end + gap;
|
|
1947
|
+
end = start + length;
|
|
1948
|
+
return [start, end];
|
|
1949
|
+
});
|
|
1950
|
+
})();
|
|
1943
1951
|
|
|
1944
1952
|
// packages/safe-bash-command-llm/src/extract-range.ts
|
|
1945
1953
|
function isWord(value) {
|
|
@@ -69,11 +69,29 @@ function createSqliteVfs(options) {
|
|
|
69
69
|
if (failed) throw failure;
|
|
70
70
|
signal.throwIfAborted();
|
|
71
71
|
};
|
|
72
|
-
const
|
|
72
|
+
const confined = (name) => {
|
|
73
73
|
const prefix = directory + "/", leaf = name.slice(prefix.length);
|
|
74
74
|
if (!name.startsWith(prefix) || !leaf || leaf.includes("/") || leaf.includes("\0") || leaf === "." || leaf === "..") throw new FsError2("EACCES", { path: name, message: "SQLite file is outside its private directory" });
|
|
75
75
|
return name;
|
|
76
76
|
};
|
|
77
|
+
const visible = /* @__PURE__ */ new Map(), backing = /* @__PURE__ */ new Map();
|
|
78
|
+
for (const { path, name } of options.filenames ?? []) {
|
|
79
|
+
confined(path);
|
|
80
|
+
if (!name.startsWith("/") || name.includes("\0") || name.split("/").slice(1).some((part) => !part || part === "." || part === "..")) throw new RangeError("Invalid SQLite visible filename");
|
|
81
|
+
if (visible.has(path)) throw new TypeError("Duplicate SQLite backing filename");
|
|
82
|
+
visible.set(path, name);
|
|
83
|
+
if (!backing.has(name)) backing.set(name, path);
|
|
84
|
+
}
|
|
85
|
+
const shared = new Set(backing.values());
|
|
86
|
+
const filename = (name) => {
|
|
87
|
+
const exact = backing.get(name);
|
|
88
|
+
if (exact) return exact;
|
|
89
|
+
for (const suffix of ["-journal", "-wal", "-shm"]) if (name.endsWith(suffix)) {
|
|
90
|
+
const path = backing.get(name.slice(0, -suffix.length));
|
|
91
|
+
if (path) return confined(path + suffix);
|
|
92
|
+
}
|
|
93
|
+
return confined(name);
|
|
94
|
+
};
|
|
77
95
|
const entry = (id) => {
|
|
78
96
|
const value = handles.get(id);
|
|
79
97
|
if (!value) throw new FsError2("EBADF", { message: "Unknown SQLite file handle" });
|
|
@@ -128,12 +146,26 @@ function createSqliteVfs(options) {
|
|
|
128
146
|
return task;
|
|
129
147
|
};
|
|
130
148
|
return {
|
|
149
|
+
jFullPathname(name, out) {
|
|
150
|
+
try {
|
|
151
|
+
admit();
|
|
152
|
+
filename(name);
|
|
153
|
+
const value = visible.get(name) ?? name;
|
|
154
|
+
const { read, written } = new TextEncoder().encodeInto(value, out);
|
|
155
|
+
if (read !== value.length || written >= out.length) throw new FsError2("ENAMETOOLONG", { path: value });
|
|
156
|
+
out[written] = 0;
|
|
157
|
+
return 0;
|
|
158
|
+
} catch (error) {
|
|
159
|
+
fail(error);
|
|
160
|
+
return 10;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
131
163
|
async jOpen(name, id, flags, out) {
|
|
132
164
|
return execute(async () => {
|
|
133
165
|
if (handles.has(id) || opening.has(id) || handles.size + opening.size >= maxOpenFiles) throw new FsError2("EMFILE", { message: "SQLite open file limit exceeded" });
|
|
134
166
|
const temporary = name === null;
|
|
135
167
|
const path = filename(name ?? `${directory}/sqlite-temp-${crypto.randomUUID()}`);
|
|
136
|
-
if ([...opening.values()].includes(path) || [...handles.values()].some((value) => value.name === path)) throw new FsError2("EBUSY", { path, message: "SQLite private files require a single connection" });
|
|
168
|
+
if ([...opening.values()].includes(path) || !shared.has(path) && [...handles.values()].some((value) => value.name === path)) throw new FsError2("EBUSY", { path, message: "SQLite private files require a single connection" });
|
|
137
169
|
opening.set(id, path);
|
|
138
170
|
try {
|
|
139
171
|
const file = await open(path, { access: flags & 1 ? "read" : "readwrite", creation: temporary || flags & 16 ? "exclusive" : flags & 4 ? "ifMissing" : "never", noFollow: true, mode: 384, signal });
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createPythonPackageEnvironment,
|
|
3
3
|
createPythonPackageManifestStore,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
4
|
+
publishPythonBuildWheel,
|
|
5
|
+
pythonDocumentPackages
|
|
6
|
+
} from "./chunk-RZOHZGEZ.js";
|
|
7
7
|
import {
|
|
8
8
|
pythonShellDispatchActive
|
|
9
9
|
} from "./chunk-NHAG4DWL.js";
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
PythonInvocationError,
|
|
15
15
|
parsePythonInvocation,
|
|
16
16
|
pythonPackageUrlHash
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WY6THI6J.js";
|
|
18
18
|
import {
|
|
19
19
|
pythonLlmProvider
|
|
20
20
|
} from "./chunk-YYRVGXJH.js";
|
|
@@ -1948,65 +1948,9 @@ del _install_safe_llm_import
|
|
|
1948
1948
|
}
|
|
1949
1949
|
}
|
|
1950
1950
|
|
|
1951
|
-
// packages/safe-bash-command-python/src/build-wheel.ts
|
|
1952
|
-
import { FsError as FsError3 } from "../../safe-bash-contracts/index.js";
|
|
1953
|
-
import { resolvePath as resolvePath2, basename } from "../../safe-bash-contracts/path.js";
|
|
1954
|
-
async function publishPythonBuildWheel(source, directory, maxBytes, context) {
|
|
1955
|
-
const { fs, signal } = context, settings = { signal };
|
|
1956
|
-
signal.throwIfAborted();
|
|
1957
|
-
if (maxBytes !== Infinity && (!Number.isSafeInteger(maxBytes) || maxBytes < 0)) throw new RangeError("Invalid Python wheel size limit");
|
|
1958
|
-
const filename = basename(source);
|
|
1959
|
-
if (!filename.endsWith(".whl") || filename.includes("\\") || filename.includes("\0")) throw new TypeError("Invalid Python build wheel filename");
|
|
1960
|
-
const root = await fs.realpath(resolvePath2(context.cwd, directory), settings);
|
|
1961
|
-
const caps = await fs.capabilitiesFor?.(root, settings) ?? fs.capabilities;
|
|
1962
|
-
if (!fs.confineExtraction || !fs.prepareDirectory || !caps.retainedStagingWrite || !caps.retainedStagingCleanup || !caps.retainedRead || !caps.atomicFileStaging) throw new Error("Python wheel publication requires confined retained atomic staging");
|
|
1963
|
-
const artifact = await openPythonPackageFile(context, resolvePath2(context.cwd, source), maxBytes);
|
|
1964
|
-
if (!artifact) throw new Error("Python wheel publication requires retained source reads");
|
|
1965
|
-
let reading;
|
|
1966
|
-
try {
|
|
1967
|
-
const confined = await fs.confineExtraction([root], settings);
|
|
1968
|
-
const destination = new Proxy(confined, { get(target, key) {
|
|
1969
|
-
const owner = key === "openReadFile" ? fs : target, value = Reflect.get(owner, key);
|
|
1970
|
-
return typeof value === "function" ? value.bind(owner) : value;
|
|
1971
|
-
} });
|
|
1972
|
-
const parent = await destination.stat(root, settings), path = resolvePath2(root, artifact.key);
|
|
1973
|
-
try {
|
|
1974
|
-
await destination.prepareDirectory(path, { parent, expected: null, mode: 448, signal });
|
|
1975
|
-
} catch (error) {
|
|
1976
|
-
if (!(error instanceof FsError3) || !["EEXIST", "EAGAIN"].includes(error.code)) throw error;
|
|
1977
|
-
}
|
|
1978
|
-
if ((await destination.lstat(path, settings)).type !== "directory") throw new Error("Python wheel publication directory changed");
|
|
1979
|
-
const output = resolvePath2(path, filename);
|
|
1980
|
-
const body = async function* () {
|
|
1981
|
-
for (let offset = 0; offset < artifact.size; ) {
|
|
1982
|
-
const bytes = await (reading = artifact.read(offset, 65536));
|
|
1983
|
-
offset += bytes.length;
|
|
1984
|
-
yield bytes;
|
|
1985
|
-
}
|
|
1986
|
-
};
|
|
1987
|
-
const published = await stagePythonPackage({ ...context, fs: destination }, path, body(), maxBytes, () => {
|
|
1988
|
-
}, (key) => {
|
|
1989
|
-
if (key !== artifact.key) throw new Error("Built Python wheel integrity mismatch");
|
|
1990
|
-
}, () => output);
|
|
1991
|
-
if (!published) throw new Error("Python wheel publication requires retained atomic staging");
|
|
1992
|
-
try {
|
|
1993
|
-
return { url: "file://" + output.split("/").map(encodeURIComponent).join("/"), digest: published.key, size: published.size };
|
|
1994
|
-
} finally {
|
|
1995
|
-
await published.close();
|
|
1996
|
-
}
|
|
1997
|
-
} finally {
|
|
1998
|
-
try {
|
|
1999
|
-
await reading?.catch(() => {
|
|
2000
|
-
});
|
|
2001
|
-
} finally {
|
|
2002
|
-
await artifact.close();
|
|
2003
|
-
}
|
|
2004
|
-
}
|
|
2005
|
-
}
|
|
2006
|
-
|
|
2007
1951
|
// packages/safe-bash-command-python/src/source-origin.ts
|
|
2008
|
-
import { FsError as
|
|
2009
|
-
import { resolvePath as
|
|
1952
|
+
import { FsError as FsError3 } from "../../safe-bash-contracts/index.js";
|
|
1953
|
+
import { resolvePath as resolvePath2, dirname, basename } from "../../safe-bash-contracts/path.js";
|
|
2010
1954
|
function withPythonSourceOrigins(environment, directory, maxBytes) {
|
|
2011
1955
|
const origins = /* @__PURE__ */ new Map(), encoder2 = new TextEncoder();
|
|
2012
1956
|
return {
|
|
@@ -2018,12 +1962,12 @@ function withPythonSourceOrigins(environment, directory, maxBytes) {
|
|
|
2018
1962
|
const url = new URL(String(args[1]));
|
|
2019
1963
|
if (url.protocol === "file:" && url.hash.startsWith("#python-source=")) {
|
|
2020
1964
|
const parent = dirname(decodeURIComponent(url.pathname));
|
|
2021
|
-
if (
|
|
1965
|
+
if (basename(parent) !== result.key) return result;
|
|
2022
1966
|
let root;
|
|
2023
1967
|
try {
|
|
2024
|
-
root = await context.fs.realpath(
|
|
1968
|
+
root = await context.fs.realpath(resolvePath2(context.cwd, directory), { signal: context.signal });
|
|
2025
1969
|
} catch (error) {
|
|
2026
|
-
if (error instanceof
|
|
1970
|
+
if (error instanceof FsError3 && error.code === "ENOENT") return result;
|
|
2027
1971
|
throw error;
|
|
2028
1972
|
}
|
|
2029
1973
|
if (dirname(parent) !== root) return result;
|
|
@@ -2054,11 +1998,11 @@ function withPythonSourceOrigins(environment, directory, maxBytes) {
|
|
|
2054
1998
|
|
|
2055
1999
|
// packages/safe-bash-command-python/src/source-environment.ts
|
|
2056
2000
|
import { compareIdentity as compareIdentity2 } from "@poe-platform/safe-fs/core";
|
|
2057
|
-
import { FsError as
|
|
2058
|
-
import { resolvePath as
|
|
2001
|
+
import { FsError as FsError4, toByteSource as toByteSource7 } from "../../safe-bash-contracts/index.js";
|
|
2002
|
+
import { resolvePath as resolvePath4 } from "../../safe-bash-contracts/path.js";
|
|
2059
2003
|
|
|
2060
2004
|
// packages/safe-bash-command-python/src/source-download.ts
|
|
2061
|
-
import { dirname as dirname2, resolvePath as
|
|
2005
|
+
import { dirname as dirname2, resolvePath as resolvePath3 } from "../../safe-bash-contracts/path.js";
|
|
2062
2006
|
import { sha224, sha256, sha384, sha512 } from "@noble/hashes/sha2.js";
|
|
2063
2007
|
import { sha1, md5 } from "@noble/hashes/legacy.js";
|
|
2064
2008
|
async function* verifiedBytes(source, expected, maxBytes, signal) {
|
|
@@ -2083,7 +2027,7 @@ async function* verifiedBytes(source, expected, maxBytes, signal) {
|
|
|
2083
2027
|
}
|
|
2084
2028
|
}
|
|
2085
2029
|
async function downloadPythonSourceArchive(url, path, options, context) {
|
|
2086
|
-
const { fs, signal } = context, cacheDirectory =
|
|
2030
|
+
const { fs, signal } = context, cacheDirectory = resolvePath3(context.cwd, options.cacheDirectory ?? dirname2(path));
|
|
2087
2031
|
const caps = await fs.capabilitiesFor?.(cacheDirectory, { signal }) ?? fs.capabilities;
|
|
2088
2032
|
if (!caps.retainedStagingWrite || !caps.retainedStagingCleanup || !caps.retainedRead || !caps.atomicFileStaging || !fs.createStagedFile || !fs.openReadFile || !fs.publishStagedFile || !fs.confineExtraction) throw new Error("Remote Python sources require retained caller storage");
|
|
2089
2033
|
const output = await fs.confineExtraction([dirname2(path)], { signal });
|
|
@@ -2237,14 +2181,14 @@ function createPythonSourcePackageEnvironment(options, build) {
|
|
|
2237
2181
|
if (remote) {
|
|
2238
2182
|
if (!archived) return requirement;
|
|
2239
2183
|
} else {
|
|
2240
|
-
source =
|
|
2184
|
+
source = resolvePath4(context.cwd, source);
|
|
2241
2185
|
try {
|
|
2242
2186
|
const stat = await fs.stat(source, settings);
|
|
2243
2187
|
archived = stat.type === "file" && !!suffix;
|
|
2244
2188
|
if (editable && stat.type !== "directory") throw new Error("Editable source requires a local directory");
|
|
2245
2189
|
if (stat.type !== "directory" && !archived) return requirement;
|
|
2246
2190
|
} catch (error) {
|
|
2247
|
-
if (error instanceof
|
|
2191
|
+
if (error instanceof FsError4 && error.code === "ENOENT") {
|
|
2248
2192
|
if (editable) throw new Error("Editable source requires an existing local directory");
|
|
2249
2193
|
return requirement;
|
|
2250
2194
|
}
|
|
@@ -2254,17 +2198,17 @@ function createPythonSourcePackageEnvironment(options, build) {
|
|
|
2254
2198
|
const originSource = originalLink ?? source;
|
|
2255
2199
|
if (!context.stdout || !context.stderr || !context.env) throw new TypeError("Source package preparation requires command output and environment context");
|
|
2256
2200
|
if (!fs.prepareDirectory || !fs.removeTreeConditional || !fs.confineExtraction) throw new Error("Source packages require conditional caller storage");
|
|
2257
|
-
const root = await fs.realpath(
|
|
2201
|
+
const root = await fs.realpath(resolvePath4(context.cwd, build.directory), settings), parent = await fs.stat(root, settings);
|
|
2258
2202
|
const caps = await fs.capabilitiesFor?.(root, settings) ?? fs.capabilities;
|
|
2259
2203
|
if (!caps.atomicTreeRemoval) throw new Error("Source packages require conditional tree cleanup");
|
|
2260
2204
|
let path = "", owned;
|
|
2261
2205
|
for (let attempt = 0; attempt < 16; attempt++) {
|
|
2262
|
-
path =
|
|
2206
|
+
path = resolvePath4(root, ".python-build-" + ++serial2);
|
|
2263
2207
|
try {
|
|
2264
2208
|
owned = await fs.prepareDirectory(path, { parent, expected: null, mode: 448, signal });
|
|
2265
2209
|
break;
|
|
2266
2210
|
} catch (error) {
|
|
2267
|
-
if (!(error instanceof
|
|
2211
|
+
if (!(error instanceof FsError4) || !["EEXIST", "EAGAIN"].includes(error.code)) throw error;
|
|
2268
2212
|
signal.throwIfAborted();
|
|
2269
2213
|
}
|
|
2270
2214
|
}
|
|
@@ -2295,37 +2239,37 @@ function createPythonSourcePackageEnvironment(options, build) {
|
|
|
2295
2239
|
const configuration = { ...build.python, environment }, hook = createPythonBuildBackend(configuration), hookContext = { ...command, maxBytes: options.maxMetadataBytes ?? Infinity };
|
|
2296
2240
|
let prepared;
|
|
2297
2241
|
if (archived) {
|
|
2298
|
-
prepared =
|
|
2242
|
+
prepared = resolvePath4(path, "source");
|
|
2299
2243
|
await confined.mkdir(prepared, settings);
|
|
2300
2244
|
if (!build.extractArchive) throw new Error("Source archives require an extraction capability");
|
|
2301
2245
|
let metadata;
|
|
2302
2246
|
if (remote) {
|
|
2303
|
-
source =
|
|
2247
|
+
source = resolvePath4(path, "archive");
|
|
2304
2248
|
const response = await downloadPythonSourceArchive(remote, source, options, command);
|
|
2305
2249
|
const filename2 = await hook({ hook: "read_download_filename", source: remote.href, responseUrl: response.url, headers: response.headers }, hookContext);
|
|
2306
2250
|
const headers = new Map(response.headers.map(([key, value]) => [key.toLowerCase(), value]));
|
|
2307
2251
|
metadata = { filename: filename2, ...headers.has("content-type") ? { contentType: headers.get("content-type") } : {} };
|
|
2308
2252
|
}
|
|
2309
2253
|
if (!remote && originalLink && pythonPackageUrlHash(originalLink)) {
|
|
2310
|
-
const snapshot =
|
|
2254
|
+
const snapshot = resolvePath4(path, "archive" + suffix);
|
|
2311
2255
|
await snapshotPythonSourceArchive(source, snapshot, originalLink, options.maxDownloadBytes ?? Infinity, { ...command, fs: staging });
|
|
2312
2256
|
source = snapshot;
|
|
2313
2257
|
}
|
|
2314
2258
|
await build.extractArchive(source, prepared, options.maxDownloadBytes ?? Infinity, { ...command, fs: staging }, metadata);
|
|
2315
2259
|
} else prepared = editable ? await fs.realpath(source, settings) : (await createPythonSourceSnapshot(source, path, { ...command, fs: staging })).path;
|
|
2316
2260
|
if (subdirectory) {
|
|
2317
|
-
const selected =
|
|
2261
|
+
const selected = resolvePath4(prepared, subdirectory);
|
|
2318
2262
|
if (selected !== prepared && !selected.startsWith(prepared + "/")) throw new Error("Source subdirectory escapes the build tree");
|
|
2319
2263
|
const root2 = await fs.realpath(prepared, settings), actual = await fs.realpath(selected, settings);
|
|
2320
2264
|
if (actual !== root2 && !actual.startsWith(root2 + "/")) throw new Error("Source subdirectory escapes the build tree");
|
|
2321
2265
|
prepared = actual;
|
|
2322
2266
|
}
|
|
2323
|
-
const wheelDirectory =
|
|
2267
|
+
const wheelDirectory = resolvePath4(path, "wheels");
|
|
2324
2268
|
await confined.mkdir(wheelDirectory, settings);
|
|
2325
2269
|
const buildSystem = await hook({ hook: "read_build_system", source: prepared, name: requirement, installation: archived ? "archive" : "directory" }, hookContext);
|
|
2326
2270
|
await createPythonBuildDependencies(configuration)({ source: prepared, buildSystem }, hookContext);
|
|
2327
2271
|
const filename = await hook(editable ? { hook: "build_legacy_wheel", source: prepared, wheelDirectory, editable: true } : buildSystem ? { hook: "build_wheel", source: prepared, backend: buildSystem.backend, backendPath: buildSystem.backendPath, wheelDirectory } : { hook: "build_legacy_wheel", source: prepared, wheelDirectory }, hookContext);
|
|
2328
|
-
const published = await publishPythonBuildWheel(
|
|
2272
|
+
const published = await publishPythonBuildWheel(resolvePath4(wheelDirectory, filename), root, options.maxDownloadBytes ?? Infinity, context);
|
|
2329
2273
|
const origin = buildSystem && !editable ? await hook({ hook: "read_source_origin", source: originSource, directory: !archived }, hookContext) : void 0;
|
|
2330
2274
|
const url = published.url + "#python-source=" + encodeURIComponent(origin ?? "null");
|
|
2331
2275
|
await cleanup();
|
|
@@ -2812,7 +2756,6 @@ export {
|
|
|
2812
2756
|
createPythonSourceSnapshot,
|
|
2813
2757
|
pythonLlmPackages,
|
|
2814
2758
|
installPythonLlmPackages,
|
|
2815
|
-
publishPythonBuildWheel,
|
|
2816
2759
|
createPythonSourcePackageEnvironment,
|
|
2817
2760
|
createPythonExecutorCommands,
|
|
2818
2761
|
pythonExecutorCommands
|
|
@@ -2,6 +2,10 @@ import {
|
|
|
2
2
|
openPythonPackageFile
|
|
3
3
|
} from "./chunk-NXCJNPL3.js";
|
|
4
4
|
|
|
5
|
+
// packages/safe-bash-command-python/src/build-wheel.ts
|
|
6
|
+
import { FsError as FsError2 } from "../../safe-bash-contracts/index.js";
|
|
7
|
+
import { resolvePath as resolvePath2, basename } from "../../safe-bash-contracts/path.js";
|
|
8
|
+
|
|
5
9
|
// packages/safe-bash-command-python/src/package-download.ts
|
|
6
10
|
import { FsError } from "../../safe-bash-contracts/index.js";
|
|
7
11
|
import { resolvePath } from "../../safe-bash-contracts/path.js";
|
|
@@ -103,9 +107,67 @@ async function stagePythonPackage(context, directory, body, maxBytes, progress,
|
|
|
103
107
|
}
|
|
104
108
|
}
|
|
105
109
|
|
|
110
|
+
// packages/safe-bash-command-python/src/build-wheel.ts
|
|
111
|
+
async function publishPythonBuildWheel(source, directory, maxBytes, context) {
|
|
112
|
+
const { fs, signal } = context, settings = { signal };
|
|
113
|
+
let artifact = typeof source === "string" ? void 0 : source.artifact;
|
|
114
|
+
let reading;
|
|
115
|
+
try {
|
|
116
|
+
signal.throwIfAborted();
|
|
117
|
+
if (maxBytes !== Infinity && (!Number.isSafeInteger(maxBytes) || maxBytes < 0)) throw new RangeError("Invalid Python wheel size limit");
|
|
118
|
+
const filename = typeof source === "string" ? basename(source) : source.filename;
|
|
119
|
+
if (basename(filename) !== filename || !filename.endsWith(".whl") || filename.includes("\\") || filename.includes("\0")) throw new TypeError("Invalid Python build wheel filename");
|
|
120
|
+
const root = await fs.realpath(resolvePath2(context.cwd, directory), settings);
|
|
121
|
+
const caps = await fs.capabilitiesFor?.(root, settings) ?? fs.capabilities;
|
|
122
|
+
if (!fs.confineExtraction || !fs.prepareDirectory || !caps.retainedStagingWrite || !caps.retainedStagingCleanup || !caps.retainedRead || !caps.atomicFileStaging) throw new Error("Python wheel publication requires confined retained atomic staging");
|
|
123
|
+
if (typeof source === "string") artifact = await openPythonPackageFile(context, resolvePath2(context.cwd, source), maxBytes);
|
|
124
|
+
if (!artifact) throw new Error("Python wheel publication requires retained source reads");
|
|
125
|
+
if (artifact.size > maxBytes) throw new Error("Canonical package exceeds maxDownloadBytes");
|
|
126
|
+
const retained = artifact;
|
|
127
|
+
const confined = await fs.confineExtraction([root], settings);
|
|
128
|
+
const destination = new Proxy(confined, { get(target, key) {
|
|
129
|
+
const owner = key === "openReadFile" ? fs : target, value = Reflect.get(owner, key);
|
|
130
|
+
return typeof value === "function" ? value.bind(owner) : value;
|
|
131
|
+
} });
|
|
132
|
+
const parent = await destination.stat(root, settings), path = resolvePath2(root, artifact.key);
|
|
133
|
+
try {
|
|
134
|
+
await destination.prepareDirectory(path, { parent, expected: null, mode: 448, signal });
|
|
135
|
+
} catch (error) {
|
|
136
|
+
if (!(error instanceof FsError2) || !["EEXIST", "EAGAIN"].includes(error.code)) throw error;
|
|
137
|
+
}
|
|
138
|
+
if ((await destination.lstat(path, settings)).type !== "directory") throw new Error("Python wheel publication directory changed");
|
|
139
|
+
const output = resolvePath2(path, filename);
|
|
140
|
+
const body = async function* () {
|
|
141
|
+
for (let offset = 0; offset < retained.size; ) {
|
|
142
|
+
const bytes = await (reading = Promise.resolve(retained.read(offset, Math.min(65536, retained.size - offset))));
|
|
143
|
+
if (!bytes.length || bytes.length > Math.min(65536, retained.size - offset)) throw new Error("Invalid Python wheel read");
|
|
144
|
+
offset += bytes.length;
|
|
145
|
+
yield bytes;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
const published = await stagePythonPackage({ ...context, fs: destination }, path, body(), maxBytes, () => {
|
|
149
|
+
}, (key) => {
|
|
150
|
+
if (key !== retained.key) throw new Error("Built Python wheel integrity mismatch");
|
|
151
|
+
}, () => output);
|
|
152
|
+
if (!published) throw new Error("Python wheel publication requires retained atomic staging");
|
|
153
|
+
try {
|
|
154
|
+
return { url: "file://" + output.split("/").map(encodeURIComponent).join("/"), digest: published.key, size: published.size };
|
|
155
|
+
} finally {
|
|
156
|
+
await published.close();
|
|
157
|
+
}
|
|
158
|
+
} finally {
|
|
159
|
+
try {
|
|
160
|
+
await reading?.catch(() => {
|
|
161
|
+
});
|
|
162
|
+
} finally {
|
|
163
|
+
await artifact?.close?.();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
106
168
|
// packages/safe-bash-command-python/src/provisioning.ts
|
|
107
169
|
import { sha256 } from "@noble/hashes/sha2.js";
|
|
108
|
-
import { resolvePath as resolve, dirname } from "../../safe-bash-contracts/path.js";
|
|
170
|
+
import { resolvePath as resolve, dirname, basename as basename2 } from "../../safe-bash-contracts/path.js";
|
|
109
171
|
import { inheritYieldCheckpoint } from "../../safe-bash-contracts/yield.js";
|
|
110
172
|
|
|
111
173
|
// packages/safe-bash-command-python/src/manifest.ts
|
|
@@ -311,18 +373,20 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
311
373
|
const context = { ...input, signal };
|
|
312
374
|
signal.throwIfAborted();
|
|
313
375
|
const directory = options.cacheDirectory === void 0 ? void 0 : resolve(context.cwd, options.cacheDirectory, pythonPackageRuntimeKey);
|
|
314
|
-
const
|
|
376
|
+
const noCache = context.noCache ?? options.noCache ?? false;
|
|
377
|
+
const artifactDirectory = directory ?? (!options.cache && !noCache ? resolve(context.cwd, ".python-packages", "cache", pythonPackageRuntimeKey) : void 0);
|
|
378
|
+
const cache = options.cache ?? (artifactDirectory === void 0 ? defaultCache : {
|
|
315
379
|
async get(key) {
|
|
316
380
|
try {
|
|
317
|
-
return await context.fs.readFile(resolve(
|
|
381
|
+
return await context.fs.readFile(resolve(artifactDirectory, key), { signal });
|
|
318
382
|
} catch (error) {
|
|
319
383
|
if (missing(error)) return void 0;
|
|
320
384
|
throw error;
|
|
321
385
|
}
|
|
322
386
|
},
|
|
323
387
|
async set(key, bytes) {
|
|
324
|
-
await context.fs.mkdir(
|
|
325
|
-
await context.fs.writeFile(resolve(
|
|
388
|
+
await context.fs.mkdir(artifactDirectory, { recursive: true, signal });
|
|
389
|
+
await context.fs.writeFile(resolve(artifactDirectory, key), bytes, { signal });
|
|
326
390
|
}
|
|
327
391
|
});
|
|
328
392
|
const manifestCache = options.cacheDirectory === void 0 ? defaultCache : cache;
|
|
@@ -384,7 +448,7 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
384
448
|
}
|
|
385
449
|
};
|
|
386
450
|
const offline = context.offline ?? options.offline ?? false;
|
|
387
|
-
sessions.set(session, { ...context, cacheDirectory: directory,
|
|
451
|
+
sessions.set(session, { ...context, cacheDirectory: directory, artifactDirectory, noCache, cache, manifestCache, manifestRevision, controller: invocation, offline, requirements: unique, opening: false, retained: /* @__PURE__ */ new Map(), closed: false, manifest, aborted });
|
|
388
452
|
signal.addEventListener("abort", aborted, { once: true });
|
|
389
453
|
const controls = {};
|
|
390
454
|
for (const key of ["pre", "upgrade", "forceReinstall"]) if (context[key] ?? options[key]) controls[key] = true;
|
|
@@ -434,24 +498,65 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
434
498
|
return Array.from(bytes);
|
|
435
499
|
}
|
|
436
500
|
if (op === "package-retain") {
|
|
437
|
-
|
|
501
|
+
let artifact = session.opened;
|
|
438
502
|
if (!artifact || artifact.key !== String(args[1])) throw failure("Invalid package retention request");
|
|
503
|
+
if (artifact.url && artifact.close) {
|
|
504
|
+
const source = artifact;
|
|
505
|
+
const retaining = (async () => {
|
|
506
|
+
const path = decodeURIComponent(new URL(source.url).pathname);
|
|
507
|
+
const directory = resolve(session.cacheDirectory ?? resolve(session.cwd, ".python-packages"), "installed");
|
|
508
|
+
const capabilities = await session.fs.capabilitiesFor?.(directory, { signal: session.signal }) ?? session.fs.capabilities;
|
|
509
|
+
if (!session.fs.confineExtraction || !session.fs.prepareDirectory || !capabilities.retainedStagingWrite || !capabilities.retainedStagingCleanup || !capabilities.retainedRead || !capabilities.atomicFileStaging) return;
|
|
510
|
+
const target = resolve(directory, source.key, basename2(path));
|
|
511
|
+
if (path !== target) {
|
|
512
|
+
await session.fs.mkdir(directory, { recursive: true, signal: session.signal });
|
|
513
|
+
checkSession(session);
|
|
514
|
+
session.opened = void 0;
|
|
515
|
+
const published = await publishPythonBuildWheel({ filename: basename2(path), artifact: source }, directory, maxBytes, session);
|
|
516
|
+
artifact = await openPythonPackageFile(session, decodeURIComponent(new URL(published.url).pathname), maxBytes);
|
|
517
|
+
if (!artifact) throw failure("Installed Python wheels require retained reads");
|
|
518
|
+
if (artifact.key !== published.digest) {
|
|
519
|
+
await artifact.close?.();
|
|
520
|
+
throw failure("Installed Python wheel changed");
|
|
521
|
+
}
|
|
522
|
+
session.opened = artifact;
|
|
523
|
+
artifact.url = published.url;
|
|
524
|
+
try {
|
|
525
|
+
checkSession(session);
|
|
526
|
+
} catch (error) {
|
|
527
|
+
await release(session);
|
|
528
|
+
throw error;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const durable = new URL(artifact.url);
|
|
532
|
+
durable.hash = "sha256=" + artifact.key;
|
|
533
|
+
artifact.url = durable.href;
|
|
534
|
+
})();
|
|
535
|
+
session.retaining = retaining;
|
|
536
|
+
try {
|
|
537
|
+
await retaining;
|
|
538
|
+
} finally {
|
|
539
|
+
session.retaining = void 0;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
checkSession(session);
|
|
543
|
+
if (!artifact) throw failure("Installed Python wheel unavailable");
|
|
439
544
|
const token = String(++counter);
|
|
440
545
|
session.retained.set(token, artifact);
|
|
441
546
|
session.opened = void 0;
|
|
442
|
-
return { token, key: artifact.key, size: artifact.size };
|
|
547
|
+
return { token, key: artifact.key, size: artifact.size, ...artifact.url ? { url: artifact.url } : {} };
|
|
443
548
|
}
|
|
444
549
|
if (op === "package-close") {
|
|
445
550
|
if (session.opened?.key === String(args[1])) await release(session);
|
|
446
551
|
return null;
|
|
447
552
|
}
|
|
448
553
|
if (op !== "package-open" || typeof args[1] !== "string") throw failure("Invalid package operation");
|
|
449
|
-
if (session.opening) throw failure("Package download already in progress");
|
|
554
|
+
if (session.opening || session.retaining) throw failure("Package download already in progress");
|
|
450
555
|
session.opening = true;
|
|
451
556
|
try {
|
|
452
557
|
await release(session);
|
|
453
558
|
checkSession(session);
|
|
454
|
-
const url = args[1], { cacheDirectory, noCache } = session;
|
|
559
|
+
const url = args[1], { artifactDirectory: cacheDirectory, noCache } = session;
|
|
455
560
|
const expected = args[2];
|
|
456
561
|
let responseUrl = url;
|
|
457
562
|
const verifyIntegrity = (key2) => {
|
|
@@ -466,6 +571,7 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
466
571
|
let headers = [];
|
|
467
572
|
const adopt = async (artifact, ready) => {
|
|
468
573
|
session.opened = artifact;
|
|
574
|
+
if (canonicalWheel) artifact.url = url;
|
|
469
575
|
try {
|
|
470
576
|
checkSession(session);
|
|
471
577
|
await ready();
|
|
@@ -615,7 +721,7 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
615
721
|
checkSession(session);
|
|
616
722
|
verifyIntegrity(key);
|
|
617
723
|
const value = bytes;
|
|
618
|
-
session.opened = { key, size: bytes.length, read: (offset, length) => value.subarray(offset, offset + length) };
|
|
724
|
+
session.opened = { key, size: bytes.length, ...canonicalWheel ? { url } : {}, read: (offset, length) => value.subarray(offset, offset + length) };
|
|
619
725
|
return { key, size: bytes.length, headers, url: responseUrl };
|
|
620
726
|
} finally {
|
|
621
727
|
session.opening = false;
|
|
@@ -631,7 +737,14 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
631
737
|
session.signal.removeEventListener("abort", session.aborted);
|
|
632
738
|
session.controller.abort(failure("Python package session is closed"));
|
|
633
739
|
sessions.delete(start.session);
|
|
634
|
-
|
|
740
|
+
const retired = release(session, true);
|
|
741
|
+
return Promise.allSettled([session.retaining, retired]).then(async () => {
|
|
742
|
+
try {
|
|
743
|
+
await retired;
|
|
744
|
+
} finally {
|
|
745
|
+
await release(session, true);
|
|
746
|
+
}
|
|
747
|
+
});
|
|
635
748
|
}
|
|
636
749
|
},
|
|
637
750
|
dispose() {
|
|
@@ -650,7 +763,7 @@ function createPythonPackageEnvironment(options = {}) {
|
|
|
650
763
|
}
|
|
651
764
|
|
|
652
765
|
export {
|
|
653
|
-
|
|
766
|
+
publishPythonBuildWheel,
|
|
654
767
|
PythonPackageConflictError,
|
|
655
768
|
createPythonPackageManifestStore,
|
|
656
769
|
createPythonPackageCache,
|
|
@@ -68,7 +68,7 @@ function parsePythonInvocation(args, env) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// packages/safe-bash-command-python/src/package-program.generated.ts
|
|
71
|
-
var pythonPackageProgramGzip = "H4sIAAAAAAACA7U7a4/cNpLf9Su4uMVKijVy4j0vdhtoJEbs3BlInNzY2SDX7hU4EnuaGbWkkGyPO5P574cqvvWYae8hn7pFkVXFYr2LatiOCEabSvZHUbOqF/yad5lgvx6ZVPkqIfww9EIRwQryi+y7hOxEfyBH0bb8qhyokMxOOYpWDi1XBfw7dvg/IRowWRMDc5PqkXSbEL4zr0upqFDylqt9lj5NAa/GM1C1b/mVRfEDVfuEeJjwnOmnvKSyOgqe5QngJ2tHj52QkI6ptq/1q1I/IBHpVynhnXkNuGvBGtYpTltZkH0vFVmbt6UGmX6VFuSLPCGwvOuBP+WBqnqfifRf7//8/m7z4uJ/6cVvn1/846LaPnl/n63mRvMv/5wWIbZ85YkEvAkRTB5bwH+XHkWbrgLmZhnsQ9Z7dmCFWYfML4Ft+t+vRyZOBUnTPL9PiDxeNVywWvXihEdSSkYFUr35j79sw9frbPOvv2w/y9OCOP7BeQVTVoa4TRqOpluyjqaV16I/Dhlwi3e7HrZyn3i+GakI1sMJ7Kncs2ZEYyb39Ivf5Z4+e/af8PPXv+PPs+d/g5/nXzz7/dA8z9fZhl7sPr/4x/ZJRD2g1GBXSMgmhSckVw87QskTkq5T8iQef5YnbsMNFxXASAHo3B4IayUjKRDOPzA9FzDBHwCjjqJDhSqb42GQmQYM1ApV3bCTXL8TR5YniZF8mEqoJJWkO1ahJuq/gknVC95dkzX5hraS2RX6B7T0wBRtqKJ+vR0xMAbB2p42yO9N4+Zv0jf0wNIt2fWCNKAh8eqy4VIJfnVUvO9klgMvpqu3CWrygdeiH/hQVnV/GKilj+gnfsVbrk5VS09MeDr1yxGAgdY39JpVB9rRaya8bcDh78wowHhLdyweHoG63TPWolAaID/BwGsYsOvdyHgbR8Vb6XaxZ/VNZffSsmALozdjMB9Y1/SCNWZbvLsupaiDJ5AuLtiBdcqhu/RjjtBgrCCvuw+05c3cvOmrTyYp3jrt+o7XtOW/saqjh2Dv8JQkdUtlfBhfh2eehUcNlv8rqaji9YGpfd8khMpTV5OG7QjIqIGQAWiJfsLoEr2lXBm8VkI6qvgHO/cBwDum6n11dVJMgkktyM0tFdcR+GwOvluR56XqzePjiEBpuuuKdk21Z7RhYor1A22P4OC8upewezlLhtU4TYmnGYFsUsU+qnRb2EeDMt0miSdMA0R1qJDITLJ2hy7E0lUQf0Ts48BqhfYC5pXaCIP+o+s1o/AfzeCbvmPJ+K2luoJB2jWES95JRbuaIfKy7oXfW0EaXiPuCfJoXnnNVJZqetI8Oe/4CgczPsjYAJRVICfubAKeJRNOiv4A28tqiCMQkQ6waLsewbZTYYe4mKzdXDxXM1xq+NrTVC7QcRvFSckCcLImqIxaMLM5UvORMXC+w2j7d6EvcVjs6IJENf1tB+JrhEqzMZYqbfkx4NzpY600WolhAkiQ18YknHGmksxQUuKJBAKc5wF6v3Pp0LuxNVnG4dQxoEs7+Tsb+66CDRQkBQNlx+D/PWrxiIz1DL8zJ/asq/uGZelR7S7+nub5wkmghrWtOQhFxTVTs0cATPc0Iuspl4xcHjvFD+yVEL3I0u+MmBDeKSY62hIGL1aEKsUOAyip6olBauT6iu16wYg9CYhcuPoSdNWF9elwGnjqjsJaFy8K2qzYM0zCc7lLf/j5+5evX76q3n7/4+
|
|
71
|
+
var pythonPackageProgramGzip = "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";
|
|
72
72
|
|
|
73
73
|
// packages/safe-bash-command-python/src/package-program.ts
|
|
74
74
|
var decoded;
|
|
@@ -77,7 +77,7 @@ function loadPythonPackageProgram() {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
// packages/safe-bash-command-python/src/native-wheel.generated.ts
|
|
80
|
-
var pythonNativeWheelGzip = "
|
|
80
|
+
var pythonNativeWheelGzip = "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";
|
|
81
81
|
|
|
82
82
|
// packages/safe-bash-command-python/src/native-wheel.ts
|
|
83
83
|
var decoded2;
|