wildcrane-runner 0.6.6 → 0.6.9
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/README.md +8 -2
- package/dist/akb/dist/kanban.mjs +2100 -2260
- package/dist/akb/package.json +1 -1
- package/dist/launcher.mjs +65 -17
- package/dist/runner.mjs +1178 -520
- package/package.json +1 -1
package/dist/runner.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// wildcrane-runner 0.6.
|
|
1
|
+
// wildcrane-runner 0.6.9 — 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
|
-
//
|
|
52
|
+
// node_modules/react/cjs/react.production.js
|
|
53
53
|
var require_react_production = __commonJS({
|
|
54
|
-
"
|
|
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
|
-
//
|
|
504
|
+
// node_modules/react/cjs/react.development.js
|
|
505
505
|
var require_react_development = __commonJS({
|
|
506
|
-
"
|
|
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
|
-
//
|
|
1501
|
+
// node_modules/react/index.js
|
|
1502
1502
|
var require_react = __commonJS({
|
|
1503
|
-
"
|
|
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
|
-
//
|
|
1513
|
+
// node_modules/react/cjs/react-jsx-runtime.production.js
|
|
1514
1514
|
var require_react_jsx_runtime_production = __commonJS({
|
|
1515
|
-
"
|
|
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
|
-
//
|
|
1543
|
+
// node_modules/react/cjs/react-jsx-runtime.development.js
|
|
1544
1544
|
var require_react_jsx_runtime_development = __commonJS({
|
|
1545
|
-
"
|
|
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
|
-
//
|
|
1814
|
+
// node_modules/react/jsx-runtime.js
|
|
1815
1815
|
var require_jsx_runtime = __commonJS({
|
|
1816
|
-
"
|
|
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
|
-
//
|
|
1826
|
+
// node_modules/react-dom/cjs/react-dom.production.js
|
|
1827
1827
|
var require_react_dom_production = __commonJS({
|
|
1828
|
-
"
|
|
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
|
-
//
|
|
1983
|
+
// node_modules/react-dom/cjs/react-dom.development.js
|
|
1984
1984
|
var require_react_dom_development = __commonJS({
|
|
1985
|
-
"
|
|
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
|
-
//
|
|
2238
|
+
// node_modules/react-dom/index.js
|
|
2239
2239
|
var require_react_dom = __commonJS({
|
|
2240
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
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,12 +7512,12 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
|
|
|
7512
7512
|
}
|
|
7513
7513
|
});
|
|
7514
7514
|
|
|
7515
|
-
//
|
|
7515
|
+
// node_modules/react-dom/cjs/react-dom-server.node.production.js
|
|
7516
7516
|
var require_react_dom_server_node_production = __commonJS({
|
|
7517
|
-
"
|
|
7517
|
+
"node_modules/react-dom/cjs/react-dom-server.node.production.js"(exports) {
|
|
7518
7518
|
"use strict";
|
|
7519
7519
|
var util = __require("util");
|
|
7520
|
-
var
|
|
7520
|
+
var crypto7 = __require("crypto");
|
|
7521
7521
|
var async_hooks = __require("async_hooks");
|
|
7522
7522
|
var React4 = require_react();
|
|
7523
7523
|
var ReactDOM = require_react_dom();
|
|
@@ -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
|
|
7575
|
+
var read2 = target.read;
|
|
7576
7576
|
writtenBytes += target.written;
|
|
7577
|
-
|
|
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(
|
|
7581
|
+
chunk.slice(read2),
|
|
7582
7582
|
currentView
|
|
7583
7583
|
).written);
|
|
7584
7584
|
4096 === writtenBytes && (writeToDestination(destination, currentView), currentView = new Uint8Array(4096), writtenBytes = 0);
|
|
@@ -10382,7 +10382,7 @@ var require_react_dom_server_node_production = __commonJS({
|
|
|
10382
10382
|
function createPostbackActionStateKey(permalink, componentKeyPath, hookIndex) {
|
|
10383
10383
|
if (void 0 !== permalink) return "p" + permalink;
|
|
10384
10384
|
permalink = JSON.stringify([componentKeyPath, null, hookIndex]);
|
|
10385
|
-
componentKeyPath =
|
|
10385
|
+
componentKeyPath = crypto7.createHash("md5");
|
|
10386
10386
|
componentKeyPath.update(permalink);
|
|
10387
10387
|
return "k" + componentKeyPath.digest("hex");
|
|
10388
10388
|
}
|
|
@@ -13686,9 +13686,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
|
|
|
13686
13686
|
}
|
|
13687
13687
|
});
|
|
13688
13688
|
|
|
13689
|
-
//
|
|
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
|
-
"
|
|
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) {
|
|
@@ -17474,9 +17474,9 @@ var require_react_dom_server_legacy_node_development = __commonJS({
|
|
|
17474
17474
|
});
|
|
17475
17475
|
return errorInfo;
|
|
17476
17476
|
}
|
|
17477
|
-
function encodeErrorForBoundary(boundary,
|
|
17478
|
-
boundary.errorDigest =
|
|
17479
|
-
isRecoverableError(error) ? boundary.errorMessage = wasAborted ? "Switched to client rendering because the server render was aborted with a request to render on the client." : "Switched to client rendering because a component requested it." : (error instanceof Error ? (
|
|
17477
|
+
function encodeErrorForBoundary(boundary, digest2, error, thrownInfo, wasAborted) {
|
|
17478
|
+
boundary.errorDigest = digest2;
|
|
17479
|
+
isRecoverableError(error) ? boundary.errorMessage = wasAborted ? "Switched to client rendering because the server render was aborted with a request to render on the client." : "Switched to client rendering because a component requested it." : (error instanceof Error ? (digest2 = String(error.message), error = String(error.stack)) : (digest2 = "object" === typeof error && null !== error ? describeObjectForErrorMessage(error) : String(error), error = null), wasAborted = wasAborted ? "Switched to client rendering because the server rendering aborted due to:\n\n" : "Switched to client rendering because the server rendering errored:\n\n", boundary.errorMessage = wasAborted + digest2, boundary.errorStack = null !== error ? wasAborted + error : null);
|
|
17480
17480
|
boundary.errorComponentStack = thrownInfo.componentStack;
|
|
17481
17481
|
}
|
|
17482
17482
|
function logRecoverableError(request2, error, errorInfo, debugTask) {
|
|
@@ -21196,9 +21196,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
|
|
|
21196
21196
|
}
|
|
21197
21197
|
});
|
|
21198
21198
|
|
|
21199
|
-
//
|
|
21199
|
+
// node_modules/react-dom/cjs/react-dom-server.node.development.js
|
|
21200
21200
|
var require_react_dom_server_node_development = __commonJS({
|
|
21201
|
-
"
|
|
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
|
|
21331
|
+
var read2 = target.read;
|
|
21332
21332
|
writtenBytes += target.written;
|
|
21333
|
-
|
|
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(
|
|
21337
|
+
chunk.slice(read2),
|
|
21338
21338
|
currentView
|
|
21339
21339
|
).written);
|
|
21340
21340
|
4096 === writtenBytes && (writeToDestination(destination, currentView), currentView = new Uint8Array(4096), writtenBytes = 0);
|
|
@@ -24376,7 +24376,7 @@ var require_react_dom_server_node_development = __commonJS({
|
|
|
24376
24376
|
function createPostbackActionStateKey(permalink, componentKeyPath, hookIndex) {
|
|
24377
24377
|
if (void 0 !== permalink) return "p" + permalink;
|
|
24378
24378
|
permalink = JSON.stringify([componentKeyPath, null, hookIndex]);
|
|
24379
|
-
componentKeyPath =
|
|
24379
|
+
componentKeyPath = crypto7.createHash("md5");
|
|
24380
24380
|
componentKeyPath.update(permalink);
|
|
24381
24381
|
return "k" + componentKeyPath.digest("hex");
|
|
24382
24382
|
}
|
|
@@ -25186,9 +25186,9 @@ var require_react_dom_server_node_development = __commonJS({
|
|
|
25186
25186
|
});
|
|
25187
25187
|
return errorInfo;
|
|
25188
25188
|
}
|
|
25189
|
-
function encodeErrorForBoundary(boundary,
|
|
25190
|
-
boundary.errorDigest =
|
|
25191
|
-
isRecoverableError(error) ? boundary.errorMessage = wasAborted ? "Switched to client rendering because the server render was aborted with a request to render on the client." : "Switched to client rendering because a component requested it." : (error instanceof Error ? (
|
|
25189
|
+
function encodeErrorForBoundary(boundary, digest2, error, thrownInfo, wasAborted) {
|
|
25190
|
+
boundary.errorDigest = digest2;
|
|
25191
|
+
isRecoverableError(error) ? boundary.errorMessage = wasAborted ? "Switched to client rendering because the server render was aborted with a request to render on the client." : "Switched to client rendering because a component requested it." : (error instanceof Error ? (digest2 = String(error.message), error = String(error.stack)) : (digest2 = "object" === typeof error && null !== error ? describeObjectForErrorMessage(error) : String(error), error = null), wasAborted = wasAborted ? "Switched to client rendering because the server rendering aborted due to:\n\n" : "Switched to client rendering because the server rendering errored:\n\n", boundary.errorMessage = wasAborted + digest2, boundary.errorStack = null !== error ? wasAborted + error : null);
|
|
25192
25192
|
boundary.errorComponentStack = thrownInfo.componentStack;
|
|
25193
25193
|
}
|
|
25194
25194
|
function logRecoverableError(request2, error, errorInfo, debugTask) {
|
|
@@ -28038,7 +28038,7 @@ var require_react_dom_server_node_development = __commonJS({
|
|
|
28038
28038
|
}
|
|
28039
28039
|
};
|
|
28040
28040
|
}
|
|
28041
|
-
var util = __require("util"),
|
|
28041
|
+
var util = __require("util"), crypto7 = __require("crypto"), async_hooks = __require("async_hooks"), React4 = require_react(), ReactDOM = require_react_dom(), stream = __require("stream"), REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo"), REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"), REACT_SCOPE_TYPE = /* @__PURE__ */ Symbol.for("react.scope"), REACT_ACTIVITY_TYPE = /* @__PURE__ */ Symbol.for("react.activity"), REACT_LEGACY_HIDDEN_TYPE = /* @__PURE__ */ Symbol.for("react.legacy_hidden"), REACT_MEMO_CACHE_SENTINEL = /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel"), REACT_VIEW_TRANSITION_TYPE = /* @__PURE__ */ Symbol.for("react.view_transition"), REACT_RECOVERABLE_TYPE = /* @__PURE__ */ Symbol.for("react.recoverable"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, ASYNC_ITERATOR = Symbol.asyncIterator, REACT_OPTIMISTIC_KEY = /* @__PURE__ */ Symbol.for("react.optimistic_key"), isArrayImpl = Array.isArray, jsxPropsParents = /* @__PURE__ */ new WeakMap(), jsxChildrenParents = /* @__PURE__ */ new WeakMap(), CLIENT_REFERENCE_TAG = /* @__PURE__ */ Symbol.for("react.client.reference"), hasOwnProperty = Object.prototype.hasOwnProperty, supportsArrayBufferDetached = hasOwnProperty.call(
|
|
28042
28042
|
ArrayBuffer.prototype,
|
|
28043
28043
|
"detached"
|
|
28044
28044
|
), didWarnAboutMissingArrayBufferDetached = false, scheduleMicrotask = queueMicrotask, currentView = null, writtenBytes = 0, destinationHasCapacity$1 = true, textEncoder = new util.TextEncoder(), assign = Object.assign, VALID_ATTRIBUTE_NAME_REGEX = RegExp(
|
|
@@ -29495,9 +29495,9 @@ A.finished.finally(function(){document.__reactViewTransition===A&&(document.__re
|
|
|
29495
29495
|
}
|
|
29496
29496
|
});
|
|
29497
29497
|
|
|
29498
|
-
//
|
|
29498
|
+
// node_modules/react-dom/server.node.js
|
|
29499
29499
|
var require_server_node = __commonJS({
|
|
29500
|
-
"
|
|
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
|
-
//
|
|
29521
|
+
// node_modules/sucrase/dist/parser/tokenizer/keywords.js
|
|
29522
29522
|
var require_keywords = __commonJS({
|
|
29523
|
-
"
|
|
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
|
-
//
|
|
29614
|
+
// node_modules/sucrase/dist/parser/tokenizer/types.js
|
|
29615
29615
|
var require_types = __commonJS({
|
|
29616
|
-
"
|
|
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
|
-
//
|
|
30098
|
+
// node_modules/sucrase/dist/parser/tokenizer/state.js
|
|
30099
30099
|
var require_state = __commonJS({
|
|
30100
|
-
"
|
|
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
|
-
//
|
|
30239
|
+
// node_modules/sucrase/dist/parser/util/charcodes.js
|
|
30240
30240
|
var require_charcodes = __commonJS({
|
|
30241
|
-
"
|
|
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
|
-
//
|
|
30462
|
+
// node_modules/sucrase/dist/parser/traverser/base.js
|
|
30463
30463
|
var require_base = __commonJS({
|
|
30464
|
-
"
|
|
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
|
-
//
|
|
30525
|
+
// node_modules/sucrase/dist/parser/traverser/util.js
|
|
30526
30526
|
var require_util = __commonJS({
|
|
30527
|
-
"
|
|
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
|
-
//
|
|
30611
|
+
// node_modules/sucrase/dist/parser/util/whitespace.js
|
|
30612
30612
|
var require_whitespace = __commonJS({
|
|
30613
|
-
"
|
|
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
|
-
//
|
|
30666
|
+
// node_modules/sucrase/dist/parser/util/identifier.js
|
|
30667
30667
|
var require_identifier = __commonJS({
|
|
30668
|
-
"
|
|
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
|
-
//
|
|
30704
|
+
// node_modules/sucrase/dist/parser/tokenizer/readWordTree.js
|
|
30705
30705
|
var require_readWordTree = __commonJS({
|
|
30706
|
-
"
|
|
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
|
-
//
|
|
40013
|
+
// node_modules/sucrase/dist/parser/tokenizer/readWord.js
|
|
40014
40014
|
var require_readWord = __commonJS({
|
|
40015
|
-
"
|
|
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
|
-
//
|
|
40076
|
+
// node_modules/sucrase/dist/parser/tokenizer/index.js
|
|
40077
40077
|
var require_tokenizer = __commonJS({
|
|
40078
|
-
"
|
|
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
|
-
//
|
|
40830
|
+
// node_modules/sucrase/dist/util/getImportExportSpecifierInfo.js
|
|
40831
40831
|
var require_getImportExportSpecifierInfo = __commonJS({
|
|
40832
|
-
"
|
|
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
|
-
//
|
|
40884
|
+
// node_modules/sucrase/dist/parser/plugins/jsx/xhtml.js
|
|
40885
40885
|
var require_xhtml = __commonJS({
|
|
40886
|
-
"
|
|
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
|
-
//
|
|
41147
|
+
// node_modules/sucrase/dist/util/getJSXPragmaInfo.js
|
|
41148
41148
|
var require_getJSXPragmaInfo = __commonJS({
|
|
41149
|
-
"
|
|
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
|
-
//
|
|
41168
|
+
// node_modules/sucrase/dist/transformers/Transformer.js
|
|
41169
41169
|
var require_Transformer = __commonJS({
|
|
41170
|
-
"
|
|
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
|
-
//
|
|
41189
|
+
// node_modules/sucrase/dist/transformers/JSXTransformer.js
|
|
41190
41190
|
var require_JSXTransformer = __commonJS({
|
|
41191
|
-
"
|
|
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 [
|
|
41260
|
-
prefix += `var ${resolvedName} = require("${
|
|
41259
|
+
for (const [path37, resolvedName] of Object.entries(this.cjsAutomaticModuleNameResolutions)) {
|
|
41260
|
+
prefix += `var ${resolvedName} = require("${path37}");`;
|
|
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
|
|
41454
|
-
if (!this.cjsAutomaticModuleNameResolutions[
|
|
41455
|
-
this.cjsAutomaticModuleNameResolutions[
|
|
41453
|
+
const path37 = this.jsxImportSource + importPathSuffix;
|
|
41454
|
+
if (!this.cjsAutomaticModuleNameResolutions[path37]) {
|
|
41455
|
+
this.cjsAutomaticModuleNameResolutions[path37] = this.importProcessor.getFreeIdentifierForPath(path37);
|
|
41456
41456
|
}
|
|
41457
|
-
return `${this.cjsAutomaticModuleNameResolutions[
|
|
41457
|
+
return `${this.cjsAutomaticModuleNameResolutions[path37]}.${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
|
-
//
|
|
41790
|
+
// node_modules/sucrase/dist/util/getNonTypeIdentifiers.js
|
|
41791
41791
|
var require_getNonTypeIdentifiers = __commonJS({
|
|
41792
|
-
"
|
|
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
|
-
//
|
|
41831
|
+
// node_modules/sucrase/dist/CJSImportProcessor.js
|
|
41832
41832
|
var require_CJSImportProcessor = __commonJS({
|
|
41833
|
-
"
|
|
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 [
|
|
41893
|
+
for (const [path37, 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(
|
|
41903
|
+
this.importsToReplace.set(path37, "");
|
|
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 [
|
|
41911
|
+
for (const [path37, 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(
|
|
41921
|
+
this.importsToReplace.set(path37, `require('${path37}');`);
|
|
41922
41922
|
continue;
|
|
41923
41923
|
}
|
|
41924
|
-
const primaryImportName = this.getFreeIdentifierForPath(
|
|
41924
|
+
const primaryImportName = this.getFreeIdentifierForPath(path37);
|
|
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(
|
|
41929
|
+
secondaryImportName = wildcardNames.length > 0 ? wildcardNames[0] : this.getFreeIdentifierForPath(path37);
|
|
41930
41930
|
}
|
|
41931
|
-
let requireCode = `var ${primaryImportName} = require('${
|
|
41931
|
+
let requireCode = `var ${primaryImportName} = require('${path37}');`;
|
|
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(
|
|
41959
|
+
this.importsToReplace.set(path37, 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(
|
|
41969
|
-
const components =
|
|
41968
|
+
getFreeIdentifierForPath(path37) {
|
|
41969
|
+
const components = path37.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
|
|
42015
|
-
const importInfo = this.getImportInfo(
|
|
42014
|
+
const path37 = this.tokens.stringValueAtIndex(index);
|
|
42015
|
+
const importInfo = this.getImportInfo(path37);
|
|
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
|
|
42083
|
-
const importInfo = this.getImportInfo(
|
|
42082
|
+
const path37 = this.tokens.stringValueAtIndex(index);
|
|
42083
|
+
const importInfo = this.getImportInfo(path37);
|
|
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
|
|
42099
|
-
const importInfo = this.getImportInfo(
|
|
42098
|
+
const path37 = this.tokens.stringValueAtIndex(index);
|
|
42099
|
+
const importInfo = this.getImportInfo(path37);
|
|
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(
|
|
42140
|
-
const existingInfo = this.importInfoByPath.get(
|
|
42139
|
+
getImportInfo(path37) {
|
|
42140
|
+
const existingInfo = this.importInfoByPath.get(path37);
|
|
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(
|
|
42153
|
+
this.importInfoByPath.set(path37, 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
|
-
//
|
|
42199
|
+
// node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js
|
|
42200
42200
|
var require_sourcemap_codec_umd = __commonJS({
|
|
42201
|
-
"
|
|
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
|
-
//
|
|
42702
|
+
// node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js
|
|
42703
42703
|
var require_resolve_uri_umd = __commonJS({
|
|
42704
|
-
"
|
|
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
|
|
42734
|
-
return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(
|
|
42733
|
+
const path37 = match[2];
|
|
42734
|
+
return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path37) ? path37 : "/" + path37, match[3] || "", match[4] || "");
|
|
42735
42735
|
}
|
|
42736
|
-
function makeUrl(scheme, user, host, port,
|
|
42736
|
+
function makeUrl(scheme, user, host, port, path37, query, hash) {
|
|
42737
42737
|
return {
|
|
42738
42738
|
scheme,
|
|
42739
42739
|
user,
|
|
42740
42740
|
host,
|
|
42741
42741
|
port,
|
|
42742
|
-
path:
|
|
42742
|
+
path: path37,
|
|
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(
|
|
42773
|
-
if (
|
|
42774
|
-
return
|
|
42775
|
-
const index =
|
|
42776
|
-
return
|
|
42772
|
+
function stripPathFilename(path37) {
|
|
42773
|
+
if (path37.endsWith("/.."))
|
|
42774
|
+
return path37;
|
|
42775
|
+
const index = path37.lastIndexOf("/");
|
|
42776
|
+
return path37.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
|
|
42814
|
+
let path37 = "";
|
|
42815
42815
|
for (let i = 1; i < pointer; i++) {
|
|
42816
|
-
|
|
42816
|
+
path37 += "/" + pieces[i];
|
|
42817
42817
|
}
|
|
42818
|
-
if (!
|
|
42819
|
-
|
|
42818
|
+
if (!path37 || addTrailingSlash && !path37.endsWith("/..")) {
|
|
42819
|
+
path37 += "/";
|
|
42820
42820
|
}
|
|
42821
|
-
url.path =
|
|
42821
|
+
url.path = path37;
|
|
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
|
|
42863
|
-
if (!
|
|
42862
|
+
const path37 = url.path.slice(1);
|
|
42863
|
+
if (!path37)
|
|
42864
42864
|
return queryHash || ".";
|
|
42865
|
-
if (isRelative(base || input) && !isRelative(
|
|
42866
|
-
return "./" +
|
|
42865
|
+
if (isRelative(base || input) && !isRelative(path37)) {
|
|
42866
|
+
return "./" + path37 + queryHash;
|
|
42867
42867
|
}
|
|
42868
|
-
return
|
|
42868
|
+
return path37 + 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
|
-
//
|
|
42881
|
+
// node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js
|
|
42882
42882
|
var require_trace_mapping_umd = __commonJS({
|
|
42883
|
-
"
|
|
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(
|
|
42968
|
-
if (!
|
|
42969
|
-
const index =
|
|
42970
|
-
return
|
|
42967
|
+
function stripFilename(path37) {
|
|
42968
|
+
if (!path37) return "";
|
|
42969
|
+
const index = path37.lastIndexOf("/");
|
|
42970
|
+
return path37.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
|
-
//
|
|
43421
|
+
// node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js
|
|
43422
43422
|
var require_gen_mapping_umd = __commonJS({
|
|
43423
|
-
"
|
|
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
|
-
//
|
|
43772
|
+
// node_modules/sucrase/dist/computeSourceMap.js
|
|
43773
43773
|
var require_computeSourceMap = __commonJS({
|
|
43774
|
-
"
|
|
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
|
-
//
|
|
43835
|
+
// node_modules/sucrase/dist/HelperManager.js
|
|
43836
43836
|
var require_HelperManager = __commonJS({
|
|
43837
|
-
"
|
|
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
|
-
//
|
|
44024
|
+
// node_modules/sucrase/dist/identifyShadowedGlobals.js
|
|
44025
44025
|
var require_identifyShadowedGlobals = __commonJS({
|
|
44026
|
-
"
|
|
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
|
-
//
|
|
44093
|
+
// node_modules/sucrase/dist/util/getIdentifierNames.js
|
|
44094
44094
|
var require_getIdentifierNames = __commonJS({
|
|
44095
|
-
"
|
|
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
|
-
//
|
|
44112
|
+
// node_modules/sucrase/dist/NameManager.js
|
|
44113
44113
|
var require_NameManager = __commonJS({
|
|
44114
|
-
"
|
|
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
|
-
//
|
|
44151
|
+
// node_modules/ts-interface-checker/dist/util.js
|
|
44152
44152
|
var require_util2 = __commonJS({
|
|
44153
|
-
"
|
|
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(
|
|
44178
|
+
function VError2(path37, message) {
|
|
44179
44179
|
var _this = _super.call(this, message) || this;
|
|
44180
|
-
_this.path =
|
|
44180
|
+
_this.path = path37;
|
|
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(
|
|
44240
|
+
DetailContext2.prototype.getError = function(path37) {
|
|
44241
44241
|
var msgParts = [];
|
|
44242
44242
|
for (var i = this._propNames.length - 1; i >= 0; i--) {
|
|
44243
44243
|
var p2 = this._propNames[i];
|
|
44244
|
-
|
|
44244
|
+
path37 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
|
|
44245
44245
|
var m = this._messages[i];
|
|
44246
44246
|
if (m) {
|
|
44247
|
-
msgParts.push(
|
|
44247
|
+
msgParts.push(path37 + " " + m);
|
|
44248
44248
|
}
|
|
44249
44249
|
}
|
|
44250
|
-
return new VError(
|
|
44250
|
+
return new VError(path37, msgParts.join("; "));
|
|
44251
44251
|
};
|
|
44252
|
-
DetailContext2.prototype.getErrorDetail = function(
|
|
44252
|
+
DetailContext2.prototype.getErrorDetail = function(path37) {
|
|
44253
44253
|
var details = [];
|
|
44254
44254
|
for (var i = this._propNames.length - 1; i >= 0; i--) {
|
|
44255
44255
|
var p2 = this._propNames[i];
|
|
44256
|
-
|
|
44256
|
+
path37 += typeof p2 === "number" ? "[" + p2 + "]" : p2 ? "." + p2 : "";
|
|
44257
44257
|
var message = this._messages[i];
|
|
44258
44258
|
if (message) {
|
|
44259
|
-
details.push({ path:
|
|
44259
|
+
details.push({ path: path37, 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
|
-
//
|
|
44292
|
+
// node_modules/ts-interface-checker/dist/types.js
|
|
44293
44293
|
var require_types2 = __commonJS({
|
|
44294
|
-
"
|
|
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
|
-
//
|
|
44931
|
+
// node_modules/ts-interface-checker/dist/index.js
|
|
44932
44932
|
var require_dist = __commonJS({
|
|
44933
|
-
"
|
|
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(
|
|
45073
|
-
this._path =
|
|
45072
|
+
Checker2.prototype.setReportedPath = function(path37) {
|
|
45073
|
+
this._path = path37;
|
|
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
|
-
//
|
|
45157
|
+
// node_modules/sucrase/dist/Options-gen-types.js
|
|
45158
45158
|
var require_Options_gen_types = __commonJS({
|
|
45159
|
-
"
|
|
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
|
-
//
|
|
45219
|
+
// node_modules/sucrase/dist/Options.js
|
|
45220
45220
|
var require_Options = __commonJS({
|
|
45221
|
-
"
|
|
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
|
-
//
|
|
45238
|
+
// node_modules/sucrase/dist/parser/traverser/lval.js
|
|
45239
45239
|
var require_lval = __commonJS({
|
|
45240
|
-
"
|
|
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
|
-
//
|
|
45385
|
+
// node_modules/sucrase/dist/parser/plugins/typescript.js
|
|
45386
45386
|
var require_typescript = __commonJS({
|
|
45387
|
-
"
|
|
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
|
-
//
|
|
46698
|
+
// node_modules/sucrase/dist/parser/plugins/jsx/index.js
|
|
46699
46699
|
var require_jsx = __commonJS({
|
|
46700
|
-
"
|
|
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
|
-
//
|
|
46968
|
+
// node_modules/sucrase/dist/parser/plugins/types.js
|
|
46969
46969
|
var require_types3 = __commonJS({
|
|
46970
|
-
"
|
|
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
|
-
//
|
|
47003
|
+
// node_modules/sucrase/dist/parser/traverser/expression.js
|
|
47004
47004
|
var require_expression = __commonJS({
|
|
47005
|
-
"
|
|
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
|
-
//
|
|
47743
|
+
// node_modules/sucrase/dist/parser/plugins/flow.js
|
|
47744
47744
|
var require_flow = __commonJS({
|
|
47745
|
-
"
|
|
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
|
-
//
|
|
48626
|
+
// node_modules/sucrase/dist/parser/traverser/statement.js
|
|
48627
48627
|
var require_statement = __commonJS({
|
|
48628
|
-
"
|
|
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
|
-
//
|
|
49623
|
+
// node_modules/sucrase/dist/parser/traverser/index.js
|
|
49624
49624
|
var require_traverser = __commonJS({
|
|
49625
|
-
"
|
|
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
|
-
//
|
|
49643
|
+
// node_modules/sucrase/dist/parser/index.js
|
|
49644
49644
|
var require_parser = __commonJS({
|
|
49645
|
-
"
|
|
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
|
-
//
|
|
49672
|
+
// node_modules/sucrase/dist/util/isAsyncOperation.js
|
|
49673
49673
|
var require_isAsyncOperation = __commonJS({
|
|
49674
|
-
"
|
|
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
|
-
//
|
|
49703
|
+
// node_modules/sucrase/dist/TokenProcessor.js
|
|
49704
49704
|
var require_TokenProcessor = __commonJS({
|
|
49705
|
-
"
|
|
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
|
-
//
|
|
49998
|
+
// node_modules/sucrase/dist/util/getClassInfo.js
|
|
49999
49999
|
var require_getClassInfo = __commonJS({
|
|
50000
|
-
"
|
|
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
|
-
//
|
|
50240
|
+
// node_modules/sucrase/dist/util/elideImportEquals.js
|
|
50241
50241
|
var require_elideImportEquals = __commonJS({
|
|
50242
|
-
"
|
|
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
|
-
//
|
|
50266
|
+
// node_modules/sucrase/dist/util/getDeclarationInfo.js
|
|
50267
50267
|
var require_getDeclarationInfo = __commonJS({
|
|
50268
|
-
"
|
|
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
|
-
//
|
|
50297
|
+
// node_modules/sucrase/dist/util/isExportFrom.js
|
|
50298
50298
|
var require_isExportFrom = __commonJS({
|
|
50299
|
-
"
|
|
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
|
-
//
|
|
50315
|
+
// node_modules/sucrase/dist/util/removeMaybeImportAttributes.js
|
|
50316
50316
|
var require_removeMaybeImportAttributes = __commonJS({
|
|
50317
|
-
"
|
|
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
|
-
//
|
|
50334
|
+
// node_modules/sucrase/dist/util/shouldElideDefaultExport.js
|
|
50335
50335
|
var require_shouldElideDefaultExport = __commonJS({
|
|
50336
|
-
"
|
|
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
|
-
//
|
|
50363
|
+
// node_modules/sucrase/dist/transformers/CJSImportTransformer.js
|
|
50364
50364
|
var require_CJSImportTransformer = __commonJS({
|
|
50365
|
-
"
|
|
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
|
|
50507
|
-
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(
|
|
50508
|
-
this.tokens.appendCode(this.importProcessor.claimImportCode(
|
|
50506
|
+
const path37 = this.tokens.stringValue();
|
|
50507
|
+
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path37));
|
|
50508
|
+
this.tokens.appendCode(this.importProcessor.claimImportCode(path37));
|
|
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
|
|
51089
|
-
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(
|
|
51088
|
+
const path37 = this.tokens.stringValue();
|
|
51089
|
+
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path37));
|
|
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
|
|
51104
|
-
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(
|
|
51103
|
+
const path37 = this.tokens.stringValue();
|
|
51104
|
+
this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(path37));
|
|
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
|
-
//
|
|
51118
|
+
// node_modules/sucrase/dist/transformers/ESMImportTransformer.js
|
|
51119
51119
|
var require_ESMImportTransformer = __commonJS({
|
|
51120
|
-
"
|
|
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
|
-
//
|
|
51422
|
+
// node_modules/sucrase/dist/transformers/FlowTransformer.js
|
|
51423
51423
|
var require_FlowTransformer = __commonJS({
|
|
51424
|
-
"
|
|
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
|
-
//
|
|
51590
|
+
// node_modules/sucrase/dist/transformers/JestHoistTransformer.js
|
|
51591
51591
|
var require_JestHoistTransformer = __commonJS({
|
|
51592
|
-
"
|
|
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
|
-
//
|
|
51696
|
+
// node_modules/sucrase/dist/transformers/NumericSeparatorTransformer.js
|
|
51697
51697
|
var require_NumericSeparatorTransformer = __commonJS({
|
|
51698
|
-
"
|
|
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
|
-
//
|
|
51728
|
+
// node_modules/sucrase/dist/transformers/OptionalCatchBindingTransformer.js
|
|
51729
51729
|
var require_OptionalCatchBindingTransformer = __commonJS({
|
|
51730
|
-
"
|
|
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
|
-
//
|
|
51759
|
+
// node_modules/sucrase/dist/transformers/OptionalChainingNullishTransformer.js
|
|
51760
51760
|
var require_OptionalChainingNullishTransformer = __commonJS({
|
|
51761
|
-
"
|
|
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
|
-
//
|
|
51897
|
+
// node_modules/sucrase/dist/transformers/ReactDisplayNameTransformer.js
|
|
51898
51898
|
var require_ReactDisplayNameTransformer = __commonJS({
|
|
51899
|
-
"
|
|
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
|
-
//
|
|
52025
|
+
// node_modules/sucrase/dist/transformers/ReactHotLoaderTransformer.js
|
|
52026
52026
|
var require_ReactHotLoaderTransformer = __commonJS({
|
|
52027
|
-
"
|
|
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
|
-
//
|
|
52097
|
+
// node_modules/sucrase/dist/util/isIdentifier.js
|
|
52098
52098
|
var require_isIdentifier = __commonJS({
|
|
52099
|
-
"
|
|
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
|
-
//
|
|
52172
|
+
// node_modules/sucrase/dist/transformers/TypeScriptTransformer.js
|
|
52173
52173
|
var require_TypeScriptTransformer = __commonJS({
|
|
52174
|
-
"
|
|
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
|
-
//
|
|
52413
|
+
// node_modules/sucrase/dist/transformers/RootTransformer.js
|
|
52414
52414
|
var require_RootTransformer = __commonJS({
|
|
52415
|
-
"
|
|
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
|
-
//
|
|
52830
|
+
// node_modules/lines-and-columns/build/index.js
|
|
52831
52831
|
var require_build = __commonJS({
|
|
52832
|
-
"
|
|
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
|
-
//
|
|
52899
|
+
// node_modules/sucrase/dist/util/formatTokens.js
|
|
52900
52900
|
var require_formatTokens = __commonJS({
|
|
52901
|
-
"
|
|
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
|
-
//
|
|
52972
|
+
// node_modules/sucrase/dist/util/getTSImportedNames.js
|
|
52973
52973
|
var require_getTSImportedNames = __commonJS({
|
|
52974
|
-
"
|
|
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
|
-
//
|
|
53039
|
+
// node_modules/sucrase/dist/index.js
|
|
53040
53040
|
var require_dist2 = __commonJS({
|
|
53041
|
-
"
|
|
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
|
-
//
|
|
53154
|
+
// node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs
|
|
53155
53155
|
var o;
|
|
53156
53156
|
var init_chunk_DCG7AFIE = __esm({
|
|
53157
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
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
|
-
//
|
|
59013
|
+
// node_modules/tailwindcss/index.css
|
|
59014
59014
|
var tailwindcss_default;
|
|
59015
59015
|
var init_tailwindcss = __esm({
|
|
59016
|
-
"
|
|
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
|
-
//
|
|
59021
|
+
// node_modules/react-icons/lib/iconsManifest.mjs
|
|
59022
59022
|
var init_iconsManifest = __esm({
|
|
59023
|
-
"
|
|
59023
|
+
"node_modules/react-icons/lib/iconsManifest.mjs"() {
|
|
59024
59024
|
}
|
|
59025
59025
|
});
|
|
59026
59026
|
|
|
59027
|
-
//
|
|
59027
|
+
// node_modules/react-icons/lib/iconContext.mjs
|
|
59028
59028
|
var import_react, DefaultContext, IconContext;
|
|
59029
59029
|
var init_iconContext = __esm({
|
|
59030
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
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
|
-
//
|
|
59151
|
+
// node_modules/react-icons/lib/index.mjs
|
|
59152
59152
|
var init_lib2 = __esm({
|
|
59153
|
-
"
|
|
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
|
-
//
|
|
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
|
-
"
|
|
60313
|
+
"node_modules/react-icons/fi/index.mjs"() {
|
|
60314
60314
|
init_lib2();
|
|
60315
60315
|
}
|
|
60316
60316
|
});
|
|
60317
60317
|
|
|
60318
|
-
//
|
|
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
|
-
"
|
|
66767
|
+
"node_modules/react-icons/fa/index.mjs"() {
|
|
66768
66768
|
init_lib2();
|
|
66769
66769
|
}
|
|
66770
66770
|
});
|
|
66771
66771
|
|
|
66772
|
-
//
|
|
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
|
-
"
|
|
80561
|
+
"node_modules/react-icons/si/index.mjs"() {
|
|
80562
80562
|
init_lib2();
|
|
80563
80563
|
}
|
|
80564
80564
|
});
|
|
80565
80565
|
|
|
80566
|
-
//
|
|
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
|
-
"
|
|
80587
|
+
"node_modules/clsx/dist/clsx.mjs"() {
|
|
80588
80588
|
clsx_default = clsx;
|
|
80589
80589
|
}
|
|
80590
80590
|
});
|
|
80591
80591
|
|
|
80592
|
-
//
|
|
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
|
-
"
|
|
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,
|
|
80748
|
+
getPart = (classPartObject, path37) => {
|
|
80749
80749
|
let current = classPartObject;
|
|
80750
|
-
const parts =
|
|
80750
|
+
const parts = path37.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
|
-
//
|
|
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
|
-
"
|
|
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.
|
|
84439
|
-
var AKB_VERSION = true ? "0.11.
|
|
84440
|
-
var AKB_CONTRACT = true ?
|
|
84438
|
+
var VERSION = true ? "0.6.9" : "0.0.0";
|
|
84439
|
+
var AKB_VERSION = true ? "0.11.8" : "0.0.0";
|
|
84440
|
+
var AKB_CONTRACT = true ? 4 : 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
|
|
85295
|
+
const path37 = join(dir, name);
|
|
85295
85296
|
try {
|
|
85296
|
-
const at2 = statSync(
|
|
85297
|
-
if (!newest2 || at2 > newest2.at) newest2 = { path:
|
|
85297
|
+
const at2 = statSync(path37).mtimeMs;
|
|
85298
|
+
if (!newest2 || at2 > newest2.at) newest2 = { path: path37, 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
|
|
85306
|
-
if (!
|
|
85306
|
+
const path37 = findRollout(threadId);
|
|
85307
|
+
if (!path37) return void 0;
|
|
85307
85308
|
let raw;
|
|
85308
85309
|
try {
|
|
85309
|
-
raw = readFileSync(
|
|
85310
|
+
raw = readFileSync(path37, "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
|
|
85418
|
-
return
|
|
85418
|
+
const path37 = str(change.path);
|
|
85419
|
+
return path37 ? `\u23FA ${str(change.kind) || "change"}(${path37})
|
|
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:
|
|
85667
|
+
for (const { path: path37, main: main2 } of wireFiles(entry.sessionDir)) {
|
|
85667
85668
|
let raw;
|
|
85668
85669
|
try {
|
|
85669
|
-
raw = readFileSync2(
|
|
85670
|
+
raw = readFileSync2(path37, "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.
|
|
85926
|
-
akbContract:
|
|
85926
|
+
version: "0.11.8",
|
|
85927
|
+
akbContract: 4,
|
|
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
|
|
85988
|
-
return
|
|
85988
|
+
const path37 = str(obj(locations[0]).path);
|
|
85989
|
+
return path37 && !title.includes(path37) ? hint(path37) : "";
|
|
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
|
|
86459
|
-
const state = obj(
|
|
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;
|
|
@@ -88024,6 +88025,7 @@ var DEFAULT_HARNESS = HARNESSES[0];
|
|
|
88024
88025
|
checkHarnesses(HARNESSES);
|
|
88025
88026
|
|
|
88026
88027
|
// ../cli/src/lib/agent/env.ts
|
|
88028
|
+
var RUN_ENV = "KANBAN_RUN";
|
|
88027
88029
|
var SCHEDULED_AGENTS_ENV = "AI4KANBAN_SCHEDULED_AGENTS";
|
|
88028
88030
|
var SESSION_VARS = {
|
|
88029
88031
|
"claude-code": "CLAUDE_CODE_SESSION_ID",
|
|
@@ -88226,7 +88228,7 @@ var secretsSet = () => Object.fromEntries(Object.entries(readAll()).map(([id, ke
|
|
|
88226
88228
|
|
|
88227
88229
|
// src/api.ts
|
|
88228
88230
|
var RUNTIMES = ["claude-code", "codex", "cursor", "opencode", "kimi", "dsh", "zcode", "grok"];
|
|
88229
|
-
var PROTOCOL =
|
|
88231
|
+
var PROTOCOL = 12;
|
|
88230
88232
|
var TIMEOUT_MS = 2e4;
|
|
88231
88233
|
async function send(method, route, body, signedIn, ms, type) {
|
|
88232
88234
|
const headers = { accept: "application/json" };
|
|
@@ -88313,7 +88315,7 @@ var listFolders = (machineId2) => request("GET", `/v1/runner/folders?machine=${q
|
|
|
88313
88315
|
var listElsewhere = (machineId2) => request("GET", `/v1/runner/folders?machine=${q(machineId2)}&elsewhere=1`);
|
|
88314
88316
|
var listMachineTasks = (machineId2) => request("GET", `/v1/runner/tasks?machine=${q(machineId2)}`);
|
|
88315
88317
|
var stopTask = (task, how) => request("POST", how === "chat" ? `/v1/tasks/${q(task)}/chat/stop` : `/v1/tasks/${q(task)}/stop`, {});
|
|
88316
|
-
var addFolder = (machineId2, name,
|
|
88318
|
+
var addFolder = (machineId2, name, path37, project) => request("POST", "/v1/runner/folders", { machineId: machineId2, name, path: path37, ...project ? { project } : {} });
|
|
88317
88319
|
var removeFolder = (machineId2, project) => request("POST", `/v1/runner/folders/${q(project)}/remove`, { machineId: machineId2 });
|
|
88318
88320
|
var readBoard = (project, since) => request("GET", `/v1/projects/${q(project)}/board${since === null ? "" : `?since=${since}`}`);
|
|
88319
88321
|
async function commitBoard(project, job, machine, files) {
|
|
@@ -88391,6 +88393,7 @@ function plan(runtime, prompt, cwd, resume, model, given = {}, fork = false, lin
|
|
|
88391
88393
|
stdout: child.stdout,
|
|
88392
88394
|
stdin: child.stdin,
|
|
88393
88395
|
prompt,
|
|
88396
|
+
restartPrompt: prompt,
|
|
88394
88397
|
cwd,
|
|
88395
88398
|
resumeId: resume ?? void 0,
|
|
88396
88399
|
log: () => {
|
|
@@ -88833,9 +88836,9 @@ async function askDueAgents(machineId2, now = Date.now()) {
|
|
|
88833
88836
|
if (!folders2.ok) return false;
|
|
88834
88837
|
let started = false;
|
|
88835
88838
|
for (const { project } of folders2.value.folders) {
|
|
88836
|
-
const
|
|
88837
|
-
if (!
|
|
88838
|
-
for (const agent of
|
|
88839
|
+
const read2 = await readAgents(machineId2, project);
|
|
88840
|
+
if (!read2.ok) continue;
|
|
88841
|
+
for (const agent of read2.value.agents.filter((a3) => agentDue(a3, now))) {
|
|
88839
88842
|
const asked = await requestAgent(machineId2, project, agent.name, agent.workflow ?? null, agent.lastSuccess);
|
|
88840
88843
|
if (!asked.ok) console.error(`runner: ${agent.name} was not started on ${project}: ${asked.error}`);
|
|
88841
88844
|
else if (asked.value.job) started = true;
|
|
@@ -88880,7 +88883,7 @@ exec ${line} "$@"
|
|
|
88880
88883
|
}
|
|
88881
88884
|
function akbEnv(akb, board, task, line) {
|
|
88882
88885
|
const env2 = {};
|
|
88883
|
-
const dropped = ["AI4KANBAN_BOARD", "AI4KANBAN_TASK", LANGUAGE_LINE_ENV, SCHEDULED_AGENTS_ENV];
|
|
88886
|
+
const dropped = ["AI4KANBAN_BOARD", "AI4KANBAN_TASK", "AI4KANBAN_EXECUTION", LANGUAGE_LINE_ENV, SCHEDULED_AGENTS_ENV];
|
|
88884
88887
|
for (const [k, v2] of Object.entries(process.env)) if (!k.startsWith("KANBAN_") && !dropped.includes(k)) env2[k] = v2;
|
|
88885
88888
|
const key = Object.keys(env2).find((k) => k.toUpperCase() === "PATH") ?? "PATH";
|
|
88886
88889
|
env2[key] = [shimDir(akb), env2[key]].filter(Boolean).join(path14.delimiter);
|
|
@@ -88901,7 +88904,7 @@ function runAkb(akb, args, opts) {
|
|
|
88901
88904
|
};
|
|
88902
88905
|
let child;
|
|
88903
88906
|
try {
|
|
88904
|
-
child = spawn3(akb.command, [...akb.args, ...args], { cwd: opts.cwd, env: { ...akbEnv(akb, opts.board, opts.task, opts.line), ...opts.env }, stdio: ["ignore", "pipe", "pipe"] });
|
|
88907
|
+
child = spawn3(akb.command, [...akb.args, ...args], { cwd: opts.cwd, env: { ...akbEnv(akb, opts.board, opts.task, opts.line), ...opts.env }, detached: process.platform !== "win32", stdio: ["ignore", "pipe", "pipe"] });
|
|
88905
88908
|
} catch (e2) {
|
|
88906
88909
|
return resolve2({ code: null, out: "", last: e2 instanceof Error ? e2.message : String(e2) });
|
|
88907
88910
|
}
|
|
@@ -89382,11 +89385,11 @@ function keepCloudChat(task, messages) {
|
|
|
89382
89385
|
fs17.writeFileSync(file2, lines.map((l2) => `${JSON.stringify(l2)}
|
|
89383
89386
|
`).join(""));
|
|
89384
89387
|
}
|
|
89385
|
-
async function keepDecisions(task,
|
|
89388
|
+
async function keepDecisions(task, read2) {
|
|
89386
89389
|
const comments = [];
|
|
89387
89390
|
let after = null;
|
|
89388
89391
|
do {
|
|
89389
|
-
const page = await
|
|
89392
|
+
const page = await read2(task, after);
|
|
89390
89393
|
if (!page.ok) return;
|
|
89391
89394
|
for (const d2 of page.value.data) {
|
|
89392
89395
|
if (d2.comment.trim()) comments.push({ id: d2.id, role: "user", text: d2.comment, at: Date.parse(d2.created_at) || Date.now() });
|
|
@@ -89460,22 +89463,22 @@ import path24 from "node:path";
|
|
|
89460
89463
|
// ../cloud/src/board-files.ts
|
|
89461
89464
|
var ROOTS = ["todo/", ".archive/", "memory/", "workflows/", "triage/", "assets/", "rules/"];
|
|
89462
89465
|
var SETTINGS = ["modules.md", "config.md"];
|
|
89463
|
-
var isSettingsPath = (
|
|
89466
|
+
var isSettingsPath = (path37) => SETTINGS.includes(path37) || /^rules\/(?:workflows\/)?[^/]+\.md$/.test(path37);
|
|
89464
89467
|
var BOARD_FILE_LIMIT = 256 * 1024;
|
|
89465
|
-
function isBoardPath(
|
|
89466
|
-
if (!
|
|
89467
|
-
if (
|
|
89468
|
-
if (
|
|
89469
|
-
if (
|
|
89470
|
-
if (SETTINGS.includes(
|
|
89471
|
-
if (
|
|
89472
|
-
if (
|
|
89473
|
-
return ROOTS.some((root) =>
|
|
89468
|
+
function isBoardPath(path37) {
|
|
89469
|
+
if (!path37 || path37.length > 500 || path37.startsWith("/") || path37.includes("\\") || path37.includes("\0")) return false;
|
|
89470
|
+
if (path37.split("/").some((part) => !part || part === "." || part === "..")) return false;
|
|
89471
|
+
if (path37 === "todo/README.md" || path37.split("/").includes(".sync")) return false;
|
|
89472
|
+
if (path37.startsWith("workflows/")) return true;
|
|
89473
|
+
if (SETTINGS.includes(path37)) return true;
|
|
89474
|
+
if (path37.startsWith("rules/")) return isSettingsPath(path37);
|
|
89475
|
+
if (path37.startsWith("assets/")) return path37.endsWith(".json");
|
|
89476
|
+
return ROOTS.some((root) => path37.startsWith(root)) && path37.endsWith(".md");
|
|
89474
89477
|
}
|
|
89475
89478
|
var CARD = /^(?:todo|\.archive)\/(?:[^/]+\/)*(\d+)-[^/]*\.md$/;
|
|
89476
89479
|
var ROOT = /^(?:todo|\.archive)\/(?:[^/]+\/)*(\d+)-[^/]+\/root\.md$/;
|
|
89477
|
-
function numberOfCard(
|
|
89478
|
-
const n = ROOT.exec(
|
|
89480
|
+
function numberOfCard(path37) {
|
|
89481
|
+
const n = ROOT.exec(path37)?.[1] ?? CARD.exec(path37)?.[1];
|
|
89479
89482
|
return n ? Number(n) : null;
|
|
89480
89483
|
}
|
|
89481
89484
|
var cardSlug = (task) => task.toLowerCase().replace(/_/g, "-");
|
|
@@ -89512,7 +89515,7 @@ import crypto3 from "node:crypto";
|
|
|
89512
89515
|
import fs20 from "node:fs";
|
|
89513
89516
|
import path23 from "node:path";
|
|
89514
89517
|
|
|
89515
|
-
//
|
|
89518
|
+
// node_modules/node-diff3/dist/diff3.mjs
|
|
89516
89519
|
function LCS(buffer1, buffer2) {
|
|
89517
89520
|
let equivalenceClasses = /* @__PURE__ */ Object.create(null);
|
|
89518
89521
|
for (let j2 = 0; j2 < buffer2.length; j2++) {
|
|
@@ -89749,8 +89752,8 @@ function unquote2(v2) {
|
|
|
89749
89752
|
|
|
89750
89753
|
// ../cloud/src/triage-files.ts
|
|
89751
89754
|
var ITEM = /^triage\/(?:(dismissed|archived)\/)?([^/]+)\.md$/;
|
|
89752
|
-
function itemAt(
|
|
89753
|
-
const m = ITEM.exec(
|
|
89755
|
+
function itemAt(path37) {
|
|
89756
|
+
const m = ITEM.exec(path37);
|
|
89754
89757
|
if (!m) return null;
|
|
89755
89758
|
return { state: m[1] === "dismissed" ? "dismissed" : m[1] === "archived" ? "carded" : "open", name: m[2] };
|
|
89756
89759
|
}
|
|
@@ -90490,8 +90493,8 @@ function sharedMemory(board) {
|
|
|
90490
90493
|
const declared = /* @__PURE__ */ new Map();
|
|
90491
90494
|
const take = (folder, text3, builtIn) => {
|
|
90492
90495
|
if (text3 === null || declared.has(folder)) return;
|
|
90493
|
-
const
|
|
90494
|
-
if ("agent" in
|
|
90496
|
+
const read2 = parseSpecAgent(text3, folder, () => null, builtIn);
|
|
90497
|
+
if ("agent" in read2 && read2.agent.name === folder) declared.set(folder, read2.agent.memoryFiles.workspace);
|
|
90495
90498
|
};
|
|
90496
90499
|
for (const [key, text3] of Object.entries(BUNDLED_AGENT_FILES)) {
|
|
90497
90500
|
const at2 = /^([^/]+)\/AGENT\.md$/.exec(key);
|
|
@@ -90579,17 +90582,17 @@ function openCached(project) {
|
|
|
90579
90582
|
const dir = cacheDir(project);
|
|
90580
90583
|
if (fs20.existsSync(path23.join(dir, ".git"))) return dir;
|
|
90581
90584
|
fs20.mkdirSync(dir, { recursive: true });
|
|
90582
|
-
const
|
|
90583
|
-
if (
|
|
90585
|
+
const git4 = (...args) => spawnSync4("git", ["-C", dir, ...args], { encoding: "utf8" }).status === 0;
|
|
90586
|
+
if (git4("init", "-q")) git4("-c", "user.name=WildCrane", "-c", "user.email=runner@wildcrane.ai", "commit", "-q", "--allow-empty", "-m", "general");
|
|
90584
90587
|
return dir;
|
|
90585
90588
|
}
|
|
90586
90589
|
var SKILL_FOLDERS = [".claude/skills/kanban", ".agents/skills/kanban"];
|
|
90587
90590
|
var SKILL_ROOTS = [".claude/skills", ".agents/skills"];
|
|
90588
90591
|
function keepOutOfGit(dir, folders2 = SKILL_FOLDERS) {
|
|
90589
|
-
const
|
|
90590
|
-
const inside =
|
|
90592
|
+
const git4 = (...args) => spawnSync4("git", ["-C", dir, ...args], { encoding: "utf8" });
|
|
90593
|
+
const inside = git4("rev-parse", "--git-path", "info/exclude");
|
|
90591
90594
|
if (inside.status !== 0) return;
|
|
90592
|
-
const missing = [".akb/", ...folders2.map((f2) => `${f2}/`)].filter((p2) =>
|
|
90595
|
+
const missing = [".akb/", ...folders2.map((f2) => `${f2}/`)].filter((p2) => git4("check-ignore", "-q", p2).status !== 0);
|
|
90593
90596
|
if (!missing.length) return;
|
|
90594
90597
|
const exclude = path23.resolve(dir, inside.stdout.trim());
|
|
90595
90598
|
fs20.mkdirSync(path23.dirname(exclude), { recursive: true });
|
|
@@ -90748,10 +90751,10 @@ async function pullWorkflow(ws, record, base) {
|
|
|
90748
90751
|
record.builtin = ws.workflow.startsWith("wf_builtin_");
|
|
90749
90752
|
let found = Object.keys(files).length > 0;
|
|
90750
90753
|
if (!found && ws.cloudTask) {
|
|
90751
|
-
const
|
|
90752
|
-
if (!
|
|
90753
|
-
if (
|
|
90754
|
-
files =
|
|
90754
|
+
const read2 = await readTaskWorkflow(ws.cloudTask);
|
|
90755
|
+
if (!read2.ok && read2.code !== "not_found") return read2;
|
|
90756
|
+
if (read2.ok) {
|
|
90757
|
+
files = read2.value.files;
|
|
90755
90758
|
found = true;
|
|
90756
90759
|
if (!record.builtin) {
|
|
90757
90760
|
for (const [name, text3] of Object.entries(files)) if (isBoardPath(root + name)) write(path23.join(ws.board, root, name), text3);
|
|
@@ -90866,12 +90869,12 @@ var readHead = (ws) => readBase(ws).head_seq;
|
|
|
90866
90869
|
var pullChanges = (ws) => inFolder(ws.cwd, async () => {
|
|
90867
90870
|
const base = readBase(ws);
|
|
90868
90871
|
if (base.head_seq === null) return { ok: true, value: void 0 };
|
|
90869
|
-
const
|
|
90870
|
-
if (!
|
|
90872
|
+
const read2 = await readBoard(ws.project, base.head_seq);
|
|
90873
|
+
if (!read2.ok) return read2;
|
|
90871
90874
|
const shared = sharedMemory(ws.board);
|
|
90872
90875
|
const root = rootOf(ws);
|
|
90873
90876
|
let skipped = false;
|
|
90874
|
-
for (const f2 of
|
|
90877
|
+
for (const f2 of read2.value.files) {
|
|
90875
90878
|
const p2 = f2.path.startsWith(root) ? f2.path.slice(root.length) : f2.path;
|
|
90876
90879
|
const isShared = p2.startsWith(MEMORY2) && shared(p2.slice(MEMORY2.length));
|
|
90877
90880
|
if (kept3(p2) && isShared === !f2.path.startsWith(root)) {
|
|
@@ -90887,7 +90890,7 @@ var pullChanges = (ws) => inFolder(ws.cwd, async () => {
|
|
|
90887
90890
|
if (f2.content === null) delete base.files[f2.path];
|
|
90888
90891
|
else base.files[f2.path] = { seq: f2.seq, content: f2.content };
|
|
90889
90892
|
}
|
|
90890
|
-
if (!skipped) base.head_seq =
|
|
90893
|
+
if (!skipped) base.head_seq = read2.value.head_seq;
|
|
90891
90894
|
writeBase(ws, base);
|
|
90892
90895
|
writeIndex(ws.board);
|
|
90893
90896
|
return { ok: true, value: void 0 };
|
|
@@ -90900,14 +90903,14 @@ async function readCloud(ws) {
|
|
|
90900
90903
|
if (!project.ok) return project;
|
|
90901
90904
|
base.workspace = project.value.workspace ?? null;
|
|
90902
90905
|
}
|
|
90903
|
-
const
|
|
90904
|
-
if (!
|
|
90906
|
+
const read2 = await readBoard(ws.project, base.head_seq);
|
|
90907
|
+
if (!read2.ok) return read2;
|
|
90905
90908
|
if (base.head_seq === null) base.files = {};
|
|
90906
|
-
for (const f2 of
|
|
90909
|
+
for (const f2 of read2.value.files) {
|
|
90907
90910
|
if (f2.content === null) delete base.files[f2.path];
|
|
90908
90911
|
else base.files[f2.path] = { seq: f2.seq, content: f2.content };
|
|
90909
90912
|
}
|
|
90910
|
-
base.head_seq =
|
|
90913
|
+
base.head_seq = read2.value.head_seq;
|
|
90911
90914
|
base.project = ws.project;
|
|
90912
90915
|
writeBase(ws, base);
|
|
90913
90916
|
const reset = (view2) => {
|
|
@@ -91231,8 +91234,8 @@ function watchBoards(machineId2, ms, lookMs = LOOK_MS, pullMs = PULL_MS, busyMs
|
|
|
91231
91234
|
if (closed) return;
|
|
91232
91235
|
if (busy(ws.cwd)) return void afterJob.add(ws.cwd);
|
|
91233
91236
|
afterJob.delete(ws.cwd);
|
|
91234
|
-
const
|
|
91235
|
-
if (!
|
|
91237
|
+
const read2 = await pullChanges(ws);
|
|
91238
|
+
if (!read2.ok && read2.code) console.error(`runner: the board in ${ws.cwd} was not read: ${read2.error}`);
|
|
91236
91239
|
};
|
|
91237
91240
|
const send3 = async (ws) => {
|
|
91238
91241
|
const sent = await pushBoard(ws, machineId2);
|
|
@@ -91391,9 +91394,114 @@ async function answerHint(machineId2, hint2) {
|
|
|
91391
91394
|
if (!sent.ok) console.error(`runner: the diff of ${commit.slice(0, 7)} was not sent: ${sent.error}`);
|
|
91392
91395
|
}
|
|
91393
91396
|
|
|
91397
|
+
// ../cli/src/lib/agent/stop.ts
|
|
91398
|
+
import { spawnSync as spawnSync5 } from "node:child_process";
|
|
91399
|
+
import fs23 from "node:fs";
|
|
91400
|
+
var runMark = (sessionId) => ({ name: RUN_ENV, value: sessionId });
|
|
91401
|
+
var WINDOWS3 = process.platform === "win32";
|
|
91402
|
+
function markedInProc(entry, strict = false) {
|
|
91403
|
+
const pids = [];
|
|
91404
|
+
for (const name of fs23.readdirSync("/proc")) {
|
|
91405
|
+
if (!/^\d+$/.test(name)) continue;
|
|
91406
|
+
try {
|
|
91407
|
+
if (fs23.readFileSync(`/proc/${name}/environ`, "utf8").split("\0").includes(entry)) pids.push(Number(name));
|
|
91408
|
+
} catch (error) {
|
|
91409
|
+
if (strict && !["ENOENT", "ESRCH"].includes(error.code ?? "")) {
|
|
91410
|
+
const stat = fs23.statSync(`/proc/${name}`, { throwIfNoEntry: false });
|
|
91411
|
+
if (stat?.uid === process.getuid?.()) throw error;
|
|
91412
|
+
}
|
|
91413
|
+
}
|
|
91414
|
+
}
|
|
91415
|
+
return pids;
|
|
91416
|
+
}
|
|
91417
|
+
function markedInPs(entry, roots) {
|
|
91418
|
+
const ps = spawnSync5("ps", ["-A", "-E", "-ww", "-o", "pid=,ppid=,command="], {
|
|
91419
|
+
encoding: "utf8",
|
|
91420
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
91421
|
+
timeout: 5e3
|
|
91422
|
+
});
|
|
91423
|
+
if (ps.status !== 0 || !ps.stdout) throw new Error("\u65E0\u6CD5\u67E5\u8BE2\u8FDB\u7A0B\u6811\u3002");
|
|
91424
|
+
const children = /* @__PURE__ */ new Map();
|
|
91425
|
+
const listed2 = /* @__PURE__ */ new Set();
|
|
91426
|
+
const found = /* @__PURE__ */ new Set();
|
|
91427
|
+
for (const line of ps.stdout.split("\n")) {
|
|
91428
|
+
const m = /^\s*(\d+)\s+(\d+)\s(.*)$/.exec(line);
|
|
91429
|
+
if (!m) continue;
|
|
91430
|
+
const pid = Number(m[1]);
|
|
91431
|
+
const ppid = Number(m[2]);
|
|
91432
|
+
listed2.add(pid);
|
|
91433
|
+
children.set(ppid, [...children.get(ppid) ?? [], pid]);
|
|
91434
|
+
if (`${m[3]} `.includes(` ${entry} `)) found.add(pid);
|
|
91435
|
+
}
|
|
91436
|
+
const queue = [...found, ...roots.filter((pid) => listed2.has(pid))];
|
|
91437
|
+
for (const pid of queue) {
|
|
91438
|
+
found.add(pid);
|
|
91439
|
+
for (const child of children.get(pid) ?? []) if (!found.has(child)) queue.push(child);
|
|
91440
|
+
}
|
|
91441
|
+
return [...found];
|
|
91442
|
+
}
|
|
91443
|
+
function startedUnder(list, root, since) {
|
|
91444
|
+
const self2 = list.procs.find((p2) => p2.pid === root);
|
|
91445
|
+
const from = since ?? self2?.startedAt;
|
|
91446
|
+
if (from === void 0 || list.bootedAt > from) return [];
|
|
91447
|
+
if (self2 && self2.startedAt > from) return [];
|
|
91448
|
+
const found = self2 ? [root] : [];
|
|
91449
|
+
const seen = /* @__PURE__ */ new Set([root]);
|
|
91450
|
+
const queue = [{ pid: root, startedAt: from }];
|
|
91451
|
+
for (const parent of queue) {
|
|
91452
|
+
for (const p2 of list.procs) {
|
|
91453
|
+
if (p2.ppid !== parent.pid || seen.has(p2.pid) || p2.startedAt < parent.startedAt) continue;
|
|
91454
|
+
seen.add(p2.pid);
|
|
91455
|
+
found.push(p2.pid);
|
|
91456
|
+
queue.push(p2);
|
|
91457
|
+
}
|
|
91458
|
+
}
|
|
91459
|
+
return found.reverse();
|
|
91460
|
+
}
|
|
91461
|
+
var LIST_PROCS = [
|
|
91462
|
+
"$ErrorActionPreference = 'Stop'",
|
|
91463
|
+
"Get-CimInstance Win32_Process | ForEach-Object { if ($_.CreationDate) { '{0} {1} {2}' -f $_.ProcessId, $_.ParentProcessId, ([DateTimeOffset]$_.CreationDate).ToUnixTimeMilliseconds() } }",
|
|
91464
|
+
"'boot {0}' -f ([DateTimeOffset](Get-CimInstance Win32_OperatingSystem).LastBootUpTime).ToUnixTimeMilliseconds()"
|
|
91465
|
+
].join("; ");
|
|
91466
|
+
function readProcList(out) {
|
|
91467
|
+
const procs = [];
|
|
91468
|
+
let bootedAt;
|
|
91469
|
+
for (const line of out.split(/\r?\n/)) {
|
|
91470
|
+
const boot = /^boot (\d+)$/.exec(line.trim());
|
|
91471
|
+
if (boot) bootedAt = Number(boot[1]);
|
|
91472
|
+
const m = /^(\d+) (\d+) (\d+)$/.exec(line.trim());
|
|
91473
|
+
if (m) procs.push({ pid: Number(m[1]), ppid: Number(m[2]), startedAt: Number(m[3]) });
|
|
91474
|
+
}
|
|
91475
|
+
return bootedAt !== void 0 && procs.length ? { procs, bootedAt } : void 0;
|
|
91476
|
+
}
|
|
91477
|
+
function procsOnWindows() {
|
|
91478
|
+
const ps = spawnSync5("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", LIST_PROCS], {
|
|
91479
|
+
encoding: "utf8",
|
|
91480
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
91481
|
+
timeout: 5e3,
|
|
91482
|
+
windowsHide: true
|
|
91483
|
+
});
|
|
91484
|
+
return ps.status === 0 && ps.stdout ? readProcList(ps.stdout) : void 0;
|
|
91485
|
+
}
|
|
91486
|
+
function processesStopped(mark, root) {
|
|
91487
|
+
try {
|
|
91488
|
+
if (WINDOWS3) {
|
|
91489
|
+
const list = procsOnWindows();
|
|
91490
|
+
if (!list || !root) return false;
|
|
91491
|
+
const current = list.procs.find((p2) => p2.pid === root.pid);
|
|
91492
|
+
if (current && current.startedAt > root.since) return false;
|
|
91493
|
+
return startedUnder(list, root.pid, root.since).length === 0;
|
|
91494
|
+
}
|
|
91495
|
+
const entry = `${mark.name}=${mark.value}`;
|
|
91496
|
+
return (process.platform === "linux" ? markedInProc(entry, true) : markedInPs(entry, root ? [root.pid] : [])).length === 0;
|
|
91497
|
+
} catch {
|
|
91498
|
+
return false;
|
|
91499
|
+
}
|
|
91500
|
+
}
|
|
91501
|
+
|
|
91394
91502
|
// src/flow.ts
|
|
91395
|
-
import
|
|
91396
|
-
import
|
|
91503
|
+
import fs28 from "node:fs";
|
|
91504
|
+
import path30 from "node:path";
|
|
91397
91505
|
|
|
91398
91506
|
// ../cli/src/lib/question-block.ts
|
|
91399
91507
|
var MODES = ["single", "multi"];
|
|
@@ -91551,7 +91659,7 @@ function reviewOf(meta) {
|
|
|
91551
91659
|
}
|
|
91552
91660
|
|
|
91553
91661
|
// src/triage.ts
|
|
91554
|
-
import
|
|
91662
|
+
import fs24 from "node:fs";
|
|
91555
91663
|
import path26 from "node:path";
|
|
91556
91664
|
|
|
91557
91665
|
// ../cli/src/lib/signals/identity.ts
|
|
@@ -91576,7 +91684,7 @@ function slugOf(title) {
|
|
|
91576
91684
|
function freeName(dir, title) {
|
|
91577
91685
|
const stem = slugOf(title);
|
|
91578
91686
|
let name = `${stem}.md`;
|
|
91579
|
-
for (let n = 2;
|
|
91687
|
+
for (let n = 2; fs24.existsSync(path26.join(dir, name)); n++) name = `${stem}-${n}.md`;
|
|
91580
91688
|
return name;
|
|
91581
91689
|
}
|
|
91582
91690
|
function itemText(item, fields = {}) {
|
|
@@ -91596,17 +91704,17 @@ ${item.text.trim()}
|
|
|
91596
91704
|
`;
|
|
91597
91705
|
}
|
|
91598
91706
|
function writeItem(dir, item, fields = {}) {
|
|
91599
|
-
|
|
91707
|
+
fs24.mkdirSync(dir, { recursive: true });
|
|
91600
91708
|
const name = freeName(dir, item.title);
|
|
91601
|
-
|
|
91709
|
+
fs24.writeFileSync(path26.join(dir, name), itemText(item, item.workflow ? { workflow: workflowName(item.workflow), ...fields } : fields));
|
|
91602
91710
|
return name;
|
|
91603
91711
|
}
|
|
91604
91712
|
function layOut(board, rejections) {
|
|
91605
91713
|
clearLaid(board);
|
|
91606
91714
|
const dir = rejectedDir(board);
|
|
91607
|
-
|
|
91715
|
+
fs24.mkdirSync(dir, { recursive: true });
|
|
91608
91716
|
for (const t2 of rejections.tasks) {
|
|
91609
|
-
|
|
91717
|
+
fs24.writeFileSync(path26.join(dir, `${t2.number}-${slugify(t2.title)}.md`), [
|
|
91610
91718
|
"---",
|
|
91611
91719
|
`title: ${yamlScalar(t2.title)}`,
|
|
91612
91720
|
"status: todo",
|
|
@@ -91628,14 +91736,156 @@ function layOut(board, rejections) {
|
|
|
91628
91736
|
return { tasks: rejections.tasks.map((t2) => t2.id), triage: rejections.triage.map((i) => i.id) };
|
|
91629
91737
|
}
|
|
91630
91738
|
function clearLaid(board) {
|
|
91631
|
-
|
|
91632
|
-
for (const sub of SCRATCH)
|
|
91739
|
+
fs24.rmSync(rejectedDir(board), { recursive: true, force: true });
|
|
91740
|
+
for (const sub of SCRATCH) fs24.rmSync(path26.join(triageDir(board), sub), { recursive: true, force: true });
|
|
91633
91741
|
}
|
|
91634
91742
|
|
|
91635
|
-
// src/
|
|
91636
|
-
import
|
|
91743
|
+
// src/kanban-skill.ts
|
|
91744
|
+
import fs25 from "node:fs";
|
|
91637
91745
|
import path27 from "node:path";
|
|
91638
91746
|
|
|
91747
|
+
// ../skill/SKILL.md
|
|
91748
|
+
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';
|
|
91749
|
+
|
|
91750
|
+
// src/kanban-skill.ts
|
|
91751
|
+
var CONTENT = `${SKILL_default.trimEnd()}
|
|
91752
|
+
|
|
91753
|
+
<!-- ai4kanban managed -->
|
|
91754
|
+
`;
|
|
91755
|
+
var MANAGED = /^<!-- ai4kanban \S+ -->$/m;
|
|
91756
|
+
function prepareKanbanSkill(root) {
|
|
91757
|
+
for (const folder of SKILL_FOLDERS) {
|
|
91758
|
+
const dir = path27.join(root, folder);
|
|
91759
|
+
const file2 = path27.join(dir, "SKILL.md");
|
|
91760
|
+
try {
|
|
91761
|
+
let linked = false;
|
|
91762
|
+
let at2 = root;
|
|
91763
|
+
for (const name of `${folder}/SKILL.md`.split("/")) {
|
|
91764
|
+
at2 = path27.join(at2, name);
|
|
91765
|
+
if (fs25.lstatSync(at2, { throwIfNoEntry: false })?.isSymbolicLink()) linked = true;
|
|
91766
|
+
}
|
|
91767
|
+
const held4 = fs25.existsSync(file2) ? fs25.readFileSync(file2, "utf8") : null;
|
|
91768
|
+
const exists = fs25.lstatSync(dir, { throwIfNoEntry: false }) !== void 0;
|
|
91769
|
+
if (linked || exists && !MANAGED.test(held4 ?? "")) {
|
|
91770
|
+
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");
|
|
91771
|
+
continue;
|
|
91772
|
+
}
|
|
91773
|
+
if (held4 !== CONTENT) {
|
|
91774
|
+
fs25.mkdirSync(dir, { recursive: true });
|
|
91775
|
+
fs25.writeFileSync(file2, CONTENT);
|
|
91776
|
+
}
|
|
91777
|
+
} catch (e2) {
|
|
91778
|
+
throw new Error(`\u65E0\u6CD5\u51C6\u5907 ${folder}\uFF1A${e2 instanceof Error ? e2.message : String(e2)}`);
|
|
91779
|
+
}
|
|
91780
|
+
}
|
|
91781
|
+
}
|
|
91782
|
+
|
|
91783
|
+
// ../cli/src/lib/skill/hook.ts
|
|
91784
|
+
import { spawnSync as spawnSync6 } from "node:child_process";
|
|
91785
|
+
import fs26 from "node:fs";
|
|
91786
|
+
import path28 from "node:path";
|
|
91787
|
+
var MARKER = "# ai4kanban commit guard";
|
|
91788
|
+
var MARKER_LINE = new RegExp(`^${MARKER}\\b`, "m");
|
|
91789
|
+
var CHECK = [
|
|
91790
|
+
"try{",
|
|
91791
|
+
'const[top,branch]=require("child_process")',
|
|
91792
|
+
'.execFileSync("git",["rev-parse","--show-toplevel","--abbrev-ref","HEAD"],{encoding:"utf8"}).trim().split("\\n");',
|
|
91793
|
+
'if(/\\/\\.akb\\/worktrees\\//.test(top+"/"))process.exit(0);',
|
|
91794
|
+
'const d=(JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")).deliveries||[])',
|
|
91795
|
+
'.find((x)=>x&&x.status==="active"&&x.commitMode==="auto"&&x.targetBranch===branch&&(!x.landing||x.landing.status!=="landed"));',
|
|
91796
|
+
"if(!d)process.exit(0);",
|
|
91797
|
+
"process.stderr.write(",
|
|
91798
|
+
'"ai4kanban: delivery "+d.deliveryId+" is landing #"+d.cardId+" on "+branch+", so a commit here moves the target under it\\n"',
|
|
91799
|
+
'+" \u2014 commit on another branch, or `git commit --no-verify` to commit anyway.\\n");',
|
|
91800
|
+
"process.exit(1);",
|
|
91801
|
+
"}catch(e){process.exit(0)}"
|
|
91802
|
+
].join("");
|
|
91803
|
+
var quoted = (p2) => `"${p2.replace(/(["$`\\])/g, "\\$1")}"`;
|
|
91804
|
+
var guardLine = (sessions) => `if command -v node >/dev/null 2>&1; then node -e '${CHECK}' ${quoted(sessions)} || exit 1; fi`;
|
|
91805
|
+
function hookScript(sessions) {
|
|
91806
|
+
return [
|
|
91807
|
+
"#!/bin/sh",
|
|
91808
|
+
`${MARKER} ${SKILL_VERSION} \u2014 \u7531 Runner \u7BA1\u7406\uFF0C\u4FEE\u6539\u4F1A\u88AB\u8986\u76D6\u3002`,
|
|
91809
|
+
"#",
|
|
91810
|
+
"# Refuses a commit on the branch a delivery is landing on, and nothing else. Anything",
|
|
91811
|
+
"# it cannot judge lets the commit through. `git commit --no-verify` gets past it, and",
|
|
91812
|
+
"# deleting this file turns it off.",
|
|
91813
|
+
guardLine(sessions),
|
|
91814
|
+
"exit 0",
|
|
91815
|
+
""
|
|
91816
|
+
].join("\n");
|
|
91817
|
+
}
|
|
91818
|
+
var read = (file2) => {
|
|
91819
|
+
try {
|
|
91820
|
+
return fs26.readFileSync(file2, "utf8");
|
|
91821
|
+
} catch {
|
|
91822
|
+
return null;
|
|
91823
|
+
}
|
|
91824
|
+
};
|
|
91825
|
+
function hooksDir(root) {
|
|
91826
|
+
const out = spawnSync6("git", ["rev-parse", "--git-path", "hooks"], {
|
|
91827
|
+
cwd: root,
|
|
91828
|
+
encoding: "utf8",
|
|
91829
|
+
windowsHide: true
|
|
91830
|
+
});
|
|
91831
|
+
if (out.error || out.status !== 0 || !out.stdout.trim()) return null;
|
|
91832
|
+
return path28.resolve(root, out.stdout.trim());
|
|
91833
|
+
}
|
|
91834
|
+
function hasOwnHooksPath(root) {
|
|
91835
|
+
const out = spawnSync6("git", ["config", "--get", "core.hooksPath"], {
|
|
91836
|
+
cwd: root,
|
|
91837
|
+
encoding: "utf8",
|
|
91838
|
+
windowsHide: true
|
|
91839
|
+
});
|
|
91840
|
+
return !out.error && out.status === 0 && !!out.stdout.trim();
|
|
91841
|
+
}
|
|
91842
|
+
var sessionsPath = (root, board) => path28.join(projectStateDir(board, root), SESSIONS_FILE);
|
|
91843
|
+
function readCommitHook(root, board = path28.join(root, "docs", "kanban")) {
|
|
91844
|
+
const dir = hooksDir(root);
|
|
91845
|
+
if (!dir) return { state: "no-git" };
|
|
91846
|
+
const where = shown(root, path28.join(dir, "pre-commit"));
|
|
91847
|
+
const line = guardLine(sessionsPath(root, board));
|
|
91848
|
+
if (hasOwnHooksPath(root)) return { state: "hooks-path", path: where, line };
|
|
91849
|
+
const file2 = path28.join(dir, "pre-commit");
|
|
91850
|
+
if (fs26.lstatSync(file2, { throwIfNoEntry: false })?.isSymbolicLink()) return { state: "foreign", path: where, line };
|
|
91851
|
+
const text3 = read(file2);
|
|
91852
|
+
if (text3 === null) return { state: "absent", path: where };
|
|
91853
|
+
return MARKER_LINE.test(text3) ? { state: "ours", path: where } : { state: "foreign", path: where, line };
|
|
91854
|
+
}
|
|
91855
|
+
var shown = (root, p2) => (path28.relative(root, p2) || p2).split(path28.sep).join("/");
|
|
91856
|
+
function installCommitHook(root, board = path28.join(root, "docs", "kanban")) {
|
|
91857
|
+
try {
|
|
91858
|
+
return placeCommitHook(root, board);
|
|
91859
|
+
} catch (e2) {
|
|
91860
|
+
return { note: `\u63D0\u4EA4\u4FDD\u62A4\u65E0\u6CD5\u51C6\u5907\uFF1A${e2 instanceof Error ? e2.message : String(e2)}` };
|
|
91861
|
+
}
|
|
91862
|
+
}
|
|
91863
|
+
function placeCommitHook(root, board) {
|
|
91864
|
+
const hook = readCommitHook(root, board);
|
|
91865
|
+
if (hook.state === "no-git") return {};
|
|
91866
|
+
if (hook.state === "hooks-path" || hook.state === "foreign") {
|
|
91867
|
+
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`;
|
|
91868
|
+
return {
|
|
91869
|
+
note: `${why} \u2014 add this line to ${hook.path} to refuse a commit on the branch a delivery is landing on:
|
|
91870
|
+
${hook.line}`
|
|
91871
|
+
};
|
|
91872
|
+
}
|
|
91873
|
+
const file2 = path28.join(root, hook.path);
|
|
91874
|
+
try {
|
|
91875
|
+
fs26.mkdirSync(path28.dirname(file2), { recursive: true });
|
|
91876
|
+
const text3 = hookScript(sessionsPath(root, board));
|
|
91877
|
+
if (read(file2) !== text3) fs26.writeFileSync(file2, text3, { mode: 493 });
|
|
91878
|
+
fs26.chmodSync(file2, 493);
|
|
91879
|
+
} catch (e2) {
|
|
91880
|
+
return { note: `${hook.path} could not be written \u2014 ${e2 instanceof Error ? e2.message : String(e2)}` };
|
|
91881
|
+
}
|
|
91882
|
+
return { wrote: { path: hook.path, refreshed: hook.state === "ours" } };
|
|
91883
|
+
}
|
|
91884
|
+
|
|
91885
|
+
// src/built.ts
|
|
91886
|
+
import fs27 from "node:fs";
|
|
91887
|
+
import path29 from "node:path";
|
|
91888
|
+
|
|
91639
91889
|
// ../cli/src/lib/spec-agent-names.ts
|
|
91640
91890
|
var LEGACY_SPEC_AGENT_NAMES = {
|
|
91641
91891
|
"recommend-tech-stack": "tech-stack-advisor",
|
|
@@ -91731,13 +91981,13 @@ function folderPath(file2, top) {
|
|
|
91731
91981
|
return [parts[1], parts.slice(2).join("/")];
|
|
91732
91982
|
}
|
|
91733
91983
|
function mcpProblem(text3) {
|
|
91734
|
-
let
|
|
91984
|
+
let read2;
|
|
91735
91985
|
try {
|
|
91736
|
-
|
|
91986
|
+
read2 = JSON.parse(text3);
|
|
91737
91987
|
} catch {
|
|
91738
91988
|
return "is not JSON";
|
|
91739
91989
|
}
|
|
91740
|
-
const servers =
|
|
91990
|
+
const servers = read2?.mcpServers;
|
|
91741
91991
|
if (!servers || typeof servers !== "object" || Array.isArray(servers)) return "must hold `mcpServers`, an object of name \u2192 server";
|
|
91742
91992
|
for (const [name, server] of Object.entries(servers)) {
|
|
91743
91993
|
const { command, args, ...rest } = server ?? {};
|
|
@@ -91784,9 +92034,9 @@ function checkWorkflowFiles(value, official = false) {
|
|
|
91784
92034
|
}
|
|
91785
92035
|
const source = value[WORKFLOW_FILE];
|
|
91786
92036
|
if (source === void 0) return fail(WORKFLOW_FILE, "is missing");
|
|
91787
|
-
const
|
|
91788
|
-
if ("problem" in
|
|
91789
|
-
const def =
|
|
92037
|
+
const read2 = parseWorkflowFile("workflow", source, WORKFLOW_FILE);
|
|
92038
|
+
if ("problem" in read2) return fail(WORKFLOW_FILE, read2.problem.replace(`${WORKFLOW_FILE}: `, ""));
|
|
92039
|
+
const def = read2.def;
|
|
91790
92040
|
const agents = /* @__PURE__ */ new Map();
|
|
91791
92041
|
for (const [name, own] of folders2) {
|
|
91792
92042
|
const from = `agents/${name}/AGENT.md`;
|
|
@@ -91810,26 +92060,26 @@ function checkWorkflowFiles(value, official = false) {
|
|
|
91810
92060
|
|
|
91811
92061
|
// src/built.ts
|
|
91812
92062
|
var isBuilder = (ws) => ws.workflow === BUILDER;
|
|
91813
|
-
var draftDir = (ws) =>
|
|
91814
|
-
var draftLine = (ws) => `<!-- workflow folder: ${
|
|
92063
|
+
var draftDir = (ws) => path29.join(ws.board, "workflows", draftFolder(ws.task));
|
|
92064
|
+
var draftLine = (ws) => `<!-- workflow folder: ${path29.relative(ws.cwd, draftDir(ws)).split(path29.sep).join("/")}/ -->`;
|
|
91815
92065
|
var skeleton = (name) => ["---", `name: ${/\s#/.test(name) ? JSON.stringify(name) : yamlScalar(name)}`, "needsArtifact: false", "---", ""].join("\n");
|
|
91816
|
-
async function placeDraft(ws,
|
|
92066
|
+
async function placeDraft(ws, read2) {
|
|
91817
92067
|
const dir = draftDir(ws);
|
|
91818
|
-
if (
|
|
91819
|
-
const task = await
|
|
92068
|
+
if (fs27.existsSync(path29.join(dir, WORKFLOW_FILE))) return { ok: true, value: void 0 };
|
|
92069
|
+
const task = await read2.readTask(ws.task);
|
|
91820
92070
|
if (!task.ok) return task;
|
|
91821
92071
|
let files = { [WORKFLOW_FILE]: skeleton(task.value.title.trim() || "Untitled") };
|
|
91822
92072
|
const changes = task.value.context?.workflow;
|
|
91823
92073
|
if (changes) {
|
|
91824
|
-
const held4 = await
|
|
92074
|
+
const held4 = await read2.readWorkflow(changes);
|
|
91825
92075
|
if (!held4.ok) return held4;
|
|
91826
92076
|
files = held4.value.files;
|
|
91827
92077
|
}
|
|
91828
92078
|
for (const [name, text3] of Object.entries(files)) {
|
|
91829
|
-
const file2 =
|
|
91830
|
-
if (!file2.startsWith(dir +
|
|
91831
|
-
|
|
91832
|
-
|
|
92079
|
+
const file2 = path29.resolve(dir, name);
|
|
92080
|
+
if (!file2.startsWith(dir + path29.sep)) continue;
|
|
92081
|
+
fs27.mkdirSync(path29.dirname(file2), { recursive: true });
|
|
92082
|
+
fs27.writeFileSync(file2, text3);
|
|
91833
92083
|
}
|
|
91834
92084
|
return { ok: true, value: void 0 };
|
|
91835
92085
|
}
|
|
@@ -91841,19 +92091,19 @@ async function builtWorkflow(ws, akb) {
|
|
|
91841
92091
|
const dir = draftDir(ws);
|
|
91842
92092
|
let source;
|
|
91843
92093
|
try {
|
|
91844
|
-
source =
|
|
92094
|
+
source = fs27.readFileSync(path29.join(dir, WORKFLOW_FILE), "utf8");
|
|
91845
92095
|
} catch {
|
|
91846
92096
|
return fail(`workflows/${id}/${WORKFLOW_FILE} is missing.`);
|
|
91847
92097
|
}
|
|
91848
|
-
const
|
|
91849
|
-
if ("problem" in
|
|
91850
|
-
const names2 = named(
|
|
91851
|
-
|
|
92098
|
+
const read2 = parseWorkflowFile(id, source, `workflows/${id}/${WORKFLOW_FILE}`);
|
|
92099
|
+
if ("problem" in read2) return fail(read2.problem);
|
|
92100
|
+
const names2 = named(read2.def);
|
|
92101
|
+
fs27.rmSync(path29.join(dir, "agents"), { recursive: true, force: true });
|
|
91852
92102
|
for (const name of names2) {
|
|
91853
|
-
const from =
|
|
91854
|
-
if (
|
|
92103
|
+
const from = path29.join(ws.board, "agents", name);
|
|
92104
|
+
if (fs27.existsSync(from)) fs27.cpSync(from, path29.join(dir, "agents", name), { recursive: true });
|
|
91855
92105
|
}
|
|
91856
|
-
const files = Object.fromEntries(filesUnder(dir).map((f2) => [f2,
|
|
92106
|
+
const files = Object.fromEntries(filesUnder(dir).map((f2) => [f2, fs27.readFileSync(path29.join(dir, f2), "utf8")]));
|
|
91857
92107
|
const checked = checkWorkflowFiles(files);
|
|
91858
92108
|
if (!checked.ok) return fail(`${checked.file} ${checked.reason}.`);
|
|
91859
92109
|
const run2 = async (args) => answerOf2(await runAkb(akb, [...args, "--json", "--board", ws.board], { cwd: ws.cwd, board: ws.board }));
|
|
@@ -91888,7 +92138,7 @@ function spentBy(runs) {
|
|
|
91888
92138
|
}
|
|
91889
92139
|
function reviewOf2(file2) {
|
|
91890
92140
|
try {
|
|
91891
|
-
const meta = parseFrontmatter(
|
|
92141
|
+
const meta = parseFrontmatter(fs28.readFileSync(file2, "utf8")).meta;
|
|
91892
92142
|
return meta ? reviewOf(meta) : null;
|
|
91893
92143
|
} catch {
|
|
91894
92144
|
return null;
|
|
@@ -91896,8 +92146,8 @@ function reviewOf2(file2) {
|
|
|
91896
92146
|
}
|
|
91897
92147
|
function mcpConfig(servers, file2) {
|
|
91898
92148
|
if (!Object.keys(servers).length) return null;
|
|
91899
|
-
|
|
91900
|
-
|
|
92149
|
+
fs28.mkdirSync(path30.dirname(file2), { recursive: true });
|
|
92150
|
+
fs28.writeFileSync(file2, `${JSON.stringify({ mcpServers: servers }, null, 2)}
|
|
91901
92151
|
`);
|
|
91902
92152
|
return file2;
|
|
91903
92153
|
}
|
|
@@ -91918,21 +92168,25 @@ async function stopRuns(akb, ws, id, since, ms) {
|
|
|
91918
92168
|
while (Date.now() < until) {
|
|
91919
92169
|
const runs = answerOf2(await call(["run", "list", "--card", String(id), "--all", "--json"]))?.runs;
|
|
91920
92170
|
const live = (runs ?? []).filter((r2) => r2.status === "running" && (r2.startedAt ?? 0) >= since);
|
|
91921
|
-
if (!
|
|
92171
|
+
if (!runs) return false;
|
|
92172
|
+
if (!live.length && (runs ?? []).filter((r2) => (r2.startedAt ?? 0) >= since).every((r2) => processesStopped(runMark(r2.sessionId), r2.agentPid && r2.agentStartedAt ? { pid: r2.agentPid, since: r2.agentStartedAt } : void 0))) return true;
|
|
91922
92173
|
for (const r2 of live) await call(["run", "stop", r2.sessionId]);
|
|
91923
92174
|
await wait(250);
|
|
91924
92175
|
}
|
|
92176
|
+
return false;
|
|
91925
92177
|
}
|
|
91926
92178
|
var working = /* @__PURE__ */ new Map();
|
|
91927
92179
|
var workKey = (ws, id) => `${ws.board}#${id}`;
|
|
91928
92180
|
async function stopLeftBehind(akb, ws, id, ms) {
|
|
91929
|
-
if (!working.has(workKey(ws, id))
|
|
92181
|
+
if (!working.has(workKey(ws, id)) && !await stopRuns(akb, ws, id, 0, ms)) {
|
|
92182
|
+
throw new Error("\u672A\u80FD\u505C\u6B62\u4E0A\u6B21\u8FD0\u884C\uFF0C\u8BF7\u7B49\u5F85\u5176\u505C\u6B62\u540E\u7EED\u8DD1\u3002");
|
|
92183
|
+
}
|
|
91930
92184
|
}
|
|
91931
92185
|
function deliveryEnding(ws, id) {
|
|
91932
92186
|
if (!id) return null;
|
|
91933
92187
|
let held4;
|
|
91934
92188
|
try {
|
|
91935
|
-
held4 = JSON.parse(
|
|
92189
|
+
held4 = JSON.parse(fs28.readFileSync(path30.join(ws.board, "deliveries", `${path30.basename(id)}.json`), "utf8"));
|
|
91936
92190
|
} catch {
|
|
91937
92191
|
return null;
|
|
91938
92192
|
}
|
|
@@ -91944,16 +92198,16 @@ function deliveryEnding(ws, id) {
|
|
|
91944
92198
|
return null;
|
|
91945
92199
|
}
|
|
91946
92200
|
function checkoutsOf(ws, id) {
|
|
91947
|
-
const dir =
|
|
92201
|
+
const dir = path30.join(ws.board, "deliveries");
|
|
91948
92202
|
let names2;
|
|
91949
92203
|
try {
|
|
91950
|
-
names2 =
|
|
92204
|
+
names2 = fs28.readdirSync(dir).filter((n) => n.endsWith(".json"));
|
|
91951
92205
|
} catch {
|
|
91952
92206
|
return [];
|
|
91953
92207
|
}
|
|
91954
92208
|
return names2.flatMap((n) => {
|
|
91955
92209
|
try {
|
|
91956
|
-
const held4 = JSON.parse(
|
|
92210
|
+
const held4 = JSON.parse(fs28.readFileSync(path30.join(dir, n), "utf8"));
|
|
91957
92211
|
return held4.cardId === id && held4.worktree && held4.deliveryId ? [held4.deliveryId] : [];
|
|
91958
92212
|
} catch {
|
|
91959
92213
|
return [];
|
|
@@ -92007,38 +92261,34 @@ function boardAkb(job, ws, deps, io, task) {
|
|
|
92007
92261
|
const at2 = args.includes("--") ? args.indexOf("--") : args.length;
|
|
92008
92262
|
const full = [...args.slice(0, at2), "--board", ws.board, ...args.slice(at2)];
|
|
92009
92263
|
const log = show ? logLines(io.show, io.event) : void 0;
|
|
92010
|
-
const ran = await runAkb(deps.akb, full, { cwd: ws.cwd, board: ws.board, task, line: job.languageLine ?? "", env: env2, show: log?.push, track: io.track });
|
|
92264
|
+
const ran = await runAkb(deps.akb, full, { cwd: ws.cwd, board: ws.board, task, line: job.languageLine ?? "", env: { ...env2, AI4KANBAN_EXECUTION: JSON.stringify({ job: job.id, machine: deps.machineId }) }, show: log?.push, track: io.track });
|
|
92011
92265
|
log?.end();
|
|
92012
92266
|
return ran;
|
|
92013
92267
|
};
|
|
92014
92268
|
}
|
|
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
92269
|
async function setUp(job, ws, deps, io) {
|
|
92024
92270
|
const akb = boardAkb(job, ws, deps, io);
|
|
92025
92271
|
const runtime = job.runtime;
|
|
92026
92272
|
const missing = unavailable(runtime, await deps.runtimes());
|
|
92027
92273
|
if (missing) return missing;
|
|
92028
|
-
if (!
|
|
92274
|
+
if (!fs28.existsSync(path30.join(ws.board, "config.md"))) {
|
|
92029
92275
|
const init = await akb(["raw", "init"]);
|
|
92030
92276
|
if (init.code !== 0) return refusal(init);
|
|
92031
92277
|
}
|
|
92032
|
-
|
|
92033
|
-
|
|
92034
|
-
|
|
92278
|
+
try {
|
|
92279
|
+
prepareKanbanSkill(ws.cwd);
|
|
92280
|
+
} catch (e2) {
|
|
92281
|
+
return e2 instanceof Error ? e2.message : String(e2);
|
|
92035
92282
|
}
|
|
92283
|
+
const hook = installCommitHook(ws.cwd, ws.board);
|
|
92284
|
+
if (hook.note) io.show(`${hook.note}
|
|
92285
|
+
`);
|
|
92036
92286
|
const pulled = await pull(ws, deps.machineId);
|
|
92037
92287
|
if (!pulled.ok) return pulled.error;
|
|
92038
92288
|
const used = await akb(["agent", "use", runtime]);
|
|
92039
92289
|
if (used.code !== 0) return refusal(used);
|
|
92040
92290
|
const servers = mcpServersOf(ws);
|
|
92041
|
-
const mcpFile =
|
|
92291
|
+
const mcpFile = path30.join(ws.board, ".sync", `${ws.task}.mcp.json`);
|
|
92042
92292
|
const takes = new Set(settingKeys(runtime));
|
|
92043
92293
|
const given = job.settings ?? {};
|
|
92044
92294
|
const values = { ...given, model: job.model ?? "" };
|
|
@@ -92081,13 +92331,13 @@ async function runReview(job, ws, tasks, deps, io) {
|
|
|
92081
92331
|
async function reviewRejections(job, ws, deps, io) {
|
|
92082
92332
|
const workspace = workspaceOf(ws);
|
|
92083
92333
|
if (!workspace) return { runs: [] };
|
|
92084
|
-
const
|
|
92085
|
-
if (!
|
|
92086
|
-
if (!
|
|
92334
|
+
const read2 = await deps.api.readRejections(workspace);
|
|
92335
|
+
if (!read2.ok) return { runs: [], failure: read2.error };
|
|
92336
|
+
if (!read2.value.tasks.length && !read2.value.triage.length) return { runs: [] };
|
|
92087
92337
|
const since = Date.now();
|
|
92088
92338
|
const akb = boardAkb(job, ws, deps, io);
|
|
92089
92339
|
return withBoard(ws, async (push2) => {
|
|
92090
|
-
const laid = layOut(ws.board,
|
|
92340
|
+
const laid = layOut(ws.board, read2.value);
|
|
92091
92341
|
const ran = await akb(["review-dismissals", "--follow", "--events", "--json"], true);
|
|
92092
92342
|
clearLaid(ws.board);
|
|
92093
92343
|
resetSorted(ws);
|
|
@@ -92106,12 +92356,12 @@ async function learnRejections(job, ws, deps, io) {
|
|
|
92106
92356
|
return runs;
|
|
92107
92357
|
}
|
|
92108
92358
|
async function scheduledEnv(ws, deps) {
|
|
92109
|
-
const
|
|
92110
|
-
if (!
|
|
92111
|
-
console.error(`runner: scheduled agents not read: ${
|
|
92359
|
+
const read2 = await deps.api.readAgents(deps.machineId, ws.project);
|
|
92360
|
+
if (!read2.ok) {
|
|
92361
|
+
console.error(`runner: scheduled agents not read: ${read2.error}`);
|
|
92112
92362
|
return {};
|
|
92113
92363
|
}
|
|
92114
|
-
const names2 =
|
|
92364
|
+
const names2 = read2.value.agents.filter((a3) => a3.workflow).map((a3) => a3.name);
|
|
92115
92365
|
return { [SCHEDULED_AGENTS_ENV]: [...new Set(names2)].join(",") };
|
|
92116
92366
|
}
|
|
92117
92367
|
async function runAgent(job, ws, deps, io) {
|
|
@@ -92138,19 +92388,19 @@ async function runAgent(job, ws, deps, io) {
|
|
|
92138
92388
|
}
|
|
92139
92389
|
function writeTranscript(job, dir) {
|
|
92140
92390
|
if (!job.transcript) return "";
|
|
92141
|
-
const file2 =
|
|
92142
|
-
|
|
92143
|
-
|
|
92391
|
+
const file2 = path30.join(dir, "discussion.md");
|
|
92392
|
+
fs28.mkdirSync(dir, { recursive: true });
|
|
92393
|
+
fs28.writeFileSync(file2, `${job.transcript}
|
|
92144
92394
|
`);
|
|
92145
92395
|
return file2;
|
|
92146
92396
|
}
|
|
92147
92397
|
function pictures(job, ws, id) {
|
|
92148
92398
|
const dir = cardAssetsDir(ws, id);
|
|
92149
92399
|
if (!job.attachments.length || !dir) return "";
|
|
92150
|
-
|
|
92400
|
+
fs28.mkdirSync(dir, { recursive: true });
|
|
92151
92401
|
return job.attachments.map((a3, i) => {
|
|
92152
|
-
const file2 = `${i + 1}-${
|
|
92153
|
-
|
|
92402
|
+
const file2 = `${i + 1}-${path30.basename(a3.name).replace(/[^\w.-]+/g, "-")}`;
|
|
92403
|
+
fs28.writeFileSync(path30.join(dir, file2), Buffer.from(a3.content, "base64"));
|
|
92154
92404
|
return `
|
|
92155
92405
|
<Asset src=".assets/${id}/${file2}" label="${a3.name.replace(/["<>]/g, "") || file2}" />
|
|
92156
92406
|
`;
|
|
@@ -92158,7 +92408,7 @@ function pictures(job, ws, id) {
|
|
|
92158
92408
|
}
|
|
92159
92409
|
function cardFlags(ws, fields) {
|
|
92160
92410
|
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(
|
|
92411
|
+
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
92412
|
const lists = [["--modules", fields.modules ?? []], ["--related", open(fields.related)], ["--blocked-by", open(fields.blocked_by)]];
|
|
92163
92413
|
return [
|
|
92164
92414
|
...fields.priority ? ["--priority", fields.priority] : [],
|
|
@@ -92192,10 +92442,10 @@ async function runFlow(job, ws, deps, io) {
|
|
|
92192
92442
|
const placed = await placeDraft(ws, deps.api);
|
|
92193
92443
|
if (!placed.ok) return fail(placed.error);
|
|
92194
92444
|
}
|
|
92195
|
-
const body =
|
|
92196
|
-
|
|
92445
|
+
const body = path30.join(ws.board, ".sync", `${ws.task}.request.md`);
|
|
92446
|
+
fs28.mkdirSync(path30.dirname(body), { recursive: true });
|
|
92197
92447
|
if (!ws.number) return fail("This task has no number yet.");
|
|
92198
|
-
|
|
92448
|
+
fs28.writeFileSync(body, `${said.request || title}
|
|
92199
92449
|
${isBuilder(ws) ? `
|
|
92200
92450
|
${draftLine(ws)}
|
|
92201
92451
|
` : ""}${pictures(job, ws, ws.number)}`);
|
|
@@ -92213,7 +92463,7 @@ ${draftLine(ws)}
|
|
|
92213
92463
|
...cardFlags(ws, flow.metadata),
|
|
92214
92464
|
"--json"
|
|
92215
92465
|
]));
|
|
92216
|
-
|
|
92466
|
+
fs28.rmSync(body, { force: true });
|
|
92217
92467
|
if (!created.ok) return fail(created.error);
|
|
92218
92468
|
id = created.value;
|
|
92219
92469
|
}
|
|
@@ -92223,19 +92473,27 @@ ${draftLine(ws)}
|
|
|
92223
92473
|
const held4 = working.get(key) ?? 0;
|
|
92224
92474
|
working.set(key, held4 + 1);
|
|
92225
92475
|
try {
|
|
92226
|
-
if (!held4
|
|
92476
|
+
if (!held4 && !await stopRuns(deps.akb, ws, card, 0, deps.stopMs)) {
|
|
92477
|
+
return fail("\u672A\u80FD\u505C\u6B62\u4E0A\u6B21\u8FD0\u884C\uFF0C\u8BF7\u7B49\u5F85\u5176\u505C\u6B62\u540E\u7EED\u8DD1\u3002");
|
|
92478
|
+
}
|
|
92227
92479
|
if (io.lost()) return fail("");
|
|
92228
92480
|
return await workOn(card);
|
|
92229
92481
|
} finally {
|
|
92230
|
-
|
|
92482
|
+
fs28.rmSync(path30.join(ws.board, ".sync", `${ws.task}.discussion`), { recursive: true, force: true });
|
|
92231
92483
|
const left = working.get(key) - 1;
|
|
92232
92484
|
if (left) working.set(key, left);
|
|
92233
92485
|
else working.delete(key);
|
|
92234
92486
|
}
|
|
92235
92487
|
async function workOn(id2) {
|
|
92236
|
-
io.onStop(() =>
|
|
92488
|
+
io.onStop(async () => {
|
|
92489
|
+
if (!await stopRuns(deps.akb, ws, id2, since, deps.stopMs)) throw new Error("\u672A\u80FD\u786E\u8BA4\u539F\u6267\u884C\u5DF2\u505C\u6B62\u3002");
|
|
92490
|
+
});
|
|
92237
92491
|
const verb = flow.verb === "create" ? flow.skip_plan ? "implement" : "refine" : flow.verb;
|
|
92238
92492
|
const text3 = flow.verb === "create" ? "" : (flow.text ?? "").trim();
|
|
92493
|
+
if (flow.resume && verb === "refine") {
|
|
92494
|
+
const review2 = reviewOf2(cardFile(ws));
|
|
92495
|
+
if (review2) return { ok: true, report: { card: id2, ...review2 === true ? {} : { review: review2 } } };
|
|
92496
|
+
}
|
|
92239
92497
|
if (verb === "revise" && !text3) return fail("Say what to change.");
|
|
92240
92498
|
let note = verb === "resolve" || verb === "revise" ? text3 : "";
|
|
92241
92499
|
if (verb === "implement" && flow.resume) {
|
|
@@ -92281,26 +92539,73 @@ ${draftLine(ws)}
|
|
|
92281
92539
|
}
|
|
92282
92540
|
function carryArgs(verb) {
|
|
92283
92541
|
if (!["refine", "resolve", "revise", "implement"].includes(verb)) return [];
|
|
92284
|
-
const transcript = writeTranscript(job,
|
|
92542
|
+
const transcript = writeTranscript(job, path30.join(ws.board, ".sync", `${ws.task}.discussion`));
|
|
92285
92543
|
return [
|
|
92286
92544
|
...job.resume ? ["--session", job.resume, ...job.fork ? ["--fork"] : []] : [],
|
|
92287
92545
|
...transcript ? ["--transcript", transcript] : []
|
|
92288
92546
|
];
|
|
92289
92547
|
}
|
|
92290
92548
|
}
|
|
92549
|
+
async function confirmFlowStopped(ws, job, deps) {
|
|
92550
|
+
const id = akbCardOf(ws) ?? job.number;
|
|
92551
|
+
if (!id) return false;
|
|
92552
|
+
const ran = await runAkb(deps.akb, ["run", "list", "--card", String(id), "--all", "--json", "--board", ws.board], { cwd: ws.cwd, board: ws.board });
|
|
92553
|
+
const runs = answerOf2(ran)?.runs;
|
|
92554
|
+
return !!runs && runs.every((r2) => r2.status !== "running" && processesStopped(
|
|
92555
|
+
runMark(r2.sessionId),
|
|
92556
|
+
r2.agentPid && r2.agentStartedAt ? { pid: r2.agentPid, since: r2.agentStartedAt } : void 0
|
|
92557
|
+
));
|
|
92558
|
+
}
|
|
92559
|
+
|
|
92560
|
+
// src/recovery.ts
|
|
92561
|
+
import fs29 from "node:fs";
|
|
92562
|
+
import path31 from "node:path";
|
|
92563
|
+
var PREPARE_REASON = "Runner update prepare.";
|
|
92564
|
+
var UPDATE_REASON = "Runner update checkpoint.";
|
|
92565
|
+
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";
|
|
92566
|
+
var fileOf = (id) => path31.join(runnerHome(), "checkpoints", `${encodeURIComponent(id)}.json`);
|
|
92567
|
+
function readCheckpoint(id) {
|
|
92568
|
+
try {
|
|
92569
|
+
const held4 = JSON.parse(fs29.readFileSync(fileOf(id), "utf8"));
|
|
92570
|
+
if (!held4 || !Array.isArray(held4.pending) || !held4.pending.every((id2) => typeof id2 === "string")) throw new Error("\u8FDB\u5EA6\u683C\u5F0F\u9519\u8BEF");
|
|
92571
|
+
return held4;
|
|
92572
|
+
} catch (e2) {
|
|
92573
|
+
if (e2.code === "ENOENT") return null;
|
|
92574
|
+
return { updating: true, started: true, pending: ["unknown"] };
|
|
92575
|
+
}
|
|
92576
|
+
}
|
|
92577
|
+
function saveCheckpoint(id, checkpoint) {
|
|
92578
|
+
const file2 = fileOf(id);
|
|
92579
|
+
fs29.mkdirSync(path31.dirname(file2), { recursive: true, mode: 448 });
|
|
92580
|
+
fs29.writeFileSync(`${file2}.tmp`, JSON.stringify(checkpoint), { mode: 384 });
|
|
92581
|
+
fs29.renameSync(`${file2}.tmp`, file2);
|
|
92582
|
+
}
|
|
92583
|
+
function clearCheckpoint(id) {
|
|
92584
|
+
fs29.rmSync(fileOf(id), { force: true });
|
|
92585
|
+
}
|
|
92586
|
+
function checkpointEvent(checkpoint, event2) {
|
|
92587
|
+
if (event2.kind === "tool_call") {
|
|
92588
|
+
const { toolCallId, status: status2, kind } = event2.data;
|
|
92589
|
+
if (["completed", "failed"].includes(status2)) checkpoint.pending = checkpoint.pending.filter((id) => id !== toolCallId);
|
|
92590
|
+
if (!["read", "search", "fetch"].includes(kind) && !["completed", "failed"].includes(status2) && !checkpoint.pending.includes(toolCallId)) checkpoint.pending.push(toolCallId);
|
|
92591
|
+
}
|
|
92592
|
+
if (event2.kind === "tool_call_update" && ["completed", "failed"].includes(event2.data.status)) {
|
|
92593
|
+
checkpoint.pending = checkpoint.pending.filter((id) => id !== event2.data.toolCallId);
|
|
92594
|
+
}
|
|
92595
|
+
}
|
|
92291
92596
|
|
|
92292
92597
|
// src/lock.ts
|
|
92293
92598
|
import crypto4 from "node:crypto";
|
|
92294
|
-
import
|
|
92599
|
+
import fs30 from "node:fs";
|
|
92295
92600
|
import net from "node:net";
|
|
92296
|
-
import
|
|
92601
|
+
import path32 from "node:path";
|
|
92297
92602
|
var RETRY_MS = 5e3;
|
|
92298
92603
|
var KIND_MS = 1e3;
|
|
92299
92604
|
var HOLDERS = ["claude-code", "codex", "terminal"];
|
|
92300
92605
|
function lockPath() {
|
|
92301
92606
|
const home4 = runnerHome();
|
|
92302
92607
|
if (process.platform === "win32") return `\\\\.\\pipe\\wildcrane-${crypto4.createHash("sha256").update(home4).digest("hex").slice(0, 16)}`;
|
|
92303
|
-
return
|
|
92608
|
+
return path32.join(home4, "runner.sock");
|
|
92304
92609
|
}
|
|
92305
92610
|
function holdMachine(kind, onHeld, onWaiting) {
|
|
92306
92611
|
const where = lockPath();
|
|
@@ -92315,7 +92620,7 @@ function holdMachine(kind, onHeld, onWaiting) {
|
|
|
92315
92620
|
const attempt = () => {
|
|
92316
92621
|
timer = null;
|
|
92317
92622
|
if (closed) return;
|
|
92318
|
-
if (process.platform !== "win32")
|
|
92623
|
+
if (process.platform !== "win32") fs30.mkdirSync(path32.dirname(where), { recursive: true, mode: 448 });
|
|
92319
92624
|
const s = net.createServer((peer) => {
|
|
92320
92625
|
peers.add(peer);
|
|
92321
92626
|
peer.on("error", () => {
|
|
@@ -92363,7 +92668,7 @@ function holdMachine(kind, onHeld, onWaiting) {
|
|
|
92363
92668
|
later(0);
|
|
92364
92669
|
});
|
|
92365
92670
|
removeIfStill.once("error", () => {
|
|
92366
|
-
|
|
92671
|
+
fs30.rmSync(where, { force: true });
|
|
92367
92672
|
later(50 + Math.random() * 200);
|
|
92368
92673
|
});
|
|
92369
92674
|
return;
|
|
@@ -92391,33 +92696,140 @@ function holdMachine(kind, onHeld, onWaiting) {
|
|
|
92391
92696
|
};
|
|
92392
92697
|
}
|
|
92393
92698
|
|
|
92699
|
+
// src/handoff.ts
|
|
92700
|
+
import crypto5 from "node:crypto";
|
|
92701
|
+
import fs31 from "node:fs";
|
|
92702
|
+
import path33 from "node:path";
|
|
92703
|
+
import { execFileSync } from "node:child_process";
|
|
92704
|
+
var digest = (value) => crypto5.createHash("sha256").update(value).digest("hex");
|
|
92705
|
+
var git3 = (cwd, ...args) => execFileSync("git", ["-C", cwd, ...args], { encoding: "utf8", timeout: 15e3, maxBuffer: 16 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
|
|
92706
|
+
function authorizedFolder(folder) {
|
|
92707
|
+
if (!folder) return null;
|
|
92708
|
+
try {
|
|
92709
|
+
const real = fs31.realpathSync(folder);
|
|
92710
|
+
return allowedProjects().some((root) => real === root || real.startsWith(root + path33.sep)) ? real : null;
|
|
92711
|
+
} catch {
|
|
92712
|
+
return null;
|
|
92713
|
+
}
|
|
92714
|
+
}
|
|
92715
|
+
function progressFolder(job, folder) {
|
|
92716
|
+
const token = job.handoff?.progressIsolation;
|
|
92717
|
+
if (!token) return folder;
|
|
92718
|
+
if (!/^[a-zA-Z0-9-]{1,80}$/.test(token)) return null;
|
|
92719
|
+
try {
|
|
92720
|
+
const dir = fs31.realpathSync(path33.join(folder, ".akb", "handoffs", token));
|
|
92721
|
+
if (!dir.startsWith(fs31.realpathSync(folder) + path33.sep)) return null;
|
|
92722
|
+
const marker = JSON.parse(fs31.readFileSync(path33.join(dir, ".akb", "handoff.json"), "utf8"));
|
|
92723
|
+
return marker.task === job.task && marker.isolation === token ? dir : null;
|
|
92724
|
+
} catch {
|
|
92725
|
+
return null;
|
|
92726
|
+
}
|
|
92727
|
+
}
|
|
92728
|
+
function progressEvidence(job, folder) {
|
|
92729
|
+
try {
|
|
92730
|
+
const board = path33.join(folder, ".akb", "kanban");
|
|
92731
|
+
const deliveries = path33.join(board, "deliveries");
|
|
92732
|
+
const rows = fs31.readdirSync(deliveries).filter((name) => name.endsWith(".json")).map((name) => JSON.parse(fs31.readFileSync(path33.join(deliveries, name), "utf8"))).filter((row2) => row2.cardId === job.number).sort((a3, b2) => (b2.startedAt ?? 0) - (a3.startedAt ?? 0));
|
|
92733
|
+
const row = rows[0];
|
|
92734
|
+
if (!row?.deliveryId || !row.base || !row.branch || !row.worktree || row.commitMode !== "auto") return null;
|
|
92735
|
+
const tree = fs31.realpathSync(path33.resolve(folder, row.worktree));
|
|
92736
|
+
if (!tree.startsWith(fs31.realpathSync(folder) + path33.sep)) return null;
|
|
92737
|
+
if (git3(tree, "rev-parse", "--show-toplevel").trim() !== tree) return null;
|
|
92738
|
+
if (git3(tree, "branch", "--show-current").trim() !== row.branch) return null;
|
|
92739
|
+
git3(tree, "cat-file", "-e", `${row.base}^{commit}`);
|
|
92740
|
+
const changed = git3(tree, "ls-files", "-z", "--cached", "--others", "--exclude-standard").split("\0").filter(Boolean).sort();
|
|
92741
|
+
const files = changed.map((name) => {
|
|
92742
|
+
const file2 = path33.join(tree, name);
|
|
92743
|
+
try {
|
|
92744
|
+
const stat = fs31.lstatSync(file2);
|
|
92745
|
+
if (stat.isSymbolicLink()) return [name, "link", digest(fs31.readlinkSync(file2))];
|
|
92746
|
+
if (!stat.isFile()) throw new Error("\u65E0\u6CD5\u9A8C\u8BC1\u6587\u4EF6\u7C7B\u578B");
|
|
92747
|
+
return [name, stat.mode & 511, digest(fs31.readFileSync(file2))];
|
|
92748
|
+
} catch (e2) {
|
|
92749
|
+
if (e2.code === "ENOENT") return [name, "deleted"];
|
|
92750
|
+
throw e2;
|
|
92751
|
+
}
|
|
92752
|
+
});
|
|
92753
|
+
return digest(JSON.stringify({
|
|
92754
|
+
task: job.task,
|
|
92755
|
+
number: job.number,
|
|
92756
|
+
verb: job.flow?.verb,
|
|
92757
|
+
delivery: row.deliveryId,
|
|
92758
|
+
record: digest(JSON.stringify(row)),
|
|
92759
|
+
base: row.base,
|
|
92760
|
+
branch: row.branch,
|
|
92761
|
+
head: git3(tree, "rev-parse", "HEAD").trim(),
|
|
92762
|
+
index: digest(git3(tree, "diff", "--cached", "--binary")),
|
|
92763
|
+
files
|
|
92764
|
+
}));
|
|
92765
|
+
} catch {
|
|
92766
|
+
return null;
|
|
92767
|
+
}
|
|
92768
|
+
}
|
|
92769
|
+
function checkProgress(job) {
|
|
92770
|
+
const folder = authorizedFolder(job.projectDir);
|
|
92771
|
+
if (!folder) return { handoffIssue: "folder_unavailable" };
|
|
92772
|
+
if (!job.handoff?.started) return {};
|
|
92773
|
+
const progress = progressFolder(job, folder);
|
|
92774
|
+
if (!progress) return { handoffIssue: "progress_missing" };
|
|
92775
|
+
const evidence = progressEvidence({ ...job, flow: { verb: job.handoff.verb ?? "implement", workflow: job.workflow ?? "" } }, progress);
|
|
92776
|
+
if (!evidence) return { handoffIssue: "progress_missing" };
|
|
92777
|
+
if (!job.handoff.evidence || evidence !== job.handoff.evidence) return { handoffIssue: "progress_unknown", evidence };
|
|
92778
|
+
return { evidence };
|
|
92779
|
+
}
|
|
92780
|
+
function restartFolder(job, folder) {
|
|
92781
|
+
const token = job.handoff?.isolation ?? job.id;
|
|
92782
|
+
if (!/^[a-zA-Z0-9-]{1,80}$/.test(token)) throw new Error("\u9694\u79BB\u76EE\u5F55\u7F16\u53F7\u65E0\u6548\u3002");
|
|
92783
|
+
const dir = path33.join(folder, ".akb", "handoffs", token);
|
|
92784
|
+
const marker = path33.join(dir, ".akb", "handoff.json");
|
|
92785
|
+
for (const parent of [path33.join(folder, ".akb"), path33.dirname(dir), dir]) {
|
|
92786
|
+
if (fs31.lstatSync(parent, { throwIfNoEntry: false })?.isSymbolicLink()) throw new Error("\u9694\u79BB\u76EE\u5F55\u4E0D\u80FD\u901A\u8FC7\u7B26\u53F7\u94FE\u63A5\u521B\u5EFA\u3002");
|
|
92787
|
+
}
|
|
92788
|
+
if (fs31.existsSync(dir)) {
|
|
92789
|
+
if (job.handoff?.recovering) {
|
|
92790
|
+
try {
|
|
92791
|
+
const saved = JSON.parse(fs31.readFileSync(marker, "utf8"));
|
|
92792
|
+
if (saved.task === job.task && saved.isolation === token && git3(dir, "rev-parse", "--show-toplevel").trim() === fs31.realpathSync(dir)) return dir;
|
|
92793
|
+
} catch {
|
|
92794
|
+
}
|
|
92795
|
+
}
|
|
92796
|
+
throw new Error("\u91CD\u542F\u76EE\u5F55\u5DF2\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u3002");
|
|
92797
|
+
}
|
|
92798
|
+
fs31.mkdirSync(path33.dirname(dir), { recursive: true });
|
|
92799
|
+
git3(folder, "worktree", "add", "--detach", dir, "HEAD");
|
|
92800
|
+
if (fs31.lstatSync(path33.dirname(marker), { throwIfNoEntry: false })?.isSymbolicLink()) throw new Error("\u9694\u79BB\u6807\u8BB0\u76EE\u5F55\u65E0\u6548\u3002");
|
|
92801
|
+
fs31.mkdirSync(path33.dirname(marker), { recursive: true });
|
|
92802
|
+
fs31.writeFileSync(marker, JSON.stringify({ task: job.task, isolation: token }), { flag: "wx" });
|
|
92803
|
+
return dir;
|
|
92804
|
+
}
|
|
92805
|
+
|
|
92394
92806
|
// src/jobs.ts
|
|
92395
92807
|
import { spawn as spawn4 } from "node:child_process";
|
|
92396
|
-
import
|
|
92397
|
-
import
|
|
92808
|
+
import fs34 from "node:fs";
|
|
92809
|
+
import path36 from "node:path";
|
|
92398
92810
|
|
|
92399
92811
|
// ../cli/src/lib/agent/catalog.ts
|
|
92400
|
-
import
|
|
92401
|
-
import
|
|
92812
|
+
import fs32 from "node:fs";
|
|
92813
|
+
import path34 from "node:path";
|
|
92402
92814
|
var CATALOGUE = "https://models.dev/api.json";
|
|
92403
92815
|
var FRESH_FOR_MS = 24 * 60 * 6e4;
|
|
92404
92816
|
var ANSWER_BY_MS = 2e4;
|
|
92405
92817
|
function cacheFile() {
|
|
92406
|
-
return
|
|
92818
|
+
return path34.join(machineHome(), "models-dev.json");
|
|
92407
92819
|
}
|
|
92408
92820
|
var held2;
|
|
92409
92821
|
function readCache() {
|
|
92410
92822
|
const file2 = cacheFile();
|
|
92411
92823
|
let stamp2;
|
|
92412
92824
|
try {
|
|
92413
|
-
const stat =
|
|
92825
|
+
const stat = fs32.statSync(file2);
|
|
92414
92826
|
stamp2 = `${stat.mtimeMs}:${stat.size}`;
|
|
92415
92827
|
} catch {
|
|
92416
92828
|
return void 0;
|
|
92417
92829
|
}
|
|
92418
92830
|
if (held2?.stamp === stamp2) return held2.cached;
|
|
92419
92831
|
try {
|
|
92420
|
-
const data = JSON.parse(
|
|
92832
|
+
const data = JSON.parse(fs32.readFileSync(file2, "utf8"));
|
|
92421
92833
|
if (!data || typeof data.limits !== "object" || !data.limits) return void 0;
|
|
92422
92834
|
const cached2 = {
|
|
92423
92835
|
fetchedAt: typeof data.fetchedAt === "number" ? data.fetchedAt : 0,
|
|
@@ -92456,8 +92868,8 @@ function refreshCatalog() {
|
|
|
92456
92868
|
const limits = limitsIn(await answer.json());
|
|
92457
92869
|
if (Object.keys(limits).length === 0) return;
|
|
92458
92870
|
const file2 = cacheFile();
|
|
92459
|
-
|
|
92460
|
-
|
|
92871
|
+
fs32.mkdirSync(path34.dirname(file2), { recursive: true });
|
|
92872
|
+
fs32.writeFileSync(file2, JSON.stringify({ fetchedAt: Date.now(), limits }));
|
|
92461
92873
|
} catch {
|
|
92462
92874
|
}
|
|
92463
92875
|
})();
|
|
@@ -92501,9 +92913,9 @@ function contextLimit(harness, model) {
|
|
|
92501
92913
|
}
|
|
92502
92914
|
|
|
92503
92915
|
// src/ideas.ts
|
|
92504
|
-
import
|
|
92505
|
-
import
|
|
92506
|
-
var ideasFileOf = (job) =>
|
|
92916
|
+
import fs33 from "node:fs";
|
|
92917
|
+
import path35 from "node:path";
|
|
92918
|
+
var ideasFileOf = (job) => path35.join(runnerHome(), "ideas", `${job.id}.json`);
|
|
92507
92919
|
async function writeIdeas(job, list) {
|
|
92508
92920
|
const workflows = [];
|
|
92509
92921
|
let after = null;
|
|
@@ -92514,18 +92926,18 @@ async function writeIdeas(job, list) {
|
|
|
92514
92926
|
after = page.value.next;
|
|
92515
92927
|
} while (after);
|
|
92516
92928
|
const file2 = ideasFileOf(job);
|
|
92517
|
-
|
|
92518
|
-
|
|
92929
|
+
fs33.mkdirSync(path35.dirname(file2), { recursive: true });
|
|
92930
|
+
fs33.writeFileSync(file2, `${JSON.stringify({ workflows, ideas: job.discussion.ideas }, null, 2)}
|
|
92519
92931
|
`);
|
|
92520
92932
|
return { file: file2 };
|
|
92521
92933
|
}
|
|
92522
92934
|
function readIdeas(file2) {
|
|
92523
92935
|
try {
|
|
92524
|
-
return JSON.parse(
|
|
92936
|
+
return JSON.parse(fs33.readFileSync(file2, "utf8")).ideas;
|
|
92525
92937
|
} catch {
|
|
92526
92938
|
return void 0;
|
|
92527
92939
|
} finally {
|
|
92528
|
-
|
|
92940
|
+
fs33.rmSync(file2, { force: true });
|
|
92529
92941
|
}
|
|
92530
92942
|
}
|
|
92531
92943
|
|
|
@@ -92561,32 +92973,32 @@ var defaultDeps = (machineId2) => ({
|
|
|
92561
92973
|
akb: currentAkb,
|
|
92562
92974
|
runtimes: detectRuntimes
|
|
92563
92975
|
});
|
|
92564
|
-
var ownFolder = () =>
|
|
92976
|
+
var ownFolder = () => path36.join(runnerHome(), "work");
|
|
92565
92977
|
function folderFor(job) {
|
|
92566
92978
|
if (!job.projectDir) {
|
|
92567
|
-
const cwd =
|
|
92568
|
-
|
|
92979
|
+
const cwd = path36.join(ownFolder(), job.id);
|
|
92980
|
+
fs34.mkdirSync(cwd, { recursive: true });
|
|
92569
92981
|
return { cwd };
|
|
92570
92982
|
}
|
|
92571
92983
|
const real = realpath4(job.projectDir);
|
|
92572
|
-
if (real && allowedProjects().some((root) => real === root || real.startsWith(root +
|
|
92984
|
+
if (real && allowedProjects().some((root) => real === root || real.startsWith(root + path36.sep))) return { cwd: real };
|
|
92573
92985
|
return { refused: `This Runner is not allowed to work in ${job.projectDir}.` };
|
|
92574
92986
|
}
|
|
92575
92987
|
function realpath4(p2) {
|
|
92576
92988
|
try {
|
|
92577
|
-
return
|
|
92989
|
+
return fs34.realpathSync(p2);
|
|
92578
92990
|
} catch {
|
|
92579
92991
|
return null;
|
|
92580
92992
|
}
|
|
92581
92993
|
}
|
|
92582
|
-
var attachmentsOf = (job) =>
|
|
92994
|
+
var attachmentsOf = (job) => path36.join(runnerHome(), "attachments", job.id);
|
|
92583
92995
|
function writeAttachments(job) {
|
|
92584
92996
|
if (!job.attachments.length) return "";
|
|
92585
92997
|
const dir = attachmentsOf(job);
|
|
92586
|
-
|
|
92998
|
+
fs34.mkdirSync(dir, { recursive: true });
|
|
92587
92999
|
const files = job.attachments.map((a3) => {
|
|
92588
|
-
const file2 =
|
|
92589
|
-
|
|
93000
|
+
const file2 = path36.join(dir, path36.basename(a3.name));
|
|
93001
|
+
fs34.writeFileSync(file2, Buffer.from(a3.content, "base64"));
|
|
92590
93002
|
return file2;
|
|
92591
93003
|
});
|
|
92592
93004
|
return `
|
|
@@ -92615,8 +93027,10 @@ function toWire(events, first) {
|
|
|
92615
93027
|
endLog();
|
|
92616
93028
|
return out;
|
|
92617
93029
|
}
|
|
93030
|
+
var leaseNow = () => ({ at: Date.now(), monotonic: performance.now() });
|
|
92618
93031
|
function streamOut(deps, id, lease) {
|
|
92619
93032
|
const wire = [];
|
|
93033
|
+
let firstSeq = null;
|
|
92620
93034
|
let pending = [];
|
|
92621
93035
|
let size = 0;
|
|
92622
93036
|
let lost = false;
|
|
@@ -92628,10 +93042,18 @@ function streamOut(deps, id, lease) {
|
|
|
92628
93042
|
};
|
|
92629
93043
|
const stored = new Promise((resolve2) => ended2 = resolve2);
|
|
92630
93044
|
const children = /* @__PURE__ */ new Set();
|
|
93045
|
+
const groups = /* @__PURE__ */ new Set();
|
|
93046
|
+
let stopConfirmed = true;
|
|
93047
|
+
const killed = /* @__PURE__ */ new Set();
|
|
92631
93048
|
const kill = (child) => {
|
|
92632
93049
|
if (!child.pid) return;
|
|
92633
|
-
child.
|
|
92634
|
-
|
|
93050
|
+
const exited = new Promise((resolve2) => child.once("close", () => resolve2()));
|
|
93051
|
+
killed.add(exited);
|
|
93052
|
+
void exited.then(() => killed.delete(exited));
|
|
93053
|
+
signalTree(child, "SIGTERM");
|
|
93054
|
+
const timer = setTimeout(() => signalTree(child, "SIGKILL"), KILL_GRACE_MS);
|
|
93055
|
+
timer.unref();
|
|
93056
|
+
void exited.then(() => clearTimeout(timer));
|
|
92635
93057
|
};
|
|
92636
93058
|
let halt = null;
|
|
92637
93059
|
let stopping = Promise.resolve();
|
|
@@ -92644,17 +93066,28 @@ function streamOut(deps, id, lease) {
|
|
|
92644
93066
|
if (asked || lost) return;
|
|
92645
93067
|
asked = true;
|
|
92646
93068
|
for (const child of children) kill(child);
|
|
92647
|
-
if (halt) stopping = halt()
|
|
93069
|
+
if (halt) stopping = halt().catch(() => {
|
|
93070
|
+
stopConfirmed = false;
|
|
93071
|
+
});
|
|
92648
93072
|
onAsked();
|
|
92649
93073
|
};
|
|
92650
93074
|
const loseLease = () => {
|
|
92651
93075
|
if (lost) return stopping;
|
|
92652
93076
|
lost = true;
|
|
93077
|
+
lease.lost = true;
|
|
92653
93078
|
for (const child of children) kill(child);
|
|
92654
|
-
|
|
93079
|
+
stopping = Promise.all([halt?.(), ...killed]).then(() => {
|
|
93080
|
+
}).catch(() => {
|
|
93081
|
+
stopConfirmed = false;
|
|
93082
|
+
});
|
|
92655
93083
|
return stopping;
|
|
92656
93084
|
};
|
|
93085
|
+
const valid = () => {
|
|
93086
|
+
if (!held3(deps, lease)) void loseLease();
|
|
93087
|
+
return !lost;
|
|
93088
|
+
};
|
|
92657
93089
|
const send3 = () => {
|
|
93090
|
+
if (!valid()) return;
|
|
92658
93091
|
const ws = log.ws;
|
|
92659
93092
|
if (!ws || ws.readyState !== WebSocket.OPEN || log.after === null) return;
|
|
92660
93093
|
const after = log.after;
|
|
@@ -92678,15 +93111,17 @@ function streamOut(deps, id, lease) {
|
|
|
92678
93111
|
};
|
|
92679
93112
|
const flush = () => {
|
|
92680
93113
|
flushedAt = Date.now();
|
|
92681
|
-
if (pending.length)
|
|
92682
|
-
|
|
93114
|
+
if (firstSeq !== null && pending.length) {
|
|
93115
|
+
wire.push(...toWire(pending, firstSeq + wire.length));
|
|
93116
|
+
pending = [];
|
|
93117
|
+
}
|
|
92683
93118
|
size = 0;
|
|
92684
93119
|
send3();
|
|
92685
93120
|
};
|
|
92686
93121
|
const connect2 = async () => {
|
|
92687
93122
|
log.retry = void 0;
|
|
92688
93123
|
const ws = await deps.api.openLog(deps.machineId, id).catch(() => null);
|
|
92689
|
-
if (closed) return ws?.close();
|
|
93124
|
+
if (closed || !valid()) return ws?.close();
|
|
92690
93125
|
if (!ws) return reconnect();
|
|
92691
93126
|
log.ws = ws;
|
|
92692
93127
|
log.heard = Date.now();
|
|
@@ -92701,6 +93136,7 @@ function streamOut(deps, id, lease) {
|
|
|
92701
93136
|
if (said.type === "hello") {
|
|
92702
93137
|
log.tries = 0;
|
|
92703
93138
|
log.after = Number.isInteger(said.after) ? said.after : -1;
|
|
93139
|
+
firstSeq ??= log.after + 1;
|
|
92704
93140
|
log.watched = said.watched === true;
|
|
92705
93141
|
flush();
|
|
92706
93142
|
} else if (said.type === "watched") {
|
|
@@ -92725,6 +93161,7 @@ function streamOut(deps, id, lease) {
|
|
|
92725
93161
|
};
|
|
92726
93162
|
void connect2();
|
|
92727
93163
|
const event2 = (e2) => {
|
|
93164
|
+
if (!valid()) return;
|
|
92728
93165
|
if (e2.kind === "message") messages.push(e2.data.text);
|
|
92729
93166
|
pending.push(e2);
|
|
92730
93167
|
size += JSON.stringify(e2.data).length;
|
|
@@ -92740,13 +93177,21 @@ function streamOut(deps, id, lease) {
|
|
|
92740
93177
|
drop(ws);
|
|
92741
93178
|
ws.close();
|
|
92742
93179
|
}, deps.logPingMs);
|
|
93180
|
+
const expiry = setInterval(valid, Math.min(1e3, deps.leaseMs));
|
|
93181
|
+
let renewing = false;
|
|
92743
93182
|
const renewer = setInterval(async () => {
|
|
92744
|
-
|
|
93183
|
+
if (renewing || !valid()) return;
|
|
93184
|
+
renewing = true;
|
|
93185
|
+
const requestedAt = leaseNow();
|
|
93186
|
+
const renewed = await deps.api.renewJob(deps.machineId, id).catch(() => null).finally(() => {
|
|
93187
|
+
renewing = false;
|
|
93188
|
+
});
|
|
93189
|
+
if (!valid() || closed || !renewed) return;
|
|
92745
93190
|
if (renewed.ok && !renewed.value.renewed) return void loseLease();
|
|
92746
93191
|
if (!renewed.ok) return;
|
|
92747
|
-
lease
|
|
93192
|
+
Object.assign(lease, requestedAt);
|
|
92748
93193
|
if (renewed.value.stop) ask();
|
|
92749
|
-
if (log.ws?.readyState === WebSocket.OPEN) log.ws.send(JSON.stringify({ type: "alive" }));
|
|
93194
|
+
if (!ending && log.ws?.readyState === WebSocket.OPEN) log.ws.send(JSON.stringify({ type: "alive" }));
|
|
92750
93195
|
}, deps.renewMs);
|
|
92751
93196
|
return {
|
|
92752
93197
|
event: event2,
|
|
@@ -92754,18 +93199,40 @@ function streamOut(deps, id, lease) {
|
|
|
92754
93199
|
if (text3) event2({ kind: "log", data: { text: text3 } });
|
|
92755
93200
|
},
|
|
92756
93201
|
adopt: (child) => {
|
|
92757
|
-
if (
|
|
93202
|
+
if (child.pid) groups.add(child.pid);
|
|
93203
|
+
if (!valid() || asked) return kill(child);
|
|
92758
93204
|
children.add(child);
|
|
92759
93205
|
child.on("close", () => children.delete(child));
|
|
92760
93206
|
},
|
|
92761
93207
|
onStop: (stop2) => {
|
|
92762
93208
|
halt = stop2;
|
|
92763
|
-
if (lost || asked) stopping = stop2()
|
|
93209
|
+
if (lost || asked) stopping = stop2().catch(() => {
|
|
93210
|
+
stopConfirmed = false;
|
|
93211
|
+
});
|
|
92764
93212
|
},
|
|
92765
93213
|
/** What stopping the job's board runs is still doing. */
|
|
92766
93214
|
halted: () => stopping,
|
|
93215
|
+
confirmed: async () => {
|
|
93216
|
+
await stopping;
|
|
93217
|
+
if (!stopConfirmed) return false;
|
|
93218
|
+
const until = Date.now() + deps.stopMs;
|
|
93219
|
+
const alive2 = (pid) => {
|
|
93220
|
+
try {
|
|
93221
|
+
process.kill(-pid, 0);
|
|
93222
|
+
return true;
|
|
93223
|
+
} catch (e2) {
|
|
93224
|
+
return e2.code !== "ESRCH";
|
|
93225
|
+
}
|
|
93226
|
+
};
|
|
93227
|
+
if (process.platform === "win32") return children.size === 0;
|
|
93228
|
+
while ([...groups].some(alive2)) {
|
|
93229
|
+
if (Date.now() >= until) return false;
|
|
93230
|
+
await new Promise((resolve2) => setTimeout(resolve2, 50));
|
|
93231
|
+
}
|
|
93232
|
+
return true;
|
|
93233
|
+
},
|
|
92767
93234
|
stop: loseLease,
|
|
92768
|
-
lost: () =>
|
|
93235
|
+
lost: () => !valid(),
|
|
92769
93236
|
asked: () => asked,
|
|
92770
93237
|
whenAsked: askedOnce,
|
|
92771
93238
|
/** The agent's messages so far. */
|
|
@@ -92775,6 +93242,7 @@ function streamOut(deps, id, lease) {
|
|
|
92775
93242
|
clearInterval(flusher);
|
|
92776
93243
|
clearInterval(pinger);
|
|
92777
93244
|
clearInterval(renewer);
|
|
93245
|
+
clearInterval(expiry);
|
|
92778
93246
|
ending = !lost;
|
|
92779
93247
|
flush();
|
|
92780
93248
|
if (ending) {
|
|
@@ -92787,27 +93255,68 @@ function streamOut(deps, id, lease) {
|
|
|
92787
93255
|
const ws = log.ws;
|
|
92788
93256
|
log.ws = null;
|
|
92789
93257
|
ws?.close();
|
|
93258
|
+
await stopping;
|
|
92790
93259
|
}
|
|
92791
93260
|
};
|
|
92792
93261
|
}
|
|
92793
93262
|
async function runJob(id, deps, track = () => {
|
|
92794
|
-
}) {
|
|
93263
|
+
}, stopped2 = () => false) {
|
|
93264
|
+
const lease = leaseNow();
|
|
92795
93265
|
const claim = await deps.api.claimJob(deps.machineId, id);
|
|
92796
|
-
if (!claim.ok || !claim.value.claimed) return;
|
|
93266
|
+
if (!claim.ok || !claim.value.claimed || stopped2() || !held3(deps, lease)) return;
|
|
92797
93267
|
const job = claim.value.job;
|
|
92798
|
-
const
|
|
93268
|
+
const releases = [];
|
|
92799
93269
|
try {
|
|
92800
|
-
await runClaimed(job, { ...deps, akb: deps.akb() }, track, (dir) =>
|
|
93270
|
+
await runClaimed(job, { ...deps, akb: deps.akb() }, track, (dir) => releases.push(hold(dir)), lease);
|
|
92801
93271
|
} finally {
|
|
92802
|
-
for (const release2 of
|
|
92803
|
-
|
|
93272
|
+
for (const release2 of releases) release2();
|
|
93273
|
+
fs34.rmSync(attachmentsOf(job), { recursive: true, force: true });
|
|
92804
93274
|
}
|
|
92805
93275
|
}
|
|
92806
|
-
async function runClaimed(job, deps, track, keep2) {
|
|
93276
|
+
async function runClaimed(job, deps, track, keep2, lease) {
|
|
92807
93277
|
const id = job.id;
|
|
93278
|
+
const checkpoint = readCheckpoint(id) ?? { pending: [] };
|
|
93279
|
+
const recovering = checkpoint.updating === true;
|
|
93280
|
+
const persist = () => {
|
|
93281
|
+
checkpoint.updating ||= readCheckpoint(id)?.updating;
|
|
93282
|
+
saveCheckpoint(id, checkpoint);
|
|
93283
|
+
};
|
|
93284
|
+
if (recovering && !checkpoint.completed && (checkpoint.pending.length || checkpoint.opaque || !job.flow && checkpoint.started && !checkpoint.session)) {
|
|
93285
|
+
await deps.api.finishJob(deps.machineId, id, "failed", UNCERTAIN);
|
|
93286
|
+
return;
|
|
93287
|
+
}
|
|
93288
|
+
if (recovering && checkpoint.session) job = { ...job, resume: checkpoint.session, fork: false };
|
|
93289
|
+
if (!recovering) persist();
|
|
93290
|
+
if (job.handoff?.kind === "check") {
|
|
93291
|
+
const runtime = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
|
|
93292
|
+
const report2 = !runtime?.installed || runtime.loggedIn === false ? { handoffIssue: "runtime_unavailable" } : checkProgress(job);
|
|
93293
|
+
return finish(deps, id, lease, "done", "", report2);
|
|
93294
|
+
}
|
|
93295
|
+
if (job.handoff?.kind === "execution") {
|
|
93296
|
+
if (recovering) job = { ...job, handoff: { ...job.handoff, recovering: true } };
|
|
93297
|
+
const handoff = job.handoff;
|
|
93298
|
+
const runtime = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
|
|
93299
|
+
if (!runtime?.installed || runtime.loggedIn === false) return finish(deps, id, lease, "failed", "\u76EE\u6807\u8FD0\u884C\u5DE5\u5177\u5DF2\u4E0D\u53EF\u7528\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u3002");
|
|
93300
|
+
const folder2 = authorizedFolder(job.projectDir);
|
|
93301
|
+
if (!folder2) return finish(deps, id, lease, "failed", "\u76EE\u6807\u76EE\u5F55\u6388\u6743\u5DF2\u53D8\u5316\u3002");
|
|
93302
|
+
if (handoff.action === "continue") {
|
|
93303
|
+
const progress = progressFolder(job, folder2);
|
|
93304
|
+
if (!progress || !handoff.recovering && (!handoff.evidence || progressEvidence({ ...job, flow: job.flow ? { ...job.flow, verb: handoff.verb ?? job.flow.verb } : job.flow }, progress) !== handoff.evidence)) {
|
|
93305
|
+
return finish(deps, id, lease, "failed", "\u672C\u5730\u8FDB\u5EA6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u3002");
|
|
93306
|
+
}
|
|
93307
|
+
job = { ...job, projectDir: progress };
|
|
93308
|
+
}
|
|
93309
|
+
if (handoff.action === "restart") {
|
|
93310
|
+
try {
|
|
93311
|
+
job = { ...job, projectDir: restartFolder(job, folder2), resume: null, fork: false };
|
|
93312
|
+
} catch {
|
|
93313
|
+
return finish(deps, id, lease, "failed", "\u65E0\u6CD5\u51C6\u5907\u65B0\u9694\u79BB\u76EE\u5F55\uFF0C\u5DF2\u6709\u6587\u4EF6\u5DF2\u4FDD\u7559\u3002");
|
|
93314
|
+
}
|
|
93315
|
+
}
|
|
93316
|
+
}
|
|
92808
93317
|
if (job.secret) return runSecret(job, deps);
|
|
92809
93318
|
if (job.test) return runTest(job, deps);
|
|
92810
|
-
if (job.agent) return runAgentJob(job, deps, track, keep2);
|
|
93319
|
+
if (job.agent) return runAgentJob(job, deps, track, keep2, lease, checkpoint, persist);
|
|
92811
93320
|
const task = job.task ?? job.review?.tasks[0] ?? null;
|
|
92812
93321
|
const folder = task && !job.projectDir ? null : folderFor(job);
|
|
92813
93322
|
if (folder && "refused" in folder) {
|
|
@@ -92818,6 +93327,7 @@ async function runClaimed(job, deps, track, keep2) {
|
|
|
92818
93327
|
let cwd = folder?.cwd ?? "";
|
|
92819
93328
|
let run2 = null;
|
|
92820
93329
|
let fresh = null;
|
|
93330
|
+
let missingSessionOnly = false;
|
|
92821
93331
|
let ideas = null;
|
|
92822
93332
|
let discussed;
|
|
92823
93333
|
try {
|
|
@@ -92830,6 +93340,11 @@ async function runClaimed(job, deps, track, keep2) {
|
|
|
92830
93340
|
if (!pulled.ok) throw new Error(pulled.error);
|
|
92831
93341
|
}
|
|
92832
93342
|
}
|
|
93343
|
+
if (checkpoint.completed) {
|
|
93344
|
+
const done = checkpoint.completed;
|
|
93345
|
+
if (done.outcome === "failed" || !ws) return finish(deps, id, lease, done.outcome, done.reason, done.report);
|
|
93346
|
+
return sendBack(deps, id, lease, ws, done.report, () => keepChat(job, done.report.reply));
|
|
93347
|
+
}
|
|
92833
93348
|
if (job.flow && !ws) throw new Error("This job names no task.");
|
|
92834
93349
|
if (job.discussion && job.projectDir && folder) {
|
|
92835
93350
|
const board = openDiscussionFolder(job, folder.cwd);
|
|
@@ -92839,7 +93354,7 @@ async function runClaimed(job, deps, track, keep2) {
|
|
|
92839
93354
|
discussed = board.board;
|
|
92840
93355
|
}
|
|
92841
93356
|
if (job.discussion) {
|
|
92842
|
-
const wrote = await writeIdeas({ ...job, discussion: job.discussion }, deps.api.listWorkflows);
|
|
93357
|
+
const wrote = recovering && fs34.existsSync(ideasFileOf(job)) ? { file: ideasFileOf(job) } : await writeIdeas({ ...job, discussion: job.discussion }, deps.api.listWorkflows);
|
|
92843
93358
|
if ("error" in wrote) throw new Error(wrote.error);
|
|
92844
93359
|
ideas = wrote.file;
|
|
92845
93360
|
}
|
|
@@ -92852,11 +93367,12 @@ async function runClaimed(job, deps, track, keep2) {
|
|
|
92852
93367
|
This task came out of a discussion. Read it for what the card leaves out: ${file2}` : "";
|
|
92853
93368
|
const promptOf = (said2) => {
|
|
92854
93369
|
const lines = (head2 + said2).trim();
|
|
93370
|
+
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
93371
|
return lines ? `${lines}
|
|
92856
93372
|
|
|
92857
93373
|
---
|
|
92858
93374
|
|
|
92859
|
-
${
|
|
93375
|
+
${prompt}` : prompt;
|
|
92860
93376
|
};
|
|
92861
93377
|
const planned = (resume, fork, said2 = "") => {
|
|
92862
93378
|
let p2 = deps.plan(job.runtime, promptOf(said2), cwd, resume, job.model, settingsOf(job), fork, job.languageLine ?? "");
|
|
@@ -92870,18 +93386,42 @@ ${job.prompt}` : job.prompt;
|
|
|
92870
93386
|
};
|
|
92871
93387
|
const carried = !!job.resume && (!job.fork || forks(job.runtime));
|
|
92872
93388
|
run2 = carried ? planned(job.resume, !!job.fork) : planned(null, false, transcript);
|
|
92873
|
-
if (carried && transcript) fresh = () => planned(null, false, transcript);
|
|
93389
|
+
if (!recovering && carried && transcript) fresh = () => planned(null, false, transcript);
|
|
93390
|
+
if (!recovering && carried && (job.chat || job.discussion)) {
|
|
93391
|
+
fresh = () => planned(null, false, transcript);
|
|
93392
|
+
missingSessionOnly = true;
|
|
93393
|
+
}
|
|
92874
93394
|
}
|
|
92875
93395
|
} catch (e2) {
|
|
92876
93396
|
await deps.api.finishJob(deps.machineId, id, "failed", e2 instanceof Error ? e2.message : String(e2));
|
|
92877
93397
|
return;
|
|
92878
93398
|
}
|
|
92879
|
-
|
|
93399
|
+
if (!held3(deps, lease)) return;
|
|
92880
93400
|
const stream = streamOut(deps, id, lease);
|
|
92881
|
-
const
|
|
93401
|
+
const remember = (event2) => {
|
|
93402
|
+
if (stream.lost()) return;
|
|
93403
|
+
checkpointEvent(checkpoint, event2);
|
|
93404
|
+
const session = run2?.session();
|
|
93405
|
+
if (session) checkpoint.session = session;
|
|
93406
|
+
persist();
|
|
93407
|
+
stream.event(event2);
|
|
93408
|
+
};
|
|
93409
|
+
const complete = (outcome, report2, reason) => {
|
|
93410
|
+
if (stream.lost()) return;
|
|
93411
|
+
checkpoint.completed = { outcome, report: report2, reason };
|
|
93412
|
+
checkpoint.session = report2.session ?? checkpoint.session;
|
|
93413
|
+
persist();
|
|
93414
|
+
};
|
|
93415
|
+
let savedIdeas;
|
|
93416
|
+
const told = (said2) => {
|
|
93417
|
+
if (ideas) savedIdeas ??= readIdeas(ideas);
|
|
93418
|
+
return savedIdeas ? { ...said2, ideas: savedIdeas } : said2;
|
|
93419
|
+
};
|
|
92882
93420
|
track(stream.stop);
|
|
92883
|
-
const io = { show: stream.out, event:
|
|
93421
|
+
const io = { show: stream.out, event: remember, track: stream.adopt, onStop: stream.onStop, lost: stream.lost };
|
|
92884
93422
|
if (job.review) {
|
|
93423
|
+
checkpoint.started = true;
|
|
93424
|
+
persist();
|
|
92885
93425
|
for (const task2 of job.review.tasks) {
|
|
92886
93426
|
const chat = await deps.api.readChat(task2);
|
|
92887
93427
|
if (chat.ok) keepCloudChat(task2, chat.value.messages);
|
|
@@ -92896,25 +93436,37 @@ ${job.prompt}` : job.prompt;
|
|
|
92896
93436
|
const marks = reviewMarks(tasks);
|
|
92897
93437
|
const refs = tasks.map((c2) => `${c2.task}:${c2.number}`);
|
|
92898
93438
|
const ended3 = refs.length ? await runReview(job, ws, refs, deps, io) : { ok: true, report: {} };
|
|
93439
|
+
if (ended3.ok) complete("done", ended3.report);
|
|
92899
93440
|
await stream.end();
|
|
92900
93441
|
if (stream.lost()) return;
|
|
92901
93442
|
if (!ended3.ok) return finish(deps, id, lease, "failed", ended3.reason);
|
|
92902
93443
|
return sendBack(deps, id, lease, ws, ended3.report, () => markReviewed2(marks));
|
|
92903
93444
|
}
|
|
92904
93445
|
if (!run2) {
|
|
93446
|
+
checkpoint.started = true;
|
|
93447
|
+
persist();
|
|
92905
93448
|
const ended3 = await runFlow(job, ws, deps, io);
|
|
93449
|
+
if (ended3.ok) complete("done", ended3.report);
|
|
92906
93450
|
const stopped2 = !ended3.ok && (stream.asked() || ended3.stopped === true);
|
|
92907
93451
|
if (stopped2 && stream.asked()) await stream.halted();
|
|
92908
93452
|
await stream.end();
|
|
92909
93453
|
if (stream.lost()) return;
|
|
92910
|
-
|
|
92911
|
-
|
|
92912
|
-
|
|
92913
|
-
|
|
93454
|
+
const boardStopped = await confirmFlowStopped(ws, job, deps);
|
|
93455
|
+
const evidence = progressEvidence(job, ws.cwd);
|
|
93456
|
+
const proof = boardStopped && await stream.confirmed() ? { processesStopped: true, ...evidence ? { evidence } : {} } : {};
|
|
93457
|
+
if (ended3.ok) complete("done", { ...ended3.report, ...proof });
|
|
93458
|
+
if (stopped2) return finish(deps, id, lease, "stopped", "", proof);
|
|
93459
|
+
if (!ended3.ok) return finish(deps, id, lease, "failed", ended3.reason, proof);
|
|
93460
|
+
return sendBack(deps, id, lease, ws, { ...ended3.report, ...proof }, () => keepChat(job, ended3.report.reply));
|
|
93461
|
+
}
|
|
93462
|
+
checkpoint.started = true;
|
|
93463
|
+
checkpoint.opaque = !run2.converse && !run2.renderer?.events;
|
|
93464
|
+
checkpoint.session = run2.session() ?? checkpoint.session;
|
|
93465
|
+
persist();
|
|
92914
93466
|
if (run2.converse) {
|
|
92915
93467
|
const plan3 = run2;
|
|
92916
93468
|
const converse = run2.converse;
|
|
92917
|
-
const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, stdio: ["pipe", "pipe", "pipe"] });
|
|
93469
|
+
const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
|
|
92918
93470
|
stream.adopt(child);
|
|
92919
93471
|
child.stdin.on("error", () => {
|
|
92920
93472
|
});
|
|
@@ -92922,11 +93474,12 @@ ${job.prompt}` : job.prompt;
|
|
|
92922
93474
|
child.stderr.on("data", (chunk) => stream.out(quietLines(plan3, chunk)));
|
|
92923
93475
|
const spawned = new Promise((resolve2) => child.on("error", (e2) => resolve2(e2.message)));
|
|
92924
93476
|
const end = await Promise.race([
|
|
92925
|
-
converse(child,
|
|
93477
|
+
converse(child, remember),
|
|
92926
93478
|
spawned.then((error) => ({ ok: false, error })),
|
|
92927
93479
|
// Killed, the turn ends with what it said so far; one that never does is not waited on.
|
|
92928
93480
|
stream.whenAsked.then(() => wait2(KILL_GRACE_MS * 2)).then(() => ({ ok: true }))
|
|
92929
93481
|
]);
|
|
93482
|
+
if (!stream.asked()) complete(end.ok ? "done" : "failed", told(report(job, plan3, end)), end.ok ? void 0 : end.error);
|
|
92930
93483
|
stop(child);
|
|
92931
93484
|
await stream.end();
|
|
92932
93485
|
if (stream.lost()) return;
|
|
@@ -92936,7 +93489,7 @@ ${job.prompt}` : job.prompt;
|
|
|
92936
93489
|
return sendBack(deps, id, lease, ws, said2, () => keepChat(job, said2.reply));
|
|
92937
93490
|
}
|
|
92938
93491
|
const printed = async (plan3) => {
|
|
92939
|
-
const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, stdio: ["pipe", "pipe", "pipe"] });
|
|
93492
|
+
const child = spawn4(plan3.command, plan3.args, { cwd, env: plan3.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
|
|
92940
93493
|
stream.adopt(child);
|
|
92941
93494
|
child.stdin.on("error", () => {
|
|
92942
93495
|
});
|
|
@@ -92945,30 +93498,47 @@ ${job.prompt}` : job.prompt;
|
|
|
92945
93498
|
else child.stdin.end();
|
|
92946
93499
|
child.stdout.setEncoding("utf8");
|
|
92947
93500
|
const structured = !!renderer2.events;
|
|
93501
|
+
let stderr = "";
|
|
93502
|
+
let acted = false;
|
|
92948
93503
|
const fromAgent = (text3) => {
|
|
92949
|
-
if (!structured)
|
|
92950
|
-
|
|
93504
|
+
if (!structured) {
|
|
93505
|
+
if (text3.trim()) acted = true;
|
|
93506
|
+
stream.out(text3);
|
|
93507
|
+
}
|
|
93508
|
+
for (const e2 of renderer2.events?.() ?? []) {
|
|
93509
|
+
if (e2.kind === "message" || e2.kind === "tool_call" || e2.kind === "tool_call_update") acted = true;
|
|
93510
|
+
remember(e2);
|
|
93511
|
+
}
|
|
92951
93512
|
};
|
|
92952
93513
|
child.stdout.on("data", (chunk) => {
|
|
92953
93514
|
fromAgent(renderer2.push(chunk));
|
|
92954
93515
|
if (plan3.stdin && renderer2.result() !== void 0 && !child.stdin.writableEnded) child.stdin.end();
|
|
92955
93516
|
});
|
|
92956
93517
|
child.stderr.setEncoding("utf8");
|
|
92957
|
-
child.stderr.on("data", (chunk) =>
|
|
93518
|
+
child.stderr.on("data", (chunk) => {
|
|
93519
|
+
stderr = (stderr + chunk).slice(-EVENT_CHARS);
|
|
93520
|
+
stream.out(quietLines(plan3, chunk));
|
|
93521
|
+
});
|
|
92958
93522
|
const ended3 = await new Promise((resolve2) => {
|
|
92959
93523
|
child.on("error", (e2) => resolve2({ code: null, error: e2.message }));
|
|
92960
93524
|
child.on("close", (code) => resolve2({ code }));
|
|
92961
93525
|
});
|
|
92962
93526
|
fromAgent(renderer2.flush());
|
|
92963
|
-
return ended3;
|
|
93527
|
+
return { ...ended3, stderr, acted };
|
|
92964
93528
|
};
|
|
92965
93529
|
let plan2 = run2;
|
|
92966
93530
|
let ended2 = await printed(plan2);
|
|
92967
|
-
if (fresh && ended2.code !== 0 && plan2.renderer.result() === void 0 && !
|
|
93531
|
+
if (fresh && ended2.code !== 0 && plan2.renderer.result() === void 0 && !ended2.acted && (!missingSessionOnly || sessionMissing(`${ended2.stderr}
|
|
93532
|
+
${plan2.renderer.failure?.() ?? ""}`)) && !stream.asked() && !stream.lost()) {
|
|
92968
93533
|
plan2 = fresh();
|
|
93534
|
+
run2 = plan2;
|
|
92969
93535
|
ended2 = await printed(plan2);
|
|
92970
93536
|
}
|
|
92971
93537
|
const renderer = plan2.renderer;
|
|
93538
|
+
if (!stream.asked()) {
|
|
93539
|
+
const reason = ended2.error ?? renderer.failure?.() ?? (ended2.code === 0 ? void 0 : `Exited with code ${ended2.code}.`);
|
|
93540
|
+
complete(reason ? "failed" : "done", told(report(job, plan2)), reason);
|
|
93541
|
+
}
|
|
92972
93542
|
await stream.end();
|
|
92973
93543
|
if (stream.lost()) return;
|
|
92974
93544
|
const failure = stream.asked() ? void 0 : ended2.error ?? renderer.failure?.() ?? (ended2.code === 0 ? void 0 : `Exited with code ${ended2.code}.`);
|
|
@@ -92976,7 +93546,7 @@ ${job.prompt}` : job.prompt;
|
|
|
92976
93546
|
if (failure || !ws) return finish(deps, id, lease, failure ? "failed" : "done", failure, said);
|
|
92977
93547
|
return sendBack(deps, id, lease, ws, said, () => keepChat(job, said.reply));
|
|
92978
93548
|
}
|
|
92979
|
-
async function runAgentJob(job, deps, track, keep2) {
|
|
93549
|
+
async function runAgentJob(job, deps, track, keep2, lease, checkpoint, persist) {
|
|
92980
93550
|
const folder = job.projectDir ? folderFor(job) : { refused: "This project has no folder on this computer." };
|
|
92981
93551
|
let ws;
|
|
92982
93552
|
try {
|
|
@@ -92987,10 +93557,23 @@ async function runAgentJob(job, deps, track, keep2) {
|
|
|
92987
93557
|
await deps.api.finishJob(deps.machineId, job.id, "failed", e2 instanceof Error ? e2.message : String(e2));
|
|
92988
93558
|
return;
|
|
92989
93559
|
}
|
|
92990
|
-
|
|
93560
|
+
if (!held3(deps, lease)) return;
|
|
93561
|
+
if (checkpoint.completed) return sendBack(deps, job.id, lease, ws, checkpoint.completed.report, () => {
|
|
93562
|
+
});
|
|
93563
|
+
checkpoint.started = true;
|
|
93564
|
+
persist();
|
|
92991
93565
|
const stream = streamOut(deps, job.id, lease);
|
|
92992
93566
|
track(stream.stop);
|
|
92993
|
-
const ended2 = await runAgent(job, ws, deps, { show: stream.out, event:
|
|
93567
|
+
const ended2 = await runAgent(job, ws, deps, { show: stream.out, event: (event2) => {
|
|
93568
|
+
if (stream.lost()) return;
|
|
93569
|
+
checkpointEvent(checkpoint, event2);
|
|
93570
|
+
persist();
|
|
93571
|
+
stream.event(event2);
|
|
93572
|
+
}, track: stream.adopt, onStop: stream.onStop, lost: stream.lost });
|
|
93573
|
+
if (ended2.ok && !stream.lost()) {
|
|
93574
|
+
checkpoint.completed = { outcome: "done", report: ended2.report };
|
|
93575
|
+
persist();
|
|
93576
|
+
}
|
|
92994
93577
|
await stream.end();
|
|
92995
93578
|
if (stream.lost()) return;
|
|
92996
93579
|
if (!ended2.ok) return finish(deps, job.id, lease, "failed", ended2.reason);
|
|
@@ -92998,29 +93581,53 @@ async function runAgentJob(job, deps, track, keep2) {
|
|
|
92998
93581
|
}
|
|
92999
93582
|
var quietLines = (plan2, chunk) => chunk.split("\n").filter((line) => line && !plan2.quiet(line)).map((line) => `${line}
|
|
93000
93583
|
`).join("");
|
|
93584
|
+
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);
|
|
93585
|
+
function signalTree(child, signal) {
|
|
93586
|
+
if (!child.pid) return;
|
|
93587
|
+
if (process.platform === "win32") {
|
|
93588
|
+
const kill = spawn4("taskkill", ["/PID", String(child.pid), "/T", "/F"], { stdio: "ignore" });
|
|
93589
|
+
kill.on("error", () => child.kill(signal));
|
|
93590
|
+
return;
|
|
93591
|
+
}
|
|
93592
|
+
try {
|
|
93593
|
+
process.kill(-child.pid, signal);
|
|
93594
|
+
} catch {
|
|
93595
|
+
child.kill(signal);
|
|
93596
|
+
}
|
|
93597
|
+
}
|
|
93001
93598
|
var stop = (child) => {
|
|
93002
93599
|
if (!child.pid) return;
|
|
93003
|
-
child
|
|
93004
|
-
setTimeout(() => child
|
|
93600
|
+
signalTree(child, "SIGTERM");
|
|
93601
|
+
const timer = setTimeout(() => signalTree(child, "SIGKILL"), KILL_GRACE_MS);
|
|
93602
|
+
timer.unref();
|
|
93603
|
+
child.once("close", () => clearTimeout(timer));
|
|
93005
93604
|
};
|
|
93006
93605
|
var wait2 = (ms) => new Promise((resolve2) => setTimeout(resolve2, ms));
|
|
93007
|
-
var held3 = (deps, lease) =>
|
|
93606
|
+
var held3 = (deps, lease) => {
|
|
93607
|
+
if (Math.max(Date.now() - lease.at, performance.now() - lease.monotonic) >= deps.leaseMs) lease.lost = true;
|
|
93608
|
+
return !lease.lost;
|
|
93609
|
+
};
|
|
93008
93610
|
async function whileOffline(deps, id, lease, attempt) {
|
|
93009
|
-
|
|
93611
|
+
while (held3(deps, lease)) {
|
|
93010
93612
|
const out = await attempt();
|
|
93011
93613
|
if (!("offline" in out && out.offline) || !held3(deps, lease)) return out;
|
|
93012
93614
|
await wait2(deps.retryMs);
|
|
93615
|
+
if (!held3(deps, lease)) return null;
|
|
93616
|
+
const requestedAt = leaseNow();
|
|
93013
93617
|
const renewed = await deps.api.renewJob(deps.machineId, id);
|
|
93014
|
-
if (
|
|
93618
|
+
if (!held3(deps, lease)) return null;
|
|
93619
|
+
if (renewed.ok && renewed.value.renewed) Object.assign(lease, requestedAt);
|
|
93015
93620
|
if (renewed.ok && !renewed.value.renewed) return out;
|
|
93016
93621
|
}
|
|
93622
|
+
return null;
|
|
93017
93623
|
}
|
|
93018
93624
|
async function ended(deps, id, lease, outcome, reason = "", report2) {
|
|
93019
93625
|
const sent = await whileOffline(deps, id, lease, async () => {
|
|
93020
93626
|
const done = await deps.api.finishJob(deps.machineId, id, outcome, reason, report2);
|
|
93021
93627
|
return { offline: !done.ok && !done.code, finished: done.ok && done.value.finished };
|
|
93022
93628
|
});
|
|
93023
|
-
|
|
93629
|
+
if (sent?.finished) clearCheckpoint(id);
|
|
93630
|
+
return sent?.finished ?? false;
|
|
93024
93631
|
}
|
|
93025
93632
|
async function finish(deps, id, lease, outcome, reason = "", report2) {
|
|
93026
93633
|
await ended(deps, id, lease, outcome, reason, report2);
|
|
@@ -93031,6 +93638,7 @@ async function sendBack(deps, id, lease, ws, said, landed = () => {
|
|
|
93031
93638
|
if (built && !built.ok) return finish(deps, id, lease, "failed", built.reason, said);
|
|
93032
93639
|
const report2 = built ? { ...said, workflow: { files: built.files } } : said;
|
|
93033
93640
|
const pushed = await whileOffline(deps, id, lease, () => push(ws, { id, machineId: deps.machineId }));
|
|
93641
|
+
if (!pushed) return;
|
|
93034
93642
|
if (pushed.ok) {
|
|
93035
93643
|
if (await ended(deps, id, lease, "done", "", report2)) landed();
|
|
93036
93644
|
return;
|
|
@@ -93055,12 +93663,12 @@ async function runTest(job, deps) {
|
|
|
93055
93663
|
const report2 = (await deps.runtimes()).find((r2) => r2.name === job.runtime);
|
|
93056
93664
|
if (!report2?.installed) return finish2("failed", "not_installed");
|
|
93057
93665
|
if (report2.loggedIn === false) return finish2("failed", "signed_out");
|
|
93058
|
-
const cwd =
|
|
93059
|
-
|
|
93666
|
+
const cwd = path36.join(ownFolder(), "test");
|
|
93667
|
+
fs34.mkdirSync(cwd, { recursive: true });
|
|
93060
93668
|
const run2 = deps.plan(job.runtime, job.prompt, cwd, null, job.model, settingsOf(job));
|
|
93061
93669
|
const startedAt = Date.now();
|
|
93062
93670
|
if (run2.converse) {
|
|
93063
|
-
const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, stdio: ["pipe", "pipe", "ignore"] });
|
|
93671
|
+
const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "ignore"] });
|
|
93064
93672
|
child.stdin.on("error", () => {
|
|
93065
93673
|
});
|
|
93066
93674
|
let timer;
|
|
@@ -93080,7 +93688,7 @@ async function runTest(job, deps) {
|
|
|
93080
93688
|
const renderer = run2.renderer;
|
|
93081
93689
|
const ended2 = await new Promise((resolve2) => {
|
|
93082
93690
|
let said = "";
|
|
93083
|
-
const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, stdio: ["pipe", "pipe", "pipe"] });
|
|
93691
|
+
const child = spawn4(run2.command, run2.args, { cwd, env: run2.env, detached: process.platform !== "win32", stdio: ["pipe", "pipe", "pipe"] });
|
|
93084
93692
|
const timer = setTimeout(() => {
|
|
93085
93693
|
child.kill("SIGTERM");
|
|
93086
93694
|
setTimeout(() => child.kill("SIGKILL"), KILL_GRACE_MS).unref();
|
|
@@ -93214,6 +93822,7 @@ function startRunner(options) {
|
|
|
93214
93822
|
let registration = null;
|
|
93215
93823
|
let connected = false;
|
|
93216
93824
|
let closed = false;
|
|
93825
|
+
let preparing = false;
|
|
93217
93826
|
let attempts = 0;
|
|
93218
93827
|
let live = null;
|
|
93219
93828
|
let presence = null;
|
|
@@ -93221,7 +93830,10 @@ function startRunner(options) {
|
|
|
93221
93830
|
let timer = null;
|
|
93222
93831
|
let reading = false;
|
|
93223
93832
|
let readAgain = false;
|
|
93833
|
+
let readDone = Promise.resolve();
|
|
93834
|
+
const jobs = /* @__PURE__ */ new Set();
|
|
93224
93835
|
const running = /* @__PURE__ */ new Map();
|
|
93836
|
+
const attempted = /* @__PURE__ */ new Set();
|
|
93225
93837
|
let stop2 = () => {
|
|
93226
93838
|
};
|
|
93227
93839
|
const stopped2 = new Promise((resolve2) => stop2 = resolve2);
|
|
@@ -93354,19 +93966,31 @@ function startRunner(options) {
|
|
|
93354
93966
|
});
|
|
93355
93967
|
};
|
|
93356
93968
|
const readJobs = async () => {
|
|
93357
|
-
if (closed || !registration) return;
|
|
93969
|
+
if (closed || preparing || !registration) return;
|
|
93358
93970
|
if (reading) {
|
|
93359
93971
|
readAgain = true;
|
|
93360
93972
|
return;
|
|
93361
93973
|
}
|
|
93362
93974
|
reading = true;
|
|
93975
|
+
let readEnded = () => {
|
|
93976
|
+
};
|
|
93977
|
+
readDone = new Promise((resolve2) => readEnded = resolve2);
|
|
93363
93978
|
try {
|
|
93364
93979
|
const list = await listJobs(registration.machineId);
|
|
93365
|
-
if (!list.ok) return;
|
|
93980
|
+
if (!list.ok || closed) return;
|
|
93981
|
+
const listed2 = new Set(list.value.jobs.map((job) => job.id));
|
|
93982
|
+
for (const id of attempted) if (!listed2.has(id) && !running.has(id)) attempted.delete(id);
|
|
93366
93983
|
for (const job of list.value.jobs) {
|
|
93367
|
-
if (
|
|
93368
|
-
|
|
93369
|
-
|
|
93984
|
+
if (closed || preparing) break;
|
|
93985
|
+
if (job.state === "claimed" && !running.has(job.id) && !attempted.has(job.id)) {
|
|
93986
|
+
const failure = await stopLeftOn(job);
|
|
93987
|
+
if (closed || preparing) break;
|
|
93988
|
+
const checkpoint = readCheckpoint(job.id);
|
|
93989
|
+
const uncertain = checkpoint?.updating && !checkpoint.completed && (checkpoint.pending.length > 0 || checkpoint.opaque || !job.flow && checkpoint.started && !checkpoint.session);
|
|
93990
|
+
if (checkpoint?.updating) status(uncertain ? UNCERTAIN : "\u6B63\u5728\u6062\u590D\u66F4\u65B0\u524D\u7684\u4EFB\u52A1\u2026");
|
|
93991
|
+
const reason = failure ?? (uncertain ? UNCERTAIN : checkpoint?.updating ? UPDATE_REASON : "The Runner restarted while this job was running.");
|
|
93992
|
+
const recovered = await finishJob(registration.machineId, job.id, "failed", reason, checkpoint?.session ? { session: checkpoint.session } : void 0);
|
|
93993
|
+
if (recovered.ok && reason === UPDATE_REASON) readAgain = true;
|
|
93370
93994
|
continue;
|
|
93371
93995
|
}
|
|
93372
93996
|
if (job.state !== "waiting" || running.has(job.id)) continue;
|
|
@@ -93374,6 +93998,7 @@ function startRunner(options) {
|
|
|
93374
93998
|
}
|
|
93375
93999
|
} finally {
|
|
93376
94000
|
reading = false;
|
|
94001
|
+
readEnded();
|
|
93377
94002
|
if (readAgain) {
|
|
93378
94003
|
readAgain = false;
|
|
93379
94004
|
void readJobs();
|
|
@@ -93384,12 +94009,12 @@ function startRunner(options) {
|
|
|
93384
94009
|
if (!job.flow || !job.task) return;
|
|
93385
94010
|
try {
|
|
93386
94011
|
const folder = job.projectDir ? folderFor(job) : null;
|
|
93387
|
-
if (folder && "refused" in folder) return;
|
|
94012
|
+
if (folder && "refused" in folder) return folder.refused;
|
|
93388
94013
|
const ws = openTaskFolder(job, folder?.cwd ?? null);
|
|
93389
94014
|
const card = akbCardOf(ws);
|
|
93390
94015
|
if (card) await stopLeftBehind(deps().akb(), ws, card, deps().stopMs);
|
|
93391
94016
|
} catch (e2) {
|
|
93392
|
-
|
|
94017
|
+
return e2 instanceof Error ? e2.message : String(e2);
|
|
93393
94018
|
}
|
|
93394
94019
|
};
|
|
93395
94020
|
let reviewing = false;
|
|
@@ -93405,33 +94030,57 @@ function startRunner(options) {
|
|
|
93405
94030
|
}
|
|
93406
94031
|
};
|
|
93407
94032
|
const start = (id) => {
|
|
94033
|
+
attempted.add(id);
|
|
93408
94034
|
running.set(id, null);
|
|
93409
94035
|
status(idle2());
|
|
93410
|
-
|
|
94036
|
+
const job = runJob(id, deps(), (halt) => {
|
|
94037
|
+
running.set(id, halt);
|
|
94038
|
+
if (closed) void halt();
|
|
94039
|
+
}, () => closed).catch(() => {
|
|
93411
94040
|
}).finally(() => {
|
|
94041
|
+
jobs.delete(job);
|
|
93412
94042
|
running.delete(id);
|
|
93413
94043
|
if (closed) return;
|
|
93414
94044
|
boards?.look();
|
|
93415
94045
|
status(idle2());
|
|
93416
94046
|
void readJobs();
|
|
93417
94047
|
});
|
|
94048
|
+
jobs.add(job);
|
|
93418
94049
|
};
|
|
93419
|
-
const close = async (release2 = true) => {
|
|
94050
|
+
const close = async (release2 = true, updating = false) => {
|
|
93420
94051
|
if (closed) return;
|
|
94052
|
+
if (updating) {
|
|
94053
|
+
preparing = true;
|
|
94054
|
+
await readDone;
|
|
94055
|
+
for (const id of running.keys()) {
|
|
94056
|
+
const prepared = await finishJob(registration.machineId, id, "failed", PREPARE_REASON);
|
|
94057
|
+
if (!prepared.ok || !prepared.value.prepared && !prepared.value.finished) {
|
|
94058
|
+
preparing = false;
|
|
94059
|
+
void readJobs();
|
|
94060
|
+
throw new Error("\u66F4\u65B0\u6682\u7F13\uFF1A\u672A\u80FD\u4FDD\u5B58\u4E91\u7AEF\u4EFB\u52A1\uFF0C\u7A0D\u540E\u91CD\u8BD5\u3002");
|
|
94061
|
+
}
|
|
94062
|
+
}
|
|
94063
|
+
}
|
|
93421
94064
|
closed = true;
|
|
93422
|
-
|
|
93423
|
-
|
|
94065
|
+
if (updating) {
|
|
94066
|
+
for (const id of running.keys()) {
|
|
94067
|
+
const checkpoint = readCheckpoint(id) ?? { pending: [] };
|
|
94068
|
+
saveCheckpoint(id, { ...checkpoint, updating: true });
|
|
94069
|
+
}
|
|
94070
|
+
}
|
|
93424
94071
|
if (timer) clearTimeout(timer);
|
|
93425
94072
|
if (agentsTimer) clearTimeout(agentsTimer);
|
|
93426
94073
|
clearInterval(sweepTimer);
|
|
93427
94074
|
live?.close();
|
|
93428
94075
|
presence?.close();
|
|
93429
94076
|
boards?.close();
|
|
93430
|
-
const stops = Promise.all([...running.values()].map((halt) => halt?.()));
|
|
94077
|
+
const stops = Promise.all([readDone, ...jobs, ...[...running.values()].map((halt) => halt?.())]);
|
|
93431
94078
|
let timeout;
|
|
93432
|
-
|
|
94079
|
+
if (updating) await stops;
|
|
94080
|
+
else await Promise.race([stops, new Promise((resolve2) => timeout = setTimeout(resolve2, (options.deps?.stopMs ?? STOP_MS) + 1e3))]);
|
|
93433
94081
|
clearTimeout(timeout);
|
|
93434
|
-
if (release2 && !
|
|
94082
|
+
if (release2 && !lock.waited() && registration) await release(registration.machineId);
|
|
94083
|
+
lock.release();
|
|
93435
94084
|
};
|
|
93436
94085
|
removeLegacy();
|
|
93437
94086
|
pruneChats();
|
|
@@ -93439,12 +94088,12 @@ function startRunner(options) {
|
|
|
93439
94088
|
status(t.waitingHere(holder));
|
|
93440
94089
|
options.onWaiting?.(holder);
|
|
93441
94090
|
});
|
|
93442
|
-
return { stopped: stopped2, close: () => close(true), renew: () => schedule(0) };
|
|
94091
|
+
return { stopped: stopped2, close: () => close(true), update: () => close(false, true), renew: () => schedule(0) };
|
|
93443
94092
|
}
|
|
93444
94093
|
|
|
93445
94094
|
// src/signin.ts
|
|
93446
94095
|
import { spawn as spawn5 } from "node:child_process";
|
|
93447
|
-
import
|
|
94096
|
+
import crypto6 from "node:crypto";
|
|
93448
94097
|
import http from "node:http";
|
|
93449
94098
|
var WAIT_MS = 10 * 60 * 1e3;
|
|
93450
94099
|
var CRANE = "M2 55.75C2 55.69 2.69 55.09 3.55 54.37L5.09 53.1L6.61 53.1L8.13 53.1L12.49 49.87C14.9 48.07 16.83 46.58 16.77 46.53C16.75 46.47 15.56 46.64 14.15 46.89C12.74 47.13 11.55 47.3 11.53 47.24C11.47 47.19 12.02 46.22 12.71 45.06L14.01 42.96L18.21 41.34C20.53 40.45 22.41 39.65 22.41 39.57C22.41 39.49 21.27 38.55 19.92 37.5C15.92 34.4 13.13 31.31 10.86 27.47L10.01 26.01L10.53 26.18C10.84 26.26 12.96 27.2 15.28 28.25C17.6 29.32 19.53 30.12 19.59 30.07C19.64 30.01 17.68 28.69 15.25 27.11C12.8 25.57 10.56 23.97 10.31 23.58C9.15 21.95 7.25 17.5 7.25 16.46C7.25 16.26 10.01 17.95 13.38 20.18C16.77 22.45 19.73 24.38 19.95 24.49C20.42 24.74 20.25 24.57 13.9 19.02L9.18 14.88L8.6 13.36C7.72 10.96 6.97 7.54 6.97 5.77L6.97 4.14L9.4 6.46C12.66 9.61 15.56 12.01 23.57 18.25C27.32 21.18 30.5 23.72 30.64 23.91C30.8 24.08 31.68 26.51 32.6 29.3L34.28 34.35L35.72 35.65C37.54 37.3 37.98 37.47 36.85 36.09L35.96 35.01L37.12 34.71C39.11 34.21 40.16 33.52 42.54 31.12L44.8 28.8L46.02 28.96C46.71 29.07 47.56 29.07 47.95 28.96L48.67 28.8L48.67 28.25L48.67 27.69L49.27 27.69C49.63 27.69 50.1 27.58 50.32 27.42L50.71 27.17L51.01 27.42C51.18 27.56 52.78 27.86 54.58 28.08C56.37 28.3 57.86 28.52 57.94 28.58C58 28.63 56.73 28.85 55.13 29.05C53.53 29.24 50.96 29.77 49.44 30.21C47.92 30.65 46.57 31.01 46.43 31.01C46.29 31.01 44.22 32.97 41.85 35.37C37.57 39.62 34.42 42.14 30.83 44.15L29.14 45.09L25.97 45.73L22.77 46.39L14.59 51.11L6.42 55.86L4.21 55.86C2.99 55.86 2 55.8 2 55.75Z";
|
|
@@ -93469,8 +94118,8 @@ var PAGE = (outcome, lang) => {
|
|
|
93469
94118
|
return `<!doctype html><html lang="${lang === "zh" ? "zh-CN" : "en"}"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${title} \xB7 WildCrane</title><style>*{margin:0;box-sizing:border-box}body{display:flex;flex-direction:column;min-height:100dvh;background:#fff;color:#24231f;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}header{padding:16px 36px 0}main{flex:1;display:flex;align-items:center;justify-content:center;padding:0 36px 64px;text-align:center}.icon{display:flex;margin:0 auto;width:44px;height:44px;border-radius:50%;align-items:center;justify-content:center;background:${ok ? "#e4f3ea" : "#f7ddce"};color:${ok ? "#2f6b46" : "#b83a12"}}h1{margin-top:16px;font-size:24px;font-weight:850;line-height:1.25;letter-spacing:-0.02em}p{margin:8px auto 0;max-width:38ch;font-size:13px;line-height:19px;color:#565550}</style><header><svg viewBox="2 4 56 52" width="23.7" height="22" aria-hidden="true"><path d="${CRANE}" fill="#24231f"/><path d="${CREST}" fill="#dd4f1e"/></svg></header><main><div><span class="icon"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${icon}</svg></span><h1>${title}</h1><p>${body}</p></div></main></html>`;
|
|
93470
94119
|
};
|
|
93471
94120
|
async function signIn(options = {}) {
|
|
93472
|
-
const verifier = base64url(
|
|
93473
|
-
const challenge = base64url(
|
|
94121
|
+
const verifier = base64url(crypto6.randomBytes(32));
|
|
94122
|
+
const challenge = base64url(crypto6.createHash("sha256").update(verifier).digest());
|
|
93474
94123
|
let finish2 = () => {
|
|
93475
94124
|
};
|
|
93476
94125
|
const answered = new Promise((resolve2) => finish2 = resolve2);
|
|
@@ -93558,12 +94207,21 @@ async function main() {
|
|
|
93558
94207
|
const id = machineId();
|
|
93559
94208
|
const runner = startRunner({
|
|
93560
94209
|
registration: async () => ({ machineId: id, machineName: machineName(), version: VERSION, runtimes: await detectRuntimes(true) }),
|
|
93561
|
-
kind: "terminal",
|
|
94210
|
+
kind: process.env.WILDCRANE_RUNNER_KIND === "codex" ? "codex" : process.env.WILDCRANE_RUNNER_KIND === "claude-code" ? "claude-code" : "terminal",
|
|
93562
94211
|
onConnected: () => tell({ type: "connected" }),
|
|
93563
94212
|
onWaiting: () => tell({ type: "waiting" }),
|
|
93564
94213
|
// Tests shorten the job poll, which stands in when Realtime is out of reach.
|
|
93565
94214
|
pollMs: Number(process.env.WILDCRANE_POLL_MS) || void 0
|
|
93566
94215
|
});
|
|
94216
|
+
process.on("message", (message) => {
|
|
94217
|
+
if (message.type === "renew") return runner.renew();
|
|
94218
|
+
if (message.type !== "update") return;
|
|
94219
|
+
status("\u6B63\u5728\u66F4\u65B0 Runner\uFF0C\u91CD\u542F\u540E\u81EA\u52A8\u6062\u590D\u4EFB\u52A1\u2026");
|
|
94220
|
+
void runner.update().then(() => process.exit(EXIT_UPDATE)).catch((error) => {
|
|
94221
|
+
status(String(error));
|
|
94222
|
+
tell({ type: "update-deferred" });
|
|
94223
|
+
});
|
|
94224
|
+
});
|
|
93567
94225
|
for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
93568
94226
|
process.on(signal, async () => {
|
|
93569
94227
|
await runner.close();
|