webmux 0.29.0 → 0.31.0

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.
@@ -16,7 +16,7 @@ var __export = (target, all) => {
16
16
  };
17
17
  var __require = import.meta.require;
18
18
 
19
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/identity.js
19
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
20
20
  var require_identity = __commonJS((exports) => {
21
21
  var ALIAS = Symbol.for("yaml.alias");
22
22
  var DOC = Symbol.for("yaml.document");
@@ -70,7 +70,7 @@ var require_identity = __commonJS((exports) => {
70
70
  exports.isSeq = isSeq;
71
71
  });
72
72
 
73
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/visit.js
73
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/visit.js
74
74
  var require_visit = __commonJS((exports) => {
75
75
  var identity = require_identity();
76
76
  var BREAK = Symbol("break visit");
@@ -225,7 +225,7 @@ var require_visit = __commonJS((exports) => {
225
225
  exports.visitAsync = visitAsync;
226
226
  });
227
227
 
228
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/directives.js
228
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/directives.js
229
229
  var require_directives = __commonJS((exports) => {
230
230
  var identity = require_identity();
231
231
  var visit = require_visit();
@@ -377,7 +377,7 @@ var require_directives = __commonJS((exports) => {
377
377
  exports.Directives = Directives;
378
378
  });
379
379
 
380
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/anchors.js
380
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/anchors.js
381
381
  var require_anchors = __commonJS((exports) => {
382
382
  var identity = require_identity();
383
383
  var visit = require_visit();
@@ -439,7 +439,7 @@ var require_anchors = __commonJS((exports) => {
439
439
  exports.findNewAnchor = findNewAnchor;
440
440
  });
441
441
 
442
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/applyReviver.js
442
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/applyReviver.js
443
443
  var require_applyReviver = __commonJS((exports) => {
444
444
  function applyReviver(reviver, obj, key, val) {
445
445
  if (val && typeof val === "object") {
@@ -486,7 +486,7 @@ var require_applyReviver = __commonJS((exports) => {
486
486
  exports.applyReviver = applyReviver;
487
487
  });
488
488
 
489
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/toJS.js
489
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/toJS.js
490
490
  var require_toJS = __commonJS((exports) => {
491
491
  var identity = require_identity();
492
492
  function toJS(value, arg, ctx) {
@@ -513,7 +513,7 @@ var require_toJS = __commonJS((exports) => {
513
513
  exports.toJS = toJS;
514
514
  });
515
515
 
516
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Node.js
516
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Node.js
517
517
  var require_Node = __commonJS((exports) => {
518
518
  var applyReviver = require_applyReviver();
519
519
  var identity = require_identity();
@@ -550,7 +550,7 @@ var require_Node = __commonJS((exports) => {
550
550
  exports.NodeBase = NodeBase;
551
551
  });
552
552
 
553
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Alias.js
553
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Alias.js
554
554
  var require_Alias = __commonJS((exports) => {
555
555
  var anchors = require_anchors();
556
556
  var visit = require_visit();
@@ -569,6 +569,8 @@ var require_Alias = __commonJS((exports) => {
569
569
  });
570
570
  }
571
571
  resolve(doc, ctx) {
572
+ if (ctx?.maxAliasCount === 0)
573
+ throw new ReferenceError("Alias resolution is disabled");
572
574
  let nodes;
573
575
  if (ctx?.aliasResolveCache) {
574
576
  nodes = ctx.aliasResolveCache;
@@ -658,7 +660,7 @@ var require_Alias = __commonJS((exports) => {
658
660
  exports.Alias = Alias;
659
661
  });
660
662
 
661
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Scalar.js
663
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Scalar.js
662
664
  var require_Scalar = __commonJS((exports) => {
663
665
  var identity = require_identity();
664
666
  var Node = require_Node();
@@ -686,7 +688,7 @@ var require_Scalar = __commonJS((exports) => {
686
688
  exports.isScalarValue = isScalarValue;
687
689
  });
688
690
 
689
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/createNode.js
691
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/createNode.js
690
692
  var require_createNode = __commonJS((exports) => {
691
693
  var Alias = require_Alias();
692
694
  var identity = require_identity();
@@ -758,7 +760,7 @@ var require_createNode = __commonJS((exports) => {
758
760
  exports.createNode = createNode;
759
761
  });
760
762
 
761
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Collection.js
763
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Collection.js
762
764
  var require_Collection = __commonJS((exports) => {
763
765
  var createNode = require_createNode();
764
766
  var identity = require_identity();
@@ -873,7 +875,7 @@ var require_Collection = __commonJS((exports) => {
873
875
  exports.isEmptyPath = isEmptyPath;
874
876
  });
875
877
 
876
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyComment.js
878
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyComment.js
877
879
  var require_stringifyComment = __commonJS((exports) => {
878
880
  var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
879
881
  function indentComment(comment, indent) {
@@ -890,7 +892,7 @@ var require_stringifyComment = __commonJS((exports) => {
890
892
  exports.stringifyComment = stringifyComment;
891
893
  });
892
894
 
893
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/foldFlowLines.js
895
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/foldFlowLines.js
894
896
  var require_foldFlowLines = __commonJS((exports) => {
895
897
  var FOLD_FLOW = "flow";
896
898
  var FOLD_BLOCK = "block";
@@ -1027,7 +1029,7 @@ ${indent}${text.slice(fold + 1, end2)}`;
1027
1029
  exports.foldFlowLines = foldFlowLines;
1028
1030
  });
1029
1031
 
1030
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyString.js
1032
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyString.js
1031
1033
  var require_stringifyString = __commonJS((exports) => {
1032
1034
  var Scalar = require_Scalar();
1033
1035
  var foldFlowLines = require_foldFlowLines();
@@ -1325,7 +1327,7 @@ ${indent}`);
1325
1327
  exports.stringifyString = stringifyString;
1326
1328
  });
1327
1329
 
1328
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringify.js
1330
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringify.js
1329
1331
  var require_stringify = __commonJS((exports) => {
1330
1332
  var anchors = require_anchors();
1331
1333
  var identity = require_identity();
@@ -1446,7 +1448,7 @@ ${ctx.indent}${str}`;
1446
1448
  exports.stringify = stringify;
1447
1449
  });
1448
1450
 
1449
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyPair.js
1451
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyPair.js
1450
1452
  var require_stringifyPair = __commonJS((exports) => {
1451
1453
  var identity = require_identity();
1452
1454
  var Scalar = require_Scalar();
@@ -1582,7 +1584,7 @@ ${ctx.indent}`;
1582
1584
  exports.stringifyPair = stringifyPair;
1583
1585
  });
1584
1586
 
1585
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/log.js
1587
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/log.js
1586
1588
  var require_log = __commonJS((exports) => {
1587
1589
  var node_process = __require("process");
1588
1590
  function debug(logLevel, ...messages) {
@@ -1601,7 +1603,7 @@ var require_log = __commonJS((exports) => {
1601
1603
  exports.warn = warn;
1602
1604
  });
1603
1605
 
1604
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/merge.js
1606
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/merge.js
1605
1607
  var require_merge = __commonJS((exports) => {
1606
1608
  var identity = require_identity();
1607
1609
  var Scalar = require_Scalar();
@@ -1618,18 +1620,18 @@ var require_merge = __commonJS((exports) => {
1618
1620
  };
1619
1621
  var isMergeKey = (ctx, key) => (merge.identify(key) || identity.isScalar(key) && (!key.type || key.type === Scalar.Scalar.PLAIN) && merge.identify(key.value)) && ctx?.doc.schema.tags.some((tag) => tag.tag === merge.tag && tag.default);
1620
1622
  function addMergeToJSMap(ctx, map, value) {
1621
- value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;
1622
- if (identity.isSeq(value))
1623
- for (const it of value.items)
1623
+ const source = resolveAliasValue(ctx, value);
1624
+ if (identity.isSeq(source))
1625
+ for (const it of source.items)
1624
1626
  mergeValue(ctx, map, it);
1625
- else if (Array.isArray(value))
1626
- for (const it of value)
1627
+ else if (Array.isArray(source))
1628
+ for (const it of source)
1627
1629
  mergeValue(ctx, map, it);
1628
1630
  else
1629
- mergeValue(ctx, map, value);
1631
+ mergeValue(ctx, map, source);
1630
1632
  }
1631
1633
  function mergeValue(ctx, map, value) {
1632
- const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;
1634
+ const source = resolveAliasValue(ctx, value);
1633
1635
  if (!identity.isMap(source))
1634
1636
  throw new Error("Merge sources must be maps or map aliases");
1635
1637
  const srcMap = source.toJSON(null, ctx, Map);
@@ -1650,12 +1652,15 @@ var require_merge = __commonJS((exports) => {
1650
1652
  }
1651
1653
  return map;
1652
1654
  }
1655
+ function resolveAliasValue(ctx, value) {
1656
+ return ctx && identity.isAlias(value) ? value.resolve(ctx.doc, ctx) : value;
1657
+ }
1653
1658
  exports.addMergeToJSMap = addMergeToJSMap;
1654
1659
  exports.isMergeKey = isMergeKey;
1655
1660
  exports.merge = merge;
1656
1661
  });
1657
1662
 
1658
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/addPairToJSMap.js
1663
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/addPairToJSMap.js
1659
1664
  var require_addPairToJSMap = __commonJS((exports) => {
1660
1665
  var log2 = require_log();
1661
1666
  var merge = require_merge();
@@ -1716,7 +1721,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
1716
1721
  exports.addPairToJSMap = addPairToJSMap;
1717
1722
  });
1718
1723
 
1719
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/Pair.js
1724
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/Pair.js
1720
1725
  var require_Pair = __commonJS((exports) => {
1721
1726
  var createNode = require_createNode();
1722
1727
  var stringifyPair = require_stringifyPair();
@@ -1754,7 +1759,7 @@ var require_Pair = __commonJS((exports) => {
1754
1759
  exports.createPair = createPair;
1755
1760
  });
1756
1761
 
1757
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyCollection.js
1762
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyCollection.js
1758
1763
  var require_stringifyCollection = __commonJS((exports) => {
1759
1764
  var identity = require_identity();
1760
1765
  var stringify = require_stringify();
@@ -1906,7 +1911,7 @@ ${indent}${end}`;
1906
1911
  exports.stringifyCollection = stringifyCollection;
1907
1912
  });
1908
1913
 
1909
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLMap.js
1914
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLMap.js
1910
1915
  var require_YAMLMap = __commonJS((exports) => {
1911
1916
  var stringifyCollection = require_stringifyCollection();
1912
1917
  var addPairToJSMap = require_addPairToJSMap();
@@ -2033,7 +2038,7 @@ var require_YAMLMap = __commonJS((exports) => {
2033
2038
  exports.findPair = findPair;
2034
2039
  });
2035
2040
 
2036
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/map.js
2041
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/map.js
2037
2042
  var require_map = __commonJS((exports) => {
2038
2043
  var identity = require_identity();
2039
2044
  var YAMLMap = require_YAMLMap();
@@ -2052,7 +2057,7 @@ var require_map = __commonJS((exports) => {
2052
2057
  exports.map = map;
2053
2058
  });
2054
2059
 
2055
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/nodes/YAMLSeq.js
2060
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/YAMLSeq.js
2056
2061
  var require_YAMLSeq = __commonJS((exports) => {
2057
2062
  var createNode = require_createNode();
2058
2063
  var stringifyCollection = require_stringifyCollection();
@@ -2145,7 +2150,7 @@ var require_YAMLSeq = __commonJS((exports) => {
2145
2150
  exports.YAMLSeq = YAMLSeq;
2146
2151
  });
2147
2152
 
2148
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/seq.js
2153
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/seq.js
2149
2154
  var require_seq = __commonJS((exports) => {
2150
2155
  var identity = require_identity();
2151
2156
  var YAMLSeq = require_YAMLSeq();
@@ -2164,7 +2169,7 @@ var require_seq = __commonJS((exports) => {
2164
2169
  exports.seq = seq;
2165
2170
  });
2166
2171
 
2167
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/string.js
2172
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/string.js
2168
2173
  var require_string = __commonJS((exports) => {
2169
2174
  var stringifyString = require_stringifyString();
2170
2175
  var string = {
@@ -2180,7 +2185,7 @@ var require_string = __commonJS((exports) => {
2180
2185
  exports.string = string;
2181
2186
  });
2182
2187
 
2183
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/common/null.js
2188
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/common/null.js
2184
2189
  var require_null = __commonJS((exports) => {
2185
2190
  var Scalar = require_Scalar();
2186
2191
  var nullTag = {
@@ -2195,7 +2200,7 @@ var require_null = __commonJS((exports) => {
2195
2200
  exports.nullTag = nullTag;
2196
2201
  });
2197
2202
 
2198
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/bool.js
2203
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/bool.js
2199
2204
  var require_bool = __commonJS((exports) => {
2200
2205
  var Scalar = require_Scalar();
2201
2206
  var boolTag = {
@@ -2216,7 +2221,7 @@ var require_bool = __commonJS((exports) => {
2216
2221
  exports.boolTag = boolTag;
2217
2222
  });
2218
2223
 
2219
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyNumber.js
2224
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyNumber.js
2220
2225
  var require_stringifyNumber = __commonJS((exports) => {
2221
2226
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
2222
2227
  if (typeof value === "bigint")
@@ -2225,7 +2230,7 @@ var require_stringifyNumber = __commonJS((exports) => {
2225
2230
  if (!isFinite(num))
2226
2231
  return isNaN(num) ? ".nan" : num < 0 ? "-.inf" : ".inf";
2227
2232
  let n = Object.is(value, -0) ? "-0" : JSON.stringify(value);
2228
- if (!format && minFractionDigits && (!tag || tag === "tag:yaml.org,2002:float") && /^\d/.test(n)) {
2233
+ if (!format && minFractionDigits && (!tag || tag === "tag:yaml.org,2002:float") && /^-?\d/.test(n) && !n.includes("e")) {
2229
2234
  let i = n.indexOf(".");
2230
2235
  if (i < 0) {
2231
2236
  i = n.length;
@@ -2240,7 +2245,7 @@ var require_stringifyNumber = __commonJS((exports) => {
2240
2245
  exports.stringifyNumber = stringifyNumber;
2241
2246
  });
2242
2247
 
2243
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/float.js
2248
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/float.js
2244
2249
  var require_float = __commonJS((exports) => {
2245
2250
  var Scalar = require_Scalar();
2246
2251
  var stringifyNumber = require_stringifyNumber();
@@ -2283,7 +2288,7 @@ var require_float = __commonJS((exports) => {
2283
2288
  exports.floatNaN = floatNaN;
2284
2289
  });
2285
2290
 
2286
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/int.js
2291
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/int.js
2287
2292
  var require_int = __commonJS((exports) => {
2288
2293
  var stringifyNumber = require_stringifyNumber();
2289
2294
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -2325,7 +2330,7 @@ var require_int = __commonJS((exports) => {
2325
2330
  exports.intOct = intOct;
2326
2331
  });
2327
2332
 
2328
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/core/schema.js
2333
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/core/schema.js
2329
2334
  var require_schema = __commonJS((exports) => {
2330
2335
  var map = require_map();
2331
2336
  var _null = require_null();
@@ -2350,7 +2355,7 @@ var require_schema = __commonJS((exports) => {
2350
2355
  exports.schema = schema;
2351
2356
  });
2352
2357
 
2353
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/json/schema.js
2358
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/json/schema.js
2354
2359
  var require_schema2 = __commonJS((exports) => {
2355
2360
  var Scalar = require_Scalar();
2356
2361
  var map = require_map();
@@ -2414,7 +2419,7 @@ var require_schema2 = __commonJS((exports) => {
2414
2419
  exports.schema = schema;
2415
2420
  });
2416
2421
 
2417
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/binary.js
2422
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/binary.js
2418
2423
  var require_binary = __commonJS((exports) => {
2419
2424
  var node_buffer = __require("buffer");
2420
2425
  var Scalar = require_Scalar();
@@ -2469,7 +2474,7 @@ var require_binary = __commonJS((exports) => {
2469
2474
  exports.binary = binary;
2470
2475
  });
2471
2476
 
2472
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
2477
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
2473
2478
  var require_pairs = __commonJS((exports) => {
2474
2479
  var identity = require_identity();
2475
2480
  var Pair = require_Pair();
@@ -2544,7 +2549,7 @@ ${cn.comment}` : item.comment;
2544
2549
  exports.resolvePairs = resolvePairs;
2545
2550
  });
2546
2551
 
2547
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/omap.js
2552
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/omap.js
2548
2553
  var require_omap = __commonJS((exports) => {
2549
2554
  var identity = require_identity();
2550
2555
  var toJS = require_toJS();
@@ -2616,7 +2621,7 @@ var require_omap = __commonJS((exports) => {
2616
2621
  exports.omap = omap;
2617
2622
  });
2618
2623
 
2619
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/bool.js
2624
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/bool.js
2620
2625
  var require_bool2 = __commonJS((exports) => {
2621
2626
  var Scalar = require_Scalar();
2622
2627
  function boolStringify({ value, source }, ctx) {
@@ -2645,7 +2650,7 @@ var require_bool2 = __commonJS((exports) => {
2645
2650
  exports.trueTag = trueTag;
2646
2651
  });
2647
2652
 
2648
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/float.js
2653
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/float.js
2649
2654
  var require_float2 = __commonJS((exports) => {
2650
2655
  var Scalar = require_Scalar();
2651
2656
  var stringifyNumber = require_stringifyNumber();
@@ -2691,7 +2696,7 @@ var require_float2 = __commonJS((exports) => {
2691
2696
  exports.floatNaN = floatNaN;
2692
2697
  });
2693
2698
 
2694
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/int.js
2699
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/int.js
2695
2700
  var require_int2 = __commonJS((exports) => {
2696
2701
  var stringifyNumber = require_stringifyNumber();
2697
2702
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -2767,7 +2772,7 @@ var require_int2 = __commonJS((exports) => {
2767
2772
  exports.intOct = intOct;
2768
2773
  });
2769
2774
 
2770
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/set.js
2775
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/set.js
2771
2776
  var require_set = __commonJS((exports) => {
2772
2777
  var identity = require_identity();
2773
2778
  var Pair = require_Pair();
@@ -2850,7 +2855,7 @@ var require_set = __commonJS((exports) => {
2850
2855
  exports.set = set;
2851
2856
  });
2852
2857
 
2853
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
2858
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
2854
2859
  var require_timestamp = __commonJS((exports) => {
2855
2860
  var stringifyNumber = require_stringifyNumber();
2856
2861
  function parseSexagesimal(str, asBigInt) {
@@ -2932,7 +2937,7 @@ var require_timestamp = __commonJS((exports) => {
2932
2937
  exports.timestamp = timestamp;
2933
2938
  });
2934
2939
 
2935
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/yaml-1.1/schema.js
2940
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/yaml-1.1/schema.js
2936
2941
  var require_schema3 = __commonJS((exports) => {
2937
2942
  var map = require_map();
2938
2943
  var _null = require_null();
@@ -2973,7 +2978,7 @@ var require_schema3 = __commonJS((exports) => {
2973
2978
  exports.schema = schema;
2974
2979
  });
2975
2980
 
2976
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/tags.js
2981
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/tags.js
2977
2982
  var require_tags = __commonJS((exports) => {
2978
2983
  var map = require_map();
2979
2984
  var _null = require_null();
@@ -3064,7 +3069,7 @@ var require_tags = __commonJS((exports) => {
3064
3069
  exports.getTags = getTags;
3065
3070
  });
3066
3071
 
3067
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/schema/Schema.js
3072
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/schema/Schema.js
3068
3073
  var require_Schema = __commonJS((exports) => {
3069
3074
  var identity = require_identity();
3070
3075
  var map = require_map();
@@ -3094,7 +3099,7 @@ var require_Schema = __commonJS((exports) => {
3094
3099
  exports.Schema = Schema;
3095
3100
  });
3096
3101
 
3097
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/stringify/stringifyDocument.js
3102
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/stringify/stringifyDocument.js
3098
3103
  var require_stringifyDocument = __commonJS((exports) => {
3099
3104
  var identity = require_identity();
3100
3105
  var stringify = require_stringify();
@@ -3174,7 +3179,7 @@ var require_stringifyDocument = __commonJS((exports) => {
3174
3179
  exports.stringifyDocument = stringifyDocument;
3175
3180
  });
3176
3181
 
3177
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/doc/Document.js
3182
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/doc/Document.js
3178
3183
  var require_Document = __commonJS((exports) => {
3179
3184
  var Alias = require_Alias();
3180
3185
  var Collection = require_Collection();
@@ -3409,7 +3414,7 @@ var require_Document = __commonJS((exports) => {
3409
3414
  exports.Document = Document;
3410
3415
  });
3411
3416
 
3412
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/errors.js
3417
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/errors.js
3413
3418
  var require_errors = __commonJS((exports) => {
3414
3419
  class YAMLError extends Error {
3415
3420
  constructor(name, pos, code, message) {
@@ -3474,7 +3479,7 @@ ${pointer}
3474
3479
  exports.prettifyError = prettifyError;
3475
3480
  });
3476
3481
 
3477
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-props.js
3482
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-props.js
3478
3483
  var require_resolve_props = __commonJS((exports) => {
3479
3484
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
3480
3485
  let spaceBefore = false;
@@ -3604,7 +3609,7 @@ var require_resolve_props = __commonJS((exports) => {
3604
3609
  exports.resolveProps = resolveProps;
3605
3610
  });
3606
3611
 
3607
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-contains-newline.js
3612
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-contains-newline.js
3608
3613
  var require_util_contains_newline = __commonJS((exports) => {
3609
3614
  function containsNewline(key) {
3610
3615
  if (!key)
@@ -3644,7 +3649,7 @@ var require_util_contains_newline = __commonJS((exports) => {
3644
3649
  exports.containsNewline = containsNewline;
3645
3650
  });
3646
3651
 
3647
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-flow-indent-check.js
3652
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-flow-indent-check.js
3648
3653
  var require_util_flow_indent_check = __commonJS((exports) => {
3649
3654
  var utilContainsNewline = require_util_contains_newline();
3650
3655
  function flowIndentCheck(indent, fc, onError) {
@@ -3659,7 +3664,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
3659
3664
  exports.flowIndentCheck = flowIndentCheck;
3660
3665
  });
3661
3666
 
3662
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-map-includes.js
3667
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-map-includes.js
3663
3668
  var require_util_map_includes = __commonJS((exports) => {
3664
3669
  var identity = require_identity();
3665
3670
  function mapIncludes(ctx, items, search) {
@@ -3672,7 +3677,7 @@ var require_util_map_includes = __commonJS((exports) => {
3672
3677
  exports.mapIncludes = mapIncludes;
3673
3678
  });
3674
3679
 
3675
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-map.js
3680
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-map.js
3676
3681
  var require_resolve_block_map = __commonJS((exports) => {
3677
3682
  var Pair = require_Pair();
3678
3683
  var YAMLMap = require_YAMLMap();
@@ -3779,7 +3784,7 @@ var require_resolve_block_map = __commonJS((exports) => {
3779
3784
  exports.resolveBlockMap = resolveBlockMap;
3780
3785
  });
3781
3786
 
3782
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-seq.js
3787
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-seq.js
3783
3788
  var require_resolve_block_seq = __commonJS((exports) => {
3784
3789
  var YAMLSeq = require_YAMLSeq();
3785
3790
  var resolveProps = require_resolve_props();
@@ -3827,7 +3832,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
3827
3832
  exports.resolveBlockSeq = resolveBlockSeq;
3828
3833
  });
3829
3834
 
3830
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-end.js
3835
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-end.js
3831
3836
  var require_resolve_end = __commonJS((exports) => {
3832
3837
  function resolveEnd(end, offset, reqSpace, onError) {
3833
3838
  let comment = "";
@@ -3867,7 +3872,7 @@ var require_resolve_end = __commonJS((exports) => {
3867
3872
  exports.resolveEnd = resolveEnd;
3868
3873
  });
3869
3874
 
3870
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-collection.js
3875
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-collection.js
3871
3876
  var require_resolve_flow_collection = __commonJS((exports) => {
3872
3877
  var identity = require_identity();
3873
3878
  var Pair = require_Pair();
@@ -4058,7 +4063,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
4058
4063
  exports.resolveFlowCollection = resolveFlowCollection;
4059
4064
  });
4060
4065
 
4061
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-collection.js
4066
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-collection.js
4062
4067
  var require_compose_collection = __commonJS((exports) => {
4063
4068
  var identity = require_identity();
4064
4069
  var Scalar = require_Scalar();
@@ -4120,7 +4125,7 @@ var require_compose_collection = __commonJS((exports) => {
4120
4125
  exports.composeCollection = composeCollection;
4121
4126
  });
4122
4127
 
4123
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-block-scalar.js
4128
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-block-scalar.js
4124
4129
  var require_resolve_block_scalar = __commonJS((exports) => {
4125
4130
  var Scalar = require_Scalar();
4126
4131
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -4313,7 +4318,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
4313
4318
  exports.resolveBlockScalar = resolveBlockScalar;
4314
4319
  });
4315
4320
 
4316
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/resolve-flow-scalar.js
4321
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/resolve-flow-scalar.js
4317
4322
  var require_resolve_flow_scalar = __commonJS((exports) => {
4318
4323
  var Scalar = require_Scalar();
4319
4324
  var resolveEnd = require_resolve_end();
@@ -4450,7 +4455,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
4450
4455
  while (next === " " || next === "\t")
4451
4456
  next = source[++i + 1];
4452
4457
  } else if (next === "x" || next === "u" || next === "U") {
4453
- const length = { x: 2, u: 4, U: 8 }[next];
4458
+ const length = next === "x" ? 2 : next === "u" ? 4 : 8;
4454
4459
  res += parseCharCode(source, i + 1, length, onError);
4455
4460
  i += length;
4456
4461
  } else {
@@ -4519,17 +4524,18 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
4519
4524
  const cc = source.substr(offset, length);
4520
4525
  const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
4521
4526
  const code = ok ? parseInt(cc, 16) : NaN;
4522
- if (isNaN(code)) {
4527
+ try {
4528
+ return String.fromCodePoint(code);
4529
+ } catch {
4523
4530
  const raw = source.substr(offset - 2, length + 2);
4524
4531
  onError(offset - 2, "BAD_DQ_ESCAPE", `Invalid escape sequence ${raw}`);
4525
4532
  return raw;
4526
4533
  }
4527
- return String.fromCodePoint(code);
4528
4534
  }
4529
4535
  exports.resolveFlowScalar = resolveFlowScalar;
4530
4536
  });
4531
4537
 
4532
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-scalar.js
4538
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-scalar.js
4533
4539
  var require_compose_scalar = __commonJS((exports) => {
4534
4540
  var identity = require_identity();
4535
4541
  var Scalar = require_Scalar();
@@ -4607,7 +4613,7 @@ var require_compose_scalar = __commonJS((exports) => {
4607
4613
  exports.composeScalar = composeScalar;
4608
4614
  });
4609
4615
 
4610
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/util-empty-scalar-position.js
4616
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/util-empty-scalar-position.js
4611
4617
  var require_util_empty_scalar_position = __commonJS((exports) => {
4612
4618
  function emptyScalarPosition(offset, before, pos) {
4613
4619
  if (before) {
@@ -4634,7 +4640,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
4634
4640
  exports.emptyScalarPosition = emptyScalarPosition;
4635
4641
  });
4636
4642
 
4637
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-node.js
4643
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-node.js
4638
4644
  var require_compose_node = __commonJS((exports) => {
4639
4645
  var Alias = require_Alias();
4640
4646
  var identity = require_identity();
@@ -4737,7 +4743,7 @@ var require_compose_node = __commonJS((exports) => {
4737
4743
  exports.composeNode = composeNode;
4738
4744
  });
4739
4745
 
4740
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/compose-doc.js
4746
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/compose-doc.js
4741
4747
  var require_compose_doc = __commonJS((exports) => {
4742
4748
  var Document = require_Document();
4743
4749
  var composeNode = require_compose_node();
@@ -4777,7 +4783,7 @@ var require_compose_doc = __commonJS((exports) => {
4777
4783
  exports.composeDoc = composeDoc;
4778
4784
  });
4779
4785
 
4780
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/compose/composer.js
4786
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/compose/composer.js
4781
4787
  var require_composer = __commonJS((exports) => {
4782
4788
  var node_process = __require("process");
4783
4789
  var directives = require_directives();
@@ -4863,8 +4869,10 @@ ${cb}` : comment;
4863
4869
  }
4864
4870
  }
4865
4871
  if (afterDoc) {
4866
- Array.prototype.push.apply(doc.errors, this.errors);
4867
- Array.prototype.push.apply(doc.warnings, this.warnings);
4872
+ for (let i = 0;i < this.errors.length; ++i)
4873
+ doc.errors.push(this.errors[i]);
4874
+ for (let i = 0;i < this.warnings.length; ++i)
4875
+ doc.warnings.push(this.warnings[i]);
4868
4876
  } else {
4869
4877
  doc.errors = this.errors;
4870
4878
  doc.warnings = this.warnings;
@@ -4966,7 +4974,7 @@ ${end.comment}` : end.comment;
4966
4974
  exports.Composer = Composer;
4967
4975
  });
4968
4976
 
4969
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-scalar.js
4977
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-scalar.js
4970
4978
  var require_cst_scalar = __commonJS((exports) => {
4971
4979
  var resolveBlockScalar = require_resolve_block_scalar();
4972
4980
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -5156,7 +5164,7 @@ var require_cst_scalar = __commonJS((exports) => {
5156
5164
  exports.setScalarValue = setScalarValue;
5157
5165
  });
5158
5166
 
5159
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-stringify.js
5167
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-stringify.js
5160
5168
  var require_cst_stringify = __commonJS((exports) => {
5161
5169
  var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
5162
5170
  function stringifyToken(token) {
@@ -5214,7 +5222,7 @@ var require_cst_stringify = __commonJS((exports) => {
5214
5222
  exports.stringify = stringify;
5215
5223
  });
5216
5224
 
5217
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst-visit.js
5225
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst-visit.js
5218
5226
  var require_cst_visit = __commonJS((exports) => {
5219
5227
  var BREAK = Symbol("break visit");
5220
5228
  var SKIP = Symbol("skip children");
@@ -5273,7 +5281,7 @@ var require_cst_visit = __commonJS((exports) => {
5273
5281
  exports.visit = visit;
5274
5282
  });
5275
5283
 
5276
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/cst.js
5284
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/cst.js
5277
5285
  var require_cst = __commonJS((exports) => {
5278
5286
  var cstScalar = require_cst_scalar();
5279
5287
  var cstStringify = require_cst_stringify();
@@ -5374,7 +5382,7 @@ var require_cst = __commonJS((exports) => {
5374
5382
  exports.tokenType = tokenType;
5375
5383
  });
5376
5384
 
5377
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/lexer.js
5385
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/lexer.js
5378
5386
  var require_lexer = __commonJS((exports) => {
5379
5387
  var cst = require_cst();
5380
5388
  function isEmpty(ch) {
@@ -5576,7 +5584,7 @@ var require_lexer = __commonJS((exports) => {
5576
5584
  const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
5577
5585
  this.indentNext = this.indentValue + 1;
5578
5586
  this.indentValue += n;
5579
- return yield* this.parseBlockStart();
5587
+ return "block-start";
5580
5588
  }
5581
5589
  return "doc";
5582
5590
  }
@@ -5883,26 +5891,37 @@ var require_lexer = __commonJS((exports) => {
5883
5891
  return 0;
5884
5892
  }
5885
5893
  *pushIndicators() {
5886
- switch (this.charAt(0)) {
5887
- case "!":
5888
- return (yield* this.pushTag()) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
5889
- case "&":
5890
- return (yield* this.pushUntil(isNotAnchorChar)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
5891
- case "-":
5892
- case "?":
5893
- case ":": {
5894
- const inFlow = this.flowLevel > 0;
5895
- const ch1 = this.charAt(1);
5896
- if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1)) {
5897
- if (!inFlow)
5898
- this.indentNext = this.indentValue + 1;
5899
- else if (this.flowKey)
5900
- this.flowKey = false;
5901
- return (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
5894
+ let n = 0;
5895
+ loop:
5896
+ while (true) {
5897
+ switch (this.charAt(0)) {
5898
+ case "!":
5899
+ n += yield* this.pushTag();
5900
+ n += yield* this.pushSpaces(true);
5901
+ continue loop;
5902
+ case "&":
5903
+ n += yield* this.pushUntil(isNotAnchorChar);
5904
+ n += yield* this.pushSpaces(true);
5905
+ continue loop;
5906
+ case "-":
5907
+ case "?":
5908
+ case ":": {
5909
+ const inFlow = this.flowLevel > 0;
5910
+ const ch1 = this.charAt(1);
5911
+ if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1)) {
5912
+ if (!inFlow)
5913
+ this.indentNext = this.indentValue + 1;
5914
+ else if (this.flowKey)
5915
+ this.flowKey = false;
5916
+ n += yield* this.pushCount(1);
5917
+ n += yield* this.pushSpaces(true);
5918
+ continue loop;
5919
+ }
5920
+ }
5902
5921
  }
5922
+ break loop;
5903
5923
  }
5904
- }
5905
- return 0;
5924
+ return n;
5906
5925
  }
5907
5926
  *pushTag() {
5908
5927
  if (this.charAt(1) === "<") {
@@ -5960,7 +5979,7 @@ var require_lexer = __commonJS((exports) => {
5960
5979
  exports.Lexer = Lexer;
5961
5980
  });
5962
5981
 
5963
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/line-counter.js
5982
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/line-counter.js
5964
5983
  var require_line_counter = __commonJS((exports) => {
5965
5984
  class LineCounter {
5966
5985
  constructor() {
@@ -5988,7 +6007,7 @@ var require_line_counter = __commonJS((exports) => {
5988
6007
  exports.LineCounter = LineCounter;
5989
6008
  });
5990
6009
 
5991
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/parse/parser.js
6010
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/parse/parser.js
5992
6011
  var require_parser = __commonJS((exports) => {
5993
6012
  var node_process = __require("process");
5994
6013
  var cst = require_cst();
@@ -6056,6 +6075,13 @@ var require_parser = __commonJS((exports) => {
6056
6075
  while (prev[++i]?.type === "space") {}
6057
6076
  return prev.splice(i, prev.length);
6058
6077
  }
6078
+ function arrayPushArray(target, source) {
6079
+ if (source.length < 1e5)
6080
+ Array.prototype.push.apply(target, source);
6081
+ else
6082
+ for (let i = 0;i < source.length; ++i)
6083
+ target.push(source[i]);
6084
+ }
6059
6085
  function fixFlowSeqItems(fc) {
6060
6086
  if (fc.start.type === "flow-seq-start") {
6061
6087
  for (const it of fc.items) {
@@ -6065,11 +6091,11 @@ var require_parser = __commonJS((exports) => {
6065
6091
  delete it.key;
6066
6092
  if (isFlowToken(it.value)) {
6067
6093
  if (it.value.end)
6068
- Array.prototype.push.apply(it.value.end, it.sep);
6094
+ arrayPushArray(it.value.end, it.sep);
6069
6095
  else
6070
6096
  it.value.end = it.sep;
6071
6097
  } else
6072
- Array.prototype.push.apply(it.start, it.sep);
6098
+ arrayPushArray(it.start, it.sep);
6073
6099
  delete it.sep;
6074
6100
  }
6075
6101
  }
@@ -6409,7 +6435,7 @@ var require_parser = __commonJS((exports) => {
6409
6435
  const prev = map.items[map.items.length - 2];
6410
6436
  const end = prev?.value?.end;
6411
6437
  if (Array.isArray(end)) {
6412
- Array.prototype.push.apply(end, it.start);
6438
+ arrayPushArray(end, it.start);
6413
6439
  end.push(this.sourceToken);
6414
6440
  map.items.pop();
6415
6441
  return;
@@ -6597,7 +6623,7 @@ var require_parser = __commonJS((exports) => {
6597
6623
  const prev = seq.items[seq.items.length - 2];
6598
6624
  const end = prev?.value?.end;
6599
6625
  if (Array.isArray(end)) {
6600
- Array.prototype.push.apply(end, it.start);
6626
+ arrayPushArray(end, it.start);
6601
6627
  end.push(this.sourceToken);
6602
6628
  seq.items.pop();
6603
6629
  return;
@@ -6837,7 +6863,7 @@ var require_parser = __commonJS((exports) => {
6837
6863
  exports.Parser = Parser;
6838
6864
  });
6839
6865
 
6840
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/public-api.js
6866
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/public-api.js
6841
6867
  var require_public_api = __commonJS((exports) => {
6842
6868
  var composer = require_composer();
6843
6869
  var Document = require_Document();
@@ -6933,7 +6959,7 @@ var require_public_api = __commonJS((exports) => {
6933
6959
 
6934
6960
  // backend/src/server.ts
6935
6961
  import { randomUUID as randomUUID3 } from "crypto";
6936
- import { join as join8, resolve as resolve8 } from "path";
6962
+ import { join as join8, resolve as resolve9 } from "path";
6937
6963
  import { mkdirSync } from "fs";
6938
6964
  import { networkInterfaces } from "os";
6939
6965
 
@@ -10910,7 +10936,7 @@ var coerce = {
10910
10936
  date: (arg) => ZodDate.create({ ...arg, coerce: true })
10911
10937
  };
10912
10938
  var NEVER = INVALID;
10913
- // node_modules/.bun/@ts-rest+core@3.52.1+63a57e97cf90626f/node_modules/@ts-rest/core/index.esm.mjs
10939
+ // node_modules/.bun/@ts-rest+core@3.52.1+1c8a9bbc689bc595/node_modules/@ts-rest/core/index.esm.mjs
10914
10940
  var isZodObjectStrict = (obj) => {
10915
10941
  return typeof (obj === null || obj === undefined ? undefined : obj.passthrough) === "function";
10916
10942
  };
@@ -11081,6 +11107,13 @@ var SetWorktreeArchivedResponseSchema = exports_external.object({
11081
11107
  ok: exports_external.literal(true),
11082
11108
  archived: exports_external.boolean()
11083
11109
  });
11110
+ var SetWorktreeLabelRequestSchema = exports_external.object({
11111
+ label: exports_external.string().trim().max(80).nullable()
11112
+ });
11113
+ var SetWorktreeLabelResponseSchema = exports_external.object({
11114
+ ok: exports_external.literal(true),
11115
+ label: exports_external.string().nullable()
11116
+ });
11084
11117
  var ToggleEnabledRequestSchema = exports_external.object({
11085
11118
  enabled: exports_external.boolean()
11086
11119
  });
@@ -11190,6 +11223,7 @@ var AppNotificationSchema = exports_external.object({
11190
11223
  });
11191
11224
  var ProjectWorktreeSnapshotSchema = exports_external.object({
11192
11225
  branch: exports_external.string(),
11226
+ label: exports_external.string().nullable(),
11193
11227
  baseBranch: exports_external.string().optional(),
11194
11228
  path: exports_external.string(),
11195
11229
  dir: exports_external.string(),
@@ -11385,6 +11419,7 @@ var apiPaths = {
11385
11419
  openWorktree: "/api/worktrees/:name/open",
11386
11420
  closeWorktree: "/api/worktrees/:name/close",
11387
11421
  setWorktreeArchived: "/api/worktrees/:name/archive",
11422
+ setWorktreeLabel: "/api/worktrees/:name/label",
11388
11423
  sendWorktreePrompt: "/api/worktrees/:name/send",
11389
11424
  mergeWorktree: "/api/worktrees/:name/merge",
11390
11425
  fetchWorktreeDiff: "/api/worktrees/:name/diff",
@@ -11588,6 +11623,16 @@ var apiContract = c.router({
11588
11623
  ...commonErrorResponses
11589
11624
  }
11590
11625
  },
11626
+ setWorktreeLabel: {
11627
+ method: "PUT",
11628
+ path: apiPaths.setWorktreeLabel,
11629
+ pathParams: WorktreeNameParamsSchema,
11630
+ body: SetWorktreeLabelRequestSchema,
11631
+ responses: {
11632
+ 200: SetWorktreeLabelResponseSchema,
11633
+ ...commonErrorResponses
11634
+ }
11635
+ },
11591
11636
  sendWorktreePrompt: {
11592
11637
  method: "POST",
11593
11638
  path: apiPaths.sendWorktreePrompt,
@@ -11969,7 +12014,7 @@ async function sendPrompt(worktreeId, target, text, paneIndex = 0, preamble, sub
11969
12014
  if (load.exitCode !== 0) {
11970
12015
  return { ok: false, error: `load-buffer failed${load.stderr ? `: ${load.stderr}` : ""}` };
11971
12016
  }
11972
- const paste = await tmuxExec(["tmux", "paste-buffer", "-b", bufferName, "-t", paneTarget, "-d"]);
12017
+ const paste = await tmuxExec(["tmux", "paste-buffer", "-rp", "-b", bufferName, "-t", paneTarget, "-d"]);
11973
12018
  if (paste.exitCode !== 0) {
11974
12019
  return { ok: false, error: `paste-buffer failed${paste.stderr ? `: ${paste.stderr}` : ""}` };
11975
12020
  }
@@ -12728,7 +12773,7 @@ class CodexAppServerClient {
12728
12773
  import { readFileSync } from "fs";
12729
12774
  import { dirname as dirname2, join as join2, resolve } from "path";
12730
12775
 
12731
- // node_modules/.bun/yaml@2.8.3/node_modules/yaml/dist/index.js
12776
+ // node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js
12732
12777
  var composer = require_composer();
12733
12778
  var Document = require_Document();
12734
12779
  var Schema = require_Schema();
@@ -13376,6 +13421,12 @@ function pruneArchivedWorktreeState(input) {
13376
13421
  }
13377
13422
 
13378
13423
  // backend/src/services/agent-chat-service.ts
13424
+ var CODEX_SUBMIT_DELAY_MS = 200;
13425
+ function resolveAgentTerminalSubmitDelayMs(input) {
13426
+ if (!input.agentId || !input.agent || input.agent.kind !== "builtin")
13427
+ return 0;
13428
+ return input.agent.implementation.agent === "codex" ? CODEX_SUBMIT_DELAY_MS : 0;
13429
+ }
13379
13430
  function resolveAgentChatSupport(input) {
13380
13431
  if (!input.agentId) {
13381
13432
  return {
@@ -13411,7 +13462,7 @@ function resolveAgentChatSupport(input) {
13411
13462
  ok: true,
13412
13463
  data: {
13413
13464
  provider: input.agent.implementation.agent,
13414
- submitDelayMs: input.agent.implementation.agent === "codex" ? 200 : 0
13465
+ submitDelayMs: resolveAgentTerminalSubmitDelayMs(input)
13415
13466
  }
13416
13467
  };
13417
13468
  }
@@ -13880,11 +13931,11 @@ async function createLinearIssue(input) {
13880
13931
 
13881
13932
  // backend/src/services/lifecycle-service.ts
13882
13933
  import { mkdir as mkdir4 } from "fs/promises";
13883
- import { dirname as dirname4, resolve as resolve6 } from "path";
13934
+ import { dirname as dirname4, resolve as resolve7 } from "path";
13884
13935
 
13885
13936
  // backend/src/adapters/agent-runtime.ts
13886
13937
  import { chmod as chmod2, mkdir as mkdir3 } from "fs/promises";
13887
- import { dirname as dirname3, join as join4 } from "path";
13938
+ import { dirname as dirname3, join as join4, resolve as resolve3 } from "path";
13888
13939
 
13889
13940
  // backend/src/adapters/fs.ts
13890
13941
  import { mkdir as mkdir2 } from "fs/promises";
@@ -14059,11 +14110,22 @@ function normalizeConversationMeta(raw) {
14059
14110
  };
14060
14111
  return normalized;
14061
14112
  }
14113
+ function normalizeOptionalString(raw) {
14114
+ return typeof raw === "string" && raw.trim() ? raw.trim() : undefined;
14115
+ }
14062
14116
  function normalizeWorktreeMeta(meta) {
14063
14117
  const conversation = normalizeConversationMeta(meta.conversation);
14064
- return conversation === meta.conversation ? meta : {
14065
- ...meta,
14066
- conversation
14118
+ const normalizedLabel = normalizeOptionalString(meta.label);
14119
+ if (conversation === meta.conversation && normalizedLabel === meta.label) {
14120
+ return meta;
14121
+ }
14122
+ const rest = { ...meta };
14123
+ delete rest.label;
14124
+ delete rest.conversation;
14125
+ return {
14126
+ ...rest,
14127
+ ...normalizedLabel ? { label: normalizedLabel } : {},
14128
+ ...conversation !== undefined ? { conversation } : {}
14067
14129
  };
14068
14130
  }
14069
14131
  function isPrComment(raw) {
@@ -14097,6 +14159,7 @@ async function writeWorktreePrs(gitDir, prs) {
14097
14159
  }
14098
14160
 
14099
14161
  // backend/src/adapters/agent-runtime.ts
14162
+ var GENERATED_CODEX_HOOKS_EXCLUDE = ".codex/hooks.json";
14100
14163
  function shellQuote(value) {
14101
14164
  return `'${value.replaceAll("'", "'\\''")}'`;
14102
14165
  }
@@ -14115,6 +14178,7 @@ from pathlib import Path
14115
14178
 
14116
14179
 
14117
14180
  CONTROL_ENV_PATH = Path(__file__).resolve().with_name("control.env")
14181
+ CONTROL_REQUEST_TIMEOUT_SECONDS = 2
14118
14182
 
14119
14183
 
14120
14184
  def read_control_env():
@@ -14144,6 +14208,7 @@ def build_parser():
14144
14208
 
14145
14209
  status_changed = subparsers.add_parser("status-changed")
14146
14210
  status_changed.add_argument("--lifecycle", choices=["starting", "running", "idle", "stopped"], required=True)
14211
+ status_changed.add_argument("--best-effort", action="store_true")
14147
14212
 
14148
14213
  pr_opened = subparsers.add_parser("pr-opened")
14149
14214
  pr_opened.add_argument("--url")
@@ -14153,6 +14218,11 @@ def build_parser():
14153
14218
 
14154
14219
  subparsers.add_parser("claude-user-prompt-submit")
14155
14220
  subparsers.add_parser("claude-post-tool-use")
14221
+ subparsers.add_parser("codex-session-start")
14222
+ subparsers.add_parser("codex-user-prompt-submit")
14223
+ subparsers.add_parser("codex-permission-request")
14224
+ subparsers.add_parser("codex-post-tool-use")
14225
+ subparsers.add_parser("codex-stop")
14156
14226
 
14157
14227
  return parser
14158
14228
 
@@ -14195,6 +14265,41 @@ def read_hook_payload():
14195
14265
  return parsed if isinstance(parsed, dict) else {}
14196
14266
 
14197
14267
 
14268
+ def iter_string_values(value):
14269
+ if isinstance(value, str):
14270
+ yield value
14271
+ return
14272
+ if isinstance(value, dict):
14273
+ for child in value.values():
14274
+ yield from iter_string_values(child)
14275
+ return
14276
+ if isinstance(value, list):
14277
+ for child in value:
14278
+ yield from iter_string_values(child)
14279
+
14280
+
14281
+ def find_pr_url(value):
14282
+ for text in iter_string_values(value):
14283
+ match = re.search(r"https://github\\.com/[^\\s\\"]+/pull/\\d+", text)
14284
+ if match:
14285
+ return match.group(0)
14286
+ return None
14287
+
14288
+
14289
+ def maybe_send_pr_opened(hook_payload, control_env):
14290
+ tool_name = hook_payload.get("tool_name")
14291
+ tool_input = hook_payload.get("tool_input")
14292
+ if not isinstance(tool_input, dict) or tool_name != "Bash":
14293
+ return True
14294
+
14295
+ command = tool_input.get("command")
14296
+ if not isinstance(command, str) or "gh pr create" not in command:
14297
+ return True
14298
+
14299
+ pr_args = argparse.Namespace(url=find_pr_url(hook_payload.get("tool_response")))
14300
+ return send_payload(build_payload("pr-opened", pr_args, control_env), control_env)
14301
+
14302
+
14198
14303
  def send_payload(payload, control_env):
14199
14304
  request = urllib.request.Request(
14200
14305
  control_env["WEBMUX_CONTROL_URL"],
@@ -14207,7 +14312,7 @@ def send_payload(payload, control_env):
14207
14312
  )
14208
14313
 
14209
14314
  try:
14210
- with urllib.request.urlopen(request, timeout=10) as response:
14315
+ with urllib.request.urlopen(request, timeout=CONTROL_REQUEST_TIMEOUT_SECONDS) as response:
14211
14316
  if response.status < 200 or response.status >= 300:
14212
14317
  print(f"control endpoint returned HTTP {response.status}", file=sys.stderr)
14213
14318
  return False
@@ -14241,34 +14346,40 @@ def main():
14241
14346
  print(f"missing control env keys: {', '.join(missing)}", file=sys.stderr)
14242
14347
  return 1
14243
14348
 
14349
+ if parsed.command == "codex-session-start":
14350
+ send_payload(build_payload("status-changed", argparse.Namespace(lifecycle="idle"), control_env), control_env)
14351
+ return 0
14352
+
14353
+ if parsed.command == "codex-user-prompt-submit":
14354
+ send_payload(build_payload("status-changed", argparse.Namespace(lifecycle="running"), control_env), control_env)
14355
+ return 0
14356
+
14244
14357
  if parsed.command == "claude-user-prompt-submit":
14245
14358
  if not send_payload(build_payload("status-changed", argparse.Namespace(lifecycle="running"), control_env), control_env):
14246
14359
  return 1
14247
14360
  return 0
14248
14361
 
14249
- if parsed.command == "claude-post-tool-use":
14250
- hook_payload = read_hook_payload()
14251
- tool_name = hook_payload.get("tool_name")
14252
- tool_input = hook_payload.get("tool_input")
14253
- if not isinstance(tool_input, dict) or tool_name != "Bash":
14254
- return 0
14362
+ if parsed.command == "codex-permission-request":
14363
+ send_payload(build_payload("status-changed", argparse.Namespace(lifecycle="idle"), control_env), control_env)
14364
+ return 0
14255
14365
 
14256
- command = tool_input.get("command")
14257
- if not isinstance(command, str) or "gh pr create" not in command:
14258
- return 0
14366
+ if parsed.command == "codex-post-tool-use":
14367
+ hook_payload = read_hook_payload()
14368
+ maybe_send_pr_opened(hook_payload, control_env)
14369
+ return 0
14259
14370
 
14260
- pr_args = argparse.Namespace(url=None)
14261
- tool_response = hook_payload.get("tool_response")
14262
- if isinstance(tool_response, str):
14263
- match = re.search(r"https://github\\.com/[^\\s\\"]+/pull/\\d+", tool_response)
14264
- if match:
14265
- pr_args.url = match.group(0)
14371
+ if parsed.command == "claude-post-tool-use":
14372
+ hook_payload = read_hook_payload()
14373
+ return 0 if maybe_send_pr_opened(hook_payload, control_env) else 1
14266
14374
 
14267
- return 0 if send_payload(build_payload("pr-opened", pr_args, control_env), control_env) else 1
14375
+ if parsed.command == "codex-stop":
14376
+ send_payload(build_payload("agent-stopped", parsed, control_env), control_env)
14377
+ print(json.dumps({}))
14378
+ return 0
14268
14379
 
14269
14380
  payload = build_payload(parsed.command, parsed, control_env)
14270
14381
  if not send_payload(payload, control_env):
14271
- return 1
14382
+ return 0 if getattr(parsed, "best_effort", False) else 1
14272
14383
 
14273
14384
  return 0
14274
14385
 
@@ -14338,6 +14449,81 @@ function buildClaudeHookSettings(input) {
14338
14449
  }
14339
14450
  };
14340
14451
  }
14452
+ function buildCodexHookSettings(input) {
14453
+ const statusCommand = `${shellQuote(input.agentCtlPath)} status-changed --lifecycle running --best-effort`;
14454
+ return {
14455
+ hooks: {
14456
+ SessionStart: [
14457
+ {
14458
+ matcher: "startup|resume|clear",
14459
+ hooks: [
14460
+ {
14461
+ type: "command",
14462
+ command: `${shellQuote(input.agentCtlPath)} codex-session-start`,
14463
+ timeout: 30
14464
+ }
14465
+ ]
14466
+ }
14467
+ ],
14468
+ UserPromptSubmit: [
14469
+ {
14470
+ hooks: [
14471
+ {
14472
+ type: "command",
14473
+ command: `${shellQuote(input.agentCtlPath)} codex-user-prompt-submit`,
14474
+ timeout: 30
14475
+ }
14476
+ ]
14477
+ }
14478
+ ],
14479
+ PermissionRequest: [
14480
+ {
14481
+ hooks: [
14482
+ {
14483
+ type: "command",
14484
+ command: `${shellQuote(input.agentCtlPath)} codex-permission-request`,
14485
+ timeout: 30
14486
+ }
14487
+ ]
14488
+ }
14489
+ ],
14490
+ PreToolUse: [
14491
+ {
14492
+ hooks: [
14493
+ {
14494
+ type: "command",
14495
+ command: statusCommand,
14496
+ timeout: 30
14497
+ }
14498
+ ]
14499
+ }
14500
+ ],
14501
+ PostToolUse: [
14502
+ {
14503
+ matcher: "Bash",
14504
+ hooks: [
14505
+ {
14506
+ type: "command",
14507
+ command: `${shellQuote(input.agentCtlPath)} codex-post-tool-use`,
14508
+ timeout: 30
14509
+ }
14510
+ ]
14511
+ }
14512
+ ],
14513
+ Stop: [
14514
+ {
14515
+ hooks: [
14516
+ {
14517
+ type: "command",
14518
+ command: `${shellQuote(input.agentCtlPath)} codex-stop`,
14519
+ timeout: 30
14520
+ }
14521
+ ]
14522
+ }
14523
+ ]
14524
+ }
14525
+ };
14526
+ }
14341
14527
  async function mergeClaudeSettings(settingsPath, hookSettings) {
14342
14528
  let existing = {};
14343
14529
  try {
@@ -14357,13 +14543,77 @@ async function mergeClaudeSettings(settingsPath, hookSettings) {
14357
14543
  await Bun.write(settingsPath, JSON.stringify(merged, null, 2) + `
14358
14544
  `);
14359
14545
  }
14546
+ function commandStartsWithAgentCtl(command, agentCtlPath) {
14547
+ const trimmedCommand = command.trimStart();
14548
+ const quotedAgentCtlPath = shellQuote(agentCtlPath);
14549
+ return trimmedCommand === agentCtlPath || trimmedCommand.startsWith(`${agentCtlPath} `) || trimmedCommand === quotedAgentCtlPath || trimmedCommand.startsWith(`${quotedAgentCtlPath} `);
14550
+ }
14551
+ function isWebmuxHookGroup(group, agentCtlPath) {
14552
+ if (!isRecord5(group) || !Array.isArray(group.hooks))
14553
+ return false;
14554
+ return group.hooks.some((hook) => isRecord5(hook) && typeof hook.command === "string" && commandStartsWithAgentCtl(hook.command, agentCtlPath));
14555
+ }
14556
+ async function mergeCodexHooksFile(hooksPath, hookSettings, agentCtlPath) {
14557
+ let existing = {};
14558
+ try {
14559
+ const file = Bun.file(hooksPath);
14560
+ if (await file.exists()) {
14561
+ const parsed = await file.json();
14562
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
14563
+ existing = parsed;
14564
+ }
14565
+ }
14566
+ } catch {
14567
+ existing = {};
14568
+ }
14569
+ const existingHooks = isRecord5(existing.hooks) ? existing.hooks : {};
14570
+ const mergedHooks = { ...existingHooks };
14571
+ for (const [eventName, groups] of Object.entries(hookSettings)) {
14572
+ const eventGroups = existingHooks[eventName];
14573
+ const preservedGroups = Array.isArray(eventGroups) ? eventGroups.filter((group) => !isWebmuxHookGroup(group, agentCtlPath)) : [];
14574
+ mergedHooks[eventName] = [...preservedGroups, ...groups];
14575
+ }
14576
+ await Bun.write(hooksPath, JSON.stringify({ ...existing, hooks: mergedHooks }, null, 2) + `
14577
+ `);
14578
+ }
14579
+ async function resolveGitCommonDir(gitDir) {
14580
+ try {
14581
+ const commonDir = (await Bun.file(join4(gitDir, "commondir")).text()).trim();
14582
+ if (!commonDir)
14583
+ return gitDir;
14584
+ return commonDir.startsWith("/") ? commonDir : resolve3(gitDir, commonDir);
14585
+ } catch {
14586
+ return gitDir;
14587
+ }
14588
+ }
14589
+ async function ensureGeneratedCodexHooksIgnored(gitDir) {
14590
+ const commonDir = await resolveGitCommonDir(gitDir);
14591
+ const excludePath = join4(commonDir, "info", "exclude");
14592
+ let existing = "";
14593
+ try {
14594
+ existing = await Bun.file(excludePath).text();
14595
+ } catch {
14596
+ existing = "";
14597
+ }
14598
+ const lines = existing.split(/\r?\n/).map((line) => line.trim());
14599
+ if (lines.includes(GENERATED_CODEX_HOOKS_EXCLUDE))
14600
+ return;
14601
+ await mkdir3(dirname3(excludePath), { recursive: true });
14602
+ const separator = existing.length > 0 && !existing.endsWith(`
14603
+ `) ? `
14604
+ ` : "";
14605
+ await Bun.write(excludePath, `${existing}${separator}${GENERATED_CODEX_HOOKS_EXCLUDE}
14606
+ `);
14607
+ }
14360
14608
  async function ensureAgentRuntimeArtifacts(input) {
14361
14609
  const storagePaths = getWorktreeStoragePaths(input.gitDir);
14362
14610
  const artifacts = {
14363
14611
  agentCtlPath: join4(storagePaths.webmuxDir, "webmux-agentctl"),
14364
- claudeSettingsPath: join4(input.worktreePath, ".claude", "settings.local.json")
14612
+ claudeSettingsPath: join4(input.worktreePath, ".claude", "settings.local.json"),
14613
+ codexHooksPath: join4(input.worktreePath, ".codex", "hooks.json")
14365
14614
  };
14366
14615
  await mkdir3(dirname3(artifacts.claudeSettingsPath), { recursive: true });
14616
+ await mkdir3(dirname3(artifacts.codexHooksPath), { recursive: true });
14367
14617
  await Bun.write(artifacts.agentCtlPath, buildAgentCtlScript());
14368
14618
  await chmod2(artifacts.agentCtlPath, 493);
14369
14619
  const hookSettings = buildClaudeHookSettings(artifacts);
@@ -14372,12 +14622,14 @@ async function ensureAgentRuntimeArtifacts(input) {
14372
14622
  throw new Error("Invalid Claude hook settings");
14373
14623
  }
14374
14624
  await mergeClaudeSettings(artifacts.claudeSettingsPath, hooks);
14625
+ await ensureGeneratedCodexHooksIgnored(input.gitDir);
14626
+ await mergeCodexHooksFile(artifacts.codexHooksPath, buildCodexHookSettings(artifacts).hooks, artifacts.agentCtlPath);
14375
14627
  return artifacts;
14376
14628
  }
14377
14629
 
14378
14630
  // backend/src/adapters/tmux.ts
14379
14631
  import { createHash } from "crypto";
14380
- import { basename as basename2, resolve as resolve3 } from "path";
14632
+ import { basename as basename2, resolve as resolve4 } from "path";
14381
14633
  function runTmux(args) {
14382
14634
  const result = Bun.spawnSync(["tmux", ...args], {
14383
14635
  stdout: "pipe",
@@ -14405,7 +14657,7 @@ function sanitizeTmuxNameSegment(value, maxLength = 24) {
14405
14657
  return trimmed || "x";
14406
14658
  }
14407
14659
  function buildProjectSessionName(projectRoot2) {
14408
- const resolved = resolve3(projectRoot2);
14660
+ const resolved = resolve4(projectRoot2);
14409
14661
  const base = sanitizeTmuxNameSegment(basename2(resolved), 18);
14410
14662
  const hash = createHash("sha1").update(resolved).digest("hex").slice(0, 8);
14411
14663
  return `wm-${base}-${hash}`;
@@ -14546,15 +14798,16 @@ function buildDockerRuntimeBootstrap(runtimeEnvPath) {
14546
14798
  }
14547
14799
  function buildBuiltInAgentInvocation(input) {
14548
14800
  if (input.agent === "codex") {
14801
+ const hooksFlag = " --enable codex_hooks";
14549
14802
  const yoloFlag2 = input.yolo ? " --yolo" : "";
14550
14803
  if (input.launchMode === "resume") {
14551
- return `codex${yoloFlag2} resume --last`;
14804
+ return `codex${hooksFlag}${yoloFlag2} resume --last`;
14552
14805
  }
14553
14806
  const promptSuffix2 = input.prompt ? ` -- ${quoteShell(input.prompt)}` : "";
14554
14807
  if (input.systemPrompt) {
14555
- return `codex${yoloFlag2} -c ${quoteShell(`developer_instructions=${input.systemPrompt}`)}${promptSuffix2}`;
14808
+ return `codex${hooksFlag}${yoloFlag2} -c ${quoteShell(`developer_instructions=${input.systemPrompt}`)}${promptSuffix2}`;
14556
14809
  }
14557
- return `codex${yoloFlag2}${promptSuffix2}`;
14810
+ return `codex${hooksFlag}${yoloFlag2}${promptSuffix2}`;
14558
14811
  }
14559
14812
  const yoloFlag = input.yolo ? " --dangerously-skip-permissions" : "";
14560
14813
  if (input.launchMode === "resume") {
@@ -14627,7 +14880,7 @@ function buildDockerAgentPaneCommand(input) {
14627
14880
  }
14628
14881
 
14629
14882
  // backend/src/services/session-service.ts
14630
- import { resolve as resolve4 } from "path";
14883
+ import { resolve as resolve5 } from "path";
14631
14884
  function quoteShell2(value) {
14632
14885
  return `'${value.replaceAll("'", "'\\''")}'`;
14633
14886
  }
@@ -14641,7 +14894,7 @@ function buildCommandPaneStartupCommand(template, ctx) {
14641
14894
  if (!template.workingDir) {
14642
14895
  return template.command;
14643
14896
  }
14644
- const workingDir = resolve4(resolvePaneCwd(template, ctx), template.workingDir);
14897
+ const workingDir = resolve5(resolvePaneCwd(template, ctx), template.workingDir);
14645
14898
  return `cd -- ${quoteShell2(workingDir)} && ${template.command}`;
14646
14899
  }
14647
14900
  function resolvePaneStartupCommand(template, ctx) {
@@ -14721,7 +14974,7 @@ import { randomUUID } from "crypto";
14721
14974
 
14722
14975
  // backend/src/adapters/git.ts
14723
14976
  import { readdirSync, rmSync, statSync } from "fs";
14724
- import { resolve as resolve5, join as join5 } from "path";
14977
+ import { resolve as resolve6, join as join5 } from "path";
14725
14978
  function runGit(args, cwd) {
14726
14979
  const result = Bun.spawnSync(["git", ...args], {
14727
14980
  cwd,
@@ -14755,8 +15008,8 @@ function errorMessage(error) {
14755
15008
  return error instanceof Error ? error.message : String(error);
14756
15009
  }
14757
15010
  function isRegisteredWorktree(entries, worktreePath) {
14758
- const resolvedPath = resolve5(worktreePath);
14759
- return entries.some((entry) => resolve5(entry.path) === resolvedPath);
15011
+ const resolvedPath = resolve6(worktreePath);
15012
+ return entries.some((entry) => resolve6(entry.path) === resolvedPath);
14760
15013
  }
14761
15014
  function removeDirectory(path) {
14762
15015
  rmSync(path, {
@@ -14780,7 +15033,7 @@ function currentCheckoutRef(cwd) {
14780
15033
  function resolveRepoRoot(dir) {
14781
15034
  const direct = tryRunGit(["rev-parse", "--show-toplevel"], dir);
14782
15035
  if (direct.ok)
14783
- return resolve5(dir, direct.stdout);
15036
+ return resolve6(dir, direct.stdout);
14784
15037
  let entries;
14785
15038
  try {
14786
15039
  entries = readdirSync(dir);
@@ -14797,17 +15050,17 @@ function resolveRepoRoot(dir) {
14797
15050
  }
14798
15051
  const childResult = tryRunGit(["rev-parse", "--show-toplevel"], child);
14799
15052
  if (childResult.ok)
14800
- return resolve5(child, childResult.stdout);
15053
+ return resolve6(child, childResult.stdout);
14801
15054
  }
14802
15055
  return null;
14803
15056
  }
14804
15057
  function resolveWorktreeRoot(cwd) {
14805
15058
  const output = runGit(["rev-parse", "--show-toplevel"], cwd);
14806
- return resolve5(cwd, output);
15059
+ return resolve6(cwd, output);
14807
15060
  }
14808
15061
  function resolveWorktreeGitDir(cwd) {
14809
15062
  const output = runGit(["rev-parse", "--git-dir"], cwd);
14810
- return resolve5(cwd, output);
15063
+ return resolve6(cwd, output);
14811
15064
  }
14812
15065
  function parseGitWorktreePorcelain(output) {
14813
15066
  const entries = [];
@@ -15170,6 +15423,7 @@ function generateFallbackBranchName() {
15170
15423
 
15171
15424
  // backend/src/services/lifecycle-service.ts
15172
15425
  var DOCKER_CONTROL_HOST = "host.docker.internal";
15426
+ var MAX_WORKTREE_LABEL_LENGTH = 80;
15173
15427
  function toErrorMessage2(error) {
15174
15428
  return error instanceof Error ? error.message : String(error);
15175
15429
  }
@@ -15179,6 +15433,15 @@ function stringifyStartupEnvValue(value) {
15179
15433
  function trimTrailingSlashes(value) {
15180
15434
  return value.replace(/\/+$/, "");
15181
15435
  }
15436
+ function normalizeWorktreeLabel(label) {
15437
+ const trimmed = label?.trim() ?? "";
15438
+ if (!trimmed)
15439
+ return null;
15440
+ if (trimmed.length > MAX_WORKTREE_LABEL_LENGTH) {
15441
+ throw new LifecycleError(`Worktree label must be ${MAX_WORKTREE_LABEL_LENGTH} characters or fewer`, 400);
15442
+ }
15443
+ return trimmed;
15444
+ }
15182
15445
  function isLoopbackHostname(hostname) {
15183
15446
  return hostname === "127.0.0.1" || hostname === "localhost" || hostname === "::1" || hostname === "[::1]";
15184
15447
  }
@@ -15353,6 +15616,21 @@ class LifecycleService {
15353
15616
  throw this.wrapOperationError(error);
15354
15617
  }
15355
15618
  }
15619
+ async setWorktreeLabel(branch, label) {
15620
+ try {
15621
+ const normalizedLabel = normalizeWorktreeLabel(label);
15622
+ const resolved = await this.resolveExistingWorktree(branch);
15623
+ if (!resolved.meta) {
15624
+ throw new LifecycleError(`Worktree ${branch} has no managed metadata to label`, 409);
15625
+ }
15626
+ const nextMeta = this.withUpdatedLabel(resolved.meta, normalizedLabel);
15627
+ await writeWorktreeMeta(resolved.gitDir, nextMeta);
15628
+ await this.deps.reconciliation.reconcile(this.deps.projectRoot, { force: true });
15629
+ return { label: normalizedLabel };
15630
+ } catch (error) {
15631
+ throw this.wrapOperationError(error);
15632
+ }
15633
+ }
15356
15634
  listAvailableBranches(options = {}) {
15357
15635
  const localBranches = this.listLocalBranches().filter((branch) => isValidBranchName(branch));
15358
15636
  const remoteBranches = options.includeRemote ? this.listRemoteBranches().filter((branch) => isValidBranchName(branch)) : [];
@@ -15445,20 +15723,20 @@ class LifecycleService {
15445
15723
  return allocateServicePorts(metas, this.deps.config.services);
15446
15724
  }
15447
15725
  resolveWorktreePath(branch) {
15448
- return resolve6(this.deps.projectRoot, this.deps.config.workspace.worktreeRoot, branch);
15726
+ return resolve7(this.deps.projectRoot, this.deps.config.workspace.worktreeRoot, branch);
15449
15727
  }
15450
15728
  listLocalBranches() {
15451
- return this.deps.git.listLocalBranches(resolve6(this.deps.projectRoot));
15729
+ return this.deps.git.listLocalBranches(resolve7(this.deps.projectRoot));
15452
15730
  }
15453
15731
  listRemoteBranches() {
15454
- return this.deps.git.listRemoteBranches(resolve6(this.deps.projectRoot));
15732
+ return this.deps.git.listRemoteBranches(resolve7(this.deps.projectRoot));
15455
15733
  }
15456
15734
  listCheckedOutBranches() {
15457
- return new Set(this.deps.git.listWorktrees(resolve6(this.deps.projectRoot)).filter((entry) => !entry.bare && entry.branch !== null).map((entry) => entry.branch));
15735
+ return new Set(this.deps.git.listWorktrees(resolve7(this.deps.projectRoot)).filter((entry) => !entry.bare && entry.branch !== null).map((entry) => entry.branch));
15458
15736
  }
15459
15737
  listProjectWorktrees() {
15460
- const projectRoot2 = resolve6(this.deps.projectRoot);
15461
- return this.deps.git.listWorktrees(projectRoot2).filter((entry) => !entry.bare && resolve6(entry.path) !== projectRoot2);
15738
+ const projectRoot2 = resolve7(this.deps.projectRoot);
15739
+ return this.deps.git.listWorktrees(projectRoot2).filter((entry) => !entry.bare && resolve7(entry.path) !== projectRoot2);
15462
15740
  }
15463
15741
  async readManagedMetas() {
15464
15742
  const metas = await Promise.all(this.listProjectWorktrees().map(async (entry) => {
@@ -15534,6 +15812,15 @@ class LifecycleService {
15534
15812
  async updateWorktreeArchivedState(path, archived) {
15535
15813
  await this.deps.archiveState.setArchived(path, archived);
15536
15814
  }
15815
+ withUpdatedLabel(meta, label) {
15816
+ const nextMeta = { ...meta };
15817
+ if (label) {
15818
+ nextMeta.label = label;
15819
+ } else {
15820
+ delete nextMeta.label;
15821
+ }
15822
+ return nextMeta;
15823
+ }
15537
15824
  async closeBranchWindow(branch) {
15538
15825
  this.deps.tmux.killWindow(buildProjectSessionName(this.deps.projectRoot), buildWorktreeWindowName(branch));
15539
15826
  await this.deps.reconciliation.reconcile(this.deps.projectRoot, { force: true });
@@ -16532,6 +16819,7 @@ function mapCreationSnapshot(creating) {
16532
16819
  function mapWorktreeSnapshot(state, now, creating, isArchived, findLinearIssue, findAgentLabel) {
16533
16820
  return {
16534
16821
  branch: state.branch,
16822
+ label: state.label,
16535
16823
  ...state.baseBranch ? { baseBranch: state.baseBranch } : {},
16536
16824
  path: state.path,
16537
16825
  dir: state.path,
@@ -16554,6 +16842,7 @@ function mapWorktreeSnapshot(state, now, creating, isArchived, findLinearIssue,
16554
16842
  function mapCreatingWorktreeSnapshot(creating, isArchived, findLinearIssue, findAgentLabel) {
16555
16843
  return {
16556
16844
  branch: creating.branch,
16845
+ label: null,
16557
16846
  ...creating.baseBranch ? { baseBranch: creating.baseBranch } : {},
16558
16847
  path: creating.path,
16559
16848
  dir: creating.path,
@@ -17317,7 +17606,7 @@ class BunPortProbe {
17317
17606
  this.hostnames = hostnames;
17318
17607
  }
17319
17608
  isListening(port) {
17320
- return new Promise((resolve7) => {
17609
+ return new Promise((resolve8) => {
17321
17610
  let settled = false;
17322
17611
  let pending = this.hostnames.length;
17323
17612
  const settle = (result) => {
@@ -17326,20 +17615,20 @@ class BunPortProbe {
17326
17615
  if (result) {
17327
17616
  settled = true;
17328
17617
  clearTimeout(timer);
17329
- resolve7(true);
17618
+ resolve8(true);
17330
17619
  return;
17331
17620
  }
17332
17621
  pending--;
17333
17622
  if (pending === 0) {
17334
17623
  settled = true;
17335
17624
  clearTimeout(timer);
17336
- resolve7(false);
17625
+ resolve8(false);
17337
17626
  }
17338
17627
  };
17339
17628
  const timer = setTimeout(() => {
17340
17629
  if (!settled) {
17341
17630
  settled = true;
17342
- resolve7(false);
17631
+ resolve8(false);
17343
17632
  }
17344
17633
  }, this.timeoutMs);
17345
17634
  for (const hostname of this.hostnames) {
@@ -17417,7 +17706,7 @@ async function defaultSpawn(args, options = {}) {
17417
17706
  if (options.timeoutMs === undefined) {
17418
17707
  return await resultPromise;
17419
17708
  }
17420
- return await new Promise((resolve7, reject) => {
17709
+ return await new Promise((resolve8, reject) => {
17421
17710
  let settled = false;
17422
17711
  const timeoutId = setTimeout(() => {
17423
17712
  if (settled)
@@ -17433,7 +17722,7 @@ async function defaultSpawn(args, options = {}) {
17433
17722
  return;
17434
17723
  settled = true;
17435
17724
  clearTimeout(timeoutId);
17436
- resolve7(result);
17725
+ resolve8(result);
17437
17726
  }, (error) => {
17438
17727
  if (settled)
17439
17728
  return;
@@ -17571,8 +17860,8 @@ class ArchiveStateService {
17571
17860
  async withMutationLock(operation) {
17572
17861
  const previous = this.mutationQueue;
17573
17862
  let release = () => {};
17574
- this.mutationQueue = new Promise((resolve7) => {
17575
- release = resolve7;
17863
+ this.mutationQueue = new Promise((resolve8) => {
17864
+ release = resolve8;
17576
17865
  });
17577
17866
  await previous.catch(() => {});
17578
17867
  try {
@@ -17688,6 +17977,7 @@ function makeDefaultState(input) {
17688
17977
  return {
17689
17978
  worktreeId: input.worktreeId,
17690
17979
  branch: input.branch,
17980
+ label: input.label ?? null,
17691
17981
  baseBranch: input.baseBranch ?? null,
17692
17982
  path: input.path,
17693
17983
  profile: input.profile ?? null,
@@ -17733,6 +18023,8 @@ class ProjectRuntime {
17733
18023
  this.reindexBranch(existing.branch, input.branch, input.worktreeId);
17734
18024
  existing.path = input.path;
17735
18025
  existing.branch = input.branch;
18026
+ if (input.label !== undefined)
18027
+ existing.label = input.label;
17736
18028
  if (input.baseBranch !== undefined)
17737
18029
  existing.baseBranch = input.baseBranch;
17738
18030
  existing.profile = input.profile ?? existing.profile;
@@ -17847,9 +18139,9 @@ class ProjectRuntime {
17847
18139
  }
17848
18140
 
17849
18141
  // backend/src/services/reconciliation-service.ts
17850
- import { basename as basename3, resolve as resolve7 } from "path";
18142
+ import { basename as basename3, resolve as resolve8 } from "path";
17851
18143
  function makeUnmanagedWorktreeId(path) {
17852
- return `unmanaged:${resolve7(path)}`;
18144
+ return `unmanaged:${resolve8(path)}`;
17853
18145
  }
17854
18146
  function isValidPort2(port) {
17855
18147
  return port !== null && Number.isInteger(port) && port >= 1 && port <= 65535;
@@ -17906,7 +18198,7 @@ class ReconciliationService {
17906
18198
  if (!options.force && this.now() - this.lastReconciledAt < this.freshnessMs) {
17907
18199
  return;
17908
18200
  }
17909
- const normalizedRepoRoot = resolve7(repoRoot);
18201
+ const normalizedRepoRoot = resolve8(repoRoot);
17910
18202
  const reconcilePromise = this.runReconcile(normalizedRepoRoot).then(() => {
17911
18203
  this.lastReconciledAt = this.now();
17912
18204
  });
@@ -17925,7 +18217,7 @@ class ReconciliationService {
17925
18217
  windows = [];
17926
18218
  }
17927
18219
  const seenWorktreeIds = new Set;
17928
- const candidateEntries = worktrees.filter((entry) => !entry.bare && resolve7(entry.path) !== normalizedRepoRoot);
18220
+ const candidateEntries = worktrees.filter((entry) => !entry.bare && resolve8(entry.path) !== normalizedRepoRoot);
17929
18221
  const reconciledStates = await mapWithConcurrency(candidateEntries, this.concurrency, async (entry) => {
17930
18222
  const gitDir = this.deps.git.resolveWorktreeGitDir(entry.path);
17931
18223
  const meta = await readWorktreeMeta(gitDir);
@@ -17936,6 +18228,7 @@ class ReconciliationService {
17936
18228
  return {
17937
18229
  worktreeId,
17938
18230
  branch,
18231
+ label: meta?.label ?? null,
17939
18232
  baseBranch: meta?.baseBranch ?? null,
17940
18233
  path: entry.path,
17941
18234
  profile: meta?.profile ?? null,
@@ -17968,6 +18261,7 @@ class ReconciliationService {
17968
18261
  this.deps.runtime.upsertWorktree({
17969
18262
  worktreeId: state.worktreeId,
17970
18263
  branch: state.branch,
18264
+ label: state.label,
17971
18265
  baseBranch: state.baseBranch,
17972
18266
  path: state.path,
17973
18267
  profile: state.profile,
@@ -18166,7 +18460,7 @@ function getFrontendConfig() {
18166
18460
  startupEnvs: config.startupEnvs,
18167
18461
  linkedRepos: config.integrations.github.linkedRepos.map((lr) => ({
18168
18462
  alias: lr.alias,
18169
- ...lr.dir ? { dir: resolve8(PROJECT_DIR, lr.dir) } : {}
18463
+ ...lr.dir ? { dir: resolve9(PROJECT_DIR, lr.dir) } : {}
18170
18464
  })),
18171
18465
  linearAutoCreateWorktrees: linearAutoCreateEnabled,
18172
18466
  autoRemoveOnMerge: autoRemoveOnMergeEnabled,
@@ -18270,7 +18564,8 @@ async function resolveTerminalWorktree(branch) {
18270
18564
  attachTarget: {
18271
18565
  ownerSessionName: state.session.sessionName,
18272
18566
  windowName: state.session.windowName
18273
- }
18567
+ },
18568
+ agentName: state.agentName
18274
18569
  };
18275
18570
  }
18276
18571
  async function resolveAgentsTerminalWorktree(branch) {
@@ -18318,9 +18613,9 @@ async function hasValidControlToken(req) {
18318
18613
  }
18319
18614
  async function getWorktreeGitDirs() {
18320
18615
  const gitDirs = new Map;
18321
- const projectRoot2 = resolve8(PROJECT_DIR);
18616
+ const projectRoot2 = resolve9(PROJECT_DIR);
18322
18617
  for (const entry of git.listWorktrees(projectRoot2)) {
18323
- if (entry.bare || resolve8(entry.path) === projectRoot2 || !entry.branch)
18618
+ if (entry.bare || resolve9(entry.path) === projectRoot2 || !entry.branch)
18324
18619
  continue;
18325
18620
  gitDirs.set(entry.branch, git.resolveWorktreeGitDir(entry.path));
18326
18621
  }
@@ -18403,6 +18698,12 @@ function resolveWorktreeAgentChatSupport(worktree, action) {
18403
18698
  action
18404
18699
  });
18405
18700
  }
18701
+ function resolveWorktreeTerminalSubmitDelayMs(agentName) {
18702
+ return resolveAgentTerminalSubmitDelayMs({
18703
+ agentId: agentName,
18704
+ agent: agentName ? getAgentDefinition(config, agentName) : null
18705
+ });
18706
+ }
18406
18707
  async function apiAttachAgentsWorktree(branch) {
18407
18708
  touchDashboardActivity();
18408
18709
  const resolved = await resolveAgentsWorktree(branch);
@@ -18724,6 +19025,17 @@ async function apiSetWorktreeArchived(name, req) {
18724
19025
  log.debug(`[worktree:archive] done name=${name} archived=${body.archived}`);
18725
19026
  return jsonResponse({ ok: true, archived: body.archived });
18726
19027
  }
19028
+ async function apiSetWorktreeLabel(name, req) {
19029
+ ensureBranchNotBusy(name);
19030
+ const parsed = await parseJsonBody(req, SetWorktreeLabelRequestSchema);
19031
+ if (!parsed.ok)
19032
+ return parsed.response;
19033
+ const body = parsed.data;
19034
+ log.info(`[worktree:label] name=${name} label=${body.label ? JSON.stringify(body.label) : "null"}`);
19035
+ const result = await lifecycleService.setWorktreeLabel(name, body.label);
19036
+ log.debug(`[worktree:label] done name=${name} label=${result.label ? JSON.stringify(result.label) : "null"}`);
19037
+ return jsonResponse({ ok: true, label: result.label });
19038
+ }
18727
19039
  async function apiSendPrompt(name, req) {
18728
19040
  ensureBranchNotBusy(name);
18729
19041
  const parsed = await parseJsonBody(req, SendWorktreePromptRequestSchema);
@@ -18734,7 +19046,8 @@ async function apiSendPrompt(name, req) {
18734
19046
  const preamble = body.preamble;
18735
19047
  log.info(`[worktree:send] name=${name} text="${text.slice(0, 80)}"`);
18736
19048
  const terminalWorktree = await resolveTerminalWorktree(name);
18737
- const result = await sendPrompt(terminalWorktree.worktreeId, terminalWorktree.attachTarget, text, 0, preamble);
19049
+ const submitDelayMs = resolveWorktreeTerminalSubmitDelayMs(terminalWorktree.agentName);
19050
+ const result = await sendPrompt(terminalWorktree.worktreeId, terminalWorktree.attachTarget, text, 0, preamble, submitDelayMs);
18738
19051
  if (!result.ok)
18739
19052
  return errorResponse(result.error, 503);
18740
19053
  return jsonResponse({ ok: true });
@@ -18854,7 +19167,7 @@ async function apiPullMain(req) {
18854
19167
  return errorResponse(`Unknown linked repo: ${repo}`, 404);
18855
19168
  if (!linkedRepo.dir)
18856
19169
  return errorResponse(`Linked repo "${repo}" has no dir configured`, 400);
18857
- const resolvedDir = resolve8(PROJECT_DIR, linkedRepo.dir);
19170
+ const resolvedDir = resolve9(PROJECT_DIR, linkedRepo.dir);
18858
19171
  const repoRoot = git.resolveRepoRoot(resolvedDir);
18859
19172
  if (!repoRoot)
18860
19173
  return errorResponse(`Linked repo "${repo}" dir is not a git repository: ${resolvedDir}`, 400);
@@ -18945,7 +19258,7 @@ async function apiUploadFiles(name, req) {
18945
19258
  }
18946
19259
  const safeName = `${Date.now()}_${sanitizeFilename(entry.name)}`;
18947
19260
  const destPath = join8(uploadDir, safeName);
18948
- if (!resolve8(destPath).startsWith(uploadDir + "/")) {
19261
+ if (!resolve9(destPath).startsWith(uploadDir + "/")) {
18949
19262
  return errorResponse("Invalid filename", 400);
18950
19263
  }
18951
19264
  await Bun.write(destPath, entry);
@@ -19138,6 +19451,15 @@ Bun.serve({
19138
19451
  return catching(`PUT /api/worktrees/${name}/archive`, () => apiSetWorktreeArchived(name, req));
19139
19452
  }
19140
19453
  },
19454
+ [apiPaths.setWorktreeLabel]: {
19455
+ PUT: (req) => {
19456
+ const parsed = parseWorktreeNameParam(req.params);
19457
+ if (!parsed.ok)
19458
+ return parsed.response;
19459
+ const name = parsed.data;
19460
+ return catching(`PUT /api/worktrees/${name}/label`, () => apiSetWorktreeLabel(name, req));
19461
+ }
19462
+ },
19141
19463
  [apiPaths.sendWorktreePrompt]: {
19142
19464
  POST: (req) => {
19143
19465
  const parsed = parseWorktreeNameParam(req.params);
@@ -19214,8 +19536,8 @@ Bun.serve({
19214
19536
  if (STATIC_DIR) {
19215
19537
  const rawPath = url.pathname === "/" ? "index.html" : url.pathname;
19216
19538
  const filePath = join8(STATIC_DIR, rawPath);
19217
- const staticRoot = resolve8(STATIC_DIR);
19218
- if (!resolve8(filePath).startsWith(staticRoot + "/")) {
19539
+ const staticRoot = resolve9(STATIC_DIR);
19540
+ if (!resolve9(filePath).startsWith(staticRoot + "/")) {
19219
19541
  return new Response("Forbidden", { status: 403 });
19220
19542
  }
19221
19543
  const file = Bun.file(filePath);