@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.
Files changed (32) hide show
  1. package/dist/safe-bash/command-chunks/{chunk-PLVFJ6FF.js → chunk-4EA7WI3L.js} +9 -1
  2. package/dist/safe-bash/command-chunks/{chunk-3UDJYSAF.js → chunk-IX3B4HCD.js} +34 -2
  3. package/dist/safe-bash/command-chunks/{chunk-NNGWTDVJ.js → chunk-LFTGMUAV.js} +24 -81
  4. package/dist/safe-bash/command-chunks/{chunk-IKBTII7C.js → chunk-RZOHZGEZ.js} +126 -13
  5. package/dist/safe-bash/command-chunks/{chunk-3EBQOZET.js → chunk-WY6THI6J.js} +2 -2
  6. package/dist/safe-bash/command-chunks/{chunk-NW3S6T6R.js → chunk-XSZNL3GV.js} +1 -1
  7. package/dist/safe-bash/commands/llm/collections.browser.js +4 -2
  8. package/dist/safe-bash/commands/llm/collections.js +1 -1
  9. package/dist/safe-bash-command-llm/collections.d.ts +2 -0
  10. package/dist/safe-bash-command-llm/collections.js +146 -22
  11. package/dist/safe-bash-command-llm/command.js +1 -1
  12. package/dist/safe-bash-command-llm/import-sql.d.ts +9 -0
  13. package/dist/safe-bash-command-llm/index.js +1 -1
  14. package/dist/safe-bash-command-python/build-wheel.d.ts +11 -2
  15. package/dist/safe-bash-command-python/executor.js +5 -5
  16. package/dist/safe-bash-command-python/index.js +5 -5
  17. package/dist/safe-bash-command-python/jspi.js +2 -2
  18. package/dist/safe-bash-command-python/provisioning.d.ts +1 -1
  19. package/dist/safe-bash-command-python/provisioning.js +1 -1
  20. package/dist/safe-bash-command-python/worker.js +1 -1
  21. package/dist/safe-bash-sqlite-engine/safe-fs.d.ts +6 -0
  22. package/dist/safe-bash-sqlite-engine/safe-fs.js +1 -1
  23. package/dist/safe-bash-sqlite-engine/sqlite-attachments.d.ts +5 -0
  24. package/dist/safe-bash-sqlite-engine/sqlite-input-snapshots.d.ts +20 -0
  25. package/dist/safe-bash-sqlite-engine/sqlite-query-records.d.ts +9 -0
  26. package/dist/safe-bash-sqlite-engine/sqlite-read-session.d.ts +3 -16
  27. package/dist/safe-bash-sqlite-engine/sqlite-session.d.ts +4 -0
  28. package/dist/safe-bash-sqlite-engine/sqlite-statement.d.ts +4 -0
  29. package/dist/safe-bash-sqlite-engine/storage.d.ts +2 -0
  30. package/dist/safe-bash-sqlite-engine/storage.js +324 -31
  31. package/dist/safe-bash-sqlite-engine/types.d.ts +1 -0
  32. 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 filename = (name) => {
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
- pythonDocumentPackages,
5
- stagePythonPackage
6
- } from "./chunk-IKBTII7C.js";
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-3EBQOZET.js";
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 FsError4 } from "../../safe-bash-contracts/index.js";
2009
- import { resolvePath as resolvePath3, dirname, basename as basename2 } from "../../safe-bash-contracts/path.js";
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 (basename2(parent) !== result.key) return result;
1965
+ if (basename(parent) !== result.key) return result;
2022
1966
  let root;
2023
1967
  try {
2024
- root = await context.fs.realpath(resolvePath3(context.cwd, directory), { signal: context.signal });
1968
+ root = await context.fs.realpath(resolvePath2(context.cwd, directory), { signal: context.signal });
2025
1969
  } catch (error) {
2026
- if (error instanceof FsError4 && error.code === "ENOENT") return result;
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 FsError5, toByteSource as toByteSource7 } from "../../safe-bash-contracts/index.js";
2058
- import { resolvePath as resolvePath5 } from "../../safe-bash-contracts/path.js";
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 resolvePath4 } from "../../safe-bash-contracts/path.js";
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 = resolvePath4(context.cwd, options.cacheDirectory ?? dirname2(path));
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 = resolvePath5(context.cwd, 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 FsError5 && error.code === "ENOENT") {
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(resolvePath5(context.cwd, build.directory), settings), parent = await fs.stat(root, settings);
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 = resolvePath5(root, ".python-build-" + ++serial2);
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 FsError5) || !["EEXIST", "EAGAIN"].includes(error.code)) throw error;
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 = resolvePath5(path, "source");
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 = resolvePath5(path, "archive");
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 = resolvePath5(path, "archive" + suffix);
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 = resolvePath5(prepared, subdirectory);
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 = resolvePath5(path, "wheels");
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(resolvePath5(wheelDirectory, filename), root, options.maxDownloadBytes ?? Infinity, context);
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 cache = options.cache ?? (directory === void 0 ? defaultCache : {
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(directory, key), { signal });
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(directory, { recursive: true, signal });
325
- await context.fs.writeFile(resolve(directory, key), bytes, { signal });
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, noCache: context.noCache ?? options.noCache ?? false, cache, manifestCache, manifestRevision, controller: invocation, offline, requirements: unique, opening: false, retained: /* @__PURE__ */ new Map(), closed: false, manifest, aborted });
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
- const artifact = session.opened;
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
- return release(session, true);
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
- stagePythonPackage,
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 = "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";
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 = "H4sIAAAAAAACA51WTW/cNhC976+Y5iIJltWNgwSFYRVw0RTIoUnQGi3gYCHQ0mg1XYkUSMq7619f8ENaSl67aG7icGbe45vhUKsKaygUq7HAg5as1AVnmh6x2DeIbSyRVSkolMRaesIquV4Bdb2QGkgAUzC6k0jhHyV4aDPrFFQzaGpDu7OsoJaig57ppqWHMetXphvr+9n6mqV3fKK+phZHx3vqfzPLk+899WPOo6iomlyLnpU7tsWiFaxCGVJxlnlYVtc0hsqBF+rIyxn9Iy9XKyhbpibsv61aJzGyP9j+05dfmEKjGFiVC+KkiyJW2NYpKHpye2DWmVmm7rMXijQJDjk469pnMMVgDy3aDC5Woh4khzs5oHdSiLv/dNLYts8dZuhBOs9Y1LVCncK+QV5ivnaxVHsDcKGBOMTrFN6mcOW2QTJSCH+xdsCPUgoZR8QfWUuVD4sS4xac2cHAhU00o5SepEq+ueiNpzDF38A6xP3ypwO9ukoh+uSBmdwOHXLtoJeaBwKMwiw0MXUIqphfvh1l7Bhx4lvIoWOHib9xgss5kIM2G3kQR7WzkYLPgiMI6dY3sAZsFUJHPHZNMQXZTGLQ/aAhh4ejRiYlO8bWvm/MHWmRx84jgRub0WuEami1ZeBPFGg9Ql0G0Sl8eP/+3YfE5jZsG6aY1jJ2mVKIdIM88qU/5Q+vjvd1Kcpm4DtPW812qLYN5RyEtGewiwR+hiWvEW9W86neX4+6ERz8FHApXe29bhkeNPLK57cb8664yAP8oDEcbU9itZrOWQpe0zY4uBmFmRk2Kg6G6Qr2pJvzM8Sl+BaZo0abJBxATJYNPdoaUg0RcY1bSfoYmes3j3dX1M2yhikzaY2FtVshSTddCnjosdRYBWRH6FNie83KBsudGjrIx1QZx3085QoazlXtOl9SzmyjuR669g3gkmZDXzGNgcRUnzYbPFS0RaXjBH7IJ84vTZhFwadzQEeqY7psriGCC5gz9yWN3ryJvLAdalYxzQrOOnxJXPtydFRK0VOfjSGj5vYVLSpSuiBei6Ki2fMzIVQkp2SLh27xIt5T7x5FmDXPPfXxQuxZzzxR79Qy762p9el9jc+xiYPA9FlnzJXZJAn8CNHvH+9uf729u438bLFyzi5ANXS9iucHmQMpLWPDMElsqxQaDzpGXoqK+DaPBl1f/hTZ8TOGaSa3qF840ch3/LepSEYbW9vQ8ryybtjOfxKyLZoiKs3adqbQCOKYGDWe0cu6nYnomUSuVW5eYnPzTFuInV2GMe7/KCsGbjq48P2wLG+6wDAZvqcjqH5VOgPtq5ypoa7pAHkOUbZv2sh11EImhdr9PE799ErOFM72mTvRy30XbZJz0FN1mGYGQ30vcliN6shbelDBfAz6wW+eqc3/kvQM/iv3Z04sWb3y/+62QlPhfunPbDh6yepfGFf6SBQMAAA=";
80
+ var pythonNativeWheelGzip = "H4sIAAAAAAACA61YW4/dthF+P79imjxIgrXK2q2NYGEFtR23MIrahrNpABsLgSuOjpilSIGkfPb41xdDUhJ19lIk6JtEcr65X8gdxw4ayzps8NYZ1rpGMSe+YnPoEWVukPESLBrBpPiGvLjYgRhGbRwIDczCfFzoEn63WqVr9F+C7ScnZLoeVnbQGT3AyFwvxfWM+pG53p9978/Sbzz4TYydkDgf/CzGf9DvevazGGfMo+aCL0ebkbU3bI+N1IyjSUUJK1uyquvETGom1dijajfiH1W720ErmV14/+attRqj+sQO7z68ZhbJYuCt3AglXNPkFmVXghXfwh7Qf0W/ZfgctRVOaAU1hNXziEDOYNcSPUKgNegmo+DSTBgPWcSb/3nIoZR3D2y4J3BRYt11Fl0Jhx5Vi/V5oBVdXAClHQgF+XkJT0t4FrbBMGER/sPkhG+N0SbPhPrKpOCRLCvoWKJzYANPPNBGpHI1VfElUF9FERb6l3Ce8v3wS2D67FkJ2bvImJn9NKBygfWpzRMDzIY5sQn5IfFiffZ0NuPAhBJqDzUM7HaRnw7B2ZZRYE0bdUInurAmLLzXCkGb8P8SzgGlRRiEykNQLEQe6Xt48/Hoeq1gNPoaLTAHg7YOXvwN/iVewxMQzsKzZ2fXR4fw9sObn6FHCv0KPrieMoAwWq3sNKCxMEzWAWtbHB3YnjLBB7RX3YJQ1iHjoDs6Mw2TZI7EZ+CrRpXotgr84vnz5z96YfXkxslBDSQMM4Ydc79+6CmhJao8nCjgpYeJDkU7SefNFc2fBMbM5iyh9iz/+qLw2GTanlnmnMkDUgmZ61FlMU5X/DTP49kA0faTuoli282O6Hz0hwPaeB38TwE/walcM79NgC7BObsxlKwAGQI12q3CW4eKR3y/sQ3hJ3XCP4niIHYUYreD7+ETOiYUuB5hFEohB6EcmtGgQwMjM5aqpeJgcJSsRdBKHn0kIdujAS4Mtk6bI4H1THHddRVc9ggHobg+AKpOmxatZ2HZgMCxlcwgB1SciuprEurdh5wzx4oShGrlxIXaE+LAZKfNgPwHZybVMoccOoGS2wreKmeOoK9/x9ZZsE5ICdcotdqD0xA8OPeIKtb3ViuHty7pNnFlYMrrkxT57c4O/v7Qhi/tcW+xRxNsl1s9mTaU+ciRWUda2hFbVwIhHQwbdwDaiL1QTFIALv2saj4hk/9E94a4Kmd3AM4gJRazrvJc8hmk4shRuTyiV3t0gX8+Yxc+Fyh/IgCfhjFfkTLyAtTQjVVIMvENm5YXWVFda378cn5F9NdT16F5AKEboQahq41ft/ShcX7CgxEOPe17zfHSMGW9u81cTanU1JEdfVEf9Pb+KqxwzStrxV7FQqw0j+0UbM9GTMXze3Oext1QRmIq+vwJ/J7U8HSuBz5rqA7foQ0ypdSzlHfoSYpWj8dG6pZRft6xVhi/1tgJuZN3Y2gvWwdETXcJB1rwbvUGhXoxbbFGS9ysvOVyWqRN0S0bQfu/1PCU6te8OmtF68Epvmh9mpQTw9zPf1V2Gim4kS+J9+7jWhxiIclW3//mNbyY3Xk6GfmgTSek2Ebn9eCttdemBDPmQz167ksnIH+g8W4pgydi3iRirgmUlOiV31mo0T47Ul/Swg5AsQHtSBW3Bi5at2Rw1TR7qa+ZtE1TPhA5dTAv4eIttnmrh1HIkGmduG0GYa1Q+yUgbYiHErKXhLd13k9ZCRnBZEW5ikXY3qtQr4tfstNqldF41rK2Ryo4MZPIO208kDPT9uJrdLPSimSSkSTMJG/DtSR0eXTMm5p6Ej8qquRc2FZ/RWoGI6q10YhhmBwNwmRaJtSMF9wDQnEcUVHBlMcKfumZQd/ZYgST+85Cu1Mcb6HTBlwvLLRMSt8Hq4D3qzIoY2uSaCFfWlgs+Rb4ZPyvso5J6W1ewA3iSNIKA/qgAhcPiarVPAT2Hp0fWKKVSshmCzTzqaz0di3iHBxPVt1IoUwzSdRXm2Vv0BwpozOTXaSxF2rS7JEIGL0XwXxukPFXIet45Mv5VUBryoVT0+qBBu11xTpmHEXsukRmk8Imh96zAS/1O9XpMr0YrFGRqFn5C8pmqo76+GvFHZWWaMxnFf6v4iaC+TuWb7iP9HNSK23tR2/DIw05O4COUl6GtcdB5vqw26UTTCf2yTxL1/GKLrw2Ty70OzgI199/jw0QXzIqY9lVkc5HUdGL0EUymhv3RrhjRlfALX24Jobxp2eWbvu0wuReG+H6oQS8pYHFu+WU9Qrsr3ptj+2NnQaoZ6hK4SFfsJJ7RBjGL+pTkUNlDleDizjXB9BqGjlzmEzOlADzZo+3XOzRuryg7JllfuiWezLHL3rAIOzAXNtfQAZPYCt5zMTsu++yHUTHPDRbnqi13MbXGkGV+SF/hIl4EK3RoxirpbJGP/l7XMOFdY1QnSbuqfcXFlyYFe3khebkKeezGMNrDsAm5D6L8Y4uKa9vYoyDFj0VreMxgeX3CZQnlOWdgNpa56oo4AfI/v328tXPry5fZZvRbZM4NEnafKvLlpN1JicRi8KHWENz+VJl6mxy3dmPWbiNznSOmT26B3SaJZ4f5rgw2ZX3cLpy179hYNm+cNFloIkNaGOjmUmQhOxxV75quCGSkRmqNjW9I1HOUnDoG/+7IQrPe1UzKQr+JkbFqY/LEyYhc/9MXIjuUfMR8+jryk5dJ26paWXVoZex/53ayqILz59LWD0CWsK94RaUejj8sqviXt6Lj5hjfqD4s6w3Lgmzkk3qaxIWcfMeB/0hq94nwCOJtJWs2D3yCB220qUmvEvfsxHkK3b/BV4ZQfjZFgAA";
81
81
 
82
82
  // packages/safe-bash-command-python/src/native-wheel.ts
83
83
  var decoded2;
@@ -10,7 +10,7 @@ import {
10
10
  pythonRuntimeRelocation,
11
11
  pythonStatProjection,
12
12
  pythonTreeCleanup
13
- } from "./chunk-3EBQOZET.js";
13
+ } from "./chunk-WY6THI6J.js";
14
14
  import {
15
15
  pythonJspiSignatures
16
16
  } from "./chunk-P56KGNW7.js";