@bud.sh/app 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -31
- package/dist/client/assets/bud/design.js +1 -1
- package/dist/client/assets/canvas-Bih9EdKJ.js +1 -0
- package/dist/client/assets/difference-worker-Bzg-rizy.js +8 -0
- package/dist/client/assets/dist-CdE5wBkg.js +5 -0
- package/dist/client/assets/files-1dLuoM2f.js +1 -0
- package/dist/client/assets/i18n-CkO6VFI0.js +1 -0
- package/dist/client/assets/index-Cn2mxroU.css +2 -0
- package/dist/client/assets/{index-Dn2pfmXf.js → index-DtISWZp9.js} +2 -2
- package/dist/client/assets/pages-BJ-tNJ4J.js +1 -0
- package/dist/client/assets/{project-branches-CMGRmrqr.js → project-branches-Ce3rXrkc.js} +1 -1
- package/dist/client/assets/project-comments-CPUONfs8.js +1 -0
- package/dist/client/assets/project-thread-links-C-TGkq59.js +1 -0
- package/dist/client/assets/{project-threads-ZbKDh78d.js → project-threads-Bv7IDBgi.js} +105 -105
- package/dist/client/assets/project-work-DAE9-olg.js +1 -0
- package/dist/client/assets/{task-design-BPpc4Gd7.js → task-design-CwySIAOl.js} +3 -3
- package/dist/client/assets/tasks-KWsCLi_h.js +3 -0
- package/dist/client/assets/wasm-inline-DSUyFn1L.js +1 -0
- package/dist/client/assets/workspace-CVdcfaaB.js +2 -0
- package/dist/client/index.html +3 -3
- package/dist/hosted/assets/{canvas-BYTOp1p7.js → canvas-AII16n9i.js} +97 -6
- package/dist/hosted/assets/{comment-data-Cn5y2VxV.js → comment-data-BXfMElfx.js} +1998 -381
- package/dist/hosted/assets/dist-BCSTeNf4.js +4785 -0
- package/dist/hosted/assets/{files-B1P2_24q.js → files-D_1yeAVO.js} +10 -5
- package/dist/hosted/assets/{pages-B0ZlVdci.js → pages-CN_SbKWA.js} +3 -3
- package/dist/hosted/assets/{project-branches-DlCWmfRo.js → project-branches-Bxp0DCwg.js} +1 -1
- package/dist/hosted/assets/{project-thread-links-BZXQ200n.js → project-thread-links-KqQoKBLE.js} +76 -4
- package/dist/{node-host/assets/screen-DapOVrga.js → hosted/assets/screen-DpAcDUKR.js} +25 -1
- package/dist/hosted/assets/tasks-D66LlwxM.js +1423 -0
- package/dist/hosted/assets/wasm-inline-Dl9tqabx.js +4 -0
- package/dist/hosted/hosted.js +7885 -6219
- package/dist/node/assets/Stream-CAm1eJ2n.js +16604 -0
- package/dist/{server/assets/bridge-B_Blt55E.js → node/assets/bridge-DQSBYHmw.js} +124 -290
- package/dist/node/assets/config-9_jWwNBh.js +1067 -0
- package/dist/node/assets/load-config.server-CMVtRVmO.js +261 -0
- package/dist/node/assets/module-3GgtT4Xs.js +308 -0
- package/dist/node/assets/server-DTQFuoX2.js +846 -0
- package/dist/node/assets/src-D-kG1GxB.js +2 -0
- package/dist/node/assets/{src-CerrKjID.js → src-Dwe9APUx.js} +93 -3
- package/dist/node/assets/src-DysjfbM8.js +8592 -0
- package/dist/node/bridge.js +1 -845
- package/dist/node/cli.js +206 -0
- package/dist/node/design.js +811 -8
- package/dist/node/index.js +2 -739
- package/dist/node/plugins.js +5711 -0
- package/dist/node/server.js +1 -6746
- package/dist/node/vite.js +121 -0
- package/dist/{server/assets/canvas-CkMK4hoN.js → node-host/assets/canvas-BeDoufy1.js} +97 -7
- package/dist/node-host/assets/{comment-data-yfWEdDQL.js → comment-data-DE2T9yTj.js} +1974 -355
- package/dist/node-host/assets/dist-BCSTeNf4.js +4785 -0
- package/dist/node-host/assets/{files-anHi-apm.js → files-Dl-PTS09.js} +11 -6
- package/dist/node-host/assets/{pages-CW4aF6dK.js → pages-DL2sk6_U.js} +3 -3
- package/dist/node-host/assets/{project-branches-D7rVCxQX.js → project-branches-DGp5ELct.js} +1 -1
- package/dist/{server/assets/project-thread-links-lLS_rq7c.js → node-host/assets/project-thread-links-CgBV3Jcm.js} +76 -5
- package/dist/{hosted/assets/screen-CfdC3NbR.js → node-host/assets/screen-B55yyVfb.js} +25 -1
- package/dist/node-host/assets/tasks-DZRNkoxe.js +1425 -0
- package/dist/node-host/assets/wasm-inline-Dl9tqabx.js +4 -0
- package/dist/node-host/node-host.js +6127 -4438
- package/dist/server/assets/{branch-previews-ClkoJ0lM.js → branch-previews-DedrpnVR.js} +1555 -673
- package/dist/{node-host/assets/canvas-DxmcFZCh.js → server/assets/canvas-CJWQ-jjv.js} +98 -6
- package/dist/server/assets/{comment-data-NLeHG89b.js → comment-data-Rg42ToTW.js} +1660 -26
- package/dist/server/assets/dist-BCSTeNf4.js +4785 -0
- package/dist/server/assets/{events-iHpLGr3k.js → events-BH_rAu7O.js} +155 -20
- package/dist/server/assets/{files-CRdl489E.js → files-CPJqKeMo.js} +12 -7
- package/dist/server/assets/{listener-BAYn9Q-u.js → listener-D61O6PzF.js} +708 -12
- package/dist/server/assets/{pages-DXVlJlBC.js → pages-KJY_Ba92.js} +4 -4
- package/dist/server/assets/{project-branches-CwTsf6WQ.js → project-branches-qG9ACZvo.js} +2 -2
- package/dist/{node-host/assets/project-thread-links-m-OLpsD9.js → server/assets/project-thread-links-CqK0lqCF.js} +77 -4
- package/dist/{node-host/assets/tasks-request-B0aeNocI.js → server/assets/project-work-DoIwxWMm.js} +87 -2
- package/dist/server/assets/run-BJ8r5jSh.js +572 -0
- package/dist/server/assets/{screen-B1zH_1O3.js → screen-CBrHPFug.js} +26 -2
- package/dist/server/assets/{server-DxK-UB_Z.js → server-Dkbp5stG.js} +1521 -793
- package/dist/server/assets/{services-BRrgXYlT.js → services-BTfig8A8.js} +234 -997
- package/dist/server/assets/tasks-Bgu5Lg9Y.js +1427 -0
- package/dist/server/assets/wasm-inline-Dl9tqabx.js +4 -0
- package/dist/server/capture.js +1 -2
- package/dist/server/migration.js +569 -12
- package/dist/server/runtime.js +7 -5
- package/dist/server/server.js +3 -3
- package/dist/types/assets/{config-DIC2cf_S.d.ts → config-CvcYmE2s.d.ts} +188 -50
- package/dist/types/assets/{contract-CAT-XFNq.d.ts → contract-B7yuuqSn.d.ts} +44 -2
- package/dist/types/assets/{items-CaVkByHk.d.ts → items-BQdaVksf.d.ts} +12 -1
- package/dist/types/assets/memory-state-BBW-FAVA.d.ts +236 -0
- package/dist/types/assets/picker-Be5Gx4WR.d.ts +9 -0
- package/dist/types/assets/{task-design-xJOhRNWh.d.ts → task-design-BDHKFHpp.d.ts} +3 -1
- package/dist/types/bridge.d.ts +1 -1
- package/dist/types/companion.d.ts +3 -3
- package/dist/types/design.d.ts +2 -2
- package/dist/types/hosted.d.ts +3 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/node-host.d.ts +2 -2
- package/dist/types/plugins.d.ts +445 -0
- package/dist/types/screen.d.ts +2 -2
- package/dist/types/server.d.ts +2 -228
- package/dist/types/vite.d.ts +16 -0
- package/package.json +19 -3
- package/dist/client/assets/canvas-8GXJIuDK.js +0 -1
- package/dist/client/assets/difference-worker-C99ychYw.js +0 -8
- package/dist/client/assets/files-DkWt1l9H.js +0 -1
- package/dist/client/assets/i18n-hH_Ba5QO.js +0 -1
- package/dist/client/assets/index-tpHYVXma.css +0 -2
- package/dist/client/assets/pages-BVd6MQmu.js +0 -1
- package/dist/client/assets/project-comments-D1IIQwsW.js +0 -1
- package/dist/client/assets/project-thread-links-DKwe_SYb.js +0 -1
- package/dist/client/assets/project-work-D4DZqBCZ.js +0 -1
- package/dist/client/assets/tasks-Cn0VOZ9Z.js +0 -1
- package/dist/client/assets/tasks-request-BLyOzokZ.js +0 -1
- package/dist/client/assets/workspace-DGErsSg6.js +0 -2
- package/dist/hosted/assets/tasks-_yKh2Z6q.js +0 -649
- package/dist/hosted/assets/tasks-request-CFPLvLc7.js +0 -113
- package/dist/node-host/assets/tasks-BBK_CybR.js +0 -651
- package/dist/server/assets/project-work-CSZlCwH-.js +0 -88
- package/dist/server/assets/tasks-CGdz-uox.js +0 -652
- package/dist/server/assets/tasks-request-D2NBjCTl.js +0 -115
- package/dist/types/assets/picker-D1Bw3ndx.d.ts +0 -14
|
@@ -803,7 +803,7 @@ function matches$2(pattern) {
|
|
|
803
803
|
* @param maximum - The longest length allowed.
|
|
804
804
|
* @returns The string schema.
|
|
805
805
|
*/
|
|
806
|
-
function text$
|
|
806
|
+
function text$7(maximum = 6e4) {
|
|
807
807
|
return string$2().pipe(maxLength(maximum), noNul$2);
|
|
808
808
|
}
|
|
809
809
|
/**
|
|
@@ -812,7 +812,7 @@ function text$8(maximum = 6e4) {
|
|
|
812
812
|
* @returns The string schema.
|
|
813
813
|
*/
|
|
814
814
|
function nonempty(maximum = 512) {
|
|
815
|
-
return text$
|
|
815
|
+
return text$7(maximum).refine((value) => !!value.trim());
|
|
816
816
|
}
|
|
817
817
|
var identifier$1 = nonempty().pipe(matches$2(/^[a-zA-Z0-9][a-zA-Z0-9._:-]*$/), { check: (value) => !reserved$1.includes(value) });
|
|
818
818
|
/**
|
|
@@ -832,9 +832,9 @@ function number$1(minimum = -Number.MAX_SAFE_INTEGER, maximum = Number.MAX_SAFE_
|
|
|
832
832
|
function integer$2(maximum = Number.MAX_SAFE_INTEGER) {
|
|
833
833
|
return number$1(0, maximum).pipe(safeInteger$2);
|
|
834
834
|
}
|
|
835
|
-
var timestamp$2 = text$
|
|
836
|
-
var date$1 = text$
|
|
837
|
-
var revision$
|
|
835
|
+
var timestamp$2 = text$7(64).pipe(matches$2(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d+)?(?:Z|[+-]\d\d:\d\d)$/)).refine((value) => Number.isFinite(Date.parse(value)));
|
|
836
|
+
var date$1 = text$7(10).pipe(matches$2(/^\d{4}-\d\d-\d\d$/)).refine((value) => Number.isFinite(Date.parse(value)) && new Date(value).toISOString().slice(0, 10) === value);
|
|
837
|
+
var revision$1 = nullable(nonempty(256));
|
|
838
838
|
var InvalidJson = class {
|
|
839
839
|
path;
|
|
840
840
|
constructor(path) {
|
|
@@ -1066,7 +1066,7 @@ function statusCategory(schema, value) {
|
|
|
1066
1066
|
var MessageAuthorSchema = field("author", strict$2({
|
|
1067
1067
|
id: nonempty(256),
|
|
1068
1068
|
name: nonempty(1e3),
|
|
1069
|
-
email: text$
|
|
1069
|
+
email: text$7(1e3)
|
|
1070
1070
|
}));
|
|
1071
1071
|
/** A message returned by storage, never a browser write request. */
|
|
1072
1072
|
var MessageSchema = field("message", strict$2({
|
|
@@ -1149,11 +1149,11 @@ function cached(schema, key, build) {
|
|
|
1149
1149
|
var PersonSchema = strict$2({
|
|
1150
1150
|
id: nonempty(),
|
|
1151
1151
|
name: nonempty(),
|
|
1152
|
-
email: optional(text$
|
|
1152
|
+
email: optional(text$7(1e3))
|
|
1153
1153
|
});
|
|
1154
1154
|
var itemRefShape = strict$2({
|
|
1155
1155
|
id: identifier$1,
|
|
1156
|
-
title: optional(text$
|
|
1156
|
+
title: optional(text$7(1e3)),
|
|
1157
1157
|
status: optional(identifier$1),
|
|
1158
1158
|
type: optional(identifier$1),
|
|
1159
1159
|
priority: optional(number$1())
|
|
@@ -1170,14 +1170,14 @@ function webUrl(value) {
|
|
|
1170
1170
|
}
|
|
1171
1171
|
function kindSchema(field, schema) {
|
|
1172
1172
|
switch (field.kind) {
|
|
1173
|
-
case "text": return field.required ? nonempty(6e4) : text$
|
|
1174
|
-
case "markdown": return text$
|
|
1173
|
+
case "text": return field.required ? nonempty(6e4) : text$7();
|
|
1174
|
+
case "markdown": return text$7();
|
|
1175
1175
|
case "number": return number$1();
|
|
1176
1176
|
case "duration": return number$1(0);
|
|
1177
1177
|
case "boolean": return boolean$1();
|
|
1178
1178
|
case "date": return date$1;
|
|
1179
1179
|
case "datetime": return timestamp$2;
|
|
1180
|
-
case "url": return text$
|
|
1180
|
+
case "url": return text$7(4096).refine((url) => !url && !field.required || webUrl(url));
|
|
1181
1181
|
case "person": return PersonSchema;
|
|
1182
1182
|
case "people": return uniqueList(PersonSchema, 100, (person) => person.id);
|
|
1183
1183
|
case "labels": return uniqueList(nonempty(128), 100, (label) => label);
|
|
@@ -1233,6 +1233,25 @@ var counts = verify(both(record, record$1(enum_([
|
|
|
1233
1233
|
"incoming"
|
|
1234
1234
|
]), integer$2())), (counts) => counts.children !== void 0 && counts.childrenDone !== void 0 && counts.childrenDone > counts.children ? ["childrenDone"] : void 0);
|
|
1235
1235
|
/**
|
|
1236
|
+
* Summarizes the run record an adapter keeps on an item (`budRun`) for its board badge.
|
|
1237
|
+
* @param value - The stored record; anything else gives no summary.
|
|
1238
|
+
* @returns The run's state and error, or undefined without a readable run.
|
|
1239
|
+
*/
|
|
1240
|
+
function workRunSummary(value) {
|
|
1241
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
|
|
1242
|
+
let { state, error } = value;
|
|
1243
|
+
if (typeof state !== "string" || !/^[a-z_]{1,32}$/.test(state)) return void 0;
|
|
1244
|
+
let message = error && typeof error === "object" && typeof error.message === "string" ? error.message.slice(0, 500) : null;
|
|
1245
|
+
return value.asleep === true ? {
|
|
1246
|
+
state,
|
|
1247
|
+
error: message,
|
|
1248
|
+
asleep: true
|
|
1249
|
+
} : {
|
|
1250
|
+
state,
|
|
1251
|
+
error: message
|
|
1252
|
+
};
|
|
1253
|
+
}
|
|
1254
|
+
/**
|
|
1236
1255
|
* Creates the schema for an adapter item against its current schema.
|
|
1237
1256
|
* @param schema - Its adapter's validated field and relation declarations.
|
|
1238
1257
|
* @returns The schema for a complete or explicitly brief item.
|
|
@@ -1246,12 +1265,17 @@ function createWorkItemSchema(schema) {
|
|
|
1246
1265
|
});
|
|
1247
1266
|
let item = (mode) => strict$2({
|
|
1248
1267
|
id: identifier$1,
|
|
1249
|
-
revision: revision$
|
|
1268
|
+
revision: revision$1,
|
|
1250
1269
|
values: field("values", valuesSchema(schema, mode)),
|
|
1251
1270
|
relations: uniqueList(relation, MAX_WORK_ITEMS, (entry) => `${entry.type}:${entry.direction}:${entry.item.id}`),
|
|
1252
1271
|
counts,
|
|
1253
1272
|
ready: optional(boolean$1()),
|
|
1254
1273
|
closeable: optional(boolean$1()),
|
|
1274
|
+
run: optional(strict$2({
|
|
1275
|
+
state: identifier$1,
|
|
1276
|
+
error: nullable(text$7(500)),
|
|
1277
|
+
asleep: optional(boolean$1())
|
|
1278
|
+
})),
|
|
1255
1279
|
contentLoaded: boolean$1(),
|
|
1256
1280
|
extra: JsonSchema
|
|
1257
1281
|
});
|
|
@@ -1349,8 +1373,8 @@ var WorkActivitySchema = field("activity", strict$2({
|
|
|
1349
1373
|
]),
|
|
1350
1374
|
summary: nonempty(4e3),
|
|
1351
1375
|
field: optional(identifier$1),
|
|
1352
|
-
from: optional(nullable(text$
|
|
1353
|
-
to: optional(nullable(text$
|
|
1376
|
+
from: optional(nullable(text$7(4e3))),
|
|
1377
|
+
to: optional(nullable(text$7(4e3)))
|
|
1354
1378
|
}));
|
|
1355
1379
|
/**
|
|
1356
1380
|
* Creates the schema for a historical item snapshot; a backend may expose only its revision.
|
|
@@ -1477,7 +1501,7 @@ function createWorkMutationResultSchema(schema) {
|
|
|
1477
1501
|
/** Optional list modifiers and a bounded result limit. */
|
|
1478
1502
|
var WorkQuerySchema = field("query", strict$2({
|
|
1479
1503
|
limit: defaulted(integer$2(MAX_WORK_ITEMS).refine((limit) => limit !== 0), MAX_WORK_ITEMS),
|
|
1480
|
-
search: optional(text$
|
|
1504
|
+
search: optional(text$7(1e3)),
|
|
1481
1505
|
status: optional(identifier$1)
|
|
1482
1506
|
}));
|
|
1483
1507
|
var direction = enum_([
|
|
@@ -1506,16 +1530,6 @@ function parseWorkItemRef(value, field = "itemRef") {
|
|
|
1506
1530
|
return parseWork(itemRefShape, value, field);
|
|
1507
1531
|
}
|
|
1508
1532
|
/**
|
|
1509
|
-
* Validates a field value against its declared kind and options.
|
|
1510
|
-
* @param value - Untrusted data from a request, adapter or response.
|
|
1511
|
-
* @param field - The field declaration whose kind and options apply.
|
|
1512
|
-
* @param schema - The adapter’s validated schema.
|
|
1513
|
-
* @returns The validated value for the declared field kind.
|
|
1514
|
-
*/
|
|
1515
|
-
function parseWorkValue(value, field, schema) {
|
|
1516
|
-
return parseWork(createWorkValueSchema(field, schema), value, `values.${field.id}`);
|
|
1517
|
-
}
|
|
1518
|
-
/**
|
|
1519
1533
|
* Validates an adapter item against its current schema.
|
|
1520
1534
|
* @param value - The untrusted record.
|
|
1521
1535
|
* @param schema - Its adapter's validated field and relation declarations.
|
|
@@ -1698,7 +1712,7 @@ var ElementAnchorSchema = strict$2({
|
|
|
1698
1712
|
contentHash: nonempty(128),
|
|
1699
1713
|
label: nonempty(500),
|
|
1700
1714
|
tagName: nonempty(100),
|
|
1701
|
-
text: text$
|
|
1715
|
+
text: text$7(1e3),
|
|
1702
1716
|
offsetX: number$1(0, 1),
|
|
1703
1717
|
offsetY: number$1(0, 1),
|
|
1704
1718
|
block: optional(nullable(ElementBlockSchema)),
|
|
@@ -1861,7 +1875,7 @@ function keyed(keys, schema) {
|
|
|
1861
1875
|
* @param requireWellFormed - Whether lone surrogates are rejected.
|
|
1862
1876
|
* @returns The string schema.
|
|
1863
1877
|
*/
|
|
1864
|
-
function text$
|
|
1878
|
+
function text$6(maximum = 4096, requireWellFormed = false) {
|
|
1865
1879
|
let checks = [maxLength(maximum), noNul$1];
|
|
1866
1880
|
if (requireWellFormed) checks.push(wellFormed);
|
|
1867
1881
|
return string$2().pipe(...checks);
|
|
@@ -1896,9 +1910,9 @@ function list$5(item, maximum, minimum = 0, message = "Expected a bounded list."
|
|
|
1896
1910
|
function unique$1(values, key) {
|
|
1897
1911
|
return new Set(values.map(key)).size === values.length;
|
|
1898
1912
|
}
|
|
1899
|
-
var revision
|
|
1913
|
+
var revision = described$2(string$2().pipe(matches$1(/^[a-f0-9]{64}$/)), "Expected a complete content revision.");
|
|
1900
1914
|
var identifier = described$2(string$2().pipe(matches$1(/^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/)), "Invalid identifier.");
|
|
1901
|
-
var timestamp$1 = text$
|
|
1915
|
+
var timestamp$1 = text$6(30).refine((value) => Number.isFinite(Date.parse(value)) && new Date(value).toISOString() === value, "Invalid timestamp.");
|
|
1902
1916
|
//#endregion
|
|
1903
1917
|
//#region ../files/src/lib/paths.ts
|
|
1904
1918
|
var reserved = /* @__PURE__ */ new Set([
|
|
@@ -2000,7 +2014,7 @@ strict$1({
|
|
|
2000
2014
|
includeIgnored: fallback(boolean$1(), false),
|
|
2001
2015
|
includeDotfiles: fallback(boolean$1(), true),
|
|
2002
2016
|
visibility: fallback(enum_(["all", ...visibilities]), "all"),
|
|
2003
|
-
search: fallback(text$
|
|
2017
|
+
search: fallback(text$6(256), "")
|
|
2004
2018
|
});
|
|
2005
2019
|
var FileEntrySchema = strict$1({
|
|
2006
2020
|
path: FilePathSchema,
|
|
@@ -2031,22 +2045,22 @@ var FileWatchStatusSchema = strict$1({
|
|
|
2031
2045
|
}).refine((status) => status.directories <= status.limit, "Expected a bounded integer.");
|
|
2032
2046
|
var FileIndexSchema = strict$1({
|
|
2033
2047
|
directory: FileDirectorySchema,
|
|
2034
|
-
revision
|
|
2048
|
+
revision,
|
|
2035
2049
|
entries: list$5(FileEntrySchema, 1e5).refine((entries) => unique$1(entries, (entry) => entry.path), "Duplicate file paths."),
|
|
2036
2050
|
truncated: boolean$1(),
|
|
2037
2051
|
maxEntries: integer$1(1e5),
|
|
2038
2052
|
issues: list$5(strict$1({
|
|
2039
|
-
path: text$
|
|
2053
|
+
path: text$6(),
|
|
2040
2054
|
code: enum_(issueCodes),
|
|
2041
|
-
message: text$
|
|
2055
|
+
message: text$6(512)
|
|
2042
2056
|
}), 256),
|
|
2043
2057
|
git: enum_(["available", "unavailable"]),
|
|
2044
2058
|
watch: FileWatchStatusSchema
|
|
2045
2059
|
}).refine((index) => index.entries.length <= index.maxEntries, "Expected a bounded list.");
|
|
2046
2060
|
var FileDocumentSchema = strict$1({
|
|
2047
2061
|
entry: FileEntrySchema,
|
|
2048
|
-
contents: nullable(text$
|
|
2049
|
-
revision: nullable(revision
|
|
2062
|
+
contents: nullable(text$6(67108864)),
|
|
2063
|
+
revision: nullable(revision),
|
|
2050
2064
|
encoding: nullable(enum_(["utf8", "utf8-bom"])),
|
|
2051
2065
|
lineEnding: nullable(enum_([
|
|
2052
2066
|
"lf",
|
|
@@ -2164,11 +2178,11 @@ function ordered(match) {
|
|
|
2164
2178
|
strict$1(matchShape).refine(ordered, "Expected a bounded integer.");
|
|
2165
2179
|
var FileSearchResultSchema = strict$1({
|
|
2166
2180
|
query: FileSearchQuerySchema,
|
|
2167
|
-
indexRevision: revision
|
|
2181
|
+
indexRevision: revision,
|
|
2168
2182
|
matches: list$5(strict$1({
|
|
2169
2183
|
...matchShape,
|
|
2170
2184
|
path: FilePathSchema,
|
|
2171
|
-
revision
|
|
2185
|
+
revision
|
|
2172
2186
|
}).refine(ordered, "Expected a bounded integer."), 500, 0, "Invalid search matches."),
|
|
2173
2187
|
scannedFiles: integer$1(1e5),
|
|
2174
2188
|
scannedBytes: integer$1(134217728),
|
|
@@ -8700,7 +8714,7 @@ function replacementEdits(contents, pattern, replacement, expectedContents, sele
|
|
|
8700
8714
|
}
|
|
8701
8715
|
//#endregion
|
|
8702
8716
|
//#region ../files/src/lib/review-parsers.ts
|
|
8703
|
-
var oid = text$
|
|
8717
|
+
var oid = text$6(64).refine((value) => /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(value), "Expected a full Git object ID.");
|
|
8704
8718
|
var mode = enum_([
|
|
8705
8719
|
"100644",
|
|
8706
8720
|
"100755",
|
|
@@ -8719,7 +8733,7 @@ var statusCodes = [
|
|
|
8719
8733
|
"?",
|
|
8720
8734
|
"!"
|
|
8721
8735
|
];
|
|
8722
|
-
var ReviewRevisionSchema = text$
|
|
8736
|
+
var ReviewRevisionSchema = text$6(1024).refine((input) => input === "HEAD" || /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(input) || input.startsWith("refs/") && !/[\x00-\x20\x7f~^:?*\[\\]/.test(input) && !input.includes("..") && !input.includes("@{") && !input.endsWith(".") && !input.split("/").some((part) => !part || part.startsWith(".") || part.endsWith(".lock")), "Choose HEAD, a full object ID, or a full refs/... name.");
|
|
8723
8737
|
var noEndpoint = described$2(undefined_(), "Commit endpoints require a commit comparison.");
|
|
8724
8738
|
var ReviewComparisonSchema = keyed([
|
|
8725
8739
|
"mode",
|
|
@@ -8745,14 +8759,14 @@ var ReviewComparisonSchema = keyed([
|
|
|
8745
8759
|
strict$1({
|
|
8746
8760
|
comparison: ReviewComparisonSchema,
|
|
8747
8761
|
path: FilePathSchema,
|
|
8748
|
-
expectedRevision: optional(revision
|
|
8762
|
+
expectedRevision: optional(revision)
|
|
8749
8763
|
});
|
|
8750
8764
|
var commit = oid.refine((value) => !/^0+$/.test(value), "Expected a nonzero commit ID.");
|
|
8751
8765
|
strict$1({
|
|
8752
8766
|
path: FilePathSchema,
|
|
8753
8767
|
commit
|
|
8754
8768
|
});
|
|
8755
|
-
var cursor = text$
|
|
8769
|
+
var cursor = text$6(80).refine((value) => /^(?:[a-f0-9]{40}|[a-f0-9]{64}):(?:0|[1-9]\d{0,4})$/.test(value), "Invalid history cursor.").refine((value) => Number(value.split(":")[1]) <= 1e4, "History cursor exceeds the history bound.");
|
|
8756
8770
|
strict$1({
|
|
8757
8771
|
path: FilePathSchema,
|
|
8758
8772
|
revision: optional(ReviewRevisionSchema),
|
|
@@ -8788,7 +8802,7 @@ var ReviewRepositorySchema = strict$1({
|
|
|
8788
8802
|
references: list$5(ReviewReferenceSchema, 1e3),
|
|
8789
8803
|
status: list$5(ReviewStatusSchema, 1e4),
|
|
8790
8804
|
truncated: boolean$1(),
|
|
8791
|
-
revision
|
|
8805
|
+
revision
|
|
8792
8806
|
}).refine(({ available, head, branch, unborn, detached }) => unborn === (available && head === null) && detached === (available && head !== null && branch === null) && (branch === null || branch.startsWith("refs/heads/")) && (available || head === null && branch === null), "Inconsistent repository state.");
|
|
8793
8807
|
var ReviewEntrySchema = strict$1({
|
|
8794
8808
|
path: FilePathSchema,
|
|
@@ -8820,7 +8834,7 @@ function pinned({ comparison, base, target }) {
|
|
|
8820
8834
|
var unpinned = "Inconsistent pinned comparison endpoints.";
|
|
8821
8835
|
var ReviewSnapshotSchema = strict$1({
|
|
8822
8836
|
...endpointShape,
|
|
8823
|
-
revision
|
|
8837
|
+
revision,
|
|
8824
8838
|
entries: list$5(ReviewEntrySchema, 1e4).refine((entries) => unique$1(entries, (entry) => entry.path), "Duplicate review paths."),
|
|
8825
8839
|
truncated: boolean$1()
|
|
8826
8840
|
}).refine(pinned, unpinned);
|
|
@@ -8837,7 +8851,7 @@ var ReviewFileSchema = strict$1({
|
|
|
8837
8851
|
"unavailable"
|
|
8838
8852
|
]),
|
|
8839
8853
|
size: nullable(integer$1()),
|
|
8840
|
-
contents: nullable(text$
|
|
8854
|
+
contents: nullable(text$6(67108864)),
|
|
8841
8855
|
encoding: nullable(enum_(["utf8", "utf8-bom"])),
|
|
8842
8856
|
lineEnding: nullable(enum_([
|
|
8843
8857
|
"lf",
|
|
@@ -8845,8 +8859,8 @@ var ReviewFileSchema = strict$1({
|
|
|
8845
8859
|
"mixed",
|
|
8846
8860
|
"none"
|
|
8847
8861
|
])),
|
|
8848
|
-
revision: nullable(revision
|
|
8849
|
-
cacheKey: revision
|
|
8862
|
+
revision: nullable(revision),
|
|
8863
|
+
cacheKey: revision
|
|
8850
8864
|
}).refine((file) => file.kind === "text" === (file.contents !== null && file.revision !== null && file.encoding !== null && file.lineEnding !== null), "Inconsistent review content.").refine((file) => file.kind === "text" || file.contents === null && file.encoding === null && file.lineEnding === null, "Unsupported review files cannot expose text.").refine((file) => file.kind === "symlink" === (file.mode === "120000") && file.kind === "gitlink" === (file.mode === "160000") && (file.kind === "text" || file.kind === "binary" || file.revision === null), "Inconsistent review file descriptor.");
|
|
8851
8865
|
var ReviewSourceSchema = strict$1({
|
|
8852
8866
|
path: FilePathSchema,
|
|
@@ -8855,8 +8869,8 @@ var ReviewSourceSchema = strict$1({
|
|
|
8855
8869
|
}).refine(({ path, commit, file }) => !file || file.name === path && file.oid !== null && file.oid.length === commit.length, "Inconsistent immutable file source.");
|
|
8856
8870
|
var ReviewDiffSchema = strict$1({
|
|
8857
8871
|
...endpointShape,
|
|
8858
|
-
metadataRevision: revision
|
|
8859
|
-
revision
|
|
8872
|
+
metadataRevision: revision,
|
|
8873
|
+
revision,
|
|
8860
8874
|
entry: ReviewEntrySchema,
|
|
8861
8875
|
oldFile: nullable(ReviewFileSchema),
|
|
8862
8876
|
newFile: nullable(ReviewFileSchema),
|
|
@@ -8870,15 +8884,15 @@ var ReviewCommitSchema = strict$1({
|
|
|
8870
8884
|
commit: oid,
|
|
8871
8885
|
parents: list$5(oid, 256),
|
|
8872
8886
|
author: strict$1({
|
|
8873
|
-
name: text$
|
|
8874
|
-
email: text$
|
|
8887
|
+
name: text$6(),
|
|
8888
|
+
email: text$6()
|
|
8875
8889
|
}),
|
|
8876
|
-
authoredAt: text$
|
|
8877
|
-
subject: text$
|
|
8878
|
-
message: text$
|
|
8890
|
+
authoredAt: text$6(40).refine((value) => Number.isFinite(Date.parse(value)), "Invalid commit date."),
|
|
8891
|
+
subject: text$6(65536),
|
|
8892
|
+
message: text$6(1048576),
|
|
8879
8893
|
path: FilePathSchema,
|
|
8880
8894
|
previousPath: optional(FilePathSchema),
|
|
8881
|
-
change: nullable(text$
|
|
8895
|
+
change: nullable(text$6(4).refine((value) => /^[ACDMRTU](?:\d{1,3})?$/.test(value), "Invalid history change."))
|
|
8882
8896
|
});
|
|
8883
8897
|
var ReviewHistorySchema = strict$1({
|
|
8884
8898
|
path: FilePathSchema,
|
|
@@ -9001,7 +9015,7 @@ var FileMutationIntentSchema = keyed([
|
|
|
9001
9015
|
"create-file": strict$1({
|
|
9002
9016
|
kind: literal("create-file"),
|
|
9003
9017
|
path: FilePathSchema,
|
|
9004
|
-
contents: text$
|
|
9018
|
+
contents: text$6(2097152, true)
|
|
9005
9019
|
}),
|
|
9006
9020
|
"create-folder": strict$1({
|
|
9007
9021
|
kind: literal("create-folder"),
|
|
@@ -9020,14 +9034,14 @@ var FileMutationIntentSchema = keyed([
|
|
|
9020
9034
|
}));
|
|
9021
9035
|
strict$1({
|
|
9022
9036
|
id: identifier,
|
|
9023
|
-
revision
|
|
9037
|
+
revision
|
|
9024
9038
|
});
|
|
9025
9039
|
var itemShape = {
|
|
9026
9040
|
source: nullable(FilePathSchema),
|
|
9027
9041
|
destination: nullable(FilePathSchema),
|
|
9028
9042
|
kind: enum_(["file", "directory"]),
|
|
9029
9043
|
bytes: integer$1(),
|
|
9030
|
-
revision: nullable(revision
|
|
9044
|
+
revision: nullable(revision)
|
|
9031
9045
|
};
|
|
9032
9046
|
var endpoint = "A file action needs a source or destination.";
|
|
9033
9047
|
function hasEndpoint(item) {
|
|
@@ -9036,14 +9050,14 @@ function hasEndpoint(item) {
|
|
|
9036
9050
|
var FileMutationItemSchema = strict$1(itemShape).refine(hasEndpoint, endpoint);
|
|
9037
9051
|
var FileMutationPlanSchema = strict$1({
|
|
9038
9052
|
id: identifier,
|
|
9039
|
-
revision
|
|
9053
|
+
revision,
|
|
9040
9054
|
kind: enum_(kinds$1),
|
|
9041
9055
|
expiresAt: timestamp$1,
|
|
9042
9056
|
items: list$5(FileMutationItemSchema, 100, 1)
|
|
9043
9057
|
});
|
|
9044
9058
|
var FileMutationProblemSchema = strict$1({
|
|
9045
9059
|
code: enum_(codes),
|
|
9046
|
-
message: text$
|
|
9060
|
+
message: text$6(512, true),
|
|
9047
9061
|
path: nullable(FilePathSchema)
|
|
9048
9062
|
});
|
|
9049
9063
|
var FileMutationResultSchema = strict$1({
|
|
@@ -9130,13 +9144,13 @@ var maxFileSaveBytes = 2097152;
|
|
|
9130
9144
|
var encoder$1 = new TextEncoder();
|
|
9131
9145
|
var FileSaveRequestSchema = strict$1({
|
|
9132
9146
|
path: FilePathSchema,
|
|
9133
|
-
expectedRevision: revision
|
|
9147
|
+
expectedRevision: revision,
|
|
9134
9148
|
contents: described$2(string$2().pipe(maxLength(maxFileSaveBytes)).refine((contents) => !contents.includes("\0") && contents.isWellFormed() && encoder$1.encode(contents).byteLength <= 2097152), "Save a valid UTF-8 text file of at most 2 MiB.")
|
|
9135
9149
|
});
|
|
9136
9150
|
var FileSaveResultSchema = strict$1({
|
|
9137
9151
|
path: FilePathSchema,
|
|
9138
|
-
previousRevision: revision
|
|
9139
|
-
revision
|
|
9152
|
+
previousRevision: revision,
|
|
9153
|
+
revision,
|
|
9140
9154
|
bytes: integer$1(maxFileSaveBytes),
|
|
9141
9155
|
status: enum_(["saved", "unchanged"]),
|
|
9142
9156
|
refresh: enum_(["complete", "failed"])
|
|
@@ -9205,7 +9219,7 @@ function selectionIntent(kind) {
|
|
|
9205
9219
|
return strict$1({
|
|
9206
9220
|
kind: literal(kind),
|
|
9207
9221
|
path: FilePathSchema,
|
|
9208
|
-
expectedRevision: revision
|
|
9222
|
+
expectedRevision: revision,
|
|
9209
9223
|
selection: ReviewActionSelectionSchema
|
|
9210
9224
|
});
|
|
9211
9225
|
}
|
|
@@ -9223,7 +9237,7 @@ keyed([
|
|
|
9223
9237
|
"mark-resolved": strict$1({
|
|
9224
9238
|
kind: literal("mark-resolved"),
|
|
9225
9239
|
path: FilePathSchema,
|
|
9226
|
-
expectedRevision: revision
|
|
9240
|
+
expectedRevision: revision,
|
|
9227
9241
|
conflict: described$2(string$2().pipe(matches$1(conflictIdentity)).refine((conflict) => conflict !== "-|-|-"), "The original conflict stages are required.")
|
|
9228
9242
|
}),
|
|
9229
9243
|
undo: strict$1({
|
|
@@ -9233,11 +9247,11 @@ keyed([
|
|
|
9233
9247
|
}));
|
|
9234
9248
|
strict$1({
|
|
9235
9249
|
id: identifier,
|
|
9236
|
-
revision
|
|
9250
|
+
revision
|
|
9237
9251
|
});
|
|
9238
9252
|
var ReviewActionPlanSchema = strict$1({
|
|
9239
9253
|
id: identifier,
|
|
9240
|
-
revision
|
|
9254
|
+
revision,
|
|
9241
9255
|
kind: enum_(kinds),
|
|
9242
9256
|
target,
|
|
9243
9257
|
paths: paths$1,
|
|
@@ -15041,7 +15055,7 @@ var textEntitySubset = ["<", "&"];
|
|
|
15041
15055
|
* @returns {string}
|
|
15042
15056
|
* Serialized node.
|
|
15043
15057
|
*/
|
|
15044
|
-
function text$
|
|
15058
|
+
function text$5(node, _, parent, state) {
|
|
15045
15059
|
return parent && parent.type === "element" && (parent.tagName === "script" || parent.tagName === "style") ? node.value : stringifyEntities(node.value, Object.assign({}, state.settings.characterReferences, { subset: textEntitySubset }));
|
|
15046
15060
|
}
|
|
15047
15061
|
//#endregion
|
|
@@ -15066,7 +15080,7 @@ function text$6(node, _, parent, state) {
|
|
|
15066
15080
|
* Serialized node.
|
|
15067
15081
|
*/
|
|
15068
15082
|
function raw(node, index, parent, state) {
|
|
15069
|
-
return state.settings.allowDangerousHtml ? node.value : text$
|
|
15083
|
+
return state.settings.allowDangerousHtml ? node.value : text$5(node, index, parent, state);
|
|
15070
15084
|
}
|
|
15071
15085
|
//#endregion
|
|
15072
15086
|
//#region ../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js
|
|
@@ -15109,7 +15123,7 @@ var handle = zwitch("type", {
|
|
|
15109
15123
|
element,
|
|
15110
15124
|
raw,
|
|
15111
15125
|
root,
|
|
15112
|
-
text: text$
|
|
15126
|
+
text: text$5
|
|
15113
15127
|
}
|
|
15114
15128
|
});
|
|
15115
15129
|
/**
|
|
@@ -37651,7 +37665,7 @@ var ThreadSchema = field("thread", verify(strict$2({
|
|
|
37651
37665
|
messagesTruncated: boolean$1(),
|
|
37652
37666
|
createdAt: timestamp$2,
|
|
37653
37667
|
updatedAt: timestamp$2,
|
|
37654
|
-
revision: revision$
|
|
37668
|
+
revision: revision$1,
|
|
37655
37669
|
metadata: optional(JsonSchema)
|
|
37656
37670
|
}), (thread) => {
|
|
37657
37671
|
let { messages, messageCount, messagesLoaded, messagesTruncated } = thread;
|
|
@@ -37723,7 +37737,7 @@ var ThreadLinkInputSchema = field("link", verify(strict$2({
|
|
|
37723
37737
|
/** Optional discussion filters, without a store, root or capability. */
|
|
37724
37738
|
var ThreadFilterSchema = field("filter", strict$2({
|
|
37725
37739
|
anchorKind: optional(enum_(["canvas", "code"])),
|
|
37726
|
-
pagePath: optional(both(text$
|
|
37740
|
+
pagePath: optional(both(text$7(4096), field("anchor.pagePath", PagePathSchema))),
|
|
37727
37741
|
itemId: optional(identifier$1)
|
|
37728
37742
|
}));
|
|
37729
37743
|
/**
|
|
@@ -37759,14 +37773,6 @@ function parseThread(value) {
|
|
|
37759
37773
|
return parseWork(ThreadSchema, value, "thread");
|
|
37760
37774
|
}
|
|
37761
37775
|
/**
|
|
37762
|
-
* Validates which discussion operations an adapter supports.
|
|
37763
|
-
* @param value - Untrusted data from a request, adapter or response.
|
|
37764
|
-
* @returns The supported discussion operations.
|
|
37765
|
-
*/
|
|
37766
|
-
function parseThreadCapabilities(value) {
|
|
37767
|
-
return parseWork(ThreadCapabilitiesSchema, value, "capabilities");
|
|
37768
|
-
}
|
|
37769
|
-
/**
|
|
37770
37776
|
* Validates a thread list with its availability and operation capabilities.
|
|
37771
37777
|
* @param value - Untrusted data from a request, adapter or response.
|
|
37772
37778
|
* @returns The validated connection and thread list.
|
|
@@ -38102,7 +38108,7 @@ function list$4(item, maximum, message) {
|
|
|
38102
38108
|
let items = array(item);
|
|
38103
38109
|
return createSchema((value, context) => !Array.isArray(value) || value.length > maximum ? fail(message, context.path) : items["~run"](value, context));
|
|
38104
38110
|
}
|
|
38105
|
-
function text$
|
|
38111
|
+
function text$4(maximum) {
|
|
38106
38112
|
return string$2().pipe(maxLength(maximum), noNul);
|
|
38107
38113
|
}
|
|
38108
38114
|
function integer(maximum = Number.MAX_SAFE_INTEGER, minimum = 0) {
|
|
@@ -38122,7 +38128,7 @@ function strict(shape) {
|
|
|
38122
38128
|
});
|
|
38123
38129
|
}
|
|
38124
38130
|
/** A route identity used in preview URLs. */
|
|
38125
|
-
var PreviewIdSchema = text$
|
|
38131
|
+
var PreviewIdSchema = text$4(512).refine((id) => id !== "", "Expected a preview identity.");
|
|
38126
38132
|
/** A color scheme. */
|
|
38127
38133
|
var PreviewThemeSchema = described$1(enum_(["light", "dark"]), "Unsupported preview theme.");
|
|
38128
38134
|
/** The SHA-256 content hash that addresses a captured image. */
|
|
@@ -38143,7 +38149,7 @@ var MAX_PREVIEW_PINS = 1e3;
|
|
|
38143
38149
|
var coordinate = (maximum) => nullable(number$2().refine((value) => Number.isFinite(value) && value >= 0 && value <= maximum));
|
|
38144
38150
|
/** Where a capture found a commented element. */
|
|
38145
38151
|
var PreviewPinSchema = strict({
|
|
38146
|
-
id: text$
|
|
38152
|
+
id: text$4(512).refine((id) => id.length > 0),
|
|
38147
38153
|
match: described$1(enum_([
|
|
38148
38154
|
"element",
|
|
38149
38155
|
"block",
|
|
@@ -38179,17 +38185,17 @@ var PreviewCaptureSchema = strict({
|
|
|
38179
38185
|
var oneCapturePerTheme = "Expected at most one capture per theme and viewport.";
|
|
38180
38186
|
var captureVariant = (capture) => `${capture.theme}\0${capture.viewport ?? capture.width}`;
|
|
38181
38187
|
/** A branch name, as Git allows it for a local branch. */
|
|
38182
|
-
var PreviewBranchSchema = described$1(text$
|
|
38188
|
+
var PreviewBranchSchema = described$1(text$4(255).refine((value) => /^[A-Za-z0-9._/-]+$/.test(value) && !value.startsWith("-") && !value.startsWith("/") && !value.endsWith("/") && !value.endsWith(".lock") && !value.includes("..") && !value.includes("//")), "Expected a branch name.");
|
|
38183
38189
|
/** One preview from the API. */
|
|
38184
38190
|
var PreviewSchema = strict({
|
|
38185
38191
|
id: PreviewIdSchema,
|
|
38186
|
-
path: text$
|
|
38192
|
+
path: text$4(4096),
|
|
38187
38193
|
state: described$1(enum_([
|
|
38188
38194
|
"pending",
|
|
38189
38195
|
"ready",
|
|
38190
38196
|
"failed"
|
|
38191
38197
|
]), "Unsupported preview state."),
|
|
38192
|
-
error: nullable(text$
|
|
38198
|
+
error: nullable(text$4(2048)),
|
|
38193
38199
|
captures: list$4(PreviewCaptureSchema, 8, oneCapturePerTheme).refine((captures) => new Set(captures.map(captureVariant)).size === captures.length, oneCapturePerTheme),
|
|
38194
38200
|
updating: boolean$1(),
|
|
38195
38201
|
sequence: integer(),
|
|
@@ -40062,6 +40068,147 @@ function buildRouteMap(base, defs) {
|
|
|
40062
40068
|
return routes;
|
|
40063
40069
|
}
|
|
40064
40070
|
//#endregion
|
|
40071
|
+
//#region ../../node_modules/.pnpm/@remix-run+fetch-router@1.0.0/node_modules/@remix-run/fetch-router/dist/lib/route-helpers/method.js
|
|
40072
|
+
/**
|
|
40073
|
+
* Shorthand for a GET route.
|
|
40074
|
+
*
|
|
40075
|
+
* @alias get
|
|
40076
|
+
* @param pattern The route pattern string or pre-parsed AST
|
|
40077
|
+
* @returns A Route configured for GET requests
|
|
40078
|
+
*/
|
|
40079
|
+
function createGetRoute(pattern) {
|
|
40080
|
+
return new Route$1("GET", pattern);
|
|
40081
|
+
}
|
|
40082
|
+
/**
|
|
40083
|
+
* Shorthand for a POST route.
|
|
40084
|
+
*
|
|
40085
|
+
* @alias post
|
|
40086
|
+
* @param pattern The route pattern string or pre-parsed AST
|
|
40087
|
+
* @returns A Route configured for POST requests
|
|
40088
|
+
*/
|
|
40089
|
+
function createPostRoute(pattern) {
|
|
40090
|
+
return new Route$1("POST", pattern);
|
|
40091
|
+
}
|
|
40092
|
+
//#endregion
|
|
40093
|
+
//#region ../ui/src/lib/routes.ts
|
|
40094
|
+
/** Places in Bud's task screen, shared by links and the screen's matcher. */
|
|
40095
|
+
var taskRoutes = createRoutes("/tasks", {
|
|
40096
|
+
index: createGetRoute("/"),
|
|
40097
|
+
show: createGetRoute("/:id"),
|
|
40098
|
+
agent: createGetRoute("/:id/agent")
|
|
40099
|
+
});
|
|
40100
|
+
/** Places in Bud's browser of the project's live pages: a page's own path follows the screen's. */
|
|
40101
|
+
var pageRoutes = createRoutes("/pages", {
|
|
40102
|
+
index: createGetRoute("/"),
|
|
40103
|
+
page: createGetRoute("/*path")
|
|
40104
|
+
});
|
|
40105
|
+
/** Places in Bud's file browser and review. */
|
|
40106
|
+
var fileRoutes = createRoutes("/files", {
|
|
40107
|
+
index: createGetRoute("/"),
|
|
40108
|
+
file: createGetRoute("/*path"),
|
|
40109
|
+
escaped: createGetRoute("/path/*path"),
|
|
40110
|
+
review: createGetRoute("/review/:mode(/*path)"),
|
|
40111
|
+
compare: createGetRoute("/compare/:base...:target(/*path)")
|
|
40112
|
+
});
|
|
40113
|
+
/** A conversation's stable place, independent of its canvas or code anchor. */
|
|
40114
|
+
var conversationRoutes = createRoutes("/comments", { show: createGetRoute("/:id") });
|
|
40115
|
+
//#endregion
|
|
40116
|
+
//#region app/routes.ts
|
|
40117
|
+
var routes = createRoutes({
|
|
40118
|
+
screen: createGetRoute("/(:screen)(/*rest)"),
|
|
40119
|
+
screenModule: createGetRoute("/__bud/screens/:name.js"),
|
|
40120
|
+
logo: createGetRoute("/__bud/logo/:theme"),
|
|
40121
|
+
health: createGetRoute("/health"),
|
|
40122
|
+
conversation: conversationRoutes.show,
|
|
40123
|
+
agentApi: {
|
|
40124
|
+
tasks: createPostRoute("/api/agent/tasks"),
|
|
40125
|
+
tasksStream: createGetRoute("/api/agent/tasks")
|
|
40126
|
+
},
|
|
40127
|
+
factoryApi: {
|
|
40128
|
+
status: createGetRoute("/api/factory"),
|
|
40129
|
+
addStatuses: createPostRoute("/api/factory/statuses"),
|
|
40130
|
+
run: createGetRoute("/api/factory/tasks/:id/run"),
|
|
40131
|
+
start: createPostRoute("/api/factory/tasks/:id/start"),
|
|
40132
|
+
changes: createPostRoute("/api/factory/tasks/:id/changes"),
|
|
40133
|
+
answer: createPostRoute("/api/factory/tasks/:id/answer"),
|
|
40134
|
+
approve: createPostRoute("/api/factory/tasks/:id/approve"),
|
|
40135
|
+
discard: createPostRoute("/api/factory/tasks/:id/discard"),
|
|
40136
|
+
retry: createPostRoute("/api/factory/tasks/:id/retry"),
|
|
40137
|
+
preview: createGetRoute("/api/factory/tasks/:id/preview"),
|
|
40138
|
+
wake: createPostRoute("/api/factory/tasks/:id/wake"),
|
|
40139
|
+
touch: createPostRoute("/api/factory/tasks/:id/touch"),
|
|
40140
|
+
terminal: createGetRoute("/api/factory/tasks/:id/terminal/:session"),
|
|
40141
|
+
terminalInput: createPostRoute("/api/factory/tasks/:id/terminal/:session/input"),
|
|
40142
|
+
terminalResize: createPostRoute("/api/factory/tasks/:id/terminal/:session/resize")
|
|
40143
|
+
},
|
|
40144
|
+
tasksApi: {
|
|
40145
|
+
index: createGetRoute("/api/tasks"),
|
|
40146
|
+
schema: createGetRoute("/api/tasks/schema"),
|
|
40147
|
+
workspace: createGetRoute("/api/tasks/workspace"),
|
|
40148
|
+
show: createGetRoute("/api/tasks/items/:id"),
|
|
40149
|
+
section: createGetRoute("/api/tasks/items/:id/sections/:section"),
|
|
40150
|
+
context: createGetRoute("/api/tasks/items/:id/context"),
|
|
40151
|
+
attachment: createGetRoute("/api/tasks/attachments/:hash.jpg"),
|
|
40152
|
+
create: createPostRoute("/api/tasks"),
|
|
40153
|
+
update: createPostRoute("/api/tasks/items/:id"),
|
|
40154
|
+
mutate: createPostRoute("/api/tasks/items/:id/actions"),
|
|
40155
|
+
sync: createPostRoute("/api/tasks/sync")
|
|
40156
|
+
},
|
|
40157
|
+
filesApi: {
|
|
40158
|
+
index: createGetRoute("/api/files"),
|
|
40159
|
+
entry: createGetRoute("/api/files/entry"),
|
|
40160
|
+
read: createGetRoute("/api/files/read"),
|
|
40161
|
+
refresh: createPostRoute("/api/files/refresh")
|
|
40162
|
+
},
|
|
40163
|
+
fileSearchApi: { search: createGetRoute("/api/files/search") },
|
|
40164
|
+
fileReviewApi: {
|
|
40165
|
+
repository: createGetRoute("/api/files/repository"),
|
|
40166
|
+
compare: createGetRoute("/api/files/compare"),
|
|
40167
|
+
diff: createGetRoute("/api/files/diff"),
|
|
40168
|
+
source: createGetRoute("/api/files/source"),
|
|
40169
|
+
history: createGetRoute("/api/files/history")
|
|
40170
|
+
},
|
|
40171
|
+
fileMutationsApi: {
|
|
40172
|
+
prepare: createPostRoute("/api/files/mutations/prepare"),
|
|
40173
|
+
apply: createPostRoute("/api/files/mutations/apply"),
|
|
40174
|
+
recoveries: createGetRoute("/api/files/mutations/recoveries")
|
|
40175
|
+
},
|
|
40176
|
+
fileSavesApi: { save: createPostRoute("/api/files/save") },
|
|
40177
|
+
fileReviewActionsApi: {
|
|
40178
|
+
prepare: createPostRoute("/api/files/review-actions/prepare"),
|
|
40179
|
+
apply: createPostRoute("/api/files/review-actions/apply"),
|
|
40180
|
+
recoveries: createGetRoute("/api/files/review-actions/recoveries")
|
|
40181
|
+
},
|
|
40182
|
+
liveApi: { stream: createGetRoute("/api/live") },
|
|
40183
|
+
previewsApi: {
|
|
40184
|
+
show: createGetRoute("/api/previews/items/*id"),
|
|
40185
|
+
image: createGetRoute("/api/previews/images/:hash.jpg"),
|
|
40186
|
+
refresh: createPostRoute("/api/previews/refresh/*id"),
|
|
40187
|
+
describe: createPostRoute("/api/previews/describe/*id"),
|
|
40188
|
+
locate: createPostRoute("/api/previews/locate/*id")
|
|
40189
|
+
},
|
|
40190
|
+
branchesApi: {
|
|
40191
|
+
list: createGetRoute("/api/branches"),
|
|
40192
|
+
activate: createPostRoute("/api/branches/activate/*name"),
|
|
40193
|
+
deactivate: createPostRoute("/api/branches/deactivate/*name"),
|
|
40194
|
+
capture: createPostRoute("/api/branches/capture/*name")
|
|
40195
|
+
},
|
|
40196
|
+
comments: {
|
|
40197
|
+
list: createGetRoute("/api/comments"),
|
|
40198
|
+
get: createGetRoute("/api/comments/:id"),
|
|
40199
|
+
create: createPostRoute("/api/comments"),
|
|
40200
|
+
update: createPostRoute("/api/comments/:id"),
|
|
40201
|
+
reply: createPostRoute("/api/comments/:id/replies"),
|
|
40202
|
+
status: createPostRoute("/api/comments/:id/status"),
|
|
40203
|
+
link: createPostRoute("/api/comments/:id/links"),
|
|
40204
|
+
unlink: createPostRoute("/api/comments/:id/links/remove"),
|
|
40205
|
+
makeTask: createPostRoute("/api/comments/:id/task"),
|
|
40206
|
+
deleteMessage: createPostRoute("/api/comments/:id/messages/remove"),
|
|
40207
|
+
sync: createPostRoute("/api/comments/sync"),
|
|
40208
|
+
viewer: createGetRoute("/api/viewer")
|
|
40209
|
+
}
|
|
40210
|
+
});
|
|
40211
|
+
//#endregion
|
|
40065
40212
|
//#region ../../node_modules/.pnpm/@remix-run+component@1.0.0_patch_hash=ed95ce6ac654c31698f27fd52f980c5f1d3e725ba0116b6d666a9b6b3a67016b/node_modules/@remix-run/component/dist/runtime/core/vnode.js
|
|
40066
40213
|
function createRemixElement(type, props, key) {
|
|
40067
40214
|
return {
|
|
@@ -46586,6 +46733,30 @@ function attrs(defaults) {
|
|
|
46586
46733
|
* This source code is licensed under the ISC license.
|
|
46587
46734
|
* See the LICENSE file in the root directory of this source tree.
|
|
46588
46735
|
*/
|
|
46736
|
+
/**
|
|
46737
|
+
* @license @lucide/icons v1.58.0 - ISC
|
|
46738
|
+
*
|
|
46739
|
+
* This source code is licensed under the ISC license.
|
|
46740
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
46741
|
+
*/
|
|
46742
|
+
/**
|
|
46743
|
+
* @license @lucide/icons v1.58.0 - ISC
|
|
46744
|
+
*
|
|
46745
|
+
* This source code is licensed under the ISC license.
|
|
46746
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
46747
|
+
*/
|
|
46748
|
+
/**
|
|
46749
|
+
* @license @lucide/icons v1.58.0 - ISC
|
|
46750
|
+
*
|
|
46751
|
+
* This source code is licensed under the ISC license.
|
|
46752
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
46753
|
+
*/
|
|
46754
|
+
/**
|
|
46755
|
+
* @license @lucide/icons v1.58.0 - ISC
|
|
46756
|
+
*
|
|
46757
|
+
* This source code is licensed under the ISC license.
|
|
46758
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
46759
|
+
*/
|
|
46589
46760
|
//#endregion
|
|
46590
46761
|
//#region ../ui/src/lib/icon.tsx
|
|
46591
46762
|
var icons$1 = {
|
|
@@ -47881,6 +48052,32 @@ var icons$1 = {
|
|
|
47881
48052
|
}]
|
|
47882
48053
|
]
|
|
47883
48054
|
},
|
|
48055
|
+
"task-add": {
|
|
48056
|
+
name: "list-plus",
|
|
48057
|
+
size: 24,
|
|
48058
|
+
node: [
|
|
48059
|
+
["path", {
|
|
48060
|
+
d: "M16 5H3",
|
|
48061
|
+
key: "m91uny"
|
|
48062
|
+
}],
|
|
48063
|
+
["path", {
|
|
48064
|
+
d: "M11 12H3",
|
|
48065
|
+
key: "51ecnj"
|
|
48066
|
+
}],
|
|
48067
|
+
["path", {
|
|
48068
|
+
d: "M16 19H3",
|
|
48069
|
+
key: "zzsher"
|
|
48070
|
+
}],
|
|
48071
|
+
["path", {
|
|
48072
|
+
d: "M18 9v6",
|
|
48073
|
+
key: "1twb98"
|
|
48074
|
+
}],
|
|
48075
|
+
["path", {
|
|
48076
|
+
d: "M21 12h-6",
|
|
48077
|
+
key: "bt1uis"
|
|
48078
|
+
}]
|
|
48079
|
+
]
|
|
48080
|
+
},
|
|
47884
48081
|
files: {
|
|
47885
48082
|
name: "files",
|
|
47886
48083
|
size: 24,
|
|
@@ -48279,6 +48476,60 @@ var icons$1 = {
|
|
|
48279
48476
|
}]
|
|
48280
48477
|
]
|
|
48281
48478
|
},
|
|
48479
|
+
terminal: {
|
|
48480
|
+
name: "square-terminal",
|
|
48481
|
+
size: 24,
|
|
48482
|
+
node: [
|
|
48483
|
+
["path", {
|
|
48484
|
+
d: "m7 11 2-2-2-2",
|
|
48485
|
+
key: "1lz0vl"
|
|
48486
|
+
}],
|
|
48487
|
+
["path", {
|
|
48488
|
+
d: "M11 13h4",
|
|
48489
|
+
key: "1p7l4v"
|
|
48490
|
+
}],
|
|
48491
|
+
["rect", {
|
|
48492
|
+
width: "18",
|
|
48493
|
+
height: "18",
|
|
48494
|
+
x: "3",
|
|
48495
|
+
y: "3",
|
|
48496
|
+
rx: "2",
|
|
48497
|
+
ry: "2",
|
|
48498
|
+
key: "1m3agn"
|
|
48499
|
+
}]
|
|
48500
|
+
],
|
|
48501
|
+
aliases: ["terminal-square"]
|
|
48502
|
+
},
|
|
48503
|
+
"panel-right": {
|
|
48504
|
+
name: "panel-right",
|
|
48505
|
+
size: 24,
|
|
48506
|
+
node: [["rect", {
|
|
48507
|
+
width: "18",
|
|
48508
|
+
height: "18",
|
|
48509
|
+
x: "3",
|
|
48510
|
+
y: "3",
|
|
48511
|
+
rx: "2",
|
|
48512
|
+
key: "afitv7"
|
|
48513
|
+
}], ["path", {
|
|
48514
|
+
d: "M15 3v18",
|
|
48515
|
+
key: "14nvp0"
|
|
48516
|
+
}]]
|
|
48517
|
+
},
|
|
48518
|
+
"panel-bottom": {
|
|
48519
|
+
name: "panel-bottom",
|
|
48520
|
+
size: 24,
|
|
48521
|
+
node: [["rect", {
|
|
48522
|
+
width: "18",
|
|
48523
|
+
height: "18",
|
|
48524
|
+
x: "3",
|
|
48525
|
+
y: "3",
|
|
48526
|
+
rx: "2",
|
|
48527
|
+
key: "afitv7"
|
|
48528
|
+
}], ["path", {
|
|
48529
|
+
d: "M3 15h18",
|
|
48530
|
+
key: "5xshup"
|
|
48531
|
+
}]]
|
|
48532
|
+
},
|
|
48282
48533
|
eye: {
|
|
48283
48534
|
name: "eye",
|
|
48284
48535
|
size: 24,
|
|
@@ -48891,6 +49142,34 @@ function HeadlessButton(handle) {
|
|
|
48891
49142
|
//#region ../ui/src/lib/i18n/de.ts
|
|
48892
49143
|
/** Bud's interface text in German, by message key. */
|
|
48893
49144
|
var de = {
|
|
49145
|
+
"app.client.agentPanel.agent": {
|
|
49146
|
+
text: "Agent",
|
|
49147
|
+
source: "f5a4f646"
|
|
49148
|
+
},
|
|
49149
|
+
"app.client.agentPanel.changesRefused": {
|
|
49150
|
+
text: "Der Agent kann Änderungen gerade nicht entgegennehmen",
|
|
49151
|
+
source: "bdb2edb4"
|
|
49152
|
+
},
|
|
49153
|
+
"app.client.agentPanel.changesSent": {
|
|
49154
|
+
text: "An den Agenten gesendet",
|
|
49155
|
+
source: "7f5e7626"
|
|
49156
|
+
},
|
|
49157
|
+
"app.client.agentPanel.devServer": {
|
|
49158
|
+
text: "Dev-Server",
|
|
49159
|
+
source: "27e53ed7"
|
|
49160
|
+
},
|
|
49161
|
+
"app.client.agentPanel.ended": {
|
|
49162
|
+
text: "Die Sitzung wurde beendet. Wenn du dich wieder verbindest, startet sie erneut.",
|
|
49163
|
+
source: "bf6ebbec"
|
|
49164
|
+
},
|
|
49165
|
+
"app.client.agentPanel.failed": {
|
|
49166
|
+
text: "Die Factory hat nicht geantwortet.",
|
|
49167
|
+
source: "3bd3ae7a"
|
|
49168
|
+
},
|
|
49169
|
+
"app.client.agentPanel.shell": {
|
|
49170
|
+
text: "Shell",
|
|
49171
|
+
source: "ba1969a1"
|
|
49172
|
+
},
|
|
48894
49173
|
"app.client.commentsRequest.emptyResponse": {
|
|
48895
49174
|
text: "Der Kommentarservice hat eine leere Antwort zurückgegeben.",
|
|
48896
49175
|
source: "c739d1f9"
|
|
@@ -48979,6 +49258,62 @@ var de = {
|
|
|
48979
49258
|
text: "Die Bilder konnten nicht verglichen werden.",
|
|
48980
49259
|
source: "8fd04955"
|
|
48981
49260
|
},
|
|
49261
|
+
"app.client.factoryRun.discardAndMove": {
|
|
49262
|
+
text: "Lauf verwerfen & verschieben",
|
|
49263
|
+
source: "9b3e9067"
|
|
49264
|
+
},
|
|
49265
|
+
"app.client.factoryRun.failed": {
|
|
49266
|
+
text: "Bud konnte die Factory nicht erreichen.",
|
|
49267
|
+
source: "00cea450"
|
|
49268
|
+
},
|
|
49269
|
+
"app.client.factoryRun.keepRun": {
|
|
49270
|
+
text: "Lauf behalten",
|
|
49271
|
+
source: "88a5de36"
|
|
49272
|
+
},
|
|
49273
|
+
"app.client.factoryRun.moveQuestion": {
|
|
49274
|
+
text: "Für {id} läuft ein Agent. Wenn du die Aufgabe nach {status} verschiebst, werden der Lauf und seine Sandbox verworfen. Es wurde nichts gepusht, daher geht die Arbeit des Agents verloren.",
|
|
49275
|
+
source: "d0c22345"
|
|
49276
|
+
},
|
|
49277
|
+
"app.client.factoryRun.moveTitle": {
|
|
49278
|
+
text: "Lauf des Agents verwerfen?",
|
|
49279
|
+
source: "5ce9ffe3"
|
|
49280
|
+
},
|
|
49281
|
+
"app.client.factoryRun.noPreview": {
|
|
49282
|
+
text: "Der Dev-Server des Runs ist nicht erreichbar.",
|
|
49283
|
+
source: "6dd54cb3"
|
|
49284
|
+
},
|
|
49285
|
+
"app.client.factoryRun.previewFailed": {
|
|
49286
|
+
text: "Die Live-Vorschau konnte nicht geöffnet werden",
|
|
49287
|
+
source: "a96d281a"
|
|
49288
|
+
},
|
|
49289
|
+
"app.client.factoryRun.refused": {
|
|
49290
|
+
text: "Der Run wurde nicht geändert",
|
|
49291
|
+
source: "a5fc457d"
|
|
49292
|
+
},
|
|
49293
|
+
"app.client.factoryRun.statusesMissing": {
|
|
49294
|
+
text: "Füge oben die Factory-Status hinzu, bevor du Aufgaben startest.",
|
|
49295
|
+
source: "2a26077f"
|
|
49296
|
+
},
|
|
49297
|
+
"app.client.factorySetup.add": {
|
|
49298
|
+
text: "Factory-Status hinzufügen",
|
|
49299
|
+
source: "7992be24"
|
|
49300
|
+
},
|
|
49301
|
+
"app.client.factorySetup.added": {
|
|
49302
|
+
text: "Factory-Status hinzugefügt",
|
|
49303
|
+
source: "02f6f293"
|
|
49304
|
+
},
|
|
49305
|
+
"app.client.factorySetup.failed": {
|
|
49306
|
+
text: "Factory-Status konnten nicht hinzugefügt werden",
|
|
49307
|
+
source: "8500af1b"
|
|
49308
|
+
},
|
|
49309
|
+
"app.client.factorySetup.missing": {
|
|
49310
|
+
text: "In deinem Aufgaben-Store braucht die Factory diese Status: {statuses}.",
|
|
49311
|
+
source: "573be4b6"
|
|
49312
|
+
},
|
|
49313
|
+
"app.client.factorySetup.otherKind": {
|
|
49314
|
+
text: "Dein Aufgaben-Store führt diese Factory-Status als anderen Statustyp: {statuses}. Ordne andere Status in factory.statuses zu.",
|
|
49315
|
+
source: "1b96d5e4"
|
|
49316
|
+
},
|
|
48982
49317
|
"app.client.fileDrafts.deleteWithUnsavedDrafts": {
|
|
48983
49318
|
text: "Speichere oder verwerfe die ungespeicherten Entwürfe in dieser Auswahl, bevor du sie löschst.",
|
|
48984
49319
|
source: "1deabbed"
|
|
@@ -49387,6 +49722,10 @@ var de = {
|
|
|
49387
49722
|
text: "Der Kommentardienst hat eine andere Diskussion zurückgegeben.",
|
|
49388
49723
|
source: "c0151231"
|
|
49389
49724
|
},
|
|
49725
|
+
"app.client.projectComments.taskCreated": {
|
|
49726
|
+
text: "Aufgabe erstellt",
|
|
49727
|
+
source: "4e52cadc"
|
|
49728
|
+
},
|
|
49390
49729
|
"app.client.projectComments.waitForCurrentOperation": {
|
|
49391
49730
|
text: "Warte, bis der aktuelle Kommentarvorgang abgeschlossen ist.",
|
|
49392
49731
|
source: "3c6007dd"
|
|
@@ -49594,6 +49933,10 @@ var de = {
|
|
|
49594
49933
|
text: "Aufgaben konnten nicht geladen werden.",
|
|
49595
49934
|
source: "b5dd285f"
|
|
49596
49935
|
},
|
|
49936
|
+
"app.client.projectTasks.closeAgentView": {
|
|
49937
|
+
text: "Agent-Ansicht schliessen",
|
|
49938
|
+
source: "0d888f27"
|
|
49939
|
+
},
|
|
49597
49940
|
"app.client.projectTasks.couldNotLoadTask": {
|
|
49598
49941
|
text: "Diese Aufgabe konnte nicht geladen werden.",
|
|
49599
49942
|
source: "370587a2"
|
|
@@ -49610,10 +49953,22 @@ var de = {
|
|
|
49610
49953
|
text: "Der Aufgabendienst hat eine andere Aufgabe zurückgegeben. Aktualisiere vor dem erneuten Versuch.",
|
|
49611
49954
|
source: "91adeaa0"
|
|
49612
49955
|
},
|
|
49956
|
+
"app.client.projectTasks.openAgentView": {
|
|
49957
|
+
text: "Agent-Ansicht öffnen",
|
|
49958
|
+
source: "99976d29"
|
|
49959
|
+
},
|
|
49613
49960
|
"app.client.projectTasks.refreshBeforeChanges": {
|
|
49614
49961
|
text: "Aktualisiere die Aufgaben, bevor du Änderungen vornimmst.",
|
|
49615
49962
|
source: "9f4e6583"
|
|
49616
49963
|
},
|
|
49964
|
+
"app.client.projectTasks.runKept": {
|
|
49965
|
+
text: "Die Aufgabe bleibt, wo sie ist, während der Agent läuft.",
|
|
49966
|
+
source: "ed653075"
|
|
49967
|
+
},
|
|
49968
|
+
"app.client.projectTasks.runPushing": {
|
|
49969
|
+
text: "Der Branch der Aufgabe wird gepusht. Verschiebe sie, sobald der Push abgeschlossen ist.",
|
|
49970
|
+
source: "c4f8b8c6"
|
|
49971
|
+
},
|
|
49617
49972
|
"app.client.projectTasks.undidTaskChange": {
|
|
49618
49973
|
text: "Bud hat eine Aufgabenänderung rückgängig gemacht",
|
|
49619
49974
|
source: "7f50e04c"
|
|
@@ -49630,6 +49985,10 @@ var de = {
|
|
|
49630
49985
|
text: "Aufgaben verknüpfen",
|
|
49631
49986
|
source: "b6640aab"
|
|
49632
49987
|
},
|
|
49988
|
+
"app.client.projectThreadLinks.makeTask": {
|
|
49989
|
+
text: "Aufgabe erstellen",
|
|
49990
|
+
source: "f5eaf1d4"
|
|
49991
|
+
},
|
|
49633
49992
|
"app.client.projectThreadLinks.reviewLinksBeforeSaving": {
|
|
49634
49993
|
text: "Überprüfe die neuesten Verknüpfungen, bevor du speicherst.",
|
|
49635
49994
|
source: "c567f897"
|
|
@@ -49662,6 +50021,38 @@ var de = {
|
|
|
49662
50021
|
text: "Erneut versuchen",
|
|
49663
50022
|
source: "8036af59"
|
|
49664
50023
|
},
|
|
50024
|
+
"app.client.taskContextBlock.branch": {
|
|
50025
|
+
text: "Branch",
|
|
50026
|
+
source: "a3e27665"
|
|
50027
|
+
},
|
|
50028
|
+
"app.client.taskContextBlock.code": {
|
|
50029
|
+
text: "Code",
|
|
50030
|
+
source: "795db914"
|
|
50031
|
+
},
|
|
50032
|
+
"app.client.taskContextBlock.context": {
|
|
50033
|
+
text: "Kontext",
|
|
50034
|
+
source: "bd317f1c"
|
|
50035
|
+
},
|
|
50036
|
+
"app.client.taskContextBlock.element": {
|
|
50037
|
+
text: "Element",
|
|
50038
|
+
source: "7d376697"
|
|
50039
|
+
},
|
|
50040
|
+
"app.client.taskContextBlock.page": {
|
|
50041
|
+
text: "Seite",
|
|
50042
|
+
source: "e83d9196"
|
|
50043
|
+
},
|
|
50044
|
+
"app.client.taskContextBlock.screenshot": {
|
|
50045
|
+
text: "Die Seite rund um den Kommentar, mit markierter Stelle",
|
|
50046
|
+
source: "a97331f6"
|
|
50047
|
+
},
|
|
50048
|
+
"app.client.taskContextBlock.source": {
|
|
50049
|
+
text: "Quelle",
|
|
50050
|
+
source: "61e2a3f8"
|
|
50051
|
+
},
|
|
50052
|
+
"app.client.taskContextBlock.viewport": {
|
|
50053
|
+
text: "Ansicht",
|
|
50054
|
+
source: "60b5afe3"
|
|
50055
|
+
},
|
|
49665
50056
|
"app.client.taskDiscussion.addContextPlaceholder": {
|
|
49666
50057
|
text: "Füge Kontext für dein Team hinzu…",
|
|
49667
50058
|
source: "af3fe6ea"
|
|
@@ -49769,6 +50160,10 @@ var de = {
|
|
|
49769
50160
|
text: "Die Änderung der Aufgabenverknüpfung wurde nicht bestätigt. Überprüfe die neuesten Verknüpfungen, bevor du erneut speicherst.",
|
|
49770
50161
|
source: "7616ef3c"
|
|
49771
50162
|
},
|
|
50163
|
+
"app.client.workspace.agentView": {
|
|
50164
|
+
text: "{task} · Agent",
|
|
50165
|
+
source: "d5c33796"
|
|
50166
|
+
},
|
|
49772
50167
|
"app.client.workspace.connectProjectToOpenDiscussion": {
|
|
49773
50168
|
text: "Verbinde ein Projekt, um diese Diskussion zu öffnen.",
|
|
49774
50169
|
source: "fc0ca04e"
|
|
@@ -49809,6 +50204,49 @@ var de = {
|
|
|
49809
50204
|
text: "Diskussion",
|
|
49810
50205
|
source: "52a76f71"
|
|
49811
50206
|
},
|
|
50207
|
+
"app.server.commentTask.discussion": {
|
|
50208
|
+
text: "Diskussion",
|
|
50209
|
+
source: "52a76f71"
|
|
50210
|
+
},
|
|
50211
|
+
"app.server.commentTask.element": {
|
|
50212
|
+
text: "Element",
|
|
50213
|
+
source: "7d376697"
|
|
50214
|
+
},
|
|
50215
|
+
"app.server.commentTask.linkedTasks": {
|
|
50216
|
+
text: "verknüpfte Aufgaben",
|
|
50217
|
+
source: "b827f1f2"
|
|
50218
|
+
},
|
|
50219
|
+
"app.server.commentTask.replies": {
|
|
50220
|
+
text: "Antworten",
|
|
50221
|
+
source: "43e07f5f"
|
|
50222
|
+
},
|
|
50223
|
+
"app.server.commentTask.replyCount": {
|
|
50224
|
+
text: {
|
|
50225
|
+
one: "{count} Antwort",
|
|
50226
|
+
other: "{count} Antworten"
|
|
50227
|
+
},
|
|
50228
|
+
source: "2b046207"
|
|
50229
|
+
},
|
|
50230
|
+
"app.server.commentTask.source": {
|
|
50231
|
+
text: "Quelle",
|
|
50232
|
+
source: "61e2a3f8"
|
|
50233
|
+
},
|
|
50234
|
+
"app.server.commentTask.title": {
|
|
50235
|
+
text: "Kommentar zu {place}",
|
|
50236
|
+
source: "553c8e8c"
|
|
50237
|
+
},
|
|
50238
|
+
"app.server.commentTask.uncommitted": {
|
|
50239
|
+
text: "nicht committet",
|
|
50240
|
+
source: "fa6d4090"
|
|
50241
|
+
},
|
|
50242
|
+
"app.server.commentTask.where": {
|
|
50243
|
+
text: "Wo",
|
|
50244
|
+
source: "91dad0f8"
|
|
50245
|
+
},
|
|
50246
|
+
"app.server.commentTask.workingTree": {
|
|
50247
|
+
text: "Working Tree",
|
|
50248
|
+
source: "7674e9c0"
|
|
50249
|
+
},
|
|
49812
50250
|
"appShell.mainNavigation": {
|
|
49813
50251
|
text: "Hauptnavigation",
|
|
49814
50252
|
source: "c5a8374a"
|
|
@@ -52886,6 +53324,114 @@ var de = {
|
|
|
52886
53324
|
text: "Tabs",
|
|
52887
53325
|
source: "8ec4824d"
|
|
52888
53326
|
},
|
|
53327
|
+
"tasks.agentBrowser.address": {
|
|
53328
|
+
text: "Vorschauadresse",
|
|
53329
|
+
source: "37f7f743"
|
|
53330
|
+
},
|
|
53331
|
+
"tasks.agentBrowser.asleep": {
|
|
53332
|
+
text: "Die Sandbox ist im Ruhezustand, um Kosten zu sparen.",
|
|
53333
|
+
source: "662bf5ad"
|
|
53334
|
+
},
|
|
53335
|
+
"tasks.agentBrowser.back": {
|
|
53336
|
+
text: "Zurück",
|
|
53337
|
+
source: "c2954bc2"
|
|
53338
|
+
},
|
|
53339
|
+
"tasks.agentBrowser.commentOnElement": {
|
|
53340
|
+
text: "Kommentiere ein Element für den Agenten",
|
|
53341
|
+
source: "0dd8635f"
|
|
53342
|
+
},
|
|
53343
|
+
"tasks.agentBrowser.forward": {
|
|
53344
|
+
text: "Vorwärts",
|
|
53345
|
+
source: "e50883ba"
|
|
53346
|
+
},
|
|
53347
|
+
"tasks.agentBrowser.newComment": {
|
|
53348
|
+
text: "Änderung für den Agenten",
|
|
53349
|
+
source: "4d74ba2c"
|
|
53350
|
+
},
|
|
53351
|
+
"tasks.agentBrowser.noPreview": {
|
|
53352
|
+
text: "Hier wird die Vorschau angezeigt, sobald die Sandbox des Laufs mit dem Dev-Server läuft.",
|
|
53353
|
+
source: "65d4e271"
|
|
53354
|
+
},
|
|
53355
|
+
"tasks.agentBrowser.openInNewWindow": {
|
|
53356
|
+
text: "Vorschau in einem neuen Fenster öffnen",
|
|
53357
|
+
source: "e0d3f63c"
|
|
53358
|
+
},
|
|
53359
|
+
"tasks.agentBrowser.preview": {
|
|
53360
|
+
text: "Live-Vorschau",
|
|
53361
|
+
source: "7e42b06f"
|
|
53362
|
+
},
|
|
53363
|
+
"tasks.agentBrowser.reload": {
|
|
53364
|
+
text: "Neu laden",
|
|
53365
|
+
source: "1a43a2ac"
|
|
53366
|
+
},
|
|
53367
|
+
"tasks.agentBrowser.status": {
|
|
53368
|
+
text: "Vorschau-Status",
|
|
53369
|
+
source: "94b339ff"
|
|
53370
|
+
},
|
|
53371
|
+
"tasks.agentBrowser.tryAgain": {
|
|
53372
|
+
text: "Erneut versuchen",
|
|
53373
|
+
source: "213e90fa"
|
|
53374
|
+
},
|
|
53375
|
+
"tasks.agentBrowser.wake": {
|
|
53376
|
+
text: "Aufwecken",
|
|
53377
|
+
source: "d0fedeca"
|
|
53378
|
+
},
|
|
53379
|
+
"tasks.agentBrowser.waking": {
|
|
53380
|
+
text: "Sandbox wird aufgeweckt…",
|
|
53381
|
+
source: "1f99ad40"
|
|
53382
|
+
},
|
|
53383
|
+
"tasks.agentTerminal.disconnected": {
|
|
53384
|
+
text: "Verbindung wird wiederhergestellt…",
|
|
53385
|
+
source: "2f039284"
|
|
53386
|
+
},
|
|
53387
|
+
"tasks.agentTerminal.sessions": {
|
|
53388
|
+
text: "Terminal-Sitzungen",
|
|
53389
|
+
source: "0257839a"
|
|
53390
|
+
},
|
|
53391
|
+
"tasks.agentTerminal.terminal": {
|
|
53392
|
+
text: "Terminal {name}",
|
|
53393
|
+
source: "99a8191c"
|
|
53394
|
+
},
|
|
53395
|
+
"tasks.agentView.agentPanes": {
|
|
53396
|
+
text: "Browser oder Terminal",
|
|
53397
|
+
source: "9c5631e4"
|
|
53398
|
+
},
|
|
53399
|
+
"tasks.agentView.browser": {
|
|
53400
|
+
text: "Browser",
|
|
53401
|
+
source: "8df5852f"
|
|
53402
|
+
},
|
|
53403
|
+
"tasks.agentView.browserAndTerminal": {
|
|
53404
|
+
text: "Browser & Terminal",
|
|
53405
|
+
source: "50b6394f"
|
|
53406
|
+
},
|
|
53407
|
+
"tasks.agentView.details": {
|
|
53408
|
+
text: "Details",
|
|
53409
|
+
source: "0ec24245"
|
|
53410
|
+
},
|
|
53411
|
+
"tasks.agentView.hideTerminal": {
|
|
53412
|
+
text: "Terminal ausblenden",
|
|
53413
|
+
source: "b355c54b"
|
|
53414
|
+
},
|
|
53415
|
+
"tasks.agentView.showTerminal": {
|
|
53416
|
+
text: "Terminal anzeigen",
|
|
53417
|
+
source: "93576794"
|
|
53418
|
+
},
|
|
53419
|
+
"tasks.agentView.terminal": {
|
|
53420
|
+
text: "Terminal",
|
|
53421
|
+
source: "93c562d1"
|
|
53422
|
+
},
|
|
53423
|
+
"tasks.agentView.terminalBelow": {
|
|
53424
|
+
text: "Terminal unter dem Browser",
|
|
53425
|
+
source: "8f840a73"
|
|
53426
|
+
},
|
|
53427
|
+
"tasks.agentView.terminalBeside": {
|
|
53428
|
+
text: "Terminal neben dem Browser",
|
|
53429
|
+
source: "9f744076"
|
|
53430
|
+
},
|
|
53431
|
+
"tasks.agentView.view": {
|
|
53432
|
+
text: "Agent-Ansicht",
|
|
53433
|
+
source: "498637bb"
|
|
53434
|
+
},
|
|
52889
53435
|
"tasks.taskActions.actionInProgress": {
|
|
52890
53436
|
text: "Eine Aufgabenaktion läuft bereits.",
|
|
52891
53437
|
source: "1ae83c01"
|
|
@@ -53072,6 +53618,14 @@ var de = {
|
|
|
53072
53618
|
text: "In Bearbeitung",
|
|
53073
53619
|
source: "2948b425"
|
|
53074
53620
|
},
|
|
53621
|
+
"tasks.taskData.label.merged": {
|
|
53622
|
+
text: "Zusammengeführt",
|
|
53623
|
+
source: "28064199"
|
|
53624
|
+
},
|
|
53625
|
+
"tasks.taskData.label.needs_approval": {
|
|
53626
|
+
text: "Benötigt Freigabe",
|
|
53627
|
+
source: "ecf5c9c5"
|
|
53628
|
+
},
|
|
53075
53629
|
"tasks.taskData.label.open": {
|
|
53076
53630
|
text: "Offen",
|
|
53077
53631
|
source: "538b10e9"
|
|
@@ -53084,6 +53638,10 @@ var de = {
|
|
|
53084
53638
|
text: "Bereit",
|
|
53085
53639
|
source: "0bca3294"
|
|
53086
53640
|
},
|
|
53641
|
+
"tasks.taskData.label.ready_to_merge": {
|
|
53642
|
+
text: "Bereit zum Zusammenführen",
|
|
53643
|
+
source: "b0ea5dc5"
|
|
53644
|
+
},
|
|
53087
53645
|
"tasks.taskData.label.task": {
|
|
53088
53646
|
text: "Aufgabe",
|
|
53089
53647
|
source: "76ef3d8c"
|
|
@@ -53415,6 +53973,160 @@ var de = {
|
|
|
53415
53973
|
text: "Unerledigter Eintrag",
|
|
53416
53974
|
source: "eee80db8"
|
|
53417
53975
|
},
|
|
53976
|
+
"tasks.taskRunBadge.failed": {
|
|
53977
|
+
text: "Run fehlgeschlagen",
|
|
53978
|
+
source: "e2b5681f"
|
|
53979
|
+
},
|
|
53980
|
+
"tasks.taskRunBadge.merged": {
|
|
53981
|
+
text: "Zusammengeführt",
|
|
53982
|
+
source: "28064199"
|
|
53983
|
+
},
|
|
53984
|
+
"tasks.taskRunBadge.needsContext": {
|
|
53985
|
+
text: "Braucht Kontext",
|
|
53986
|
+
source: "18701779"
|
|
53987
|
+
},
|
|
53988
|
+
"tasks.taskRunBadge.pushed": {
|
|
53989
|
+
text: "Gepusht",
|
|
53990
|
+
source: "79d81944"
|
|
53991
|
+
},
|
|
53992
|
+
"tasks.taskRunBadge.pushing": {
|
|
53993
|
+
text: "Wird gepusht",
|
|
53994
|
+
source: "5dd372a3"
|
|
53995
|
+
},
|
|
53996
|
+
"tasks.taskRunBadge.review": {
|
|
53997
|
+
text: "Freigabe nötig",
|
|
53998
|
+
source: "ecf5c9c5"
|
|
53999
|
+
},
|
|
54000
|
+
"tasks.taskRunBadge.settingUp": {
|
|
54001
|
+
text: "Wird eingerichtet",
|
|
54002
|
+
source: "aee4ff74"
|
|
54003
|
+
},
|
|
54004
|
+
"tasks.taskRunBadge.working": {
|
|
54005
|
+
text: "Agent arbeitet",
|
|
54006
|
+
source: "102da6c1"
|
|
54007
|
+
},
|
|
54008
|
+
"tasks.taskRunPanel.activity": {
|
|
54009
|
+
text: "Aktivität des Agents",
|
|
54010
|
+
source: "3457114f"
|
|
54011
|
+
},
|
|
54012
|
+
"tasks.taskRunPanel.agent": {
|
|
54013
|
+
text: "Agent",
|
|
54014
|
+
source: "f5a4f646"
|
|
54015
|
+
},
|
|
54016
|
+
"tasks.taskRunPanel.answer": {
|
|
54017
|
+
text: "Dem Agenten antworten",
|
|
54018
|
+
source: "d2d2b425"
|
|
54019
|
+
},
|
|
54020
|
+
"tasks.taskRunPanel.answerPlaceholder": {
|
|
54021
|
+
text: "Was muss der Agent wissen?",
|
|
54022
|
+
source: "92f7895f"
|
|
54023
|
+
},
|
|
54024
|
+
"tasks.taskRunPanel.approve": {
|
|
54025
|
+
text: "Freigeben & pushen",
|
|
54026
|
+
source: "7110783c"
|
|
54027
|
+
},
|
|
54028
|
+
"tasks.taskRunPanel.asleep": {
|
|
54029
|
+
text: "Die Sandbox schläft, um Kosten zu sparen. Sie wacht auf, wenn du die Vorschau öffnest, Änderungen anforderst oder freigibst.",
|
|
54030
|
+
source: "110af9ad"
|
|
54031
|
+
},
|
|
54032
|
+
"tasks.taskRunPanel.cancel": {
|
|
54033
|
+
text: "Abbrechen",
|
|
54034
|
+
source: "35afca3b"
|
|
54035
|
+
},
|
|
54036
|
+
"tasks.taskRunPanel.changesPlaceholder": {
|
|
54037
|
+
text: "Was soll der Agent ändern?",
|
|
54038
|
+
source: "80c05411"
|
|
54039
|
+
},
|
|
54040
|
+
"tasks.taskRunPanel.confirmApprove": {
|
|
54041
|
+
text: "{branch} ins Repository pushen?",
|
|
54042
|
+
source: "2d1354f2"
|
|
54043
|
+
},
|
|
54044
|
+
"tasks.taskRunPanel.confirmDiscard": {
|
|
54045
|
+
text: "Diesen Run und seine Sandbox verwerfen? Es wurde nichts gepusht.",
|
|
54046
|
+
source: "6ac090ee"
|
|
54047
|
+
},
|
|
54048
|
+
"tasks.taskRunPanel.discard": {
|
|
54049
|
+
text: "Verwerfen",
|
|
54050
|
+
source: "1e706c21"
|
|
54051
|
+
},
|
|
54052
|
+
"tasks.taskRunPanel.failed": {
|
|
54053
|
+
text: "Der Run ist fehlgeschlagen.",
|
|
54054
|
+
source: "49b620f0"
|
|
54055
|
+
},
|
|
54056
|
+
"tasks.taskRunPanel.loading": {
|
|
54057
|
+
text: "Run wird geladen …",
|
|
54058
|
+
source: "331b7fa5"
|
|
54059
|
+
},
|
|
54060
|
+
"tasks.taskRunPanel.merged": {
|
|
54061
|
+
text: "{branch} ist zusammengeführt.",
|
|
54062
|
+
source: "e9b50ea9"
|
|
54063
|
+
},
|
|
54064
|
+
"tasks.taskRunPanel.minutes": {
|
|
54065
|
+
text: {
|
|
54066
|
+
one: "1 Min.",
|
|
54067
|
+
other: "{count} Min."
|
|
54068
|
+
},
|
|
54069
|
+
source: "f87c3e0b"
|
|
54070
|
+
},
|
|
54071
|
+
"tasks.taskRunPanel.needsContext": {
|
|
54072
|
+
text: "Der Agent braucht mehr Kontext, um fortzufahren.",
|
|
54073
|
+
source: "98437cea"
|
|
54074
|
+
},
|
|
54075
|
+
"tasks.taskRunPanel.preview": {
|
|
54076
|
+
text: "Live-Vorschau öffnen",
|
|
54077
|
+
source: "62e9491d"
|
|
54078
|
+
},
|
|
54079
|
+
"tasks.taskRunPanel.pushed": {
|
|
54080
|
+
text: "{branch} wurde bei {commit} gepusht.",
|
|
54081
|
+
source: "78703afe"
|
|
54082
|
+
},
|
|
54083
|
+
"tasks.taskRunPanel.pushing": {
|
|
54084
|
+
text: "{branch} wird gepusht …",
|
|
54085
|
+
source: "9b951555"
|
|
54086
|
+
},
|
|
54087
|
+
"tasks.taskRunPanel.requestChanges": {
|
|
54088
|
+
text: "Änderungen anfordern",
|
|
54089
|
+
source: "637e8883"
|
|
54090
|
+
},
|
|
54091
|
+
"tasks.taskRunPanel.retry": {
|
|
54092
|
+
text: "Erneut versuchen",
|
|
54093
|
+
source: "8036af59"
|
|
54094
|
+
},
|
|
54095
|
+
"tasks.taskRunPanel.review": {
|
|
54096
|
+
text: "Der Agent ist fertig und wartet auf deine Prüfung.",
|
|
54097
|
+
source: "7e509cde"
|
|
54098
|
+
},
|
|
54099
|
+
"tasks.taskRunPanel.seconds": {
|
|
54100
|
+
text: {
|
|
54101
|
+
one: "1 s",
|
|
54102
|
+
other: "{count} s"
|
|
54103
|
+
},
|
|
54104
|
+
source: "24364243"
|
|
54105
|
+
},
|
|
54106
|
+
"tasks.taskRunPanel.settingUp": {
|
|
54107
|
+
text: "Sandbox wird eingerichtet …",
|
|
54108
|
+
source: "be97ea8e"
|
|
54109
|
+
},
|
|
54110
|
+
"tasks.taskRunPanel.showOnCanvas": {
|
|
54111
|
+
text: "Auf der Leinwand anzeigen",
|
|
54112
|
+
source: "b076f243"
|
|
54113
|
+
},
|
|
54114
|
+
"tasks.taskRunPanel.start": {
|
|
54115
|
+
text: "Aufgabe starten",
|
|
54116
|
+
source: "dbc9a724"
|
|
54117
|
+
},
|
|
54118
|
+
"tasks.taskRunPanel.startAgain": {
|
|
54119
|
+
text: "Erneut starten",
|
|
54120
|
+
source: "9a468407"
|
|
54121
|
+
},
|
|
54122
|
+
"tasks.taskRunPanel.startHint": {
|
|
54123
|
+
text: "Ein Agent bearbeitet diese Aufgabe in einer Sandbox. Erst nach deiner Freigabe wird etwas gepusht.",
|
|
54124
|
+
source: "ccf1c6a4"
|
|
54125
|
+
},
|
|
54126
|
+
"tasks.taskRunPanel.working": {
|
|
54127
|
+
text: "Der Agent arbeitet …",
|
|
54128
|
+
source: "202318fe"
|
|
54129
|
+
},
|
|
53418
54130
|
"tasks.taskSections.latestEvents": {
|
|
53419
54131
|
text: {
|
|
53420
54132
|
one: "Das neueste Ereignis wird angezeigt.",
|
|
@@ -53532,6 +54244,10 @@ var de = {
|
|
|
53532
54244
|
text: "Erstelle eine Aufgabe, um mit der Planung deiner Arbeit zu beginnen.",
|
|
53533
54245
|
source: "7c21b645"
|
|
53534
54246
|
},
|
|
54247
|
+
"tasks.taskWorkspace.fewerStatuses": {
|
|
54248
|
+
text: "Weniger Statuswerte anzeigen",
|
|
54249
|
+
source: "1de3f0ed"
|
|
54250
|
+
},
|
|
53535
54251
|
"tasks.taskWorkspace.filterEpic": {
|
|
53536
54252
|
text: "Epic filtern",
|
|
53537
54253
|
source: "19c2ed58"
|
|
@@ -53600,6 +54316,17 @@ var de = {
|
|
|
53600
54316
|
text: "Noch kein {label}-Arbeitsbereich vorhanden",
|
|
53601
54317
|
source: "233c23c9"
|
|
53602
54318
|
},
|
|
54319
|
+
"tasks.taskWorkspace.otherStatuses": {
|
|
54320
|
+
text: {
|
|
54321
|
+
one: "+1 in einem anderen Status",
|
|
54322
|
+
other: "+{count} in anderen Statuswerten"
|
|
54323
|
+
},
|
|
54324
|
+
source: "6cae97c5"
|
|
54325
|
+
},
|
|
54326
|
+
"tasks.taskWorkspace.otherStatusesEmpty": {
|
|
54327
|
+
text: "Weitere Status",
|
|
54328
|
+
source: "d56d45a5"
|
|
54329
|
+
},
|
|
53603
54330
|
"tasks.taskWorkspace.priority": {
|
|
53604
54331
|
text: "Priorität",
|
|
53605
54332
|
source: "e68d9f29"
|
|
@@ -53671,6 +54398,13 @@ var de = {
|
|
|
53671
54398
|
text: "Deine lokalen Aufgabenänderungen teilen",
|
|
53672
54399
|
source: "1dad116c"
|
|
53673
54400
|
},
|
|
54401
|
+
"tasks.taskWorkspace.showTasks": {
|
|
54402
|
+
text: {
|
|
54403
|
+
one: "1 Aufgabe anzeigen",
|
|
54404
|
+
other: "{count} Aufgaben anzeigen"
|
|
54405
|
+
},
|
|
54406
|
+
source: "56258faa"
|
|
54407
|
+
},
|
|
53674
54408
|
"tasks.taskWorkspace.showingCount": {
|
|
53675
54409
|
text: "Zeigt {shown} von {total}",
|
|
53676
54410
|
source: "e8675f4a"
|
|
@@ -53767,6 +54501,13 @@ var de = {
|
|
|
53767
54501
|
* and the thing (`canvas.zoomIn`); `pnpm translate` keeps the other languages in step.
|
|
53768
54502
|
*/
|
|
53769
54503
|
var en = {
|
|
54504
|
+
"app.client.agentPanel.agent": "Agent",
|
|
54505
|
+
"app.client.agentPanel.changesRefused": "The agent can’t take changes now",
|
|
54506
|
+
"app.client.agentPanel.changesSent": "Sent to the agent",
|
|
54507
|
+
"app.client.agentPanel.devServer": "Dev server",
|
|
54508
|
+
"app.client.agentPanel.ended": "The session ended. It starts again when you reconnect.",
|
|
54509
|
+
"app.client.agentPanel.failed": "The factory didn’t answer.",
|
|
54510
|
+
"app.client.agentPanel.shell": "Shell",
|
|
53770
54511
|
"app.client.commentsRequest.emptyResponse": "The comments service returned an empty response.",
|
|
53771
54512
|
"app.client.commentsRequest.invalidData": "The comments service returned invalid data.",
|
|
53772
54513
|
"app.client.commentsRequest.invalidEndpoint": "Invalid comments endpoint.",
|
|
@@ -53789,6 +54530,20 @@ var en = {
|
|
|
53789
54530
|
"app.client.differenceView.slideStatus": "{kind} · change {change} of {count} · {index} / {total}",
|
|
53790
54531
|
"app.client.differenceView.slideshowLabel": "Differences slideshow",
|
|
53791
54532
|
"app.client.differenceWorker.compareError": "The pictures could not be compared.",
|
|
54533
|
+
"app.client.factoryRun.discardAndMove": "Discard run & move",
|
|
54534
|
+
"app.client.factoryRun.failed": "Bud couldn’t reach the factory.",
|
|
54535
|
+
"app.client.factoryRun.keepRun": "Keep the run",
|
|
54536
|
+
"app.client.factoryRun.moveQuestion": "{id} has an agent run. Moving it to {status} discards the run and its sandbox; nothing was pushed, so the agent’s work is lost.",
|
|
54537
|
+
"app.client.factoryRun.moveTitle": "Discard the agent’s run?",
|
|
54538
|
+
"app.client.factoryRun.noPreview": "The run’s dev server isn’t up.",
|
|
54539
|
+
"app.client.factoryRun.previewFailed": "Couldn’t open the live preview",
|
|
54540
|
+
"app.client.factoryRun.refused": "The run didn’t change",
|
|
54541
|
+
"app.client.factoryRun.statusesMissing": "Add the factory statuses above before starting tasks.",
|
|
54542
|
+
"app.client.factorySetup.add": "Add factory statuses",
|
|
54543
|
+
"app.client.factorySetup.added": "Factory statuses added",
|
|
54544
|
+
"app.client.factorySetup.failed": "Couldn’t add the factory statuses",
|
|
54545
|
+
"app.client.factorySetup.missing": "The factory needs these statuses in your task store: {statuses}.",
|
|
54546
|
+
"app.client.factorySetup.otherKind": "Your task store has these factory statuses as another kind of status: {statuses}. Map other statuses in factory.statuses.",
|
|
53792
54547
|
"app.client.fileDrafts.deleteWithUnsavedDrafts": "Save or discard the unsaved drafts in this selection before deleting it.",
|
|
53793
54548
|
"app.client.fileDrafts.destinationDraftConflict": "The destination acquired an unsaved draft while the move was running. Both drafts remain available at their original paths; download or review them before continuing.",
|
|
53794
54549
|
"app.client.fileDrafts.destinationHasDraft": "A destination has an unsaved draft. Save or discard it before moving files here.",
|
|
@@ -53900,6 +54655,7 @@ var en = {
|
|
|
53900
54655
|
"app.client.projectComments.refreshBeforeTryingAgain": "The comment write could not be confirmed. Refresh before trying again.",
|
|
53901
54656
|
"app.client.projectComments.reloadDiscussionBeforeSaving": "Reload this discussion before saving.",
|
|
53902
54657
|
"app.client.projectComments.serviceReturnedAnotherDiscussion": "The comments service returned another discussion.",
|
|
54658
|
+
"app.client.projectComments.taskCreated": "Task created",
|
|
53903
54659
|
"app.client.projectComments.waitForCurrentOperation": "Wait for the current comment operation to finish.",
|
|
53904
54660
|
"app.client.projectDifferences.comparisonFailed": "The pictures could not be compared.",
|
|
53905
54661
|
"app.client.projectFileReview.commentsUnavailable": "Comments are stored by your storage adapter. Beads: run bd init in this project.",
|
|
@@ -53954,15 +54710,20 @@ var en = {
|
|
|
53954
54710
|
"app.client.projectPreviews.requestFailed": "Preview request failed ({status}).",
|
|
53955
54711
|
"app.client.projectTaskPicker.adapterUnavailable": "The task adapter is unavailable.",
|
|
53956
54712
|
"app.client.projectTaskPicker.loadFailed": "Could not load tasks.",
|
|
54713
|
+
"app.client.projectTasks.closeAgentView": "Close Agent view",
|
|
53957
54714
|
"app.client.projectTasks.couldNotLoadTask": "Could not load this task.",
|
|
53958
54715
|
"app.client.projectTasks.couldNotLoadTasks": "Could not load tasks.",
|
|
53959
54716
|
"app.client.projectTasks.differentTaskRefresh": "The task service returned a different task. Refresh and try again.",
|
|
53960
54717
|
"app.client.projectTasks.differentTaskRefreshRetry": "The task service returned a different task. Refresh before retrying.",
|
|
54718
|
+
"app.client.projectTasks.openAgentView": "Open Agent view",
|
|
53961
54719
|
"app.client.projectTasks.refreshBeforeChanges": "Refresh tasks before making changes.",
|
|
54720
|
+
"app.client.projectTasks.runKept": "The task stays where it is while its agent runs.",
|
|
54721
|
+
"app.client.projectTasks.runPushing": "The task’s branch is being pushed; move it once the push is done.",
|
|
53962
54722
|
"app.client.projectTasks.undidTaskChange": "Bud undid a task change",
|
|
53963
54723
|
"app.client.projectTasks.writeNotConfirmed": "The write was not confirmed.",
|
|
53964
54724
|
"app.client.projectThreadLinks.anotherDiscussion": "The service returned another discussion.",
|
|
53965
54725
|
"app.client.projectThreadLinks.linkTasks": "Link tasks",
|
|
54726
|
+
"app.client.projectThreadLinks.makeTask": "Make task",
|
|
53966
54727
|
"app.client.projectThreadLinks.reviewLinksBeforeSaving": "Review the latest links before saving.",
|
|
53967
54728
|
"app.client.screenHost.couldNotOpen": "Could not open {label}.",
|
|
53968
54729
|
"app.client.screenHost.didntOpen": "{label} didn't open",
|
|
@@ -53971,6 +54732,14 @@ var en = {
|
|
|
53971
54732
|
"app.client.screenHost.loading": "Loading {label}…",
|
|
53972
54733
|
"app.client.screenHost.noRouteMatches": "No screen route matches {href}.",
|
|
53973
54734
|
"app.client.screenHost.retry": "Retry",
|
|
54735
|
+
"app.client.taskContextBlock.branch": "Branch",
|
|
54736
|
+
"app.client.taskContextBlock.code": "Code",
|
|
54737
|
+
"app.client.taskContextBlock.context": "Context",
|
|
54738
|
+
"app.client.taskContextBlock.element": "Element",
|
|
54739
|
+
"app.client.taskContextBlock.page": "Page",
|
|
54740
|
+
"app.client.taskContextBlock.screenshot": "The page around the comment, with its point marked",
|
|
54741
|
+
"app.client.taskContextBlock.source": "Source",
|
|
54742
|
+
"app.client.taskContextBlock.viewport": "Viewport",
|
|
53974
54743
|
"app.client.taskDiscussion.addContextPlaceholder": "Add context for your team…",
|
|
53975
54744
|
"app.client.taskDiscussion.addTaskComment": "Add task comment",
|
|
53976
54745
|
"app.client.taskDiscussion.cancel": "Cancel",
|
|
@@ -54000,6 +54769,7 @@ var en = {
|
|
|
54000
54769
|
},
|
|
54001
54770
|
"app.client.threadLinks.taskDiscussionNeedsLinkedTask": "A task discussion needs at least one linked task.",
|
|
54002
54771
|
"app.client.threadLinks.taskLinkChangeNotConfirmed": "The task link change was not confirmed. Review the latest links before saving again.",
|
|
54772
|
+
"app.client.workspace.agentView": "{task} · Agent",
|
|
54003
54773
|
"app.client.workspace.connectProjectToOpenDiscussion": "Connect a project to open this discussion.",
|
|
54004
54774
|
"app.client.workspace.couldNotOpenDiscussion": "Could not open this discussion.",
|
|
54005
54775
|
"app.client.workspace.discussion": "Discussion",
|
|
@@ -54010,6 +54780,19 @@ var en = {
|
|
|
54010
54780
|
"app.client.workspace.startProjectWithBudVitePlugin": "Start your project with the Bud Vite plugin, or run Bud from its directory. Its screens appear here when the companion connects.",
|
|
54011
54781
|
"app.client.workspace.yourProjectSideBySide": "Your project, side by side.",
|
|
54012
54782
|
"app.controller.discussion": "Discussion",
|
|
54783
|
+
"app.server.commentTask.discussion": "Discussion",
|
|
54784
|
+
"app.server.commentTask.element": "Element",
|
|
54785
|
+
"app.server.commentTask.linkedTasks": "linked tasks",
|
|
54786
|
+
"app.server.commentTask.replies": "Replies",
|
|
54787
|
+
"app.server.commentTask.replyCount": {
|
|
54788
|
+
one: "{count} reply",
|
|
54789
|
+
other: "{count} replies"
|
|
54790
|
+
},
|
|
54791
|
+
"app.server.commentTask.source": "Source",
|
|
54792
|
+
"app.server.commentTask.title": "Comment on {place}",
|
|
54793
|
+
"app.server.commentTask.uncommitted": "uncommitted",
|
|
54794
|
+
"app.server.commentTask.where": "Where",
|
|
54795
|
+
"app.server.commentTask.workingTree": "working tree",
|
|
54013
54796
|
"appShell.mainNavigation": "Main navigation",
|
|
54014
54797
|
"breadcrumb.navigationLabel": "Breadcrumb",
|
|
54015
54798
|
"canvas.artboardCanvas.chooseCollectionPage": "Choose a {collection} page",
|
|
@@ -54867,6 +55650,33 @@ var en = {
|
|
|
54867
55650
|
other: "{count} tabs"
|
|
54868
55651
|
},
|
|
54869
55652
|
"shellTabBar.tabsLabel": "Tabs",
|
|
55653
|
+
"tasks.agentBrowser.address": "Preview address",
|
|
55654
|
+
"tasks.agentBrowser.asleep": "The sandbox is asleep to save costs.",
|
|
55655
|
+
"tasks.agentBrowser.back": "Back",
|
|
55656
|
+
"tasks.agentBrowser.commentOnElement": "Comment on an element for the agent",
|
|
55657
|
+
"tasks.agentBrowser.forward": "Forward",
|
|
55658
|
+
"tasks.agentBrowser.newComment": "Change for the agent",
|
|
55659
|
+
"tasks.agentBrowser.noPreview": "The preview shows here while the run’s sandbox is up with its dev server.",
|
|
55660
|
+
"tasks.agentBrowser.openInNewWindow": "Open the preview in a new window",
|
|
55661
|
+
"tasks.agentBrowser.preview": "Live preview",
|
|
55662
|
+
"tasks.agentBrowser.reload": "Reload",
|
|
55663
|
+
"tasks.agentBrowser.status": "Preview status",
|
|
55664
|
+
"tasks.agentBrowser.tryAgain": "Try again",
|
|
55665
|
+
"tasks.agentBrowser.wake": "Wake it",
|
|
55666
|
+
"tasks.agentBrowser.waking": "Waking the sandbox…",
|
|
55667
|
+
"tasks.agentTerminal.disconnected": "Reconnecting…",
|
|
55668
|
+
"tasks.agentTerminal.sessions": "Terminal sessions",
|
|
55669
|
+
"tasks.agentTerminal.terminal": "{name} terminal",
|
|
55670
|
+
"tasks.agentView.agentPanes": "Browser or terminal",
|
|
55671
|
+
"tasks.agentView.browser": "Browser",
|
|
55672
|
+
"tasks.agentView.browserAndTerminal": "Browser & terminal",
|
|
55673
|
+
"tasks.agentView.details": "Details",
|
|
55674
|
+
"tasks.agentView.hideTerminal": "Hide terminal",
|
|
55675
|
+
"tasks.agentView.showTerminal": "Show terminal",
|
|
55676
|
+
"tasks.agentView.terminal": "Terminal",
|
|
55677
|
+
"tasks.agentView.terminalBelow": "Terminal below the browser",
|
|
55678
|
+
"tasks.agentView.terminalBeside": "Terminal beside the browser",
|
|
55679
|
+
"tasks.agentView.view": "Agent view",
|
|
54870
55680
|
"tasks.taskActions.actionInProgress": "A task action is already in progress.",
|
|
54871
55681
|
"tasks.taskActions.actions": "Actions",
|
|
54872
55682
|
"tasks.taskActions.changeNotConfirmed": "The change was not confirmed. Refresh before trying again.",
|
|
@@ -54918,9 +55728,12 @@ var en = {
|
|
|
54918
55728
|
"tasks.taskData.label.feature": "Feature",
|
|
54919
55729
|
"tasks.taskData.label.hooked": "Hooked",
|
|
54920
55730
|
"tasks.taskData.label.in_progress": "In progress",
|
|
55731
|
+
"tasks.taskData.label.merged": "Merged",
|
|
55732
|
+
"tasks.taskData.label.needs_approval": "Needs approval",
|
|
54921
55733
|
"tasks.taskData.label.open": "Open",
|
|
54922
55734
|
"tasks.taskData.label.pinned": "Pinned",
|
|
54923
55735
|
"tasks.taskData.label.ready": "Ready",
|
|
55736
|
+
"tasks.taskData.label.ready_to_merge": "Ready to merge",
|
|
54924
55737
|
"tasks.taskData.label.task": "Task",
|
|
54925
55738
|
"tasks.taskData.low": "Low",
|
|
54926
55739
|
"tasks.taskData.noEpic": "No epic",
|
|
@@ -55006,6 +55819,49 @@ var en = {
|
|
|
55006
55819
|
"tasks.taskMarkdown.completedItem": "Completed item",
|
|
55007
55820
|
"tasks.taskMarkdown.image": "Image",
|
|
55008
55821
|
"tasks.taskMarkdown.incompleteItem": "Incomplete item",
|
|
55822
|
+
"tasks.taskRunBadge.failed": "Run failed",
|
|
55823
|
+
"tasks.taskRunBadge.merged": "Merged",
|
|
55824
|
+
"tasks.taskRunBadge.needsContext": "Needs context",
|
|
55825
|
+
"tasks.taskRunBadge.pushed": "Pushed",
|
|
55826
|
+
"tasks.taskRunBadge.pushing": "Pushing",
|
|
55827
|
+
"tasks.taskRunBadge.review": "Needs approval",
|
|
55828
|
+
"tasks.taskRunBadge.settingUp": "Setting up",
|
|
55829
|
+
"tasks.taskRunBadge.working": "Agent working",
|
|
55830
|
+
"tasks.taskRunPanel.activity": "Agent activity",
|
|
55831
|
+
"tasks.taskRunPanel.agent": "Agent",
|
|
55832
|
+
"tasks.taskRunPanel.answer": "Answer the agent",
|
|
55833
|
+
"tasks.taskRunPanel.answerPlaceholder": "What does the agent need to know?",
|
|
55834
|
+
"tasks.taskRunPanel.approve": "Approve & push",
|
|
55835
|
+
"tasks.taskRunPanel.asleep": "The sandbox sleeps to save cost. It wakes up when you open the preview, request changes or approve.",
|
|
55836
|
+
"tasks.taskRunPanel.cancel": "Cancel",
|
|
55837
|
+
"tasks.taskRunPanel.changesPlaceholder": "What should the agent change?",
|
|
55838
|
+
"tasks.taskRunPanel.confirmApprove": "Push {branch} to the repository?",
|
|
55839
|
+
"tasks.taskRunPanel.confirmDiscard": "Discard this run and its sandbox? Nothing was pushed.",
|
|
55840
|
+
"tasks.taskRunPanel.discard": "Discard",
|
|
55841
|
+
"tasks.taskRunPanel.failed": "The run failed.",
|
|
55842
|
+
"tasks.taskRunPanel.loading": "Loading the run…",
|
|
55843
|
+
"tasks.taskRunPanel.merged": "{branch} is merged.",
|
|
55844
|
+
"tasks.taskRunPanel.minutes": {
|
|
55845
|
+
one: "1 min",
|
|
55846
|
+
other: "{count} min"
|
|
55847
|
+
},
|
|
55848
|
+
"tasks.taskRunPanel.needsContext": "The agent needs more context to go on.",
|
|
55849
|
+
"tasks.taskRunPanel.preview": "Open live preview",
|
|
55850
|
+
"tasks.taskRunPanel.pushed": "Pushed {branch} at {commit}.",
|
|
55851
|
+
"tasks.taskRunPanel.pushing": "Pushing {branch}…",
|
|
55852
|
+
"tasks.taskRunPanel.requestChanges": "Request changes",
|
|
55853
|
+
"tasks.taskRunPanel.retry": "Retry",
|
|
55854
|
+
"tasks.taskRunPanel.review": "The agent is done and waits for your review.",
|
|
55855
|
+
"tasks.taskRunPanel.seconds": {
|
|
55856
|
+
one: "1 s",
|
|
55857
|
+
other: "{count} s"
|
|
55858
|
+
},
|
|
55859
|
+
"tasks.taskRunPanel.settingUp": "Setting up the sandbox…",
|
|
55860
|
+
"tasks.taskRunPanel.showOnCanvas": "Show on canvas",
|
|
55861
|
+
"tasks.taskRunPanel.start": "Start task",
|
|
55862
|
+
"tasks.taskRunPanel.startAgain": "Start again",
|
|
55863
|
+
"tasks.taskRunPanel.startHint": "An agent works on this task in a sandbox. Nothing is pushed until you approve.",
|
|
55864
|
+
"tasks.taskRunPanel.working": "The agent is working…",
|
|
55009
55865
|
"tasks.taskSections.latestEvents": {
|
|
55010
55866
|
one: "Showing the latest {count} event.",
|
|
55011
55867
|
other: "Showing the latest {count} events."
|
|
@@ -55042,6 +55898,7 @@ var en = {
|
|
|
55042
55898
|
"tasks.taskWorkspace.connectProject": "Connect a project",
|
|
55043
55899
|
"tasks.taskWorkspace.createTask": "Create task",
|
|
55044
55900
|
"tasks.taskWorkspace.createToPlan": "Create a task to start planning your work.",
|
|
55901
|
+
"tasks.taskWorkspace.fewerStatuses": "Show fewer statuses",
|
|
55045
55902
|
"tasks.taskWorkspace.filterEpic": "Filter epic",
|
|
55046
55903
|
"tasks.taskWorkspace.filterField": "Filter {field}",
|
|
55047
55904
|
"tasks.taskWorkspace.filters": "Filters",
|
|
@@ -55059,6 +55916,11 @@ var en = {
|
|
|
55059
55916
|
"tasks.taskWorkspace.noMatches": "No tasks match this view",
|
|
55060
55917
|
"tasks.taskWorkspace.noRemote": "No {label} remote is configured",
|
|
55061
55918
|
"tasks.taskWorkspace.noWorkspace": "No {label} workspace yet",
|
|
55919
|
+
"tasks.taskWorkspace.otherStatuses": {
|
|
55920
|
+
one: "+1 in other statuses",
|
|
55921
|
+
other: "+{count} in other statuses"
|
|
55922
|
+
},
|
|
55923
|
+
"tasks.taskWorkspace.otherStatusesEmpty": "Other statuses",
|
|
55062
55924
|
"tasks.taskWorkspace.priority": "Priority",
|
|
55063
55925
|
"tasks.taskWorkspace.projectTasks": "Project tasks",
|
|
55064
55926
|
"tasks.taskWorkspace.pullChanges": "Pull changes",
|
|
@@ -55079,6 +55941,10 @@ var en = {
|
|
|
55079
55941
|
"tasks.taskWorkspace.searchPlaceholder": "Search tasks, IDs, labels…",
|
|
55080
55942
|
"tasks.taskWorkspace.searchTasks": "Search tasks",
|
|
55081
55943
|
"tasks.taskWorkspace.shareLocalChanges": "Share your local task changes",
|
|
55944
|
+
"tasks.taskWorkspace.showTasks": {
|
|
55945
|
+
one: "Show 1 task",
|
|
55946
|
+
other: "Show {count} tasks"
|
|
55947
|
+
},
|
|
55082
55948
|
"tasks.taskWorkspace.showingCount": "Showing {shown} of {total}",
|
|
55083
55949
|
"tasks.taskWorkspace.sortTasks": "Sort tasks",
|
|
55084
55950
|
"tasks.taskWorkspace.startBud": "Start Bud from your web project to see its tasks.",
|
|
@@ -67902,50 +68768,6 @@ function CommentComposerCard(handle) {
|
|
|
67902
68768
|
});
|
|
67903
68769
|
}
|
|
67904
68770
|
//#endregion
|
|
67905
|
-
//#region ../../node_modules/.pnpm/@remix-run+fetch-router@1.0.0/node_modules/@remix-run/fetch-router/dist/lib/route-helpers/method.js
|
|
67906
|
-
/**
|
|
67907
|
-
* Shorthand for a GET route.
|
|
67908
|
-
*
|
|
67909
|
-
* @alias get
|
|
67910
|
-
* @param pattern The route pattern string or pre-parsed AST
|
|
67911
|
-
* @returns A Route configured for GET requests
|
|
67912
|
-
*/
|
|
67913
|
-
function createGetRoute(pattern) {
|
|
67914
|
-
return new Route$1("GET", pattern);
|
|
67915
|
-
}
|
|
67916
|
-
/**
|
|
67917
|
-
* Shorthand for a POST route.
|
|
67918
|
-
*
|
|
67919
|
-
* @alias post
|
|
67920
|
-
* @param pattern The route pattern string or pre-parsed AST
|
|
67921
|
-
* @returns A Route configured for POST requests
|
|
67922
|
-
*/
|
|
67923
|
-
function createPostRoute(pattern) {
|
|
67924
|
-
return new Route$1("POST", pattern);
|
|
67925
|
-
}
|
|
67926
|
-
//#endregion
|
|
67927
|
-
//#region ../ui/src/lib/routes.ts
|
|
67928
|
-
/** Places in Bud's task screen, shared by links and the screen's matcher. */
|
|
67929
|
-
var taskRoutes = createRoutes("/tasks", {
|
|
67930
|
-
index: createGetRoute("/"),
|
|
67931
|
-
show: createGetRoute("/:id")
|
|
67932
|
-
});
|
|
67933
|
-
/** Places in Bud's browser of the project's live pages: a page's own path follows the screen's. */
|
|
67934
|
-
var pageRoutes = createRoutes("/pages", {
|
|
67935
|
-
index: createGetRoute("/"),
|
|
67936
|
-
page: createGetRoute("/*path")
|
|
67937
|
-
});
|
|
67938
|
-
/** Places in Bud's file browser and review. */
|
|
67939
|
-
var fileRoutes = createRoutes("/files", {
|
|
67940
|
-
index: createGetRoute("/"),
|
|
67941
|
-
file: createGetRoute("/*path"),
|
|
67942
|
-
escaped: createGetRoute("/path/*path"),
|
|
67943
|
-
review: createGetRoute("/review/:mode(/*path)"),
|
|
67944
|
-
compare: createGetRoute("/compare/:base...:target(/*path)")
|
|
67945
|
-
});
|
|
67946
|
-
/** A conversation's stable place, independent of its canvas or code anchor. */
|
|
67947
|
-
var conversationRoutes = createRoutes("/comments", { show: createGetRoute("/:id") });
|
|
67948
|
-
//#endregion
|
|
67949
68771
|
//#region ../ui/src/lib/files/file-location.ts
|
|
67950
68772
|
var matcher = createMultiMatcher();
|
|
67951
68773
|
for (let [name, route] of Object.entries(fileRoutes)) matcher.add(route.pattern, name);
|
|
@@ -68688,6 +69510,7 @@ function taskFields(item, schema) {
|
|
|
68688
69510
|
//#endregion
|
|
68689
69511
|
//#region ../ui/src/lib/tasks/task-data.ts
|
|
68690
69512
|
var taskMatcher = createMatcher(taskRoutes.show.pattern);
|
|
69513
|
+
var agentMatcher = createMatcher(taskRoutes.agent.pattern);
|
|
68691
69514
|
var defaultTaskView = {
|
|
68692
69515
|
query: "",
|
|
68693
69516
|
fields: {},
|
|
@@ -68869,6 +69692,26 @@ function taskHref(id) {
|
|
|
68869
69692
|
}
|
|
68870
69693
|
}
|
|
68871
69694
|
/**
|
|
69695
|
+
* Builds the URL of a task's Agent view: its details beside its run's preview and terminal.
|
|
69696
|
+
* @param id - The task's id.
|
|
69697
|
+
* @returns The typed URL.
|
|
69698
|
+
*/
|
|
69699
|
+
function taskAgentHref(id) {
|
|
69700
|
+
return taskRoutes.agent.href({ id: parseWorkItemRef({ id }).id });
|
|
69701
|
+
}
|
|
69702
|
+
/**
|
|
69703
|
+
* Whether a location is a task's Agent view.
|
|
69704
|
+
* @param location - The current location.
|
|
69705
|
+
* @returns True for `/tasks/:id/agent`.
|
|
69706
|
+
*/
|
|
69707
|
+
function agentViewOpen(location) {
|
|
69708
|
+
try {
|
|
69709
|
+
return Boolean(agentMatcher.match(new URL(location, "http://bud.invalid/tasks")));
|
|
69710
|
+
} catch {
|
|
69711
|
+
return false;
|
|
69712
|
+
}
|
|
69713
|
+
}
|
|
69714
|
+
/**
|
|
68872
69715
|
* Reads the typed task place, or one older query selection on the board URL.
|
|
68873
69716
|
* @param location - The current location or legacy query link.
|
|
68874
69717
|
* @returns The validated task ID, or null for the board or an invalid link.
|
|
@@ -68877,7 +69720,7 @@ function selectedTask(location) {
|
|
|
68877
69720
|
try {
|
|
68878
69721
|
let url = new URL(location, "http://bud.invalid/tasks");
|
|
68879
69722
|
if (url.href.length > 32768) return null;
|
|
68880
|
-
let value = url.pathname === taskRoutes.index.href() && url.searchParams.getAll("issue").length === 1 ? url.searchParams.get("issue") : taskMatcher.match(url)?.params.id;
|
|
69723
|
+
let value = url.pathname === taskRoutes.index.href() && url.searchParams.getAll("issue").length === 1 ? url.searchParams.get("issue") : (taskMatcher.match(url) ?? agentMatcher.match(url))?.params.id;
|
|
68881
69724
|
return value ? parseWorkItemRef({ id: value }).id : null;
|
|
68882
69725
|
} catch {
|
|
68883
69726
|
return null;
|
|
@@ -82265,40 +83108,6 @@ function object(value) {
|
|
|
82265
83108
|
return value;
|
|
82266
83109
|
}
|
|
82267
83110
|
/**
|
|
82268
|
-
* Checks a nonblank string within a length limit.
|
|
82269
|
-
* @param value - Untrusted data.
|
|
82270
|
-
* @param label - What the error message calls it.
|
|
82271
|
-
* @param limit - The most characters it may have.
|
|
82272
|
-
* @returns The string.
|
|
82273
|
-
*/
|
|
82274
|
-
function text$4(value, label, limit) {
|
|
82275
|
-
return parseRecord(bounded(label, limit), value);
|
|
82276
|
-
}
|
|
82277
|
-
/**
|
|
82278
|
-
* Checks a conversation or message ID.
|
|
82279
|
-
* @param value - Untrusted data.
|
|
82280
|
-
* @returns The ID.
|
|
82281
|
-
*/
|
|
82282
|
-
function conversationId(value) {
|
|
82283
|
-
return parseRecord(ConversationIdSchema, value);
|
|
82284
|
-
}
|
|
82285
|
-
/**
|
|
82286
|
-
* Checks a comments branch revision.
|
|
82287
|
-
* @param value - Untrusted data.
|
|
82288
|
-
* @returns The revision, or null before the branch's first commit.
|
|
82289
|
-
*/
|
|
82290
|
-
function revision(value) {
|
|
82291
|
-
return parseRecord(CommentRevisionSchema, value);
|
|
82292
|
-
}
|
|
82293
|
-
/**
|
|
82294
|
-
* Checks a conversation status.
|
|
82295
|
-
* @param value - Untrusted data.
|
|
82296
|
-
* @returns The status.
|
|
82297
|
-
*/
|
|
82298
|
-
function commentStatus(value) {
|
|
82299
|
-
return parseRecord(CommentStatusSchema, value);
|
|
82300
|
-
}
|
|
82301
|
-
/**
|
|
82302
83111
|
* Reads legacy page captures while discarding the extension properties older parsers ignored.
|
|
82303
83112
|
* @param value - A stored canvas anchor.
|
|
82304
83113
|
* @returns Its validated canonical capture.
|
|
@@ -82384,131 +83193,13 @@ function versioned(version, anchor) {
|
|
|
82384
83193
|
anchor: thread.anchor
|
|
82385
83194
|
}));
|
|
82386
83195
|
}
|
|
82387
|
-
/** A versioned conversation from the comments branch, read as leniently as earlier releases. */
|
|
82388
|
-
var CommentThreadSchema = variant("version", {
|
|
82389
|
-
1: versioned(1, delegate(storedCanvasAnchor)),
|
|
82390
|
-
2: versioned(2, delegate(parseCodeAnchor))
|
|
82391
|
-
});
|
|
82392
83196
|
object$1({
|
|
82393
83197
|
head: CommentRevisionSchema,
|
|
82394
|
-
threads: list$1(
|
|
83198
|
+
threads: list$1(variant("version", {
|
|
83199
|
+
1: versioned(1, delegate(storedCanvasAnchor)),
|
|
83200
|
+
2: versioned(2, delegate(parseCodeAnchor))
|
|
83201
|
+
}), "Invalid comments response.").refine((threads) => unique(threads, (thread) => thread.id), "Duplicate conversation ID.")
|
|
82395
83202
|
}).refine(({ head, threads }) => head !== null || !threads.length, "Comments are missing their Git revision.");
|
|
82396
|
-
/**
|
|
82397
|
-
* Validates a stored or requested thread.
|
|
82398
|
-
* @param value - Untrusted data.
|
|
82399
|
-
* @returns The thread.
|
|
82400
|
-
*/
|
|
82401
|
-
function parseCommentThread(value) {
|
|
82402
|
-
return parseRecord(CommentThreadSchema, value);
|
|
82403
|
-
}
|
|
82404
|
-
//#endregion
|
|
82405
|
-
//#region ../comments/src/lib/input.ts
|
|
82406
|
-
/** A browser's comment request is invalid; its message is safe to show. */
|
|
82407
|
-
var CommentInputError = class extends Error {};
|
|
82408
|
-
/**
|
|
82409
|
-
* Validates a browser's request to start a conversation, or to reply to or update one.
|
|
82410
|
-
* @param value - The request body.
|
|
82411
|
-
* @param routes - The routes a new canvas conversation may belong to.
|
|
82412
|
-
* @param id - The conversation being replied to or updated; absent for a new one.
|
|
82413
|
-
* @returns The revision the request was based on and the change it asks for.
|
|
82414
|
-
*/
|
|
82415
|
-
function parseCommentInput(value, routes, id) {
|
|
82416
|
-
try {
|
|
82417
|
-
let input = object(value);
|
|
82418
|
-
let head = revision(input.head);
|
|
82419
|
-
let body = input.body === void 0 ? void 0 : text$4(input.body, "Comment", 1e4).trim();
|
|
82420
|
-
if (id !== void 0) {
|
|
82421
|
-
conversationId(id);
|
|
82422
|
-
let status = input.status === void 0 ? void 0 : commentStatus(input.status);
|
|
82423
|
-
if (!body && !status) throw new Error("Add a reply or choose a status.");
|
|
82424
|
-
let parentId = input.parentId == null ? null : conversationId(input.parentId);
|
|
82425
|
-
if (parentId && !body) throw new Error("A reply needs a message.");
|
|
82426
|
-
return {
|
|
82427
|
-
head,
|
|
82428
|
-
change: {
|
|
82429
|
-
id,
|
|
82430
|
-
body,
|
|
82431
|
-
status,
|
|
82432
|
-
...input.parentId === void 0 ? {} : { parentId }
|
|
82433
|
-
}
|
|
82434
|
-
};
|
|
82435
|
-
}
|
|
82436
|
-
if (!body) throw new Error("Write a comment before saving.");
|
|
82437
|
-
if (input.parentId != null) throw new Error("A new conversation cannot have a parent message.");
|
|
82438
|
-
if (object(input.anchor).type === "code") return {
|
|
82439
|
-
head,
|
|
82440
|
-
change: {
|
|
82441
|
-
anchor: parseCodeAnchor(input.anchor),
|
|
82442
|
-
body
|
|
82443
|
-
}
|
|
82444
|
-
};
|
|
82445
|
-
let anchor = parseCanvasAnchor(input.anchor);
|
|
82446
|
-
if (!routes.some((route) => route.id === anchor.pageId && route.path === anchor.pagePath)) throw new Error("The comment must belong to a configured route.");
|
|
82447
|
-
return {
|
|
82448
|
-
head,
|
|
82449
|
-
change: {
|
|
82450
|
-
anchor,
|
|
82451
|
-
body
|
|
82452
|
-
}
|
|
82453
|
-
};
|
|
82454
|
-
} catch (error) {
|
|
82455
|
-
throw new CommentInputError(error instanceof Error ? error.message : "Invalid comment.");
|
|
82456
|
-
}
|
|
82457
|
-
}
|
|
82458
|
-
//#endregion
|
|
82459
|
-
//#region ../comments/src/lib/merge.ts
|
|
82460
|
-
/** Two versions of a thread conflict and need resolving in Git by hand. */
|
|
82461
|
-
var CommentMergeError = class extends Error {};
|
|
82462
|
-
/**
|
|
82463
|
-
* Serializes a value as JSON with sorted object keys, so equal records compare equal.
|
|
82464
|
-
* @param value - The value to serialize.
|
|
82465
|
-
* @returns Its JSON text.
|
|
82466
|
-
*/
|
|
82467
|
-
function stableJson(value) {
|
|
82468
|
-
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
82469
|
-
if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`;
|
|
82470
|
-
return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, child]) => `${JSON.stringify(key)}:${stableJson(child)}`).join(",")}}`;
|
|
82471
|
-
}
|
|
82472
|
-
/**
|
|
82473
|
-
* Merges two versions of one thread: their messages combine and a status change on one side wins.
|
|
82474
|
-
* @param local - This checkout's version.
|
|
82475
|
-
* @param remote - The fetched version.
|
|
82476
|
-
* @param base - Their common ancestor, when there is one.
|
|
82477
|
-
* @returns The merged thread, or throws a CommentMergeError when they conflict.
|
|
82478
|
-
*/
|
|
82479
|
-
function mergeThreads(local, remote, base) {
|
|
82480
|
-
local = parseCommentThread(local);
|
|
82481
|
-
remote = parseCommentThread(remote);
|
|
82482
|
-
if (base) base = parseCommentThread(base);
|
|
82483
|
-
let { comments: localComments, status: localStatus, updatedAt: localTime, ...localIdentity } = local;
|
|
82484
|
-
let { comments: remoteComments, status: remoteStatus, updatedAt: remoteTime, ...remoteIdentity } = remote;
|
|
82485
|
-
let baseIdentity = base && {
|
|
82486
|
-
version: base.version,
|
|
82487
|
-
id: base.id,
|
|
82488
|
-
project: base.project,
|
|
82489
|
-
branch: base.branch,
|
|
82490
|
-
createdCommit: base.createdCommit,
|
|
82491
|
-
anchor: base.anchor,
|
|
82492
|
-
createdAt: base.createdAt
|
|
82493
|
-
};
|
|
82494
|
-
if (stableJson(localIdentity) !== stableJson(remoteIdentity) || baseIdentity && stableJson(localIdentity) !== stableJson(baseIdentity)) throw new CommentMergeError("Conflicting thread anchors in the comments branch. Resolve this record in Git before syncing.");
|
|
82495
|
-
if (stableJson(local) === stableJson(remote)) return local;
|
|
82496
|
-
if (base && stableJson(local) === stableJson(base)) return remote;
|
|
82497
|
-
if (base && stableJson(remote) === stableJson(base)) return local;
|
|
82498
|
-
let comments = /* @__PURE__ */ new Map();
|
|
82499
|
-
for (let comment of [...localComments, ...remoteComments]) {
|
|
82500
|
-
if (comments.has(comment.id) && stableJson(comments.get(comment.id)) !== stableJson(comment)) throw new CommentMergeError("Conflicting versions of a comment. Resolve this record in Git before syncing.");
|
|
82501
|
-
comments.set(comment.id, comment);
|
|
82502
|
-
}
|
|
82503
|
-
let status = localStatus === base?.status ? remoteStatus : remoteStatus === base?.status || localStatus === remoteStatus ? localStatus : void 0;
|
|
82504
|
-
if (!status) throw new CommentMergeError("Conflicting thread statuses. Resolve this record in Git before syncing.");
|
|
82505
|
-
return {
|
|
82506
|
-
...local,
|
|
82507
|
-
status,
|
|
82508
|
-
updatedAt: localTime > remoteTime ? localTime : remoteTime,
|
|
82509
|
-
comments: [...comments.values()].sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id))
|
|
82510
|
-
};
|
|
82511
|
-
}
|
|
82512
83203
|
//#endregion
|
|
82513
83204
|
//#region ../ui/src/lib/canvas/coordinates.ts
|
|
82514
83205
|
/**
|
|
@@ -83465,6 +84156,85 @@ function TaskEditor(handle) {
|
|
|
83465
84156
|
};
|
|
83466
84157
|
}
|
|
83467
84158
|
//#endregion
|
|
84159
|
+
//#region ../ui/src/lib/tasks/task-run-badge.tsx
|
|
84160
|
+
/**
|
|
84161
|
+
* What a factory run's badge says: busy states with a spinner, then review, a question for a
|
|
84162
|
+
* person, pushed or failed.
|
|
84163
|
+
* @param run - The run's state and error.
|
|
84164
|
+
* @returns Its tone, label and whether it spins, or null for a run that leaves no badge.
|
|
84165
|
+
*/
|
|
84166
|
+
function taskRunBadge(run) {
|
|
84167
|
+
switch (run.state) {
|
|
84168
|
+
case "provisioning": return {
|
|
84169
|
+
tone: "busy",
|
|
84170
|
+
label: t$2("tasks.taskRunBadge.settingUp")
|
|
84171
|
+
};
|
|
84172
|
+
case "working":
|
|
84173
|
+
case "changes": return {
|
|
84174
|
+
tone: "busy",
|
|
84175
|
+
label: t$2("tasks.taskRunBadge.working")
|
|
84176
|
+
};
|
|
84177
|
+
case "review": return {
|
|
84178
|
+
tone: "review",
|
|
84179
|
+
label: t$2("tasks.taskRunBadge.review")
|
|
84180
|
+
};
|
|
84181
|
+
case "needs_context": return {
|
|
84182
|
+
tone: "question",
|
|
84183
|
+
label: t$2("tasks.taskRunBadge.needsContext")
|
|
84184
|
+
};
|
|
84185
|
+
case "approved":
|
|
84186
|
+
case "pushing": return {
|
|
84187
|
+
tone: "busy",
|
|
84188
|
+
label: t$2("tasks.taskRunBadge.pushing")
|
|
84189
|
+
};
|
|
84190
|
+
case "pushed": return {
|
|
84191
|
+
tone: "done",
|
|
84192
|
+
label: t$2("tasks.taskRunBadge.pushed")
|
|
84193
|
+
};
|
|
84194
|
+
case "merged": return {
|
|
84195
|
+
tone: "done",
|
|
84196
|
+
label: t$2("tasks.taskRunBadge.merged")
|
|
84197
|
+
};
|
|
84198
|
+
case "failed": return {
|
|
84199
|
+
tone: "failed",
|
|
84200
|
+
label: t$2("tasks.taskRunBadge.failed")
|
|
84201
|
+
};
|
|
84202
|
+
default: return null;
|
|
84203
|
+
}
|
|
84204
|
+
}
|
|
84205
|
+
var tones = {
|
|
84206
|
+
busy: "text-muted",
|
|
84207
|
+
review: "text-amber-600 dark:text-amber-400",
|
|
84208
|
+
question: "text-violet-600 dark:text-violet-400",
|
|
84209
|
+
done: "text-emerald-600 dark:text-emerald-400",
|
|
84210
|
+
failed: "text-red-600 dark:text-red-400"
|
|
84211
|
+
};
|
|
84212
|
+
/**
|
|
84213
|
+
* A task card's factory run badge: where the agent's run is, with a failed run's reason on hover.
|
|
84214
|
+
* @param handle - The run's summary.
|
|
84215
|
+
* @returns The badge render function; nothing for a run that leaves no badge.
|
|
84216
|
+
*/
|
|
84217
|
+
function TaskRunBadge(handle) {
|
|
84218
|
+
return () => {
|
|
84219
|
+
let badge = taskRunBadge(handle.props.run);
|
|
84220
|
+
if (!badge) return null;
|
|
84221
|
+
return /* @__PURE__ */ jsx("span", {
|
|
84222
|
+
class: `flex min-w-0 items-center gap-1 ${tones[badge.tone]}`,
|
|
84223
|
+
title: handle.props.run.error ?? void 0,
|
|
84224
|
+
"data-testid": "task-run-badge",
|
|
84225
|
+
"data-state": handle.props.run.state,
|
|
84226
|
+
children: [badge.tone === "busy" ? /* @__PURE__ */ jsx(Spinner, { size: 11 }) : /* @__PURE__ */ jsx(Icon$1, {
|
|
84227
|
+
name: badge.tone === "failed" ? "circle-alert" : handle.props.run.state === "merged" ? "circle-check" : badge.tone === "done" ? "push" : badge.tone === "question" ? "message" : "circle-dot",
|
|
84228
|
+
size: 12
|
|
84229
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
84230
|
+
variant: "ui-caption",
|
|
84231
|
+
class: "truncate",
|
|
84232
|
+
children: badge.label
|
|
84233
|
+
})]
|
|
84234
|
+
});
|
|
84235
|
+
};
|
|
84236
|
+
}
|
|
84237
|
+
//#endregion
|
|
83468
84238
|
//#region ../ui/src/lib/tasks/task-card.tsx
|
|
83469
84239
|
var statusTone = {
|
|
83470
84240
|
backlog: "bg-violet-400",
|
|
@@ -83504,7 +84274,8 @@ function TaskCard(handle) {
|
|
|
83504
84274
|
let issue = taskFields(item, schema);
|
|
83505
84275
|
let linked = issue.dependencyCount ?? issue.dependencies.length;
|
|
83506
84276
|
let dependents = issue.dependentCount ?? issue.dependents.length;
|
|
83507
|
-
let
|
|
84277
|
+
let run = item.run && taskRunBadge(item.run) ? item.run : null;
|
|
84278
|
+
let hasMeta = !!run || ready || blocked || !!issue.assignee || !!issue.parentId || !!linked || !!dependents || !!issue.commentCount;
|
|
83508
84279
|
let priority = /* @__PURE__ */ jsx(Text$1, {
|
|
83509
84280
|
variant: "ui-caption",
|
|
83510
84281
|
weight: "medium",
|
|
@@ -83513,6 +84284,7 @@ function TaskCard(handle) {
|
|
|
83513
84284
|
children: typeof issue.priority === "number" ? `P${issue.priority}` : issue.priorityLabel
|
|
83514
84285
|
});
|
|
83515
84286
|
let meta = /* @__PURE__ */ jsx(Fragment, { children: [
|
|
84287
|
+
run ? /* @__PURE__ */ jsx(TaskRunBadge, { run }) : null,
|
|
83516
84288
|
ready ? /* @__PURE__ */ jsx("span", {
|
|
83517
84289
|
class: "flex items-center gap-1 text-emerald-600 dark:text-emerald-400",
|
|
83518
84290
|
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
@@ -99189,6 +99961,7 @@ function TaskDetails(handle) {
|
|
|
99189
99961
|
]
|
|
99190
99962
|
}),
|
|
99191
99963
|
children: [
|
|
99964
|
+
handle.props.actions ?? null,
|
|
99192
99965
|
/* @__PURE__ */ jsx(IconButton, {
|
|
99193
99966
|
icon: "link",
|
|
99194
99967
|
label: t$2("tasks.taskDetails.copyTaskLink"),
|
|
@@ -99214,13 +99987,13 @@ function TaskDetails(handle) {
|
|
|
99214
99987
|
}),
|
|
99215
99988
|
/* @__PURE__ */ jsx("div", {
|
|
99216
99989
|
"data-task-detail-scroll": "",
|
|
99217
|
-
class: "flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain",
|
|
99990
|
+
class: "@container/page flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain",
|
|
99218
99991
|
"aria-busy": loading ? "true" : "false",
|
|
99219
99992
|
mix: scrollFade("y"),
|
|
99220
99993
|
children: [
|
|
99221
99994
|
loading && !issue ? /* @__PURE__ */ jsx(Loader, { label: t$2("tasks.taskDetails.loadingTask") }) : null,
|
|
99222
99995
|
error ? /* @__PURE__ */ jsx("div", {
|
|
99223
|
-
class: "px-4 pb-6
|
|
99996
|
+
class: "px-4 pb-6 @min-[40rem]/page:px-6",
|
|
99224
99997
|
children: /* @__PURE__ */ jsx(FieldCard, {
|
|
99225
99998
|
class: "max-w-2xl",
|
|
99226
99999
|
role: "alert",
|
|
@@ -99235,7 +100008,7 @@ function TaskDetails(handle) {
|
|
|
99235
100008
|
})
|
|
99236
100009
|
}) : null,
|
|
99237
100010
|
issue && item && detail ? /* @__PURE__ */ jsx("div", {
|
|
99238
|
-
class: "mx-auto grid w-full max-w-6xl gap-8 px-4 pt-6 pb-12
|
|
100011
|
+
class: "mx-auto grid w-full max-w-6xl gap-8 px-4 pt-6 pb-12 @min-[40rem]/page:px-6 @min-[56rem]/page:grid-cols-[minmax(0,1fr)_18rem] @min-[56rem]/page:gap-12",
|
|
99239
100012
|
children: [/* @__PURE__ */ jsx("article", {
|
|
99240
100013
|
class: "flex min-w-0 flex-col gap-8",
|
|
99241
100014
|
children: [
|
|
@@ -99357,7 +100130,7 @@ function TaskDetails(handle) {
|
|
|
99357
100130
|
})
|
|
99358
100131
|
]
|
|
99359
100132
|
}), /* @__PURE__ */ jsx("aside", {
|
|
99360
|
-
class: "flex min-w-0 flex-col gap-4
|
|
100133
|
+
class: "flex min-w-0 flex-col gap-4 @min-[56rem]/page:sticky @min-[56rem]/page:top-6 @min-[56rem]/page:self-start",
|
|
99361
100134
|
children: [/* @__PURE__ */ jsx(Properties, {
|
|
99362
100135
|
...context,
|
|
99363
100136
|
item,
|
|
@@ -99542,6 +100315,8 @@ function TaskWorkspace(handle) {
|
|
|
99542
100315
|
}
|
|
99543
100316
|
return draft;
|
|
99544
100317
|
}
|
|
100318
|
+
let expanded = /* @__PURE__ */ new Set();
|
|
100319
|
+
let allColumns = false;
|
|
99545
100320
|
async function move(id, status) {
|
|
99546
100321
|
let issue = handle.props.snapshot?.items.find((candidate) => candidate.id === id);
|
|
99547
100322
|
if (!issue || !handle.props.operations || actionBusy || !handle.props.schema || taskRole(issue, handle.props.schema, "status") === status) return;
|
|
@@ -99634,7 +100409,12 @@ function TaskWorkspace(handle) {
|
|
|
99634
100409
|
restore = null;
|
|
99635
100410
|
handle.queueTask(() => scroll?.scrollTo(position));
|
|
99636
100411
|
}
|
|
99637
|
-
let
|
|
100412
|
+
let allStatuses = schema ? taskStatuses(schema, snapshot?.items) : [];
|
|
100413
|
+
let columns = handle.props.columns;
|
|
100414
|
+
let arranged = columns ? [...columns.shown, ...columns.collapsed ?? []].flatMap((value) => allStatuses.filter((status) => status.value === value)) : allStatuses;
|
|
100415
|
+
let statuses = columns && !allColumns && !view.status ? arranged : allStatuses;
|
|
100416
|
+
let hiddenStatuses = allStatuses.filter((status) => !arranged.includes(status));
|
|
100417
|
+
let hiddenTasks = (snapshot?.items ?? []).filter((item) => hiddenStatuses.some((status) => status.value === taskRole(item, schema, "status"))).length;
|
|
99638
100418
|
let ready = new Set(snapshot?.items.filter((item) => item.ready).map((item) => item.id) ?? []);
|
|
99639
100419
|
let activeFilters = [
|
|
99640
100420
|
view.status,
|
|
@@ -100126,10 +100906,11 @@ function TaskWorkspace(handle) {
|
|
|
100126
100906
|
})
|
|
100127
100907
|
})] }) : /* @__PURE__ */ jsx("div", {
|
|
100128
100908
|
class: "flex items-start gap-3",
|
|
100129
|
-
children: statuses.filter((status) => !view.status || view.status === status.value).map((status) => {
|
|
100909
|
+
children: [statuses.filter((status) => !view.status || view.status === status.value).map((status) => {
|
|
100130
100910
|
let issues = group.issues.filter((issue) => taskRole(issue, schema, "status") === status.value);
|
|
100911
|
+
let collapsedColumn = !!columns?.collapsed?.includes(status.value) && !expanded.has(status.value) && issues.length > 0;
|
|
100131
100912
|
return /* @__PURE__ */ jsx("section", {
|
|
100132
|
-
class: `flex flex-col gap-2 ${issues.length ? "min-w-60 max-w-sm flex-1 basis-0" : "w-32 shrink-0"}`,
|
|
100913
|
+
class: `flex flex-col gap-2 ${issues.length && !collapsedColumn ? "min-w-60 max-w-sm flex-1 basis-0" : "w-max min-w-32 max-w-48 shrink-0"}`,
|
|
100133
100914
|
"aria-label": t$2("tasks.taskWorkspace.statusColumn", { status: status.label }),
|
|
100134
100915
|
mix: [on("dragover", (event) => {
|
|
100135
100916
|
if (event.dataTransfer?.types.includes("application/x-bud-task") && !actionBusy && status.value) {
|
|
@@ -100148,10 +100929,29 @@ function TaskWorkspace(handle) {
|
|
|
100148
100929
|
item: null,
|
|
100149
100930
|
status,
|
|
100150
100931
|
items: issues,
|
|
100151
|
-
children:
|
|
100932
|
+
children: collapsedColumn ? /* @__PURE__ */ jsx(Button, {
|
|
100933
|
+
variant: "ghost",
|
|
100934
|
+
size: "small",
|
|
100935
|
+
class: "justify-start",
|
|
100936
|
+
mix: on("click", () => {
|
|
100937
|
+
expanded.add(status.value);
|
|
100938
|
+
handle.update();
|
|
100939
|
+
}),
|
|
100940
|
+
children: t$2("tasks.taskWorkspace.showTasks", { count: issues.length })
|
|
100941
|
+
}) : issues.map(renderCard)
|
|
100152
100942
|
})
|
|
100153
100943
|
}, status.value);
|
|
100154
|
-
})
|
|
100944
|
+
}), columns && !view.status && (hiddenStatuses.length || allColumns) ? /* @__PURE__ */ jsx(Button, {
|
|
100945
|
+
variant: "ghost",
|
|
100946
|
+
size: "small",
|
|
100947
|
+
class: "mt-1 shrink-0",
|
|
100948
|
+
"data-testid": "board-other-statuses",
|
|
100949
|
+
mix: on("click", () => {
|
|
100950
|
+
allColumns = !allColumns;
|
|
100951
|
+
handle.update();
|
|
100952
|
+
}),
|
|
100953
|
+
children: allColumns ? t$2("tasks.taskWorkspace.fewerStatuses") : hiddenTasks ? t$2("tasks.taskWorkspace.otherStatuses", { count: hiddenTasks }) : t$2("tasks.taskWorkspace.otherStatusesEmpty")
|
|
100954
|
+
}) : null]
|
|
100155
100955
|
})]
|
|
100156
100956
|
}, group.id)) : null
|
|
100157
100957
|
]
|
|
@@ -100183,7 +100983,7 @@ function TaskWorkspace(handle) {
|
|
|
100183
100983
|
}
|
|
100184
100984
|
})
|
|
100185
100985
|
}) : null,
|
|
100186
|
-
selectedId && schema ? /* @__PURE__ */ createElement(Page, {
|
|
100986
|
+
selectedId && schema ? (handle.props.pageFrame ?? ((page) => page))(/* @__PURE__ */ createElement(Page, {
|
|
100187
100987
|
...context(detail?.item.id === selectedId ? detail.item : null),
|
|
100188
100988
|
item: detail?.item.id === selectedId ? detail.item : null,
|
|
100189
100989
|
design: handle.props.design,
|
|
@@ -100200,10 +101000,876 @@ function TaskWorkspace(handle) {
|
|
|
100200
101000
|
loading: detailLoading,
|
|
100201
101001
|
error: detailError,
|
|
100202
101002
|
onSelect: select,
|
|
100203
|
-
onReload: onReloadDetail
|
|
101003
|
+
onReload: onReloadDetail,
|
|
101004
|
+
actions: handle.props.pageActions
|
|
101005
|
+
})) : null
|
|
101006
|
+
] })
|
|
101007
|
+
});
|
|
101008
|
+
};
|
|
101009
|
+
}
|
|
101010
|
+
//#endregion
|
|
101011
|
+
//#region ../ui/src/lib/tasks/agent-terminal.tsx
|
|
101012
|
+
function Session(handle) {
|
|
101013
|
+
let state = "connecting";
|
|
101014
|
+
let term = null;
|
|
101015
|
+
let mount = ref((node, signal) => {
|
|
101016
|
+
(async () => {
|
|
101017
|
+
let { WTerm } = await import("./dist-BCSTeNf4.js");
|
|
101018
|
+
if (signal.aborted) return;
|
|
101019
|
+
let connection = null;
|
|
101020
|
+
let size = {
|
|
101021
|
+
cols: 0,
|
|
101022
|
+
rows: 0
|
|
101023
|
+
};
|
|
101024
|
+
let resizing;
|
|
101025
|
+
let pending = [];
|
|
101026
|
+
let instance = new WTerm(node, {
|
|
101027
|
+
cursorBlink: true,
|
|
101028
|
+
renderingPaused: !handle.props.active,
|
|
101029
|
+
onData: (data) => connection ? connection.input(data) : pending.push(data),
|
|
101030
|
+
onResize: (cols, rows) => {
|
|
101031
|
+
clearTimeout(resizing);
|
|
101032
|
+
resizing = setTimeout(() => {
|
|
101033
|
+
if (cols === size.cols && rows === size.rows) return;
|
|
101034
|
+
size = {
|
|
101035
|
+
cols,
|
|
101036
|
+
rows
|
|
101037
|
+
};
|
|
101038
|
+
connection?.resize(cols, rows);
|
|
101039
|
+
}, 150);
|
|
101040
|
+
}
|
|
101041
|
+
});
|
|
101042
|
+
await instance.init();
|
|
101043
|
+
if (signal.aborted) return instance.destroy();
|
|
101044
|
+
requestAnimationFrame(() => {
|
|
101045
|
+
if (!signal.aborted) instance.fit();
|
|
101046
|
+
});
|
|
101047
|
+
document.fonts?.ready.then(() => {
|
|
101048
|
+
if (!signal.aborted) instance.fit();
|
|
101049
|
+
});
|
|
101050
|
+
term = instance;
|
|
101051
|
+
signal.addEventListener("abort", () => instance.destroy(), { once: true });
|
|
101052
|
+
size = {
|
|
101053
|
+
cols: instance.cols,
|
|
101054
|
+
rows: instance.rows
|
|
101055
|
+
};
|
|
101056
|
+
connection = handle.props.connect(handle.props.tab.id, size, {
|
|
101057
|
+
write: (bytes) => instance.write(bytes),
|
|
101058
|
+
state: (next) => {
|
|
101059
|
+
state = next;
|
|
101060
|
+
if (!signal.aborted) handle.update();
|
|
101061
|
+
}
|
|
101062
|
+
}, signal);
|
|
101063
|
+
for (let data of pending.splice(0)) connection.input(data);
|
|
101064
|
+
if (handle.props.active) instance.focus();
|
|
101065
|
+
})();
|
|
101066
|
+
});
|
|
101067
|
+
let shown = false;
|
|
101068
|
+
return () => {
|
|
101069
|
+
let { active, tab } = handle.props;
|
|
101070
|
+
if (active !== shown) {
|
|
101071
|
+
shown = active;
|
|
101072
|
+
term?.setRenderingPaused(!active);
|
|
101073
|
+
if (active) handle.queueTask(() => {
|
|
101074
|
+
term?.fit();
|
|
101075
|
+
term?.focus();
|
|
101076
|
+
});
|
|
101077
|
+
}
|
|
101078
|
+
return /* @__PURE__ */ jsx("div", {
|
|
101079
|
+
class: `absolute inset-0 ${active ? "" : "invisible"}`,
|
|
101080
|
+
"aria-hidden": active ? void 0 : "true",
|
|
101081
|
+
inert: active ? void 0 : true,
|
|
101082
|
+
"data-terminal-tab": tab.id,
|
|
101083
|
+
"data-terminal-state": state,
|
|
101084
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
101085
|
+
class: "bud-terminal absolute inset-0 overflow-hidden",
|
|
101086
|
+
"aria-label": t$2("tasks.agentTerminal.terminal", { name: tab.label }),
|
|
101087
|
+
mix: mount
|
|
101088
|
+
}), state === "closed" ? /* @__PURE__ */ jsx(Text$1, {
|
|
101089
|
+
variant: "ui-caption",
|
|
101090
|
+
tone: "muted",
|
|
101091
|
+
class: "bud-overlay pointer-events-none absolute right-3 bottom-3 rounded-lg px-2.5 py-1",
|
|
101092
|
+
children: t$2("tasks.agentTerminal.disconnected")
|
|
101093
|
+
}) : null]
|
|
101094
|
+
});
|
|
101095
|
+
};
|
|
101096
|
+
}
|
|
101097
|
+
/**
|
|
101098
|
+
* The terminal in Agent view, on @wterm/dom: one session per tab, kept while another tab shows so
|
|
101099
|
+
* its output stays, connected through the app's broker.
|
|
101100
|
+
* @param handle - The tabs, the shown one and how to connect a tab.
|
|
101101
|
+
* @returns The terminal's render function.
|
|
101102
|
+
*/
|
|
101103
|
+
function AgentTerminal(handle) {
|
|
101104
|
+
let opened = /* @__PURE__ */ new Set();
|
|
101105
|
+
return () => {
|
|
101106
|
+
let { tabs, active, connect } = handle.props;
|
|
101107
|
+
opened.add(active);
|
|
101108
|
+
return /* @__PURE__ */ jsx("div", {
|
|
101109
|
+
class: "absolute inset-0",
|
|
101110
|
+
"data-testid": "agent-terminal",
|
|
101111
|
+
children: tabs.filter((tab) => opened.has(tab.id)).map((tab) => /* @__PURE__ */ jsx(Session, {
|
|
101112
|
+
tab,
|
|
101113
|
+
connect,
|
|
101114
|
+
active: tab.id === active
|
|
101115
|
+
}, tab.id))
|
|
101116
|
+
});
|
|
101117
|
+
};
|
|
101118
|
+
}
|
|
101119
|
+
//#endregion
|
|
101120
|
+
//#region ../ui/src/lib/tasks/agent-view.tsx
|
|
101121
|
+
var LAYOUT = "bud:agent-view";
|
|
101122
|
+
/**
|
|
101123
|
+
* Reads the person's Agent view layout.
|
|
101124
|
+
* @param value - The stored preference.
|
|
101125
|
+
* @returns The layout, with the terminal shown beside the browser by default.
|
|
101126
|
+
*/
|
|
101127
|
+
function agentLayout(value) {
|
|
101128
|
+
let input = value ?? {};
|
|
101129
|
+
return {
|
|
101130
|
+
terminal: input.terminal !== false,
|
|
101131
|
+
placement: input.placement === "below" ? "below" : "right"
|
|
101132
|
+
};
|
|
101133
|
+
}
|
|
101134
|
+
function Segments(handle) {
|
|
101135
|
+
return () => /* @__PURE__ */ jsx("div", {
|
|
101136
|
+
role: "group",
|
|
101137
|
+
"aria-label": handle.props.label,
|
|
101138
|
+
class: `bud-segmented ${handle.props.class ?? ""}`,
|
|
101139
|
+
children: handle.props.options.map((option) => /* @__PURE__ */ jsx("button", {
|
|
101140
|
+
type: "button",
|
|
101141
|
+
"aria-pressed": handle.props.value === option.id ? "true" : "false",
|
|
101142
|
+
"data-agent-pane": option.id,
|
|
101143
|
+
mix: on("click", () => handle.props.onChange(option.id)),
|
|
101144
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
101145
|
+
name: option.icon,
|
|
101146
|
+
size: 15
|
|
101147
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
101148
|
+
variant: "ui",
|
|
101149
|
+
class: "@max-[24rem]/agent:sr-only",
|
|
101150
|
+
children: option.label
|
|
101151
|
+
})]
|
|
101152
|
+
}, option.id))
|
|
101153
|
+
});
|
|
101154
|
+
}
|
|
101155
|
+
/**
|
|
101156
|
+
* Agent view: a task's details beside the browser on its run's preview and the terminal. It lays
|
|
101157
|
+
* itself out by the room it has (container queries), so it works in tabs and side panels too:
|
|
101158
|
+
* with little room a switch at the top picks details or the agent's panes, and in a narrow agent
|
|
101159
|
+
* column a switch in the browser's toolbar picks the browser or the terminal, unless the terminal
|
|
101160
|
+
* sits below the browser. The layout is remembered per person.
|
|
101161
|
+
* @param handle - The details, the browser and the terminal.
|
|
101162
|
+
* @returns The view's render function.
|
|
101163
|
+
*/
|
|
101164
|
+
function AgentView(handle) {
|
|
101165
|
+
let layout = agentLayout(readPreference(LAYOUT));
|
|
101166
|
+
let panes = {
|
|
101167
|
+
main: "agent",
|
|
101168
|
+
agent: "browser"
|
|
101169
|
+
};
|
|
101170
|
+
let setLayout = (next) => {
|
|
101171
|
+
layout = {
|
|
101172
|
+
...layout,
|
|
101173
|
+
...next
|
|
101174
|
+
};
|
|
101175
|
+
writePreference(LAYOUT, layout);
|
|
101176
|
+
if (next.terminal) panes = {
|
|
101177
|
+
...panes,
|
|
101178
|
+
agent: "terminal"
|
|
101179
|
+
};
|
|
101180
|
+
if (next.terminal === false) panes = {
|
|
101181
|
+
...panes,
|
|
101182
|
+
agent: "browser"
|
|
101183
|
+
};
|
|
101184
|
+
handle.update();
|
|
101185
|
+
};
|
|
101186
|
+
let setPanes = (next) => {
|
|
101187
|
+
panes = {
|
|
101188
|
+
...panes,
|
|
101189
|
+
...next
|
|
101190
|
+
};
|
|
101191
|
+
handle.update();
|
|
101192
|
+
};
|
|
101193
|
+
return () => {
|
|
101194
|
+
let { details, browser, terminal } = handle.props;
|
|
101195
|
+
let shown = Boolean(terminal) && layout.terminal;
|
|
101196
|
+
let beside = shown && layout.placement === "right";
|
|
101197
|
+
let below = shown && layout.placement === "below";
|
|
101198
|
+
let switcher = beside ? /* @__PURE__ */ jsx(Segments, {
|
|
101199
|
+
label: t$2("tasks.agentView.agentPanes"),
|
|
101200
|
+
class: "@min-[52rem]/panes:hidden",
|
|
101201
|
+
value: panes.agent,
|
|
101202
|
+
options: [{
|
|
101203
|
+
id: "browser",
|
|
101204
|
+
label: t$2("tasks.agentView.browser"),
|
|
101205
|
+
icon: "browser"
|
|
101206
|
+
}, {
|
|
101207
|
+
id: "terminal",
|
|
101208
|
+
label: t$2("tasks.agentView.terminal"),
|
|
101209
|
+
icon: "terminal"
|
|
101210
|
+
}],
|
|
101211
|
+
onChange: (id) => setPanes({ agent: id })
|
|
101212
|
+
}) : null;
|
|
101213
|
+
let controls = terminal ? /* @__PURE__ */ jsx(Fragment, { children: [shown ? /* @__PURE__ */ jsx(IconButton, {
|
|
101214
|
+
tooltip: true,
|
|
101215
|
+
class: "@max-[34rem]/panes:hidden",
|
|
101216
|
+
icon: layout.placement === "right" ? "panel-bottom" : "panel-right",
|
|
101217
|
+
label: layout.placement === "right" ? t$2("tasks.agentView.terminalBelow") : t$2("tasks.agentView.terminalBeside"),
|
|
101218
|
+
"data-testid": "agent-terminal-placement",
|
|
101219
|
+
mix: on("click", () => setLayout({ placement: layout.placement === "right" ? "below" : "right" }))
|
|
101220
|
+
}) : null, /* @__PURE__ */ jsx(IconButton, {
|
|
101221
|
+
tooltip: true,
|
|
101222
|
+
icon: "terminal",
|
|
101223
|
+
active: shown,
|
|
101224
|
+
label: shown ? t$2("tasks.agentView.hideTerminal") : t$2("tasks.agentView.showTerminal"),
|
|
101225
|
+
"data-testid": "agent-terminal-toggle",
|
|
101226
|
+
mix: on("click", () => setLayout({ terminal: !shown }))
|
|
101227
|
+
})] }) : null;
|
|
101228
|
+
let hideBrowser = beside && panes.agent === "terminal" ? "@max-[52rem]/panes:hidden" : "";
|
|
101229
|
+
let hideTerminal = beside && panes.agent === "browser" ? "@max-[52rem]/panes:hidden" : "";
|
|
101230
|
+
return /* @__PURE__ */ jsx("div", {
|
|
101231
|
+
class: "@container/agent flex h-full min-h-0 flex-col",
|
|
101232
|
+
"data-testid": "agent-view",
|
|
101233
|
+
"data-terminal": shown ? layout.placement : "hidden",
|
|
101234
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
101235
|
+
class: "flex h-12 shrink-0 items-center gap-2 border-b border-line px-2 @min-[48rem]/agent:hidden",
|
|
101236
|
+
children: /* @__PURE__ */ jsx(Segments, {
|
|
101237
|
+
label: t$2("tasks.agentView.view"),
|
|
101238
|
+
value: panes.main,
|
|
101239
|
+
options: [{
|
|
101240
|
+
id: "details",
|
|
101241
|
+
label: t$2("tasks.agentView.details"),
|
|
101242
|
+
icon: "text"
|
|
101243
|
+
}, {
|
|
101244
|
+
id: "agent",
|
|
101245
|
+
label: terminal ? t$2("tasks.agentView.browserAndTerminal") : t$2("tasks.agentView.browser"),
|
|
101246
|
+
icon: "browser"
|
|
101247
|
+
}],
|
|
101248
|
+
onChange: (id) => setPanes({ main: id })
|
|
101249
|
+
})
|
|
101250
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
101251
|
+
class: "flex min-h-0 flex-1",
|
|
101252
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
101253
|
+
class: `flex min-h-0 w-full min-w-0 flex-col @min-[48rem]/agent:w-[clamp(20rem,34%,30rem)] @min-[48rem]/agent:shrink-0 @min-[48rem]/agent:border-e @min-[48rem]/agent:border-line ${panes.main === "agent" ? "@max-[48rem]/agent:hidden" : ""}`,
|
|
101254
|
+
"data-agent-region": "details",
|
|
101255
|
+
children: details
|
|
101256
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
101257
|
+
class: `@container/panes flex min-h-0 min-w-0 flex-1 bg-[var(--bud-editor)] ${below ? "flex-col" : ""} ${panes.main === "details" ? "@max-[48rem]/agent:hidden" : ""}`,
|
|
101258
|
+
"data-agent-region": "agent",
|
|
101259
|
+
children: [/* @__PURE__ */ jsx("section", {
|
|
101260
|
+
"aria-label": t$2("tasks.agentView.browser"),
|
|
101261
|
+
class: `flex min-h-0 min-w-0 flex-col ${below ? "flex-[3]" : "flex-1"} ${hideBrowser}`,
|
|
101262
|
+
"data-agent-region": "browser",
|
|
101263
|
+
children: [
|
|
101264
|
+
/* @__PURE__ */ jsx("div", {
|
|
101265
|
+
class: "bud-toolbar flex h-12 shrink-0 items-center gap-1.5 border-b border-line px-2",
|
|
101266
|
+
children: [
|
|
101267
|
+
switcher,
|
|
101268
|
+
/* @__PURE__ */ jsx("div", {
|
|
101269
|
+
class: "flex min-w-0 flex-1 items-center gap-1.5",
|
|
101270
|
+
children: browser.toolbar
|
|
101271
|
+
}),
|
|
101272
|
+
browser.actions,
|
|
101273
|
+
controls
|
|
101274
|
+
]
|
|
101275
|
+
}),
|
|
101276
|
+
/* @__PURE__ */ jsx("div", {
|
|
101277
|
+
class: "relative min-h-0 flex-1",
|
|
101278
|
+
children: browser.content
|
|
101279
|
+
}),
|
|
101280
|
+
browser.status
|
|
101281
|
+
]
|
|
101282
|
+
}), shown && terminal ? /* @__PURE__ */ jsx("section", {
|
|
101283
|
+
"aria-label": t$2("tasks.agentView.terminal"),
|
|
101284
|
+
class: `flex min-h-0 min-w-0 flex-col bg-[var(--bud-editor)] ${below ? "flex-[2] border-t border-line" : "flex-1 @min-[52rem]/panes:max-w-[44rem] @min-[52rem]/panes:border-s @min-[52rem]/panes:border-line"} ${hideTerminal}`,
|
|
101285
|
+
"data-agent-region": "terminal",
|
|
101286
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
101287
|
+
class: "bud-toolbar flex h-12 shrink-0 items-center gap-1.5 border-b border-line px-2",
|
|
101288
|
+
children: [
|
|
101289
|
+
beside ? /* @__PURE__ */ jsx("div", {
|
|
101290
|
+
class: "@min-[52rem]/panes:hidden",
|
|
101291
|
+
children: switcher
|
|
101292
|
+
}) : null,
|
|
101293
|
+
/* @__PURE__ */ jsx("div", {
|
|
101294
|
+
class: "flex min-w-0 flex-1 items-center overflow-x-auto [scrollbar-width:none]",
|
|
101295
|
+
children: terminal.tabs
|
|
101296
|
+
}),
|
|
101297
|
+
beside ? /* @__PURE__ */ jsx("div", {
|
|
101298
|
+
class: "flex items-center gap-1.5 @min-[52rem]/panes:hidden",
|
|
101299
|
+
children: controls
|
|
101300
|
+
}) : null
|
|
101301
|
+
]
|
|
101302
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
101303
|
+
class: "relative min-h-0 flex-1",
|
|
101304
|
+
children: terminal.content
|
|
101305
|
+
})]
|
|
101306
|
+
}) : null]
|
|
101307
|
+
})]
|
|
101308
|
+
})]
|
|
101309
|
+
});
|
|
101310
|
+
};
|
|
101311
|
+
}
|
|
101312
|
+
//#endregion
|
|
101313
|
+
//#region ../ui/src/lib/tasks/agent-browser.tsx
|
|
101314
|
+
/**
|
|
101315
|
+
* Agent view's browser on the run's live preview: a sandboxed frame on the preview's own origin,
|
|
101316
|
+
* never Bud's, followed through the dev bridge the project's pages carry, with back, forward,
|
|
101317
|
+
* reload and the address, and comments on picked elements that go to the agent as changes.
|
|
101318
|
+
* @param handle - The details, the preview, the terminal and their actions.
|
|
101319
|
+
* @returns The view's render function.
|
|
101320
|
+
*/
|
|
101321
|
+
function AgentBrowser(handle) {
|
|
101322
|
+
let frame;
|
|
101323
|
+
let path = "/";
|
|
101324
|
+
let title = "";
|
|
101325
|
+
let src = null;
|
|
101326
|
+
let load = 0;
|
|
101327
|
+
let picking = null;
|
|
101328
|
+
let draft = null;
|
|
101329
|
+
let busy = false;
|
|
101330
|
+
let tab = null;
|
|
101331
|
+
let origin = () => {
|
|
101332
|
+
let preview = handle.props.preview;
|
|
101333
|
+
return preview.state === "ready" ? new URL(preview.url).origin : null;
|
|
101334
|
+
};
|
|
101335
|
+
let post = (type, data = {}) => {
|
|
101336
|
+
let target = origin();
|
|
101337
|
+
if (target) frame?.contentWindow?.postMessage({
|
|
101338
|
+
...data,
|
|
101339
|
+
type
|
|
101340
|
+
}, target);
|
|
101341
|
+
};
|
|
101342
|
+
let update = () => {
|
|
101343
|
+
if (!handle.signal.aborted) handle.update();
|
|
101344
|
+
};
|
|
101345
|
+
let frameRef = ref((node, signal) => {
|
|
101346
|
+
frame = node;
|
|
101347
|
+
signal.addEventListener("abort", () => frame = void 0, { once: true });
|
|
101348
|
+
});
|
|
101349
|
+
let keepInside = ref((card, signal) => {
|
|
101350
|
+
let position = () => {
|
|
101351
|
+
if (!frame) return;
|
|
101352
|
+
card.style.setProperty("--pages-card-x", "0px");
|
|
101353
|
+
card.style.setProperty("--pages-card-y", "0px");
|
|
101354
|
+
let offset = canvasPopoverOffset(card.getBoundingClientRect(), frame.getBoundingClientRect());
|
|
101355
|
+
card.style.setProperty("--pages-card-x", `${offset.x}px`);
|
|
101356
|
+
card.style.setProperty("--pages-card-y", `${offset.y}px`);
|
|
101357
|
+
};
|
|
101358
|
+
let observer = new ResizeObserver(position);
|
|
101359
|
+
observer.observe(card);
|
|
101360
|
+
position();
|
|
101361
|
+
signal.addEventListener("abort", () => observer.disconnect(), { once: true });
|
|
101362
|
+
});
|
|
101363
|
+
let listen = ref((_node, signal) => {
|
|
101364
|
+
window.addEventListener("message", (event) => {
|
|
101365
|
+
if (!frame || event.source !== frame.contentWindow || event.origin !== origin()) return;
|
|
101366
|
+
let data = event.data;
|
|
101367
|
+
if (data?.type === "bud:location" && typeof data.path === "string") {
|
|
101368
|
+
path = data.path.startsWith("/") ? data.path.slice(0, 4096) : path;
|
|
101369
|
+
title = typeof data.title === "string" ? data.title.slice(0, 200) : "";
|
|
101370
|
+
update();
|
|
101371
|
+
} else if (data?.type === "bud:picked" && picking && data.id === picking) {
|
|
101372
|
+
picking = null;
|
|
101373
|
+
draft = readPagePick(data);
|
|
101374
|
+
update();
|
|
101375
|
+
}
|
|
101376
|
+
}, { signal });
|
|
101377
|
+
});
|
|
101378
|
+
let navigate = (to) => {
|
|
101379
|
+
let preview = handle.props.preview;
|
|
101380
|
+
if (preview.state !== "ready") return;
|
|
101381
|
+
let url = new URL(preview.url);
|
|
101382
|
+
let target = new URL(to, url);
|
|
101383
|
+
if (target.origin !== url.origin) return;
|
|
101384
|
+
for (let [key, value] of url.searchParams) if (!target.searchParams.has(key)) target.searchParams.set(key, value);
|
|
101385
|
+
src = target.href;
|
|
101386
|
+
load++;
|
|
101387
|
+
update();
|
|
101388
|
+
};
|
|
101389
|
+
return () => {
|
|
101390
|
+
let { preview, details, terminal, onComment } = handle.props;
|
|
101391
|
+
let ready = preview.state === "ready" ? preview : null;
|
|
101392
|
+
if (ready && src === null) src = ready.url;
|
|
101393
|
+
if (!ready) {
|
|
101394
|
+
src = null;
|
|
101395
|
+
picking = null;
|
|
101396
|
+
}
|
|
101397
|
+
let host = ready ? new URL(ready.url).host : "";
|
|
101398
|
+
let shownTab = terminal?.tabs.find((entry) => entry.id === tab)?.id ?? terminal?.tabs[0]?.id;
|
|
101399
|
+
let toolbar = /* @__PURE__ */ jsx(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
101400
|
+
class: "flex shrink-0 items-center gap-0.5",
|
|
101401
|
+
children: [
|
|
101402
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
101403
|
+
tooltip: true,
|
|
101404
|
+
class: "@max-[34rem]/panes:hidden",
|
|
101405
|
+
icon: "arrow-left",
|
|
101406
|
+
label: t$2("tasks.agentBrowser.back"),
|
|
101407
|
+
disabled: !ready,
|
|
101408
|
+
mix: on("click", () => post("bud:back"))
|
|
101409
|
+
}),
|
|
101410
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
101411
|
+
tooltip: true,
|
|
101412
|
+
class: "@max-[34rem]/panes:hidden",
|
|
101413
|
+
icon: "arrow-right",
|
|
101414
|
+
label: t$2("tasks.agentBrowser.forward"),
|
|
101415
|
+
disabled: !ready,
|
|
101416
|
+
mix: on("click", () => post("bud:forward"))
|
|
101417
|
+
}),
|
|
101418
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
101419
|
+
tooltip: true,
|
|
101420
|
+
icon: "sync",
|
|
101421
|
+
label: t$2("tasks.agentBrowser.reload"),
|
|
101422
|
+
disabled: !ready,
|
|
101423
|
+
mix: on("click", () => navigate(path))
|
|
101424
|
+
})
|
|
101425
|
+
]
|
|
101426
|
+
}), /* @__PURE__ */ jsx("form", {
|
|
101427
|
+
class: "flex min-w-0 flex-1 @max-[34rem]/panes:hidden",
|
|
101428
|
+
mix: on("submit", (event) => {
|
|
101429
|
+
event.preventDefault();
|
|
101430
|
+
let input = event.currentTarget.elements.namedItem("address");
|
|
101431
|
+
navigate(input.value.trim() || "/");
|
|
101432
|
+
}),
|
|
101433
|
+
children: /* @__PURE__ */ jsx("label", {
|
|
101434
|
+
class: "bud-control bud-field flex h-control min-w-0 flex-1 items-center gap-2 rounded-lg px-2.5 text-muted",
|
|
101435
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
101436
|
+
name: "globe",
|
|
101437
|
+
size: 14,
|
|
101438
|
+
class: "shrink-0"
|
|
101439
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
101440
|
+
name: "address",
|
|
101441
|
+
"aria-label": t$2("tasks.agentBrowser.address"),
|
|
101442
|
+
class: "h-full min-w-0 flex-1 bg-transparent pb-0.5 text-sm/5 text-ink outline-none",
|
|
101443
|
+
spellcheck: false,
|
|
101444
|
+
autocomplete: "off",
|
|
101445
|
+
disabled: !ready,
|
|
101446
|
+
value: ready ? path : ""
|
|
101447
|
+
})]
|
|
101448
|
+
})
|
|
101449
|
+
})] });
|
|
101450
|
+
let actions = /* @__PURE__ */ jsx(Fragment, { children: [onComment ? /* @__PURE__ */ jsx(IconButton, {
|
|
101451
|
+
tooltip: true,
|
|
101452
|
+
icon: "crosshair",
|
|
101453
|
+
label: t$2("tasks.agentBrowser.commentOnElement"),
|
|
101454
|
+
active: Boolean(picking),
|
|
101455
|
+
disabled: !ready,
|
|
101456
|
+
"data-testid": "agent-browser-pick",
|
|
101457
|
+
mix: on("click", () => {
|
|
101458
|
+
if (picking) {
|
|
101459
|
+
post("bud:pick-cancel");
|
|
101460
|
+
picking = null;
|
|
101461
|
+
} else {
|
|
101462
|
+
draft = null;
|
|
101463
|
+
picking = crypto.randomUUID();
|
|
101464
|
+
post("bud:pick", { id: picking });
|
|
101465
|
+
}
|
|
101466
|
+
update();
|
|
101467
|
+
})
|
|
101468
|
+
}) : null, /* @__PURE__ */ jsx(IconButton, {
|
|
101469
|
+
tooltip: true,
|
|
101470
|
+
class: "@max-[34rem]/panes:hidden",
|
|
101471
|
+
icon: "external",
|
|
101472
|
+
label: t$2("tasks.agentBrowser.openInNewWindow"),
|
|
101473
|
+
disabled: !ready,
|
|
101474
|
+
mix: on("click", () => {
|
|
101475
|
+
if (src) window.open(src, "_blank", "noopener,noreferrer");
|
|
101476
|
+
})
|
|
101477
|
+
})] });
|
|
101478
|
+
let content = ready ? /* @__PURE__ */ jsx(Fragment, { children: [/* @__PURE__ */ jsx("iframe", {
|
|
101479
|
+
title: title || t$2("tasks.agentBrowser.preview"),
|
|
101480
|
+
src: src ?? ready.url,
|
|
101481
|
+
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups allow-modals",
|
|
101482
|
+
referrerpolicy: "no-referrer",
|
|
101483
|
+
class: "absolute inset-0 size-full border-0 bg-white",
|
|
101484
|
+
"data-testid": "agent-browser-frame",
|
|
101485
|
+
mix: [frameRef, on("load", () => {
|
|
101486
|
+
post("bud:hello");
|
|
101487
|
+
if (picking) post("bud:pick", { id: picking });
|
|
101488
|
+
})]
|
|
101489
|
+
}, `${load}`), draft && onComment ? /* @__PURE__ */ jsx("div", {
|
|
101490
|
+
role: "dialog",
|
|
101491
|
+
"aria-label": t$2("tasks.agentBrowser.newComment"),
|
|
101492
|
+
class: `absolute z-10 ${draft.client ? "" : "top-3 right-3"}`,
|
|
101493
|
+
style: draft.client ? {
|
|
101494
|
+
left: `${draft.client.x}px`,
|
|
101495
|
+
top: `${draft.client.y}px`,
|
|
101496
|
+
transform: "translate(calc(12px + var(--pages-card-x, 0px)), calc(-8px + var(--pages-card-y, 0px)))"
|
|
101497
|
+
} : void 0,
|
|
101498
|
+
mix: [...draft.client ? [keepInside] : [], on("keydown", (event) => {
|
|
101499
|
+
if (event.key === "Escape") {
|
|
101500
|
+
draft = null;
|
|
101501
|
+
update();
|
|
101502
|
+
}
|
|
101503
|
+
})],
|
|
101504
|
+
children: /* @__PURE__ */ jsx(CommentComposerCard, {
|
|
101505
|
+
busy,
|
|
101506
|
+
heading: /* @__PURE__ */ jsx("div", {
|
|
101507
|
+
class: "flex min-w-0 flex-col gap-1 px-1 pt-1",
|
|
101508
|
+
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
101509
|
+
variant: "ui-caption",
|
|
101510
|
+
tone: "muted",
|
|
101511
|
+
class: "truncate",
|
|
101512
|
+
children: [
|
|
101513
|
+
draft.path,
|
|
101514
|
+
" · ",
|
|
101515
|
+
draft.element?.label || draft.element?.tagName || ""
|
|
101516
|
+
]
|
|
101517
|
+
}), draft.element?.source ? /* @__PURE__ */ jsx(ElementSourceLink, { source: draft.element.source }) : null]
|
|
101518
|
+
}),
|
|
101519
|
+
onCancel: () => {
|
|
101520
|
+
draft = null;
|
|
101521
|
+
update();
|
|
101522
|
+
},
|
|
101523
|
+
onSubmit: async (body) => {
|
|
101524
|
+
let pick = draft;
|
|
101525
|
+
busy = true;
|
|
101526
|
+
update();
|
|
101527
|
+
try {
|
|
101528
|
+
await onComment({
|
|
101529
|
+
body,
|
|
101530
|
+
path: pick.path,
|
|
101531
|
+
element: pick.element
|
|
101532
|
+
});
|
|
101533
|
+
draft = null;
|
|
101534
|
+
} finally {
|
|
101535
|
+
busy = false;
|
|
101536
|
+
update();
|
|
101537
|
+
}
|
|
101538
|
+
}
|
|
101539
|
+
})
|
|
101540
|
+
}, draft.client ? `${draft.client.x},${draft.client.y}` : "corner") : null] }) : /* @__PURE__ */ jsx("div", {
|
|
101541
|
+
class: "flex h-full flex-col items-center justify-center gap-3 p-6 text-center",
|
|
101542
|
+
children: preview.state === "waking" ? /* @__PURE__ */ jsx(Loader, { label: t$2("tasks.agentBrowser.waking") }) : /* @__PURE__ */ jsx(Fragment, { children: [
|
|
101543
|
+
/* @__PURE__ */ jsx(Icon$1, {
|
|
101544
|
+
name: "browser",
|
|
101545
|
+
size: 20,
|
|
101546
|
+
class: "text-muted"
|
|
101547
|
+
}),
|
|
101548
|
+
/* @__PURE__ */ jsx(Text$1, {
|
|
101549
|
+
as: "p",
|
|
101550
|
+
variant: "ui",
|
|
101551
|
+
tone: "muted",
|
|
101552
|
+
class: "max-w-xs text-balance",
|
|
101553
|
+
children: preview.state === "asleep" ? t$2("tasks.agentBrowser.asleep") : preview.state === "failed" ? preview.message : t$2("tasks.agentBrowser.noPreview")
|
|
101554
|
+
}),
|
|
101555
|
+
preview.state === "asleep" || preview.state === "failed" ? /* @__PURE__ */ jsx(Button, {
|
|
101556
|
+
variant: "secondary",
|
|
101557
|
+
size: "small",
|
|
101558
|
+
"data-testid": "agent-browser-wake",
|
|
101559
|
+
mix: on("click", handle.props.onWake),
|
|
101560
|
+
children: preview.state === "asleep" ? t$2("tasks.agentBrowser.wake") : t$2("tasks.agentBrowser.tryAgain")
|
|
100204
101561
|
}) : null
|
|
100205
101562
|
] })
|
|
100206
101563
|
});
|
|
101564
|
+
let status = /* @__PURE__ */ jsx("footer", {
|
|
101565
|
+
class: "flex h-9 shrink-0 items-center gap-3 overflow-hidden whitespace-nowrap border-t border-line ps-3 pe-2 text-muted",
|
|
101566
|
+
"aria-label": t$2("tasks.agentBrowser.status"),
|
|
101567
|
+
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
101568
|
+
variant: "ui-caption",
|
|
101569
|
+
class: "truncate",
|
|
101570
|
+
children: ready ? title || path : ""
|
|
101571
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
101572
|
+
variant: "ui-caption",
|
|
101573
|
+
class: "ms-auto truncate",
|
|
101574
|
+
children: host
|
|
101575
|
+
})]
|
|
101576
|
+
});
|
|
101577
|
+
return /* @__PURE__ */ jsx("div", {
|
|
101578
|
+
class: "h-full min-h-0",
|
|
101579
|
+
mix: listen,
|
|
101580
|
+
children: /* @__PURE__ */ jsx(AgentView, {
|
|
101581
|
+
details,
|
|
101582
|
+
browser: {
|
|
101583
|
+
toolbar,
|
|
101584
|
+
actions,
|
|
101585
|
+
content,
|
|
101586
|
+
status
|
|
101587
|
+
},
|
|
101588
|
+
terminal: terminal ? {
|
|
101589
|
+
tabs: /* @__PURE__ */ jsx("div", {
|
|
101590
|
+
class: "bud-segmented",
|
|
101591
|
+
role: "group",
|
|
101592
|
+
"aria-label": t$2("tasks.agentTerminal.sessions"),
|
|
101593
|
+
children: terminal.tabs.map((entry) => /* @__PURE__ */ jsx("button", {
|
|
101594
|
+
type: "button",
|
|
101595
|
+
"aria-pressed": entry.id === shownTab ? "true" : "false",
|
|
101596
|
+
"data-terminal-select": entry.id,
|
|
101597
|
+
mix: on("click", () => {
|
|
101598
|
+
tab = entry.id;
|
|
101599
|
+
update();
|
|
101600
|
+
}),
|
|
101601
|
+
children: /* @__PURE__ */ jsx(Text$1, {
|
|
101602
|
+
variant: "ui",
|
|
101603
|
+
children: entry.label
|
|
101604
|
+
})
|
|
101605
|
+
}, entry.id))
|
|
101606
|
+
}),
|
|
101607
|
+
content: /* @__PURE__ */ jsx(AgentTerminal, {
|
|
101608
|
+
tabs: terminal.tabs,
|
|
101609
|
+
active: shownTab,
|
|
101610
|
+
connect: terminal.connect
|
|
101611
|
+
})
|
|
101612
|
+
} : null
|
|
101613
|
+
})
|
|
101614
|
+
});
|
|
101615
|
+
};
|
|
101616
|
+
}
|
|
101617
|
+
//#endregion
|
|
101618
|
+
//#region ../ui/src/lib/tasks/task-run-panel.tsx
|
|
101619
|
+
function elapsed(from, now) {
|
|
101620
|
+
let seconds = Math.max(0, Math.round((now - Date.parse(from)) / 1e3));
|
|
101621
|
+
if (seconds < 60) return t$2("tasks.taskRunPanel.seconds", { count: seconds });
|
|
101622
|
+
return t$2("tasks.taskRunPanel.minutes", { count: Math.round(seconds / 60) });
|
|
101623
|
+
}
|
|
101624
|
+
/**
|
|
101625
|
+
* The factory's run on a task, above its discussion: Start task, the agent's progress, its summary
|
|
101626
|
+
* with Request changes, Approve & push and Discard, a failure with Retry, and the pushed branch.
|
|
101627
|
+
* @param handle - The run, whether it can start, and the actions.
|
|
101628
|
+
* @returns The panel render function.
|
|
101629
|
+
*/
|
|
101630
|
+
function TaskRunPanel(handle) {
|
|
101631
|
+
let acting = null;
|
|
101632
|
+
let confirming = null;
|
|
101633
|
+
let requesting = false;
|
|
101634
|
+
function update() {
|
|
101635
|
+
if (!handle.signal.aborted) handle.update();
|
|
101636
|
+
}
|
|
101637
|
+
async function act(name, action) {
|
|
101638
|
+
if (acting) return;
|
|
101639
|
+
acting = name;
|
|
101640
|
+
update();
|
|
101641
|
+
try {
|
|
101642
|
+
await action();
|
|
101643
|
+
} catch {} finally {
|
|
101644
|
+
acting = null;
|
|
101645
|
+
confirming = null;
|
|
101646
|
+
update();
|
|
101647
|
+
}
|
|
101648
|
+
}
|
|
101649
|
+
let button = (name, label, action, variant = "secondary") => /* @__PURE__ */ jsx(Button, {
|
|
101650
|
+
variant,
|
|
101651
|
+
size: "small",
|
|
101652
|
+
disabled: acting !== null,
|
|
101653
|
+
"data-testid": `run-${name}`,
|
|
101654
|
+
mix: on("click", () => void act(name, action)),
|
|
101655
|
+
children: [acting === name ? /* @__PURE__ */ jsx(Spinner, { size: 12 }) : null, label]
|
|
101656
|
+
});
|
|
101657
|
+
let confirm = (kind, question, label) => /* @__PURE__ */ jsx("div", {
|
|
101658
|
+
class: "flex min-w-0 flex-wrap items-center gap-2",
|
|
101659
|
+
role: "group",
|
|
101660
|
+
"aria-label": question,
|
|
101661
|
+
"data-testid": `run-confirm-${kind}`,
|
|
101662
|
+
children: [
|
|
101663
|
+
/* @__PURE__ */ jsx(Text$1, {
|
|
101664
|
+
variant: "ui-caption",
|
|
101665
|
+
tone: "muted",
|
|
101666
|
+
class: "me-auto",
|
|
101667
|
+
children: question
|
|
101668
|
+
}),
|
|
101669
|
+
/* @__PURE__ */ jsx(Button, {
|
|
101670
|
+
variant: "ghost",
|
|
101671
|
+
size: "small",
|
|
101672
|
+
disabled: acting !== null,
|
|
101673
|
+
mix: on("click", () => {
|
|
101674
|
+
confirming = null;
|
|
101675
|
+
update();
|
|
101676
|
+
}),
|
|
101677
|
+
children: t$2("tasks.taskRunPanel.cancel")
|
|
101678
|
+
}),
|
|
101679
|
+
button(`${kind}-confirmed`, label, kind === "approve" ? handle.props.onApprove : handle.props.onDiscard, "primary")
|
|
101680
|
+
]
|
|
101681
|
+
});
|
|
101682
|
+
let ask = (kind, label, variant) => /* @__PURE__ */ jsx(Button, {
|
|
101683
|
+
variant,
|
|
101684
|
+
size: "small",
|
|
101685
|
+
disabled: acting !== null,
|
|
101686
|
+
"data-testid": `run-${kind}`,
|
|
101687
|
+
mix: on("click", () => {
|
|
101688
|
+
confirming = kind;
|
|
101689
|
+
requesting = false;
|
|
101690
|
+
update();
|
|
101691
|
+
}),
|
|
101692
|
+
children: label
|
|
101693
|
+
});
|
|
101694
|
+
return () => {
|
|
101695
|
+
let { run, blocked, preview, now = Date.now() } = handle.props;
|
|
101696
|
+
let state = run?.state;
|
|
101697
|
+
let fresh = !run || state === "discarded";
|
|
101698
|
+
let working = state === "provisioning" || state === "working" || state === "changes" || state === "approved";
|
|
101699
|
+
let line = (icon, text, tone = "") => /* @__PURE__ */ jsx("div", {
|
|
101700
|
+
class: `flex min-w-0 items-center gap-2 ${tone}`,
|
|
101701
|
+
"data-testid": "run-state",
|
|
101702
|
+
children: [
|
|
101703
|
+
icon,
|
|
101704
|
+
/* @__PURE__ */ jsx(Text$1, {
|
|
101705
|
+
variant: "ui",
|
|
101706
|
+
class: "min-w-0 [overflow-wrap:anywhere]",
|
|
101707
|
+
children: text
|
|
101708
|
+
}),
|
|
101709
|
+
run && working ? /* @__PURE__ */ jsx(Text$1, {
|
|
101710
|
+
variant: "ui-caption",
|
|
101711
|
+
tone: "muted",
|
|
101712
|
+
class: "ms-auto shrink-0 tabular-nums",
|
|
101713
|
+
children: elapsed(run.activity.findLast((entry) => entry.kind === "status")?.at ?? run.createdAt, now)
|
|
101714
|
+
}) : null
|
|
101715
|
+
]
|
|
101716
|
+
});
|
|
101717
|
+
let activity = (run?.activity ?? []).filter((entry) => entry.kind !== "status").slice(-6);
|
|
101718
|
+
return /* @__PURE__ */ jsx("section", {
|
|
101719
|
+
class: "flex min-w-0 flex-col gap-3",
|
|
101720
|
+
"aria-label": t$2("tasks.taskRunPanel.agent"),
|
|
101721
|
+
"data-testid": "task-run-panel",
|
|
101722
|
+
"data-state": state ?? (run === null ? "none" : "loading"),
|
|
101723
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
101724
|
+
class: "flex items-center gap-2",
|
|
101725
|
+
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
101726
|
+
as: "h3",
|
|
101727
|
+
variant: "ui",
|
|
101728
|
+
weight: "medium",
|
|
101729
|
+
children: t$2("tasks.taskRunPanel.agent")
|
|
101730
|
+
}), run && !fresh ? /* @__PURE__ */ jsx(Text$1, {
|
|
101731
|
+
variant: "ui-caption",
|
|
101732
|
+
tone: "muted",
|
|
101733
|
+
class: "min-w-0 truncate font-mono",
|
|
101734
|
+
children: run.branch
|
|
101735
|
+
}) : null]
|
|
101736
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
101737
|
+
class: "flex min-w-0 flex-col gap-3 rounded-lg bg-[var(--bud-card)] p-3 ring-1 ring-[var(--bud-card-border)]",
|
|
101738
|
+
children: run === void 0 ? line(/* @__PURE__ */ jsx(Spinner, { size: 14 }), t$2("tasks.taskRunPanel.loading"), "text-muted") : fresh ? /* @__PURE__ */ jsx("div", {
|
|
101739
|
+
class: "flex min-w-0 flex-wrap items-center gap-3",
|
|
101740
|
+
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
101741
|
+
variant: "ui-caption",
|
|
101742
|
+
tone: "muted",
|
|
101743
|
+
class: "min-w-0 flex-1",
|
|
101744
|
+
children: blocked ?? t$2("tasks.taskRunPanel.startHint")
|
|
101745
|
+
}), blocked ? null : button("start", t$2("tasks.taskRunPanel.start"), handle.props.onStart, "primary")]
|
|
101746
|
+
}) : /* @__PURE__ */ jsx(Fragment, { children: [
|
|
101747
|
+
state === "provisioning" ? line(/* @__PURE__ */ jsx(Spinner, { size: 14 }), t$2("tasks.taskRunPanel.settingUp")) : state === "working" || state === "changes" ? line(/* @__PURE__ */ jsx(Spinner, { size: 14 }), t$2("tasks.taskRunPanel.working")) : state === "approved" || state === "pushing" ? line(/* @__PURE__ */ jsx(Spinner, { size: 14 }), t$2("tasks.taskRunPanel.pushing", { branch: run.branch })) : state === "review" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
101748
|
+
name: "circle-dot",
|
|
101749
|
+
size: 14
|
|
101750
|
+
}), t$2("tasks.taskRunPanel.review"), "text-amber-600 dark:text-amber-400") : state === "needs_context" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
101751
|
+
name: "message",
|
|
101752
|
+
size: 14
|
|
101753
|
+
}), t$2("tasks.taskRunPanel.needsContext"), "text-violet-600 dark:text-violet-400") : state === "merged" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
101754
|
+
name: "circle-check",
|
|
101755
|
+
size: 14
|
|
101756
|
+
}), t$2("tasks.taskRunPanel.merged", { branch: run.branch }), "text-emerald-600 dark:text-emerald-400") : state === "pushed" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
101757
|
+
name: "push",
|
|
101758
|
+
size: 14
|
|
101759
|
+
}), t$2("tasks.taskRunPanel.pushed", {
|
|
101760
|
+
branch: run.branch,
|
|
101761
|
+
commit: (run.pushed ?? "").slice(0, 7)
|
|
101762
|
+
}), "text-emerald-600 dark:text-emerald-400") : line(/* @__PURE__ */ jsx(Icon$1, {
|
|
101763
|
+
name: "circle-alert",
|
|
101764
|
+
size: 14
|
|
101765
|
+
}), run.error?.message ?? t$2("tasks.taskRunPanel.failed"), "text-red-600 dark:text-red-400"),
|
|
101766
|
+
run.asleep && (state === "review" || state === "needs_context" || state === "failed") ? /* @__PURE__ */ jsx("div", {
|
|
101767
|
+
class: "flex min-w-0 items-center gap-2 text-muted",
|
|
101768
|
+
"data-testid": "run-asleep",
|
|
101769
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
101770
|
+
name: "moon",
|
|
101771
|
+
size: 13,
|
|
101772
|
+
class: "shrink-0"
|
|
101773
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
101774
|
+
variant: "ui-caption",
|
|
101775
|
+
tone: "muted",
|
|
101776
|
+
class: "min-w-0",
|
|
101777
|
+
children: t$2("tasks.taskRunPanel.asleep")
|
|
101778
|
+
})]
|
|
101779
|
+
}) : null,
|
|
101780
|
+
state === "needs_context" && run.question ? /* @__PURE__ */ jsx("div", {
|
|
101781
|
+
class: "min-w-0 rounded-md bg-[var(--bud-control)] px-3 py-2",
|
|
101782
|
+
"data-testid": "run-question",
|
|
101783
|
+
children: /* @__PURE__ */ jsx(TaskMarkdown, { children: run.question })
|
|
101784
|
+
}) : null,
|
|
101785
|
+
state === "review" && run.summary ? /* @__PURE__ */ jsx("div", {
|
|
101786
|
+
class: "min-w-0",
|
|
101787
|
+
"data-testid": "run-summary",
|
|
101788
|
+
children: /* @__PURE__ */ jsx(TaskMarkdown, { children: run.summary })
|
|
101789
|
+
}) : null,
|
|
101790
|
+
activity.length && state !== "pushed" && state !== "merged" ? /* @__PURE__ */ jsx("ol", {
|
|
101791
|
+
class: "flex min-w-0 flex-col gap-1",
|
|
101792
|
+
"aria-label": t$2("tasks.taskRunPanel.activity"),
|
|
101793
|
+
children: activity.map((entry, index) => /* @__PURE__ */ jsx("li", {
|
|
101794
|
+
class: "flex min-w-0 items-baseline gap-2",
|
|
101795
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
101796
|
+
name: entry.kind === "tool" ? "code" : entry.kind === "error" ? "warning" : "circle",
|
|
101797
|
+
size: 11,
|
|
101798
|
+
class: "shrink-0 translate-y-px text-muted"
|
|
101799
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
101800
|
+
variant: "ui-caption",
|
|
101801
|
+
tone: "muted",
|
|
101802
|
+
class: "min-w-0 truncate font-mono",
|
|
101803
|
+
children: entry.text
|
|
101804
|
+
})]
|
|
101805
|
+
}, `${entry.at}-${index}`))
|
|
101806
|
+
}) : null,
|
|
101807
|
+
confirming === "approve" ? confirm("approve", t$2("tasks.taskRunPanel.confirmApprove", { branch: run.branch }), t$2("tasks.taskRunPanel.approve")) : confirming === "discard" ? confirm("discard", t$2("tasks.taskRunPanel.confirmDiscard"), t$2("tasks.taskRunPanel.discard")) : state === "needs_context" && handle.props.onAnswer ? /* @__PURE__ */ jsx("div", {
|
|
101808
|
+
class: "flex min-w-0 flex-col gap-2",
|
|
101809
|
+
children: [/* @__PURE__ */ jsx(CommentComposer, {
|
|
101810
|
+
label: t$2("tasks.taskRunPanel.answer"),
|
|
101811
|
+
placeholder: t$2("tasks.taskRunPanel.answerPlaceholder"),
|
|
101812
|
+
busy: acting !== null,
|
|
101813
|
+
onSubmit: async (message) => {
|
|
101814
|
+
await handle.props.onAnswer(message);
|
|
101815
|
+
}
|
|
101816
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
101817
|
+
class: "ms-auto",
|
|
101818
|
+
children: ask("discard", t$2("tasks.taskRunPanel.discard"), "ghost")
|
|
101819
|
+
})]
|
|
101820
|
+
}) : requesting && state === "review" ? /* @__PURE__ */ jsx(CommentComposer, {
|
|
101821
|
+
label: t$2("tasks.taskRunPanel.requestChanges"),
|
|
101822
|
+
placeholder: t$2("tasks.taskRunPanel.changesPlaceholder"),
|
|
101823
|
+
autoFocus: true,
|
|
101824
|
+
busy: acting !== null,
|
|
101825
|
+
onSubmit: async (message) => {
|
|
101826
|
+
await handle.props.onChanges(message);
|
|
101827
|
+
requesting = false;
|
|
101828
|
+
update();
|
|
101829
|
+
},
|
|
101830
|
+
footer: /* @__PURE__ */ jsx(Button, {
|
|
101831
|
+
variant: "ghost",
|
|
101832
|
+
size: "small",
|
|
101833
|
+
mix: on("click", () => {
|
|
101834
|
+
requesting = false;
|
|
101835
|
+
update();
|
|
101836
|
+
}),
|
|
101837
|
+
children: t$2("tasks.taskRunPanel.cancel")
|
|
101838
|
+
})
|
|
101839
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
101840
|
+
class: "flex min-w-0 flex-wrap items-center gap-2",
|
|
101841
|
+
children: [
|
|
101842
|
+
state === "review" ? ask("approve", t$2("tasks.taskRunPanel.approve"), "primary") : null,
|
|
101843
|
+
state === "review" ? /* @__PURE__ */ jsx(Button, {
|
|
101844
|
+
variant: "secondary",
|
|
101845
|
+
size: "small",
|
|
101846
|
+
disabled: acting !== null,
|
|
101847
|
+
"data-testid": "run-changes",
|
|
101848
|
+
mix: on("click", () => {
|
|
101849
|
+
requesting = true;
|
|
101850
|
+
update();
|
|
101851
|
+
}),
|
|
101852
|
+
children: t$2("tasks.taskRunPanel.requestChanges")
|
|
101853
|
+
}) : null,
|
|
101854
|
+
state === "failed" && run.error?.retryable && run.failedIn ? button("retry", t$2("tasks.taskRunPanel.retry"), handle.props.onRetry, "primary") : null,
|
|
101855
|
+
preview && (state === "working" || state === "changes" || state === "review" || state === "needs_context") ? button("preview", t$2("tasks.taskRunPanel.preview"), handle.props.onPreview) : null,
|
|
101856
|
+
state === "pushed" && handle.props.onCanvas ? /* @__PURE__ */ jsx(Button, {
|
|
101857
|
+
variant: "secondary",
|
|
101858
|
+
size: "small",
|
|
101859
|
+
"data-testid": "run-canvas",
|
|
101860
|
+
mix: on("click", () => handle.props.onCanvas?.()),
|
|
101861
|
+
children: t$2("tasks.taskRunPanel.showOnCanvas")
|
|
101862
|
+
}) : null,
|
|
101863
|
+
state === "pushed" || state === "merged" ? button("start", t$2("tasks.taskRunPanel.startAgain"), handle.props.onStart, "ghost") : null,
|
|
101864
|
+
state !== "pushed" && state !== "merged" && state !== "pushing" && state !== "approved" ? /* @__PURE__ */ jsx("span", {
|
|
101865
|
+
class: "ms-auto",
|
|
101866
|
+
children: ask("discard", t$2("tasks.taskRunPanel.discard"), "ghost")
|
|
101867
|
+
}) : null
|
|
101868
|
+
]
|
|
101869
|
+
})
|
|
101870
|
+
] })
|
|
101871
|
+
})]
|
|
101872
|
+
});
|
|
100207
101873
|
};
|
|
100208
101874
|
}
|
|
100209
101875
|
//#endregion
|
|
@@ -105934,7 +107600,7 @@ function ItemDiscussion(handle) {
|
|
|
105934
107600
|
*/
|
|
105935
107601
|
function ThreadTaskLinks(handle) {
|
|
105936
107602
|
return () => {
|
|
105937
|
-
let { itemIds, items, href, onEdit, busy } = handle.props;
|
|
107603
|
+
let { itemIds, items, href, onEdit, busy, schema, runs } = handle.props;
|
|
105938
107604
|
if (!itemIds.length && !onEdit) return null;
|
|
105939
107605
|
let names = new Map(items.map((item) => [item.id, item]));
|
|
105940
107606
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -105946,15 +107612,33 @@ function ThreadTaskLinks(handle) {
|
|
|
105946
107612
|
href: href(id),
|
|
105947
107613
|
title: item?.title ?? id,
|
|
105948
107614
|
class: "bud-interaction bud-control inline-flex min-h-6 max-w-full items-center gap-1.5 rounded-md px-2 py-0.5",
|
|
105949
|
-
children: [
|
|
105950
|
-
|
|
105951
|
-
|
|
105952
|
-
|
|
105953
|
-
|
|
105954
|
-
|
|
105955
|
-
|
|
105956
|
-
|
|
105957
|
-
|
|
107615
|
+
children: [
|
|
107616
|
+
/* @__PURE__ */ jsx(Text$1, {
|
|
107617
|
+
variant: "code",
|
|
107618
|
+
class: "shrink-0",
|
|
107619
|
+
children: id
|
|
107620
|
+
}),
|
|
107621
|
+
item?.title ? /* @__PURE__ */ jsx(Text$1, {
|
|
107622
|
+
variant: "ui-caption",
|
|
107623
|
+
class: "truncate",
|
|
107624
|
+
children: item.title
|
|
107625
|
+
}) : null,
|
|
107626
|
+
item?.status && schema ? /* @__PURE__ */ jsx("span", {
|
|
107627
|
+
class: "flex shrink-0 items-center gap-1 text-muted",
|
|
107628
|
+
"data-task-status": true,
|
|
107629
|
+
children: [/* @__PURE__ */ jsx(StatusDot, {
|
|
107630
|
+
status: item.status,
|
|
107631
|
+
schema
|
|
107632
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
107633
|
+
variant: "ui-caption",
|
|
107634
|
+
children: schema.statuses.find((status) => status.value === item.status)?.label ?? taskLabel(item.status)
|
|
107635
|
+
})]
|
|
107636
|
+
}) : null,
|
|
107637
|
+
runs?.[id] && taskRunBadge(runs[id]) ? /* @__PURE__ */ jsx("span", {
|
|
107638
|
+
class: "shrink-0",
|
|
107639
|
+
children: /* @__PURE__ */ jsx(TaskRunBadge, { run: runs[id] })
|
|
107640
|
+
}) : null
|
|
107641
|
+
]
|
|
105958
107642
|
}, id);
|
|
105959
107643
|
}), onEdit ? /* @__PURE__ */ jsx(IconButton, {
|
|
105960
107644
|
icon: "tasks",
|
|
@@ -106278,78 +107962,6 @@ function equal(left, right) {
|
|
|
106278
107962
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
106279
107963
|
}
|
|
106280
107964
|
//#endregion
|
|
106281
|
-
//#region app/routes.ts
|
|
106282
|
-
var routes = createRoutes({
|
|
106283
|
-
screen: createGetRoute("/(:screen)(/*rest)"),
|
|
106284
|
-
screenModule: createGetRoute("/__bud/screens/:name.js"),
|
|
106285
|
-
logo: createGetRoute("/__bud/logo/:theme"),
|
|
106286
|
-
health: createGetRoute("/health"),
|
|
106287
|
-
conversation: conversationRoutes.show,
|
|
106288
|
-
tasksApi: {
|
|
106289
|
-
index: createGetRoute("/api/tasks"),
|
|
106290
|
-
schema: createGetRoute("/api/tasks/schema"),
|
|
106291
|
-
workspace: createGetRoute("/api/tasks/workspace"),
|
|
106292
|
-
show: createGetRoute("/api/tasks/items/:id"),
|
|
106293
|
-
section: createGetRoute("/api/tasks/items/:id/sections/:section"),
|
|
106294
|
-
create: createPostRoute("/api/tasks"),
|
|
106295
|
-
update: createPostRoute("/api/tasks/items/:id"),
|
|
106296
|
-
mutate: createPostRoute("/api/tasks/items/:id/actions"),
|
|
106297
|
-
sync: createPostRoute("/api/tasks/sync")
|
|
106298
|
-
},
|
|
106299
|
-
filesApi: {
|
|
106300
|
-
index: createGetRoute("/api/files"),
|
|
106301
|
-
entry: createGetRoute("/api/files/entry"),
|
|
106302
|
-
read: createGetRoute("/api/files/read"),
|
|
106303
|
-
refresh: createPostRoute("/api/files/refresh")
|
|
106304
|
-
},
|
|
106305
|
-
fileSearchApi: { search: createGetRoute("/api/files/search") },
|
|
106306
|
-
fileReviewApi: {
|
|
106307
|
-
repository: createGetRoute("/api/files/repository"),
|
|
106308
|
-
compare: createGetRoute("/api/files/compare"),
|
|
106309
|
-
diff: createGetRoute("/api/files/diff"),
|
|
106310
|
-
source: createGetRoute("/api/files/source"),
|
|
106311
|
-
history: createGetRoute("/api/files/history")
|
|
106312
|
-
},
|
|
106313
|
-
fileMutationsApi: {
|
|
106314
|
-
prepare: createPostRoute("/api/files/mutations/prepare"),
|
|
106315
|
-
apply: createPostRoute("/api/files/mutations/apply"),
|
|
106316
|
-
recoveries: createGetRoute("/api/files/mutations/recoveries")
|
|
106317
|
-
},
|
|
106318
|
-
fileSavesApi: { save: createPostRoute("/api/files/save") },
|
|
106319
|
-
fileReviewActionsApi: {
|
|
106320
|
-
prepare: createPostRoute("/api/files/review-actions/prepare"),
|
|
106321
|
-
apply: createPostRoute("/api/files/review-actions/apply"),
|
|
106322
|
-
recoveries: createGetRoute("/api/files/review-actions/recoveries")
|
|
106323
|
-
},
|
|
106324
|
-
liveApi: { stream: createGetRoute("/api/live") },
|
|
106325
|
-
previewsApi: {
|
|
106326
|
-
show: createGetRoute("/api/previews/items/*id"),
|
|
106327
|
-
image: createGetRoute("/api/previews/images/:hash.jpg"),
|
|
106328
|
-
refresh: createPostRoute("/api/previews/refresh/*id"),
|
|
106329
|
-
describe: createPostRoute("/api/previews/describe/*id"),
|
|
106330
|
-
locate: createPostRoute("/api/previews/locate/*id")
|
|
106331
|
-
},
|
|
106332
|
-
branchesApi: {
|
|
106333
|
-
list: createGetRoute("/api/branches"),
|
|
106334
|
-
activate: createPostRoute("/api/branches/activate/*name"),
|
|
106335
|
-
deactivate: createPostRoute("/api/branches/deactivate/*name"),
|
|
106336
|
-
capture: createPostRoute("/api/branches/capture/*name")
|
|
106337
|
-
},
|
|
106338
|
-
comments: {
|
|
106339
|
-
list: createGetRoute("/api/comments"),
|
|
106340
|
-
get: createGetRoute("/api/comments/:id"),
|
|
106341
|
-
create: createPostRoute("/api/comments"),
|
|
106342
|
-
update: createPostRoute("/api/comments/:id"),
|
|
106343
|
-
reply: createPostRoute("/api/comments/:id/replies"),
|
|
106344
|
-
status: createPostRoute("/api/comments/:id/status"),
|
|
106345
|
-
link: createPostRoute("/api/comments/:id/links"),
|
|
106346
|
-
unlink: createPostRoute("/api/comments/:id/links/remove"),
|
|
106347
|
-
deleteMessage: createPostRoute("/api/comments/:id/messages/remove"),
|
|
106348
|
-
sync: createPostRoute("/api/comments/sync"),
|
|
106349
|
-
viewer: createGetRoute("/api/viewer")
|
|
106350
|
-
}
|
|
106351
|
-
});
|
|
106352
|
-
//#endregion
|
|
106353
107965
|
//#region ../live/src/lib/sse.ts
|
|
106354
107966
|
/**
|
|
106355
107967
|
* Reads Server-Sent Events from a response body, following the HTML event-stream format.
|
|
@@ -106573,6 +108185,11 @@ var endpoints = [
|
|
|
106573
108185
|
write: true,
|
|
106574
108186
|
list: false
|
|
106575
108187
|
},
|
|
108188
|
+
{
|
|
108189
|
+
route: routes.comments.makeTask,
|
|
108190
|
+
write: true,
|
|
108191
|
+
list: false
|
|
108192
|
+
},
|
|
106576
108193
|
{
|
|
106577
108194
|
route: routes.comments.deleteMessage,
|
|
106578
108195
|
write: true,
|
|
@@ -107206,4 +108823,4 @@ function unavailableComments(message = commentsUnavailable) {
|
|
|
107206
108823
|
};
|
|
107207
108824
|
}
|
|
107208
108825
|
//#endregion
|
|
107209
|
-
export {
|
|
108826
|
+
export { Dialog as $, nullable as $i, parseLiveId as $n, maxFileSaveBytes as $r, LiveStatus as $t, FileRecoveryDialog as A, parseWorkUpdate as Ai, createComponent as An, WorkerPoolWorkerError as Ar, readReviewLocation as At, AgentBrowser as B, WorkValidationError as Bi, joinPatterns as Bn, validateResolvedThemeName as Br, reconcileFileView as Bt, ThreadTaskPicker as C, parseWorkItem as Ci, isAllowedHostPropName as Cn, isDiffPlainText as Cr, taskHref as Ct, FileEditorPanel as D, parseWorkSnapshot as Di, shouldStringifyBooleanAttribute as Dn, areDiffTargetsEqual as Dr, defaultReviewView as Dt, ReviewActionDialog as E, parseWorkQuery as Ei, serializeStyleObject as En, areFilesEqual as Er, defaultReviewPosition as Et, defaultFileDestination as F, parseMessage as Fi, pageRoutes as Fn, areFileRenderOptionsEqual as Fr, closeFileTab as Ft, FileSearchPanel as G, strict$2 as Gi, parsePreview as Gn, resolveLanguage as Gr, Loader as Gt, parseTaskDesign as H, nonempty as Hi, MAX_PREVIEW_HEIGHT as Hn, themeResolver as Hr, CommentThreadDetail as Ht, fileActionIntent as I, parseMessageAuthor as Ii, taskRoutes as In, hasResolvedThemes as Ir, defaultFileView as It, CommentThreadHeading as J, boolean$1 as Ji, parsePreviewHash as Jn, parseReviewActionPlan as Jr, ToolbarSeparator as Jt, BranchSidebar as K, any as Ki, parsePreviewBranch as Kn, areLanguagesAttached as Kr, Spinner as Kt, mutationFileView as L, withoutMessages as Li, Route$1 as Ln, areThemesEqual as Lr, fileHref as Lt, FileReviewPanel as M, workRunSummary as Mi, jsx as Mn, markWorkerErrorReported as Mr, reviewComparison as Mt, codeThemes as N, messageDeletionRefusal as Ni, routes as Nn, isFilePlainText as Nr, reviewContextKey as Nt, defaultEditorPreferences as O, parseWorkSync as Oi, Fragment as On, WorkerPoolTaskCanceledError as Or, legacyFileHref as Ot, FileWorkspace as P, messageDeletionRefusals as Pi, fileRoutes as Pn, renderFileWithHighlighter as Pr, reviewHref as Pt, FieldCardHeader as Q, fail as Qi, RESYNC as Qn, parseFileSaveResult as Qr, IconButton as Qt, remainingMutationIntent as R, fieldByRole as Ri, createMultiMatcher as Rn, getSharedHighlighter as Rr, parseFileView as Rt, ThreadTaskLinks as S, parseWorkDetail as Si, SELF_CLOSING_TAGS as Sn, reviewConflictIdentity as Sr, taskAgentHref as St, FileConflictPanel as T, parseWorkMutationResult as Ti, sanitizeUrlAttribute as Tn, areDiffRenderOptionsEqual as Tr, taskRole as Tt, CanvasWorkspace as U, parseWork as Ui, PREVIEW_THUMBNAIL_WIDTHS as Un, getThemes as Ur, CommentThreadItem as Ut, TaskWorkspace as V, identifier$1 as Vi, RoutePattern as Vn, attachResolvedThemes as Vr, rememberFile as Vt, captureCanvasPoint as W, record as Wi, PREVIEW_TILE_HEIGHT as Wn, getResolvedOrResolveLanguage as Wr, CommentComposer as Wt, FieldCardContent as X, defaulted as Xi, parsePreviewPins as Xn, parseReviewActionResult as Xr, ShellTabBar as Xt, FieldCard as Y, createSchema as Yi, parsePreviewId as Yn, parseReviewActionRecoveries as Yr, WorkspaceLayout as Yt, FieldCardFooter as Z, enum_ as Zi, parsePreviewViewport as Zn, parseFileSaveRequest as Zr, Select as Zt, requestComments as _, parseSectionData as _i, composeMixedProps as _n, parseThreadSnapshot as _r, legacyConversationHref as _t, saveThreads as a, string$2 as aa, parseReviewRepository as ai, hasMessage as an, predictWorkCreate as ar, readTabsCookie as at, writeOptimistically as b, parseWorkConnection as bi, isEntry as bn, createCodeAnchor as br, agentViewOpen as bt, previewKey as c, parseFileSearchQuery as ci, t$2 as cn, MAX_THREADS as cr, tabsCookieName as ct, saveWorkspace as d, parseFileDocument as di, Icon$1 as dn, parseThreadDeleteInput as dr, PagesWorkspace as dt, number$2 as ea, parseMutationPlan as ei, Tooltip as en, predictThreadCreate as er, activeTab as et, storeDocument as f, parseFileIndex as fi, ref as fn, parseThreadFilter as fr, codeCommentCounts as ft, CommentsRequestError as g, parseWorkWorkspace as gi, normalizeUnsafeHTMLProps as gn, parseThreadReplyInput as gr, isCodeConversation as gt, storedWorkspace as h, parseElementAnchor as hi, on as hn, parseThreadLinkInput as hr, conversationLabel as ht, saveThread as i, parseSafe as ia, parseReviewHistory as ii, writePreference as in, predictWorkAction as ir, parseShellTabs as it, FileMutationDialog as j, valueByRole as ji, createFrameHandle as jn, isHandledWorkerPoolError as jr, rememberReviewPosition as jt, parseEditorPreferences as k, parseWorkSyncResult as ki, Frame as kn, WorkerPoolTerminatedError as kr, parseReviewSession as kt, projectStore as l, parseFileSearchResult as li, useLocaleSource as ln, parseAnchor as lr, tabsCookieValue as lt, storedFiles as m, MAX_CANVAS_Y as mi, stripFlushMarkers as mn, parseThreadInput as mr, conversationHref as mt, unavailableComments as n, optional as na, parseRecoveries as ni, toast as nn, predictThreadReply as nr, initialShellTabs as nt, threadMatches as o, parseReviewSnapshot as oi, isLocale as on, predictWorkUpdate as or, stepShellTab as ot, storedDocument as p, parseFilePath as pi, appendFlushMarker as pn, parseThreadId as pr, conversationDestination as pt, ConversationSidebar as q, array as qi, parsePreviewCapture as qn, ResolvedLanguages as qr, Button as qt, followThreads as r, parse$1 as ra, parseReviewDiff as ri, readPreference as rn, predictThreadStatus as rr, openShellTab as rt, applyFileUpdate as s, parseReviewSource as si, locale as sn, parseWorkChange as sr, tabHref as st, commentsUnavailable as t, object$1 as ta, parseMutationResult as ti, AppShell as tn, predictThreadDelete as tr, closeShellTab as tt, saveFiles as u, parseFileChange as ui, Text$1 as un, parseThread as ur, visitShellTab as ut, projectLive as v, parseWorkActionInput as vi, resolveMixDescriptors as vn, parseThreadStatus as vr, locateCodeConversations as vt, ItemDiscussion as w, parseWorkItemRef as wi, normalizeAttributeName as wn, renderDiffWithHighlighter as wr, taskLabel as wt, writeRows as x, parseWorkCreate as xi, FRAMEWORK_PROPS as xn, parseFileUpdate as xr, selectedTask as xt, plainRow as y, parseWorkActivity as yi, clientEntry as yn, parseThreadStatusInput as yr, readConversationLocation as yt, TaskRunPanel as z, parseWorkSchema as zi, equal$1 as zn, prepareThemeResolution as zr, readFileLocation as zt };
|