wildcrane-runner 0.6.6 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/runner.mjs CHANGED
@@ -1,4 +1,4 @@
1
- // wildcrane-runner 0.6.6 — built by runner/scripts/build.mjs. Do not edit.
1
+ // wildcrane-runner 0.6.8 — built by runner/scripts/build.mjs. Do not edit.
2
2
  import { createRequire as __ai4kanbanRequire } from 'node:module'
3
3
  const require = __ai4kanbanRequire(import.meta.url)
4
4
  var __create = Object.create;
@@ -49,9 +49,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
49
49
  mod
50
50
  ));
51
51
 
52
- // ../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react.production.js
52
+ // node_modules/react/cjs/react.production.js
53
53
  var require_react_production = __commonJS({
54
- "../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react.production.js"(exports) {
54
+ "node_modules/react/cjs/react.production.js"(exports) {
55
55
  "use strict";
56
56
  var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element");
57
57
  var REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal");
@@ -501,9 +501,9 @@ var require_react_production = __commonJS({
501
501
  }
502
502
  });
503
503
 
504
- // ../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react.development.js
504
+ // node_modules/react/cjs/react.development.js
505
505
  var require_react_development = __commonJS({
506
- "../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react.development.js"(exports, module) {
506
+ "node_modules/react/cjs/react.development.js"(exports, module) {
507
507
  "use strict";
508
508
  "production" !== process.env.NODE_ENV && (function() {
509
509
  function defineDeprecationWarning(methodName, info) {
@@ -1498,9 +1498,9 @@ var require_react_development = __commonJS({
1498
1498
  }
1499
1499
  });
1500
1500
 
1501
- // ../../../../../../git/ai4kanban/runner/node_modules/react/index.js
1501
+ // node_modules/react/index.js
1502
1502
  var require_react = __commonJS({
1503
- "../../../../../../git/ai4kanban/runner/node_modules/react/index.js"(exports, module) {
1503
+ "node_modules/react/index.js"(exports, module) {
1504
1504
  "use strict";
1505
1505
  if (process.env.NODE_ENV === "production") {
1506
1506
  module.exports = require_react_production();
@@ -1510,9 +1510,9 @@ var require_react = __commonJS({
1510
1510
  }
1511
1511
  });
1512
1512
 
1513
- // ../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react-jsx-runtime.production.js
1513
+ // node_modules/react/cjs/react-jsx-runtime.production.js
1514
1514
  var require_react_jsx_runtime_production = __commonJS({
1515
- "../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react-jsx-runtime.production.js"(exports) {
1515
+ "node_modules/react/cjs/react-jsx-runtime.production.js"(exports) {
1516
1516
  "use strict";
1517
1517
  var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element");
1518
1518
  var REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment");
@@ -1540,9 +1540,9 @@ var require_react_jsx_runtime_production = __commonJS({
1540
1540
  }
1541
1541
  });
1542
1542
 
1543
- // ../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react-jsx-runtime.development.js
1543
+ // node_modules/react/cjs/react-jsx-runtime.development.js
1544
1544
  var require_react_jsx_runtime_development = __commonJS({
1545
- "../../../../../../git/ai4kanban/runner/node_modules/react/cjs/react-jsx-runtime.development.js"(exports) {
1545
+ "node_modules/react/cjs/react-jsx-runtime.development.js"(exports) {
1546
1546
  "use strict";
1547
1547
  "production" !== process.env.NODE_ENV && (function() {
1548
1548
  function getComponentNameFromType(type) {
@@ -1811,9 +1811,9 @@ var require_react_jsx_runtime_development = __commonJS({
1811
1811
  }
1812
1812
  });
1813
1813
 
1814
- // ../../../../../../git/ai4kanban/runner/node_modules/react/jsx-runtime.js
1814
+ // node_modules/react/jsx-runtime.js
1815
1815
  var require_jsx_runtime = __commonJS({
1816
- "../../../../../../git/ai4kanban/runner/node_modules/react/jsx-runtime.js"(exports, module) {
1816
+ "node_modules/react/jsx-runtime.js"(exports, module) {
1817
1817
  "use strict";
1818
1818
  if (process.env.NODE_ENV === "production") {
1819
1819
  module.exports = require_react_jsx_runtime_production();
@@ -1823,9 +1823,9 @@ var require_jsx_runtime = __commonJS({
1823
1823
  }
1824
1824
  });
1825
1825
 
1826
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom.production.js
1826
+ // node_modules/react-dom/cjs/react-dom.production.js
1827
1827
  var require_react_dom_production = __commonJS({
1828
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom.production.js"(exports) {
1828
+ "node_modules/react-dom/cjs/react-dom.production.js"(exports) {
1829
1829
  "use strict";
1830
1830
  var React4 = require_react();
1831
1831
  function formatProdErrorMessage(code) {
@@ -1980,9 +1980,9 @@ var require_react_dom_production = __commonJS({
1980
1980
  }
1981
1981
  });
1982
1982
 
1983
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom.development.js
1983
+ // node_modules/react-dom/cjs/react-dom.development.js
1984
1984
  var require_react_dom_development = __commonJS({
1985
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom.development.js"(exports) {
1985
+ "node_modules/react-dom/cjs/react-dom.development.js"(exports) {
1986
1986
  "use strict";
1987
1987
  "production" !== process.env.NODE_ENV && (function() {
1988
1988
  function noop() {
@@ -2235,9 +2235,9 @@ var require_react_dom_development = __commonJS({
2235
2235
  }
2236
2236
  });
2237
2237
 
2238
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/index.js
2238
+ // node_modules/react-dom/index.js
2239
2239
  var require_react_dom = __commonJS({
2240
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/index.js"(exports, module) {
2240
+ "node_modules/react-dom/index.js"(exports, module) {
2241
2241
  "use strict";
2242
2242
  function checkDCE() {
2243
2243
  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === "undefined" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== "function") {
@@ -2261,9 +2261,9 @@ var require_react_dom = __commonJS({
2261
2261
  }
2262
2262
  });
2263
2263
 
2264
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js
2264
+ // node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js
2265
2265
  var require_react_dom_server_legacy_node_production = __commonJS({
2266
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js"(exports) {
2266
+ "node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js"(exports) {
2267
2267
  "use strict";
2268
2268
  var React4 = require_react();
2269
2269
  var ReactDOM = require_react_dom();
@@ -7512,9 +7512,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
7512
7512
  }
7513
7513
  });
7514
7514
 
7515
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server.node.production.js
7515
+ // node_modules/react-dom/cjs/react-dom-server.node.production.js
7516
7516
  var require_react_dom_server_node_production = __commonJS({
7517
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server.node.production.js"(exports) {
7517
+ "node_modules/react-dom/cjs/react-dom-server.node.production.js"(exports) {
7518
7518
  "use strict";
7519
7519
  var util = __require("util");
7520
7520
  var crypto6 = __require("crypto");
@@ -7572,13 +7572,13 @@ var require_react_dom_server_node_production = __commonJS({
7572
7572
  var target = currentView;
7573
7573
  0 < writtenBytes && (target = currentView.subarray(writtenBytes));
7574
7574
  target = textEncoder.encodeInto(chunk, target);
7575
- var read = target.read;
7575
+ var read2 = target.read;
7576
7576
  writtenBytes += target.written;
7577
- read < chunk.length && (writeToDestination(
7577
+ read2 < chunk.length && (writeToDestination(
7578
7578
  destination,
7579
7579
  currentView.subarray(0, writtenBytes)
7580
7580
  ), currentView = new Uint8Array(4096), writtenBytes = textEncoder.encodeInto(
7581
- chunk.slice(read),
7581
+ chunk.slice(read2),
7582
7582
  currentView
7583
7583
  ).written);
7584
7584
  4096 === writtenBytes && (writeToDestination(destination, currentView), currentView = new Uint8Array(4096), writtenBytes = 0);
@@ -13686,9 +13686,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
13686
13686
  }
13687
13687
  });
13688
13688
 
13689
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js
13689
+ // node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js
13690
13690
  var require_react_dom_server_legacy_node_development = __commonJS({
13691
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js"(exports) {
13691
+ "node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js"(exports) {
13692
13692
  "use strict";
13693
13693
  "production" !== process.env.NODE_ENV && (function() {
13694
13694
  function styleReplacer(match, prefix2, s, suffix2) {
@@ -21196,9 +21196,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
21196
21196
  }
21197
21197
  });
21198
21198
 
21199
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server.node.development.js
21199
+ // node_modules/react-dom/cjs/react-dom-server.node.development.js
21200
21200
  var require_react_dom_server_node_development = __commonJS({
21201
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/cjs/react-dom-server.node.development.js"(exports) {
21201
+ "node_modules/react-dom/cjs/react-dom-server.node.development.js"(exports) {
21202
21202
  "use strict";
21203
21203
  "production" !== process.env.NODE_ENV && (function() {
21204
21204
  function styleReplacer(match, prefix2, s, suffix2) {
@@ -21328,13 +21328,13 @@ var require_react_dom_server_node_development = __commonJS({
21328
21328
  var target = currentView;
21329
21329
  0 < writtenBytes && (target = currentView.subarray(writtenBytes));
21330
21330
  target = textEncoder.encodeInto(chunk, target);
21331
- var read = target.read;
21331
+ var read2 = target.read;
21332
21332
  writtenBytes += target.written;
21333
- read < chunk.length && (writeToDestination(
21333
+ read2 < chunk.length && (writeToDestination(
21334
21334
  destination,
21335
21335
  currentView.subarray(0, writtenBytes)
21336
21336
  ), currentView = new Uint8Array(4096), writtenBytes = textEncoder.encodeInto(
21337
- chunk.slice(read),
21337
+ chunk.slice(read2),
21338
21338
  currentView
21339
21339
  ).written);
21340
21340
  4096 === writtenBytes && (writeToDestination(destination, currentView), currentView = new Uint8Array(4096), writtenBytes = 0);
@@ -29495,9 +29495,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
29495
29495
  }
29496
29496
  });
29497
29497
 
29498
- // ../../../../../../git/ai4kanban/runner/node_modules/react-dom/server.node.js
29498
+ // node_modules/react-dom/server.node.js
29499
29499
  var require_server_node = __commonJS({
29500
- "../../../../../../git/ai4kanban/runner/node_modules/react-dom/server.node.js"(exports) {
29500
+ "node_modules/react-dom/server.node.js"(exports) {
29501
29501
  "use strict";
29502
29502
  var l2;
29503
29503
  var s;
@@ -29518,9 +29518,9 @@ var require_server_node = __commonJS({
29518
29518
  }
29519
29519
  });
29520
29520
 
29521
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/keywords.js
29521
+ // node_modules/sucrase/dist/parser/tokenizer/keywords.js
29522
29522
  var require_keywords = __commonJS({
29523
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/keywords.js"(exports) {
29523
+ "node_modules/sucrase/dist/parser/tokenizer/keywords.js"(exports) {
29524
29524
  "use strict";
29525
29525
  Object.defineProperty(exports, "__esModule", { value: true });
29526
29526
  var ContextualKeyword;
@@ -29611,9 +29611,9 @@ var require_keywords = __commonJS({
29611
29611
  }
29612
29612
  });
29613
29613
 
29614
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/types.js
29614
+ // node_modules/sucrase/dist/parser/tokenizer/types.js
29615
29615
  var require_types = __commonJS({
29616
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/types.js"(exports) {
29616
+ "node_modules/sucrase/dist/parser/tokenizer/types.js"(exports) {
29617
29617
  "use strict";
29618
29618
  Object.defineProperty(exports, "__esModule", { value: true });
29619
29619
  var TokenType;
@@ -30095,9 +30095,9 @@ var require_types = __commonJS({
30095
30095
  }
30096
30096
  });
30097
30097
 
30098
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/state.js
30098
+ // node_modules/sucrase/dist/parser/tokenizer/state.js
30099
30099
  var require_state = __commonJS({
30100
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/state.js"(exports) {
30100
+ "node_modules/sucrase/dist/parser/tokenizer/state.js"(exports) {
30101
30101
  "use strict";
30102
30102
  Object.defineProperty(exports, "__esModule", { value: true });
30103
30103
  var _keywords = require_keywords();
@@ -30236,9 +30236,9 @@ var require_state = __commonJS({
30236
30236
  }
30237
30237
  });
30238
30238
 
30239
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/charcodes.js
30239
+ // node_modules/sucrase/dist/parser/util/charcodes.js
30240
30240
  var require_charcodes = __commonJS({
30241
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/charcodes.js"(exports) {
30241
+ "node_modules/sucrase/dist/parser/util/charcodes.js"(exports) {
30242
30242
  "use strict";
30243
30243
  Object.defineProperty(exports, "__esModule", { value: true });
30244
30244
  var charCodes;
@@ -30459,9 +30459,9 @@ var require_charcodes = __commonJS({
30459
30459
  }
30460
30460
  });
30461
30461
 
30462
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/base.js
30462
+ // node_modules/sucrase/dist/parser/traverser/base.js
30463
30463
  var require_base = __commonJS({
30464
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/base.js"(exports) {
30464
+ "node_modules/sucrase/dist/parser/traverser/base.js"(exports) {
30465
30465
  "use strict";
30466
30466
  Object.defineProperty(exports, "__esModule", { value: true });
30467
30467
  function _interopRequireDefault(obj3) {
@@ -30522,9 +30522,9 @@ var require_base = __commonJS({
30522
30522
  }
30523
30523
  });
30524
30524
 
30525
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/util.js
30525
+ // node_modules/sucrase/dist/parser/traverser/util.js
30526
30526
  var require_util = __commonJS({
30527
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/util.js"(exports) {
30527
+ "node_modules/sucrase/dist/parser/traverser/util.js"(exports) {
30528
30528
  "use strict";
30529
30529
  Object.defineProperty(exports, "__esModule", { value: true });
30530
30530
  var _index = require_tokenizer();
@@ -30608,9 +30608,9 @@ var require_util = __commonJS({
30608
30608
  }
30609
30609
  });
30610
30610
 
30611
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/whitespace.js
30611
+ // node_modules/sucrase/dist/parser/util/whitespace.js
30612
30612
  var require_whitespace = __commonJS({
30613
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/whitespace.js"(exports) {
30613
+ "node_modules/sucrase/dist/parser/util/whitespace.js"(exports) {
30614
30614
  "use strict";
30615
30615
  Object.defineProperty(exports, "__esModule", { value: true });
30616
30616
  var _charcodes = require_charcodes();
@@ -30663,9 +30663,9 @@ var require_whitespace = __commonJS({
30663
30663
  }
30664
30664
  });
30665
30665
 
30666
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/identifier.js
30666
+ // node_modules/sucrase/dist/parser/util/identifier.js
30667
30667
  var require_identifier = __commonJS({
30668
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/util/identifier.js"(exports) {
30668
+ "node_modules/sucrase/dist/parser/util/identifier.js"(exports) {
30669
30669
  "use strict";
30670
30670
  Object.defineProperty(exports, "__esModule", { value: true });
30671
30671
  var _charcodes = require_charcodes();
@@ -30701,9 +30701,9 @@ var require_identifier = __commonJS({
30701
30701
  }
30702
30702
  });
30703
30703
 
30704
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/readWordTree.js
30704
+ // node_modules/sucrase/dist/parser/tokenizer/readWordTree.js
30705
30705
  var require_readWordTree = __commonJS({
30706
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/readWordTree.js"(exports) {
30706
+ "node_modules/sucrase/dist/parser/tokenizer/readWordTree.js"(exports) {
30707
30707
  "use strict";
30708
30708
  Object.defineProperty(exports, "__esModule", { value: true });
30709
30709
  var _keywords = require_keywords();
@@ -40010,9 +40010,9 @@ var require_readWordTree = __commonJS({
40010
40010
  }
40011
40011
  });
40012
40012
 
40013
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/readWord.js
40013
+ // node_modules/sucrase/dist/parser/tokenizer/readWord.js
40014
40014
  var require_readWord = __commonJS({
40015
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/readWord.js"(exports) {
40015
+ "node_modules/sucrase/dist/parser/tokenizer/readWord.js"(exports) {
40016
40016
  "use strict";
40017
40017
  Object.defineProperty(exports, "__esModule", { value: true });
40018
40018
  var _base = require_base();
@@ -40073,9 +40073,9 @@ var require_readWord = __commonJS({
40073
40073
  }
40074
40074
  });
40075
40075
 
40076
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/index.js
40076
+ // node_modules/sucrase/dist/parser/tokenizer/index.js
40077
40077
  var require_tokenizer = __commonJS({
40078
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/tokenizer/index.js"(exports) {
40078
+ "node_modules/sucrase/dist/parser/tokenizer/index.js"(exports) {
40079
40079
  "use strict";
40080
40080
  Object.defineProperty(exports, "__esModule", { value: true });
40081
40081
  function _interopRequireDefault(obj3) {
@@ -40827,9 +40827,9 @@ var require_tokenizer = __commonJS({
40827
40827
  }
40828
40828
  });
40829
40829
 
40830
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js
40830
+ // node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js
40831
40831
  var require_getImportExportSpecifierInfo = __commonJS({
40832
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js"(exports) {
40832
+ "node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js"(exports) {
40833
40833
  "use strict";
40834
40834
  Object.defineProperty(exports, "__esModule", { value: true });
40835
40835
  var _types = require_types();
@@ -40881,9 +40881,9 @@ var require_getImportExportSpecifierInfo = __commonJS({
40881
40881
  }
40882
40882
  });
40883
40883
 
40884
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js
40884
+ // node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js
40885
40885
  var require_xhtml = __commonJS({
40886
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js"(exports) {
40886
+ "node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js"(exports) {
40887
40887
  "use strict";
40888
40888
  Object.defineProperty(exports, "__esModule", { value: true });
40889
40889
  exports.default = /* @__PURE__ */ new Map([
@@ -41144,9 +41144,9 @@ var require_xhtml = __commonJS({
41144
41144
  }
41145
41145
  });
41146
41146
 
41147
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getJSXPragmaInfo.js
41147
+ // node_modules/sucrase/dist/util/getJSXPragmaInfo.js
41148
41148
  var require_getJSXPragmaInfo = __commonJS({
41149
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getJSXPragmaInfo.js"(exports) {
41149
+ "node_modules/sucrase/dist/util/getJSXPragmaInfo.js"(exports) {
41150
41150
  "use strict";
41151
41151
  Object.defineProperty(exports, "__esModule", { value: true });
41152
41152
  function getJSXPragmaInfo(options) {
@@ -41165,9 +41165,9 @@ var require_getJSXPragmaInfo = __commonJS({
41165
41165
  }
41166
41166
  });
41167
41167
 
41168
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/Transformer.js
41168
+ // node_modules/sucrase/dist/transformers/Transformer.js
41169
41169
  var require_Transformer = __commonJS({
41170
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/Transformer.js"(exports) {
41170
+ "node_modules/sucrase/dist/transformers/Transformer.js"(exports) {
41171
41171
  "use strict";
41172
41172
  Object.defineProperty(exports, "__esModule", { value: true });
41173
41173
  var Transformer = class {
@@ -41186,9 +41186,9 @@ var require_Transformer = __commonJS({
41186
41186
  }
41187
41187
  });
41188
41188
 
41189
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/JSXTransformer.js
41189
+ // node_modules/sucrase/dist/transformers/JSXTransformer.js
41190
41190
  var require_JSXTransformer = __commonJS({
41191
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/JSXTransformer.js"(exports) {
41191
+ "node_modules/sucrase/dist/transformers/JSXTransformer.js"(exports) {
41192
41192
  "use strict";
41193
41193
  Object.defineProperty(exports, "__esModule", { value: true });
41194
41194
  function _interopRequireDefault(obj3) {
@@ -41256,8 +41256,8 @@ var require_JSXTransformer = __commonJS({
41256
41256
  }
41257
41257
  if (this.isAutomaticRuntime) {
41258
41258
  if (this.importProcessor) {
41259
- for (const [path33, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) {
41260
- prefix += `var ${resolvedName} = require("${path33}");`;
41259
+ for (const [path36, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) {
41260
+ prefix += `var ${resolvedName} = require("${path36}");`;
41261
41261
  }
41262
41262
  } else {
41263
41263
  const { createElement: createElementResolution, ...otherResolutions } = this.esmAutomaticImportNameResolutions;
@@ -41450,11 +41450,11 @@ var require_JSXTransformer = __commonJS({
41450
41450
  }
41451
41451
  claimAutoImportedName(funcName, importPathSuffix) {
41452
41452
  if (this.importProcessor) {
41453
- const path33 = this.jsxImportSource + importPathSuffix;
41454
- if (!this.cjsAutomaticModuleNameResolutions[path33]) {
41455
- this.cjsAutomaticModuleNameResolutions[path33] = this.importProcessor.getFreeIdentifierForPath(path33);
41453
+ const path36 = this.jsxImportSource + importPathSuffix;
41454
+ if (!this.cjsAutomaticModuleNameResolutions[path36]) {
41455
+ this.cjsAutomaticModuleNameResolutions[path36] = this.importProcessor.getFreeIdentifierForPath(path36);
41456
41456
  }
41457
- return `${this.cjsAutomaticModuleNameResolutions[path33]}.${funcName}`;
41457
+ return `${this.cjsAutomaticModuleNameResolutions[path36]}.${funcName}`;
41458
41458
  } else {
41459
41459
  if (!this.esmAutomaticImportNameResolutions[funcName]) {
41460
41460
  this.esmAutomaticImportNameResolutions[funcName] = this.nameManager.claimFreeName(
@@ -41787,9 +41787,9 @@ var require_JSXTransformer = __commonJS({
41787
41787
  }
41788
41788
  });
41789
41789
 
41790
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getNonTypeIdentifiers.js
41790
+ // node_modules/sucrase/dist/util/getNonTypeIdentifiers.js
41791
41791
  var require_getNonTypeIdentifiers = __commonJS({
41792
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getNonTypeIdentifiers.js"(exports) {
41792
+ "node_modules/sucrase/dist/util/getNonTypeIdentifiers.js"(exports) {
41793
41793
  "use strict";
41794
41794
  Object.defineProperty(exports, "__esModule", { value: true });
41795
41795
  function _interopRequireDefault(obj3) {
@@ -41828,9 +41828,9 @@ var require_getNonTypeIdentifiers = __commonJS({
41828
41828
  }
41829
41829
  });
41830
41830
 
41831
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/CJSImportProcessor.js
41831
+ // node_modules/sucrase/dist/CJSImportProcessor.js
41832
41832
  var require_CJSImportProcessor = __commonJS({
41833
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/CJSImportProcessor.js"(exports) {
41833
+ "node_modules/sucrase/dist/CJSImportProcessor.js"(exports) {
41834
41834
  "use strict";
41835
41835
  Object.defineProperty(exports, "__esModule", { value: true });
41836
41836
  function _interopRequireDefault(obj3) {
@@ -41890,7 +41890,7 @@ var require_CJSImportProcessor = __commonJS({
41890
41890
  */
41891
41891
  pruneTypeOnlyImports() {
41892
41892
  this.nonTypeIdentifiers = _getNonTypeIdentifiers.getNonTypeIdentifiers.call(void 0, this.tokens, this.options);
41893
- for (const [path33, importInfo] of this.importInfoByPath.entries()) {
41893
+ for (const [path36, importInfo] of this.importInfoByPath.entries()) {
41894
41894
  if (importInfo.hasBareImport || importInfo.hasStarExport || importInfo.exportStarNames.length > 0 || importInfo.namedExports.length > 0) {
41895
41895
  continue;
41896
41896
  }
@@ -41900,7 +41900,7 @@ var require_CJSImportProcessor = __commonJS({
41900
41900
  ...importInfo.namedImports.map(({ localName }) => localName)
41901
41901
  ];
41902
41902
  if (names2.every((name) => this.shouldAutomaticallyElideImportedName(name))) {
41903
- this.importsToReplace.set(path33, "");
41903
+ this.importsToReplace.set(path36, "");
41904
41904
  }
41905
41905
  }
41906
41906
  }
@@ -41908,7 +41908,7 @@ var require_CJSImportProcessor = __commonJS({
41908
41908
  return this.isTypeScriptTransformEnabled && !this.keepUnusedImports && !this.nonTypeIdentifiers.has(name);
41909
41909
  }
41910
41910
  generateImportReplacements() {
41911
- for (const [path33, importInfo] of this.importInfoByPath.entries()) {
41911
+ for (const [path36, importInfo] of this.importInfoByPath.entries()) {
41912
41912
  const {
41913
41913
  defaultNames,
41914
41914
  wildcardNames,
@@ -41918,17 +41918,17 @@ var require_CJSImportProcessor = __commonJS({
41918
41918
  hasStarExport
41919
41919
  } = importInfo;
41920
41920
  if (defaultNames.length === 0 && wildcardNames.length === 0 && namedImports.length === 0 && namedExports.length === 0 && exportStarNames.length === 0 && !hasStarExport) {
41921
- this.importsToReplace.set(path33, `require('${path33}');`);
41921
+ this.importsToReplace.set(path36, `require('${path36}');`);
41922
41922
  continue;
41923
41923
  }
41924
- const primaryImportName = this.getFreeIdentifierForPath(path33);
41924
+ const primaryImportName = this.getFreeIdentifierForPath(path36);
41925
41925
  let secondaryImportName;
41926
41926
  if (this.enableLegacyTypeScriptModuleInterop) {
41927
41927
  secondaryImportName = primaryImportName;
41928
41928
  } else {
41929
- secondaryImportName = wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path33);
41929
+ secondaryImportName = wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path36);
41930
41930
  }
41931
- let requireCode = `var ${primaryImportName} = require('${path33}');`;
41931
+ let requireCode = `var ${primaryImportName} = require('${path36}');`;
41932
41932
  if (wildcardNames.length > 0) {
41933
41933
  for (const wildcardName of wildcardNames) {
41934
41934
  const moduleExpr = this.enableLegacyTypeScriptModuleInterop ? primaryImportName : `${this.helperManager.getHelperName("interopRequireWildcard")}(${primaryImportName})`;
@@ -41956,7 +41956,7 @@ var require_CJSImportProcessor = __commonJS({
41956
41956
  "createStarExport"
41957
41957
  )}(${primaryImportName});`;
41958
41958
  }
41959
- this.importsToReplace.set(path33, requireCode);
41959
+ this.importsToReplace.set(path36, requireCode);
41960
41960
  for (const defaultName of defaultNames) {
41961
41961
  this.identifierReplacements.set(defaultName, `${secondaryImportName}.default`);
41962
41962
  }
@@ -41965,8 +41965,8 @@ var require_CJSImportProcessor = __commonJS({
41965
41965
  }
41966
41966
  }
41967
41967
  }
41968
- getFreeIdentifierForPath(path33) {
41969
- const components = path33.split("/");
41968
+ getFreeIdentifierForPath(path36) {
41969
+ const components = path36.split("/");
41970
41970
  const lastComponent = components[components.length - 1];
41971
41971
  const baseName = lastComponent.replace(/\W/g, "");
41972
41972
  return this.nameManager.claimFreeName(`_${baseName}`);
@@ -42011,8 +42011,8 @@ var require_CJSImportProcessor = __commonJS({
42011
42011
  if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) {
42012
42012
  throw new Error("Expected string token at the end of import statement.");
42013
42013
  }
42014
- const path33 = this.tokens.stringValueAtIndex(index);
42015
- const importInfo = this.getImportInfo(path33);
42014
+ const path36 = this.tokens.stringValueAtIndex(index);
42015
+ const importInfo = this.getImportInfo(path36);
42016
42016
  importInfo.defaultNames.push(...defaultNames);
42017
42017
  importInfo.wildcardNames.push(...wildcardNames);
42018
42018
  importInfo.namedImports.push(...namedImports);
@@ -42079,8 +42079,8 @@ var require_CJSImportProcessor = __commonJS({
42079
42079
  if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) {
42080
42080
  throw new Error("Expected string token at the end of import statement.");
42081
42081
  }
42082
- const path33 = this.tokens.stringValueAtIndex(index);
42083
- const importInfo = this.getImportInfo(path33);
42082
+ const path36 = this.tokens.stringValueAtIndex(index);
42083
+ const importInfo = this.getImportInfo(path36);
42084
42084
  importInfo.namedExports.push(...namedImports);
42085
42085
  }
42086
42086
  preprocessExportStarAtIndex(index) {
@@ -42095,8 +42095,8 @@ var require_CJSImportProcessor = __commonJS({
42095
42095
  if (!this.tokens.matches1AtIndex(index, _types.TokenType.string)) {
42096
42096
  throw new Error("Expected string token at the end of star export statement.");
42097
42097
  }
42098
- const path33 = this.tokens.stringValueAtIndex(index);
42099
- const importInfo = this.getImportInfo(path33);
42098
+ const path36 = this.tokens.stringValueAtIndex(index);
42099
+ const importInfo = this.getImportInfo(path36);
42100
42100
  if (exportedName !== null) {
42101
42101
  importInfo.exportStarNames.push(exportedName);
42102
42102
  } else {
@@ -42136,8 +42136,8 @@ var require_CJSImportProcessor = __commonJS({
42136
42136
  * Get a mutable import info object for this path, creating one if it doesn't
42137
42137
  * exist yet.
42138
42138
  */
42139
- getImportInfo(path33) {
42140
- const existingInfo = this.importInfoByPath.get(path33);
42139
+ getImportInfo(path36) {
42140
+ const existingInfo = this.importInfoByPath.get(path36);
42141
42141
  if (existingInfo) {
42142
42142
  return existingInfo;
42143
42143
  }
@@ -42150,7 +42150,7 @@ var require_CJSImportProcessor = __commonJS({
42150
42150
  exportStarNames: [],
42151
42151
  hasStarExport: false
42152
42152
  };
42153
- this.importInfoByPath.set(path33, newInfo);
42153
+ this.importInfoByPath.set(path36, newInfo);
42154
42154
  return newInfo;
42155
42155
  }
42156
42156
  addExportBinding(localName, exportedName) {
@@ -42196,9 +42196,9 @@ var require_CJSImportProcessor = __commonJS({
42196
42196
  }
42197
42197
  });
42198
42198
 
42199
- // ../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js
42199
+ // node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js
42200
42200
  var require_sourcemap_codec_umd = __commonJS({
42201
- "../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js"(exports, module) {
42201
+ "node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js"(exports, module) {
42202
42202
  (function(global, factory) {
42203
42203
  if (typeof exports === "object" && typeof module !== "undefined") {
42204
42204
  factory(module);
@@ -42699,9 +42699,9 @@ var require_sourcemap_codec_umd = __commonJS({
42699
42699
  }
42700
42700
  });
42701
42701
 
42702
- // ../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js
42702
+ // node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js
42703
42703
  var require_resolve_uri_umd = __commonJS({
42704
- "../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js"(exports, module) {
42704
+ "node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js"(exports, module) {
42705
42705
  (function(global, factory) {
42706
42706
  typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.resolveURI = factory());
42707
42707
  })(exports, (function() {
@@ -42730,16 +42730,16 @@ var require_resolve_uri_umd = __commonJS({
42730
42730
  }
42731
42731
  function parseFileUrl(input) {
42732
42732
  const match = fileRegex.exec(input);
42733
- const path33 = match[2];
42734
- return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path33) ? path33 : "/" + path33, match[3] || "", match[4] || "");
42733
+ const path36 = match[2];
42734
+ return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path36) ? path36 : "/" + path36, match[3] || "", match[4] || "");
42735
42735
  }
42736
- function makeUrl(scheme, user, host, port, path33, query, hash) {
42736
+ function makeUrl(scheme, user, host, port, path36, query, hash) {
42737
42737
  return {
42738
42738
  scheme,
42739
42739
  user,
42740
42740
  host,
42741
42741
  port,
42742
- path: path33,
42742
+ path: path36,
42743
42743
  query,
42744
42744
  hash,
42745
42745
  type: 7
@@ -42769,11 +42769,11 @@ var require_resolve_uri_umd = __commonJS({
42769
42769
  url.type = input ? input.startsWith("?") ? 3 : input.startsWith("#") ? 2 : 4 : 1;
42770
42770
  return url;
42771
42771
  }
42772
- function stripPathFilename(path33) {
42773
- if (path33.endsWith("/.."))
42774
- return path33;
42775
- const index = path33.lastIndexOf("/");
42776
- return path33.slice(0, index + 1);
42772
+ function stripPathFilename(path36) {
42773
+ if (path36.endsWith("/.."))
42774
+ return path36;
42775
+ const index = path36.lastIndexOf("/");
42776
+ return path36.slice(0, index + 1);
42777
42777
  }
42778
42778
  function mergePaths(url, base) {
42779
42779
  normalizePath(base, base.type);
@@ -42811,14 +42811,14 @@ var require_resolve_uri_umd = __commonJS({
42811
42811
  pieces[pointer++] = piece;
42812
42812
  positive++;
42813
42813
  }
42814
- let path33 = "";
42814
+ let path36 = "";
42815
42815
  for (let i = 1; i < pointer; i++) {
42816
- path33 += "/" + pieces[i];
42816
+ path36 += "/" + pieces[i];
42817
42817
  }
42818
- if (!path33 || addTrailingSlash && !path33.endsWith("/..")) {
42819
- path33 += "/";
42818
+ if (!path36 || addTrailingSlash && !path36.endsWith("/..")) {
42819
+ path36 += "/";
42820
42820
  }
42821
- url.path = path33;
42821
+ url.path = path36;
42822
42822
  }
42823
42823
  function resolve2(input, base) {
42824
42824
  if (!input && !base)
@@ -42859,13 +42859,13 @@ var require_resolve_uri_umd = __commonJS({
42859
42859
  case 3:
42860
42860
  return queryHash;
42861
42861
  case 4: {
42862
- const path33 = url.path.slice(1);
42863
- if (!path33)
42862
+ const path36 = url.path.slice(1);
42863
+ if (!path36)
42864
42864
  return queryHash || ".";
42865
- if (isRelative(base || input) && !isRelative(path33)) {
42866
- return "./" + path33 + queryHash;
42865
+ if (isRelative(base || input) && !isRelative(path36)) {
42866
+ return "./" + path36 + queryHash;
42867
42867
  }
42868
- return path33 + queryHash;
42868
+ return path36 + queryHash;
42869
42869
  }
42870
42870
  case 5:
42871
42871
  return url.path + queryHash;
@@ -42878,9 +42878,9 @@ var require_resolve_uri_umd = __commonJS({
42878
42878
  }
42879
42879
  });
42880
42880
 
42881
- // ../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js
42881
+ // node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js
42882
42882
  var require_trace_mapping_umd = __commonJS({
42883
- "../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js"(exports, module) {
42883
+ "node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js"(exports, module) {
42884
42884
  (function(global, factory) {
42885
42885
  if (typeof exports === "object" && typeof module !== "undefined") {
42886
42886
  factory(module, require_resolve_uri_umd(), require_sourcemap_codec_umd());
@@ -42964,10 +42964,10 @@ var require_trace_mapping_umd = __commonJS({
42964
42964
  module2.exports = __toCommonJS(trace_mapping_exports);
42965
42965
  var import_sourcemap_codec = __toESM2(require_sourcemap_codec());
42966
42966
  var import_resolve_uri = __toESM2(require_resolve_uri());
42967
- function stripFilename(path33) {
42968
- if (!path33) return "";
42969
- const index = path33.lastIndexOf("/");
42970
- return path33.slice(0, index + 1);
42967
+ function stripFilename(path36) {
42968
+ if (!path36) return "";
42969
+ const index = path36.lastIndexOf("/");
42970
+ return path36.slice(0, index + 1);
42971
42971
  }
42972
42972
  function resolver(mapUrl, sourceRoot) {
42973
42973
  const from = stripFilename(mapUrl);
@@ -43418,9 +43418,9 @@ var require_trace_mapping_umd = __commonJS({
43418
43418
  }
43419
43419
  });
43420
43420
 
43421
- // ../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js
43421
+ // node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js
43422
43422
  var require_gen_mapping_umd = __commonJS({
43423
- "../../../../../../git/ai4kanban/runner/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js"(exports, module) {
43423
+ "node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js"(exports, module) {
43424
43424
  (function(global, factory) {
43425
43425
  if (typeof exports === "object" && typeof module !== "undefined") {
43426
43426
  factory(module, require_sourcemap_codec_umd(), require_trace_mapping_umd());
@@ -43769,9 +43769,9 @@ var require_gen_mapping_umd = __commonJS({
43769
43769
  }
43770
43770
  });
43771
43771
 
43772
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/computeSourceMap.js
43772
+ // node_modules/sucrase/dist/computeSourceMap.js
43773
43773
  var require_computeSourceMap = __commonJS({
43774
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/computeSourceMap.js"(exports) {
43774
+ "node_modules/sucrase/dist/computeSourceMap.js"(exports) {
43775
43775
  "use strict";
43776
43776
  Object.defineProperty(exports, "__esModule", { value: true });
43777
43777
  var _genmapping = require_gen_mapping_umd();
@@ -43832,9 +43832,9 @@ var require_computeSourceMap = __commonJS({
43832
43832
  }
43833
43833
  });
43834
43834
 
43835
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/HelperManager.js
43835
+ // node_modules/sucrase/dist/HelperManager.js
43836
43836
  var require_HelperManager = __commonJS({
43837
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/HelperManager.js"(exports) {
43837
+ "node_modules/sucrase/dist/HelperManager.js"(exports) {
43838
43838
  "use strict";
43839
43839
  Object.defineProperty(exports, "__esModule", { value: true });
43840
43840
  var HELPERS = {
@@ -44021,9 +44021,9 @@ var require_HelperManager = __commonJS({
44021
44021
  }
44022
44022
  });
44023
44023
 
44024
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/identifyShadowedGlobals.js
44024
+ // node_modules/sucrase/dist/identifyShadowedGlobals.js
44025
44025
  var require_identifyShadowedGlobals = __commonJS({
44026
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/identifyShadowedGlobals.js"(exports) {
44026
+ "node_modules/sucrase/dist/identifyShadowedGlobals.js"(exports) {
44027
44027
  "use strict";
44028
44028
  Object.defineProperty(exports, "__esModule", { value: true });
44029
44029
  var _tokenizer = require_tokenizer();
@@ -44090,9 +44090,9 @@ var require_identifyShadowedGlobals = __commonJS({
44090
44090
  }
44091
44091
  });
44092
44092
 
44093
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getIdentifierNames.js
44093
+ // node_modules/sucrase/dist/util/getIdentifierNames.js
44094
44094
  var require_getIdentifierNames = __commonJS({
44095
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getIdentifierNames.js"(exports) {
44095
+ "node_modules/sucrase/dist/util/getIdentifierNames.js"(exports) {
44096
44096
  "use strict";
44097
44097
  Object.defineProperty(exports, "__esModule", { value: true });
44098
44098
  var _types = require_types();
@@ -44109,9 +44109,9 @@ var require_getIdentifierNames = __commonJS({
44109
44109
  }
44110
44110
  });
44111
44111
 
44112
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/NameManager.js
44112
+ // node_modules/sucrase/dist/NameManager.js
44113
44113
  var require_NameManager = __commonJS({
44114
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/NameManager.js"(exports) {
44114
+ "node_modules/sucrase/dist/NameManager.js"(exports) {
44115
44115
  "use strict";
44116
44116
  Object.defineProperty(exports, "__esModule", { value: true });
44117
44117
  function _interopRequireDefault(obj3) {
@@ -44148,9 +44148,9 @@ var require_NameManager = __commonJS({
44148
44148
  }
44149
44149
  });
44150
44150
 
44151
- // ../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/util.js
44151
+ // node_modules/ts-interface-checker/dist/util.js
44152
44152
  var require_util2 = __commonJS({
44153
- "../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/util.js"(exports) {
44153
+ "node_modules/ts-interface-checker/dist/util.js"(exports) {
44154
44154
  "use strict";
44155
44155
  var __extends = exports && exports.__extends || /* @__PURE__ */ (function() {
44156
44156
  var extendStatics = function(d2, b2) {
@@ -44175,9 +44175,9 @@ var require_util2 = __commonJS({
44175
44175
  /** @class */
44176
44176
  (function(_super) {
44177
44177
  __extends(VError2, _super);
44178
- function VError2(path33, message) {
44178
+ function VError2(path36, message) {
44179
44179
  var _this = _super.call(this, message) || this;
44180
- _this.path = path33;
44180
+ _this.path = path36;
44181
44181
  Object.setPrototypeOf(_this, VError2.prototype);
44182
44182
  return _this;
44183
44183
  }
@@ -44237,26 +44237,26 @@ var require_util2 = __commonJS({
44237
44237
  (_b = this._messages).push.apply(_b, best._messages);
44238
44238
  }
44239
44239
  };
44240
- DetailContext2.prototype.getError = function(path33) {
44240
+ DetailContext2.prototype.getError = function(path36) {
44241
44241
  var msgParts = [];
44242
44242
  for (var i = this._propNames.length - 1; i >= 0; i--) {
44243
44243
  var p2 = this._propNames[i];
44244
- path33 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
44244
+ path36 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
44245
44245
  var m = this._messages[i];
44246
44246
  if (m) {
44247
- msgParts.push(path33 + " " + m);
44247
+ msgParts.push(path36 + " " + m);
44248
44248
  }
44249
44249
  }
44250
- return new VError(path33, msgParts.join("; "));
44250
+ return new VError(path36, msgParts.join("; "));
44251
44251
  };
44252
- DetailContext2.prototype.getErrorDetail = function(path33) {
44252
+ DetailContext2.prototype.getErrorDetail = function(path36) {
44253
44253
  var details = [];
44254
44254
  for (var i = this._propNames.length - 1; i >= 0; i--) {
44255
44255
  var p2 = this._propNames[i];
44256
- path33 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
44256
+ path36 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
44257
44257
  var message = this._messages[i];
44258
44258
  if (message) {
44259
- details.push({ path: path33, message });
44259
+ details.push({ path: path36, message });
44260
44260
  }
44261
44261
  }
44262
44262
  var detail = null;
@@ -44289,9 +44289,9 @@ var require_util2 = __commonJS({
44289
44289
  }
44290
44290
  });
44291
44291
 
44292
- // ../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/types.js
44292
+ // node_modules/ts-interface-checker/dist/types.js
44293
44293
  var require_types2 = __commonJS({
44294
- "../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/types.js"(exports) {
44294
+ "node_modules/ts-interface-checker/dist/types.js"(exports) {
44295
44295
  "use strict";
44296
44296
  var __extends = exports && exports.__extends || /* @__PURE__ */ (function() {
44297
44297
  var extendStatics = function(d2, b2) {
@@ -44928,9 +44928,9 @@ var require_types2 = __commonJS({
44928
44928
  }
44929
44929
  });
44930
44930
 
44931
- // ../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/index.js
44931
+ // node_modules/ts-interface-checker/dist/index.js
44932
44932
  var require_dist = __commonJS({
44933
- "../../../../../../git/ai4kanban/runner/node_modules/ts-interface-checker/dist/index.js"(exports) {
44933
+ "node_modules/ts-interface-checker/dist/index.js"(exports) {
44934
44934
  "use strict";
44935
44935
  var __spreadArrays = exports && exports.__spreadArrays || function() {
44936
44936
  for (var s = 0, i = 0, il2 = arguments.length; i < il2; i++) s += arguments[i].length;
@@ -45069,8 +45069,8 @@ var require_dist = __commonJS({
45069
45069
  this.checkerPlain = this.ttype.getChecker(suite, false);
45070
45070
  this.checkerStrict = this.ttype.getChecker(suite, true);
45071
45071
  }
45072
- Checker2.prototype.setReportedPath = function(path33) {
45073
- this._path = path33;
45072
+ Checker2.prototype.setReportedPath = function(path36) {
45073
+ this._path = path36;
45074
45074
  };
45075
45075
  Checker2.prototype.check = function(value) {
45076
45076
  return this._doCheck(this.checkerPlain, value);
@@ -45154,9 +45154,9 @@ var require_dist = __commonJS({
45154
45154
  }
45155
45155
  });
45156
45156
 
45157
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/Options-gen-types.js
45157
+ // node_modules/sucrase/dist/Options-gen-types.js
45158
45158
  var require_Options_gen_types = __commonJS({
45159
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/Options-gen-types.js"(exports) {
45159
+ "node_modules/sucrase/dist/Options-gen-types.js"(exports) {
45160
45160
  "use strict";
45161
45161
  Object.defineProperty(exports, "__esModule", { value: true });
45162
45162
  function _interopRequireWildcard(obj3) {
@@ -45216,9 +45216,9 @@ var require_Options_gen_types = __commonJS({
45216
45216
  }
45217
45217
  });
45218
45218
 
45219
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/Options.js
45219
+ // node_modules/sucrase/dist/Options.js
45220
45220
  var require_Options = __commonJS({
45221
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/Options.js"(exports) {
45221
+ "node_modules/sucrase/dist/Options.js"(exports) {
45222
45222
  "use strict";
45223
45223
  Object.defineProperty(exports, "__esModule", { value: true });
45224
45224
  function _interopRequireDefault(obj3) {
@@ -45235,9 +45235,9 @@ var require_Options = __commonJS({
45235
45235
  }
45236
45236
  });
45237
45237
 
45238
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/lval.js
45238
+ // node_modules/sucrase/dist/parser/traverser/lval.js
45239
45239
  var require_lval = __commonJS({
45240
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/lval.js"(exports) {
45240
+ "node_modules/sucrase/dist/parser/traverser/lval.js"(exports) {
45241
45241
  "use strict";
45242
45242
  Object.defineProperty(exports, "__esModule", { value: true });
45243
45243
  var _flow = require_flow();
@@ -45382,9 +45382,9 @@ var require_lval = __commonJS({
45382
45382
  }
45383
45383
  });
45384
45384
 
45385
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/typescript.js
45385
+ // node_modules/sucrase/dist/parser/plugins/typescript.js
45386
45386
  var require_typescript = __commonJS({
45387
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/typescript.js"(exports) {
45387
+ "node_modules/sucrase/dist/parser/plugins/typescript.js"(exports) {
45388
45388
  "use strict";
45389
45389
  Object.defineProperty(exports, "__esModule", { value: true });
45390
45390
  var _index = require_tokenizer();
@@ -46695,9 +46695,9 @@ var require_typescript = __commonJS({
46695
46695
  }
46696
46696
  });
46697
46697
 
46698
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/jsx/index.js
46698
+ // node_modules/sucrase/dist/parser/plugins/jsx/index.js
46699
46699
  var require_jsx = __commonJS({
46700
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/jsx/index.js"(exports) {
46700
+ "node_modules/sucrase/dist/parser/plugins/jsx/index.js"(exports) {
46701
46701
  "use strict";
46702
46702
  Object.defineProperty(exports, "__esModule", { value: true });
46703
46703
  var _index = require_tokenizer();
@@ -46965,9 +46965,9 @@ var require_jsx = __commonJS({
46965
46965
  }
46966
46966
  });
46967
46967
 
46968
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/types.js
46968
+ // node_modules/sucrase/dist/parser/plugins/types.js
46969
46969
  var require_types3 = __commonJS({
46970
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/types.js"(exports) {
46970
+ "node_modules/sucrase/dist/parser/plugins/types.js"(exports) {
46971
46971
  "use strict";
46972
46972
  Object.defineProperty(exports, "__esModule", { value: true });
46973
46973
  var _index = require_tokenizer();
@@ -47000,9 +47000,9 @@ var require_types3 = __commonJS({
47000
47000
  }
47001
47001
  });
47002
47002
 
47003
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/expression.js
47003
+ // node_modules/sucrase/dist/parser/traverser/expression.js
47004
47004
  var require_expression = __commonJS({
47005
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/expression.js"(exports) {
47005
+ "node_modules/sucrase/dist/parser/traverser/expression.js"(exports) {
47006
47006
  "use strict";
47007
47007
  Object.defineProperty(exports, "__esModule", { value: true });
47008
47008
  var _flow = require_flow();
@@ -47740,9 +47740,9 @@ var require_expression = __commonJS({
47740
47740
  }
47741
47741
  });
47742
47742
 
47743
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/flow.js
47743
+ // node_modules/sucrase/dist/parser/plugins/flow.js
47744
47744
  var require_flow = __commonJS({
47745
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/plugins/flow.js"(exports) {
47745
+ "node_modules/sucrase/dist/parser/plugins/flow.js"(exports) {
47746
47746
  "use strict";
47747
47747
  Object.defineProperty(exports, "__esModule", { value: true });
47748
47748
  var _index = require_tokenizer();
@@ -48623,9 +48623,9 @@ var require_flow = __commonJS({
48623
48623
  }
48624
48624
  });
48625
48625
 
48626
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/statement.js
48626
+ // node_modules/sucrase/dist/parser/traverser/statement.js
48627
48627
  var require_statement = __commonJS({
48628
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/statement.js"(exports) {
48628
+ "node_modules/sucrase/dist/parser/traverser/statement.js"(exports) {
48629
48629
  "use strict";
48630
48630
  Object.defineProperty(exports, "__esModule", { value: true });
48631
48631
  var _index = require_parser();
@@ -49620,9 +49620,9 @@ var require_statement = __commonJS({
49620
49620
  }
49621
49621
  });
49622
49622
 
49623
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/index.js
49623
+ // node_modules/sucrase/dist/parser/traverser/index.js
49624
49624
  var require_traverser = __commonJS({
49625
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/traverser/index.js"(exports) {
49625
+ "node_modules/sucrase/dist/parser/traverser/index.js"(exports) {
49626
49626
  "use strict";
49627
49627
  Object.defineProperty(exports, "__esModule", { value: true });
49628
49628
  var _index = require_tokenizer();
@@ -49640,9 +49640,9 @@ var require_traverser = __commonJS({
49640
49640
  }
49641
49641
  });
49642
49642
 
49643
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/index.js
49643
+ // node_modules/sucrase/dist/parser/index.js
49644
49644
  var require_parser = __commonJS({
49645
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/parser/index.js"(exports) {
49645
+ "node_modules/sucrase/dist/parser/index.js"(exports) {
49646
49646
  "use strict";
49647
49647
  Object.defineProperty(exports, "__esModule", { value: true });
49648
49648
  var _base = require_base();
@@ -49669,9 +49669,9 @@ var require_parser = __commonJS({
49669
49669
  }
49670
49670
  });
49671
49671
 
49672
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isAsyncOperation.js
49672
+ // node_modules/sucrase/dist/util/isAsyncOperation.js
49673
49673
  var require_isAsyncOperation = __commonJS({
49674
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isAsyncOperation.js"(exports) {
49674
+ "node_modules/sucrase/dist/util/isAsyncOperation.js"(exports) {
49675
49675
  "use strict";
49676
49676
  Object.defineProperty(exports, "__esModule", { value: true });
49677
49677
  var _keywords = require_keywords();
@@ -49700,9 +49700,9 @@ var require_isAsyncOperation = __commonJS({
49700
49700
  }
49701
49701
  });
49702
49702
 
49703
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/TokenProcessor.js
49703
+ // node_modules/sucrase/dist/TokenProcessor.js
49704
49704
  var require_TokenProcessor = __commonJS({
49705
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/TokenProcessor.js"(exports) {
49705
+ "node_modules/sucrase/dist/TokenProcessor.js"(exports) {
49706
49706
  "use strict";
49707
49707
  Object.defineProperty(exports, "__esModule", { value: true });
49708
49708
  function _interopRequireDefault(obj3) {
@@ -49995,9 +49995,9 @@ var require_TokenProcessor = __commonJS({
49995
49995
  }
49996
49996
  });
49997
49997
 
49998
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getClassInfo.js
49998
+ // node_modules/sucrase/dist/util/getClassInfo.js
49999
49999
  var require_getClassInfo = __commonJS({
50000
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getClassInfo.js"(exports) {
50000
+ "node_modules/sucrase/dist/util/getClassInfo.js"(exports) {
50001
50001
  "use strict";
50002
50002
  Object.defineProperty(exports, "__esModule", { value: true });
50003
50003
  var _keywords = require_keywords();
@@ -50237,9 +50237,9 @@ var require_getClassInfo = __commonJS({
50237
50237
  }
50238
50238
  });
50239
50239
 
50240
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/elideImportEquals.js
50240
+ // node_modules/sucrase/dist/util/elideImportEquals.js
50241
50241
  var require_elideImportEquals = __commonJS({
50242
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/elideImportEquals.js"(exports) {
50242
+ "node_modules/sucrase/dist/util/elideImportEquals.js"(exports) {
50243
50243
  "use strict";
50244
50244
  Object.defineProperty(exports, "__esModule", { value: true });
50245
50245
  var _types = require_types();
@@ -50263,9 +50263,9 @@ var require_elideImportEquals = __commonJS({
50263
50263
  }
50264
50264
  });
50265
50265
 
50266
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getDeclarationInfo.js
50266
+ // node_modules/sucrase/dist/util/getDeclarationInfo.js
50267
50267
  var require_getDeclarationInfo = __commonJS({
50268
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getDeclarationInfo.js"(exports) {
50268
+ "node_modules/sucrase/dist/util/getDeclarationInfo.js"(exports) {
50269
50269
  "use strict";
50270
50270
  Object.defineProperty(exports, "__esModule", { value: true });
50271
50271
  var _tokenizer = require_tokenizer();
@@ -50294,9 +50294,9 @@ var require_getDeclarationInfo = __commonJS({
50294
50294
  }
50295
50295
  });
50296
50296
 
50297
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isExportFrom.js
50297
+ // node_modules/sucrase/dist/util/isExportFrom.js
50298
50298
  var require_isExportFrom = __commonJS({
50299
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isExportFrom.js"(exports) {
50299
+ "node_modules/sucrase/dist/util/isExportFrom.js"(exports) {
50300
50300
  "use strict";
50301
50301
  Object.defineProperty(exports, "__esModule", { value: true });
50302
50302
  var _keywords = require_keywords();
@@ -50312,9 +50312,9 @@ var require_isExportFrom = __commonJS({
50312
50312
  }
50313
50313
  });
50314
50314
 
50315
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/removeMaybeImportAttributes.js
50315
+ // node_modules/sucrase/dist/util/removeMaybeImportAttributes.js
50316
50316
  var require_removeMaybeImportAttributes = __commonJS({
50317
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/removeMaybeImportAttributes.js"(exports) {
50317
+ "node_modules/sucrase/dist/util/removeMaybeImportAttributes.js"(exports) {
50318
50318
  "use strict";
50319
50319
  Object.defineProperty(exports, "__esModule", { value: true });
50320
50320
  var _keywords = require_keywords();
@@ -50331,9 +50331,9 @@ var require_removeMaybeImportAttributes = __commonJS({
50331
50331
  }
50332
50332
  });
50333
50333
 
50334
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/shouldElideDefaultExport.js
50334
+ // node_modules/sucrase/dist/util/shouldElideDefaultExport.js
50335
50335
  var require_shouldElideDefaultExport = __commonJS({
50336
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/shouldElideDefaultExport.js"(exports) {
50336
+ "node_modules/sucrase/dist/util/shouldElideDefaultExport.js"(exports) {
50337
50337
  "use strict";
50338
50338
  Object.defineProperty(exports, "__esModule", { value: true });
50339
50339
  var _types = require_types();
@@ -50360,9 +50360,9 @@ var require_shouldElideDefaultExport = __commonJS({
50360
50360
  }
50361
50361
  });
50362
50362
 
50363
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/CJSImportTransformer.js
50363
+ // node_modules/sucrase/dist/transformers/CJSImportTransformer.js
50364
50364
  var require_CJSImportTransformer = __commonJS({
50365
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/CJSImportTransformer.js"(exports) {
50365
+ "node_modules/sucrase/dist/transformers/CJSImportTransformer.js"(exports) {
50366
50366
  "use strict";
50367
50367
  Object.defineProperty(exports, "__esModule", { value: true });
50368
50368
  function _interopRequireDefault(obj3) {
@@ -50503,9 +50503,9 @@ var require_CJSImportTransformer = __commonJS({
50503
50503
  if (shouldElideImport) {
50504
50504
  this.tokens.removeToken();
50505
50505
  } else {
50506
- const path33 = this.tokens.stringValue();
50507
- this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path33));
50508
- this.tokens.appendCode(this.importProcessor.claimImportCode(path33));
50506
+ const path36 = this.tokens.stringValue();
50507
+ this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path36));
50508
+ this.tokens.appendCode(this.importProcessor.claimImportCode(path36));
50509
50509
  }
50510
50510
  _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens);
50511
50511
  if (this.tokens.matches1(_types.TokenType.semi)) {
@@ -51085,8 +51085,8 @@ var require_CJSImportTransformer = __commonJS({
51085
51085
  }
51086
51086
  if (this.tokens.matchesContextual(_keywords.ContextualKeyword._from)) {
51087
51087
  this.tokens.removeToken();
51088
- const path33 = this.tokens.stringValue();
51089
- this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path33));
51088
+ const path36 = this.tokens.stringValue();
51089
+ this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path36));
51090
51090
  _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens);
51091
51091
  } else {
51092
51092
  this.tokens.appendCode(exportStatements.join(" "));
@@ -51100,8 +51100,8 @@ var require_CJSImportTransformer = __commonJS({
51100
51100
  while (!this.tokens.matches1(_types.TokenType.string)) {
51101
51101
  this.tokens.removeToken();
51102
51102
  }
51103
- const path33 = this.tokens.stringValue();
51104
- this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path33));
51103
+ const path36 = this.tokens.stringValue();
51104
+ this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path36));
51105
51105
  _removeMaybeImportAttributes.removeMaybeImportAttributes.call(void 0, this.tokens);
51106
51106
  if (this.tokens.matches1(_types.TokenType.semi)) {
51107
51107
  this.tokens.removeToken();
@@ -51115,9 +51115,9 @@ var require_CJSImportTransformer = __commonJS({
51115
51115
  }
51116
51116
  });
51117
51117
 
51118
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ESMImportTransformer.js
51118
+ // node_modules/sucrase/dist/transformers/ESMImportTransformer.js
51119
51119
  var require_ESMImportTransformer = __commonJS({
51120
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ESMImportTransformer.js"(exports) {
51120
+ "node_modules/sucrase/dist/transformers/ESMImportTransformer.js"(exports) {
51121
51121
  "use strict";
51122
51122
  Object.defineProperty(exports, "__esModule", { value: true });
51123
51123
  function _interopRequireDefault(obj3) {
@@ -51419,9 +51419,9 @@ var require_ESMImportTransformer = __commonJS({
51419
51419
  }
51420
51420
  });
51421
51421
 
51422
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/FlowTransformer.js
51422
+ // node_modules/sucrase/dist/transformers/FlowTransformer.js
51423
51423
  var require_FlowTransformer = __commonJS({
51424
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/FlowTransformer.js"(exports) {
51424
+ "node_modules/sucrase/dist/transformers/FlowTransformer.js"(exports) {
51425
51425
  "use strict";
51426
51426
  Object.defineProperty(exports, "__esModule", { value: true });
51427
51427
  function _interopRequireDefault(obj3) {
@@ -51587,9 +51587,9 @@ var require_FlowTransformer = __commonJS({
51587
51587
  }
51588
51588
  });
51589
51589
 
51590
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/JestHoistTransformer.js
51590
+ // node_modules/sucrase/dist/transformers/JestHoistTransformer.js
51591
51591
  var require_JestHoistTransformer = __commonJS({
51592
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/JestHoistTransformer.js"(exports) {
51592
+ "node_modules/sucrase/dist/transformers/JestHoistTransformer.js"(exports) {
51593
51593
  "use strict";
51594
51594
  Object.defineProperty(exports, "__esModule", { value: true });
51595
51595
  function _interopRequireDefault(obj3) {
@@ -51693,9 +51693,9 @@ var require_JestHoistTransformer = __commonJS({
51693
51693
  }
51694
51694
  });
51695
51695
 
51696
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js
51696
+ // node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js
51697
51697
  var require_NumericSeparatorTransformer = __commonJS({
51698
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js"(exports) {
51698
+ "node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js"(exports) {
51699
51699
  "use strict";
51700
51700
  Object.defineProperty(exports, "__esModule", { value: true });
51701
51701
  function _interopRequireDefault(obj3) {
@@ -51725,9 +51725,9 @@ var require_NumericSeparatorTransformer = __commonJS({
51725
51725
  }
51726
51726
  });
51727
51727
 
51728
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js
51728
+ // node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js
51729
51729
  var require_OptionalCatchBindingTransformer = __commonJS({
51730
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js"(exports) {
51730
+ "node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js"(exports) {
51731
51731
  "use strict";
51732
51732
  Object.defineProperty(exports, "__esModule", { value: true });
51733
51733
  function _interopRequireDefault(obj3) {
@@ -51756,9 +51756,9 @@ var require_OptionalCatchBindingTransformer = __commonJS({
51756
51756
  }
51757
51757
  });
51758
51758
 
51759
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js
51759
+ // node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js
51760
51760
  var require_OptionalChainingNullishTransformer = __commonJS({
51761
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js"(exports) {
51761
+ "node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js"(exports) {
51762
51762
  "use strict";
51763
51763
  Object.defineProperty(exports, "__esModule", { value: true });
51764
51764
  function _interopRequireDefault(obj3) {
@@ -51894,9 +51894,9 @@ var require_OptionalChainingNullishTransformer = __commonJS({
51894
51894
  }
51895
51895
  });
51896
51896
 
51897
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js
51897
+ // node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js
51898
51898
  var require_ReactDisplayNameTransformer = __commonJS({
51899
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js"(exports) {
51899
+ "node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js"(exports) {
51900
51900
  "use strict";
51901
51901
  Object.defineProperty(exports, "__esModule", { value: true });
51902
51902
  function _interopRequireDefault(obj3) {
@@ -52022,9 +52022,9 @@ var require_ReactDisplayNameTransformer = __commonJS({
52022
52022
  }
52023
52023
  });
52024
52024
 
52025
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js
52025
+ // node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js
52026
52026
  var require_ReactHotLoaderTransformer = __commonJS({
52027
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js"(exports) {
52027
+ "node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js"(exports) {
52028
52028
  "use strict";
52029
52029
  Object.defineProperty(exports, "__esModule", { value: true });
52030
52030
  function _interopRequireDefault(obj3) {
@@ -52094,9 +52094,9 @@ ${namesToRegister.map(
52094
52094
  }
52095
52095
  });
52096
52096
 
52097
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isIdentifier.js
52097
+ // node_modules/sucrase/dist/util/isIdentifier.js
52098
52098
  var require_isIdentifier = __commonJS({
52099
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/isIdentifier.js"(exports) {
52099
+ "node_modules/sucrase/dist/util/isIdentifier.js"(exports) {
52100
52100
  "use strict";
52101
52101
  Object.defineProperty(exports, "__esModule", { value: true });
52102
52102
  var _identifier = require_identifier();
@@ -52169,9 +52169,9 @@ var require_isIdentifier = __commonJS({
52169
52169
  }
52170
52170
  });
52171
52171
 
52172
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/TypeScriptTransformer.js
52172
+ // node_modules/sucrase/dist/transformers/TypeScriptTransformer.js
52173
52173
  var require_TypeScriptTransformer = __commonJS({
52174
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/TypeScriptTransformer.js"(exports) {
52174
+ "node_modules/sucrase/dist/transformers/TypeScriptTransformer.js"(exports) {
52175
52175
  "use strict";
52176
52176
  Object.defineProperty(exports, "__esModule", { value: true });
52177
52177
  function _interopRequireDefault(obj3) {
@@ -52410,9 +52410,9 @@ var require_TypeScriptTransformer = __commonJS({
52410
52410
  }
52411
52411
  });
52412
52412
 
52413
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/RootTransformer.js
52413
+ // node_modules/sucrase/dist/transformers/RootTransformer.js
52414
52414
  var require_RootTransformer = __commonJS({
52415
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/transformers/RootTransformer.js"(exports) {
52415
+ "node_modules/sucrase/dist/transformers/RootTransformer.js"(exports) {
52416
52416
  "use strict";
52417
52417
  Object.defineProperty(exports, "__esModule", { value: true });
52418
52418
  function _interopRequireDefault(obj3) {
@@ -52827,9 +52827,9 @@ var require_RootTransformer = __commonJS({
52827
52827
  }
52828
52828
  });
52829
52829
 
52830
- // ../../../../../../git/ai4kanban/runner/node_modules/lines-and-columns/build/index.js
52830
+ // node_modules/lines-and-columns/build/index.js
52831
52831
  var require_build = __commonJS({
52832
- "../../../../../../git/ai4kanban/runner/node_modules/lines-and-columns/build/index.js"(exports) {
52832
+ "node_modules/lines-and-columns/build/index.js"(exports) {
52833
52833
  "use strict";
52834
52834
  exports.__esModule = true;
52835
52835
  exports.LinesAndColumns = void 0;
@@ -52896,9 +52896,9 @@ var require_build = __commonJS({
52896
52896
  }
52897
52897
  });
52898
52898
 
52899
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/formatTokens.js
52899
+ // node_modules/sucrase/dist/util/formatTokens.js
52900
52900
  var require_formatTokens = __commonJS({
52901
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/formatTokens.js"(exports) {
52901
+ "node_modules/sucrase/dist/util/formatTokens.js"(exports) {
52902
52902
  "use strict";
52903
52903
  Object.defineProperty(exports, "__esModule", { value: true });
52904
52904
  function _interopRequireDefault(obj3) {
@@ -52969,9 +52969,9 @@ var require_formatTokens = __commonJS({
52969
52969
  }
52970
52970
  });
52971
52971
 
52972
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getTSImportedNames.js
52972
+ // node_modules/sucrase/dist/util/getTSImportedNames.js
52973
52973
  var require_getTSImportedNames = __commonJS({
52974
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/util/getTSImportedNames.js"(exports) {
52974
+ "node_modules/sucrase/dist/util/getTSImportedNames.js"(exports) {
52975
52975
  "use strict";
52976
52976
  Object.defineProperty(exports, "__esModule", { value: true });
52977
52977
  function _interopRequireDefault(obj3) {
@@ -53036,9 +53036,9 @@ var require_getTSImportedNames = __commonJS({
53036
53036
  }
53037
53037
  });
53038
53038
 
53039
- // ../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/index.js
53039
+ // node_modules/sucrase/dist/index.js
53040
53040
  var require_dist2 = __commonJS({
53041
- "../../../../../../git/ai4kanban/runner/node_modules/sucrase/dist/index.js"(exports) {
53041
+ "node_modules/sucrase/dist/index.js"(exports) {
53042
53042
  "use strict";
53043
53043
  Object.defineProperty(exports, "__esModule", { value: true });
53044
53044
  function _interopRequireDefault(obj3) {
@@ -53151,15 +53151,15 @@ var require_dist2 = __commonJS({
53151
53151
  }
53152
53152
  });
53153
53153
 
53154
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs
53154
+ // node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs
53155
53155
  var o;
53156
53156
  var init_chunk_DCG7AFIE = __esm({
53157
- "../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs"() {
53157
+ "node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs"() {
53158
53158
  o = { inherit: "inherit", current: "currentcolor", transparent: "transparent", black: "#000", white: "#fff", slate: { 50: "oklch(98.4% 0.003 247.858)", 100: "oklch(96.8% 0.007 247.896)", 200: "oklch(92.9% 0.013 255.508)", 300: "oklch(86.9% 0.022 252.894)", 400: "oklch(70.4% 0.04 256.788)", 500: "oklch(55.4% 0.046 257.417)", 600: "oklch(44.6% 0.043 257.281)", 700: "oklch(37.2% 0.044 257.287)", 800: "oklch(27.9% 0.041 260.031)", 900: "oklch(20.8% 0.042 265.755)", 950: "oklch(12.9% 0.042 264.695)" }, gray: { 50: "oklch(98.5% 0.002 247.839)", 100: "oklch(96.7% 0.003 264.542)", 200: "oklch(92.8% 0.006 264.531)", 300: "oklch(87.2% 0.01 258.338)", 400: "oklch(70.7% 0.022 261.325)", 500: "oklch(55.1% 0.027 264.364)", 600: "oklch(44.6% 0.03 256.802)", 700: "oklch(37.3% 0.034 259.733)", 800: "oklch(27.8% 0.033 256.848)", 900: "oklch(21% 0.034 264.665)", 950: "oklch(13% 0.028 261.692)" }, zinc: { 50: "oklch(98.5% 0 none)", 100: "oklch(96.7% 0.001 286.375)", 200: "oklch(92% 0.004 286.32)", 300: "oklch(87.1% 0.006 286.286)", 400: "oklch(70.5% 0.015 286.067)", 500: "oklch(55.2% 0.016 285.938)", 600: "oklch(44.2% 0.017 285.786)", 700: "oklch(37% 0.013 285.805)", 800: "oklch(27.4% 0.006 286.033)", 900: "oklch(21% 0.006 285.885)", 950: "oklch(14.1% 0.005 285.823)" }, neutral: { 50: "oklch(98.5% 0 none)", 100: "oklch(97% 0 none)", 200: "oklch(92.2% 0 none)", 300: "oklch(87% 0 none)", 400: "oklch(70.8% 0 none)", 500: "oklch(55.6% 0 none)", 600: "oklch(43.9% 0 none)", 700: "oklch(37.1% 0 none)", 800: "oklch(26.9% 0 none)", 900: "oklch(20.5% 0 none)", 950: "oklch(14.5% 0 none)" }, stone: { 50: "oklch(98.5% 0.001 106.423)", 100: "oklch(97% 0.001 106.424)", 200: "oklch(92.3% 0.003 48.717)", 300: "oklch(86.9% 0.005 56.366)", 400: "oklch(70.9% 0.01 56.259)", 500: "oklch(55.3% 0.013 58.071)", 600: "oklch(44.4% 0.011 73.639)", 700: "oklch(37.4% 0.01 67.558)", 800: "oklch(26.8% 0.007 34.298)", 900: "oklch(21.6% 0.006 56.043)", 950: "oklch(14.7% 0.004 49.25)" }, mauve: { 50: "oklch(98.5% 0 none)", 100: "oklch(96% 0.003 325.6)", 200: "oklch(92.2% 0.005 325.62)", 300: "oklch(86.5% 0.012 325.68)", 400: "oklch(71.1% 0.019 323.02)", 500: "oklch(54.2% 0.034 322.5)", 600: "oklch(43.5% 0.029 321.78)", 700: "oklch(36.4% 0.029 323.89)", 800: "oklch(26.3% 0.024 320.12)", 900: "oklch(21.2% 0.019 322.12)", 950: "oklch(14.5% 0.008 326)" }, olive: { 50: "oklch(98.8% 0.003 106.5)", 100: "oklch(96.6% 0.005 106.5)", 200: "oklch(93% 0.007 106.5)", 300: "oklch(88% 0.011 106.6)", 400: "oklch(73.7% 0.021 106.9)", 500: "oklch(58% 0.031 107.3)", 600: "oklch(46.6% 0.025 107.3)", 700: "oklch(39.4% 0.023 107.4)", 800: "oklch(28.6% 0.016 107.4)", 900: "oklch(22.8% 0.013 107.4)", 950: "oklch(15.3% 0.006 107.1)" }, mist: { 50: "oklch(98.7% 0.002 197.1)", 100: "oklch(96.3% 0.002 197.1)", 200: "oklch(92.5% 0.005 214.3)", 300: "oklch(87.2% 0.007 219.6)", 400: "oklch(72.3% 0.014 214.4)", 500: "oklch(56% 0.021 213.5)", 600: "oklch(45% 0.017 213.2)", 700: "oklch(37.8% 0.015 216)", 800: "oklch(27.5% 0.011 216.9)", 900: "oklch(21.8% 0.008 223.9)", 950: "oklch(14.8% 0.004 228.8)" }, taupe: { 50: "oklch(98.6% 0.002 67.8)", 100: "oklch(96% 0.002 17.2)", 200: "oklch(92.2% 0.005 34.3)", 300: "oklch(86.8% 0.007 39.5)", 400: "oklch(71.4% 0.014 41.2)", 500: "oklch(54.7% 0.021 43.1)", 600: "oklch(43.8% 0.017 39.3)", 700: "oklch(36.7% 0.016 35.7)", 800: "oklch(26.8% 0.011 36.5)", 900: "oklch(21.4% 0.009 43.1)", 950: "oklch(14.7% 0.004 49.3)" }, red: { 50: "oklch(97.1% 0.013 17.38)", 100: "oklch(93.6% 0.032 17.717)", 200: "oklch(88.5% 0.062 18.334)", 300: "oklch(80.8% 0.114 19.571)", 400: "oklch(70.4% 0.191 22.216)", 500: "oklch(63.7% 0.237 25.331)", 600: "oklch(57.7% 0.245 27.325)", 700: "oklch(50.5% 0.213 27.518)", 800: "oklch(44.4% 0.177 26.899)", 900: "oklch(39.6% 0.141 25.723)", 950: "oklch(25.8% 0.092 26.042)" }, orange: { 50: "oklch(98% 0.016 73.684)", 100: "oklch(95.4% 0.038 75.164)", 200: "oklch(90.1% 0.076 70.697)", 300: "oklch(83.7% 0.128 66.29)", 400: "oklch(75% 0.183 55.934)", 500: "oklch(70.5% 0.213 47.604)", 600: "oklch(64.6% 0.222 41.116)", 700: "oklch(55.3% 0.195 38.402)", 800: "oklch(47% 0.157 37.304)", 900: "oklch(40.8% 0.123 38.172)", 950: "oklch(26.6% 0.079 36.259)" }, amber: { 50: "oklch(98.7% 0.022 95.277)", 100: "oklch(96.2% 0.059 95.617)", 200: "oklch(92.4% 0.12 95.746)", 300: "oklch(87.9% 0.169 91.605)", 400: "oklch(82.8% 0.189 84.429)", 500: "oklch(76.9% 0.188 70.08)", 600: "oklch(66.6% 0.179 58.318)", 700: "oklch(55.5% 0.163 48.998)", 800: "oklch(47.3% 0.137 46.201)", 900: "oklch(41.4% 0.112 45.904)", 950: "oklch(27.9% 0.077 45.635)" }, yellow: { 50: "oklch(98.7% 0.026 102.212)", 100: "oklch(97.3% 0.071 103.193)", 200: "oklch(94.5% 0.129 101.54)", 300: "oklch(90.5% 0.182 98.111)", 400: "oklch(85.2% 0.199 91.936)", 500: "oklch(79.5% 0.184 86.047)", 600: "oklch(68.1% 0.162 75.834)", 700: "oklch(55.4% 0.135 66.442)", 800: "oklch(47.6% 0.114 61.907)", 900: "oklch(42.1% 0.095 57.708)", 950: "oklch(28.6% 0.066 53.813)" }, lime: { 50: "oklch(98.6% 0.031 120.757)", 100: "oklch(96.7% 0.067 122.328)", 200: "oklch(93.8% 0.127 124.321)", 300: "oklch(89.7% 0.196 126.665)", 400: "oklch(84.1% 0.238 128.85)", 500: "oklch(76.8% 0.233 130.85)", 600: "oklch(64.8% 0.2 131.684)", 700: "oklch(53.2% 0.157 131.589)", 800: "oklch(45.3% 0.124 130.933)", 900: "oklch(40.5% 0.101 131.063)", 950: "oklch(27.4% 0.072 132.109)" }, green: { 50: "oklch(98.2% 0.018 155.826)", 100: "oklch(96.2% 0.044 156.743)", 200: "oklch(92.5% 0.084 155.995)", 300: "oklch(87.1% 0.15 154.449)", 400: "oklch(79.2% 0.209 151.711)", 500: "oklch(72.3% 0.219 149.579)", 600: "oklch(62.7% 0.194 149.214)", 700: "oklch(52.7% 0.154 150.069)", 800: "oklch(44.8% 0.119 151.328)", 900: "oklch(39.3% 0.095 152.535)", 950: "oklch(26.6% 0.065 152.934)" }, emerald: { 50: "oklch(97.9% 0.021 166.113)", 100: "oklch(95% 0.052 163.051)", 200: "oklch(90.5% 0.093 164.15)", 300: "oklch(84.5% 0.143 164.978)", 400: "oklch(76.5% 0.177 163.223)", 500: "oklch(69.6% 0.17 162.48)", 600: "oklch(59.6% 0.145 163.225)", 700: "oklch(50.8% 0.118 165.612)", 800: "oklch(43.2% 0.095 166.913)", 900: "oklch(37.8% 0.077 168.94)", 950: "oklch(26.2% 0.051 172.552)" }, teal: { 50: "oklch(98.4% 0.014 180.72)", 100: "oklch(95.3% 0.051 180.801)", 200: "oklch(91% 0.096 180.426)", 300: "oklch(85.5% 0.138 181.071)", 400: "oklch(77.7% 0.152 181.912)", 500: "oklch(70.4% 0.14 182.503)", 600: "oklch(60% 0.118 184.704)", 700: "oklch(51.1% 0.096 186.391)", 800: "oklch(43.7% 0.078 188.216)", 900: "oklch(38.6% 0.063 188.416)", 950: "oklch(27.7% 0.046 192.524)" }, cyan: { 50: "oklch(98.4% 0.019 200.873)", 100: "oklch(95.6% 0.045 203.388)", 200: "oklch(91.7% 0.08 205.041)", 300: "oklch(86.5% 0.127 207.078)", 400: "oklch(78.9% 0.154 211.53)", 500: "oklch(71.5% 0.143 215.221)", 600: "oklch(60.9% 0.126 221.723)", 700: "oklch(52% 0.105 223.128)", 800: "oklch(45% 0.085 224.283)", 900: "oklch(39.8% 0.07 227.392)", 950: "oklch(30.2% 0.056 229.695)" }, sky: { 50: "oklch(97.7% 0.013 236.62)", 100: "oklch(95.1% 0.026 236.824)", 200: "oklch(90.1% 0.058 230.902)", 300: "oklch(82.8% 0.111 230.318)", 400: "oklch(74.6% 0.16 232.661)", 500: "oklch(68.5% 0.169 237.323)", 600: "oklch(58.8% 0.158 241.966)", 700: "oklch(50% 0.134 242.749)", 800: "oklch(44.3% 0.11 240.79)", 900: "oklch(39.1% 0.09 240.876)", 950: "oklch(29.3% 0.066 243.157)" }, blue: { 50: "oklch(97% 0.014 254.604)", 100: "oklch(93.2% 0.032 255.585)", 200: "oklch(88.2% 0.059 254.128)", 300: "oklch(80.9% 0.105 251.813)", 400: "oklch(70.7% 0.165 254.624)", 500: "oklch(62.3% 0.214 259.815)", 600: "oklch(54.6% 0.245 262.881)", 700: "oklch(48.8% 0.243 264.376)", 800: "oklch(42.4% 0.199 265.638)", 900: "oklch(37.9% 0.146 265.522)", 950: "oklch(28.2% 0.091 267.935)" }, indigo: { 50: "oklch(96.2% 0.018 272.314)", 100: "oklch(93% 0.034 272.788)", 200: "oklch(87% 0.065 274.039)", 300: "oklch(78.5% 0.115 274.713)", 400: "oklch(67.3% 0.182 276.935)", 500: "oklch(58.5% 0.233 277.117)", 600: "oklch(51.1% 0.262 276.966)", 700: "oklch(45.7% 0.24 277.023)", 800: "oklch(39.8% 0.195 277.366)", 900: "oklch(35.9% 0.144 278.697)", 950: "oklch(25.7% 0.09 281.288)" }, violet: { 50: "oklch(96.9% 0.016 293.756)", 100: "oklch(94.3% 0.029 294.588)", 200: "oklch(89.4% 0.057 293.283)", 300: "oklch(81.1% 0.111 293.571)", 400: "oklch(70.2% 0.183 293.541)", 500: "oklch(60.6% 0.25 292.717)", 600: "oklch(54.1% 0.281 293.009)", 700: "oklch(49.1% 0.27 292.581)", 800: "oklch(43.2% 0.232 292.759)", 900: "oklch(38% 0.189 293.745)", 950: "oklch(28.3% 0.141 291.089)" }, purple: { 50: "oklch(97.7% 0.014 308.299)", 100: "oklch(94.6% 0.033 307.174)", 200: "oklch(90.2% 0.063 306.703)", 300: "oklch(82.7% 0.119 306.383)", 400: "oklch(71.4% 0.203 305.504)", 500: "oklch(62.7% 0.265 303.9)", 600: "oklch(55.8% 0.288 302.321)", 700: "oklch(49.6% 0.265 301.924)", 800: "oklch(43.8% 0.218 303.724)", 900: "oklch(38.1% 0.176 304.987)", 950: "oklch(29.1% 0.149 302.717)" }, fuchsia: { 50: "oklch(97.7% 0.017 320.058)", 100: "oklch(95.2% 0.037 318.852)", 200: "oklch(90.3% 0.076 319.62)", 300: "oklch(83.3% 0.145 321.434)", 400: "oklch(74% 0.238 322.16)", 500: "oklch(66.7% 0.295 322.15)", 600: "oklch(59.1% 0.293 322.896)", 700: "oklch(51.8% 0.253 323.949)", 800: "oklch(45.2% 0.211 324.591)", 900: "oklch(40.1% 0.17 325.612)", 950: "oklch(29.3% 0.136 325.661)" }, pink: { 50: "oklch(97.1% 0.014 343.198)", 100: "oklch(94.8% 0.028 342.258)", 200: "oklch(89.9% 0.061 343.231)", 300: "oklch(82.3% 0.12 346.018)", 400: "oklch(71.8% 0.202 349.761)", 500: "oklch(65.6% 0.241 354.308)", 600: "oklch(59.2% 0.249 0.584)", 700: "oklch(52.5% 0.223 3.958)", 800: "oklch(45.9% 0.187 3.815)", 900: "oklch(40.8% 0.153 2.432)", 950: "oklch(28.4% 0.109 3.907)" }, rose: { 50: "oklch(96.9% 0.015 12.422)", 100: "oklch(94.1% 0.03 12.58)", 200: "oklch(89.2% 0.058 10.001)", 300: "oklch(81% 0.117 11.638)", 400: "oklch(71.2% 0.194 13.428)", 500: "oklch(64.5% 0.246 16.439)", 600: "oklch(58.6% 0.253 17.585)", 700: "oklch(51.4% 0.222 16.935)", 800: "oklch(45.5% 0.188 13.697)", 900: "oklch(41% 0.159 10.272)", 950: "oklch(27.1% 0.105 12.094)" } };
53159
53159
  }
53160
53160
  });
53161
53161
 
53162
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-C2OYBFIH.mjs
53162
+ // node_modules/tailwindcss/dist/chunk-C2OYBFIH.mjs
53163
53163
  function N(e2) {
53164
53164
  return e2.charCodeAt(0) === 35 || U.test(e2) || S.has(e2.toLowerCase());
53165
53165
  }
@@ -53379,7 +53379,7 @@ function h(e2) {
53379
53379
  }
53380
53380
  var S, U, A, E, P, z, I, D, x, W, q2, V, Z, j, K, J, X, te, g, l, f, L, w, ne, _, ye;
53381
53381
  var init_chunk_C2OYBFIH = __esm({
53382
- "../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-C2OYBFIH.mjs"() {
53382
+ "node_modules/tailwindcss/dist/chunk-C2OYBFIH.mjs"() {
53383
53383
  init_chunk_DCG7AFIE();
53384
53384
  S = /* @__PURE__ */ new Set(["black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", "transparent", "currentcolor", "canvas", "canvastext", "linktext", "visitedtext", "activetext", "buttonface", "buttontext", "buttonborder", "field", "fieldtext", "highlight", "highlighttext", "selecteditem", "selecteditemtext", "mark", "marktext", "graytext", "accentcolor", "accentcolortext"]);
53385
53385
  U = /^(rgba?|hsla?|hwb|color|(ok)?(lab|lch)|light-dark|color-mix|--alpha)\(/i;
@@ -53426,7 +53426,7 @@ var init_chunk_C2OYBFIH = __esm({
53426
53426
  }
53427
53427
  });
53428
53428
 
53429
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs
53429
+ // node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs
53430
53430
  function h2(n) {
53431
53431
  if (arguments.length === 0) throw new TypeError("`CSS.escape` requires an argument.");
53432
53432
  let e2 = String(n), i = e2.length, r2 = -1, t2, s = "", l2 = e2.charCodeAt(0);
@@ -53460,7 +53460,7 @@ function g2(n, e2) {
53460
53460
  }
53461
53461
  var c, p;
53462
53462
  var init_chunk_5JIJA4QV = __esm({
53463
- "../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs"() {
53463
+ "node_modules/tailwindcss/dist/chunk-5JIJA4QV.mjs"() {
53464
53464
  c = /* @__PURE__ */ new Map([["--font", ["--font-weight", "--font-size"]], ["--inset", ["--inset-shadow", "--inset-ring"]], ["--text", ["--text-color", "--text-decoration-color", "--text-decoration-thickness", "--text-indent", "--text-shadow", "--text-underline-offset"]], ["--grid-column", ["--grid-column-start", "--grid-column-end"]], ["--grid-row", ["--grid-row-start", "--grid-row-end"]]]);
53465
53465
  p = class {
53466
53466
  constructor(e2 = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set([])) {
@@ -53580,7 +53580,7 @@ var init_chunk_5JIJA4QV = __esm({
53580
53580
  }
53581
53581
  });
53582
53582
 
53583
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/lib.mjs
53583
+ // node_modules/tailwindcss/dist/lib.mjs
53584
53584
  function mn(e2) {
53585
53585
  return { kind: "combinator", value: e2 };
53586
53586
  }
@@ -58691,7 +58691,7 @@ async function zf(e2, i = {}) {
58691
58691
  }
58692
58692
  var yr, Cr, vn, Sr, Lt, Vr, wn, Rr, $r, Dt, Pr, zt, Tr, Nr, kn, Kt, Ut, Er, Or, jt, He, ct, pt, _r, Ir, bn, dt, me, mt, Ze, Je, Dr, Ft, Yt, Kr, yn, xn, Ur, Wt, An, ge2, U2, zr, Vn, jr, Mr, $n, Fr, Wr, Br, Yr, Tn, Nn, En, Gr, qr, qt, V2, Rn, Pn, On, In, Dn, Jt, Ln, Qr, Xr, ei, er, zn, jn, Fn, Bn, le, Yn, Gn, qn, Hn, yt, rr, oi, ir, fi, Zn, Jn, Qn, Xn, el, tl, rl, kt, bt, il, nl, nr, ci, gl, hl, vl, wi, ki, bi, Ti, lt, Ni, Ei, $l, Ri, Nl, Pi, Rl, or, Vt, _i, Ul, Fl, Wl, we, Vi, sr, $t, ur, Nt, Ki, fa, Et, fr, pr, Zi, wa, Aa, fn, Va, Ht, ze;
58693
58693
  var init_lib = __esm({
58694
- "../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/dist/lib.mjs"() {
58694
+ "node_modules/tailwindcss/dist/lib.mjs"() {
58695
58695
  init_chunk_C2OYBFIH();
58696
58696
  init_chunk_DCG7AFIE();
58697
58697
  init_chunk_5JIJA4QV();
@@ -59010,24 +59010,24 @@ var init_lib = __esm({
59010
59010
  }
59011
59011
  });
59012
59012
 
59013
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/index.css
59013
+ // node_modules/tailwindcss/index.css
59014
59014
  var tailwindcss_default;
59015
59015
  var init_tailwindcss = __esm({
59016
- "../../../../../../git/ai4kanban/runner/node_modules/tailwindcss/index.css"() {
59016
+ "node_modules/tailwindcss/index.css"() {
59017
59017
  tailwindcss_default = '@layer theme, base, components, utilities;\n\n@layer theme {\n @theme default {\n --font-sans:\n -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",\n "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",\n "Segoe UI Symbol", "Noto Color Emoji";\n --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",\n "Courier New", monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 none);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 none);\n --color-neutral-100: oklch(97% 0 none);\n --color-neutral-200: oklch(92.2% 0 none);\n --color-neutral-300: oklch(87% 0 none);\n --color-neutral-400: oklch(70.8% 0 none);\n --color-neutral-500: oklch(55.6% 0 none);\n --color-neutral-600: oklch(43.9% 0 none);\n --color-neutral-700: oklch(37.1% 0 none);\n --color-neutral-800: oklch(26.9% 0 none);\n --color-neutral-900: oklch(20.5% 0 none);\n --color-neutral-950: oklch(14.5% 0 none);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-mauve-50: oklch(98.5% 0 none);\n --color-mauve-100: oklch(96% 0.003 325.6);\n --color-mauve-200: oklch(92.2% 0.005 325.62);\n --color-mauve-300: oklch(86.5% 0.012 325.68);\n --color-mauve-400: oklch(71.1% 0.019 323.02);\n --color-mauve-500: oklch(54.2% 0.034 322.5);\n --color-mauve-600: oklch(43.5% 0.029 321.78);\n --color-mauve-700: oklch(36.4% 0.029 323.89);\n --color-mauve-800: oklch(26.3% 0.024 320.12);\n --color-mauve-900: oklch(21.2% 0.019 322.12);\n --color-mauve-950: oklch(14.5% 0.008 326);\n\n --color-olive-50: oklch(98.8% 0.003 106.5);\n --color-olive-100: oklch(96.6% 0.005 106.5);\n --color-olive-200: oklch(93% 0.007 106.5);\n --color-olive-300: oklch(88% 0.011 106.6);\n --color-olive-400: oklch(73.7% 0.021 106.9);\n --color-olive-500: oklch(58% 0.031 107.3);\n --color-olive-600: oklch(46.6% 0.025 107.3);\n --color-olive-700: oklch(39.4% 0.023 107.4);\n --color-olive-800: oklch(28.6% 0.016 107.4);\n --color-olive-900: oklch(22.8% 0.013 107.4);\n --color-olive-950: oklch(15.3% 0.006 107.1);\n\n --color-mist-50: oklch(98.7% 0.002 197.1);\n --color-mist-100: oklch(96.3% 0.002 197.1);\n --color-mist-200: oklch(92.5% 0.005 214.3);\n --color-mist-300: oklch(87.2% 0.007 219.6);\n --color-mist-400: oklch(72.3% 0.014 214.4);\n --color-mist-500: oklch(56% 0.021 213.5);\n --color-mist-600: oklch(45% 0.017 213.2);\n --color-mist-700: oklch(37.8% 0.015 216);\n --color-mist-800: oklch(27.5% 0.011 216.9);\n --color-mist-900: oklch(21.8% 0.008 223.9);\n --color-mist-950: oklch(14.8% 0.004 228.8);\n\n --color-taupe-50: oklch(98.6% 0.002 67.8);\n --color-taupe-100: oklch(96% 0.002 17.2);\n --color-taupe-200: oklch(92.2% 0.005 34.3);\n --color-taupe-300: oklch(86.8% 0.007 39.5);\n --color-taupe-400: oklch(71.4% 0.014 41.2);\n --color-taupe-500: oklch(54.7% 0.021 43.1);\n --color-taupe-600: oklch(43.8% 0.017 39.3);\n --color-taupe-700: oklch(36.7% 0.016 35.7);\n --color-taupe-800: oklch(26.8% 0.011 36.5);\n --color-taupe-900: oklch(21.4% 0.009 43.1);\n --color-taupe-950: oklch(14.7% 0.004 49.3);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md:\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg:\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl:\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\n 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\n 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\n 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(\n --font-sans--font-feature-settings,\n initial\n );\n --default-font-variation-settings: --theme(\n --font-sans--font-variation-settings,\n initial\n );\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(\n --font-mono--font-feature-settings,\n initial\n );\n --default-mono-font-variation-settings: --theme(\n --font-mono--font-variation-settings,\n initial\n );\n }\n\n /* Deprecated */\n @theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n }\n}\n\n@layer base {\n /*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n }\n\n /*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user\'s configured `sans` font-family by default.\n 5. Use the user\'s configured `sans` font-feature-settings by default.\n 6. Use the user\'s configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\n html,\n :host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n -apple-system,\n BlinkMacSystemFont,\n "Segoe UI",\n Roboto,\n "Helvetica Neue",\n "Noto Sans",\n Arial,\n sans-serif,\n "Apple Color Emoji",\n "Segoe UI Emoji",\n "Segoe UI Symbol",\n "Noto Color Emoji"\n ); /* 4 */\n font-feature-settings: --theme(\n --default-font-feature-settings,\n normal\n ); /* 5 */\n font-variation-settings: --theme(\n --default-font-variation-settings,\n normal\n ); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n }\n\n /*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n }\n\n /*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /*\n Remove the default font size and weight for headings.\n*/\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n /*\n Add the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /*\n 1. Use the user\'s configured `mono` font-family by default.\n 2. Use the user\'s configured `mono` font-feature-settings by default.\n 3. Use the user\'s configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace\n ); /* 1 */\n font-feature-settings: --theme(\n --default-mono-font-feature-settings,\n normal\n ); /* 2 */\n font-variation-settings: --theme(\n --default-mono-font-variation-settings,\n normal\n ); /* 3 */\n font-size: 1em; /* 4 */\n }\n\n /*\n Add the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n }\n\n /*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n\n /*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /*\n Add the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /*\n Make lists unstyled by default.\n*/\n\n ol,\n ul,\n menu {\n list-style: none;\n }\n\n /*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n }\n\n /*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n\n /*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n }\n\n /*\n Restore default font weight.\n*/\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n /*\n Restore indentation.\n*/\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n /*\n Restore space after button.\n*/\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n /*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n ::placeholder {\n opacity: 1;\n }\n\n /*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(\u2026)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n\n /*\n Prevent resizing textareas horizontally by default.\n*/\n\n textarea {\n resize: vertical;\n }\n\n /*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n ::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n }\n\n /*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n /*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n /*\n Center dropdown marker shown on inputs with paired `<datalist>`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n /*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n /*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\n button,\n input:where([type="button"], [type="reset"], [type="submit"]),\n ::file-selector-button {\n appearance: button;\n }\n\n /*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n /*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n [hidden]:where(:not([hidden="until-found"])) {\n display: none !important;\n }\n}\n\n@layer utilities {\n @tailwind utilities;\n}\n';
59018
59018
  }
59019
59019
  });
59020
59020
 
59021
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconsManifest.mjs
59021
+ // node_modules/react-icons/lib/iconsManifest.mjs
59022
59022
  var init_iconsManifest = __esm({
59023
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconsManifest.mjs"() {
59023
+ "node_modules/react-icons/lib/iconsManifest.mjs"() {
59024
59024
  }
59025
59025
  });
59026
59026
 
59027
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconContext.mjs
59027
+ // node_modules/react-icons/lib/iconContext.mjs
59028
59028
  var import_react, DefaultContext, IconContext;
59029
59029
  var init_iconContext = __esm({
59030
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconContext.mjs"() {
59030
+ "node_modules/react-icons/lib/iconContext.mjs"() {
59031
59031
  import_react = __toESM(require_react(), 1);
59032
59032
  DefaultContext = {
59033
59033
  color: void 0,
@@ -59040,7 +59040,7 @@ var init_iconContext = __esm({
59040
59040
  }
59041
59041
  });
59042
59042
 
59043
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconBase.mjs
59043
+ // node_modules/react-icons/lib/iconBase.mjs
59044
59044
  function _objectWithoutProperties(e2, t2) {
59045
59045
  if (null == e2) return {};
59046
59046
  var o2, r2, i = _objectWithoutPropertiesLoose(e2, t2);
@@ -59141,23 +59141,23 @@ function IconBase(props) {
59141
59141
  }
59142
59142
  var import_react2, _excluded;
59143
59143
  var init_iconBase = __esm({
59144
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/iconBase.mjs"() {
59144
+ "node_modules/react-icons/lib/iconBase.mjs"() {
59145
59145
  import_react2 = __toESM(require_react(), 1);
59146
59146
  init_iconContext();
59147
59147
  _excluded = ["attr", "size", "title"];
59148
59148
  }
59149
59149
  });
59150
59150
 
59151
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/index.mjs
59151
+ // node_modules/react-icons/lib/index.mjs
59152
59152
  var init_lib2 = __esm({
59153
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/lib/index.mjs"() {
59153
+ "node_modules/react-icons/lib/index.mjs"() {
59154
59154
  init_iconsManifest();
59155
59155
  init_iconBase();
59156
59156
  init_iconContext();
59157
59157
  }
59158
59158
  });
59159
59159
 
59160
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/fi/index.mjs
59160
+ // node_modules/react-icons/fi/index.mjs
59161
59161
  var fi_exports = {};
59162
59162
  __export(fi_exports, {
59163
59163
  FiActivity: () => FiActivity,
@@ -60310,12 +60310,12 @@ function FiActivity(props) {
60310
60310
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "none", "stroke": "currentColor", "strokeWidth": "2", "strokeLinecap": "round", "strokeLinejoin": "round" }, "child": [{ "tag": "polyline", "attr": { "points": "22 12 18 12 15 21 9 3 6 12 2 12" }, "child": [] }] })(props);
60311
60311
  }
60312
60312
  var init_fi = __esm({
60313
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/fi/index.mjs"() {
60313
+ "node_modules/react-icons/fi/index.mjs"() {
60314
60314
  init_lib2();
60315
60315
  }
60316
60316
  });
60317
60317
 
60318
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/fa/index.mjs
60318
+ // node_modules/react-icons/fa/index.mjs
60319
60319
  var fa_exports = {};
60320
60320
  __export(fa_exports, {
60321
60321
  Fa500Px: () => Fa500Px,
@@ -66764,12 +66764,12 @@ function FaRegAddressBook(props) {
66764
66764
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 448 512" }, "child": [{ "tag": "path", "attr": { "d": "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z" }, "child": [] }] })(props);
66765
66765
  }
66766
66766
  var init_fa = __esm({
66767
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/fa/index.mjs"() {
66767
+ "node_modules/react-icons/fa/index.mjs"() {
66768
66768
  init_lib2();
66769
66769
  }
66770
66770
  });
66771
66771
 
66772
- // ../../../../../../git/ai4kanban/runner/node_modules/react-icons/si/index.mjs
66772
+ // node_modules/react-icons/si/index.mjs
66773
66773
  var si_exports = {};
66774
66774
  __export(si_exports, {
66775
66775
  Si1001Tracklists: () => Si1001Tracklists,
@@ -80558,12 +80558,12 @@ function Si1001Tracklists(props) {
80558
80558
  return GenIcon({ "tag": "svg", "attr": { "role": "img", "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "d": "M8.0957 1.334v1.3457H6.7461v1.3457H5.3984V5.371H4.0488v1.3457H2.6992v6.6816H1.3496v1.3477H0v2.4512h1.3496v1.3457h1.3496v1.3457h2.457v-7.836H3.8067V7.8223h1.3497V6.4766h1.3496V5.1309h1.3496V3.7852h8.289v1.3457h1.3496v1.3457h1.3496v1.3457h1.3497v4.2304h-1.3497v7.836h2.457V18.543h1.3497v-1.3457H24V14.746h-1.3496v-1.3477h-1.3496V6.7168h-1.3496V5.3711h-1.3496V4.0254h-1.3477V2.6797h-1.3496V1.334Zm1.3711 8v1.3515H8.1113v3.8165h2.4688v-4.0567h2.9512v4.3477h-1.3555v1.3515h-1.3535v2.4649h2.4668v-2.7051H16v-5.2188h-1.3555V9.334Zm1.3555 10.8691v2.463h2.4668v-2.463z" }, "child": [] }] })(props);
80559
80559
  }
80560
80560
  var init_si = __esm({
80561
- "../../../../../../git/ai4kanban/runner/node_modules/react-icons/si/index.mjs"() {
80561
+ "node_modules/react-icons/si/index.mjs"() {
80562
80562
  init_lib2();
80563
80563
  }
80564
80564
  });
80565
80565
 
80566
- // ../../../../../../git/ai4kanban/runner/node_modules/clsx/dist/clsx.mjs
80566
+ // node_modules/clsx/dist/clsx.mjs
80567
80567
  var clsx_exports = {};
80568
80568
  __export(clsx_exports, {
80569
80569
  clsx: () => clsx,
@@ -80584,12 +80584,12 @@ function clsx() {
80584
80584
  }
80585
80585
  var clsx_default;
80586
80586
  var init_clsx = __esm({
80587
- "../../../../../../git/ai4kanban/runner/node_modules/clsx/dist/clsx.mjs"() {
80587
+ "node_modules/clsx/dist/clsx.mjs"() {
80588
80588
  clsx_default = clsx;
80589
80589
  }
80590
80590
  });
80591
80591
 
80592
- // ../../../../../../git/ai4kanban/runner/node_modules/tailwind-merge/dist/bundle-mjs.mjs
80592
+ // node_modules/tailwind-merge/dist/bundle-mjs.mjs
80593
80593
  var bundle_mjs_exports = {};
80594
80594
  __export(bundle_mjs_exports, {
80595
80595
  createTailwindMerge: () => createTailwindMerge,
@@ -80603,7 +80603,7 @@ __export(bundle_mjs_exports, {
80603
80603
  });
80604
80604
  var concatArrays, createClassValidatorObject, createClassPartObject, CLASS_PART_SEPARATOR, EMPTY_CONFLICTS, ARBITRARY_PROPERTY_PREFIX, createClassGroupUtils, getGroupRecursive, getGroupIdForArbitraryProperty, createClassMap, processClassGroups, processClassesRecursively, processClassDefinition, processStringDefinition, processFunctionDefinition, processObjectDefinition, getPart, isThemeGetter, createLruCache, IMPORTANT_MODIFIER, MODIFIER_SEPARATOR, EMPTY_MODIFIERS, createResultObject, createParseClassName, createSortModifiers, createConfigUtils, createPostfixLookupClassGroupIds, SPLIT_CLASSES_REGEX, mergeClassList, twJoin, toValue, createTailwindMerge, fallbackThemeArr, fromTheme, arbitraryValueRegex, arbitraryVariableRegex, fractionRegex, tshirtUnitRegex, lengthUnitRegex, colorFunctionRegex, shadowRegex, imageRegex, isFraction, isNumber, isInteger, isPercent, isTshirtSize, isAny, isLengthOnly, isNever, isShadow, isImage, isAnyNonArbitrary, isNamedContainerQuery, isArbitrarySize, isArbitraryValue, isArbitraryLength, isArbitraryNumber, isArbitraryWeight, isArbitraryFamilyName, isArbitraryPosition, isArbitraryImage, isArbitraryShadow, isArbitraryVariable, isArbitraryVariableLength, isArbitraryVariableFamilyName, isArbitraryVariablePosition, isArbitraryVariableSize, isArbitraryVariableImage, isArbitraryVariableShadow, isArbitraryVariableWeight, getIsArbitraryValue, getIsArbitraryVariable, isLabelPosition, isLabelImage, isLabelSize, isLabelLength, isLabelNumber, isLabelFamilyName, isLabelWeight, isLabelShadow, validators, getDefaultConfig, mergeConfigs, overrideProperty, overrideConfigProperties, mergeConfigProperties, mergeArrayProperties, extendTailwindMerge, twMerge;
80605
80605
  var init_bundle_mjs = __esm({
80606
- "../../../../../../git/ai4kanban/runner/node_modules/tailwind-merge/dist/bundle-mjs.mjs"() {
80606
+ "node_modules/tailwind-merge/dist/bundle-mjs.mjs"() {
80607
80607
  concatArrays = (array1, array2) => {
80608
80608
  const combinedArray = new Array(array1.length + array2.length);
80609
80609
  for (let i = 0; i < array1.length; i++) {
@@ -80745,9 +80745,9 @@ var init_bundle_mjs = __esm({
80745
80745
  processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
80746
80746
  }
80747
80747
  };
80748
- getPart = (classPartObject, path33) => {
80748
+ getPart = (classPartObject, path36) => {
80749
80749
  let current = classPartObject;
80750
- const parts = path33.split(CLASS_PART_SEPARATOR);
80750
+ const parts = path36.split(CLASS_PART_SEPARATOR);
80751
80751
  const len = parts.length;
80752
80752
  for (let i = 0; i < len; i++) {
80753
80753
  const part = parts[i];
@@ -83943,7 +83943,7 @@ var init_bundle_mjs = __esm({
83943
83943
  }
83944
83944
  });
83945
83945
 
83946
- // ../../../../../../git/ai4kanban/runner/node_modules/class-variance-authority/dist/index.mjs
83946
+ // node_modules/class-variance-authority/dist/index.mjs
83947
83947
  var dist_exports = {};
83948
83948
  __export(dist_exports, {
83949
83949
  cva: () => cva,
@@ -83951,7 +83951,7 @@ __export(dist_exports, {
83951
83951
  });
83952
83952
  var falsyToString, cx, cva;
83953
83953
  var init_dist = __esm({
83954
- "../../../../../../git/ai4kanban/runner/node_modules/class-variance-authority/dist/index.mjs"() {
83954
+ "node_modules/class-variance-authority/dist/index.mjs"() {
83955
83955
  init_clsx();
83956
83956
  falsyToString = (value) => typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
83957
83957
  cx = clsx;
@@ -84435,11 +84435,12 @@ function status(line) {
84435
84435
  }
84436
84436
 
84437
84437
  // src/protocol.ts
84438
- var VERSION = true ? "0.6.6" : "0.0.0";
84439
- var AKB_VERSION = true ? "0.11.5" : "0.0.0";
84440
- var AKB_CONTRACT = true ? 2 : 0;
84438
+ var VERSION = true ? "0.6.8" : "0.0.0";
84439
+ var AKB_VERSION = true ? "0.11.7" : "0.0.0";
84440
+ var AKB_CONTRACT = true ? 3 : 0;
84441
84441
  var EXIT_REFUSED = 10;
84442
84442
  var EXIT_OUTDATED = 11;
84443
+ var EXIT_UPDATE = 12;
84443
84444
 
84444
84445
  // src/runtimes.ts
84445
84446
  import { spawn as spawn2 } from "node:child_process";
@@ -85291,10 +85292,10 @@ function findRollout(threadId) {
85291
85292
  }
85292
85293
  for (const name of names2) {
85293
85294
  if (!name.startsWith("rollout-") || !name.endsWith(tail)) continue;
85294
- const path33 = join(dir, name);
85295
+ const path36 = join(dir, name);
85295
85296
  try {
85296
- const at2 = statSync(path33).mtimeMs;
85297
- if (!newest2 || at2 > newest2.at) newest2 = { path: path33, at: at2 };
85297
+ const at2 = statSync(path36).mtimeMs;
85298
+ if (!newest2 || at2 > newest2.at) newest2 = { path: path36, at: at2 };
85298
85299
  } catch {
85299
85300
  }
85300
85301
  }
@@ -85302,11 +85303,11 @@ function findRollout(threadId) {
85302
85303
  return newest2?.path;
85303
85304
  }
85304
85305
  function readCodexRunFacts(threadId) {
85305
- const path33 = findRollout(threadId);
85306
- if (!path33) return void 0;
85306
+ const path36 = findRollout(threadId);
85307
+ if (!path36) return void 0;
85307
85308
  let raw;
85308
85309
  try {
85309
- raw = readFileSync(path33, "utf8");
85310
+ raw = readFileSync(path36, "utf8");
85310
85311
  } catch {
85311
85312
  return void 0;
85312
85313
  }
@@ -85414,8 +85415,8 @@ function renderCompleted(item) {
85414
85415
  const changes = Array.isArray(item.changes) ? item.changes : [];
85415
85416
  return changes.map((raw) => {
85416
85417
  const change = obj(raw);
85417
- const path33 = str(change.path);
85418
- return path33 ? `\u23FA ${str(change.kind) || "change"}(${path33})
85418
+ const path36 = str(change.path);
85419
+ return path36 ? `\u23FA ${str(change.kind) || "change"}(${path36})
85419
85420
  ` : "";
85420
85421
  }).join("");
85421
85422
  }
@@ -85663,10 +85664,10 @@ function readKimiRunFacts(sessionId) {
85663
85664
  const total = { input: 0, cacheCreation: 0, cacheRead: 0, output: 0 };
85664
85665
  let model;
85665
85666
  let holding = 0;
85666
- for (const { path: path33, main: main2 } of wireFiles(entry.sessionDir)) {
85667
+ for (const { path: path36, main: main2 } of wireFiles(entry.sessionDir)) {
85667
85668
  let raw;
85668
85669
  try {
85669
- raw = readFileSync2(path33, "utf8");
85670
+ raw = readFileSync2(path36, "utf8");
85670
85671
  } catch {
85671
85672
  continue;
85672
85673
  }
@@ -85922,8 +85923,8 @@ function createTail(log) {
85922
85923
  // ../cli/package.json
85923
85924
  var package_default = {
85924
85925
  name: "wildcrane",
85925
- version: "0.11.5",
85926
- akbContract: 2,
85926
+ version: "0.11.7",
85927
+ akbContract: 3,
85927
85928
  description: "WildCrane's `akb` command \u2014 scaffold the Markdown board under docs/kanban/, put an agent on a card, and carry the flows the agent works by.",
85928
85929
  keywords: [
85929
85930
  "kanban",
@@ -85984,8 +85985,8 @@ var CLIENT_CAPABILITIES = {
85984
85985
  };
85985
85986
  function whereHint(update2, title) {
85986
85987
  const locations = Array.isArray(update2.locations) ? update2.locations : [];
85987
- const path33 = str(obj(locations[0]).path);
85988
- return path33 && !title.includes(path33) ? hint(path33) : "";
85988
+ const path36 = str(obj(locations[0]).path);
85989
+ return path36 && !title.includes(path36) ? hint(path36) : "";
85989
85990
  }
85990
85991
  function saidBy(update2) {
85991
85992
  const content = Array.isArray(update2.content) ? update2.content : [];
@@ -86455,8 +86456,8 @@ async function tokensOf(rpc, sessionId) {
86455
86456
  }
86456
86457
  async function contextOf(rpc, sessionId) {
86457
86458
  try {
86458
- const read = await rpc.call("session/read", { sessionId, messageLimit: 1 });
86459
- const state = obj(read.projection);
86459
+ const read2 = await rpc.call("session/read", { sessionId, messageLimit: 1 });
86460
+ const state = obj(read2.projection);
86460
86461
  const used = num(state.contextUsed);
86461
86462
  const limit = num(state.contextWindow);
86462
86463
  return used > 0 ? { used, limit: limit > 0 ? limit : void 0 } : void 0;
@@ -88313,7 +88314,7 @@ var listFolders = (machineId2) => request("GET", `/v1/runner/folders?machine=${q
88313
88314
  var listElsewhere = (machineId2) => request("GET", `/v1/runner/folders?machine=${q(machineId2)}&elsewhere=1`);
88314
88315
  var listMachineTasks = (machineId2) => request("GET", `/v1/runner/tasks?machine=${q(machineId2)}`);
88315
88316
  var stopTask = (task, how) => request("POST", how === "chat" ? `/v1/tasks/${q(task)}/chat/stop` : `/v1/tasks/${q(task)}/stop`, {});
88316
- var addFolder = (machineId2, name, path33, project) => request("POST", "/v1/runner/folders", { machineId: machineId2, name, path: path33, ...project ? { project } : {} });
88317
+ var addFolder = (machineId2, name, path36, project) => request("POST", "/v1/runner/folders", { machineId: machineId2, name, path: path36, ...project ? { project } : {} });
88317
88318
  var removeFolder = (machineId2, project) => request("POST", `/v1/runner/folders/${q(project)}/remove`, { machineId: machineId2 });
88318
88319
  var readBoard = (project, since) => request("GET", `/v1/projects/${q(project)}/board${since === null ? "" : `?since=${since}`}`);
88319
88320
  async function commitBoard(project, job, machine, files) {
@@ -88391,6 +88392,7 @@ function plan(runtime, prompt, cwd, resume, model, given = {}, fork = false, lin
88391
88392
  stdout: child.stdout,
88392
88393
  stdin: child.stdin,
88393
88394
  prompt,
88395
+ restartPrompt: prompt,
88394
88396
  cwd,
88395
88397
  resumeId: resume ?? void 0,
88396
88398
  log: () => {
@@ -88833,9 +88835,9 @@ async function askDueAgents(machineId2, now = Date.now()) {
88833
88835
  if (!folders2.ok) return false;
88834
88836
  let started = false;
88835
88837
  for (const { project } of folders2.value.folders) {
88836
- const read = await readAgents(machineId2, project);
88837
- if (!read.ok) continue;
88838
- for (const agent of read.value.agents.filter((a3) => agentDue(a3, now))) {
88838
+ const read2 = await readAgents(machineId2, project);
88839
+ if (!read2.ok) continue;
88840
+ for (const agent of read2.value.agents.filter((a3) => agentDue(a3, now))) {
88839
88841
  const asked = await requestAgent(machineId2, project, agent.name, agent.workflow ?? null, agent.lastSuccess);
88840
88842
  if (!asked.ok) console.error(`runner: ${agent.name} was not started on ${project}: ${asked.error}`);
88841
88843
  else if (asked.value.job) started = true;
@@ -89382,11 +89384,11 @@ function keepCloudChat(task, messages) {
89382
89384
  fs17.writeFileSync(file2, lines.map((l2) => `${JSON.stringify(l2)}
89383
89385
  `).join(""));
89384
89386
  }
89385
- async function keepDecisions(task, read) {
89387
+ async function keepDecisions(task, read2) {
89386
89388
  const comments = [];
89387
89389
  let after = null;
89388
89390
  do {
89389
- const page = await read(task, after);
89391
+ const page = await read2(task, after);
89390
89392
  if (!page.ok) return;
89391
89393
  for (const d2 of page.value.data) {
89392
89394
  if (d2.comment.trim()) comments.push({ id: d2.id, role: "user", text: d2.comment, at: Date.parse(d2.created_at) || Date.now() });
@@ -89460,22 +89462,22 @@ import path24 from "node:path";
89460
89462
  // ../cloud/src/board-files.ts
89461
89463
  var ROOTS = ["todo/", ".archive/", "memory/", "workflows/", "triage/", "assets/", "rules/"];
89462
89464
  var SETTINGS = ["modules.md", "config.md"];
89463
- var isSettingsPath = (path33) => SETTINGS.includes(path33) || /^rules\/(?:workflows\/)?[^/]+\.md$/.test(path33);
89465
+ var isSettingsPath = (path36) => SETTINGS.includes(path36) || /^rules\/(?:workflows\/)?[^/]+\.md$/.test(path36);
89464
89466
  var BOARD_FILE_LIMIT = 256 * 1024;
89465
- function isBoardPath(path33) {
89466
- if (!path33 || path33.length > 500 || path33.startsWith("/") || path33.includes("\\") || path33.includes("\0")) return false;
89467
- if (path33.split("/").some((part) => !part || part === "." || part === "..")) return false;
89468
- if (path33 === "todo/README.md" || path33.split("/").includes(".sync")) return false;
89469
- if (path33.startsWith("workflows/")) return true;
89470
- if (SETTINGS.includes(path33)) return true;
89471
- if (path33.startsWith("rules/")) return isSettingsPath(path33);
89472
- if (path33.startsWith("assets/")) return path33.endsWith(".json");
89473
- return ROOTS.some((root) => path33.startsWith(root)) && path33.endsWith(".md");
89467
+ function isBoardPath(path36) {
89468
+ if (!path36 || path36.length > 500 || path36.startsWith("/") || path36.includes("\\") || path36.includes("\0")) return false;
89469
+ if (path36.split("/").some((part) => !part || part === "." || part === "..")) return false;
89470
+ if (path36 === "todo/README.md" || path36.split("/").includes(".sync")) return false;
89471
+ if (path36.startsWith("workflows/")) return true;
89472
+ if (SETTINGS.includes(path36)) return true;
89473
+ if (path36.startsWith("rules/")) return isSettingsPath(path36);
89474
+ if (path36.startsWith("assets/")) return path36.endsWith(".json");
89475
+ return ROOTS.some((root) => path36.startsWith(root)) && path36.endsWith(".md");
89474
89476
  }
89475
89477
  var CARD = /^(?:todo|\.archive)\/(?:[^/]+\/)*(\d+)-[^/]*\.md$/;
89476
89478
  var ROOT = /^(?:todo|\.archive)\/(?:[^/]+\/)*(\d+)-[^/]+\/root\.md$/;
89477
- function numberOfCard(path33) {
89478
- const n = ROOT.exec(path33)?.[1] ?? CARD.exec(path33)?.[1];
89479
+ function numberOfCard(path36) {
89480
+ const n = ROOT.exec(path36)?.[1] ?? CARD.exec(path36)?.[1];
89479
89481
  return n ? Number(n) : null;
89480
89482
  }
89481
89483
  var cardSlug = (task) => task.toLowerCase().replace(/_/g, "-");
@@ -89512,7 +89514,7 @@ import crypto3 from "node:crypto";
89512
89514
  import fs20 from "node:fs";
89513
89515
  import path23 from "node:path";
89514
89516
 
89515
- // ../../../../../../git/ai4kanban/runner/node_modules/node-diff3/dist/diff3.mjs
89517
+ // node_modules/node-diff3/dist/diff3.mjs
89516
89518
  function LCS(buffer1, buffer2) {
89517
89519
  let equivalenceClasses = /* @__PURE__ */ Object.create(null);
89518
89520
  for (let j2 = 0; j2 < buffer2.length; j2++) {
@@ -89749,8 +89751,8 @@ function unquote2(v2) {
89749
89751
 
89750
89752
  // ../cloud/src/triage-files.ts
89751
89753
  var ITEM = /^triage\/(?:(dismissed|archived)\/)?([^/]+)\.md$/;
89752
- function itemAt(path33) {
89753
- const m = ITEM.exec(path33);
89754
+ function itemAt(path36) {
89755
+ const m = ITEM.exec(path36);
89754
89756
  if (!m) return null;
89755
89757
  return { state: m[1] === "dismissed" ? "dismissed" : m[1] === "archived" ? "carded" : "open", name: m[2] };
89756
89758
  }
@@ -90490,8 +90492,8 @@ function sharedMemory(board) {
90490
90492
  const declared = /* @__PURE__ */ new Map();
90491
90493
  const take = (folder, text3, builtIn) => {
90492
90494
  if (text3 === null || declared.has(folder)) return;
90493
- const read = parseSpecAgent(text3, folder, () => null, builtIn);
90494
- if ("agent" in read && read.agent.name === folder) declared.set(folder, read.agent.memoryFiles.workspace);
90495
+ const read2 = parseSpecAgent(text3, folder, () => null, builtIn);
90496
+ if ("agent" in read2 && read2.agent.name === folder) declared.set(folder, read2.agent.memoryFiles.workspace);
90495
90497
  };
90496
90498
  for (const [key, text3] of Object.entries(BUNDLED_AGENT_FILES)) {
90497
90499
  const at2 = /^([^/]+)\/AGENT\.md$/.exec(key);
@@ -90748,10 +90750,10 @@ async function pullWorkflow(ws, record, base) {
90748
90750
  record.builtin = ws.workflow.startsWith("wf_builtin_");
90749
90751
  let found = Object.keys(files).length > 0;
90750
90752
  if (!found && ws.cloudTask) {
90751
- const read = await readTaskWorkflow(ws.cloudTask);
90752
- if (!read.ok && read.code !== "not_found") return read;
90753
- if (read.ok) {
90754
- files = read.value.files;
90753
+ const read2 = await readTaskWorkflow(ws.cloudTask);
90754
+ if (!read2.ok && read2.code !== "not_found") return read2;
90755
+ if (read2.ok) {
90756
+ files = read2.value.files;
90755
90757
  found = true;
90756
90758
  if (!record.builtin) {
90757
90759
  for (const [name, text3] of Object.entries(files)) if (isBoardPath(root + name)) write(path23.join(ws.board, root, name), text3);
@@ -90866,12 +90868,12 @@ var readHead = (ws) => readBase(ws).head_seq;
90866
90868
  var pullChanges = (ws) => inFolder(ws.cwd, async () => {
90867
90869
  const base = readBase(ws);
90868
90870
  if (base.head_seq === null) return { ok: true, value: void 0 };
90869
- const read = await readBoard(ws.project, base.head_seq);
90870
- if (!read.ok) return read;
90871
+ const read2 = await readBoard(ws.project, base.head_seq);
90872
+ if (!read2.ok) return read2;
90871
90873
  const shared = sharedMemory(ws.board);
90872
90874
  const root = rootOf(ws);
90873
90875
  let skipped = false;
90874
- for (const f2 of read.value.files) {
90876
+ for (const f2 of read2.value.files) {
90875
90877
  const p2 = f2.path.startsWith(root) ? f2.path.slice(root.length) : f2.path;
90876
90878
  const isShared = p2.startsWith(MEMORY2) && shared(p2.slice(MEMORY2.length));
90877
90879
  if (kept3(p2) && isShared === !f2.path.startsWith(root)) {
@@ -90887,7 +90889,7 @@ var pullChanges = (ws) => inFolder(ws.cwd, async () => {
90887
90889
  if (f2.content === null) delete base.files[f2.path];
90888
90890
  else base.files[f2.path] = { seq: f2.seq, content: f2.content };
90889
90891
  }
90890
- if (!skipped) base.head_seq = read.value.head_seq;
90892
+ if (!skipped) base.head_seq = read2.value.head_seq;
90891
90893
  writeBase(ws, base);
90892
90894
  writeIndex(ws.board);
90893
90895
  return { ok: true, value: void 0 };
@@ -90900,14 +90902,14 @@ async function readCloud(ws) {
90900
90902
  if (!project.ok) return project;
90901
90903
  base.workspace = project.value.workspace ?? null;
90902
90904
  }
90903
- const read = await readBoard(ws.project, base.head_seq);
90904
- if (!read.ok) return read;
90905
+ const read2 = await readBoard(ws.project, base.head_seq);
90906
+ if (!read2.ok) return read2;
90905
90907
  if (base.head_seq === null) base.files = {};
90906
- for (const f2 of read.value.files) {
90908
+ for (const f2 of read2.value.files) {
90907
90909
  if (f2.content === null) delete base.files[f2.path];
90908
90910
  else base.files[f2.path] = { seq: f2.seq, content: f2.content };
90909
90911
  }
90910
- base.head_seq = read.value.head_seq;
90912
+ base.head_seq = read2.value.head_seq;
90911
90913
  base.project = ws.project;
90912
90914
  writeBase(ws, base);
90913
90915
  const reset = (view2) => {
@@ -91231,8 +91233,8 @@ function watchBoards(machineId2, ms, lookMs = LOOK_MS, pullMs = PULL_MS, busyMs
91231
91233
  if (closed) return;
91232
91234
  if (busy(ws.cwd)) return void afterJob.add(ws.cwd);
91233
91235
  afterJob.delete(ws.cwd);
91234
- const read = await pullChanges(ws);
91235
- if (!read.ok && read.code) console.error(`runner: the board in ${ws.cwd} was not read: ${read.error}`);
91236
+ const read2 = await pullChanges(ws);
91237
+ if (!read2.ok && read2.code) console.error(`runner: the board in ${ws.cwd} was not read: ${read2.error}`);
91236
91238
  };
91237
91239
  const send3 = async (ws) => {
91238
91240
  const sent = await pushBoard(ws, machineId2);
@@ -91392,8 +91394,8 @@ async function answerHint(machineId2, hint2) {
91392
91394
  }
91393
91395
 
91394
91396
  // src/flow.ts
91395
- import fs25 from "node:fs";
91396
- import path28 from "node:path";
91397
+ import fs27 from "node:fs";
91398
+ import path30 from "node:path";
91397
91399
 
91398
91400
  // ../cli/src/lib/question-block.ts
91399
91401
  var MODES = ["single", "multi"];
@@ -91632,10 +91634,152 @@ function clearLaid(board) {
91632
91634
  for (const sub of SCRATCH) fs23.rmSync(path26.join(triageDir(board), sub), { recursive: true, force: true });
91633
91635
  }
91634
91636
 
91635
- // src/built.ts
91637
+ // src/kanban-skill.ts
91636
91638
  import fs24 from "node:fs";
91637
91639
  import path27 from "node:path";
91638
91640
 
91641
+ // ../skill/SKILL.md
91642
+ var SKILL_default = '---\nname: kanban\ndescription: Manage the file-based task board with akb. Use for creating and planning tasks, revising or implementing cards, and managing background runs; also for "what\'s running".\n---\n\n# Kanban board\n\nThe board is worked only through `akb`. Find the command for the job in `akb help` and run\nit; never do its work by hand or from memory.\n\n- **`--print` does it here**: `akb card revise 12 --print "drop the export"` prints the whole\n flow for that card on this board; follow it to its closing steps. Without `--print` the\n same command starts a separate agent.\n- **Keys**: never read or write API keys; the user sets them with `akb agent set apiKey`.\n';
91643
+
91644
+ // src/kanban-skill.ts
91645
+ var CONTENT = `${SKILL_default.trimEnd()}
91646
+
91647
+ <!-- ai4kanban managed -->
91648
+ `;
91649
+ var MANAGED = /^<!-- ai4kanban \S+ -->$/m;
91650
+ function prepareKanbanSkill(root) {
91651
+ for (const folder of SKILL_FOLDERS) {
91652
+ const dir = path27.join(root, folder);
91653
+ const file2 = path27.join(dir, "SKILL.md");
91654
+ try {
91655
+ let linked = false;
91656
+ let at2 = root;
91657
+ for (const name of `${folder}/SKILL.md`.split("/")) {
91658
+ at2 = path27.join(at2, name);
91659
+ if (fs24.lstatSync(at2, { throwIfNoEntry: false })?.isSymbolicLink()) linked = true;
91660
+ }
91661
+ const held4 = fs24.existsSync(file2) ? fs24.readFileSync(file2, "utf8") : null;
91662
+ const exists = fs24.lstatSync(dir, { throwIfNoEntry: false }) !== void 0;
91663
+ if (linked || exists && !MANAGED.test(held4 ?? "")) {
91664
+ if (!held4?.trim()) throw new Error("\u7528\u6237\u81EA\u6709\u76EE\u5F55\u6216\u7B26\u53F7\u94FE\u63A5\u4E2D\u7F3A\u5C11\u53EF\u8BFB\u7684 SKILL.md");
91665
+ continue;
91666
+ }
91667
+ if (held4 !== CONTENT) {
91668
+ fs24.mkdirSync(dir, { recursive: true });
91669
+ fs24.writeFileSync(file2, CONTENT);
91670
+ }
91671
+ } catch (e2) {
91672
+ throw new Error(`\u65E0\u6CD5\u51C6\u5907 ${folder}\uFF1A${e2 instanceof Error ? e2.message : String(e2)}`);
91673
+ }
91674
+ }
91675
+ }
91676
+
91677
+ // ../cli/src/lib/skill/hook.ts
91678
+ import { spawnSync as spawnSync5 } from "node:child_process";
91679
+ import fs25 from "node:fs";
91680
+ import path28 from "node:path";
91681
+ var MARKER = "# ai4kanban commit guard";
91682
+ var MARKER_LINE = new RegExp(`^${MARKER}\\b`, "m");
91683
+ var CHECK = [
91684
+ "try{",
91685
+ 'const[top,branch]=require("child_process")',
91686
+ '.execFileSync("git",["rev-parse","--show-toplevel","--abbrev-ref","HEAD"],{encoding:"utf8"}).trim().split("\\n");',
91687
+ 'if(/\\/\\.akb\\/worktrees\\//.test(top+"/"))process.exit(0);',
91688
+ 'const d=(JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")).deliveries||[])',
91689
+ '.find((x)=>x&&x.status==="active"&&x.commitMode==="auto"&&x.targetBranch===branch&&(!x.landing||x.landing.status!=="landed"));',
91690
+ "if(!d)process.exit(0);",
91691
+ "process.stderr.write(",
91692
+ '"ai4kanban: delivery "+d.deliveryId+" is landing #"+d.cardId+" on "+branch+", so a commit here moves the target under it\\n"',
91693
+ '+" \u2014 commit on another branch, or `git commit --no-verify` to commit anyway.\\n");',
91694
+ "process.exit(1);",
91695
+ "}catch(e){process.exit(0)}"
91696
+ ].join("");
91697
+ var quoted = (p2) => `"${p2.replace(/(["$`\\])/g, "\\$1")}"`;
91698
+ var guardLine = (sessions) => `if command -v node >/dev/null 2>&1; then node -e '${CHECK}' ${quoted(sessions)} || exit 1; fi`;
91699
+ function hookScript(sessions) {
91700
+ return [
91701
+ "#!/bin/sh",
91702
+ `${MARKER} ${SKILL_VERSION} \u2014 \u7531 Runner \u7BA1\u7406\uFF0C\u4FEE\u6539\u4F1A\u88AB\u8986\u76D6\u3002`,
91703
+ "#",
91704
+ "# Refuses a commit on the branch a delivery is landing on, and nothing else. Anything",
91705
+ "# it cannot judge lets the commit through. `git commit --no-verify` gets past it, and",
91706
+ "# deleting this file turns it off.",
91707
+ guardLine(sessions),
91708
+ "exit 0",
91709
+ ""
91710
+ ].join("\n");
91711
+ }
91712
+ var read = (file2) => {
91713
+ try {
91714
+ return fs25.readFileSync(file2, "utf8");
91715
+ } catch {
91716
+ return null;
91717
+ }
91718
+ };
91719
+ function hooksDir(root) {
91720
+ const out = spawnSync5("git", ["rev-parse", "--git-path", "hooks"], {
91721
+ cwd: root,
91722
+ encoding: "utf8",
91723
+ windowsHide: true
91724
+ });
91725
+ if (out.error || out.status !== 0 || !out.stdout.trim()) return null;
91726
+ return path28.resolve(root, out.stdout.trim());
91727
+ }
91728
+ function hasOwnHooksPath(root) {
91729
+ const out = spawnSync5("git", ["config", "--get", "core.hooksPath"], {
91730
+ cwd: root,
91731
+ encoding: "utf8",
91732
+ windowsHide: true
91733
+ });
91734
+ return !out.error && out.status === 0 && !!out.stdout.trim();
91735
+ }
91736
+ var sessionsPath = (root, board) => path28.join(projectStateDir(board, root), SESSIONS_FILE);
91737
+ function readCommitHook(root, board = path28.join(root, "docs", "kanban")) {
91738
+ const dir = hooksDir(root);
91739
+ if (!dir) return { state: "no-git" };
91740
+ const where = shown(root, path28.join(dir, "pre-commit"));
91741
+ const line = guardLine(sessionsPath(root, board));
91742
+ if (hasOwnHooksPath(root)) return { state: "hooks-path", path: where, line };
91743
+ const file2 = path28.join(dir, "pre-commit");
91744
+ if (fs25.lstatSync(file2, { throwIfNoEntry: false })?.isSymbolicLink()) return { state: "foreign", path: where, line };
91745
+ const text3 = read(file2);
91746
+ if (text3 === null) return { state: "absent", path: where };
91747
+ return MARKER_LINE.test(text3) ? { state: "ours", path: where } : { state: "foreign", path: where, line };
91748
+ }
91749
+ var shown = (root, p2) => (path28.relative(root, p2) || p2).split(path28.sep).join("/");
91750
+ function installCommitHook(root, board = path28.join(root, "docs", "kanban")) {
91751
+ try {
91752
+ return placeCommitHook(root, board);
91753
+ } catch (e2) {
91754
+ return { note: `\u63D0\u4EA4\u4FDD\u62A4\u65E0\u6CD5\u51C6\u5907\uFF1A${e2 instanceof Error ? e2.message : String(e2)}` };
91755
+ }
91756
+ }
91757
+ function placeCommitHook(root, board) {
91758
+ const hook = readCommitHook(root, board);
91759
+ if (hook.state === "no-git") return {};
91760
+ if (hook.state === "hooks-path" || hook.state === "foreign") {
91761
+ const why = hook.state === "foreign" ? `${hook.path} is a hook the board did not write, so no commit guard was installed` : `this repository runs its hooks from \`core.hooksPath\`, so no commit guard was installed`;
91762
+ return {
91763
+ note: `${why} \u2014 add this line to ${hook.path} to refuse a commit on the branch a delivery is landing on:
91764
+ ${hook.line}`
91765
+ };
91766
+ }
91767
+ const file2 = path28.join(root, hook.path);
91768
+ try {
91769
+ fs25.mkdirSync(path28.dirname(file2), { recursive: true });
91770
+ const text3 = hookScript(sessionsPath(root, board));
91771
+ if (read(file2) !== text3) fs25.writeFileSync(file2, text3, { mode: 493 });
91772
+ fs25.chmodSync(file2, 493);
91773
+ } catch (e2) {
91774
+ return { note: `${hook.path} could not be written \u2014 ${e2 instanceof Error ? e2.message : String(e2)}` };
91775
+ }
91776
+ return { wrote: { path: hook.path, refreshed: hook.state === "ours" } };
91777
+ }
91778
+
91779
+ // src/built.ts
91780
+ import fs26 from "node:fs";
91781
+ import path29 from "node:path";
91782
+
91639
91783
  // ../cli/src/lib/spec-agent-names.ts
91640
91784
  var LEGACY_SPEC_AGENT_NAMES = {
91641
91785
  "recommend-tech-stack": "tech-stack-advisor",
@@ -91731,13 +91875,13 @@ function folderPath(file2, top) {
91731
91875
  return [parts[1], parts.slice(2).join("/")];
91732
91876
  }
91733
91877
  function mcpProblem(text3) {
91734
- let read;
91878
+ let read2;
91735
91879
  try {
91736
- read = JSON.parse(text3);
91880
+ read2 = JSON.parse(text3);
91737
91881
  } catch {
91738
91882
  return "is not JSON";
91739
91883
  }
91740
- const servers = read?.mcpServers;
91884
+ const servers = read2?.mcpServers;
91741
91885
  if (!servers || typeof servers !== "object" || Array.isArray(servers)) return "must hold `mcpServers`, an object of name \u2192 server";
91742
91886
  for (const [name, server] of Object.entries(servers)) {
91743
91887
  const { command, args, ...rest } = server ?? {};
@@ -91784,9 +91928,9 @@ function checkWorkflowFiles(value, official = false) {
91784
91928
  }
91785
91929
  const source = value[WORKFLOW_FILE];
91786
91930
  if (source === void 0) return fail(WORKFLOW_FILE, "is missing");
91787
- const read = parseWorkflowFile("workflow", source, WORKFLOW_FILE);
91788
- if ("problem" in read) return fail(WORKFLOW_FILE, read.problem.replace(`${WORKFLOW_FILE}: `, ""));
91789
- const def = read.def;
91931
+ const read2 = parseWorkflowFile("workflow", source, WORKFLOW_FILE);
91932
+ if ("problem" in read2) return fail(WORKFLOW_FILE, read2.problem.replace(`${WORKFLOW_FILE}: `, ""));
91933
+ const def = read2.def;
91790
91934
  const agents = /* @__PURE__ */ new Map();
91791
91935
  for (const [name, own] of folders2) {
91792
91936
  const from = `agents/${name}/AGENT.md`;
@@ -91810,26 +91954,26 @@ function checkWorkflowFiles(value, official = false) {
91810
91954
 
91811
91955
  // src/built.ts
91812
91956
  var isBuilder = (ws) => ws.workflow === BUILDER;
91813
- var draftDir = (ws) => path27.join(ws.board, "workflows", draftFolder(ws.task));
91814
- var draftLine = (ws) => `<!-- workflow folder: ${path27.relative(ws.cwd, draftDir(ws)).split(path27.sep).join("/")}/ -->`;
91957
+ var draftDir = (ws) => path29.join(ws.board, "workflows", draftFolder(ws.task));
91958
+ var draftLine = (ws) => `<!-- workflow folder: ${path29.relative(ws.cwd, draftDir(ws)).split(path29.sep).join("/")}/ -->`;
91815
91959
  var skeleton = (name) => ["---", `name: ${/\s#/.test(name) ? JSON.stringify(name) : yamlScalar(name)}`, "needsArtifact: false", "---", ""].join("\n");
91816
- async function placeDraft(ws, read) {
91960
+ async function placeDraft(ws, read2) {
91817
91961
  const dir = draftDir(ws);
91818
- if (fs24.existsSync(path27.join(dir, WORKFLOW_FILE))) return { ok: true, value: void 0 };
91819
- const task = await read.readTask(ws.task);
91962
+ if (fs26.existsSync(path29.join(dir, WORKFLOW_FILE))) return { ok: true, value: void 0 };
91963
+ const task = await read2.readTask(ws.task);
91820
91964
  if (!task.ok) return task;
91821
91965
  let files = { [WORKFLOW_FILE]: skeleton(task.value.title.trim() || "Untitled") };
91822
91966
  const changes = task.value.context?.workflow;
91823
91967
  if (changes) {
91824
- const held4 = await read.readWorkflow(changes);
91968
+ const held4 = await read2.readWorkflow(changes);
91825
91969
  if (!held4.ok) return held4;
91826
91970
  files = held4.value.files;
91827
91971
  }
91828
91972
  for (const [name, text3] of Object.entries(files)) {
91829
- const file2 = path27.resolve(dir, name);
91830
- if (!file2.startsWith(dir + path27.sep)) continue;
91831
- fs24.mkdirSync(path27.dirname(file2), { recursive: true });
91832
- fs24.writeFileSync(file2, text3);
91973
+ const file2 = path29.resolve(dir, name);
91974
+ if (!file2.startsWith(dir + path29.sep)) continue;
91975
+ fs26.mkdirSync(path29.dirname(file2), { recursive: true });
91976
+ fs26.writeFileSync(file2, text3);
91833
91977
  }
91834
91978
  return { ok: true, value: void 0 };
91835
91979
  }
@@ -91841,19 +91985,19 @@ async function builtWorkflow(ws, akb) {
91841
91985
  const dir = draftDir(ws);
91842
91986
  let source;
91843
91987
  try {
91844
- source = fs24.readFileSync(path27.join(dir, WORKFLOW_FILE), "utf8");
91988
+ source = fs26.readFileSync(path29.join(dir, WORKFLOW_FILE), "utf8");
91845
91989
  } catch {
91846
91990
  return fail(`workflows/${id}/${WORKFLOW_FILE} is missing.`);
91847
91991
  }
91848
- const read = parseWorkflowFile(id, source, `workflows/${id}/${WORKFLOW_FILE}`);
91849
- if ("problem" in read) return fail(read.problem);
91850
- const names2 = named(read.def);
91851
- fs24.rmSync(path27.join(dir, "agents"), { recursive: true, force: true });
91992
+ const read2 = parseWorkflowFile(id, source, `workflows/${id}/${WORKFLOW_FILE}`);
91993
+ if ("problem" in read2) return fail(read2.problem);
91994
+ const names2 = named(read2.def);
91995
+ fs26.rmSync(path29.join(dir, "agents"), { recursive: true, force: true });
91852
91996
  for (const name of names2) {
91853
- const from = path27.join(ws.board, "agents", name);
91854
- if (fs24.existsSync(from)) fs24.cpSync(from, path27.join(dir, "agents", name), { recursive: true });
91997
+ const from = path29.join(ws.board, "agents", name);
91998
+ if (fs26.existsSync(from)) fs26.cpSync(from, path29.join(dir, "agents", name), { recursive: true });
91855
91999
  }
91856
- const files = Object.fromEntries(filesUnder(dir).map((f2) => [f2, fs24.readFileSync(path27.join(dir, f2), "utf8")]));
92000
+ const files = Object.fromEntries(filesUnder(dir).map((f2) => [f2, fs26.readFileSync(path29.join(dir, f2), "utf8")]));
91857
92001
  const checked = checkWorkflowFiles(files);
91858
92002
  if (!checked.ok) return fail(`${checked.file} ${checked.reason}.`);
91859
92003
  const run2 = async (args) => answerOf2(await runAkb(akb, [...args, "--json", "--board", ws.board], { cwd: ws.cwd, board: ws.board }));
@@ -91888,7 +92032,7 @@ function spentBy(runs) {
91888
92032
  }
91889
92033
  function reviewOf2(file2) {
91890
92034
  try {
91891
- const meta = parseFrontmatter(fs25.readFileSync(file2, "utf8")).meta;
92035
+ const meta = parseFrontmatter(fs27.readFileSync(file2, "utf8")).meta;
91892
92036
  return meta ? reviewOf(meta) : null;
91893
92037
  } catch {
91894
92038
  return null;
@@ -91896,8 +92040,8 @@ function reviewOf2(file2) {
91896
92040
  }
91897
92041
  function mcpConfig(servers, file2) {
91898
92042
  if (!Object.keys(servers).length) return null;
91899
- fs25.mkdirSync(path28.dirname(file2), { recursive: true });
91900
- fs25.writeFileSync(file2, `${JSON.stringify({ mcpServers: servers }, null, 2)}
92043
+ fs27.mkdirSync(path30.dirname(file2), { recursive: true });
92044
+ fs27.writeFileSync(file2, `${JSON.stringify({ mcpServers: servers }, null, 2)}
91901
92045
  `);
91902
92046
  return file2;
91903
92047
  }
@@ -91918,21 +92062,25 @@ async function stopRuns(akb, ws, id, since, ms) {
91918
92062
  while (Date.now() < until) {
91919
92063
  const runs = answerOf2(await call(["run", "list", "--card", String(id), "--all", "--json"]))?.runs;
91920
92064
  const live = (runs ?? []).filter((r2) => r2.status === "running" && (r2.startedAt ?? 0) >= since);
91921
- if (!live.length) return;
92065
+ if (!runs) return false;
92066
+ if (!live.length) return true;
91922
92067
  for (const r2 of live) await call(["run", "stop", r2.sessionId]);
91923
92068
  await wait(250);
91924
92069
  }
92070
+ return false;
91925
92071
  }
91926
92072
  var working = /* @__PURE__ */ new Map();
91927
92073
  var workKey = (ws, id) => `${ws.board}#${id}`;
91928
92074
  async function stopLeftBehind(akb, ws, id, ms) {
91929
- if (!working.has(workKey(ws, id))) await stopRuns(akb, ws, id, 0, ms);
92075
+ if (!working.has(workKey(ws, id)) && !await stopRuns(akb, ws, id, 0, ms)) {
92076
+ throw new Error("\u672A\u80FD\u505C\u6B62\u4E0A\u6B21\u8FD0\u884C\uFF0C\u8BF7\u7B49\u5F85\u5176\u505C\u6B62\u540E\u7EED\u8DD1\u3002");
92077
+ }
91930
92078
  }
91931
92079
  function deliveryEnding(ws, id) {
91932
92080
  if (!id) return null;
91933
92081
  let held4;
91934
92082
  try {
91935
- held4 = JSON.parse(fs25.readFileSync(path28.join(ws.board, "deliveries", `${path28.basename(id)}.json`), "utf8"));
92083
+ held4 = JSON.parse(fs27.readFileSync(path30.join(ws.board, "deliveries", `${path30.basename(id)}.json`), "utf8"));
91936
92084
  } catch {
91937
92085
  return null;
91938
92086
  }
@@ -91944,16 +92092,16 @@ function deliveryEnding(ws, id) {
91944
92092
  return null;
91945
92093
  }
91946
92094
  function checkoutsOf(ws, id) {
91947
- const dir = path28.join(ws.board, "deliveries");
92095
+ const dir = path30.join(ws.board, "deliveries");
91948
92096
  let names2;
91949
92097
  try {
91950
- names2 = fs25.readdirSync(dir).filter((n) => n.endsWith(".json"));
92098
+ names2 = fs27.readdirSync(dir).filter((n) => n.endsWith(".json"));
91951
92099
  } catch {
91952
92100
  return [];
91953
92101
  }
91954
92102
  return names2.flatMap((n) => {
91955
92103
  try {
91956
- const held4 = JSON.parse(fs25.readFileSync(path28.join(dir, n), "utf8"));
92104
+ const held4 = JSON.parse(fs27.readFileSync(path30.join(dir, n), "utf8"));
91957
92105
  return held4.cardId === id && held4.worktree && held4.deliveryId ? [held4.deliveryId] : [];
91958
92106
  } catch {
91959
92107
  return [];
@@ -92012,33 +92160,29 @@ function boardAkb(job, ws, deps, io, task) {
92012
92160
  return ran;
92013
92161
  };
92014
92162
  }
92015
- function skillStale(dir, version) {
92016
- try {
92017
- const text3 = fs25.readFileSync(path28.join(dir, "SKILL.md"), "utf8");
92018
- return !fs25.lstatSync(dir).isSymbolicLink() && /<!-- ai4kanban (\S+) -->\s*$/.exec(text3)?.[1] !== version;
92019
- } catch {
92020
- return true;
92021
- }
92022
- }
92023
92163
  async function setUp(job, ws, deps, io) {
92024
92164
  const akb = boardAkb(job, ws, deps, io);
92025
92165
  const runtime = job.runtime;
92026
92166
  const missing = unavailable(runtime, await deps.runtimes());
92027
92167
  if (missing) return missing;
92028
- if (!fs25.existsSync(path28.join(ws.board, "config.md"))) {
92168
+ if (!fs27.existsSync(path30.join(ws.board, "config.md"))) {
92029
92169
  const init = await akb(["raw", "init"]);
92030
92170
  if (init.code !== 0) return refusal(init);
92031
92171
  }
92032
- if (SKILL_FOLDERS.some((f2) => skillStale(path28.join(ws.cwd, f2), deps.akb.version))) {
92033
- const skill = await runAkb(deps.akb, ["skill", "install", "--dir", ws.cwd], { cwd: ws.cwd, track: io.track });
92034
- if (skill.code !== 0) return refusal(skill);
92172
+ try {
92173
+ prepareKanbanSkill(ws.cwd);
92174
+ } catch (e2) {
92175
+ return e2 instanceof Error ? e2.message : String(e2);
92035
92176
  }
92177
+ const hook = installCommitHook(ws.cwd, ws.board);
92178
+ if (hook.note) io.show(`${hook.note}
92179
+ `);
92036
92180
  const pulled = await pull(ws, deps.machineId);
92037
92181
  if (!pulled.ok) return pulled.error;
92038
92182
  const used = await akb(["agent", "use", runtime]);
92039
92183
  if (used.code !== 0) return refusal(used);
92040
92184
  const servers = mcpServersOf(ws);
92041
- const mcpFile = path28.join(ws.board, ".sync", `${ws.task}.mcp.json`);
92185
+ const mcpFile = path30.join(ws.board, ".sync", `${ws.task}.mcp.json`);
92042
92186
  const takes = new Set(settingKeys(runtime));
92043
92187
  const given = job.settings ?? {};
92044
92188
  const values = { ...given, model: job.model ?? "" };
@@ -92081,13 +92225,13 @@ async function runReview(job, ws, tasks, deps, io) {
92081
92225
  async function reviewRejections(job, ws, deps, io) {
92082
92226
  const workspace = workspaceOf(ws);
92083
92227
  if (!workspace) return { runs: [] };
92084
- const read = await deps.api.readRejections(workspace);
92085
- if (!read.ok) return { runs: [], failure: read.error };
92086
- if (!read.value.tasks.length && !read.value.triage.length) return { runs: [] };
92228
+ const read2 = await deps.api.readRejections(workspace);
92229
+ if (!read2.ok) return { runs: [], failure: read2.error };
92230
+ if (!read2.value.tasks.length && !read2.value.triage.length) return { runs: [] };
92087
92231
  const since = Date.now();
92088
92232
  const akb = boardAkb(job, ws, deps, io);
92089
92233
  return withBoard(ws, async (push2) => {
92090
- const laid = layOut(ws.board, read.value);
92234
+ const laid = layOut(ws.board, read2.value);
92091
92235
  const ran = await akb(["review-dismissals", "--follow", "--events", "--json"], true);
92092
92236
  clearLaid(ws.board);
92093
92237
  resetSorted(ws);
@@ -92106,12 +92250,12 @@ async function learnRejections(job, ws, deps, io) {
92106
92250
  return runs;
92107
92251
  }
92108
92252
  async function scheduledEnv(ws, deps) {
92109
- const read = await deps.api.readAgents(deps.machineId, ws.project);
92110
- if (!read.ok) {
92111
- console.error(`runner: scheduled agents not read: ${read.error}`);
92253
+ const read2 = await deps.api.readAgents(deps.machineId, ws.project);
92254
+ if (!read2.ok) {
92255
+ console.error(`runner: scheduled agents not read: ${read2.error}`);
92112
92256
  return {};
92113
92257
  }
92114
- const names2 = read.value.agents.filter((a3) => a3.workflow).map((a3) => a3.name);
92258
+ const names2 = read2.value.agents.filter((a3) => a3.workflow).map((a3) => a3.name);
92115
92259
  return { [SCHEDULED_AGENTS_ENV]: [...new Set(names2)].join(",") };
92116
92260
  }
92117
92261
  async function runAgent(job, ws, deps, io) {
@@ -92138,19 +92282,19 @@ async function runAgent(job, ws, deps, io) {
92138
92282
  }
92139
92283
  function writeTranscript(job, dir) {
92140
92284
  if (!job.transcript) return "";
92141
- const file2 = path28.join(dir, "discussion.md");
92142
- fs25.mkdirSync(dir, { recursive: true });
92143
- fs25.writeFileSync(file2, `${job.transcript}
92285
+ const file2 = path30.join(dir, "discussion.md");
92286
+ fs27.mkdirSync(dir, { recursive: true });
92287
+ fs27.writeFileSync(file2, `${job.transcript}
92144
92288
  `);
92145
92289
  return file2;
92146
92290
  }
92147
92291
  function pictures(job, ws, id) {
92148
92292
  const dir = cardAssetsDir(ws, id);
92149
92293
  if (!job.attachments.length || !dir) return "";
92150
- fs25.mkdirSync(dir, { recursive: true });
92294
+ fs27.mkdirSync(dir, { recursive: true });
92151
92295
  return job.attachments.map((a3, i) => {
92152
- const file2 = `${i + 1}-${path28.basename(a3.name).replace(/[^\w.-]+/g, "-")}`;
92153
- fs25.writeFileSync(path28.join(dir, file2), Buffer.from(a3.content, "base64"));
92296
+ const file2 = `${i + 1}-${path30.basename(a3.name).replace(/[^\w.-]+/g, "-")}`;
92297
+ fs27.writeFileSync(path30.join(dir, file2), Buffer.from(a3.content, "base64"));
92154
92298
  return `
92155
92299
  <Asset src=".assets/${id}/${file2}" label="${a3.name.replace(/["<>]/g, "") || file2}" />
92156
92300
  `;
@@ -92158,7 +92302,7 @@ function pictures(job, ws, id) {
92158
92302
  }
92159
92303
  function cardFlags(ws, fields) {
92160
92304
  if (!fields) return [];
92161
- const open = (keys) => (keys ?? []).map((k) => Number(/(\d+)$/.exec(k)?.[1])).filter((n) => n > 0 && n !== ws.number && findCard(ws.board, n)?.startsWith(path28.join(ws.board, "todo") + path28.sep));
92305
+ const open = (keys) => (keys ?? []).map((k) => Number(/(\d+)$/.exec(k)?.[1])).filter((n) => n > 0 && n !== ws.number && findCard(ws.board, n)?.startsWith(path30.join(ws.board, "todo") + path30.sep));
92162
92306
  const lists = [["--modules", fields.modules ?? []], ["--related", open(fields.related)], ["--blocked-by", open(fields.blocked_by)]];
92163
92307
  return [
92164
92308
  ...fields.priority ? ["--priority", fields.priority] : [],
@@ -92192,10 +92336,10 @@ async function runFlow(job, ws, deps, io) {
92192
92336
  const placed = await placeDraft(ws, deps.api);
92193
92337
  if (!placed.ok) return fail(placed.error);
92194
92338
  }
92195
- const body = path28.join(ws.board, ".sync", `${ws.task}.request.md`);
92196
- fs25.mkdirSync(path28.dirname(body), { recursive: true });
92339
+ const body = path30.join(ws.board, ".sync", `${ws.task}.request.md`);
92340
+ fs27.mkdirSync(path30.dirname(body), { recursive: true });
92197
92341
  if (!ws.number) return fail("This task has no number yet.");
92198
- fs25.writeFileSync(body, `${said.request || title}
92342
+ fs27.writeFileSync(body, `${said.request || title}
92199
92343
  ${isBuilder(ws) ? `
92200
92344
  ${draftLine(ws)}
92201
92345
  ` : ""}${pictures(job, ws, ws.number)}`);
@@ -92213,7 +92357,7 @@ ${draftLine(ws)}
92213
92357
  ...cardFlags(ws, flow.metadata),
92214
92358
  "--json"
92215
92359
  ]));
92216
- fs25.rmSync(body, { force: true });
92360
+ fs27.rmSync(body, { force: true });
92217
92361
  if (!created.ok) return fail(created.error);
92218
92362
  id = created.value;
92219
92363
  }
@@ -92223,19 +92367,27 @@ ${draftLine(ws)}
92223
92367
  const held4 = working.get(key) ?? 0;
92224
92368
  working.set(key, held4 + 1);
92225
92369
  try {
92226
- if (!held4) await stopRuns(deps.akb, ws, card, 0, deps.stopMs);
92370
+ if (!held4 && !await stopRuns(deps.akb, ws, card, 0, deps.stopMs)) {
92371
+ return fail("\u672A\u80FD\u505C\u6B62\u4E0A\u6B21\u8FD0\u884C\uFF0C\u8BF7\u7B49\u5F85\u5176\u505C\u6B62\u540E\u7EED\u8DD1\u3002");
92372
+ }
92227
92373
  if (io.lost()) return fail("");
92228
92374
  return await workOn(card);
92229
92375
  } finally {
92230
- fs25.rmSync(path28.join(ws.board, ".sync", `${ws.task}.discussion`), { recursive: true, force: true });
92376
+ fs27.rmSync(path30.join(ws.board, ".sync", `${ws.task}.discussion`), { recursive: true, force: true });
92231
92377
  const left = working.get(key) - 1;
92232
92378
  if (left) working.set(key, left);
92233
92379
  else working.delete(key);
92234
92380
  }
92235
92381
  async function workOn(id2) {
92236
- io.onStop(() => stopRuns(deps.akb, ws, id2, since, deps.stopMs));
92382
+ io.onStop(async () => {
92383
+ await stopRuns(deps.akb, ws, id2, since, deps.stopMs);
92384
+ });
92237
92385
  const verb = flow.verb === "create" ? flow.skip_plan ? "implement" : "refine" : flow.verb;
92238
92386
  const text3 = flow.verb === "create" ? "" : (flow.text ?? "").trim();
92387
+ if (flow.resume && verb === "refine") {
92388
+ const review2 = reviewOf2(cardFile(ws));
92389
+ if (review2) return { ok: true, report: { card: id2, ...review2 === true ? {} : { review: review2 } } };
92390
+ }
92239
92391
  if (verb === "revise" && !text3) return fail("Say what to change.");
92240
92392
  let note = verb === "resolve" || verb === "revise" ? text3 : "";
92241
92393
  if (verb === "implement" && flow.resume) {
@@ -92281,7 +92433,7 @@ ${draftLine(ws)}
92281
92433
  }
92282
92434
  function carryArgs(verb) {
92283
92435
  if (!["refine", "resolve", "revise", "implement"].includes(verb)) return [];
92284
- const transcript = writeTranscript(job, path28.join(ws.board, ".sync", `${ws.task}.discussion`));
92436
+ const transcript = writeTranscript(job, path30.join(ws.board, ".sync", `${ws.task}.discussion`));
92285
92437
  return [
92286
92438
  ...job.resume ? ["--session", job.resume, ...job.fork ? ["--fork"] : []] : [],
92287
92439
  ...transcript ? ["--transcript", transcript] : []
@@ -92289,18 +92441,55 @@ ${draftLine(ws)}
92289
92441
  }
92290
92442
  }
92291
92443
 
92444
+ // src/recovery.ts
92445
+ import fs28 from "node:fs";
92446
+ import path31 from "node:path";
92447
+ var PREPARE_REASON = "Runner update prepare.";
92448
+ var UPDATE_REASON = "Runner update checkpoint.";
92449
+ var UNCERTAIN = "\u66F4\u65B0\u4E2D\u65AD\u65F6\u6709\u64CD\u4F5C\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4\uFF0C\u8BF7\u68C0\u67E5\u5DF2\u6709\u7ED3\u679C\u540E\u518D\u7EED\u8DD1\u3002";
92450
+ var fileOf = (id) => path31.join(runnerHome(), "checkpoints", `${encodeURIComponent(id)}.json`);
92451
+ function readCheckpoint(id) {
92452
+ try {
92453
+ const held4 = JSON.parse(fs28.readFileSync(fileOf(id), "utf8"));
92454
+ if (!held4 || !Array.isArray(held4.pending) || !held4.pending.every((id2) => typeof id2 === "string")) throw new Error("\u8FDB\u5EA6\u683C\u5F0F\u9519\u8BEF");
92455
+ return held4;
92456
+ } catch (e2) {
92457
+ if (e2.code === "ENOENT") return null;
92458
+ return { updating: true, started: true, pending: ["unknown"] };
92459
+ }
92460
+ }
92461
+ function saveCheckpoint(id, checkpoint) {
92462
+ const file2 = fileOf(id);
92463
+ fs28.mkdirSync(path31.dirname(file2), { recursive: true, mode: 448 });
92464
+ fs28.writeFileSync(`${file2}.tmp`, JSON.stringify(checkpoint), { mode: 384 });
92465
+ fs28.renameSync(`${file2}.tmp`, file2);
92466
+ }
92467
+ function clearCheckpoint(id) {
92468
+ fs28.rmSync(fileOf(id), { force: true });
92469
+ }
92470
+ function checkpointEvent(checkpoint, event2) {
92471
+ if (event2.kind === "tool_call") {
92472
+ const { toolCallId, status: status2, kind } = event2.data;
92473
+ if (["completed", "failed"].includes(status2)) checkpoint.pending = checkpoint.pending.filter((id) => id !== toolCallId);
92474
+ if (!["read", "search", "fetch"].includes(kind) && !["completed", "failed"].includes(status2) && !checkpoint.pending.includes(toolCallId)) checkpoint.pending.push(toolCallId);
92475
+ }
92476
+ if (event2.kind === "tool_call_update" && ["completed", "failed"].includes(event2.data.status)) {
92477
+ checkpoint.pending = checkpoint.pending.filter((id) => id !== event2.data.toolCallId);
92478
+ }
92479
+ }
92480
+
92292
92481
  // src/lock.ts
92293
92482
  import crypto4 from "node:crypto";
92294
- import fs26 from "node:fs";
92483
+ import fs29 from "node:fs";
92295
92484
  import net from "node:net";
92296
- import path29 from "node:path";
92485
+ import path32 from "node:path";
92297
92486
  var RETRY_MS = 5e3;
92298
92487
  var KIND_MS = 1e3;
92299
92488
  var HOLDERS = ["claude-code", "codex", "terminal"];
92300
92489
  function lockPath() {
92301
92490
  const home4 = runnerHome();
92302
92491
  if (process.platform === "win32") return `\\\\.\\pipe\\wildcrane-${crypto4.createHash("sha256").update(home4).digest("hex").slice(0, 16)}`;
92303
- return path29.join(home4, "runner.sock");
92492
+ return path32.join(home4, "runner.sock");
92304
92493
  }
92305
92494
  function holdMachine(kind, onHeld, onWaiting) {
92306
92495
  const where = lockPath();
@@ -92315,7 +92504,7 @@ function holdMachine(kind, onHeld, onWaiting) {
92315
92504
  const attempt = () => {
92316
92505
  timer = null;
92317
92506
  if (closed) return;
92318
- if (process.platform !== "win32") fs26.mkdirSync(path29.dirname(where), { recursive: true, mode: 448 });
92507
+ if (process.platform !== "win32") fs29.mkdirSync(path32.dirname(where), { recursive: true, mode: 448 });
92319
92508
  const s = net.createServer((peer) => {
92320
92509
  peers.add(peer);
92321
92510
  peer.on("error", () => {
@@ -92363,7 +92552,7 @@ function holdMachine(kind, onHeld, onWaiting) {
92363
92552
  later(0);
92364
92553
  });
92365
92554
  removeIfStill.once("error", () => {
92366
- fs26.rmSync(where, { force: true });
92555
+ fs29.rmSync(where, { force: true });
92367
92556
  later(50 + Math.random() * 200);
92368
92557
  });
92369
92558
  return;
@@ -92393,31 +92582,31 @@ function holdMachine(kind, onHeld, onWaiting) {
92393
92582
 
92394
92583
  // src/jobs.ts
92395
92584
  import { spawn as spawn4 } from "node:child_process";
92396
- import fs29 from "node:fs";
92397
- import path32 from "node:path";
92585
+ import fs32 from "node:fs";
92586
+ import path35 from "node:path";
92398
92587
 
92399
92588
  // ../cli/src/lib/agent/catalog.ts
92400
- import fs27 from "node:fs";
92401
- import path30 from "node:path";
92589
+ import fs30 from "node:fs";
92590
+ import path33 from "node:path";
92402
92591
  var CATALOGUE = "https://models.dev/api.json";
92403
92592
  var FRESH_FOR_MS = 24 * 60 * 6e4;
92404
92593
  var ANSWER_BY_MS = 2e4;
92405
92594
  function cacheFile() {
92406
- return path30.join(machineHome(), "models-dev.json");
92595
+ return path33.join(machineHome(), "models-dev.json");
92407
92596
  }
92408
92597
  var held2;
92409
92598
  function readCache() {
92410
92599
  const file2 = cacheFile();
92411
92600
  let stamp2;
92412
92601
  try {
92413
- const stat = fs27.statSync(file2);
92602
+ const stat = fs30.statSync(file2);
92414
92603
  stamp2 = `${stat.mtimeMs}:${stat.size}`;
92415
92604
  } catch {
92416
92605
  return void 0;
92417
92606
  }
92418
92607
  if (held2?.stamp === stamp2) return held2.cached;
92419
92608
  try {
92420
- const data = JSON.parse(fs27.readFileSync(file2, "utf8"));
92609
+ const data = JSON.parse(fs30.readFileSync(file2, "utf8"));
92421
92610
  if (!data || typeof data.limits !== "object" || !data.limits) return void 0;
92422
92611
  const cached2 = {
92423
92612
  fetchedAt: typeof data.fetchedAt === "number" ? data.fetchedAt : 0,
@@ -92456,8 +92645,8 @@ function refreshCatalog() {
92456
92645
  const limits = limitsIn(await answer.json());
92457
92646
  if (Object.keys(limits).length === 0) return;
92458
92647
  const file2 = cacheFile();
92459
- fs27.mkdirSync(path30.dirname(file2), { recursive: true });
92460
- fs27.writeFileSync(file2, JSON.stringify({ fetchedAt: Date.now(), limits }));
92648
+ fs30.mkdirSync(path33.dirname(file2), { recursive: true });
92649
+ fs30.writeFileSync(file2, JSON.stringify({ fetchedAt: Date.now(), limits }));
92461
92650
  } catch {
92462
92651
  }
92463
92652
  })();
@@ -92501,9 +92690,9 @@ function contextLimit(harness, model) {
92501
92690
  }
92502
92691
 
92503
92692
  // src/ideas.ts
92504
- import fs28 from "node:fs";
92505
- import path31 from "node:path";
92506
- var ideasFileOf = (job) => path31.join(runnerHome(), "ideas", `${job.id}.json`);
92693
+ import fs31 from "node:fs";
92694
+ import path34 from "node:path";
92695
+ var ideasFileOf = (job) => path34.join(runnerHome(), "ideas", `${job.id}.json`);
92507
92696
  async function writeIdeas(job, list) {
92508
92697
  const workflows = [];
92509
92698
  let after = null;
@@ -92514,18 +92703,18 @@ async function writeIdeas(job, list) {
92514
92703
  after = page.value.next;
92515
92704
  } while (after);
92516
92705
  const file2 = ideasFileOf(job);
92517
- fs28.mkdirSync(path31.dirname(file2), { recursive: true });
92518
- fs28.writeFileSync(file2, `${JSON.stringify({ workflows, ideas: job.discussion.ideas }, null, 2)}
92706
+ fs31.mkdirSync(path34.dirname(file2), { recursive: true });
92707
+ fs31.writeFileSync(file2, `${JSON.stringify({ workflows, ideas: job.discussion.ideas }, null, 2)}
92519
92708
  `);
92520
92709
  return { file: file2 };
92521
92710
  }
92522
92711
  function readIdeas(file2) {
92523
92712
  try {
92524
- return JSON.parse(fs28.readFileSync(file2, "utf8")).ideas;
92713
+ return JSON.parse(fs31.readFileSync(file2, "utf8")).ideas;
92525
92714
  } catch {
92526
92715
  return void 0;
92527
92716
  } finally {
92528
- fs28.rmSync(file2, { force: true });
92717
+ fs31.rmSync(file2, { force: true });
92529
92718
  }
92530
92719
  }
92531
92720
 
@@ -92561,32 +92750,32 @@ var defaultDeps = (machineId2) => ({
92561
92750
  akb: currentAkb,
92562
92751
  runtimes: detectRuntimes
92563
92752
  });
92564
- var ownFolder = () => path32.join(runnerHome(), "work");
92753
+ var ownFolder = () => path35.join(runnerHome(), "work");
92565
92754
  function folderFor(job) {
92566
92755
  if (!job.projectDir) {
92567
- const cwd = path32.join(ownFolder(), job.id);
92568
- fs29.mkdirSync(cwd, { recursive: true });
92756
+ const cwd = path35.join(ownFolder(), job.id);
92757
+ fs32.mkdirSync(cwd, { recursive: true });
92569
92758
  return { cwd };
92570
92759
  }
92571
92760
  const real = realpath4(job.projectDir);
92572
- if (real && allowedProjects().some((root) => real === root || real.startsWith(root + path32.sep))) return { cwd: real };
92761
+ if (real && allowedProjects().some((root) => real === root || real.startsWith(root + path35.sep))) return { cwd: real };
92573
92762
  return { refused: `This Runner is not allowed to work in ${job.projectDir}.` };
92574
92763
  }
92575
92764
  function realpath4(p2) {
92576
92765
  try {
92577
- return fs29.realpathSync(p2);
92766
+ return fs32.realpathSync(p2);
92578
92767
  } catch {
92579
92768
  return null;
92580
92769
  }
92581
92770
  }
92582
- var attachmentsOf = (job) => path32.join(runnerHome(), "attachments", job.id);
92771
+ var attachmentsOf = (job) => path35.join(runnerHome(), "attachments", job.id);
92583
92772
  function writeAttachments(job) {
92584
92773
  if (!job.attachments.length) return "";
92585
92774
  const dir = attachmentsOf(job);
92586
- fs29.mkdirSync(dir, { recursive: true });
92775
+ fs32.mkdirSync(dir, { recursive: true });
92587
92776
  const files = job.attachments.map((a3) => {
92588
- const file2 = path32.join(dir, path32.basename(a3.name));
92589
- fs29.writeFileSync(file2, Buffer.from(a3.content, "base64"));
92777
+ const file2 = path35.join(dir, path35.basename(a3.name));
92778
+ fs32.writeFileSync(file2, Buffer.from(a3.content, "base64"));
92590
92779
  return file2;
92591
92780
  });
92592
92781
  return `
@@ -92615,8 +92804,10 @@ function toWire(events, first) {
92615
92804
  endLog();
92616
92805
  return out;
92617
92806
  }
92807
+ var leaseNow = () => ({ at: Date.now(), monotonic: performance.now() });
92618
92808
  function streamOut(deps, id, lease) {
92619
92809
  const wire = [];
92810
+ let firstSeq = null;
92620
92811
  let pending = [];
92621
92812
  let size = 0;
92622
92813
  let lost = false;
@@ -92628,10 +92819,16 @@ function streamOut(deps, id, lease) {
92628
92819
  };
92629
92820
  const stored = new Promise((resolve2) => ended2 = resolve2);
92630
92821
  const children = /* @__PURE__ */ new Set();
92822
+ const killed = /* @__PURE__ */ new Set();
92631
92823
  const kill = (child) => {
92632
92824
  if (!child.pid) return;
92633
- child.kill("SIGTERM");
92634
- setTimeout(() => child.kill("SIGKILL"), KILL_GRACE_MS).unref();
92825
+ const exited = new Promise((resolve2) => child.once("close", () => resolve2()));
92826
+ killed.add(exited);
92827
+ void exited.then(() => killed.delete(exited));
92828
+ signalTree(child, "SIGTERM");
92829
+ const timer = setTimeout(() => signalTree(child, "SIGKILL"), KILL_GRACE_MS);
92830
+ timer.unref();
92831
+ void exited.then(() => clearTimeout(timer));
92635
92832
  };
92636
92833
  let halt = null;
92637
92834
  let stopping = Promise.resolve();
@@ -92650,11 +92847,18 @@ function streamOut(deps, id, lease) {
92650
92847
  const loseLease = () => {
92651
92848
  if (lost) return stopping;
92652
92849
  lost = true;
92850
+ lease.lost = true;
92653
92851
  for (const child of children) kill(child);
92654
- if (halt) stopping = halt();
92852
+ stopping = Promise.all([halt?.(), ...killed]).then(() => {
92853
+ });
92655
92854
  return stopping;
92656
92855
  };
92856
+ const valid = () => {
92857
+ if (!held3(deps, lease)) void loseLease();
92858
+ return !lost;
92859
+ };
92657
92860
  const send3 = () => {
92861
+ if (!valid()) return;
92658
92862
  const ws = log.ws;
92659
92863
  if (!ws || ws.readyState !== WebSocket.OPEN || log.after === null) return;
92660
92864
  const after = log.after;
@@ -92678,15 +92882,17 @@ function streamOut(deps, id, lease) {
92678
92882
  };
92679
92883
  const flush = () => {
92680
92884
  flushedAt = Date.now();
92681
- if (pending.length) wire.push(...toWire(pending, wire.length));
92682
- pending = [];
92885
+ if (firstSeq !== null && pending.length) {
92886
+ wire.push(...toWire(pending, firstSeq + wire.length));
92887
+ pending = [];
92888
+ }
92683
92889
  size = 0;
92684
92890
  send3();
92685
92891
  };
92686
92892
  const connect2 = async () => {
92687
92893
  log.retry = void 0;
92688
92894
  const ws = await deps.api.openLog(deps.machineId, id).catch(() => null);
92689
- if (closed) return ws?.close();
92895
+ if (closed || !valid()) return ws?.close();
92690
92896
  if (!ws) return reconnect();
92691
92897
  log.ws = ws;
92692
92898
  log.heard = Date.now();
@@ -92701,6 +92907,7 @@ function streamOut(deps, id, lease) {
92701
92907
  if (said.type === "hello") {
92702
92908
  log.tries = 0;
92703
92909
  log.after = Number.isInteger(said.after) ? said.after : -1;
92910
+ firstSeq ??= log.after + 1;
92704
92911
  log.watched = said.watched === true;
92705
92912
  flush();
92706
92913
  } else if (said.type === "watched") {
@@ -92725,6 +92932,7 @@ function streamOut(deps, id, lease) {
92725
92932
  };
92726
92933
  void connect2();
92727
92934
  const event2 = (e2) => {
92935
+ if (!valid()) return;
92728
92936
  if (e2.kind === "message") messages.push(e2.data.text);
92729
92937
  pending.push(e2);
92730
92938
  size += JSON.stringify(e2.data).length;
@@ -92740,11 +92948,19 @@ function streamOut(deps, id, lease) {
92740
92948
  drop(ws);
92741
92949
  ws.close();
92742
92950
  }, deps.logPingMs);
92951
+ const expiry = setInterval(valid, Math.min(1e3, deps.leaseMs));
92952
+ let renewing = false;
92743
92953
  const renewer = setInterval(async () => {
92744
- const renewed = await deps.api.renewJob(deps.machineId, id);
92954
+ if (renewing || !valid()) return;
92955
+ renewing = true;
92956
+ const requestedAt = leaseNow();
92957
+ const renewed = await deps.api.renewJob(deps.machineId, id).catch(() => null).finally(() => {
92958
+ renewing = false;
92959
+ });
92960
+ if (!valid() || closed || !renewed) return;
92745
92961
  if (renewed.ok && !renewed.value.renewed) return void loseLease();
92746
92962
  if (!renewed.ok) return;
92747
- lease.at = Date.now();
92963
+ Object.assign(lease, requestedAt);
92748
92964
  if (renewed.value.stop) ask();
92749
92965
  if (log.ws?.readyState === WebSocket.OPEN) log.ws.send(JSON.stringify({ type: "alive" }));
92750
92966
  }, deps.renewMs);
@@ -92754,7 +92970,7 @@ function streamOut(deps, id, lease) {
92754
92970
  if (text3) event2({ kind: "log", data: { text: text3 } });
92755
92971
  },
92756
92972
  adopt: (child) => {
92757
- if (lost || asked) return kill(child);
92973
+ if (!valid() || asked) return kill(child);
92758
92974
  children.add(child);
92759
92975
  child.on("close", () => children.delete(child));
92760
92976
  },
@@ -92765,7 +92981,7 @@ function streamOut(deps, id, lease) {
92765
92981
  /** What stopping the job's board runs is still doing. */
92766
92982
  halted: () => stopping,
92767
92983
  stop: loseLease,
92768
- lost: () => lost,
92984
+ lost: () => !valid(),
92769
92985
  asked: () => asked,
92770
92986
  whenAsked: askedOnce,
92771
92987
  /** The agent's messages so far. */
@@ -92775,6 +92991,7 @@ function streamOut(deps, id, lease) {
92775
92991
  clearInterval(flusher);
92776
92992
  clearInterval(pinger);
92777
92993
  clearInterval(renewer);
92994
+ clearInterval(expiry);
92778
92995
  ending = !lost;
92779
92996
  flush();
92780
92997
  if (ending) {
@@ -92787,27 +93004,41 @@ function streamOut(deps, id, lease) {
92787
93004
  const ws = log.ws;
92788
93005
  log.ws = null;
92789
93006
  ws?.close();
93007
+ await stopping;
92790
93008
  }
92791
93009
  };
92792
93010
  }
92793
93011
  async function runJob(id, deps, track = () => {
92794
- }) {
93012
+ }, stopped2 = () => false) {
93013
+ const lease = leaseNow();
92795
93014
  const claim = await deps.api.claimJob(deps.machineId, id);
92796
- if (!claim.ok || !claim.value.claimed) return;
93015
+ if (!claim.ok || !claim.value.claimed || stopped2() || !held3(deps, lease)) return;
92797
93016
  const job = claim.value.job;
92798
- const held4 = [];
93017
+ const releases = [];
92799
93018
  try {
92800
- await runClaimed(job, { ...deps, akb: deps.akb() }, track, (dir) => held4.push(hold(dir)));
93019
+ await runClaimed(job, { ...deps, akb: deps.akb() }, track, (dir) => releases.push(hold(dir)), lease);
92801
93020
  } finally {
92802
- for (const release2 of held4) release2();
92803
- fs29.rmSync(attachmentsOf(job), { recursive: true, force: true });
93021
+ for (const release2 of releases) release2();
93022
+ fs32.rmSync(attachmentsOf(job), { recursive: true, force: true });
92804
93023
  }
92805
93024
  }
92806
- async function runClaimed(job, deps, track, keep2) {
93025
+ async function runClaimed(job, deps, track, keep2, lease) {
92807
93026
  const id = job.id;
93027
+ const checkpoint = readCheckpoint(id) ?? { pending: [] };
93028
+ const recovering = checkpoint.updating === true;
93029
+ const persist = () => {
93030
+ checkpoint.updating ||= readCheckpoint(id)?.updating;
93031
+ saveCheckpoint(id, checkpoint);
93032
+ };
93033
+ if (recovering && !checkpoint.completed && (checkpoint.pending.length || checkpoint.opaque || !job.flow && checkpoint.started && !checkpoint.session)) {
93034
+ await deps.api.finishJob(deps.machineId, id, "failed", UNCERTAIN);
93035
+ return;
93036
+ }
93037
+ if (recovering && checkpoint.session) job = { ...job, resume: checkpoint.session, fork: false };
93038
+ if (!recovering) persist();
92808
93039
  if (job.secret) return runSecret(job, deps);
92809
93040
  if (job.test) return runTest(job, deps);
92810
- if (job.agent) return runAgentJob(job, deps, track, keep2);
93041
+ if (job.agent) return runAgentJob(job, deps, track, keep2, lease, checkpoint, persist);
92811
93042
  const task = job.task ?? job.review?.tasks[0] ?? null;
92812
93043
  const folder = task && !job.projectDir ? null : folderFor(job);
92813
93044
  if (folder && "refused" in folder) {
@@ -92818,6 +93049,7 @@ async function runClaimed(job, deps, track, keep2) {
92818
93049
  let cwd = folder?.cwd ?? "";
92819
93050
  let run2 = null;
92820
93051
  let fresh = null;
93052
+ let missingSessionOnly = false;
92821
93053
  let ideas = null;
92822
93054
  let discussed;
92823
93055
  try {
@@ -92830,6 +93062,11 @@ async function runClaimed(job, deps, track, keep2) {
92830
93062
  if (!pulled.ok) throw new Error(pulled.error);
92831
93063
  }
92832
93064
  }
93065
+ if (checkpoint.completed) {
93066
+ const done = checkpoint.completed;
93067
+ if (done.outcome === "failed" || !ws) return finish(deps, id, lease, done.outcome, done.reason, done.report);
93068
+ return sendBack(deps, id, lease, ws, done.report, () => keepChat(job, done.report.reply));
93069
+ }
92833
93070
  if (job.flow && !ws) throw new Error("This job names no task.");
92834
93071
  if (job.discussion && job.projectDir && folder) {
92835
93072
  const board = openDiscussionFolder(job, folder.cwd);
@@ -92839,7 +93076,7 @@ async function runClaimed(job, deps, track, keep2) {
92839
93076
  discussed = board.board;
92840
93077
  }
92841
93078
  if (job.discussion) {
92842
- const wrote = await writeIdeas({ ...job, discussion: job.discussion }, deps.api.listWorkflows);
93079
+ const wrote = recovering && fs32.existsSync(ideasFileOf(job)) ? { file: ideasFileOf(job) } : await writeIdeas({ ...job, discussion: job.discussion }, deps.api.listWorkflows);
92843
93080
  if ("error" in wrote) throw new Error(wrote.error);
92844
93081
  ideas = wrote.file;
92845
93082
  }
@@ -92852,11 +93089,12 @@ async function runClaimed(job, deps, track, keep2) {
92852
93089
  This task came out of a discussion. Read it for what the card leaves out: ${file2}` : "";
92853
93090
  const promptOf = (said2) => {
92854
93091
  const lines = (head2 + said2).trim();
93092
+ const prompt = recovering && checkpoint.started ? "Runner \u66F4\u65B0\u540E\u7EE7\u7EED\u4E4B\u524D\u4E2D\u65AD\u7684\u4EFB\u52A1\u3002\u5148\u6838\u5BF9\u5DF2\u6709\u8FDB\u5EA6\u548C\u7ED3\u679C\uFF0C\u4FDD\u7559\u5B8C\u6210\u7684\u5DE5\u4F5C\uFF0C\u4E0D\u8981\u91CD\u590D\u5DF2\u7ECF\u6267\u884C\u7684\u64CD\u4F5C\u3002" : job.prompt;
92855
93093
  return lines ? `${lines}
92856
93094
 
92857
93095
  ---
92858
93096
 
92859
- ${job.prompt}` : job.prompt;
93097
+ ${prompt}` : prompt;
92860
93098
  };
92861
93099
  const planned = (resume, fork, said2 = "") => {
92862
93100
  let p2 = deps.plan(job.runtime, promptOf(said2), cwd, resume, job.model, settingsOf(job), fork, job.languageLine ?? "");
@@ -92870,18 +93108,42 @@ ${job.prompt}` : job.prompt;
92870
93108
  };
92871
93109
  const carried = !!job.resume && (!job.fork || forks(job.runtime));
92872
93110
  run2 = carried ? planned(job.resume, !!job.fork) : planned(null, false, transcript);
92873
- if (carried && transcript) fresh = () => planned(null, false, transcript);
93111
+ if (!recovering && carried && transcript) fresh = () => planned(null, false, transcript);
93112
+ if (!recovering && carried && (job.chat || job.discussion)) {
93113
+ fresh = () => planned(null, false, transcript);
93114
+ missingSessionOnly = true;
93115
+ }
92874
93116
  }
92875
93117
  } catch (e2) {
92876
93118
  await deps.api.finishJob(deps.machineId, id, "failed", e2 instanceof Error ? e2.message : String(e2));
92877
93119
  return;
92878
93120
  }
92879
- const lease = { at: Date.now() };
93121
+ if (!held3(deps, lease)) return;
92880
93122
  const stream = streamOut(deps, id, lease);
92881
- const told = (said2) => ideas ? { ...said2, ideas: readIdeas(ideas) } : said2;
93123
+ const remember = (event2) => {
93124
+ if (stream.lost()) return;
93125
+ checkpointEvent(checkpoint, event2);
93126
+ const session = run2?.session();
93127
+ if (session) checkpoint.session = session;
93128
+ persist();
93129
+ stream.event(event2);
93130
+ };
93131
+ const complete = (outcome, report2, reason) => {
93132
+ if (stream.lost()) return;
93133
+ checkpoint.completed = { outcome, report: report2, reason };
93134
+ checkpoint.session = report2.session ?? checkpoint.session;
93135
+ persist();
93136
+ };
93137
+ let savedIdeas;
93138
+ const told = (said2) => {
93139
+ if (ideas) savedIdeas ??= readIdeas(ideas);
93140
+ return savedIdeas ? { ...said2, ideas: savedIdeas } : said2;
93141
+ };
92882
93142
  track(stream.stop);
92883
- const io = { show: stream.out, event: stream.event, track: stream.adopt, onStop: stream.onStop, lost: stream.lost };
93143
+ const io = { show: stream.out, event: remember, track: stream.adopt, onStop: stream.onStop, lost: stream.lost };
92884
93144
  if (job.review) {
93145
+ checkpoint.started = true;
93146
+ persist();
92885
93147
  for (const task2 of job.review.tasks) {
92886
93148
  const chat = await deps.api.readChat(task2);
92887
93149
  if (chat.ok) keepCloudChat(task2, chat.value.messages);
@@ -92896,13 +93158,17 @@ ${job.prompt}` : job.prompt;
92896
93158
  const marks = reviewMarks(tasks);
92897
93159
  const refs = tasks.map((c2) => `${c2.task}:${c2.number}`);
92898
93160
  const ended3 = refs.length ? await runReview(job, ws, refs, deps, io) : { ok: true, report: {} };
93161
+ if (ended3.ok) complete("done", ended3.report);
92899
93162
  await stream.end();
92900
93163
  if (stream.lost()) return;
92901
93164
  if (!ended3.ok) return finish(deps, id, lease, "failed", ended3.reason);
92902
93165
  return sendBack(deps, id, lease, ws, ended3.report, () => markReviewed2(marks));
92903
93166
  }
92904
93167
  if (!run2) {
93168
+ checkpoint.started = true;
93169
+ persist();
92905
93170
  const ended3 = await runFlow(job, ws, deps, io);
93171
+ if (ended3.ok) complete("done", ended3.report);
92906
93172
  const stopped2 = !ended3.ok && (stream.asked() || ended3.stopped === true);
92907
93173
  if (stopped2 && stream.asked()) await stream.halted();
92908
93174
  await stream.end();
@@ -92911,10 +93177,14 @@ ${job.prompt}` : job.prompt;
92911
93177
  if (!ended3.ok) return finish(deps, id, lease, "failed", ended3.reason);
92912
93178
  return sendBack(deps, id, lease, ws, ended3.report, () => keepChat(job, ended3.report.reply));
92913
93179
  }
93180
+ checkpoint.started = true;
93181
+ checkpoint.opaque = !run2.converse && !run2.renderer?.events;
93182
+ checkpoint.session = run2.session() ?? checkpoint.session;
93183
+ persist();
92914
93184
  if (run2.converse) {
92915
93185
  const plan3 = run2;
92916
93186
  const converse = run2.converse;
92917
- const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, stdio: ["pipe", "pipe", "pipe"] });
93187
+ const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
92918
93188
  stream.adopt(child);
92919
93189
  child.stdin.on("error", () => {
92920
93190
  });
@@ -92922,11 +93192,12 @@ ${job.prompt}` : job.prompt;
92922
93192
  child.stderr.on("data", (chunk) => stream.out(quietLines(plan3, chunk)));
92923
93193
  const spawned = new Promise((resolve2) => child.on("error", (e2) => resolve2(e2.message)));
92924
93194
  const end = await Promise.race([
92925
- converse(child, stream.event),
93195
+ converse(child, remember),
92926
93196
  spawned.then((error) => ({ ok: false, error })),
92927
93197
  // Killed, the turn ends with what it said so far; one that never does is not waited on.
92928
93198
  stream.whenAsked.then(() => wait2(KILL_GRACE_MS * 2)).then(() => ({ ok: true }))
92929
93199
  ]);
93200
+ if (!stream.asked()) complete(end.ok ? "done" : "failed", told(report(job, plan3, end)), end.ok ? void 0 : end.error);
92930
93201
  stop(child);
92931
93202
  await stream.end();
92932
93203
  if (stream.lost()) return;
@@ -92936,7 +93207,7 @@ ${job.prompt}` : job.prompt;
92936
93207
  return sendBack(deps, id, lease, ws, said2, () => keepChat(job, said2.reply));
92937
93208
  }
92938
93209
  const printed = async (plan3) => {
92939
- const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, stdio: ["pipe", "pipe", "pipe"] });
93210
+ const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
92940
93211
  stream.adopt(child);
92941
93212
  child.stdin.on("error", () => {
92942
93213
  });
@@ -92945,30 +93216,47 @@ ${job.prompt}` : job.prompt;
92945
93216
  else child.stdin.end();
92946
93217
  child.stdout.setEncoding("utf8");
92947
93218
  const structured = !!renderer2.events;
93219
+ let stderr = "";
93220
+ let acted = false;
92948
93221
  const fromAgent = (text3) => {
92949
- if (!structured) stream.out(text3);
92950
- for (const e2 of renderer2.events?.() ?? []) stream.event(e2);
93222
+ if (!structured) {
93223
+ if (text3.trim()) acted = true;
93224
+ stream.out(text3);
93225
+ }
93226
+ for (const e2 of renderer2.events?.() ?? []) {
93227
+ if (e2.kind === "message" || e2.kind === "tool_call" || e2.kind === "tool_call_update") acted = true;
93228
+ remember(e2);
93229
+ }
92951
93230
  };
92952
93231
  child.stdout.on("data", (chunk) => {
92953
93232
  fromAgent(renderer2.push(chunk));
92954
93233
  if (plan3.stdin && renderer2.result() !== void 0 && !child.stdin.writableEnded) child.stdin.end();
92955
93234
  });
92956
93235
  child.stderr.setEncoding("utf8");
92957
- child.stderr.on("data", (chunk) => stream.out(quietLines(plan3, chunk)));
93236
+ child.stderr.on("data", (chunk) => {
93237
+ stderr = (stderr + chunk).slice(-EVENT_CHARS);
93238
+ stream.out(quietLines(plan3, chunk));
93239
+ });
92958
93240
  const ended3 = await new Promise((resolve2) => {
92959
93241
  child.on("error", (e2) => resolve2({ code: null, error: e2.message }));
92960
93242
  child.on("close", (code) => resolve2({ code }));
92961
93243
  });
92962
93244
  fromAgent(renderer2.flush());
92963
- return ended3;
93245
+ return { ...ended3, stderr, acted };
92964
93246
  };
92965
93247
  let plan2 = run2;
92966
93248
  let ended2 = await printed(plan2);
92967
- if (fresh && ended2.code !== 0 && plan2.renderer.result() === void 0 && !stream.asked() && !stream.lost()) {
93249
+ if (fresh && ended2.code !== 0 && plan2.renderer.result() === void 0 && !ended2.acted && (!missingSessionOnly || sessionMissing(`${ended2.stderr}
93250
+ ${plan2.renderer.failure?.() ?? ""}`)) && !stream.asked() && !stream.lost()) {
92968
93251
  plan2 = fresh();
93252
+ run2 = plan2;
92969
93253
  ended2 = await printed(plan2);
92970
93254
  }
92971
93255
  const renderer = plan2.renderer;
93256
+ if (!stream.asked()) {
93257
+ const reason = ended2.error ?? renderer.failure?.() ?? (ended2.code === 0 ? void 0 : `Exited with code ${ended2.code}.`);
93258
+ complete(reason ? "failed" : "done", told(report(job, plan2)), reason);
93259
+ }
92972
93260
  await stream.end();
92973
93261
  if (stream.lost()) return;
92974
93262
  const failure = stream.asked() ? void 0 : ended2.error ?? renderer.failure?.() ?? (ended2.code === 0 ? void 0 : `Exited with code ${ended2.code}.`);
@@ -92976,7 +93264,7 @@ ${job.prompt}` : job.prompt;
92976
93264
  if (failure || !ws) return finish(deps, id, lease, failure ? "failed" : "done", failure, said);
92977
93265
  return sendBack(deps, id, lease, ws, said, () => keepChat(job, said.reply));
92978
93266
  }
92979
- async function runAgentJob(job, deps, track, keep2) {
93267
+ async function runAgentJob(job, deps, track, keep2, lease, checkpoint, persist) {
92980
93268
  const folder = job.projectDir ? folderFor(job) : { refused: "This project has no folder on this computer." };
92981
93269
  let ws;
92982
93270
  try {
@@ -92987,10 +93275,23 @@ async function runAgentJob(job, deps, track, keep2) {
92987
93275
  await deps.api.finishJob(deps.machineId, job.id, "failed", e2 instanceof Error ? e2.message : String(e2));
92988
93276
  return;
92989
93277
  }
92990
- const lease = { at: Date.now() };
93278
+ if (!held3(deps, lease)) return;
93279
+ if (checkpoint.completed) return sendBack(deps, job.id, lease, ws, checkpoint.completed.report, () => {
93280
+ });
93281
+ checkpoint.started = true;
93282
+ persist();
92991
93283
  const stream = streamOut(deps, job.id, lease);
92992
93284
  track(stream.stop);
92993
- const ended2 = await runAgent(job, ws, deps, { show: stream.out, event: stream.event, track: stream.adopt, onStop: stream.onStop, lost: stream.lost });
93285
+ const ended2 = await runAgent(job, ws, deps, { show: stream.out, event: (event2) => {
93286
+ if (stream.lost()) return;
93287
+ checkpointEvent(checkpoint, event2);
93288
+ persist();
93289
+ stream.event(event2);
93290
+ }, track: stream.adopt, onStop: stream.onStop, lost: stream.lost });
93291
+ if (ended2.ok && !stream.lost()) {
93292
+ checkpoint.completed = { outcome: "done", report: ended2.report };
93293
+ persist();
93294
+ }
92994
93295
  await stream.end();
92995
93296
  if (stream.lost()) return;
92996
93297
  if (!ended2.ok) return finish(deps, job.id, lease, "failed", ended2.reason);
@@ -92998,29 +93299,53 @@ async function runAgentJob(job, deps, track, keep2) {
92998
93299
  }
92999
93300
  var quietLines = (plan2, chunk) => chunk.split("\n").filter((line) => line && !plan2.quiet(line)).map((line) => `${line}
93000
93301
  `).join("");
93302
+ var sessionMissing = (text3) => /\b(?:session|conversation|thread)\b[^\n]*(?:\bnot found\b|\bdoes not exist\b)/i.test(text3) || /\bno (?:conversation|session|thread) found\b/i.test(text3);
93303
+ function signalTree(child, signal) {
93304
+ if (!child.pid) return;
93305
+ if (process.platform === "win32") {
93306
+ const kill = spawn4("taskkill", ["/PID", String(child.pid), "/T", "/F"], { stdio: "ignore" });
93307
+ kill.on("error", () => child.kill(signal));
93308
+ return;
93309
+ }
93310
+ try {
93311
+ process.kill(-child.pid, signal);
93312
+ } catch {
93313
+ child.kill(signal);
93314
+ }
93315
+ }
93001
93316
  var stop = (child) => {
93002
93317
  if (!child.pid) return;
93003
- child.kill("SIGTERM");
93004
- setTimeout(() => child.kill("SIGKILL"), KILL_GRACE_MS).unref();
93318
+ signalTree(child, "SIGTERM");
93319
+ const timer = setTimeout(() => signalTree(child, "SIGKILL"), KILL_GRACE_MS);
93320
+ timer.unref();
93321
+ child.once("close", () => clearTimeout(timer));
93005
93322
  };
93006
93323
  var wait2 = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms));
93007
- var held3 = (deps, lease) => Date.now() - lease.at < deps.leaseMs;
93324
+ var held3 = (deps, lease) => {
93325
+ if (Math.max(Date.now() - lease.at, performance.now() - lease.monotonic) >= deps.leaseMs) lease.lost = true;
93326
+ return !lease.lost;
93327
+ };
93008
93328
  async function whileOffline(deps, id, lease, attempt) {
93009
- for (; ; ) {
93329
+ while (held3(deps, lease)) {
93010
93330
  const out = await attempt();
93011
93331
  if (!("offline" in out && out.offline) || !held3(deps, lease)) return out;
93012
93332
  await wait2(deps.retryMs);
93333
+ if (!held3(deps, lease)) return null;
93334
+ const requestedAt = leaseNow();
93013
93335
  const renewed = await deps.api.renewJob(deps.machineId, id);
93014
- if (renewed.ok && renewed.value.renewed) lease.at = Date.now();
93336
+ if (!held3(deps, lease)) return null;
93337
+ if (renewed.ok && renewed.value.renewed) Object.assign(lease, requestedAt);
93015
93338
  if (renewed.ok && !renewed.value.renewed) return out;
93016
93339
  }
93340
+ return null;
93017
93341
  }
93018
93342
  async function ended(deps, id, lease, outcome, reason = "", report2) {
93019
93343
  const sent = await whileOffline(deps, id, lease, async () => {
93020
93344
  const done = await deps.api.finishJob(deps.machineId, id, outcome, reason, report2);
93021
93345
  return { offline: !done.ok && !done.code, finished: done.ok && done.value.finished };
93022
93346
  });
93023
- return sent.finished;
93347
+ if (sent?.finished) clearCheckpoint(id);
93348
+ return sent?.finished ?? false;
93024
93349
  }
93025
93350
  async function finish(deps, id, lease, outcome, reason = "", report2) {
93026
93351
  await ended(deps, id, lease, outcome, reason, report2);
@@ -93031,6 +93356,7 @@ async function sendBack(deps, id, lease, ws, said, landed = () => {
93031
93356
  if (built && !built.ok) return finish(deps, id, lease, "failed", built.reason, said);
93032
93357
  const report2 = built ? { ...said, workflow: { files: built.files } } : said;
93033
93358
  const pushed = await whileOffline(deps, id, lease, () => push(ws, { id, machineId: deps.machineId }));
93359
+ if (!pushed) return;
93034
93360
  if (pushed.ok) {
93035
93361
  if (await ended(deps, id, lease, "done", "", report2)) landed();
93036
93362
  return;
@@ -93055,12 +93381,12 @@ async function runTest(job, deps) {
93055
93381
  const report2 = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
93056
93382
  if (!report2?.installed) return finish2("failed", "not_installed");
93057
93383
  if (report2.loggedIn === false) return finish2("failed", "signed_out");
93058
- const cwd = path32.join(ownFolder(), "test");
93059
- fs29.mkdirSync(cwd, { recursive: true });
93384
+ const cwd = path35.join(ownFolder(), "test");
93385
+ fs32.mkdirSync(cwd, { recursive: true });
93060
93386
  const run2 = deps.plan(job.runtime, job.prompt, cwd, null, job.model, settingsOf(job));
93061
93387
  const startedAt = Date.now();
93062
93388
  if (run2.converse) {
93063
- const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, stdio: ["pipe", "pipe", "ignore"] });
93389
+ const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "ignore"] });
93064
93390
  child.stdin.on("error", () => {
93065
93391
  });
93066
93392
  let timer;
@@ -93080,7 +93406,7 @@ async function runTest(job, deps) {
93080
93406
  const renderer = run2.renderer;
93081
93407
  const ended2 = await new Promise((resolve2) => {
93082
93408
  let said = "";
93083
- const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, stdio: ["pipe", "pipe", "pipe"] });
93409
+ const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
93084
93410
  const timer = setTimeout(() => {
93085
93411
  child.kill("SIGTERM");
93086
93412
  setTimeout(() => child.kill("SIGKILL"), KILL_GRACE_MS).unref();
@@ -93214,6 +93540,7 @@ function startRunner(options) {
93214
93540
  let registration = null;
93215
93541
  let connected = false;
93216
93542
  let closed = false;
93543
+ let preparing = false;
93217
93544
  let attempts = 0;
93218
93545
  let live = null;
93219
93546
  let presence = null;
@@ -93221,7 +93548,10 @@ function startRunner(options) {
93221
93548
  let timer = null;
93222
93549
  let reading = false;
93223
93550
  let readAgain = false;
93551
+ let readDone = Promise.resolve();
93552
+ const jobs = /* @__PURE__ */ new Set();
93224
93553
  const running = /* @__PURE__ */ new Map();
93554
+ const attempted = /* @__PURE__ */ new Set();
93225
93555
  let stop2 = () => {
93226
93556
  };
93227
93557
  const stopped2 = new Promise((resolve2) => stop2 = resolve2);
@@ -93354,19 +93684,31 @@ function startRunner(options) {
93354
93684
  });
93355
93685
  };
93356
93686
  const readJobs = async () => {
93357
- if (closed || !registration) return;
93687
+ if (closed || preparing || !registration) return;
93358
93688
  if (reading) {
93359
93689
  readAgain = true;
93360
93690
  return;
93361
93691
  }
93362
93692
  reading = true;
93693
+ let readEnded = () => {
93694
+ };
93695
+ readDone = new Promise((resolve2) => readEnded = resolve2);
93363
93696
  try {
93364
93697
  const list = await listJobs(registration.machineId);
93365
- if (!list.ok) return;
93698
+ if (!list.ok || closed) return;
93699
+ const listed2 = new Set(list.value.jobs.map((job) => job.id));
93700
+ for (const id of attempted) if (!listed2.has(id) && !running.has(id)) attempted.delete(id);
93366
93701
  for (const job of list.value.jobs) {
93367
- if (job.state === "claimed" && !running.has(job.id)) {
93368
- await stopLeftOn(job);
93369
- await finishJob(registration.machineId, job.id, "failed", "The Runner restarted while this job was running.");
93702
+ if (closed || preparing) break;
93703
+ if (job.state === "claimed" && !running.has(job.id) && !attempted.has(job.id)) {
93704
+ const failure = await stopLeftOn(job);
93705
+ if (closed || preparing) break;
93706
+ const checkpoint = readCheckpoint(job.id);
93707
+ const uncertain = checkpoint?.updating && !checkpoint.completed && (checkpoint.pending.length > 0 || checkpoint.opaque || !job.flow && checkpoint.started && !checkpoint.session);
93708
+ if (checkpoint?.updating) status(uncertain ? UNCERTAIN : "\u6B63\u5728\u6062\u590D\u66F4\u65B0\u524D\u7684\u4EFB\u52A1\u2026");
93709
+ const reason = failure ?? (uncertain ? UNCERTAIN : checkpoint?.updating ? UPDATE_REASON : "The Runner restarted while this job was running.");
93710
+ const recovered = await finishJob(registration.machineId, job.id, "failed", reason, checkpoint?.session ? { session: checkpoint.session } : void 0);
93711
+ if (recovered.ok && reason === UPDATE_REASON) readAgain = true;
93370
93712
  continue;
93371
93713
  }
93372
93714
  if (job.state !== "waiting" || running.has(job.id)) continue;
@@ -93374,6 +93716,7 @@ function startRunner(options) {
93374
93716
  }
93375
93717
  } finally {
93376
93718
  reading = false;
93719
+ readEnded();
93377
93720
  if (readAgain) {
93378
93721
  readAgain = false;
93379
93722
  void readJobs();
@@ -93384,12 +93727,12 @@ function startRunner(options) {
93384
93727
  if (!job.flow || !job.task) return;
93385
93728
  try {
93386
93729
  const folder = job.projectDir ? folderFor(job) : null;
93387
- if (folder && "refused" in folder) return;
93730
+ if (folder && "refused" in folder) return folder.refused;
93388
93731
  const ws = openTaskFolder(job, folder?.cwd ?? null);
93389
93732
  const card = akbCardOf(ws);
93390
93733
  if (card) await stopLeftBehind(deps().akb(), ws, card, deps().stopMs);
93391
93734
  } catch (e2) {
93392
- console.error(`runner: the runs left on job ${job.id}'s card were not stopped: ${e2 instanceof Error ? e2.message : String(e2)}`);
93735
+ return e2 instanceof Error ? e2.message : String(e2);
93393
93736
  }
93394
93737
  };
93395
93738
  let reviewing = false;
@@ -93405,33 +93748,57 @@ function startRunner(options) {
93405
93748
  }
93406
93749
  };
93407
93750
  const start = (id) => {
93751
+ attempted.add(id);
93408
93752
  running.set(id, null);
93409
93753
  status(idle2());
93410
- void runJob(id, deps(), (halt) => running.set(id, halt)).catch(() => {
93754
+ const job = runJob(id, deps(), (halt) => {
93755
+ running.set(id, halt);
93756
+ if (closed) void halt();
93757
+ }, () => closed).catch(() => {
93411
93758
  }).finally(() => {
93759
+ jobs.delete(job);
93412
93760
  running.delete(id);
93413
93761
  if (closed) return;
93414
93762
  boards?.look();
93415
93763
  status(idle2());
93416
93764
  void readJobs();
93417
93765
  });
93766
+ jobs.add(job);
93418
93767
  };
93419
- const close = async (release2 = true) => {
93768
+ const close = async (release2 = true, updating = false) => {
93420
93769
  if (closed) return;
93770
+ if (updating) {
93771
+ preparing = true;
93772
+ await readDone;
93773
+ for (const id of running.keys()) {
93774
+ const prepared = await finishJob(registration.machineId, id, "failed", PREPARE_REASON);
93775
+ if (!prepared.ok || !prepared.value.prepared && !prepared.value.finished) {
93776
+ preparing = false;
93777
+ void readJobs();
93778
+ throw new Error("\u66F4\u65B0\u6682\u7F13\uFF1A\u672A\u80FD\u4FDD\u5B58\u4E91\u7AEF\u4EFB\u52A1\uFF0C\u7A0D\u540E\u91CD\u8BD5\u3002");
93779
+ }
93780
+ }
93781
+ }
93421
93782
  closed = true;
93422
- const handedOver = lock.waited();
93423
- lock.release();
93783
+ if (updating) {
93784
+ for (const id of running.keys()) {
93785
+ const checkpoint = readCheckpoint(id) ?? { pending: [] };
93786
+ saveCheckpoint(id, { ...checkpoint, updating: true });
93787
+ }
93788
+ }
93424
93789
  if (timer) clearTimeout(timer);
93425
93790
  if (agentsTimer) clearTimeout(agentsTimer);
93426
93791
  clearInterval(sweepTimer);
93427
93792
  live?.close();
93428
93793
  presence?.close();
93429
93794
  boards?.close();
93430
- const stops = Promise.all([...running.values()].map((halt) => halt?.()));
93795
+ const stops = Promise.all([readDone, ...jobs, ...[...running.values()].map((halt) => halt?.())]);
93431
93796
  let timeout;
93432
- await Promise.race([stops, new Promise((resolve2) => timeout = setTimeout(resolve2, (options.deps?.stopMs ?? STOP_MS) + 1e3))]);
93797
+ if (updating) await stops;
93798
+ else await Promise.race([stops, new Promise((resolve2) => timeout = setTimeout(resolve2, (options.deps?.stopMs ?? STOP_MS) + 1e3))]);
93433
93799
  clearTimeout(timeout);
93434
- if (release2 && !handedOver && registration) await release(registration.machineId);
93800
+ if (release2 && !lock.waited() && registration) await release(registration.machineId);
93801
+ lock.release();
93435
93802
  };
93436
93803
  removeLegacy();
93437
93804
  pruneChats();
@@ -93439,7 +93806,7 @@ function startRunner(options) {
93439
93806
  status(t.waitingHere(holder));
93440
93807
  options.onWaiting?.(holder);
93441
93808
  });
93442
- return { stopped: stopped2, close: () => close(true), renew: () => schedule(0) };
93809
+ return { stopped: stopped2, close: () => close(true), update: () => close(false, true), renew: () => schedule(0) };
93443
93810
  }
93444
93811
 
93445
93812
  // src/signin.ts
@@ -93558,12 +93925,21 @@ async function main() {
93558
93925
  const id = machineId();
93559
93926
  const runner = startRunner({
93560
93927
  registration: async () => ({ machineId: id, machineName: machineName(), version: VERSION, runtimes: await detectRuntimes(true) }),
93561
- kind: "terminal",
93928
+ kind: process.env.WILDCRANE_RUNNER_KIND === "codex" ? "codex" : process.env.WILDCRANE_RUNNER_KIND === "claude-code" ? "claude-code" : "terminal",
93562
93929
  onConnected: () => tell({ type: "connected" }),
93563
93930
  onWaiting: () => tell({ type: "waiting" }),
93564
93931
  // Tests shorten the job poll, which stands in when Realtime is out of reach.
93565
93932
  pollMs: Number(process.env.WILDCRANE_POLL_MS) || void 0
93566
93933
  });
93934
+ process.on("message", (message) => {
93935
+ if (message.type === "renew") return runner.renew();
93936
+ if (message.type !== "update") return;
93937
+ status("\u6B63\u5728\u66F4\u65B0 Runner\uFF0C\u91CD\u542F\u540E\u81EA\u52A8\u6062\u590D\u4EFB\u52A1\u2026");
93938
+ void runner.update().then(() => process.exit(EXIT_UPDATE)).catch((error) => {
93939
+ status(String(error));
93940
+ tell({ type: "update-deferred" });
93941
+ });
93942
+ });
93567
93943
  for (const signal of ["SIGINT", "SIGTERM"]) {
93568
93944
  process.on(signal, async () => {
93569
93945
  await runner.close();