@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as Registry$1, C as getFiletypeFromFileName, D as EncodedTokenMetadata, E as queueRender, N as __exportAll$1, O as FontStyle, T as dequeueRender, a as isSafari, b as getLineAnnotationName, g as isFullyTransparent, j as Theme, k as INITIAL, m as hoverWouldEraseText, n as cloneHunks, o as getLineAnnotationSource, r as isFirefox, t as cloneFileDiffMetadata, u as linesFromFileContents, w as isGutterUtilityPath } from "./cloneFileDiffMetadata-B-xwytg8.js";
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as composeCacheKey, An as fieldByRole, Bt as FileEntrySchema, Et as parseReviewRevision, H as resolveCodeAnchor, J as parseDiffFromFile, K as normalizeDiffResolution, Mn as statusCategory, Mt as replacementEdits, N as parseThreadFilter, O as ThreadCapabilitiesSchema, P as parseThreadId, Pt as parseFileSearchQuery, Q as cleanLastNewline, R as parseThreadSnapshot, Rt as orderFileEntries, Sn as valueByRole, T as parseThreadChange, Vt as FileIndexSchema, X as diffChars, Y as diffWordsWithSpace, Yt as parseFilePath, Z as slideBlankBoundaryBlocksUp, _ as taskRoutes, an as WorkConnectionSchema, dn as parseWorkCreate, et as getHunkSideEndBoundary, ft as parseMutationIntent, gn as parseWorkPatch, h as fileRoutes, i as routes, in as parseWorkWorkspace, j as parseThread, jt as matchFileText, k as ThreadSchema, kn as WorkSchemaSchema, m as conversationRoutes, mn as parseWorkItemRef, n as parseLiveEvent, nn as MAX_CANVAS_Y, on as createWorkItemSchema, q as resolveRegion, r as parseLiveId, rn as parseElementAnchor, tt as getHunkSideStartBoundary, yt as ReviewRepositorySchema, zn as Icon$1, zt as FileDocumentSchema } from "./events-BH_rAu7O.js";
|
|
3
3
|
import { C as SPLIT_WITH_NEWLINES, T as UNSAFE_CSS_ATTRIBUTE, a as DEFAULT_CODE_VIEW_LAYOUT, b as HEADER_METADATA_SLOT_ID, c as DEFAULT_SMOOTH_SCROLL_SETTINGS, d as DEFAULT_VIRTUAL_FILE_METRICS, f as DIFFS_DEVELOPMENT_BUILD, g as EMPTY_RENDER_RANGE, h as DIFFS_TAG_NAME, i as DEFAULT_CODE_VIEW_FILE_METRICS, l as DEFAULT_THEMES, m as DIFFS_SCROLLBAR_MEASURE_ATTRIBUTE, n as CODE_VIEW_HEADER_ATTRIBUTE, o as DEFAULT_EXPANDED_REGION, p as DIFFS_SCROLLBAR_GUTTER_MEASURED_PROPERTY, r as CUSTOM_HEADER_SLOT_ID, s as DEFAULT_RENDER_RANGE, t as CODE_VIEW_FOOTER_ATTRIBUTE, u as DEFAULT_TOKENIZE_MAX_LENGTH, w as THEME_CSS_ATTRIBUTE, x as HEADER_PREFIX_SLOT_ID, y as HEADER_FILENAME_SUFFIX_SLOT_ID } from "./constants-C7Y3SJGj.js";
|
|
4
4
|
import { a as PreviewIdSchema, i as PreviewHashSchema, o as PreviewSchema, s as PreviewThemeSchema } from "./parsers-CsiSkwTT.js";
|
|
5
5
|
import { any, array, boolean, createSchema, fail, instanceof_, literal, nullable, number, object, parseSafe, string } from "remix/data-schema";
|
|
@@ -436,6 +436,34 @@ function HeadlessButton(handle) {
|
|
|
436
436
|
//#region ../ui/src/lib/i18n/de.ts
|
|
437
437
|
/** Bud's interface text in German, by message key. */
|
|
438
438
|
var de$1 = {
|
|
439
|
+
"app.client.agentPanel.agent": {
|
|
440
|
+
text: "Agent",
|
|
441
|
+
source: "f5a4f646"
|
|
442
|
+
},
|
|
443
|
+
"app.client.agentPanel.changesRefused": {
|
|
444
|
+
text: "Der Agent kann Änderungen gerade nicht entgegennehmen",
|
|
445
|
+
source: "bdb2edb4"
|
|
446
|
+
},
|
|
447
|
+
"app.client.agentPanel.changesSent": {
|
|
448
|
+
text: "An den Agenten gesendet",
|
|
449
|
+
source: "7f5e7626"
|
|
450
|
+
},
|
|
451
|
+
"app.client.agentPanel.devServer": {
|
|
452
|
+
text: "Dev-Server",
|
|
453
|
+
source: "27e53ed7"
|
|
454
|
+
},
|
|
455
|
+
"app.client.agentPanel.ended": {
|
|
456
|
+
text: "Die Sitzung wurde beendet. Wenn du dich wieder verbindest, startet sie erneut.",
|
|
457
|
+
source: "bf6ebbec"
|
|
458
|
+
},
|
|
459
|
+
"app.client.agentPanel.failed": {
|
|
460
|
+
text: "Die Factory hat nicht geantwortet.",
|
|
461
|
+
source: "3bd3ae7a"
|
|
462
|
+
},
|
|
463
|
+
"app.client.agentPanel.shell": {
|
|
464
|
+
text: "Shell",
|
|
465
|
+
source: "ba1969a1"
|
|
466
|
+
},
|
|
439
467
|
"app.client.commentsRequest.emptyResponse": {
|
|
440
468
|
text: "Der Kommentarservice hat eine leere Antwort zurückgegeben.",
|
|
441
469
|
source: "c739d1f9"
|
|
@@ -524,6 +552,62 @@ var de$1 = {
|
|
|
524
552
|
text: "Die Bilder konnten nicht verglichen werden.",
|
|
525
553
|
source: "8fd04955"
|
|
526
554
|
},
|
|
555
|
+
"app.client.factoryRun.discardAndMove": {
|
|
556
|
+
text: "Lauf verwerfen & verschieben",
|
|
557
|
+
source: "9b3e9067"
|
|
558
|
+
},
|
|
559
|
+
"app.client.factoryRun.failed": {
|
|
560
|
+
text: "Bud konnte die Factory nicht erreichen.",
|
|
561
|
+
source: "00cea450"
|
|
562
|
+
},
|
|
563
|
+
"app.client.factoryRun.keepRun": {
|
|
564
|
+
text: "Lauf behalten",
|
|
565
|
+
source: "88a5de36"
|
|
566
|
+
},
|
|
567
|
+
"app.client.factoryRun.moveQuestion": {
|
|
568
|
+
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.",
|
|
569
|
+
source: "d0c22345"
|
|
570
|
+
},
|
|
571
|
+
"app.client.factoryRun.moveTitle": {
|
|
572
|
+
text: "Lauf des Agents verwerfen?",
|
|
573
|
+
source: "5ce9ffe3"
|
|
574
|
+
},
|
|
575
|
+
"app.client.factoryRun.noPreview": {
|
|
576
|
+
text: "Der Dev-Server des Runs ist nicht erreichbar.",
|
|
577
|
+
source: "6dd54cb3"
|
|
578
|
+
},
|
|
579
|
+
"app.client.factoryRun.previewFailed": {
|
|
580
|
+
text: "Die Live-Vorschau konnte nicht geöffnet werden",
|
|
581
|
+
source: "a96d281a"
|
|
582
|
+
},
|
|
583
|
+
"app.client.factoryRun.refused": {
|
|
584
|
+
text: "Der Run wurde nicht geändert",
|
|
585
|
+
source: "a5fc457d"
|
|
586
|
+
},
|
|
587
|
+
"app.client.factoryRun.statusesMissing": {
|
|
588
|
+
text: "Füge oben die Factory-Status hinzu, bevor du Aufgaben startest.",
|
|
589
|
+
source: "2a26077f"
|
|
590
|
+
},
|
|
591
|
+
"app.client.factorySetup.add": {
|
|
592
|
+
text: "Factory-Status hinzufügen",
|
|
593
|
+
source: "7992be24"
|
|
594
|
+
},
|
|
595
|
+
"app.client.factorySetup.added": {
|
|
596
|
+
text: "Factory-Status hinzugefügt",
|
|
597
|
+
source: "02f6f293"
|
|
598
|
+
},
|
|
599
|
+
"app.client.factorySetup.failed": {
|
|
600
|
+
text: "Factory-Status konnten nicht hinzugefügt werden",
|
|
601
|
+
source: "8500af1b"
|
|
602
|
+
},
|
|
603
|
+
"app.client.factorySetup.missing": {
|
|
604
|
+
text: "In deinem Aufgaben-Store braucht die Factory diese Status: {statuses}.",
|
|
605
|
+
source: "573be4b6"
|
|
606
|
+
},
|
|
607
|
+
"app.client.factorySetup.otherKind": {
|
|
608
|
+
text: "Dein Aufgaben-Store führt diese Factory-Status als anderen Statustyp: {statuses}. Ordne andere Status in factory.statuses zu.",
|
|
609
|
+
source: "1b96d5e4"
|
|
610
|
+
},
|
|
527
611
|
"app.client.fileDrafts.deleteWithUnsavedDrafts": {
|
|
528
612
|
text: "Speichere oder verwerfe die ungespeicherten Entwürfe in dieser Auswahl, bevor du sie löschst.",
|
|
529
613
|
source: "1deabbed"
|
|
@@ -932,6 +1016,10 @@ var de$1 = {
|
|
|
932
1016
|
text: "Der Kommentardienst hat eine andere Diskussion zurückgegeben.",
|
|
933
1017
|
source: "c0151231"
|
|
934
1018
|
},
|
|
1019
|
+
"app.client.projectComments.taskCreated": {
|
|
1020
|
+
text: "Aufgabe erstellt",
|
|
1021
|
+
source: "4e52cadc"
|
|
1022
|
+
},
|
|
935
1023
|
"app.client.projectComments.waitForCurrentOperation": {
|
|
936
1024
|
text: "Warte, bis der aktuelle Kommentarvorgang abgeschlossen ist.",
|
|
937
1025
|
source: "3c6007dd"
|
|
@@ -1139,6 +1227,10 @@ var de$1 = {
|
|
|
1139
1227
|
text: "Aufgaben konnten nicht geladen werden.",
|
|
1140
1228
|
source: "b5dd285f"
|
|
1141
1229
|
},
|
|
1230
|
+
"app.client.projectTasks.closeAgentView": {
|
|
1231
|
+
text: "Agent-Ansicht schliessen",
|
|
1232
|
+
source: "0d888f27"
|
|
1233
|
+
},
|
|
1142
1234
|
"app.client.projectTasks.couldNotLoadTask": {
|
|
1143
1235
|
text: "Diese Aufgabe konnte nicht geladen werden.",
|
|
1144
1236
|
source: "370587a2"
|
|
@@ -1155,10 +1247,22 @@ var de$1 = {
|
|
|
1155
1247
|
text: "Der Aufgabendienst hat eine andere Aufgabe zurückgegeben. Aktualisiere vor dem erneuten Versuch.",
|
|
1156
1248
|
source: "91adeaa0"
|
|
1157
1249
|
},
|
|
1250
|
+
"app.client.projectTasks.openAgentView": {
|
|
1251
|
+
text: "Agent-Ansicht öffnen",
|
|
1252
|
+
source: "99976d29"
|
|
1253
|
+
},
|
|
1158
1254
|
"app.client.projectTasks.refreshBeforeChanges": {
|
|
1159
1255
|
text: "Aktualisiere die Aufgaben, bevor du Änderungen vornimmst.",
|
|
1160
1256
|
source: "9f4e6583"
|
|
1161
1257
|
},
|
|
1258
|
+
"app.client.projectTasks.runKept": {
|
|
1259
|
+
text: "Die Aufgabe bleibt, wo sie ist, während der Agent läuft.",
|
|
1260
|
+
source: "ed653075"
|
|
1261
|
+
},
|
|
1262
|
+
"app.client.projectTasks.runPushing": {
|
|
1263
|
+
text: "Der Branch der Aufgabe wird gepusht. Verschiebe sie, sobald der Push abgeschlossen ist.",
|
|
1264
|
+
source: "c4f8b8c6"
|
|
1265
|
+
},
|
|
1162
1266
|
"app.client.projectTasks.undidTaskChange": {
|
|
1163
1267
|
text: "Bud hat eine Aufgabenänderung rückgängig gemacht",
|
|
1164
1268
|
source: "7f50e04c"
|
|
@@ -1175,6 +1279,10 @@ var de$1 = {
|
|
|
1175
1279
|
text: "Aufgaben verknüpfen",
|
|
1176
1280
|
source: "b6640aab"
|
|
1177
1281
|
},
|
|
1282
|
+
"app.client.projectThreadLinks.makeTask": {
|
|
1283
|
+
text: "Aufgabe erstellen",
|
|
1284
|
+
source: "f5eaf1d4"
|
|
1285
|
+
},
|
|
1178
1286
|
"app.client.projectThreadLinks.reviewLinksBeforeSaving": {
|
|
1179
1287
|
text: "Überprüfe die neuesten Verknüpfungen, bevor du speicherst.",
|
|
1180
1288
|
source: "c567f897"
|
|
@@ -1207,6 +1315,38 @@ var de$1 = {
|
|
|
1207
1315
|
text: "Erneut versuchen",
|
|
1208
1316
|
source: "8036af59"
|
|
1209
1317
|
},
|
|
1318
|
+
"app.client.taskContextBlock.branch": {
|
|
1319
|
+
text: "Branch",
|
|
1320
|
+
source: "a3e27665"
|
|
1321
|
+
},
|
|
1322
|
+
"app.client.taskContextBlock.code": {
|
|
1323
|
+
text: "Code",
|
|
1324
|
+
source: "795db914"
|
|
1325
|
+
},
|
|
1326
|
+
"app.client.taskContextBlock.context": {
|
|
1327
|
+
text: "Kontext",
|
|
1328
|
+
source: "bd317f1c"
|
|
1329
|
+
},
|
|
1330
|
+
"app.client.taskContextBlock.element": {
|
|
1331
|
+
text: "Element",
|
|
1332
|
+
source: "7d376697"
|
|
1333
|
+
},
|
|
1334
|
+
"app.client.taskContextBlock.page": {
|
|
1335
|
+
text: "Seite",
|
|
1336
|
+
source: "e83d9196"
|
|
1337
|
+
},
|
|
1338
|
+
"app.client.taskContextBlock.screenshot": {
|
|
1339
|
+
text: "Die Seite rund um den Kommentar, mit markierter Stelle",
|
|
1340
|
+
source: "a97331f6"
|
|
1341
|
+
},
|
|
1342
|
+
"app.client.taskContextBlock.source": {
|
|
1343
|
+
text: "Quelle",
|
|
1344
|
+
source: "61e2a3f8"
|
|
1345
|
+
},
|
|
1346
|
+
"app.client.taskContextBlock.viewport": {
|
|
1347
|
+
text: "Ansicht",
|
|
1348
|
+
source: "60b5afe3"
|
|
1349
|
+
},
|
|
1210
1350
|
"app.client.taskDiscussion.addContextPlaceholder": {
|
|
1211
1351
|
text: "Füge Kontext für dein Team hinzu…",
|
|
1212
1352
|
source: "af3fe6ea"
|
|
@@ -1314,6 +1454,10 @@ var de$1 = {
|
|
|
1314
1454
|
text: "Die Änderung der Aufgabenverknüpfung wurde nicht bestätigt. Überprüfe die neuesten Verknüpfungen, bevor du erneut speicherst.",
|
|
1315
1455
|
source: "7616ef3c"
|
|
1316
1456
|
},
|
|
1457
|
+
"app.client.workspace.agentView": {
|
|
1458
|
+
text: "{task} · Agent",
|
|
1459
|
+
source: "d5c33796"
|
|
1460
|
+
},
|
|
1317
1461
|
"app.client.workspace.connectProjectToOpenDiscussion": {
|
|
1318
1462
|
text: "Verbinde ein Projekt, um diese Diskussion zu öffnen.",
|
|
1319
1463
|
source: "fc0ca04e"
|
|
@@ -1354,6 +1498,49 @@ var de$1 = {
|
|
|
1354
1498
|
text: "Diskussion",
|
|
1355
1499
|
source: "52a76f71"
|
|
1356
1500
|
},
|
|
1501
|
+
"app.server.commentTask.discussion": {
|
|
1502
|
+
text: "Diskussion",
|
|
1503
|
+
source: "52a76f71"
|
|
1504
|
+
},
|
|
1505
|
+
"app.server.commentTask.element": {
|
|
1506
|
+
text: "Element",
|
|
1507
|
+
source: "7d376697"
|
|
1508
|
+
},
|
|
1509
|
+
"app.server.commentTask.linkedTasks": {
|
|
1510
|
+
text: "verknüpfte Aufgaben",
|
|
1511
|
+
source: "b827f1f2"
|
|
1512
|
+
},
|
|
1513
|
+
"app.server.commentTask.replies": {
|
|
1514
|
+
text: "Antworten",
|
|
1515
|
+
source: "43e07f5f"
|
|
1516
|
+
},
|
|
1517
|
+
"app.server.commentTask.replyCount": {
|
|
1518
|
+
text: {
|
|
1519
|
+
one: "{count} Antwort",
|
|
1520
|
+
other: "{count} Antworten"
|
|
1521
|
+
},
|
|
1522
|
+
source: "2b046207"
|
|
1523
|
+
},
|
|
1524
|
+
"app.server.commentTask.source": {
|
|
1525
|
+
text: "Quelle",
|
|
1526
|
+
source: "61e2a3f8"
|
|
1527
|
+
},
|
|
1528
|
+
"app.server.commentTask.title": {
|
|
1529
|
+
text: "Kommentar zu {place}",
|
|
1530
|
+
source: "553c8e8c"
|
|
1531
|
+
},
|
|
1532
|
+
"app.server.commentTask.uncommitted": {
|
|
1533
|
+
text: "nicht committet",
|
|
1534
|
+
source: "fa6d4090"
|
|
1535
|
+
},
|
|
1536
|
+
"app.server.commentTask.where": {
|
|
1537
|
+
text: "Wo",
|
|
1538
|
+
source: "91dad0f8"
|
|
1539
|
+
},
|
|
1540
|
+
"app.server.commentTask.workingTree": {
|
|
1541
|
+
text: "Working Tree",
|
|
1542
|
+
source: "7674e9c0"
|
|
1543
|
+
},
|
|
1357
1544
|
"appShell.mainNavigation": {
|
|
1358
1545
|
text: "Hauptnavigation",
|
|
1359
1546
|
source: "c5a8374a"
|
|
@@ -4431,6 +4618,114 @@ var de$1 = {
|
|
|
4431
4618
|
text: "Tabs",
|
|
4432
4619
|
source: "8ec4824d"
|
|
4433
4620
|
},
|
|
4621
|
+
"tasks.agentBrowser.address": {
|
|
4622
|
+
text: "Vorschauadresse",
|
|
4623
|
+
source: "37f7f743"
|
|
4624
|
+
},
|
|
4625
|
+
"tasks.agentBrowser.asleep": {
|
|
4626
|
+
text: "Die Sandbox ist im Ruhezustand, um Kosten zu sparen.",
|
|
4627
|
+
source: "662bf5ad"
|
|
4628
|
+
},
|
|
4629
|
+
"tasks.agentBrowser.back": {
|
|
4630
|
+
text: "Zurück",
|
|
4631
|
+
source: "c2954bc2"
|
|
4632
|
+
},
|
|
4633
|
+
"tasks.agentBrowser.commentOnElement": {
|
|
4634
|
+
text: "Kommentiere ein Element für den Agenten",
|
|
4635
|
+
source: "0dd8635f"
|
|
4636
|
+
},
|
|
4637
|
+
"tasks.agentBrowser.forward": {
|
|
4638
|
+
text: "Vorwärts",
|
|
4639
|
+
source: "e50883ba"
|
|
4640
|
+
},
|
|
4641
|
+
"tasks.agentBrowser.newComment": {
|
|
4642
|
+
text: "Änderung für den Agenten",
|
|
4643
|
+
source: "4d74ba2c"
|
|
4644
|
+
},
|
|
4645
|
+
"tasks.agentBrowser.noPreview": {
|
|
4646
|
+
text: "Hier wird die Vorschau angezeigt, sobald die Sandbox des Laufs mit dem Dev-Server läuft.",
|
|
4647
|
+
source: "65d4e271"
|
|
4648
|
+
},
|
|
4649
|
+
"tasks.agentBrowser.openInNewWindow": {
|
|
4650
|
+
text: "Vorschau in einem neuen Fenster öffnen",
|
|
4651
|
+
source: "e0d3f63c"
|
|
4652
|
+
},
|
|
4653
|
+
"tasks.agentBrowser.preview": {
|
|
4654
|
+
text: "Live-Vorschau",
|
|
4655
|
+
source: "7e42b06f"
|
|
4656
|
+
},
|
|
4657
|
+
"tasks.agentBrowser.reload": {
|
|
4658
|
+
text: "Neu laden",
|
|
4659
|
+
source: "1a43a2ac"
|
|
4660
|
+
},
|
|
4661
|
+
"tasks.agentBrowser.status": {
|
|
4662
|
+
text: "Vorschau-Status",
|
|
4663
|
+
source: "94b339ff"
|
|
4664
|
+
},
|
|
4665
|
+
"tasks.agentBrowser.tryAgain": {
|
|
4666
|
+
text: "Erneut versuchen",
|
|
4667
|
+
source: "213e90fa"
|
|
4668
|
+
},
|
|
4669
|
+
"tasks.agentBrowser.wake": {
|
|
4670
|
+
text: "Aufwecken",
|
|
4671
|
+
source: "d0fedeca"
|
|
4672
|
+
},
|
|
4673
|
+
"tasks.agentBrowser.waking": {
|
|
4674
|
+
text: "Sandbox wird aufgeweckt…",
|
|
4675
|
+
source: "1f99ad40"
|
|
4676
|
+
},
|
|
4677
|
+
"tasks.agentTerminal.disconnected": {
|
|
4678
|
+
text: "Verbindung wird wiederhergestellt…",
|
|
4679
|
+
source: "2f039284"
|
|
4680
|
+
},
|
|
4681
|
+
"tasks.agentTerminal.sessions": {
|
|
4682
|
+
text: "Terminal-Sitzungen",
|
|
4683
|
+
source: "0257839a"
|
|
4684
|
+
},
|
|
4685
|
+
"tasks.agentTerminal.terminal": {
|
|
4686
|
+
text: "Terminal {name}",
|
|
4687
|
+
source: "99a8191c"
|
|
4688
|
+
},
|
|
4689
|
+
"tasks.agentView.agentPanes": {
|
|
4690
|
+
text: "Browser oder Terminal",
|
|
4691
|
+
source: "9c5631e4"
|
|
4692
|
+
},
|
|
4693
|
+
"tasks.agentView.browser": {
|
|
4694
|
+
text: "Browser",
|
|
4695
|
+
source: "8df5852f"
|
|
4696
|
+
},
|
|
4697
|
+
"tasks.agentView.browserAndTerminal": {
|
|
4698
|
+
text: "Browser & Terminal",
|
|
4699
|
+
source: "50b6394f"
|
|
4700
|
+
},
|
|
4701
|
+
"tasks.agentView.details": {
|
|
4702
|
+
text: "Details",
|
|
4703
|
+
source: "0ec24245"
|
|
4704
|
+
},
|
|
4705
|
+
"tasks.agentView.hideTerminal": {
|
|
4706
|
+
text: "Terminal ausblenden",
|
|
4707
|
+
source: "b355c54b"
|
|
4708
|
+
},
|
|
4709
|
+
"tasks.agentView.showTerminal": {
|
|
4710
|
+
text: "Terminal anzeigen",
|
|
4711
|
+
source: "93576794"
|
|
4712
|
+
},
|
|
4713
|
+
"tasks.agentView.terminal": {
|
|
4714
|
+
text: "Terminal",
|
|
4715
|
+
source: "93c562d1"
|
|
4716
|
+
},
|
|
4717
|
+
"tasks.agentView.terminalBelow": {
|
|
4718
|
+
text: "Terminal unter dem Browser",
|
|
4719
|
+
source: "8f840a73"
|
|
4720
|
+
},
|
|
4721
|
+
"tasks.agentView.terminalBeside": {
|
|
4722
|
+
text: "Terminal neben dem Browser",
|
|
4723
|
+
source: "9f744076"
|
|
4724
|
+
},
|
|
4725
|
+
"tasks.agentView.view": {
|
|
4726
|
+
text: "Agent-Ansicht",
|
|
4727
|
+
source: "498637bb"
|
|
4728
|
+
},
|
|
4434
4729
|
"tasks.taskActions.actionInProgress": {
|
|
4435
4730
|
text: "Eine Aufgabenaktion läuft bereits.",
|
|
4436
4731
|
source: "1ae83c01"
|
|
@@ -4617,6 +4912,14 @@ var de$1 = {
|
|
|
4617
4912
|
text: "In Bearbeitung",
|
|
4618
4913
|
source: "2948b425"
|
|
4619
4914
|
},
|
|
4915
|
+
"tasks.taskData.label.merged": {
|
|
4916
|
+
text: "Zusammengeführt",
|
|
4917
|
+
source: "28064199"
|
|
4918
|
+
},
|
|
4919
|
+
"tasks.taskData.label.needs_approval": {
|
|
4920
|
+
text: "Benötigt Freigabe",
|
|
4921
|
+
source: "ecf5c9c5"
|
|
4922
|
+
},
|
|
4620
4923
|
"tasks.taskData.label.open": {
|
|
4621
4924
|
text: "Offen",
|
|
4622
4925
|
source: "538b10e9"
|
|
@@ -4629,6 +4932,10 @@ var de$1 = {
|
|
|
4629
4932
|
text: "Bereit",
|
|
4630
4933
|
source: "0bca3294"
|
|
4631
4934
|
},
|
|
4935
|
+
"tasks.taskData.label.ready_to_merge": {
|
|
4936
|
+
text: "Bereit zum Zusammenführen",
|
|
4937
|
+
source: "b0ea5dc5"
|
|
4938
|
+
},
|
|
4632
4939
|
"tasks.taskData.label.task": {
|
|
4633
4940
|
text: "Aufgabe",
|
|
4634
4941
|
source: "76ef3d8c"
|
|
@@ -4960,6 +5267,160 @@ var de$1 = {
|
|
|
4960
5267
|
text: "Unerledigter Eintrag",
|
|
4961
5268
|
source: "eee80db8"
|
|
4962
5269
|
},
|
|
5270
|
+
"tasks.taskRunBadge.failed": {
|
|
5271
|
+
text: "Run fehlgeschlagen",
|
|
5272
|
+
source: "e2b5681f"
|
|
5273
|
+
},
|
|
5274
|
+
"tasks.taskRunBadge.merged": {
|
|
5275
|
+
text: "Zusammengeführt",
|
|
5276
|
+
source: "28064199"
|
|
5277
|
+
},
|
|
5278
|
+
"tasks.taskRunBadge.needsContext": {
|
|
5279
|
+
text: "Braucht Kontext",
|
|
5280
|
+
source: "18701779"
|
|
5281
|
+
},
|
|
5282
|
+
"tasks.taskRunBadge.pushed": {
|
|
5283
|
+
text: "Gepusht",
|
|
5284
|
+
source: "79d81944"
|
|
5285
|
+
},
|
|
5286
|
+
"tasks.taskRunBadge.pushing": {
|
|
5287
|
+
text: "Wird gepusht",
|
|
5288
|
+
source: "5dd372a3"
|
|
5289
|
+
},
|
|
5290
|
+
"tasks.taskRunBadge.review": {
|
|
5291
|
+
text: "Freigabe nötig",
|
|
5292
|
+
source: "ecf5c9c5"
|
|
5293
|
+
},
|
|
5294
|
+
"tasks.taskRunBadge.settingUp": {
|
|
5295
|
+
text: "Wird eingerichtet",
|
|
5296
|
+
source: "aee4ff74"
|
|
5297
|
+
},
|
|
5298
|
+
"tasks.taskRunBadge.working": {
|
|
5299
|
+
text: "Agent arbeitet",
|
|
5300
|
+
source: "102da6c1"
|
|
5301
|
+
},
|
|
5302
|
+
"tasks.taskRunPanel.activity": {
|
|
5303
|
+
text: "Aktivität des Agents",
|
|
5304
|
+
source: "3457114f"
|
|
5305
|
+
},
|
|
5306
|
+
"tasks.taskRunPanel.agent": {
|
|
5307
|
+
text: "Agent",
|
|
5308
|
+
source: "f5a4f646"
|
|
5309
|
+
},
|
|
5310
|
+
"tasks.taskRunPanel.answer": {
|
|
5311
|
+
text: "Dem Agenten antworten",
|
|
5312
|
+
source: "d2d2b425"
|
|
5313
|
+
},
|
|
5314
|
+
"tasks.taskRunPanel.answerPlaceholder": {
|
|
5315
|
+
text: "Was muss der Agent wissen?",
|
|
5316
|
+
source: "92f7895f"
|
|
5317
|
+
},
|
|
5318
|
+
"tasks.taskRunPanel.approve": {
|
|
5319
|
+
text: "Freigeben & pushen",
|
|
5320
|
+
source: "7110783c"
|
|
5321
|
+
},
|
|
5322
|
+
"tasks.taskRunPanel.asleep": {
|
|
5323
|
+
text: "Die Sandbox schläft, um Kosten zu sparen. Sie wacht auf, wenn du die Vorschau öffnest, Änderungen anforderst oder freigibst.",
|
|
5324
|
+
source: "110af9ad"
|
|
5325
|
+
},
|
|
5326
|
+
"tasks.taskRunPanel.cancel": {
|
|
5327
|
+
text: "Abbrechen",
|
|
5328
|
+
source: "35afca3b"
|
|
5329
|
+
},
|
|
5330
|
+
"tasks.taskRunPanel.changesPlaceholder": {
|
|
5331
|
+
text: "Was soll der Agent ändern?",
|
|
5332
|
+
source: "80c05411"
|
|
5333
|
+
},
|
|
5334
|
+
"tasks.taskRunPanel.confirmApprove": {
|
|
5335
|
+
text: "{branch} ins Repository pushen?",
|
|
5336
|
+
source: "2d1354f2"
|
|
5337
|
+
},
|
|
5338
|
+
"tasks.taskRunPanel.confirmDiscard": {
|
|
5339
|
+
text: "Diesen Run und seine Sandbox verwerfen? Es wurde nichts gepusht.",
|
|
5340
|
+
source: "6ac090ee"
|
|
5341
|
+
},
|
|
5342
|
+
"tasks.taskRunPanel.discard": {
|
|
5343
|
+
text: "Verwerfen",
|
|
5344
|
+
source: "1e706c21"
|
|
5345
|
+
},
|
|
5346
|
+
"tasks.taskRunPanel.failed": {
|
|
5347
|
+
text: "Der Run ist fehlgeschlagen.",
|
|
5348
|
+
source: "49b620f0"
|
|
5349
|
+
},
|
|
5350
|
+
"tasks.taskRunPanel.loading": {
|
|
5351
|
+
text: "Run wird geladen …",
|
|
5352
|
+
source: "331b7fa5"
|
|
5353
|
+
},
|
|
5354
|
+
"tasks.taskRunPanel.merged": {
|
|
5355
|
+
text: "{branch} ist zusammengeführt.",
|
|
5356
|
+
source: "e9b50ea9"
|
|
5357
|
+
},
|
|
5358
|
+
"tasks.taskRunPanel.minutes": {
|
|
5359
|
+
text: {
|
|
5360
|
+
one: "1 Min.",
|
|
5361
|
+
other: "{count} Min."
|
|
5362
|
+
},
|
|
5363
|
+
source: "f87c3e0b"
|
|
5364
|
+
},
|
|
5365
|
+
"tasks.taskRunPanel.needsContext": {
|
|
5366
|
+
text: "Der Agent braucht mehr Kontext, um fortzufahren.",
|
|
5367
|
+
source: "98437cea"
|
|
5368
|
+
},
|
|
5369
|
+
"tasks.taskRunPanel.preview": {
|
|
5370
|
+
text: "Live-Vorschau öffnen",
|
|
5371
|
+
source: "62e9491d"
|
|
5372
|
+
},
|
|
5373
|
+
"tasks.taskRunPanel.pushed": {
|
|
5374
|
+
text: "{branch} wurde bei {commit} gepusht.",
|
|
5375
|
+
source: "78703afe"
|
|
5376
|
+
},
|
|
5377
|
+
"tasks.taskRunPanel.pushing": {
|
|
5378
|
+
text: "{branch} wird gepusht …",
|
|
5379
|
+
source: "9b951555"
|
|
5380
|
+
},
|
|
5381
|
+
"tasks.taskRunPanel.requestChanges": {
|
|
5382
|
+
text: "Änderungen anfordern",
|
|
5383
|
+
source: "637e8883"
|
|
5384
|
+
},
|
|
5385
|
+
"tasks.taskRunPanel.retry": {
|
|
5386
|
+
text: "Erneut versuchen",
|
|
5387
|
+
source: "8036af59"
|
|
5388
|
+
},
|
|
5389
|
+
"tasks.taskRunPanel.review": {
|
|
5390
|
+
text: "Der Agent ist fertig und wartet auf deine Prüfung.",
|
|
5391
|
+
source: "7e509cde"
|
|
5392
|
+
},
|
|
5393
|
+
"tasks.taskRunPanel.seconds": {
|
|
5394
|
+
text: {
|
|
5395
|
+
one: "1 s",
|
|
5396
|
+
other: "{count} s"
|
|
5397
|
+
},
|
|
5398
|
+
source: "24364243"
|
|
5399
|
+
},
|
|
5400
|
+
"tasks.taskRunPanel.settingUp": {
|
|
5401
|
+
text: "Sandbox wird eingerichtet …",
|
|
5402
|
+
source: "be97ea8e"
|
|
5403
|
+
},
|
|
5404
|
+
"tasks.taskRunPanel.showOnCanvas": {
|
|
5405
|
+
text: "Auf der Leinwand anzeigen",
|
|
5406
|
+
source: "b076f243"
|
|
5407
|
+
},
|
|
5408
|
+
"tasks.taskRunPanel.start": {
|
|
5409
|
+
text: "Aufgabe starten",
|
|
5410
|
+
source: "dbc9a724"
|
|
5411
|
+
},
|
|
5412
|
+
"tasks.taskRunPanel.startAgain": {
|
|
5413
|
+
text: "Erneut starten",
|
|
5414
|
+
source: "9a468407"
|
|
5415
|
+
},
|
|
5416
|
+
"tasks.taskRunPanel.startHint": {
|
|
5417
|
+
text: "Ein Agent bearbeitet diese Aufgabe in einer Sandbox. Erst nach deiner Freigabe wird etwas gepusht.",
|
|
5418
|
+
source: "ccf1c6a4"
|
|
5419
|
+
},
|
|
5420
|
+
"tasks.taskRunPanel.working": {
|
|
5421
|
+
text: "Der Agent arbeitet …",
|
|
5422
|
+
source: "202318fe"
|
|
5423
|
+
},
|
|
4963
5424
|
"tasks.taskSections.latestEvents": {
|
|
4964
5425
|
text: {
|
|
4965
5426
|
one: "Das neueste Ereignis wird angezeigt.",
|
|
@@ -5077,6 +5538,10 @@ var de$1 = {
|
|
|
5077
5538
|
text: "Erstelle eine Aufgabe, um mit der Planung deiner Arbeit zu beginnen.",
|
|
5078
5539
|
source: "7c21b645"
|
|
5079
5540
|
},
|
|
5541
|
+
"tasks.taskWorkspace.fewerStatuses": {
|
|
5542
|
+
text: "Weniger Statuswerte anzeigen",
|
|
5543
|
+
source: "1de3f0ed"
|
|
5544
|
+
},
|
|
5080
5545
|
"tasks.taskWorkspace.filterEpic": {
|
|
5081
5546
|
text: "Epic filtern",
|
|
5082
5547
|
source: "19c2ed58"
|
|
@@ -5145,6 +5610,17 @@ var de$1 = {
|
|
|
5145
5610
|
text: "Noch kein {label}-Arbeitsbereich vorhanden",
|
|
5146
5611
|
source: "233c23c9"
|
|
5147
5612
|
},
|
|
5613
|
+
"tasks.taskWorkspace.otherStatuses": {
|
|
5614
|
+
text: {
|
|
5615
|
+
one: "+1 in einem anderen Status",
|
|
5616
|
+
other: "+{count} in anderen Statuswerten"
|
|
5617
|
+
},
|
|
5618
|
+
source: "6cae97c5"
|
|
5619
|
+
},
|
|
5620
|
+
"tasks.taskWorkspace.otherStatusesEmpty": {
|
|
5621
|
+
text: "Weitere Status",
|
|
5622
|
+
source: "d56d45a5"
|
|
5623
|
+
},
|
|
5148
5624
|
"tasks.taskWorkspace.priority": {
|
|
5149
5625
|
text: "Priorität",
|
|
5150
5626
|
source: "e68d9f29"
|
|
@@ -5216,6 +5692,13 @@ var de$1 = {
|
|
|
5216
5692
|
text: "Deine lokalen Aufgabenänderungen teilen",
|
|
5217
5693
|
source: "1dad116c"
|
|
5218
5694
|
},
|
|
5695
|
+
"tasks.taskWorkspace.showTasks": {
|
|
5696
|
+
text: {
|
|
5697
|
+
one: "1 Aufgabe anzeigen",
|
|
5698
|
+
other: "{count} Aufgaben anzeigen"
|
|
5699
|
+
},
|
|
5700
|
+
source: "56258faa"
|
|
5701
|
+
},
|
|
5219
5702
|
"tasks.taskWorkspace.showingCount": {
|
|
5220
5703
|
text: "Zeigt {shown} von {total}",
|
|
5221
5704
|
source: "e8675f4a"
|
|
@@ -5312,6 +5795,13 @@ var de$1 = {
|
|
|
5312
5795
|
* and the thing (`canvas.zoomIn`); `pnpm translate` keeps the other languages in step.
|
|
5313
5796
|
*/
|
|
5314
5797
|
var en = {
|
|
5798
|
+
"app.client.agentPanel.agent": "Agent",
|
|
5799
|
+
"app.client.agentPanel.changesRefused": "The agent can’t take changes now",
|
|
5800
|
+
"app.client.agentPanel.changesSent": "Sent to the agent",
|
|
5801
|
+
"app.client.agentPanel.devServer": "Dev server",
|
|
5802
|
+
"app.client.agentPanel.ended": "The session ended. It starts again when you reconnect.",
|
|
5803
|
+
"app.client.agentPanel.failed": "The factory didn’t answer.",
|
|
5804
|
+
"app.client.agentPanel.shell": "Shell",
|
|
5315
5805
|
"app.client.commentsRequest.emptyResponse": "The comments service returned an empty response.",
|
|
5316
5806
|
"app.client.commentsRequest.invalidData": "The comments service returned invalid data.",
|
|
5317
5807
|
"app.client.commentsRequest.invalidEndpoint": "Invalid comments endpoint.",
|
|
@@ -5334,6 +5824,20 @@ var en = {
|
|
|
5334
5824
|
"app.client.differenceView.slideStatus": "{kind} · change {change} of {count} · {index} / {total}",
|
|
5335
5825
|
"app.client.differenceView.slideshowLabel": "Differences slideshow",
|
|
5336
5826
|
"app.client.differenceWorker.compareError": "The pictures could not be compared.",
|
|
5827
|
+
"app.client.factoryRun.discardAndMove": "Discard run & move",
|
|
5828
|
+
"app.client.factoryRun.failed": "Bud couldn’t reach the factory.",
|
|
5829
|
+
"app.client.factoryRun.keepRun": "Keep the run",
|
|
5830
|
+
"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.",
|
|
5831
|
+
"app.client.factoryRun.moveTitle": "Discard the agent’s run?",
|
|
5832
|
+
"app.client.factoryRun.noPreview": "The run’s dev server isn’t up.",
|
|
5833
|
+
"app.client.factoryRun.previewFailed": "Couldn’t open the live preview",
|
|
5834
|
+
"app.client.factoryRun.refused": "The run didn’t change",
|
|
5835
|
+
"app.client.factoryRun.statusesMissing": "Add the factory statuses above before starting tasks.",
|
|
5836
|
+
"app.client.factorySetup.add": "Add factory statuses",
|
|
5837
|
+
"app.client.factorySetup.added": "Factory statuses added",
|
|
5838
|
+
"app.client.factorySetup.failed": "Couldn’t add the factory statuses",
|
|
5839
|
+
"app.client.factorySetup.missing": "The factory needs these statuses in your task store: {statuses}.",
|
|
5840
|
+
"app.client.factorySetup.otherKind": "Your task store has these factory statuses as another kind of status: {statuses}. Map other statuses in factory.statuses.",
|
|
5337
5841
|
"app.client.fileDrafts.deleteWithUnsavedDrafts": "Save or discard the unsaved drafts in this selection before deleting it.",
|
|
5338
5842
|
"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.",
|
|
5339
5843
|
"app.client.fileDrafts.destinationHasDraft": "A destination has an unsaved draft. Save or discard it before moving files here.",
|
|
@@ -5445,6 +5949,7 @@ var en = {
|
|
|
5445
5949
|
"app.client.projectComments.refreshBeforeTryingAgain": "The comment write could not be confirmed. Refresh before trying again.",
|
|
5446
5950
|
"app.client.projectComments.reloadDiscussionBeforeSaving": "Reload this discussion before saving.",
|
|
5447
5951
|
"app.client.projectComments.serviceReturnedAnotherDiscussion": "The comments service returned another discussion.",
|
|
5952
|
+
"app.client.projectComments.taskCreated": "Task created",
|
|
5448
5953
|
"app.client.projectComments.waitForCurrentOperation": "Wait for the current comment operation to finish.",
|
|
5449
5954
|
"app.client.projectDifferences.comparisonFailed": "The pictures could not be compared.",
|
|
5450
5955
|
"app.client.projectFileReview.commentsUnavailable": "Comments are stored by your storage adapter. Beads: run bd init in this project.",
|
|
@@ -5499,15 +6004,20 @@ var en = {
|
|
|
5499
6004
|
"app.client.projectPreviews.requestFailed": "Preview request failed ({status}).",
|
|
5500
6005
|
"app.client.projectTaskPicker.adapterUnavailable": "The task adapter is unavailable.",
|
|
5501
6006
|
"app.client.projectTaskPicker.loadFailed": "Could not load tasks.",
|
|
6007
|
+
"app.client.projectTasks.closeAgentView": "Close Agent view",
|
|
5502
6008
|
"app.client.projectTasks.couldNotLoadTask": "Could not load this task.",
|
|
5503
6009
|
"app.client.projectTasks.couldNotLoadTasks": "Could not load tasks.",
|
|
5504
6010
|
"app.client.projectTasks.differentTaskRefresh": "The task service returned a different task. Refresh and try again.",
|
|
5505
6011
|
"app.client.projectTasks.differentTaskRefreshRetry": "The task service returned a different task. Refresh before retrying.",
|
|
6012
|
+
"app.client.projectTasks.openAgentView": "Open Agent view",
|
|
5506
6013
|
"app.client.projectTasks.refreshBeforeChanges": "Refresh tasks before making changes.",
|
|
6014
|
+
"app.client.projectTasks.runKept": "The task stays where it is while its agent runs.",
|
|
6015
|
+
"app.client.projectTasks.runPushing": "The task’s branch is being pushed; move it once the push is done.",
|
|
5507
6016
|
"app.client.projectTasks.undidTaskChange": "Bud undid a task change",
|
|
5508
6017
|
"app.client.projectTasks.writeNotConfirmed": "The write was not confirmed.",
|
|
5509
6018
|
"app.client.projectThreadLinks.anotherDiscussion": "The service returned another discussion.",
|
|
5510
6019
|
"app.client.projectThreadLinks.linkTasks": "Link tasks",
|
|
6020
|
+
"app.client.projectThreadLinks.makeTask": "Make task",
|
|
5511
6021
|
"app.client.projectThreadLinks.reviewLinksBeforeSaving": "Review the latest links before saving.",
|
|
5512
6022
|
"app.client.screenHost.couldNotOpen": "Could not open {label}.",
|
|
5513
6023
|
"app.client.screenHost.didntOpen": "{label} didn't open",
|
|
@@ -5516,6 +6026,14 @@ var en = {
|
|
|
5516
6026
|
"app.client.screenHost.loading": "Loading {label}…",
|
|
5517
6027
|
"app.client.screenHost.noRouteMatches": "No screen route matches {href}.",
|
|
5518
6028
|
"app.client.screenHost.retry": "Retry",
|
|
6029
|
+
"app.client.taskContextBlock.branch": "Branch",
|
|
6030
|
+
"app.client.taskContextBlock.code": "Code",
|
|
6031
|
+
"app.client.taskContextBlock.context": "Context",
|
|
6032
|
+
"app.client.taskContextBlock.element": "Element",
|
|
6033
|
+
"app.client.taskContextBlock.page": "Page",
|
|
6034
|
+
"app.client.taskContextBlock.screenshot": "The page around the comment, with its point marked",
|
|
6035
|
+
"app.client.taskContextBlock.source": "Source",
|
|
6036
|
+
"app.client.taskContextBlock.viewport": "Viewport",
|
|
5519
6037
|
"app.client.taskDiscussion.addContextPlaceholder": "Add context for your team…",
|
|
5520
6038
|
"app.client.taskDiscussion.addTaskComment": "Add task comment",
|
|
5521
6039
|
"app.client.taskDiscussion.cancel": "Cancel",
|
|
@@ -5545,6 +6063,7 @@ var en = {
|
|
|
5545
6063
|
},
|
|
5546
6064
|
"app.client.threadLinks.taskDiscussionNeedsLinkedTask": "A task discussion needs at least one linked task.",
|
|
5547
6065
|
"app.client.threadLinks.taskLinkChangeNotConfirmed": "The task link change was not confirmed. Review the latest links before saving again.",
|
|
6066
|
+
"app.client.workspace.agentView": "{task} · Agent",
|
|
5548
6067
|
"app.client.workspace.connectProjectToOpenDiscussion": "Connect a project to open this discussion.",
|
|
5549
6068
|
"app.client.workspace.couldNotOpenDiscussion": "Could not open this discussion.",
|
|
5550
6069
|
"app.client.workspace.discussion": "Discussion",
|
|
@@ -5555,6 +6074,19 @@ var en = {
|
|
|
5555
6074
|
"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.",
|
|
5556
6075
|
"app.client.workspace.yourProjectSideBySide": "Your project, side by side.",
|
|
5557
6076
|
"app.controller.discussion": "Discussion",
|
|
6077
|
+
"app.server.commentTask.discussion": "Discussion",
|
|
6078
|
+
"app.server.commentTask.element": "Element",
|
|
6079
|
+
"app.server.commentTask.linkedTasks": "linked tasks",
|
|
6080
|
+
"app.server.commentTask.replies": "Replies",
|
|
6081
|
+
"app.server.commentTask.replyCount": {
|
|
6082
|
+
one: "{count} reply",
|
|
6083
|
+
other: "{count} replies"
|
|
6084
|
+
},
|
|
6085
|
+
"app.server.commentTask.source": "Source",
|
|
6086
|
+
"app.server.commentTask.title": "Comment on {place}",
|
|
6087
|
+
"app.server.commentTask.uncommitted": "uncommitted",
|
|
6088
|
+
"app.server.commentTask.where": "Where",
|
|
6089
|
+
"app.server.commentTask.workingTree": "working tree",
|
|
5558
6090
|
"appShell.mainNavigation": "Main navigation",
|
|
5559
6091
|
"breadcrumb.navigationLabel": "Breadcrumb",
|
|
5560
6092
|
"canvas.artboardCanvas.chooseCollectionPage": "Choose a {collection} page",
|
|
@@ -6412,6 +6944,33 @@ var en = {
|
|
|
6412
6944
|
other: "{count} tabs"
|
|
6413
6945
|
},
|
|
6414
6946
|
"shellTabBar.tabsLabel": "Tabs",
|
|
6947
|
+
"tasks.agentBrowser.address": "Preview address",
|
|
6948
|
+
"tasks.agentBrowser.asleep": "The sandbox is asleep to save costs.",
|
|
6949
|
+
"tasks.agentBrowser.back": "Back",
|
|
6950
|
+
"tasks.agentBrowser.commentOnElement": "Comment on an element for the agent",
|
|
6951
|
+
"tasks.agentBrowser.forward": "Forward",
|
|
6952
|
+
"tasks.agentBrowser.newComment": "Change for the agent",
|
|
6953
|
+
"tasks.agentBrowser.noPreview": "The preview shows here while the run’s sandbox is up with its dev server.",
|
|
6954
|
+
"tasks.agentBrowser.openInNewWindow": "Open the preview in a new window",
|
|
6955
|
+
"tasks.agentBrowser.preview": "Live preview",
|
|
6956
|
+
"tasks.agentBrowser.reload": "Reload",
|
|
6957
|
+
"tasks.agentBrowser.status": "Preview status",
|
|
6958
|
+
"tasks.agentBrowser.tryAgain": "Try again",
|
|
6959
|
+
"tasks.agentBrowser.wake": "Wake it",
|
|
6960
|
+
"tasks.agentBrowser.waking": "Waking the sandbox…",
|
|
6961
|
+
"tasks.agentTerminal.disconnected": "Reconnecting…",
|
|
6962
|
+
"tasks.agentTerminal.sessions": "Terminal sessions",
|
|
6963
|
+
"tasks.agentTerminal.terminal": "{name} terminal",
|
|
6964
|
+
"tasks.agentView.agentPanes": "Browser or terminal",
|
|
6965
|
+
"tasks.agentView.browser": "Browser",
|
|
6966
|
+
"tasks.agentView.browserAndTerminal": "Browser & terminal",
|
|
6967
|
+
"tasks.agentView.details": "Details",
|
|
6968
|
+
"tasks.agentView.hideTerminal": "Hide terminal",
|
|
6969
|
+
"tasks.agentView.showTerminal": "Show terminal",
|
|
6970
|
+
"tasks.agentView.terminal": "Terminal",
|
|
6971
|
+
"tasks.agentView.terminalBelow": "Terminal below the browser",
|
|
6972
|
+
"tasks.agentView.terminalBeside": "Terminal beside the browser",
|
|
6973
|
+
"tasks.agentView.view": "Agent view",
|
|
6415
6974
|
"tasks.taskActions.actionInProgress": "A task action is already in progress.",
|
|
6416
6975
|
"tasks.taskActions.actions": "Actions",
|
|
6417
6976
|
"tasks.taskActions.changeNotConfirmed": "The change was not confirmed. Refresh before trying again.",
|
|
@@ -6463,9 +7022,12 @@ var en = {
|
|
|
6463
7022
|
"tasks.taskData.label.feature": "Feature",
|
|
6464
7023
|
"tasks.taskData.label.hooked": "Hooked",
|
|
6465
7024
|
"tasks.taskData.label.in_progress": "In progress",
|
|
7025
|
+
"tasks.taskData.label.merged": "Merged",
|
|
7026
|
+
"tasks.taskData.label.needs_approval": "Needs approval",
|
|
6466
7027
|
"tasks.taskData.label.open": "Open",
|
|
6467
7028
|
"tasks.taskData.label.pinned": "Pinned",
|
|
6468
7029
|
"tasks.taskData.label.ready": "Ready",
|
|
7030
|
+
"tasks.taskData.label.ready_to_merge": "Ready to merge",
|
|
6469
7031
|
"tasks.taskData.label.task": "Task",
|
|
6470
7032
|
"tasks.taskData.low": "Low",
|
|
6471
7033
|
"tasks.taskData.noEpic": "No epic",
|
|
@@ -6551,6 +7113,49 @@ var en = {
|
|
|
6551
7113
|
"tasks.taskMarkdown.completedItem": "Completed item",
|
|
6552
7114
|
"tasks.taskMarkdown.image": "Image",
|
|
6553
7115
|
"tasks.taskMarkdown.incompleteItem": "Incomplete item",
|
|
7116
|
+
"tasks.taskRunBadge.failed": "Run failed",
|
|
7117
|
+
"tasks.taskRunBadge.merged": "Merged",
|
|
7118
|
+
"tasks.taskRunBadge.needsContext": "Needs context",
|
|
7119
|
+
"tasks.taskRunBadge.pushed": "Pushed",
|
|
7120
|
+
"tasks.taskRunBadge.pushing": "Pushing",
|
|
7121
|
+
"tasks.taskRunBadge.review": "Needs approval",
|
|
7122
|
+
"tasks.taskRunBadge.settingUp": "Setting up",
|
|
7123
|
+
"tasks.taskRunBadge.working": "Agent working",
|
|
7124
|
+
"tasks.taskRunPanel.activity": "Agent activity",
|
|
7125
|
+
"tasks.taskRunPanel.agent": "Agent",
|
|
7126
|
+
"tasks.taskRunPanel.answer": "Answer the agent",
|
|
7127
|
+
"tasks.taskRunPanel.answerPlaceholder": "What does the agent need to know?",
|
|
7128
|
+
"tasks.taskRunPanel.approve": "Approve & push",
|
|
7129
|
+
"tasks.taskRunPanel.asleep": "The sandbox sleeps to save cost. It wakes up when you open the preview, request changes or approve.",
|
|
7130
|
+
"tasks.taskRunPanel.cancel": "Cancel",
|
|
7131
|
+
"tasks.taskRunPanel.changesPlaceholder": "What should the agent change?",
|
|
7132
|
+
"tasks.taskRunPanel.confirmApprove": "Push {branch} to the repository?",
|
|
7133
|
+
"tasks.taskRunPanel.confirmDiscard": "Discard this run and its sandbox? Nothing was pushed.",
|
|
7134
|
+
"tasks.taskRunPanel.discard": "Discard",
|
|
7135
|
+
"tasks.taskRunPanel.failed": "The run failed.",
|
|
7136
|
+
"tasks.taskRunPanel.loading": "Loading the run…",
|
|
7137
|
+
"tasks.taskRunPanel.merged": "{branch} is merged.",
|
|
7138
|
+
"tasks.taskRunPanel.minutes": {
|
|
7139
|
+
one: "1 min",
|
|
7140
|
+
other: "{count} min"
|
|
7141
|
+
},
|
|
7142
|
+
"tasks.taskRunPanel.needsContext": "The agent needs more context to go on.",
|
|
7143
|
+
"tasks.taskRunPanel.preview": "Open live preview",
|
|
7144
|
+
"tasks.taskRunPanel.pushed": "Pushed {branch} at {commit}.",
|
|
7145
|
+
"tasks.taskRunPanel.pushing": "Pushing {branch}…",
|
|
7146
|
+
"tasks.taskRunPanel.requestChanges": "Request changes",
|
|
7147
|
+
"tasks.taskRunPanel.retry": "Retry",
|
|
7148
|
+
"tasks.taskRunPanel.review": "The agent is done and waits for your review.",
|
|
7149
|
+
"tasks.taskRunPanel.seconds": {
|
|
7150
|
+
one: "1 s",
|
|
7151
|
+
other: "{count} s"
|
|
7152
|
+
},
|
|
7153
|
+
"tasks.taskRunPanel.settingUp": "Setting up the sandbox…",
|
|
7154
|
+
"tasks.taskRunPanel.showOnCanvas": "Show on canvas",
|
|
7155
|
+
"tasks.taskRunPanel.start": "Start task",
|
|
7156
|
+
"tasks.taskRunPanel.startAgain": "Start again",
|
|
7157
|
+
"tasks.taskRunPanel.startHint": "An agent works on this task in a sandbox. Nothing is pushed until you approve.",
|
|
7158
|
+
"tasks.taskRunPanel.working": "The agent is working…",
|
|
6554
7159
|
"tasks.taskSections.latestEvents": {
|
|
6555
7160
|
one: "Showing the latest {count} event.",
|
|
6556
7161
|
other: "Showing the latest {count} events."
|
|
@@ -6587,6 +7192,7 @@ var en = {
|
|
|
6587
7192
|
"tasks.taskWorkspace.connectProject": "Connect a project",
|
|
6588
7193
|
"tasks.taskWorkspace.createTask": "Create task",
|
|
6589
7194
|
"tasks.taskWorkspace.createToPlan": "Create a task to start planning your work.",
|
|
7195
|
+
"tasks.taskWorkspace.fewerStatuses": "Show fewer statuses",
|
|
6590
7196
|
"tasks.taskWorkspace.filterEpic": "Filter epic",
|
|
6591
7197
|
"tasks.taskWorkspace.filterField": "Filter {field}",
|
|
6592
7198
|
"tasks.taskWorkspace.filters": "Filters",
|
|
@@ -6604,6 +7210,11 @@ var en = {
|
|
|
6604
7210
|
"tasks.taskWorkspace.noMatches": "No tasks match this view",
|
|
6605
7211
|
"tasks.taskWorkspace.noRemote": "No {label} remote is configured",
|
|
6606
7212
|
"tasks.taskWorkspace.noWorkspace": "No {label} workspace yet",
|
|
7213
|
+
"tasks.taskWorkspace.otherStatuses": {
|
|
7214
|
+
one: "+1 in other statuses",
|
|
7215
|
+
other: "+{count} in other statuses"
|
|
7216
|
+
},
|
|
7217
|
+
"tasks.taskWorkspace.otherStatusesEmpty": "Other statuses",
|
|
6607
7218
|
"tasks.taskWorkspace.priority": "Priority",
|
|
6608
7219
|
"tasks.taskWorkspace.projectTasks": "Project tasks",
|
|
6609
7220
|
"tasks.taskWorkspace.pullChanges": "Pull changes",
|
|
@@ -6624,6 +7235,10 @@ var en = {
|
|
|
6624
7235
|
"tasks.taskWorkspace.searchPlaceholder": "Search tasks, IDs, labels…",
|
|
6625
7236
|
"tasks.taskWorkspace.searchTasks": "Search tasks",
|
|
6626
7237
|
"tasks.taskWorkspace.shareLocalChanges": "Share your local task changes",
|
|
7238
|
+
"tasks.taskWorkspace.showTasks": {
|
|
7239
|
+
one: "Show 1 task",
|
|
7240
|
+
other: "Show {count} tasks"
|
|
7241
|
+
},
|
|
6627
7242
|
"tasks.taskWorkspace.showingCount": "Showing {shown} of {total}",
|
|
6628
7243
|
"tasks.taskWorkspace.sortTasks": "Sort tasks",
|
|
6629
7244
|
"tasks.taskWorkspace.startBud": "Start Bud from your web project to see its tasks.",
|
|
@@ -46674,6 +47289,7 @@ function taskFields(item, schema) {
|
|
|
46674
47289
|
//#endregion
|
|
46675
47290
|
//#region ../ui/src/lib/tasks/task-data.ts
|
|
46676
47291
|
var taskMatcher = createMatcher(taskRoutes.show.pattern);
|
|
47292
|
+
var agentMatcher = createMatcher(taskRoutes.agent.pattern);
|
|
46677
47293
|
var defaultTaskView = {
|
|
46678
47294
|
query: "",
|
|
46679
47295
|
fields: {},
|
|
@@ -46855,6 +47471,26 @@ function taskHref(id) {
|
|
|
46855
47471
|
}
|
|
46856
47472
|
}
|
|
46857
47473
|
/**
|
|
47474
|
+
* Builds the URL of a task's Agent view: its details beside its run's preview and terminal.
|
|
47475
|
+
* @param id - The task's id.
|
|
47476
|
+
* @returns The typed URL.
|
|
47477
|
+
*/
|
|
47478
|
+
function taskAgentHref(id) {
|
|
47479
|
+
return taskRoutes.agent.href({ id: parseWorkItemRef({ id }).id });
|
|
47480
|
+
}
|
|
47481
|
+
/**
|
|
47482
|
+
* Whether a location is a task's Agent view.
|
|
47483
|
+
* @param location - The current location.
|
|
47484
|
+
* @returns True for `/tasks/:id/agent`.
|
|
47485
|
+
*/
|
|
47486
|
+
function agentViewOpen(location) {
|
|
47487
|
+
try {
|
|
47488
|
+
return Boolean(agentMatcher.match(new URL(location, "http://bud.invalid/tasks")));
|
|
47489
|
+
} catch {
|
|
47490
|
+
return false;
|
|
47491
|
+
}
|
|
47492
|
+
}
|
|
47493
|
+
/**
|
|
46858
47494
|
* Reads the typed task place, or one older query selection on the board URL.
|
|
46859
47495
|
* @param location - The current location or legacy query link.
|
|
46860
47496
|
* @returns The validated task ID, or null for the board or an invalid link.
|
|
@@ -46863,7 +47499,7 @@ function selectedTask(location) {
|
|
|
46863
47499
|
try {
|
|
46864
47500
|
let url = new URL(location, "http://bud.invalid/tasks");
|
|
46865
47501
|
if (url.href.length > 32768) return null;
|
|
46866
|
-
let value = url.pathname === taskRoutes.index.href() && url.searchParams.getAll("issue").length === 1 ? url.searchParams.get("issue") : taskMatcher.match(url)?.params.id;
|
|
47502
|
+
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;
|
|
46867
47503
|
return value ? parseWorkItemRef({ id: value }).id : null;
|
|
46868
47504
|
} catch {
|
|
46869
47505
|
return null;
|
|
@@ -61099,6 +61735,85 @@ function TaskEditor(handle) {
|
|
|
61099
61735
|
};
|
|
61100
61736
|
}
|
|
61101
61737
|
//#endregion
|
|
61738
|
+
//#region ../ui/src/lib/tasks/task-run-badge.tsx
|
|
61739
|
+
/**
|
|
61740
|
+
* What a factory run's badge says: busy states with a spinner, then review, a question for a
|
|
61741
|
+
* person, pushed or failed.
|
|
61742
|
+
* @param run - The run's state and error.
|
|
61743
|
+
* @returns Its tone, label and whether it spins, or null for a run that leaves no badge.
|
|
61744
|
+
*/
|
|
61745
|
+
function taskRunBadge(run) {
|
|
61746
|
+
switch (run.state) {
|
|
61747
|
+
case "provisioning": return {
|
|
61748
|
+
tone: "busy",
|
|
61749
|
+
label: t$2("tasks.taskRunBadge.settingUp")
|
|
61750
|
+
};
|
|
61751
|
+
case "working":
|
|
61752
|
+
case "changes": return {
|
|
61753
|
+
tone: "busy",
|
|
61754
|
+
label: t$2("tasks.taskRunBadge.working")
|
|
61755
|
+
};
|
|
61756
|
+
case "review": return {
|
|
61757
|
+
tone: "review",
|
|
61758
|
+
label: t$2("tasks.taskRunBadge.review")
|
|
61759
|
+
};
|
|
61760
|
+
case "needs_context": return {
|
|
61761
|
+
tone: "question",
|
|
61762
|
+
label: t$2("tasks.taskRunBadge.needsContext")
|
|
61763
|
+
};
|
|
61764
|
+
case "approved":
|
|
61765
|
+
case "pushing": return {
|
|
61766
|
+
tone: "busy",
|
|
61767
|
+
label: t$2("tasks.taskRunBadge.pushing")
|
|
61768
|
+
};
|
|
61769
|
+
case "pushed": return {
|
|
61770
|
+
tone: "done",
|
|
61771
|
+
label: t$2("tasks.taskRunBadge.pushed")
|
|
61772
|
+
};
|
|
61773
|
+
case "merged": return {
|
|
61774
|
+
tone: "done",
|
|
61775
|
+
label: t$2("tasks.taskRunBadge.merged")
|
|
61776
|
+
};
|
|
61777
|
+
case "failed": return {
|
|
61778
|
+
tone: "failed",
|
|
61779
|
+
label: t$2("tasks.taskRunBadge.failed")
|
|
61780
|
+
};
|
|
61781
|
+
default: return null;
|
|
61782
|
+
}
|
|
61783
|
+
}
|
|
61784
|
+
var tones = {
|
|
61785
|
+
busy: "text-muted",
|
|
61786
|
+
review: "text-amber-600 dark:text-amber-400",
|
|
61787
|
+
question: "text-violet-600 dark:text-violet-400",
|
|
61788
|
+
done: "text-emerald-600 dark:text-emerald-400",
|
|
61789
|
+
failed: "text-red-600 dark:text-red-400"
|
|
61790
|
+
};
|
|
61791
|
+
/**
|
|
61792
|
+
* A task card's factory run badge: where the agent's run is, with a failed run's reason on hover.
|
|
61793
|
+
* @param handle - The run's summary.
|
|
61794
|
+
* @returns The badge render function; nothing for a run that leaves no badge.
|
|
61795
|
+
*/
|
|
61796
|
+
function TaskRunBadge(handle) {
|
|
61797
|
+
return () => {
|
|
61798
|
+
let badge = taskRunBadge(handle.props.run);
|
|
61799
|
+
if (!badge) return null;
|
|
61800
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
61801
|
+
class: `flex min-w-0 items-center gap-1 ${tones[badge.tone]}`,
|
|
61802
|
+
title: handle.props.run.error ?? void 0,
|
|
61803
|
+
"data-testid": "task-run-badge",
|
|
61804
|
+
"data-state": handle.props.run.state,
|
|
61805
|
+
children: [badge.tone === "busy" ? /* @__PURE__ */ jsx(Spinner, { size: 11 }) : /* @__PURE__ */ jsx(Icon$1, {
|
|
61806
|
+
name: badge.tone === "failed" ? "circle-alert" : handle.props.run.state === "merged" ? "circle-check" : badge.tone === "done" ? "push" : badge.tone === "question" ? "message" : "circle-dot",
|
|
61807
|
+
size: 12
|
|
61808
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
61809
|
+
variant: "ui-caption",
|
|
61810
|
+
class: "truncate",
|
|
61811
|
+
children: badge.label
|
|
61812
|
+
})]
|
|
61813
|
+
});
|
|
61814
|
+
};
|
|
61815
|
+
}
|
|
61816
|
+
//#endregion
|
|
61102
61817
|
//#region ../ui/src/lib/tasks/task-card.tsx
|
|
61103
61818
|
var statusTone = {
|
|
61104
61819
|
backlog: "bg-violet-400",
|
|
@@ -61138,7 +61853,8 @@ function TaskCard(handle) {
|
|
|
61138
61853
|
let issue = taskFields(item, schema);
|
|
61139
61854
|
let linked = issue.dependencyCount ?? issue.dependencies.length;
|
|
61140
61855
|
let dependents = issue.dependentCount ?? issue.dependents.length;
|
|
61141
|
-
let
|
|
61856
|
+
let run = item.run && taskRunBadge(item.run) ? item.run : null;
|
|
61857
|
+
let hasMeta = !!run || ready || blocked || !!issue.assignee || !!issue.parentId || !!linked || !!dependents || !!issue.commentCount;
|
|
61142
61858
|
let priority = /* @__PURE__ */ jsx(Text, {
|
|
61143
61859
|
variant: "ui-caption",
|
|
61144
61860
|
weight: "medium",
|
|
@@ -61147,6 +61863,7 @@ function TaskCard(handle) {
|
|
|
61147
61863
|
children: typeof issue.priority === "number" ? `P${issue.priority}` : issue.priorityLabel
|
|
61148
61864
|
});
|
|
61149
61865
|
let meta = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
61866
|
+
run ? /* @__PURE__ */ jsx(TaskRunBadge, { run }) : null,
|
|
61150
61867
|
ready ? /* @__PURE__ */ jsxs("span", {
|
|
61151
61868
|
class: "flex items-center gap-1 text-emerald-600 dark:text-emerald-400",
|
|
61152
61869
|
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
@@ -76823,6 +77540,7 @@ function TaskDetails(handle) {
|
|
|
76823
77540
|
]
|
|
76824
77541
|
}),
|
|
76825
77542
|
children: [
|
|
77543
|
+
handle.props.actions ?? null,
|
|
76826
77544
|
/* @__PURE__ */ jsx(IconButton, {
|
|
76827
77545
|
icon: "link",
|
|
76828
77546
|
label: t$2("tasks.taskDetails.copyTaskLink"),
|
|
@@ -76848,13 +77566,13 @@ function TaskDetails(handle) {
|
|
|
76848
77566
|
}),
|
|
76849
77567
|
/* @__PURE__ */ jsxs("div", {
|
|
76850
77568
|
"data-task-detail-scroll": "",
|
|
76851
|
-
class: "flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain",
|
|
77569
|
+
class: "@container/page flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain",
|
|
76852
77570
|
"aria-busy": loading ? "true" : "false",
|
|
76853
77571
|
mix: scrollFade("y"),
|
|
76854
77572
|
children: [
|
|
76855
77573
|
loading && !issue ? /* @__PURE__ */ jsx(Loader, { label: t$2("tasks.taskDetails.loadingTask") }) : null,
|
|
76856
77574
|
error ? /* @__PURE__ */ jsx("div", {
|
|
76857
|
-
class: "px-4 pb-6
|
|
77575
|
+
class: "px-4 pb-6 @min-[40rem]/page:px-6",
|
|
76858
77576
|
children: /* @__PURE__ */ jsxs(FieldCard, {
|
|
76859
77577
|
class: "max-w-2xl",
|
|
76860
77578
|
role: "alert",
|
|
@@ -76869,7 +77587,7 @@ function TaskDetails(handle) {
|
|
|
76869
77587
|
})
|
|
76870
77588
|
}) : null,
|
|
76871
77589
|
issue && item && detail ? /* @__PURE__ */ jsxs("div", {
|
|
76872
|
-
class: "mx-auto grid w-full max-w-6xl gap-8 px-4 pt-6 pb-12
|
|
77590
|
+
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",
|
|
76873
77591
|
children: [/* @__PURE__ */ jsxs("article", {
|
|
76874
77592
|
class: "flex min-w-0 flex-col gap-8",
|
|
76875
77593
|
children: [
|
|
@@ -76991,7 +77709,7 @@ function TaskDetails(handle) {
|
|
|
76991
77709
|
})
|
|
76992
77710
|
]
|
|
76993
77711
|
}), /* @__PURE__ */ jsxs("aside", {
|
|
76994
|
-
class: "flex min-w-0 flex-col gap-4
|
|
77712
|
+
class: "flex min-w-0 flex-col gap-4 @min-[56rem]/page:sticky @min-[56rem]/page:top-6 @min-[56rem]/page:self-start",
|
|
76995
77713
|
children: [/* @__PURE__ */ jsx(Properties, {
|
|
76996
77714
|
...context,
|
|
76997
77715
|
item,
|
|
@@ -77176,6 +77894,8 @@ function TaskWorkspace(handle) {
|
|
|
77176
77894
|
}
|
|
77177
77895
|
return draft;
|
|
77178
77896
|
}
|
|
77897
|
+
let expanded = /* @__PURE__ */ new Set();
|
|
77898
|
+
let allColumns = false;
|
|
77179
77899
|
async function move(id, status) {
|
|
77180
77900
|
let issue = handle.props.snapshot?.items.find((candidate) => candidate.id === id);
|
|
77181
77901
|
if (!issue || !handle.props.operations || actionBusy || !handle.props.schema || taskRole(issue, handle.props.schema, "status") === status) return;
|
|
@@ -77268,7 +77988,12 @@ function TaskWorkspace(handle) {
|
|
|
77268
77988
|
restore = null;
|
|
77269
77989
|
handle.queueTask(() => scroll?.scrollTo(position));
|
|
77270
77990
|
}
|
|
77271
|
-
let
|
|
77991
|
+
let allStatuses = schema ? taskStatuses(schema, snapshot?.items) : [];
|
|
77992
|
+
let columns = handle.props.columns;
|
|
77993
|
+
let arranged = columns ? [...columns.shown, ...columns.collapsed ?? []].flatMap((value) => allStatuses.filter((status) => status.value === value)) : allStatuses;
|
|
77994
|
+
let statuses = columns && !allColumns && !view.status ? arranged : allStatuses;
|
|
77995
|
+
let hiddenStatuses = allStatuses.filter((status) => !arranged.includes(status));
|
|
77996
|
+
let hiddenTasks = (snapshot?.items ?? []).filter((item) => hiddenStatuses.some((status) => status.value === taskRole(item, schema, "status"))).length;
|
|
77272
77997
|
let ready = new Set(snapshot?.items.filter((item) => item.ready).map((item) => item.id) ?? []);
|
|
77273
77998
|
let activeFilters = [
|
|
77274
77999
|
view.status,
|
|
@@ -77758,12 +78483,13 @@ function TaskWorkspace(handle) {
|
|
|
77758
78483
|
class: "flex w-full min-w-0 flex-col gap-px p-1",
|
|
77759
78484
|
children: group.issues.map(renderCard)
|
|
77760
78485
|
})
|
|
77761
|
-
})] }) : /* @__PURE__ */
|
|
78486
|
+
})] }) : /* @__PURE__ */ jsxs("div", {
|
|
77762
78487
|
class: "flex items-start gap-3",
|
|
77763
|
-
children: statuses.filter((status) => !view.status || view.status === status.value).map((status) => {
|
|
78488
|
+
children: [statuses.filter((status) => !view.status || view.status === status.value).map((status) => {
|
|
77764
78489
|
let issues = group.issues.filter((issue) => taskRole(issue, schema, "status") === status.value);
|
|
78490
|
+
let collapsedColumn = !!columns?.collapsed?.includes(status.value) && !expanded.has(status.value) && issues.length > 0;
|
|
77765
78491
|
return /* @__PURE__ */ jsx("section", {
|
|
77766
|
-
class: `flex flex-col gap-2 ${issues.length ? "min-w-60 max-w-sm flex-1 basis-0" : "w-32 shrink-0"}`,
|
|
78492
|
+
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"}`,
|
|
77767
78493
|
"aria-label": t$2("tasks.taskWorkspace.statusColumn", { status: status.label }),
|
|
77768
78494
|
mix: [on("dragover", (event) => {
|
|
77769
78495
|
if (event.dataTransfer?.types.includes("application/x-bud-task") && !actionBusy && status.value) {
|
|
@@ -77782,10 +78508,29 @@ function TaskWorkspace(handle) {
|
|
|
77782
78508
|
item: null,
|
|
77783
78509
|
status,
|
|
77784
78510
|
items: issues,
|
|
77785
|
-
children:
|
|
78511
|
+
children: collapsedColumn ? /* @__PURE__ */ jsx(Button, {
|
|
78512
|
+
variant: "ghost",
|
|
78513
|
+
size: "small",
|
|
78514
|
+
class: "justify-start",
|
|
78515
|
+
mix: on("click", () => {
|
|
78516
|
+
expanded.add(status.value);
|
|
78517
|
+
handle.update();
|
|
78518
|
+
}),
|
|
78519
|
+
children: t$2("tasks.taskWorkspace.showTasks", { count: issues.length })
|
|
78520
|
+
}) : issues.map(renderCard)
|
|
77786
78521
|
})
|
|
77787
78522
|
}, status.value);
|
|
77788
|
-
})
|
|
78523
|
+
}), columns && !view.status && (hiddenStatuses.length || allColumns) ? /* @__PURE__ */ jsx(Button, {
|
|
78524
|
+
variant: "ghost",
|
|
78525
|
+
size: "small",
|
|
78526
|
+
class: "mt-1 shrink-0",
|
|
78527
|
+
"data-testid": "board-other-statuses",
|
|
78528
|
+
mix: on("click", () => {
|
|
78529
|
+
allColumns = !allColumns;
|
|
78530
|
+
handle.update();
|
|
78531
|
+
}),
|
|
78532
|
+
children: allColumns ? t$2("tasks.taskWorkspace.fewerStatuses") : hiddenTasks ? t$2("tasks.taskWorkspace.otherStatuses", { count: hiddenTasks }) : t$2("tasks.taskWorkspace.otherStatusesEmpty")
|
|
78533
|
+
}) : null]
|
|
77789
78534
|
})]
|
|
77790
78535
|
}, group.id)) : null
|
|
77791
78536
|
]
|
|
@@ -77817,7 +78562,7 @@ function TaskWorkspace(handle) {
|
|
|
77817
78562
|
}
|
|
77818
78563
|
})
|
|
77819
78564
|
}) : null,
|
|
77820
|
-
selectedId && schema ? /* @__PURE__ */ createElement(Page, {
|
|
78565
|
+
selectedId && schema ? (handle.props.pageFrame ?? ((page) => page))(/* @__PURE__ */ createElement(Page, {
|
|
77821
78566
|
...context(detail?.item.id === selectedId ? detail.item : null),
|
|
77822
78567
|
item: detail?.item.id === selectedId ? detail.item : null,
|
|
77823
78568
|
design: handle.props.design,
|
|
@@ -77834,10 +78579,876 @@ function TaskWorkspace(handle) {
|
|
|
77834
78579
|
loading: detailLoading,
|
|
77835
78580
|
error: detailError,
|
|
77836
78581
|
onSelect: select,
|
|
77837
|
-
onReload: onReloadDetail
|
|
78582
|
+
onReload: onReloadDetail,
|
|
78583
|
+
actions: handle.props.pageActions
|
|
78584
|
+
})) : null
|
|
78585
|
+
] })
|
|
78586
|
+
});
|
|
78587
|
+
};
|
|
78588
|
+
}
|
|
78589
|
+
//#endregion
|
|
78590
|
+
//#region ../ui/src/lib/tasks/agent-terminal.tsx
|
|
78591
|
+
function Session(handle) {
|
|
78592
|
+
let state = "connecting";
|
|
78593
|
+
let term = null;
|
|
78594
|
+
let mount = ref((node, signal) => {
|
|
78595
|
+
(async () => {
|
|
78596
|
+
let { WTerm } = await import("./dist-BCSTeNf4.js");
|
|
78597
|
+
if (signal.aborted) return;
|
|
78598
|
+
let connection = null;
|
|
78599
|
+
let size = {
|
|
78600
|
+
cols: 0,
|
|
78601
|
+
rows: 0
|
|
78602
|
+
};
|
|
78603
|
+
let resizing;
|
|
78604
|
+
let pending = [];
|
|
78605
|
+
let instance = new WTerm(node, {
|
|
78606
|
+
cursorBlink: true,
|
|
78607
|
+
renderingPaused: !handle.props.active,
|
|
78608
|
+
onData: (data) => connection ? connection.input(data) : pending.push(data),
|
|
78609
|
+
onResize: (cols, rows) => {
|
|
78610
|
+
clearTimeout(resizing);
|
|
78611
|
+
resizing = setTimeout(() => {
|
|
78612
|
+
if (cols === size.cols && rows === size.rows) return;
|
|
78613
|
+
size = {
|
|
78614
|
+
cols,
|
|
78615
|
+
rows
|
|
78616
|
+
};
|
|
78617
|
+
connection?.resize(cols, rows);
|
|
78618
|
+
}, 150);
|
|
78619
|
+
}
|
|
78620
|
+
});
|
|
78621
|
+
await instance.init();
|
|
78622
|
+
if (signal.aborted) return instance.destroy();
|
|
78623
|
+
requestAnimationFrame(() => {
|
|
78624
|
+
if (!signal.aborted) instance.fit();
|
|
78625
|
+
});
|
|
78626
|
+
document.fonts?.ready.then(() => {
|
|
78627
|
+
if (!signal.aborted) instance.fit();
|
|
78628
|
+
});
|
|
78629
|
+
term = instance;
|
|
78630
|
+
signal.addEventListener("abort", () => instance.destroy(), { once: true });
|
|
78631
|
+
size = {
|
|
78632
|
+
cols: instance.cols,
|
|
78633
|
+
rows: instance.rows
|
|
78634
|
+
};
|
|
78635
|
+
connection = handle.props.connect(handle.props.tab.id, size, {
|
|
78636
|
+
write: (bytes) => instance.write(bytes),
|
|
78637
|
+
state: (next) => {
|
|
78638
|
+
state = next;
|
|
78639
|
+
if (!signal.aborted) handle.update();
|
|
78640
|
+
}
|
|
78641
|
+
}, signal);
|
|
78642
|
+
for (let data of pending.splice(0)) connection.input(data);
|
|
78643
|
+
if (handle.props.active) instance.focus();
|
|
78644
|
+
})();
|
|
78645
|
+
});
|
|
78646
|
+
let shown = false;
|
|
78647
|
+
return () => {
|
|
78648
|
+
let { active, tab } = handle.props;
|
|
78649
|
+
if (active !== shown) {
|
|
78650
|
+
shown = active;
|
|
78651
|
+
term?.setRenderingPaused(!active);
|
|
78652
|
+
if (active) handle.queueTask(() => {
|
|
78653
|
+
term?.fit();
|
|
78654
|
+
term?.focus();
|
|
78655
|
+
});
|
|
78656
|
+
}
|
|
78657
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
78658
|
+
class: `absolute inset-0 ${active ? "" : "invisible"}`,
|
|
78659
|
+
"aria-hidden": active ? void 0 : "true",
|
|
78660
|
+
inert: active ? void 0 : true,
|
|
78661
|
+
"data-terminal-tab": tab.id,
|
|
78662
|
+
"data-terminal-state": state,
|
|
78663
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
78664
|
+
class: "bud-terminal absolute inset-0 overflow-hidden",
|
|
78665
|
+
"aria-label": t$2("tasks.agentTerminal.terminal", { name: tab.label }),
|
|
78666
|
+
mix: mount
|
|
78667
|
+
}), state === "closed" ? /* @__PURE__ */ jsx(Text, {
|
|
78668
|
+
variant: "ui-caption",
|
|
78669
|
+
tone: "muted",
|
|
78670
|
+
class: "bud-overlay pointer-events-none absolute right-3 bottom-3 rounded-lg px-2.5 py-1",
|
|
78671
|
+
children: t$2("tasks.agentTerminal.disconnected")
|
|
78672
|
+
}) : null]
|
|
78673
|
+
});
|
|
78674
|
+
};
|
|
78675
|
+
}
|
|
78676
|
+
/**
|
|
78677
|
+
* The terminal in Agent view, on @wterm/dom: one session per tab, kept while another tab shows so
|
|
78678
|
+
* its output stays, connected through the app's broker.
|
|
78679
|
+
* @param handle - The tabs, the shown one and how to connect a tab.
|
|
78680
|
+
* @returns The terminal's render function.
|
|
78681
|
+
*/
|
|
78682
|
+
function AgentTerminal(handle) {
|
|
78683
|
+
let opened = /* @__PURE__ */ new Set();
|
|
78684
|
+
return () => {
|
|
78685
|
+
let { tabs, active, connect } = handle.props;
|
|
78686
|
+
opened.add(active);
|
|
78687
|
+
return /* @__PURE__ */ jsx("div", {
|
|
78688
|
+
class: "absolute inset-0",
|
|
78689
|
+
"data-testid": "agent-terminal",
|
|
78690
|
+
children: tabs.filter((tab) => opened.has(tab.id)).map((tab) => /* @__PURE__ */ jsx(Session, {
|
|
78691
|
+
tab,
|
|
78692
|
+
connect,
|
|
78693
|
+
active: tab.id === active
|
|
78694
|
+
}, tab.id))
|
|
78695
|
+
});
|
|
78696
|
+
};
|
|
78697
|
+
}
|
|
78698
|
+
//#endregion
|
|
78699
|
+
//#region ../ui/src/lib/tasks/agent-view.tsx
|
|
78700
|
+
var LAYOUT = "bud:agent-view";
|
|
78701
|
+
/**
|
|
78702
|
+
* Reads the person's Agent view layout.
|
|
78703
|
+
* @param value - The stored preference.
|
|
78704
|
+
* @returns The layout, with the terminal shown beside the browser by default.
|
|
78705
|
+
*/
|
|
78706
|
+
function agentLayout(value) {
|
|
78707
|
+
let input = value ?? {};
|
|
78708
|
+
return {
|
|
78709
|
+
terminal: input.terminal !== false,
|
|
78710
|
+
placement: input.placement === "below" ? "below" : "right"
|
|
78711
|
+
};
|
|
78712
|
+
}
|
|
78713
|
+
function Segments(handle) {
|
|
78714
|
+
return () => /* @__PURE__ */ jsx("div", {
|
|
78715
|
+
role: "group",
|
|
78716
|
+
"aria-label": handle.props.label,
|
|
78717
|
+
class: `bud-segmented ${handle.props.class ?? ""}`,
|
|
78718
|
+
children: handle.props.options.map((option) => /* @__PURE__ */ jsxs("button", {
|
|
78719
|
+
type: "button",
|
|
78720
|
+
"aria-pressed": handle.props.value === option.id ? "true" : "false",
|
|
78721
|
+
"data-agent-pane": option.id,
|
|
78722
|
+
mix: on("click", () => handle.props.onChange(option.id)),
|
|
78723
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
78724
|
+
name: option.icon,
|
|
78725
|
+
size: 15
|
|
78726
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
78727
|
+
variant: "ui",
|
|
78728
|
+
class: "@max-[24rem]/agent:sr-only",
|
|
78729
|
+
children: option.label
|
|
78730
|
+
})]
|
|
78731
|
+
}, option.id))
|
|
78732
|
+
});
|
|
78733
|
+
}
|
|
78734
|
+
/**
|
|
78735
|
+
* Agent view: a task's details beside the browser on its run's preview and the terminal. It lays
|
|
78736
|
+
* itself out by the room it has (container queries), so it works in tabs and side panels too:
|
|
78737
|
+
* with little room a switch at the top picks details or the agent's panes, and in a narrow agent
|
|
78738
|
+
* column a switch in the browser's toolbar picks the browser or the terminal, unless the terminal
|
|
78739
|
+
* sits below the browser. The layout is remembered per person.
|
|
78740
|
+
* @param handle - The details, the browser and the terminal.
|
|
78741
|
+
* @returns The view's render function.
|
|
78742
|
+
*/
|
|
78743
|
+
function AgentView(handle) {
|
|
78744
|
+
let layout = agentLayout(readPreference(LAYOUT));
|
|
78745
|
+
let panes = {
|
|
78746
|
+
main: "agent",
|
|
78747
|
+
agent: "browser"
|
|
78748
|
+
};
|
|
78749
|
+
let setLayout = (next) => {
|
|
78750
|
+
layout = {
|
|
78751
|
+
...layout,
|
|
78752
|
+
...next
|
|
78753
|
+
};
|
|
78754
|
+
writePreference(LAYOUT, layout);
|
|
78755
|
+
if (next.terminal) panes = {
|
|
78756
|
+
...panes,
|
|
78757
|
+
agent: "terminal"
|
|
78758
|
+
};
|
|
78759
|
+
if (next.terminal === false) panes = {
|
|
78760
|
+
...panes,
|
|
78761
|
+
agent: "browser"
|
|
78762
|
+
};
|
|
78763
|
+
handle.update();
|
|
78764
|
+
};
|
|
78765
|
+
let setPanes = (next) => {
|
|
78766
|
+
panes = {
|
|
78767
|
+
...panes,
|
|
78768
|
+
...next
|
|
78769
|
+
};
|
|
78770
|
+
handle.update();
|
|
78771
|
+
};
|
|
78772
|
+
return () => {
|
|
78773
|
+
let { details, browser, terminal } = handle.props;
|
|
78774
|
+
let shown = Boolean(terminal) && layout.terminal;
|
|
78775
|
+
let beside = shown && layout.placement === "right";
|
|
78776
|
+
let below = shown && layout.placement === "below";
|
|
78777
|
+
let switcher = beside ? /* @__PURE__ */ jsx(Segments, {
|
|
78778
|
+
label: t$2("tasks.agentView.agentPanes"),
|
|
78779
|
+
class: "@min-[52rem]/panes:hidden",
|
|
78780
|
+
value: panes.agent,
|
|
78781
|
+
options: [{
|
|
78782
|
+
id: "browser",
|
|
78783
|
+
label: t$2("tasks.agentView.browser"),
|
|
78784
|
+
icon: "browser"
|
|
78785
|
+
}, {
|
|
78786
|
+
id: "terminal",
|
|
78787
|
+
label: t$2("tasks.agentView.terminal"),
|
|
78788
|
+
icon: "terminal"
|
|
78789
|
+
}],
|
|
78790
|
+
onChange: (id) => setPanes({ agent: id })
|
|
78791
|
+
}) : null;
|
|
78792
|
+
let controls = terminal ? /* @__PURE__ */ jsxs(Fragment, { children: [shown ? /* @__PURE__ */ jsx(IconButton, {
|
|
78793
|
+
tooltip: true,
|
|
78794
|
+
class: "@max-[34rem]/panes:hidden",
|
|
78795
|
+
icon: layout.placement === "right" ? "panel-bottom" : "panel-right",
|
|
78796
|
+
label: layout.placement === "right" ? t$2("tasks.agentView.terminalBelow") : t$2("tasks.agentView.terminalBeside"),
|
|
78797
|
+
"data-testid": "agent-terminal-placement",
|
|
78798
|
+
mix: on("click", () => setLayout({ placement: layout.placement === "right" ? "below" : "right" }))
|
|
78799
|
+
}) : null, /* @__PURE__ */ jsx(IconButton, {
|
|
78800
|
+
tooltip: true,
|
|
78801
|
+
icon: "terminal",
|
|
78802
|
+
active: shown,
|
|
78803
|
+
label: shown ? t$2("tasks.agentView.hideTerminal") : t$2("tasks.agentView.showTerminal"),
|
|
78804
|
+
"data-testid": "agent-terminal-toggle",
|
|
78805
|
+
mix: on("click", () => setLayout({ terminal: !shown }))
|
|
78806
|
+
})] }) : null;
|
|
78807
|
+
let hideBrowser = beside && panes.agent === "terminal" ? "@max-[52rem]/panes:hidden" : "";
|
|
78808
|
+
let hideTerminal = beside && panes.agent === "browser" ? "@max-[52rem]/panes:hidden" : "";
|
|
78809
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
78810
|
+
class: "@container/agent flex h-full min-h-0 flex-col",
|
|
78811
|
+
"data-testid": "agent-view",
|
|
78812
|
+
"data-terminal": shown ? layout.placement : "hidden",
|
|
78813
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
78814
|
+
class: "flex h-12 shrink-0 items-center gap-2 border-b border-line px-2 @min-[48rem]/agent:hidden",
|
|
78815
|
+
children: /* @__PURE__ */ jsx(Segments, {
|
|
78816
|
+
label: t$2("tasks.agentView.view"),
|
|
78817
|
+
value: panes.main,
|
|
78818
|
+
options: [{
|
|
78819
|
+
id: "details",
|
|
78820
|
+
label: t$2("tasks.agentView.details"),
|
|
78821
|
+
icon: "text"
|
|
78822
|
+
}, {
|
|
78823
|
+
id: "agent",
|
|
78824
|
+
label: terminal ? t$2("tasks.agentView.browserAndTerminal") : t$2("tasks.agentView.browser"),
|
|
78825
|
+
icon: "browser"
|
|
78826
|
+
}],
|
|
78827
|
+
onChange: (id) => setPanes({ main: id })
|
|
78828
|
+
})
|
|
78829
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
78830
|
+
class: "flex min-h-0 flex-1",
|
|
78831
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
78832
|
+
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" : ""}`,
|
|
78833
|
+
"data-agent-region": "details",
|
|
78834
|
+
children: details
|
|
78835
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
78836
|
+
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" : ""}`,
|
|
78837
|
+
"data-agent-region": "agent",
|
|
78838
|
+
children: [/* @__PURE__ */ jsxs("section", {
|
|
78839
|
+
"aria-label": t$2("tasks.agentView.browser"),
|
|
78840
|
+
class: `flex min-h-0 min-w-0 flex-col ${below ? "flex-[3]" : "flex-1"} ${hideBrowser}`,
|
|
78841
|
+
"data-agent-region": "browser",
|
|
78842
|
+
children: [
|
|
78843
|
+
/* @__PURE__ */ jsxs("div", {
|
|
78844
|
+
class: "bud-toolbar flex h-12 shrink-0 items-center gap-1.5 border-b border-line px-2",
|
|
78845
|
+
children: [
|
|
78846
|
+
switcher,
|
|
78847
|
+
/* @__PURE__ */ jsx("div", {
|
|
78848
|
+
class: "flex min-w-0 flex-1 items-center gap-1.5",
|
|
78849
|
+
children: browser.toolbar
|
|
78850
|
+
}),
|
|
78851
|
+
browser.actions,
|
|
78852
|
+
controls
|
|
78853
|
+
]
|
|
78854
|
+
}),
|
|
78855
|
+
/* @__PURE__ */ jsx("div", {
|
|
78856
|
+
class: "relative min-h-0 flex-1",
|
|
78857
|
+
children: browser.content
|
|
78858
|
+
}),
|
|
78859
|
+
browser.status
|
|
78860
|
+
]
|
|
78861
|
+
}), shown && terminal ? /* @__PURE__ */ jsxs("section", {
|
|
78862
|
+
"aria-label": t$2("tasks.agentView.terminal"),
|
|
78863
|
+
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}`,
|
|
78864
|
+
"data-agent-region": "terminal",
|
|
78865
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
78866
|
+
class: "bud-toolbar flex h-12 shrink-0 items-center gap-1.5 border-b border-line px-2",
|
|
78867
|
+
children: [
|
|
78868
|
+
beside ? /* @__PURE__ */ jsx("div", {
|
|
78869
|
+
class: "@min-[52rem]/panes:hidden",
|
|
78870
|
+
children: switcher
|
|
78871
|
+
}) : null,
|
|
78872
|
+
/* @__PURE__ */ jsx("div", {
|
|
78873
|
+
class: "flex min-w-0 flex-1 items-center overflow-x-auto [scrollbar-width:none]",
|
|
78874
|
+
children: terminal.tabs
|
|
78875
|
+
}),
|
|
78876
|
+
beside ? /* @__PURE__ */ jsx("div", {
|
|
78877
|
+
class: "flex items-center gap-1.5 @min-[52rem]/panes:hidden",
|
|
78878
|
+
children: controls
|
|
78879
|
+
}) : null
|
|
78880
|
+
]
|
|
78881
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
78882
|
+
class: "relative min-h-0 flex-1",
|
|
78883
|
+
children: terminal.content
|
|
78884
|
+
})]
|
|
78885
|
+
}) : null]
|
|
78886
|
+
})]
|
|
78887
|
+
})]
|
|
78888
|
+
});
|
|
78889
|
+
};
|
|
78890
|
+
}
|
|
78891
|
+
//#endregion
|
|
78892
|
+
//#region ../ui/src/lib/tasks/agent-browser.tsx
|
|
78893
|
+
/**
|
|
78894
|
+
* Agent view's browser on the run's live preview: a sandboxed frame on the preview's own origin,
|
|
78895
|
+
* never Bud's, followed through the dev bridge the project's pages carry, with back, forward,
|
|
78896
|
+
* reload and the address, and comments on picked elements that go to the agent as changes.
|
|
78897
|
+
* @param handle - The details, the preview, the terminal and their actions.
|
|
78898
|
+
* @returns The view's render function.
|
|
78899
|
+
*/
|
|
78900
|
+
function AgentBrowser(handle) {
|
|
78901
|
+
let frame;
|
|
78902
|
+
let path = "/";
|
|
78903
|
+
let title = "";
|
|
78904
|
+
let src = null;
|
|
78905
|
+
let load = 0;
|
|
78906
|
+
let picking = null;
|
|
78907
|
+
let draft = null;
|
|
78908
|
+
let busy = false;
|
|
78909
|
+
let tab = null;
|
|
78910
|
+
let origin = () => {
|
|
78911
|
+
let preview = handle.props.preview;
|
|
78912
|
+
return preview.state === "ready" ? new URL(preview.url).origin : null;
|
|
78913
|
+
};
|
|
78914
|
+
let post = (type, data = {}) => {
|
|
78915
|
+
let target = origin();
|
|
78916
|
+
if (target) frame?.contentWindow?.postMessage({
|
|
78917
|
+
...data,
|
|
78918
|
+
type
|
|
78919
|
+
}, target);
|
|
78920
|
+
};
|
|
78921
|
+
let update = () => {
|
|
78922
|
+
if (!handle.signal.aborted) handle.update();
|
|
78923
|
+
};
|
|
78924
|
+
let frameRef = ref((node, signal) => {
|
|
78925
|
+
frame = node;
|
|
78926
|
+
signal.addEventListener("abort", () => frame = void 0, { once: true });
|
|
78927
|
+
});
|
|
78928
|
+
let keepInside = ref((card, signal) => {
|
|
78929
|
+
let position = () => {
|
|
78930
|
+
if (!frame) return;
|
|
78931
|
+
card.style.setProperty("--pages-card-x", "0px");
|
|
78932
|
+
card.style.setProperty("--pages-card-y", "0px");
|
|
78933
|
+
let offset = canvasPopoverOffset(card.getBoundingClientRect(), frame.getBoundingClientRect());
|
|
78934
|
+
card.style.setProperty("--pages-card-x", `${offset.x}px`);
|
|
78935
|
+
card.style.setProperty("--pages-card-y", `${offset.y}px`);
|
|
78936
|
+
};
|
|
78937
|
+
let observer = new ResizeObserver(position);
|
|
78938
|
+
observer.observe(card);
|
|
78939
|
+
position();
|
|
78940
|
+
signal.addEventListener("abort", () => observer.disconnect(), { once: true });
|
|
78941
|
+
});
|
|
78942
|
+
let listen = ref((_node, signal) => {
|
|
78943
|
+
window.addEventListener("message", (event) => {
|
|
78944
|
+
if (!frame || event.source !== frame.contentWindow || event.origin !== origin()) return;
|
|
78945
|
+
let data = event.data;
|
|
78946
|
+
if (data?.type === "bud:location" && typeof data.path === "string") {
|
|
78947
|
+
path = data.path.startsWith("/") ? data.path.slice(0, 4096) : path;
|
|
78948
|
+
title = typeof data.title === "string" ? data.title.slice(0, 200) : "";
|
|
78949
|
+
update();
|
|
78950
|
+
} else if (data?.type === "bud:picked" && picking && data.id === picking) {
|
|
78951
|
+
picking = null;
|
|
78952
|
+
draft = readPagePick(data);
|
|
78953
|
+
update();
|
|
78954
|
+
}
|
|
78955
|
+
}, { signal });
|
|
78956
|
+
});
|
|
78957
|
+
let navigate = (to) => {
|
|
78958
|
+
let preview = handle.props.preview;
|
|
78959
|
+
if (preview.state !== "ready") return;
|
|
78960
|
+
let url = new URL(preview.url);
|
|
78961
|
+
let target = new URL(to, url);
|
|
78962
|
+
if (target.origin !== url.origin) return;
|
|
78963
|
+
for (let [key, value] of url.searchParams) if (!target.searchParams.has(key)) target.searchParams.set(key, value);
|
|
78964
|
+
src = target.href;
|
|
78965
|
+
load++;
|
|
78966
|
+
update();
|
|
78967
|
+
};
|
|
78968
|
+
return () => {
|
|
78969
|
+
let { preview, details, terminal, onComment } = handle.props;
|
|
78970
|
+
let ready = preview.state === "ready" ? preview : null;
|
|
78971
|
+
if (ready && src === null) src = ready.url;
|
|
78972
|
+
if (!ready) {
|
|
78973
|
+
src = null;
|
|
78974
|
+
picking = null;
|
|
78975
|
+
}
|
|
78976
|
+
let host = ready ? new URL(ready.url).host : "";
|
|
78977
|
+
let shownTab = terminal?.tabs.find((entry) => entry.id === tab)?.id ?? terminal?.tabs[0]?.id;
|
|
78978
|
+
let toolbar = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
78979
|
+
class: "flex shrink-0 items-center gap-0.5",
|
|
78980
|
+
children: [
|
|
78981
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
78982
|
+
tooltip: true,
|
|
78983
|
+
class: "@max-[34rem]/panes:hidden",
|
|
78984
|
+
icon: "arrow-left",
|
|
78985
|
+
label: t$2("tasks.agentBrowser.back"),
|
|
78986
|
+
disabled: !ready,
|
|
78987
|
+
mix: on("click", () => post("bud:back"))
|
|
78988
|
+
}),
|
|
78989
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
78990
|
+
tooltip: true,
|
|
78991
|
+
class: "@max-[34rem]/panes:hidden",
|
|
78992
|
+
icon: "arrow-right",
|
|
78993
|
+
label: t$2("tasks.agentBrowser.forward"),
|
|
78994
|
+
disabled: !ready,
|
|
78995
|
+
mix: on("click", () => post("bud:forward"))
|
|
78996
|
+
}),
|
|
78997
|
+
/* @__PURE__ */ jsx(IconButton, {
|
|
78998
|
+
tooltip: true,
|
|
78999
|
+
icon: "sync",
|
|
79000
|
+
label: t$2("tasks.agentBrowser.reload"),
|
|
79001
|
+
disabled: !ready,
|
|
79002
|
+
mix: on("click", () => navigate(path))
|
|
79003
|
+
})
|
|
79004
|
+
]
|
|
79005
|
+
}), /* @__PURE__ */ jsx("form", {
|
|
79006
|
+
class: "flex min-w-0 flex-1 @max-[34rem]/panes:hidden",
|
|
79007
|
+
mix: on("submit", (event) => {
|
|
79008
|
+
event.preventDefault();
|
|
79009
|
+
let input = event.currentTarget.elements.namedItem("address");
|
|
79010
|
+
navigate(input.value.trim() || "/");
|
|
79011
|
+
}),
|
|
79012
|
+
children: /* @__PURE__ */ jsxs("label", {
|
|
79013
|
+
class: "bud-control bud-field flex h-control min-w-0 flex-1 items-center gap-2 rounded-lg px-2.5 text-muted",
|
|
79014
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
79015
|
+
name: "globe",
|
|
79016
|
+
size: 14,
|
|
79017
|
+
class: "shrink-0"
|
|
79018
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
79019
|
+
name: "address",
|
|
79020
|
+
"aria-label": t$2("tasks.agentBrowser.address"),
|
|
79021
|
+
class: "h-full min-w-0 flex-1 bg-transparent pb-0.5 text-sm/5 text-ink outline-none",
|
|
79022
|
+
spellcheck: false,
|
|
79023
|
+
autocomplete: "off",
|
|
79024
|
+
disabled: !ready,
|
|
79025
|
+
value: ready ? path : ""
|
|
79026
|
+
})]
|
|
79027
|
+
})
|
|
79028
|
+
})] });
|
|
79029
|
+
let actions = /* @__PURE__ */ jsxs(Fragment, { children: [onComment ? /* @__PURE__ */ jsx(IconButton, {
|
|
79030
|
+
tooltip: true,
|
|
79031
|
+
icon: "crosshair",
|
|
79032
|
+
label: t$2("tasks.agentBrowser.commentOnElement"),
|
|
79033
|
+
active: Boolean(picking),
|
|
79034
|
+
disabled: !ready,
|
|
79035
|
+
"data-testid": "agent-browser-pick",
|
|
79036
|
+
mix: on("click", () => {
|
|
79037
|
+
if (picking) {
|
|
79038
|
+
post("bud:pick-cancel");
|
|
79039
|
+
picking = null;
|
|
79040
|
+
} else {
|
|
79041
|
+
draft = null;
|
|
79042
|
+
picking = crypto.randomUUID();
|
|
79043
|
+
post("bud:pick", { id: picking });
|
|
79044
|
+
}
|
|
79045
|
+
update();
|
|
79046
|
+
})
|
|
79047
|
+
}) : null, /* @__PURE__ */ jsx(IconButton, {
|
|
79048
|
+
tooltip: true,
|
|
79049
|
+
class: "@max-[34rem]/panes:hidden",
|
|
79050
|
+
icon: "external",
|
|
79051
|
+
label: t$2("tasks.agentBrowser.openInNewWindow"),
|
|
79052
|
+
disabled: !ready,
|
|
79053
|
+
mix: on("click", () => {
|
|
79054
|
+
if (src) window.open(src, "_blank", "noopener,noreferrer");
|
|
79055
|
+
})
|
|
79056
|
+
})] });
|
|
79057
|
+
let content = ready ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("iframe", {
|
|
79058
|
+
title: title || t$2("tasks.agentBrowser.preview"),
|
|
79059
|
+
src: src ?? ready.url,
|
|
79060
|
+
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups allow-modals",
|
|
79061
|
+
referrerpolicy: "no-referrer",
|
|
79062
|
+
class: "absolute inset-0 size-full border-0 bg-white",
|
|
79063
|
+
"data-testid": "agent-browser-frame",
|
|
79064
|
+
mix: [frameRef, on("load", () => {
|
|
79065
|
+
post("bud:hello");
|
|
79066
|
+
if (picking) post("bud:pick", { id: picking });
|
|
79067
|
+
})]
|
|
79068
|
+
}, `${load}`), draft && onComment ? /* @__PURE__ */ jsx("div", {
|
|
79069
|
+
role: "dialog",
|
|
79070
|
+
"aria-label": t$2("tasks.agentBrowser.newComment"),
|
|
79071
|
+
class: `absolute z-10 ${draft.client ? "" : "top-3 right-3"}`,
|
|
79072
|
+
style: draft.client ? {
|
|
79073
|
+
left: `${draft.client.x}px`,
|
|
79074
|
+
top: `${draft.client.y}px`,
|
|
79075
|
+
transform: "translate(calc(12px + var(--pages-card-x, 0px)), calc(-8px + var(--pages-card-y, 0px)))"
|
|
79076
|
+
} : void 0,
|
|
79077
|
+
mix: [...draft.client ? [keepInside] : [], on("keydown", (event) => {
|
|
79078
|
+
if (event.key === "Escape") {
|
|
79079
|
+
draft = null;
|
|
79080
|
+
update();
|
|
79081
|
+
}
|
|
79082
|
+
})],
|
|
79083
|
+
children: /* @__PURE__ */ jsx(CommentComposerCard, {
|
|
79084
|
+
busy,
|
|
79085
|
+
heading: /* @__PURE__ */ jsxs("div", {
|
|
79086
|
+
class: "flex min-w-0 flex-col gap-1 px-1 pt-1",
|
|
79087
|
+
children: [/* @__PURE__ */ jsxs(Text, {
|
|
79088
|
+
variant: "ui-caption",
|
|
79089
|
+
tone: "muted",
|
|
79090
|
+
class: "truncate",
|
|
79091
|
+
children: [
|
|
79092
|
+
draft.path,
|
|
79093
|
+
" · ",
|
|
79094
|
+
draft.element?.label || draft.element?.tagName || ""
|
|
79095
|
+
]
|
|
79096
|
+
}), draft.element?.source ? /* @__PURE__ */ jsx(ElementSourceLink, { source: draft.element.source }) : null]
|
|
79097
|
+
}),
|
|
79098
|
+
onCancel: () => {
|
|
79099
|
+
draft = null;
|
|
79100
|
+
update();
|
|
79101
|
+
},
|
|
79102
|
+
onSubmit: async (body) => {
|
|
79103
|
+
let pick = draft;
|
|
79104
|
+
busy = true;
|
|
79105
|
+
update();
|
|
79106
|
+
try {
|
|
79107
|
+
await onComment({
|
|
79108
|
+
body,
|
|
79109
|
+
path: pick.path,
|
|
79110
|
+
element: pick.element
|
|
79111
|
+
});
|
|
79112
|
+
draft = null;
|
|
79113
|
+
} finally {
|
|
79114
|
+
busy = false;
|
|
79115
|
+
update();
|
|
79116
|
+
}
|
|
79117
|
+
}
|
|
79118
|
+
})
|
|
79119
|
+
}, draft.client ? `${draft.client.x},${draft.client.y}` : "corner") : null] }) : /* @__PURE__ */ jsx("div", {
|
|
79120
|
+
class: "flex h-full flex-col items-center justify-center gap-3 p-6 text-center",
|
|
79121
|
+
children: preview.state === "waking" ? /* @__PURE__ */ jsx(Loader, { label: t$2("tasks.agentBrowser.waking") }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
79122
|
+
/* @__PURE__ */ jsx(Icon$1, {
|
|
79123
|
+
name: "browser",
|
|
79124
|
+
size: 20,
|
|
79125
|
+
class: "text-muted"
|
|
79126
|
+
}),
|
|
79127
|
+
/* @__PURE__ */ jsx(Text, {
|
|
79128
|
+
as: "p",
|
|
79129
|
+
variant: "ui",
|
|
79130
|
+
tone: "muted",
|
|
79131
|
+
class: "max-w-xs text-balance",
|
|
79132
|
+
children: preview.state === "asleep" ? t$2("tasks.agentBrowser.asleep") : preview.state === "failed" ? preview.message : t$2("tasks.agentBrowser.noPreview")
|
|
79133
|
+
}),
|
|
79134
|
+
preview.state === "asleep" || preview.state === "failed" ? /* @__PURE__ */ jsx(Button, {
|
|
79135
|
+
variant: "secondary",
|
|
79136
|
+
size: "small",
|
|
79137
|
+
"data-testid": "agent-browser-wake",
|
|
79138
|
+
mix: on("click", handle.props.onWake),
|
|
79139
|
+
children: preview.state === "asleep" ? t$2("tasks.agentBrowser.wake") : t$2("tasks.agentBrowser.tryAgain")
|
|
77838
79140
|
}) : null
|
|
77839
79141
|
] })
|
|
77840
79142
|
});
|
|
79143
|
+
let status = /* @__PURE__ */ jsxs("footer", {
|
|
79144
|
+
class: "flex h-9 shrink-0 items-center gap-3 overflow-hidden whitespace-nowrap border-t border-line ps-3 pe-2 text-muted",
|
|
79145
|
+
"aria-label": t$2("tasks.agentBrowser.status"),
|
|
79146
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
79147
|
+
variant: "ui-caption",
|
|
79148
|
+
class: "truncate",
|
|
79149
|
+
children: ready ? title || path : ""
|
|
79150
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
79151
|
+
variant: "ui-caption",
|
|
79152
|
+
class: "ms-auto truncate",
|
|
79153
|
+
children: host
|
|
79154
|
+
})]
|
|
79155
|
+
});
|
|
79156
|
+
return /* @__PURE__ */ jsx("div", {
|
|
79157
|
+
class: "h-full min-h-0",
|
|
79158
|
+
mix: listen,
|
|
79159
|
+
children: /* @__PURE__ */ jsx(AgentView, {
|
|
79160
|
+
details,
|
|
79161
|
+
browser: {
|
|
79162
|
+
toolbar,
|
|
79163
|
+
actions,
|
|
79164
|
+
content,
|
|
79165
|
+
status
|
|
79166
|
+
},
|
|
79167
|
+
terminal: terminal ? {
|
|
79168
|
+
tabs: /* @__PURE__ */ jsx("div", {
|
|
79169
|
+
class: "bud-segmented",
|
|
79170
|
+
role: "group",
|
|
79171
|
+
"aria-label": t$2("tasks.agentTerminal.sessions"),
|
|
79172
|
+
children: terminal.tabs.map((entry) => /* @__PURE__ */ jsx("button", {
|
|
79173
|
+
type: "button",
|
|
79174
|
+
"aria-pressed": entry.id === shownTab ? "true" : "false",
|
|
79175
|
+
"data-terminal-select": entry.id,
|
|
79176
|
+
mix: on("click", () => {
|
|
79177
|
+
tab = entry.id;
|
|
79178
|
+
update();
|
|
79179
|
+
}),
|
|
79180
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
79181
|
+
variant: "ui",
|
|
79182
|
+
children: entry.label
|
|
79183
|
+
})
|
|
79184
|
+
}, entry.id))
|
|
79185
|
+
}),
|
|
79186
|
+
content: /* @__PURE__ */ jsx(AgentTerminal, {
|
|
79187
|
+
tabs: terminal.tabs,
|
|
79188
|
+
active: shownTab,
|
|
79189
|
+
connect: terminal.connect
|
|
79190
|
+
})
|
|
79191
|
+
} : null
|
|
79192
|
+
})
|
|
79193
|
+
});
|
|
79194
|
+
};
|
|
79195
|
+
}
|
|
79196
|
+
//#endregion
|
|
79197
|
+
//#region ../ui/src/lib/tasks/task-run-panel.tsx
|
|
79198
|
+
function elapsed(from, now) {
|
|
79199
|
+
let seconds = Math.max(0, Math.round((now - Date.parse(from)) / 1e3));
|
|
79200
|
+
if (seconds < 60) return t$2("tasks.taskRunPanel.seconds", { count: seconds });
|
|
79201
|
+
return t$2("tasks.taskRunPanel.minutes", { count: Math.round(seconds / 60) });
|
|
79202
|
+
}
|
|
79203
|
+
/**
|
|
79204
|
+
* The factory's run on a task, above its discussion: Start task, the agent's progress, its summary
|
|
79205
|
+
* with Request changes, Approve & push and Discard, a failure with Retry, and the pushed branch.
|
|
79206
|
+
* @param handle - The run, whether it can start, and the actions.
|
|
79207
|
+
* @returns The panel render function.
|
|
79208
|
+
*/
|
|
79209
|
+
function TaskRunPanel(handle) {
|
|
79210
|
+
let acting = null;
|
|
79211
|
+
let confirming = null;
|
|
79212
|
+
let requesting = false;
|
|
79213
|
+
function update() {
|
|
79214
|
+
if (!handle.signal.aborted) handle.update();
|
|
79215
|
+
}
|
|
79216
|
+
async function act(name, action) {
|
|
79217
|
+
if (acting) return;
|
|
79218
|
+
acting = name;
|
|
79219
|
+
update();
|
|
79220
|
+
try {
|
|
79221
|
+
await action();
|
|
79222
|
+
} catch {} finally {
|
|
79223
|
+
acting = null;
|
|
79224
|
+
confirming = null;
|
|
79225
|
+
update();
|
|
79226
|
+
}
|
|
79227
|
+
}
|
|
79228
|
+
let button = (name, label, action, variant = "secondary") => /* @__PURE__ */ jsxs(Button, {
|
|
79229
|
+
variant,
|
|
79230
|
+
size: "small",
|
|
79231
|
+
disabled: acting !== null,
|
|
79232
|
+
"data-testid": `run-${name}`,
|
|
79233
|
+
mix: on("click", () => void act(name, action)),
|
|
79234
|
+
children: [acting === name ? /* @__PURE__ */ jsx(Spinner, { size: 12 }) : null, label]
|
|
79235
|
+
});
|
|
79236
|
+
let confirm = (kind, question, label) => /* @__PURE__ */ jsxs("div", {
|
|
79237
|
+
class: "flex min-w-0 flex-wrap items-center gap-2",
|
|
79238
|
+
role: "group",
|
|
79239
|
+
"aria-label": question,
|
|
79240
|
+
"data-testid": `run-confirm-${kind}`,
|
|
79241
|
+
children: [
|
|
79242
|
+
/* @__PURE__ */ jsx(Text, {
|
|
79243
|
+
variant: "ui-caption",
|
|
79244
|
+
tone: "muted",
|
|
79245
|
+
class: "me-auto",
|
|
79246
|
+
children: question
|
|
79247
|
+
}),
|
|
79248
|
+
/* @__PURE__ */ jsx(Button, {
|
|
79249
|
+
variant: "ghost",
|
|
79250
|
+
size: "small",
|
|
79251
|
+
disabled: acting !== null,
|
|
79252
|
+
mix: on("click", () => {
|
|
79253
|
+
confirming = null;
|
|
79254
|
+
update();
|
|
79255
|
+
}),
|
|
79256
|
+
children: t$2("tasks.taskRunPanel.cancel")
|
|
79257
|
+
}),
|
|
79258
|
+
button(`${kind}-confirmed`, label, kind === "approve" ? handle.props.onApprove : handle.props.onDiscard, "primary")
|
|
79259
|
+
]
|
|
79260
|
+
});
|
|
79261
|
+
let ask = (kind, label, variant) => /* @__PURE__ */ jsx(Button, {
|
|
79262
|
+
variant,
|
|
79263
|
+
size: "small",
|
|
79264
|
+
disabled: acting !== null,
|
|
79265
|
+
"data-testid": `run-${kind}`,
|
|
79266
|
+
mix: on("click", () => {
|
|
79267
|
+
confirming = kind;
|
|
79268
|
+
requesting = false;
|
|
79269
|
+
update();
|
|
79270
|
+
}),
|
|
79271
|
+
children: label
|
|
79272
|
+
});
|
|
79273
|
+
return () => {
|
|
79274
|
+
let { run, blocked, preview, now = Date.now() } = handle.props;
|
|
79275
|
+
let state = run?.state;
|
|
79276
|
+
let fresh = !run || state === "discarded";
|
|
79277
|
+
let working = state === "provisioning" || state === "working" || state === "changes" || state === "approved";
|
|
79278
|
+
let line = (icon, text, tone = "") => /* @__PURE__ */ jsxs("div", {
|
|
79279
|
+
class: `flex min-w-0 items-center gap-2 ${tone}`,
|
|
79280
|
+
"data-testid": "run-state",
|
|
79281
|
+
children: [
|
|
79282
|
+
icon,
|
|
79283
|
+
/* @__PURE__ */ jsx(Text, {
|
|
79284
|
+
variant: "ui",
|
|
79285
|
+
class: "min-w-0 [overflow-wrap:anywhere]",
|
|
79286
|
+
children: text
|
|
79287
|
+
}),
|
|
79288
|
+
run && working ? /* @__PURE__ */ jsx(Text, {
|
|
79289
|
+
variant: "ui-caption",
|
|
79290
|
+
tone: "muted",
|
|
79291
|
+
class: "ms-auto shrink-0 tabular-nums",
|
|
79292
|
+
children: elapsed(run.activity.findLast((entry) => entry.kind === "status")?.at ?? run.createdAt, now)
|
|
79293
|
+
}) : null
|
|
79294
|
+
]
|
|
79295
|
+
});
|
|
79296
|
+
let activity = (run?.activity ?? []).filter((entry) => entry.kind !== "status").slice(-6);
|
|
79297
|
+
return /* @__PURE__ */ jsxs("section", {
|
|
79298
|
+
class: "flex min-w-0 flex-col gap-3",
|
|
79299
|
+
"aria-label": t$2("tasks.taskRunPanel.agent"),
|
|
79300
|
+
"data-testid": "task-run-panel",
|
|
79301
|
+
"data-state": state ?? (run === null ? "none" : "loading"),
|
|
79302
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
79303
|
+
class: "flex items-center gap-2",
|
|
79304
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
79305
|
+
as: "h3",
|
|
79306
|
+
variant: "ui",
|
|
79307
|
+
weight: "medium",
|
|
79308
|
+
children: t$2("tasks.taskRunPanel.agent")
|
|
79309
|
+
}), run && !fresh ? /* @__PURE__ */ jsx(Text, {
|
|
79310
|
+
variant: "ui-caption",
|
|
79311
|
+
tone: "muted",
|
|
79312
|
+
class: "min-w-0 truncate font-mono",
|
|
79313
|
+
children: run.branch
|
|
79314
|
+
}) : null]
|
|
79315
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
79316
|
+
class: "flex min-w-0 flex-col gap-3 rounded-lg bg-[var(--bud-card)] p-3 ring-1 ring-[var(--bud-card-border)]",
|
|
79317
|
+
children: run === void 0 ? line(/* @__PURE__ */ jsx(Spinner, { size: 14 }), t$2("tasks.taskRunPanel.loading"), "text-muted") : fresh ? /* @__PURE__ */ jsxs("div", {
|
|
79318
|
+
class: "flex min-w-0 flex-wrap items-center gap-3",
|
|
79319
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
79320
|
+
variant: "ui-caption",
|
|
79321
|
+
tone: "muted",
|
|
79322
|
+
class: "min-w-0 flex-1",
|
|
79323
|
+
children: blocked ?? t$2("tasks.taskRunPanel.startHint")
|
|
79324
|
+
}), blocked ? null : button("start", t$2("tasks.taskRunPanel.start"), handle.props.onStart, "primary")]
|
|
79325
|
+
}) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
79326
|
+
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, {
|
|
79327
|
+
name: "circle-dot",
|
|
79328
|
+
size: 14
|
|
79329
|
+
}), t$2("tasks.taskRunPanel.review"), "text-amber-600 dark:text-amber-400") : state === "needs_context" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
79330
|
+
name: "message",
|
|
79331
|
+
size: 14
|
|
79332
|
+
}), t$2("tasks.taskRunPanel.needsContext"), "text-violet-600 dark:text-violet-400") : state === "merged" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
79333
|
+
name: "circle-check",
|
|
79334
|
+
size: 14
|
|
79335
|
+
}), t$2("tasks.taskRunPanel.merged", { branch: run.branch }), "text-emerald-600 dark:text-emerald-400") : state === "pushed" ? line(/* @__PURE__ */ jsx(Icon$1, {
|
|
79336
|
+
name: "push",
|
|
79337
|
+
size: 14
|
|
79338
|
+
}), t$2("tasks.taskRunPanel.pushed", {
|
|
79339
|
+
branch: run.branch,
|
|
79340
|
+
commit: (run.pushed ?? "").slice(0, 7)
|
|
79341
|
+
}), "text-emerald-600 dark:text-emerald-400") : line(/* @__PURE__ */ jsx(Icon$1, {
|
|
79342
|
+
name: "circle-alert",
|
|
79343
|
+
size: 14
|
|
79344
|
+
}), run.error?.message ?? t$2("tasks.taskRunPanel.failed"), "text-red-600 dark:text-red-400"),
|
|
79345
|
+
run.asleep && (state === "review" || state === "needs_context" || state === "failed") ? /* @__PURE__ */ jsxs("div", {
|
|
79346
|
+
class: "flex min-w-0 items-center gap-2 text-muted",
|
|
79347
|
+
"data-testid": "run-asleep",
|
|
79348
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
79349
|
+
name: "moon",
|
|
79350
|
+
size: 13,
|
|
79351
|
+
class: "shrink-0"
|
|
79352
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
79353
|
+
variant: "ui-caption",
|
|
79354
|
+
tone: "muted",
|
|
79355
|
+
class: "min-w-0",
|
|
79356
|
+
children: t$2("tasks.taskRunPanel.asleep")
|
|
79357
|
+
})]
|
|
79358
|
+
}) : null,
|
|
79359
|
+
state === "needs_context" && run.question ? /* @__PURE__ */ jsx("div", {
|
|
79360
|
+
class: "min-w-0 rounded-md bg-[var(--bud-control)] px-3 py-2",
|
|
79361
|
+
"data-testid": "run-question",
|
|
79362
|
+
children: /* @__PURE__ */ jsx(TaskMarkdown, { children: run.question })
|
|
79363
|
+
}) : null,
|
|
79364
|
+
state === "review" && run.summary ? /* @__PURE__ */ jsx("div", {
|
|
79365
|
+
class: "min-w-0",
|
|
79366
|
+
"data-testid": "run-summary",
|
|
79367
|
+
children: /* @__PURE__ */ jsx(TaskMarkdown, { children: run.summary })
|
|
79368
|
+
}) : null,
|
|
79369
|
+
activity.length && state !== "pushed" && state !== "merged" ? /* @__PURE__ */ jsx("ol", {
|
|
79370
|
+
class: "flex min-w-0 flex-col gap-1",
|
|
79371
|
+
"aria-label": t$2("tasks.taskRunPanel.activity"),
|
|
79372
|
+
children: activity.map((entry, index) => /* @__PURE__ */ jsxs("li", {
|
|
79373
|
+
class: "flex min-w-0 items-baseline gap-2",
|
|
79374
|
+
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
79375
|
+
name: entry.kind === "tool" ? "code" : entry.kind === "error" ? "warning" : "circle",
|
|
79376
|
+
size: 11,
|
|
79377
|
+
class: "shrink-0 translate-y-px text-muted"
|
|
79378
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
79379
|
+
variant: "ui-caption",
|
|
79380
|
+
tone: "muted",
|
|
79381
|
+
class: "min-w-0 truncate font-mono",
|
|
79382
|
+
children: entry.text
|
|
79383
|
+
})]
|
|
79384
|
+
}, `${entry.at}-${index}`))
|
|
79385
|
+
}) : null,
|
|
79386
|
+
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__ */ jsxs("div", {
|
|
79387
|
+
class: "flex min-w-0 flex-col gap-2",
|
|
79388
|
+
children: [/* @__PURE__ */ jsx(CommentComposer, {
|
|
79389
|
+
label: t$2("tasks.taskRunPanel.answer"),
|
|
79390
|
+
placeholder: t$2("tasks.taskRunPanel.answerPlaceholder"),
|
|
79391
|
+
busy: acting !== null,
|
|
79392
|
+
onSubmit: async (message) => {
|
|
79393
|
+
await handle.props.onAnswer(message);
|
|
79394
|
+
}
|
|
79395
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
79396
|
+
class: "ms-auto",
|
|
79397
|
+
children: ask("discard", t$2("tasks.taskRunPanel.discard"), "ghost")
|
|
79398
|
+
})]
|
|
79399
|
+
}) : requesting && state === "review" ? /* @__PURE__ */ jsx(CommentComposer, {
|
|
79400
|
+
label: t$2("tasks.taskRunPanel.requestChanges"),
|
|
79401
|
+
placeholder: t$2("tasks.taskRunPanel.changesPlaceholder"),
|
|
79402
|
+
autoFocus: true,
|
|
79403
|
+
busy: acting !== null,
|
|
79404
|
+
onSubmit: async (message) => {
|
|
79405
|
+
await handle.props.onChanges(message);
|
|
79406
|
+
requesting = false;
|
|
79407
|
+
update();
|
|
79408
|
+
},
|
|
79409
|
+
footer: /* @__PURE__ */ jsx(Button, {
|
|
79410
|
+
variant: "ghost",
|
|
79411
|
+
size: "small",
|
|
79412
|
+
mix: on("click", () => {
|
|
79413
|
+
requesting = false;
|
|
79414
|
+
update();
|
|
79415
|
+
}),
|
|
79416
|
+
children: t$2("tasks.taskRunPanel.cancel")
|
|
79417
|
+
})
|
|
79418
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
79419
|
+
class: "flex min-w-0 flex-wrap items-center gap-2",
|
|
79420
|
+
children: [
|
|
79421
|
+
state === "review" ? ask("approve", t$2("tasks.taskRunPanel.approve"), "primary") : null,
|
|
79422
|
+
state === "review" ? /* @__PURE__ */ jsx(Button, {
|
|
79423
|
+
variant: "secondary",
|
|
79424
|
+
size: "small",
|
|
79425
|
+
disabled: acting !== null,
|
|
79426
|
+
"data-testid": "run-changes",
|
|
79427
|
+
mix: on("click", () => {
|
|
79428
|
+
requesting = true;
|
|
79429
|
+
update();
|
|
79430
|
+
}),
|
|
79431
|
+
children: t$2("tasks.taskRunPanel.requestChanges")
|
|
79432
|
+
}) : null,
|
|
79433
|
+
state === "failed" && run.error?.retryable && run.failedIn ? button("retry", t$2("tasks.taskRunPanel.retry"), handle.props.onRetry, "primary") : null,
|
|
79434
|
+
preview && (state === "working" || state === "changes" || state === "review" || state === "needs_context") ? button("preview", t$2("tasks.taskRunPanel.preview"), handle.props.onPreview) : null,
|
|
79435
|
+
state === "pushed" && handle.props.onCanvas ? /* @__PURE__ */ jsx(Button, {
|
|
79436
|
+
variant: "secondary",
|
|
79437
|
+
size: "small",
|
|
79438
|
+
"data-testid": "run-canvas",
|
|
79439
|
+
mix: on("click", () => handle.props.onCanvas?.()),
|
|
79440
|
+
children: t$2("tasks.taskRunPanel.showOnCanvas")
|
|
79441
|
+
}) : null,
|
|
79442
|
+
state === "pushed" || state === "merged" ? button("start", t$2("tasks.taskRunPanel.startAgain"), handle.props.onStart, "ghost") : null,
|
|
79443
|
+
state !== "pushed" && state !== "merged" && state !== "pushing" && state !== "approved" ? /* @__PURE__ */ jsx("span", {
|
|
79444
|
+
class: "ms-auto",
|
|
79445
|
+
children: ask("discard", t$2("tasks.taskRunPanel.discard"), "ghost")
|
|
79446
|
+
}) : null
|
|
79447
|
+
]
|
|
79448
|
+
})
|
|
79449
|
+
] })
|
|
79450
|
+
})]
|
|
79451
|
+
});
|
|
77841
79452
|
};
|
|
77842
79453
|
}
|
|
77843
79454
|
//#endregion
|
|
@@ -83568,7 +85179,7 @@ function ItemDiscussion(handle) {
|
|
|
83568
85179
|
*/
|
|
83569
85180
|
function ThreadTaskLinks(handle) {
|
|
83570
85181
|
return () => {
|
|
83571
|
-
let { itemIds, items, href, onEdit, busy } = handle.props;
|
|
85182
|
+
let { itemIds, items, href, onEdit, busy, schema, runs } = handle.props;
|
|
83572
85183
|
if (!itemIds.length && !onEdit) return null;
|
|
83573
85184
|
let names = new Map(items.map((item) => [item.id, item]));
|
|
83574
85185
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -83580,15 +85191,33 @@ function ThreadTaskLinks(handle) {
|
|
|
83580
85191
|
href: href(id),
|
|
83581
85192
|
title: item?.title ?? id,
|
|
83582
85193
|
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",
|
|
83583
|
-
children: [
|
|
83584
|
-
|
|
83585
|
-
|
|
83586
|
-
|
|
83587
|
-
|
|
83588
|
-
|
|
83589
|
-
|
|
83590
|
-
|
|
83591
|
-
|
|
85194
|
+
children: [
|
|
85195
|
+
/* @__PURE__ */ jsx(Text, {
|
|
85196
|
+
variant: "code",
|
|
85197
|
+
class: "shrink-0",
|
|
85198
|
+
children: id
|
|
85199
|
+
}),
|
|
85200
|
+
item?.title ? /* @__PURE__ */ jsx(Text, {
|
|
85201
|
+
variant: "ui-caption",
|
|
85202
|
+
class: "truncate",
|
|
85203
|
+
children: item.title
|
|
85204
|
+
}) : null,
|
|
85205
|
+
item?.status && schema ? /* @__PURE__ */ jsxs("span", {
|
|
85206
|
+
class: "flex shrink-0 items-center gap-1 text-muted",
|
|
85207
|
+
"data-task-status": true,
|
|
85208
|
+
children: [/* @__PURE__ */ jsx(StatusDot, {
|
|
85209
|
+
status: item.status,
|
|
85210
|
+
schema
|
|
85211
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
85212
|
+
variant: "ui-caption",
|
|
85213
|
+
children: schema.statuses.find((status) => status.value === item.status)?.label ?? taskLabel(item.status)
|
|
85214
|
+
})]
|
|
85215
|
+
}) : null,
|
|
85216
|
+
runs?.[id] && taskRunBadge(runs[id]) ? /* @__PURE__ */ jsx("span", {
|
|
85217
|
+
class: "shrink-0",
|
|
85218
|
+
children: /* @__PURE__ */ jsx(TaskRunBadge, { run: runs[id] })
|
|
85219
|
+
}) : null
|
|
85220
|
+
]
|
|
83592
85221
|
}, id);
|
|
83593
85222
|
}), onEdit ? /* @__PURE__ */ jsx(IconButton, {
|
|
83594
85223
|
icon: "tasks",
|
|
@@ -84135,6 +85764,11 @@ var endpoints = [
|
|
|
84135
85764
|
write: true,
|
|
84136
85765
|
list: false
|
|
84137
85766
|
},
|
|
85767
|
+
{
|
|
85768
|
+
route: routes.comments.makeTask,
|
|
85769
|
+
write: true,
|
|
85770
|
+
list: false
|
|
85771
|
+
},
|
|
84138
85772
|
{
|
|
84139
85773
|
route: routes.comments.deleteMessage,
|
|
84140
85774
|
write: true,
|
|
@@ -84768,4 +86402,4 @@ function unavailableComments(message = commentsUnavailable) {
|
|
|
84768
86402
|
};
|
|
84769
86403
|
}
|
|
84770
86404
|
//#endregion
|
|
84771
|
-
export {
|
|
86405
|
+
export { Dialog as $, WorkerPoolTaskCanceledError as $t, FileRecoveryDialog as A, hasMessage as An, readReviewLocation as At, AgentBrowser as B, reconcileFileView as Bt, ThreadTaskPicker as C, IconButton as Cn, taskHref as Ct, FileEditorPanel as D, toast as Dn, defaultReviewView as Dt, ReviewActionDialog as E, AppShell as En, defaultReviewPosition as Et, defaultFileDestination as F, Text as Fn, closeFileTab as Ft, FileSearchPanel as G, Loader as Gt, parseTaskDesign as H, CommentThreadDetail as Ht, fileActionIntent as I, defaultFileView as It, CommentThreadHeading as J, isDiffPlainText as Jt, BranchSidebar as K, Spinner as Kt, mutationFileView as L, fileHref as Lt, FileReviewPanel as M, locale as Mn, reviewComparison as Mt, codeThemes as N, t$2 as Nn, reviewContextKey as Nt, defaultEditorPreferences as O, readPreference as On, legacyFileHref as Ot, FileWorkspace as P, useLocaleSource as Pn, reviewHref as Pt, FieldCardHeader as Q, areDiffTargetsEqual as Qt, remainingMutationIntent as R, parseFileView as Rt, ThreadTaskLinks as S, Select as Sn, taskAgentHref as St, FileConflictPanel as T, Tooltip as Tn, taskRole as Tt, CanvasWorkspace as U, CommentThreadItem as Ut, TaskWorkspace as V, rememberFile as Vt, captureCanvasPoint as W, CommentComposer as Wt, FieldCardContent as X, areDiffRenderOptionsEqual as Xt, FieldCard as Y, renderDiffWithHighlighter as Yt, FieldCardFooter as Z, areFilesEqual as Zt, requestComments as _, areLanguagesAttached as _n, legacyConversationHref as _t, saveThreads as a, renderFileWithHighlighter as an, readTabsCookie as at, writeOptimistically as b, WorkspaceLayout as bn, agentViewOpen as bt, previewKey as c, areThemesEqual as cn, tabsCookieName as ct, saveWorkspace as d, validateResolvedThemeName as dn, PagesWorkspace as dt, WorkerPoolTerminatedError as en, activeTab as et, storeDocument as f, attachResolvedThemes as fn, codeCommentCounts as ft, CommentsRequestError as g, resolveLanguage as gn, isCodeConversation as gt, storedWorkspace as h, getResolvedOrResolveLanguage as hn, conversationLabel as ht, saveThread as i, isFilePlainText as in, parseShellTabs as it, FileMutationDialog as j, isLocale as jn, rememberReviewPosition as jt, parseEditorPreferences as k, writePreference as kn, parseReviewSession as kt, projectStore as l, getSharedHighlighter as ln, tabsCookieValue as lt, storedFiles as m, getThemes as mn, conversationHref as mt, unavailableComments as n, isHandledWorkerPoolError as nn, initialShellTabs as nt, threadMatches as o, areFileRenderOptionsEqual as on, stepShellTab as ot, storedDocument as p, themeResolver as pn, conversationDestination as pt, ConversationSidebar as q, Button as qt, followThreads as r, markWorkerErrorReported as rn, openShellTab as rt, applyFileUpdate as s, hasResolvedThemes as sn, tabHref as st, commentsUnavailable as t, WorkerPoolWorkerError as tn, closeShellTab as tt, saveFiles as u, prepareThemeResolution as un, visitShellTab as ut, projectLive as v, ResolvedLanguages as vn, locateCodeConversations as vt, ItemDiscussion as w, LiveStatus as wn, taskLabel as wt, writeRows as x, ShellTabBar as xn, selectedTask as xt, plainRow as y, ToolbarSeparator as yn, readConversationLocation as yt, TaskRunPanel as z, readFileLocation as zt };
|