@bud.sh/app 0.5.0 → 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-ChANGtl-.js → index-DtISWZp9.js} +2 -2
- package/dist/client/assets/pages-BJ-tNJ4J.js +1 -0
- package/dist/client/assets/{project-branches-DO897zM6.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-Lay351p4.js → project-threads-Bv7IDBgi.js} +105 -105
- package/dist/client/assets/project-work-DAE9-olg.js +1 -0
- package/dist/client/assets/{task-design-Avb2RO4w.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-V36732ER.js → canvas-AII16n9i.js} +97 -6
- package/dist/hosted/assets/{comment-data-CF2ZV_3k.js → comment-data-BXfMElfx.js} +2004 -402
- package/dist/hosted/assets/dist-BCSTeNf4.js +4785 -0
- package/dist/hosted/assets/{files-DjSCjfU7.js → files-D_1yeAVO.js} +10 -5
- package/dist/hosted/assets/{pages-BzjzeuPu.js → pages-CN_SbKWA.js} +3 -3
- package/dist/hosted/assets/{project-branches-BT97J9i7.js → project-branches-Bxp0DCwg.js} +1 -1
- package/dist/hosted/assets/{project-thread-links-BRLgByEe.js → project-thread-links-KqQoKBLE.js} +76 -4
- package/dist/{node-host/assets/screen-CZXWJEds.js → hosted/assets/screen-DpAcDUKR.js} +29 -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 -13
- 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-Dc1mYCwQ.js → node-host/assets/canvas-BeDoufy1.js} +97 -7
- package/dist/node-host/assets/{comment-data-DyIZNpfG.js → comment-data-DE2T9yTj.js} +1980 -376
- package/dist/node-host/assets/dist-BCSTeNf4.js +4785 -0
- package/dist/node-host/assets/{files-Dh2TiQZq.js → files-Dl-PTS09.js} +11 -6
- package/dist/node-host/assets/{pages-BxpjbYhs.js → pages-DL2sk6_U.js} +3 -3
- package/dist/node-host/assets/{project-branches-B7HUGiVK.js → project-branches-DGp5ELct.js} +1 -1
- package/dist/{server/assets/project-thread-links-CBOpf6zk.js → node-host/assets/project-thread-links-CgBV3Jcm.js} +76 -5
- package/dist/{hosted/assets/screen-CKp2C7kx.js → node-host/assets/screen-B55yyVfb.js} +29 -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-TRUfxfL5.js → server/assets/canvas-CJWQ-jjv.js} +98 -6
- package/dist/server/assets/{comment-data-CsjukwAW.js → comment-data-Rg42ToTW.js} +1666 -47
- 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-E9mSFeoc.js → files-CPJqKeMo.js} +12 -7
- package/dist/server/assets/{listener-DN5TyOjJ.js → listener-D61O6PzF.js} +708 -12
- package/dist/server/assets/{pages-BBBXyJWV.js → pages-KJY_Ba92.js} +4 -4
- package/dist/server/assets/{project-branches-B0YIK6Ur.js → project-branches-qG9ACZvo.js} +2 -2
- package/dist/{node-host/assets/project-thread-links-CauJF0Cz.js → server/assets/project-thread-links-CqK0lqCF.js} +77 -4
- package/dist/{node-host/assets/tasks-request-ZWmbc8fE.js → server/assets/project-work-DoIwxWMm.js} +87 -2
- package/dist/server/assets/run-BJ8r5jSh.js +572 -0
- package/dist/server/assets/{screen-BIQA2mr4.js → screen-CBrHPFug.js} +30 -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-Cu6R6xxT.js +0 -1
- package/dist/client/assets/difference-worker-jfTSn-Tw.js +0 -8
- package/dist/client/assets/files-js6ElfkU.js +0 -1
- package/dist/client/assets/i18n-DxqFr2mi.js +0 -1
- package/dist/client/assets/index-CFFxP0gS.css +0 -2
- package/dist/client/assets/pages-6_lhiQmz.js +0 -1
- package/dist/client/assets/project-comments-DFFKVpia.js +0 -1
- package/dist/client/assets/project-thread-links-NLFWQRD2.js +0 -1
- package/dist/client/assets/project-work-du0Y-L5Y.js +0 -1
- package/dist/client/assets/tasks-CA-E8bbK.js +0 -1
- package/dist/client/assets/tasks-request-C55IeuiP.js +0 -1
- package/dist/client/assets/workspace-Cw5HvX5d.js +0 -2
- package/dist/hosted/assets/tasks-Dj7AyBJB.js +0 -649
- package/dist/hosted/assets/tasks-request-DZob623r.js +0 -113
- package/dist/node-host/assets/tasks-Bs1IOpeU.js +0 -651
- package/dist/server/assets/project-work-qSKFO5yj.js +0 -88
- package/dist/server/assets/tasks-CiXodsLN.js +0 -652
- package/dist/server/assets/tasks-request-DhwCzpRi.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"
|
|
@@ -1507,10 +1694,6 @@ var de$1 = {
|
|
|
1507
1694
|
text: "Leinwand verschieben",
|
|
1508
1695
|
source: "233eddf0"
|
|
1509
1696
|
},
|
|
1510
|
-
"canvas.canvasWorkspace.reload": {
|
|
1511
|
-
text: "Neu laden",
|
|
1512
|
-
source: "1a43a2ac"
|
|
1513
|
-
},
|
|
1514
1697
|
"canvas.canvasWorkspace.savingComments": {
|
|
1515
1698
|
text: "Kommentare werden gespeichert",
|
|
1516
1699
|
source: "1f15fbfb"
|
|
@@ -4435,6 +4618,114 @@ var de$1 = {
|
|
|
4435
4618
|
text: "Tabs",
|
|
4436
4619
|
source: "8ec4824d"
|
|
4437
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
|
+
},
|
|
4438
4729
|
"tasks.taskActions.actionInProgress": {
|
|
4439
4730
|
text: "Eine Aufgabenaktion läuft bereits.",
|
|
4440
4731
|
source: "1ae83c01"
|
|
@@ -4621,6 +4912,14 @@ var de$1 = {
|
|
|
4621
4912
|
text: "In Bearbeitung",
|
|
4622
4913
|
source: "2948b425"
|
|
4623
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
|
+
},
|
|
4624
4923
|
"tasks.taskData.label.open": {
|
|
4625
4924
|
text: "Offen",
|
|
4626
4925
|
source: "538b10e9"
|
|
@@ -4633,6 +4932,10 @@ var de$1 = {
|
|
|
4633
4932
|
text: "Bereit",
|
|
4634
4933
|
source: "0bca3294"
|
|
4635
4934
|
},
|
|
4935
|
+
"tasks.taskData.label.ready_to_merge": {
|
|
4936
|
+
text: "Bereit zum Zusammenführen",
|
|
4937
|
+
source: "b0ea5dc5"
|
|
4938
|
+
},
|
|
4636
4939
|
"tasks.taskData.label.task": {
|
|
4637
4940
|
text: "Aufgabe",
|
|
4638
4941
|
source: "76ef3d8c"
|
|
@@ -4964,6 +5267,160 @@ var de$1 = {
|
|
|
4964
5267
|
text: "Unerledigter Eintrag",
|
|
4965
5268
|
source: "eee80db8"
|
|
4966
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
|
+
},
|
|
4967
5424
|
"tasks.taskSections.latestEvents": {
|
|
4968
5425
|
text: {
|
|
4969
5426
|
one: "Das neueste Ereignis wird angezeigt.",
|
|
@@ -5081,6 +5538,10 @@ var de$1 = {
|
|
|
5081
5538
|
text: "Erstelle eine Aufgabe, um mit der Planung deiner Arbeit zu beginnen.",
|
|
5082
5539
|
source: "7c21b645"
|
|
5083
5540
|
},
|
|
5541
|
+
"tasks.taskWorkspace.fewerStatuses": {
|
|
5542
|
+
text: "Weniger Statuswerte anzeigen",
|
|
5543
|
+
source: "1de3f0ed"
|
|
5544
|
+
},
|
|
5084
5545
|
"tasks.taskWorkspace.filterEpic": {
|
|
5085
5546
|
text: "Epic filtern",
|
|
5086
5547
|
source: "19c2ed58"
|
|
@@ -5149,6 +5610,17 @@ var de$1 = {
|
|
|
5149
5610
|
text: "Noch kein {label}-Arbeitsbereich vorhanden",
|
|
5150
5611
|
source: "233c23c9"
|
|
5151
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
|
+
},
|
|
5152
5624
|
"tasks.taskWorkspace.priority": {
|
|
5153
5625
|
text: "Priorität",
|
|
5154
5626
|
source: "e68d9f29"
|
|
@@ -5220,6 +5692,13 @@ var de$1 = {
|
|
|
5220
5692
|
text: "Deine lokalen Aufgabenänderungen teilen",
|
|
5221
5693
|
source: "1dad116c"
|
|
5222
5694
|
},
|
|
5695
|
+
"tasks.taskWorkspace.showTasks": {
|
|
5696
|
+
text: {
|
|
5697
|
+
one: "1 Aufgabe anzeigen",
|
|
5698
|
+
other: "{count} Aufgaben anzeigen"
|
|
5699
|
+
},
|
|
5700
|
+
source: "56258faa"
|
|
5701
|
+
},
|
|
5223
5702
|
"tasks.taskWorkspace.showingCount": {
|
|
5224
5703
|
text: "Zeigt {shown} von {total}",
|
|
5225
5704
|
source: "e8675f4a"
|
|
@@ -5316,6 +5795,13 @@ var de$1 = {
|
|
|
5316
5795
|
* and the thing (`canvas.zoomIn`); `pnpm translate` keeps the other languages in step.
|
|
5317
5796
|
*/
|
|
5318
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",
|
|
5319
5805
|
"app.client.commentsRequest.emptyResponse": "The comments service returned an empty response.",
|
|
5320
5806
|
"app.client.commentsRequest.invalidData": "The comments service returned invalid data.",
|
|
5321
5807
|
"app.client.commentsRequest.invalidEndpoint": "Invalid comments endpoint.",
|
|
@@ -5338,6 +5824,20 @@ var en = {
|
|
|
5338
5824
|
"app.client.differenceView.slideStatus": "{kind} · change {change} of {count} · {index} / {total}",
|
|
5339
5825
|
"app.client.differenceView.slideshowLabel": "Differences slideshow",
|
|
5340
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.",
|
|
5341
5841
|
"app.client.fileDrafts.deleteWithUnsavedDrafts": "Save or discard the unsaved drafts in this selection before deleting it.",
|
|
5342
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.",
|
|
5343
5843
|
"app.client.fileDrafts.destinationHasDraft": "A destination has an unsaved draft. Save or discard it before moving files here.",
|
|
@@ -5449,6 +5949,7 @@ var en = {
|
|
|
5449
5949
|
"app.client.projectComments.refreshBeforeTryingAgain": "The comment write could not be confirmed. Refresh before trying again.",
|
|
5450
5950
|
"app.client.projectComments.reloadDiscussionBeforeSaving": "Reload this discussion before saving.",
|
|
5451
5951
|
"app.client.projectComments.serviceReturnedAnotherDiscussion": "The comments service returned another discussion.",
|
|
5952
|
+
"app.client.projectComments.taskCreated": "Task created",
|
|
5452
5953
|
"app.client.projectComments.waitForCurrentOperation": "Wait for the current comment operation to finish.",
|
|
5453
5954
|
"app.client.projectDifferences.comparisonFailed": "The pictures could not be compared.",
|
|
5454
5955
|
"app.client.projectFileReview.commentsUnavailable": "Comments are stored by your storage adapter. Beads: run bd init in this project.",
|
|
@@ -5503,15 +6004,20 @@ var en = {
|
|
|
5503
6004
|
"app.client.projectPreviews.requestFailed": "Preview request failed ({status}).",
|
|
5504
6005
|
"app.client.projectTaskPicker.adapterUnavailable": "The task adapter is unavailable.",
|
|
5505
6006
|
"app.client.projectTaskPicker.loadFailed": "Could not load tasks.",
|
|
6007
|
+
"app.client.projectTasks.closeAgentView": "Close Agent view",
|
|
5506
6008
|
"app.client.projectTasks.couldNotLoadTask": "Could not load this task.",
|
|
5507
6009
|
"app.client.projectTasks.couldNotLoadTasks": "Could not load tasks.",
|
|
5508
6010
|
"app.client.projectTasks.differentTaskRefresh": "The task service returned a different task. Refresh and try again.",
|
|
5509
6011
|
"app.client.projectTasks.differentTaskRefreshRetry": "The task service returned a different task. Refresh before retrying.",
|
|
6012
|
+
"app.client.projectTasks.openAgentView": "Open Agent view",
|
|
5510
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.",
|
|
5511
6016
|
"app.client.projectTasks.undidTaskChange": "Bud undid a task change",
|
|
5512
6017
|
"app.client.projectTasks.writeNotConfirmed": "The write was not confirmed.",
|
|
5513
6018
|
"app.client.projectThreadLinks.anotherDiscussion": "The service returned another discussion.",
|
|
5514
6019
|
"app.client.projectThreadLinks.linkTasks": "Link tasks",
|
|
6020
|
+
"app.client.projectThreadLinks.makeTask": "Make task",
|
|
5515
6021
|
"app.client.projectThreadLinks.reviewLinksBeforeSaving": "Review the latest links before saving.",
|
|
5516
6022
|
"app.client.screenHost.couldNotOpen": "Could not open {label}.",
|
|
5517
6023
|
"app.client.screenHost.didntOpen": "{label} didn't open",
|
|
@@ -5520,6 +6026,14 @@ var en = {
|
|
|
5520
6026
|
"app.client.screenHost.loading": "Loading {label}…",
|
|
5521
6027
|
"app.client.screenHost.noRouteMatches": "No screen route matches {href}.",
|
|
5522
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",
|
|
5523
6037
|
"app.client.taskDiscussion.addContextPlaceholder": "Add context for your team…",
|
|
5524
6038
|
"app.client.taskDiscussion.addTaskComment": "Add task comment",
|
|
5525
6039
|
"app.client.taskDiscussion.cancel": "Cancel",
|
|
@@ -5549,6 +6063,7 @@ var en = {
|
|
|
5549
6063
|
},
|
|
5550
6064
|
"app.client.threadLinks.taskDiscussionNeedsLinkedTask": "A task discussion needs at least one linked task.",
|
|
5551
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",
|
|
5552
6067
|
"app.client.workspace.connectProjectToOpenDiscussion": "Connect a project to open this discussion.",
|
|
5553
6068
|
"app.client.workspace.couldNotOpenDiscussion": "Could not open this discussion.",
|
|
5554
6069
|
"app.client.workspace.discussion": "Discussion",
|
|
@@ -5559,6 +6074,19 @@ var en = {
|
|
|
5559
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.",
|
|
5560
6075
|
"app.client.workspace.yourProjectSideBySide": "Your project, side by side.",
|
|
5561
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",
|
|
5562
6090
|
"appShell.mainNavigation": "Main navigation",
|
|
5563
6091
|
"breadcrumb.navigationLabel": "Breadcrumb",
|
|
5564
6092
|
"canvas.artboardCanvas.chooseCollectionPage": "Choose a {collection} page",
|
|
@@ -5604,7 +6132,6 @@ var en = {
|
|
|
5604
6132
|
"canvas.canvasWorkspace.interactWithPages": "Interact with pages",
|
|
5605
6133
|
"canvas.canvasWorkspace.newComment": "New comment",
|
|
5606
6134
|
"canvas.canvasWorkspace.panCanvas": "Pan canvas",
|
|
5607
|
-
"canvas.canvasWorkspace.reload": "Reload",
|
|
5608
6135
|
"canvas.canvasWorkspace.savingComments": "Saving comments",
|
|
5609
6136
|
"canvas.canvasWorkspace.showDarkPages": "Show dark pages",
|
|
5610
6137
|
"canvas.canvasWorkspace.showFullPages": "Show full pages",
|
|
@@ -6417,6 +6944,33 @@ var en = {
|
|
|
6417
6944
|
other: "{count} tabs"
|
|
6418
6945
|
},
|
|
6419
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",
|
|
6420
6974
|
"tasks.taskActions.actionInProgress": "A task action is already in progress.",
|
|
6421
6975
|
"tasks.taskActions.actions": "Actions",
|
|
6422
6976
|
"tasks.taskActions.changeNotConfirmed": "The change was not confirmed. Refresh before trying again.",
|
|
@@ -6468,9 +7022,12 @@ var en = {
|
|
|
6468
7022
|
"tasks.taskData.label.feature": "Feature",
|
|
6469
7023
|
"tasks.taskData.label.hooked": "Hooked",
|
|
6470
7024
|
"tasks.taskData.label.in_progress": "In progress",
|
|
7025
|
+
"tasks.taskData.label.merged": "Merged",
|
|
7026
|
+
"tasks.taskData.label.needs_approval": "Needs approval",
|
|
6471
7027
|
"tasks.taskData.label.open": "Open",
|
|
6472
7028
|
"tasks.taskData.label.pinned": "Pinned",
|
|
6473
7029
|
"tasks.taskData.label.ready": "Ready",
|
|
7030
|
+
"tasks.taskData.label.ready_to_merge": "Ready to merge",
|
|
6474
7031
|
"tasks.taskData.label.task": "Task",
|
|
6475
7032
|
"tasks.taskData.low": "Low",
|
|
6476
7033
|
"tasks.taskData.noEpic": "No epic",
|
|
@@ -6556,6 +7113,49 @@ var en = {
|
|
|
6556
7113
|
"tasks.taskMarkdown.completedItem": "Completed item",
|
|
6557
7114
|
"tasks.taskMarkdown.image": "Image",
|
|
6558
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…",
|
|
6559
7159
|
"tasks.taskSections.latestEvents": {
|
|
6560
7160
|
one: "Showing the latest {count} event.",
|
|
6561
7161
|
other: "Showing the latest {count} events."
|
|
@@ -6592,6 +7192,7 @@ var en = {
|
|
|
6592
7192
|
"tasks.taskWorkspace.connectProject": "Connect a project",
|
|
6593
7193
|
"tasks.taskWorkspace.createTask": "Create task",
|
|
6594
7194
|
"tasks.taskWorkspace.createToPlan": "Create a task to start planning your work.",
|
|
7195
|
+
"tasks.taskWorkspace.fewerStatuses": "Show fewer statuses",
|
|
6595
7196
|
"tasks.taskWorkspace.filterEpic": "Filter epic",
|
|
6596
7197
|
"tasks.taskWorkspace.filterField": "Filter {field}",
|
|
6597
7198
|
"tasks.taskWorkspace.filters": "Filters",
|
|
@@ -6609,6 +7210,11 @@ var en = {
|
|
|
6609
7210
|
"tasks.taskWorkspace.noMatches": "No tasks match this view",
|
|
6610
7211
|
"tasks.taskWorkspace.noRemote": "No {label} remote is configured",
|
|
6611
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",
|
|
6612
7218
|
"tasks.taskWorkspace.priority": "Priority",
|
|
6613
7219
|
"tasks.taskWorkspace.projectTasks": "Project tasks",
|
|
6614
7220
|
"tasks.taskWorkspace.pullChanges": "Pull changes",
|
|
@@ -6629,6 +7235,10 @@ var en = {
|
|
|
6629
7235
|
"tasks.taskWorkspace.searchPlaceholder": "Search tasks, IDs, labels…",
|
|
6630
7236
|
"tasks.taskWorkspace.searchTasks": "Search tasks",
|
|
6631
7237
|
"tasks.taskWorkspace.shareLocalChanges": "Share your local task changes",
|
|
7238
|
+
"tasks.taskWorkspace.showTasks": {
|
|
7239
|
+
one: "Show 1 task",
|
|
7240
|
+
other: "Show {count} tasks"
|
|
7241
|
+
},
|
|
6632
7242
|
"tasks.taskWorkspace.showingCount": "Showing {shown} of {total}",
|
|
6633
7243
|
"tasks.taskWorkspace.sortTasks": "Sort tasks",
|
|
6634
7244
|
"tasks.taskWorkspace.startBud": "Start Bud from your web project to see its tasks.",
|
|
@@ -46679,6 +47289,7 @@ function taskFields(item, schema) {
|
|
|
46679
47289
|
//#endregion
|
|
46680
47290
|
//#region ../ui/src/lib/tasks/task-data.ts
|
|
46681
47291
|
var taskMatcher = createMatcher(taskRoutes.show.pattern);
|
|
47292
|
+
var agentMatcher = createMatcher(taskRoutes.agent.pattern);
|
|
46682
47293
|
var defaultTaskView = {
|
|
46683
47294
|
query: "",
|
|
46684
47295
|
fields: {},
|
|
@@ -46860,6 +47471,26 @@ function taskHref(id) {
|
|
|
46860
47471
|
}
|
|
46861
47472
|
}
|
|
46862
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
|
+
/**
|
|
46863
47494
|
* Reads the typed task place, or one older query selection on the board URL.
|
|
46864
47495
|
* @param location - The current location or legacy query link.
|
|
46865
47496
|
* @returns The validated task ID, or null for the board or an invalid link.
|
|
@@ -46868,7 +47499,7 @@ function selectedTask(location) {
|
|
|
46868
47499
|
try {
|
|
46869
47500
|
let url = new URL(location, "http://bud.invalid/tasks");
|
|
46870
47501
|
if (url.href.length > 32768) return null;
|
|
46871
|
-
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;
|
|
46872
47503
|
return value ? parseWorkItemRef({ id: value }).id : null;
|
|
46873
47504
|
} catch {
|
|
46874
47505
|
return null;
|
|
@@ -60614,23 +61245,13 @@ function CanvasWorkspace(handle) {
|
|
|
60614
61245
|
if (zoomLabel) zoomLabel.textContent = `${Math.round(scale * 100)}%`;
|
|
60615
61246
|
}
|
|
60616
61247
|
}),
|
|
60617
|
-
handle.props.
|
|
60618
|
-
role:
|
|
60619
|
-
class:
|
|
60620
|
-
children:
|
|
61248
|
+
handle.props.commentsUnavailable || notice ? /* @__PURE__ */ jsx("div", {
|
|
61249
|
+
role: "status",
|
|
61250
|
+
class: "absolute top-3 left-3 max-w-[calc(100%-24px)] bud-overlay rounded-lg px-3 py-2 text-muted",
|
|
61251
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
60621
61252
|
variant: "ui-caption",
|
|
60622
|
-
children: handle.props.
|
|
60623
|
-
})
|
|
60624
|
-
type: "button",
|
|
60625
|
-
class: "ml-2 underline",
|
|
60626
|
-
mix: on("click", () => {
|
|
60627
|
-
handle.props.onReload?.();
|
|
60628
|
-
}),
|
|
60629
|
-
children: /* @__PURE__ */ jsx(Text, {
|
|
60630
|
-
variant: "ui-caption",
|
|
60631
|
-
children: t$2("canvas.canvasWorkspace.reload")
|
|
60632
|
-
})
|
|
60633
|
-
}) : null]
|
|
61253
|
+
children: handle.props.commentsUnavailable || notice
|
|
61254
|
+
})
|
|
60634
61255
|
}) : null,
|
|
60635
61256
|
panel && !handle.props.commentsUnavailable ? /* @__PURE__ */ jsx(ConversationSidebar, {
|
|
60636
61257
|
threads: handle.props.snapshot.threads,
|
|
@@ -61114,6 +61735,85 @@ function TaskEditor(handle) {
|
|
|
61114
61735
|
};
|
|
61115
61736
|
}
|
|
61116
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
|
|
61117
61817
|
//#region ../ui/src/lib/tasks/task-card.tsx
|
|
61118
61818
|
var statusTone = {
|
|
61119
61819
|
backlog: "bg-violet-400",
|
|
@@ -61153,7 +61853,8 @@ function TaskCard(handle) {
|
|
|
61153
61853
|
let issue = taskFields(item, schema);
|
|
61154
61854
|
let linked = issue.dependencyCount ?? issue.dependencies.length;
|
|
61155
61855
|
let dependents = issue.dependentCount ?? issue.dependents.length;
|
|
61156
|
-
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;
|
|
61157
61858
|
let priority = /* @__PURE__ */ jsx(Text, {
|
|
61158
61859
|
variant: "ui-caption",
|
|
61159
61860
|
weight: "medium",
|
|
@@ -61162,6 +61863,7 @@ function TaskCard(handle) {
|
|
|
61162
61863
|
children: typeof issue.priority === "number" ? `P${issue.priority}` : issue.priorityLabel
|
|
61163
61864
|
});
|
|
61164
61865
|
let meta = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
61866
|
+
run ? /* @__PURE__ */ jsx(TaskRunBadge, { run }) : null,
|
|
61165
61867
|
ready ? /* @__PURE__ */ jsxs("span", {
|
|
61166
61868
|
class: "flex items-center gap-1 text-emerald-600 dark:text-emerald-400",
|
|
61167
61869
|
children: [/* @__PURE__ */ jsx(Icon$1, {
|
|
@@ -76838,6 +77540,7 @@ function TaskDetails(handle) {
|
|
|
76838
77540
|
]
|
|
76839
77541
|
}),
|
|
76840
77542
|
children: [
|
|
77543
|
+
handle.props.actions ?? null,
|
|
76841
77544
|
/* @__PURE__ */ jsx(IconButton, {
|
|
76842
77545
|
icon: "link",
|
|
76843
77546
|
label: t$2("tasks.taskDetails.copyTaskLink"),
|
|
@@ -76863,13 +77566,13 @@ function TaskDetails(handle) {
|
|
|
76863
77566
|
}),
|
|
76864
77567
|
/* @__PURE__ */ jsxs("div", {
|
|
76865
77568
|
"data-task-detail-scroll": "",
|
|
76866
|
-
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",
|
|
76867
77570
|
"aria-busy": loading ? "true" : "false",
|
|
76868
77571
|
mix: scrollFade("y"),
|
|
76869
77572
|
children: [
|
|
76870
77573
|
loading && !issue ? /* @__PURE__ */ jsx(Loader, { label: t$2("tasks.taskDetails.loadingTask") }) : null,
|
|
76871
77574
|
error ? /* @__PURE__ */ jsx("div", {
|
|
76872
|
-
class: "px-4 pb-6
|
|
77575
|
+
class: "px-4 pb-6 @min-[40rem]/page:px-6",
|
|
76873
77576
|
children: /* @__PURE__ */ jsxs(FieldCard, {
|
|
76874
77577
|
class: "max-w-2xl",
|
|
76875
77578
|
role: "alert",
|
|
@@ -76884,7 +77587,7 @@ function TaskDetails(handle) {
|
|
|
76884
77587
|
})
|
|
76885
77588
|
}) : null,
|
|
76886
77589
|
issue && item && detail ? /* @__PURE__ */ jsxs("div", {
|
|
76887
|
-
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",
|
|
76888
77591
|
children: [/* @__PURE__ */ jsxs("article", {
|
|
76889
77592
|
class: "flex min-w-0 flex-col gap-8",
|
|
76890
77593
|
children: [
|
|
@@ -77006,7 +77709,7 @@ function TaskDetails(handle) {
|
|
|
77006
77709
|
})
|
|
77007
77710
|
]
|
|
77008
77711
|
}), /* @__PURE__ */ jsxs("aside", {
|
|
77009
|
-
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",
|
|
77010
77713
|
children: [/* @__PURE__ */ jsx(Properties, {
|
|
77011
77714
|
...context,
|
|
77012
77715
|
item,
|
|
@@ -77191,6 +77894,8 @@ function TaskWorkspace(handle) {
|
|
|
77191
77894
|
}
|
|
77192
77895
|
return draft;
|
|
77193
77896
|
}
|
|
77897
|
+
let expanded = /* @__PURE__ */ new Set();
|
|
77898
|
+
let allColumns = false;
|
|
77194
77899
|
async function move(id, status) {
|
|
77195
77900
|
let issue = handle.props.snapshot?.items.find((candidate) => candidate.id === id);
|
|
77196
77901
|
if (!issue || !handle.props.operations || actionBusy || !handle.props.schema || taskRole(issue, handle.props.schema, "status") === status) return;
|
|
@@ -77283,7 +77988,12 @@ function TaskWorkspace(handle) {
|
|
|
77283
77988
|
restore = null;
|
|
77284
77989
|
handle.queueTask(() => scroll?.scrollTo(position));
|
|
77285
77990
|
}
|
|
77286
|
-
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;
|
|
77287
77997
|
let ready = new Set(snapshot?.items.filter((item) => item.ready).map((item) => item.id) ?? []);
|
|
77288
77998
|
let activeFilters = [
|
|
77289
77999
|
view.status,
|
|
@@ -77773,12 +78483,13 @@ function TaskWorkspace(handle) {
|
|
|
77773
78483
|
class: "flex w-full min-w-0 flex-col gap-px p-1",
|
|
77774
78484
|
children: group.issues.map(renderCard)
|
|
77775
78485
|
})
|
|
77776
|
-
})] }) : /* @__PURE__ */
|
|
78486
|
+
})] }) : /* @__PURE__ */ jsxs("div", {
|
|
77777
78487
|
class: "flex items-start gap-3",
|
|
77778
|
-
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) => {
|
|
77779
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;
|
|
77780
78491
|
return /* @__PURE__ */ jsx("section", {
|
|
77781
|
-
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"}`,
|
|
77782
78493
|
"aria-label": t$2("tasks.taskWorkspace.statusColumn", { status: status.label }),
|
|
77783
78494
|
mix: [on("dragover", (event) => {
|
|
77784
78495
|
if (event.dataTransfer?.types.includes("application/x-bud-task") && !actionBusy && status.value) {
|
|
@@ -77797,10 +78508,29 @@ function TaskWorkspace(handle) {
|
|
|
77797
78508
|
item: null,
|
|
77798
78509
|
status,
|
|
77799
78510
|
items: issues,
|
|
77800
|
-
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)
|
|
77801
78521
|
})
|
|
77802
78522
|
}, status.value);
|
|
77803
|
-
})
|
|
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]
|
|
77804
78534
|
})]
|
|
77805
78535
|
}, group.id)) : null
|
|
77806
78536
|
]
|
|
@@ -77832,7 +78562,7 @@ function TaskWorkspace(handle) {
|
|
|
77832
78562
|
}
|
|
77833
78563
|
})
|
|
77834
78564
|
}) : null,
|
|
77835
|
-
selectedId && schema ? /* @__PURE__ */ createElement(Page, {
|
|
78565
|
+
selectedId && schema ? (handle.props.pageFrame ?? ((page) => page))(/* @__PURE__ */ createElement(Page, {
|
|
77836
78566
|
...context(detail?.item.id === selectedId ? detail.item : null),
|
|
77837
78567
|
item: detail?.item.id === selectedId ? detail.item : null,
|
|
77838
78568
|
design: handle.props.design,
|
|
@@ -77849,10 +78579,876 @@ function TaskWorkspace(handle) {
|
|
|
77849
78579
|
loading: detailLoading,
|
|
77850
78580
|
error: detailError,
|
|
77851
78581
|
onSelect: select,
|
|
77852
|
-
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")
|
|
77853
79140
|
}) : null
|
|
77854
79141
|
] })
|
|
77855
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
|
+
});
|
|
77856
79452
|
};
|
|
77857
79453
|
}
|
|
77858
79454
|
//#endregion
|
|
@@ -83583,7 +85179,7 @@ function ItemDiscussion(handle) {
|
|
|
83583
85179
|
*/
|
|
83584
85180
|
function ThreadTaskLinks(handle) {
|
|
83585
85181
|
return () => {
|
|
83586
|
-
let { itemIds, items, href, onEdit, busy } = handle.props;
|
|
85182
|
+
let { itemIds, items, href, onEdit, busy, schema, runs } = handle.props;
|
|
83587
85183
|
if (!itemIds.length && !onEdit) return null;
|
|
83588
85184
|
let names = new Map(items.map((item) => [item.id, item]));
|
|
83589
85185
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -83595,15 +85191,33 @@ function ThreadTaskLinks(handle) {
|
|
|
83595
85191
|
href: href(id),
|
|
83596
85192
|
title: item?.title ?? id,
|
|
83597
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",
|
|
83598
|
-
children: [
|
|
83599
|
-
|
|
83600
|
-
|
|
83601
|
-
|
|
83602
|
-
|
|
83603
|
-
|
|
83604
|
-
|
|
83605
|
-
|
|
83606
|
-
|
|
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
|
+
]
|
|
83607
85221
|
}, id);
|
|
83608
85222
|
}), onEdit ? /* @__PURE__ */ jsx(IconButton, {
|
|
83609
85223
|
icon: "tasks",
|
|
@@ -84150,6 +85764,11 @@ var endpoints = [
|
|
|
84150
85764
|
write: true,
|
|
84151
85765
|
list: false
|
|
84152
85766
|
},
|
|
85767
|
+
{
|
|
85768
|
+
route: routes.comments.makeTask,
|
|
85769
|
+
write: true,
|
|
85770
|
+
list: false
|
|
85771
|
+
},
|
|
84153
85772
|
{
|
|
84154
85773
|
route: routes.comments.deleteMessage,
|
|
84155
85774
|
write: true,
|
|
@@ -84783,4 +86402,4 @@ function unavailableComments(message = commentsUnavailable) {
|
|
|
84783
86402
|
};
|
|
84784
86403
|
}
|
|
84785
86404
|
//#endregion
|
|
84786
|
-
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 };
|