codexmate 0.0.55 → 0.0.57

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.
Files changed (49) hide show
  1. package/README.md +2 -0
  2. package/README.vi.md +2 -0
  3. package/README.zh.md +2 -0
  4. package/cli/local-bridge.js +221 -22
  5. package/cli.js +797 -134
  6. package/lib/task-orchestrator.js +90 -21
  7. package/lib/task-workspace-chat.js +292 -0
  8. package/package.json +2 -2
  9. package/web-ui/app.js +57 -129
  10. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  11. package/web-ui/modules/app.computed.session.mjs +210 -0
  12. package/web-ui/modules/app.methods.agents.mjs +3 -0
  13. package/web-ui/modules/app.methods.claude-config.mjs +178 -22
  14. package/web-ui/modules/app.methods.codex-config.mjs +294 -65
  15. package/web-ui/modules/app.methods.navigation.mjs +71 -84
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +15 -1
  18. package/web-ui/modules/app.methods.runtime.mjs +7 -2
  19. package/web-ui/modules/app.methods.session-actions.mjs +25 -12
  20. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  21. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  22. package/web-ui/modules/app.methods.startup-claude.mjs +35 -17
  23. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  24. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  25. package/web-ui/modules/app.methods.web-ui-preferences.mjs +415 -68
  26. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  27. package/web-ui/modules/i18n/locales/en.mjs +187 -28
  28. package/web-ui/modules/i18n/locales/ja.mjs +184 -25
  29. package/web-ui/modules/i18n/locales/vi.mjs +186 -33
  30. package/web-ui/modules/i18n/locales/zh-tw.mjs +187 -28
  31. package/web-ui/modules/i18n/locales/zh.mjs +189 -30
  32. package/web-ui/modules/i18n.mjs +5 -12
  33. package/web-ui/modules/provider-default-names.mjs +25 -0
  34. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  35. package/web-ui/partials/index/layout-header.html +37 -14
  36. package/web-ui/partials/index/modal-health-check.html +69 -5
  37. package/web-ui/partials/index/panel-config-codex.html +2 -2
  38. package/web-ui/partials/index/panel-orchestration.html +489 -282
  39. package/web-ui/partials/index/panel-sessions.html +97 -17
  40. package/web-ui/res/web-ui-render.precompiled.js +1423 -732
  41. package/web-ui/session-helpers.mjs +4 -1
  42. package/web-ui/styles/layout-shell.css +157 -1
  43. package/web-ui/styles/navigation-panels.css +11 -0
  44. package/web-ui/styles/responsive.css +98 -0
  45. package/web-ui/styles/sessions-preview.css +212 -2
  46. package/web-ui/styles/sessions-toolbar-trash.css +61 -18
  47. package/web-ui/styles/skills-list.css +122 -0
  48. package/web-ui/styles/task-orchestration.css +2161 -4
  49. package/web-ui/styles/titles-cards.css +52 -0
@@ -103,16 +103,16 @@ return function render(_ctx, _cache) {
103
103
  ? (_openBlock(), _createElementBlock("button", {
104
104
  key: 0,
105
105
  type: "button",
106
- class: _normalizeClass(["top-tab", { active: _ctx.isMainTabNavActive('orchestration') }]),
106
+ class: "top-tab top-tab-disabled",
107
107
  id: "tab-orchestration",
108
108
  role: "tab",
109
109
  "data-main-tab": "orchestration",
110
- tabindex: _ctx.mainTab === 'orchestration' ? 0 : -1,
111
- "aria-selected": _ctx.mainTab === 'orchestration',
112
- "aria-controls": "panel-orchestration",
113
- onPointerdown: $event => (_ctx.onMainTabPointerDown('orchestration', $event)),
114
- onClick: $event => (_ctx.onMainTabClick('orchestration', $event))
115
- }, _toDisplayString(_ctx.t('tab.orchestration')), 43 /* TEXT, CLASS, PROPS, NEED_HYDRATION */, ["tabindex", "aria-selected", "onPointerdown", "onClick"]))
110
+ tabindex: "-1",
111
+ "aria-selected": "false",
112
+ "aria-disabled": "true",
113
+ disabled: "",
114
+ title: _ctx.t('orchestration.rebuilding.body')
115
+ }, _toDisplayString(_ctx.t('tab.orchestration')), 9 /* TEXT, PROPS */, ["title"]))
116
116
  : _createCommentVNode("v-if", true),
117
117
  _createElementVNode("button", {
118
118
  type: "button",
@@ -178,13 +178,23 @@ return function render(_ctx, _cache) {
178
178
  ]))
179
179
  : _createCommentVNode("v-if", true),
180
180
  _createElementVNode("div", {
181
- class: _normalizeClass(['app-shell', { standalone: _ctx.sessionStandalone }])
181
+ class: _normalizeClass(['app-shell', { standalone: _ctx.sessionStandalone, 'sidebar-collapsed': _ctx.sidebarCollapsed }])
182
182
  }, [
183
183
  (!_ctx.sessionStandalone)
184
184
  ? (_openBlock(), _createElementBlock("aside", {
185
185
  key: 0,
186
186
  class: "side-rail"
187
187
  }, [
188
+ _createElementVNode("button", {
189
+ type: "button",
190
+ class: "side-rail-collapse-toggle",
191
+ "aria-pressed": _ctx.sidebarCollapsed ? 'true' : 'false',
192
+ "aria-label": _ctx.sidebarCollapsed ? _ctx.t('side.expand') : _ctx.t('side.collapse'),
193
+ title: _ctx.sidebarCollapsed ? _ctx.t('side.expand') : _ctx.t('side.collapse'),
194
+ onClick: _ctx.toggleSidebarCollapsed
195
+ }, [
196
+ _createElementVNode("span", { "aria-hidden": "true" }, _toDisplayString(_ctx.sidebarCollapsed ? '›' : '‹'), 1 /* TEXT */)
197
+ ], 8 /* PROPS */, ["aria-pressed", "aria-label", "title", "onClick"]),
188
198
  _createElementVNode("div", { class: "brand-block" }, [
189
199
  _createElementVNode("div", { class: "brand-head" }, [
190
200
  _createElementVNode("img", {
@@ -227,6 +237,10 @@ return function render(_ctx, _cache) {
227
237
  onPointerdown: $event => (_ctx.onMainTabPointerDown('dashboard', $event)),
228
238
  onClick: $event => (_ctx.onMainTabClick('dashboard', $event))
229
239
  }, [
240
+ _createElementVNode("span", {
241
+ class: "side-item-icon",
242
+ "aria-hidden": "true"
243
+ }, "⌂"),
230
244
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.overview.doctor')), 1 /* TEXT */),
231
245
  _createElementVNode("div", { class: "side-item-meta" }, [
232
246
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.overview.doctor.meta')), 1 /* TEXT */),
@@ -248,6 +262,10 @@ return function render(_ctx, _cache) {
248
262
  onPointerdown: $event => (_ctx.onMainTabPointerDown('docs', $event)),
249
263
  onClick: $event => (_ctx.onMainTabClick('docs', $event))
250
264
  }, [
265
+ _createElementVNode("span", {
266
+ class: "side-item-icon",
267
+ "aria-hidden": "true"
268
+ }, "?"),
251
269
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.docs.cliInstall')), 1 /* TEXT */),
252
270
  _createElementVNode("div", { class: "side-item-meta" }, [
253
271
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.docs.cliInstall.meta')), 1 /* TEXT */),
@@ -270,6 +288,10 @@ return function render(_ctx, _cache) {
270
288
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('codex', $event)),
271
289
  onClick: $event => (_ctx.onConfigTabClick('codex', $event))
272
290
  }, [
291
+ _createElementVNode("span", {
292
+ class: "side-item-icon",
293
+ "aria-hidden": "true"
294
+ }, "C"),
273
295
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.codex')), 1 /* TEXT */),
274
296
  _createElementVNode("div", { class: "side-item-meta" }, [
275
297
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.codex.meta')), 1 /* TEXT */),
@@ -287,6 +309,10 @@ return function render(_ctx, _cache) {
287
309
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('claude', $event)),
288
310
  onClick: $event => (_ctx.onConfigTabClick('claude', $event))
289
311
  }, [
312
+ _createElementVNode("span", {
313
+ class: "side-item-icon",
314
+ "aria-hidden": "true"
315
+ }, "A"),
290
316
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.claude')), 1 /* TEXT */),
291
317
  _createElementVNode("div", { class: "side-item-meta" }, [
292
318
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.claude.meta')), 1 /* TEXT */),
@@ -304,6 +330,10 @@ return function render(_ctx, _cache) {
304
330
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('openclaw', $event)),
305
331
  onClick: $event => (_ctx.onConfigTabClick('openclaw', $event))
306
332
  }, [
333
+ _createElementVNode("span", {
334
+ class: "side-item-icon",
335
+ "aria-hidden": "true"
336
+ }, "O"),
307
337
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.openclaw')), 1 /* TEXT */),
308
338
  _createElementVNode("div", { class: "side-item-meta" }, [
309
339
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.openclaw.meta')), 1 /* TEXT */),
@@ -321,6 +351,10 @@ return function render(_ctx, _cache) {
321
351
  onPointerdown: $event => (_ctx.onConfigTabPointerDown('opencode', $event)),
322
352
  onClick: $event => (_ctx.onConfigTabClick('opencode', $event))
323
353
  }, [
354
+ _createElementVNode("span", {
355
+ class: "side-item-icon",
356
+ "aria-hidden": "true"
357
+ }, "N"),
324
358
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.config.opencode')), 1 /* TEXT */),
325
359
  _createElementVNode("div", { class: "side-item-meta" }, [
326
360
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.config.opencode.meta')), 1 /* TEXT */),
@@ -345,6 +379,10 @@ return function render(_ctx, _cache) {
345
379
  onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
346
380
  onClick: $event => {_ctx.switchPromptsSubTab('codex'); _ctx.onMainTabClick('prompts')}
347
381
  }, [
382
+ _createElementVNode("span", {
383
+ class: "side-item-icon",
384
+ "aria-hidden": "true"
385
+ }, "P"),
348
386
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.agents')), 1 /* TEXT */),
349
387
  _createElementVNode("div", { class: "side-item-meta" }, [
350
388
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.agents.meta')), 1 /* TEXT */)
@@ -359,6 +397,10 @@ return function render(_ctx, _cache) {
359
397
  onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
360
398
  onClick: $event => {_ctx.switchPromptsSubTab('claude-project'); _ctx.onMainTabClick('prompts')}
361
399
  }, [
400
+ _createElementVNode("span", {
401
+ class: "side-item-icon",
402
+ "aria-hidden": "true"
403
+ }, "M"),
362
404
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.claude')), 1 /* TEXT */),
363
405
  _createElementVNode("div", { class: "side-item-meta" }, [
364
406
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.claude.meta')), 1 /* TEXT */)
@@ -379,6 +421,10 @@ return function render(_ctx, _cache) {
379
421
  onPointerdown: $event => (_ctx.onMainTabPointerDown('sessions', $event)),
380
422
  onClick: $event => (_ctx.onMainTabClick('sessions', $event))
381
423
  }, [
424
+ _createElementVNode("span", {
425
+ class: "side-item-icon",
426
+ "aria-hidden": "true"
427
+ }, "S"),
382
428
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.sessions.browser')), 1 /* TEXT */),
383
429
  _createElementVNode("div", { class: "side-item-meta" }, [
384
430
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.sessions.browser.meta')), 1 /* TEXT */),
@@ -393,6 +439,10 @@ return function render(_ctx, _cache) {
393
439
  onPointerdown: $event => (_ctx.onMainTabPointerDown('usage', $event)),
394
440
  onClick: $event => (_ctx.onMainTabClick('usage', $event))
395
441
  }, [
442
+ _createElementVNode("span", {
443
+ class: "side-item-icon",
444
+ "aria-hidden": "true"
445
+ }, "↗"),
396
446
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.usage')), 1 /* TEXT */),
397
447
  _createElementVNode("div", { class: "side-item-meta" }, [
398
448
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.usage.meta')), 1 /* TEXT */),
@@ -411,17 +461,21 @@ return function render(_ctx, _cache) {
411
461
  _createElementVNode("button", {
412
462
  id: "side-tab-orchestration",
413
463
  "data-main-tab": "orchestration",
414
- "aria-current": _ctx.mainTab === 'orchestration' ? 'page' : null,
415
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('orchestration') }]),
416
- onPointerdown: $event => (_ctx.onMainTabPointerDown('orchestration', $event)),
417
- onClick: $event => (_ctx.onMainTabClick('orchestration', $event))
464
+ class: "side-item side-item-disabled",
465
+ "aria-disabled": "true",
466
+ disabled: "",
467
+ title: _ctx.t('orchestration.rebuilding.body')
418
468
  }, [
469
+ _createElementVNode("span", {
470
+ class: "side-item-icon",
471
+ "aria-hidden": "true"
472
+ }, "T"),
419
473
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.orchestration')), 1 /* TEXT */),
420
474
  _createElementVNode("div", { class: "side-item-meta" }, [
421
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.orchestration.meta')), 1 /* TEXT */),
422
- _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.queueStats', { running: _ctx.taskOrchestrationQueueStats.running, queued: _ctx.taskOrchestrationQueueStats.queued })), 1 /* TEXT */)
475
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.rebuilding.status')), 1 /* TEXT */),
476
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.rebuilding.title')), 1 /* TEXT */)
423
477
  ])
424
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
478
+ ], 8 /* PROPS */, ["title"])
425
479
  ], 8 /* PROPS */, ["aria-label"]))
426
480
  : _createCommentVNode("v-if", true),
427
481
  _createElementVNode("div", {
@@ -438,6 +492,10 @@ return function render(_ctx, _cache) {
438
492
  onPointerdown: $event => (_ctx.onMainTabPointerDown('market', $event)),
439
493
  onClick: $event => (_ctx.onMainTabClick('market', $event))
440
494
  }, [
495
+ _createElementVNode("span", {
496
+ class: "side-item-icon",
497
+ "aria-hidden": "true"
498
+ }, "★"),
441
499
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.market')), 1 /* TEXT */),
442
500
  _createElementVNode("div", { class: "side-item-meta" }, [
443
501
  _createElementVNode("span", null, _toDisplayString(_ctx.t('skills.localLabel', { target: _ctx.skillsTargetLabel })), 1 /* TEXT */),
@@ -459,6 +517,10 @@ return function render(_ctx, _cache) {
459
517
  onPointerdown: $event => (_ctx.onMainTabPointerDown('plugins', $event)),
460
518
  onClick: $event => (_ctx.onMainTabClick('plugins', $event))
461
519
  }, [
520
+ _createElementVNode("span", {
521
+ class: "side-item-icon",
522
+ "aria-hidden": "true"
523
+ }, "◇"),
462
524
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.plugins.tools')), 1 /* TEXT */),
463
525
  _createElementVNode("div", { class: "side-item-meta" }, [
464
526
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.plugins.tools.meta')), 1 /* TEXT */),
@@ -480,6 +542,10 @@ return function render(_ctx, _cache) {
480
542
  onPointerdown: $event => (_ctx.onMainTabPointerDown('settings', $event)),
481
543
  onClick: $event => (_ctx.onMainTabClick('settings', $event))
482
544
  }, [
545
+ _createElementVNode("span", {
546
+ class: "side-item-icon",
547
+ "aria-hidden": "true"
548
+ }, "⚙"),
483
549
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.system.settings')), 1 /* TEXT */),
484
550
  _createElementVNode("div", { class: "side-item-meta" }, [
485
551
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.system.settings.meta')), 1 /* TEXT */)
@@ -493,6 +559,10 @@ return function render(_ctx, _cache) {
493
559
  onPointerdown: $event => (_ctx.onMainTabPointerDown('trash', $event)),
494
560
  onClick: $event => (_ctx.onMainTabClick('trash', $event))
495
561
  }, [
562
+ _createElementVNode("span", {
563
+ class: "side-item-icon",
564
+ "aria-hidden": "true"
565
+ }, "⌫"),
496
566
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('settings.trash.title')), 1 /* TEXT */),
497
567
  _createElementVNode("div", { class: "side-item-meta" }, [
498
568
  _createElementVNode("span", null, _toDisplayString(_ctx.t('settings.trash.meta')), 1 /* TEXT */),
@@ -1115,7 +1185,7 @@ return function render(_ctx, _cache) {
1115
1185
  ? (_openBlock(), _createElementBlock("button", {
1116
1186
  key: 0,
1117
1187
  class: "btn-add",
1118
- onClick: $event => {_ctx.showAddProviderKey = false; _ctx.showAddModal = true},
1188
+ onClick: _ctx.openAddProviderModal,
1119
1189
  disabled: !_ctx.isToolConfigWriteAllowed('codex')
1120
1190
  }, [
1121
1191
  (_openBlock(), _createElementBlock("svg", {
@@ -1373,7 +1443,7 @@ return function render(_ctx, _cache) {
1373
1443
  onClick: _ctx.runHealthCheck,
1374
1444
  disabled: _ctx.healthCheckLoading || _ctx.loading || !!_ctx.initError
1375
1445
  }, _toDisplayString(_ctx.healthCheckLoading ? _ctx.t('config.health.running') : _ctx.t('config.health.run')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
1376
- _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('config.health.hint')), 1 /* TEXT */)
1446
+ _createElementVNode("div", { class: "config-template-hint" }, _toDisplayString(_ctx.t('config.health.codexHint')), 1 /* TEXT */)
1377
1447
  ])
1378
1448
  ], 64 /* STABLE_FRAGMENT */))
1379
1449
  : _createCommentVNode("v-if", true),
@@ -2749,7 +2819,7 @@ return function render(_ctx, _cache) {
2749
2819
  ]))
2750
2820
  ]))
2751
2821
  : (_openBlock(), _createElementBlock("div", { key: 1 }, [
2752
- _createElementVNode("div", { class: "selector-section" }, [
2822
+ _createElementVNode("div", { class: "selector-section session-selector-section" }, [
2753
2823
  _createElementVNode("div", {
2754
2824
  class: "selector-header",
2755
2825
  style: {"display":"none"}
@@ -2757,29 +2827,30 @@ return function render(_ctx, _cache) {
2757
2827
  _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('sessions.sourceTitle')), 1 /* TEXT */),
2758
2828
  _createElementVNode("div", { class: "selector-actions sessions-header-actions" })
2759
2829
  ]),
2830
+ _createElementVNode("div", { class: "session-source-tabs-row" }, [
2831
+ _createElementVNode("div", {
2832
+ class: "session-source-pills",
2833
+ role: "group",
2834
+ "aria-label": _ctx.t('sessions.sourceTitle')
2835
+ }, [
2836
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionSourceOptions, (src) => {
2837
+ return (_openBlock(), _createElementBlock("button", {
2838
+ key: src.value,
2839
+ class: _normalizeClass(['session-source-pill', { active: _ctx.sessionFilterSource === src.value }]),
2840
+ "data-source": src.value,
2841
+ onClick: $event => (_ctx.setSessionSource(src.value)),
2842
+ disabled: _ctx.sessionsLoading,
2843
+ "aria-pressed": _ctx.sessionFilterSource === src.value,
2844
+ type: "button"
2845
+ }, [
2846
+ _createElementVNode("span", { class: "session-source-pill-dot" }),
2847
+ _createElementVNode("span", { class: "session-source-pill-label" }, _toDisplayString(src.label), 1 /* TEXT */)
2848
+ ], 10 /* CLASS, PROPS */, ["data-source", "onClick", "disabled", "aria-pressed"]))
2849
+ }), 128 /* KEYED_FRAGMENT */))
2850
+ ], 8 /* PROPS */, ["aria-label"])
2851
+ ]),
2760
2852
  _createElementVNode("div", { class: "session-toolbar" }, [
2761
2853
  _createElementVNode("div", { class: "session-toolbar-group session-toolbar-primary" }, [
2762
- _createElementVNode("div", {
2763
- class: "session-source-pills",
2764
- role: "radiogroup",
2765
- "aria-label": "Session source"
2766
- }, [
2767
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionSourceOptions, (src) => {
2768
- return (_openBlock(), _createElementBlock("button", {
2769
- key: src.value,
2770
- class: _normalizeClass(['session-source-pill', { active: _ctx.sessionFilterSource === src.value }]),
2771
- "data-source": src.value,
2772
- onClick: $event => (_ctx.setSessionSource(src.value)),
2773
- disabled: _ctx.sessionsLoading,
2774
- "aria-pressed": _ctx.sessionFilterSource === src.value,
2775
- role: "radio",
2776
- type: "button"
2777
- }, [
2778
- _createElementVNode("span", { class: "session-source-pill-dot" }),
2779
- _createElementVNode("span", { class: "session-source-pill-label" }, _toDisplayString(src.label), 1 /* TEXT */)
2780
- ], 10 /* CLASS, PROPS */, ["data-source", "onClick", "disabled", "aria-pressed"]))
2781
- }), 128 /* KEYED_FRAGMENT */))
2782
- ]),
2783
2854
  _withDirectives(_createElementVNode("select", {
2784
2855
  class: "session-path-select",
2785
2856
  "onUpdate:modelValue": $event => ((_ctx.sessionPathFilter) = $event),
@@ -2938,7 +3009,7 @@ return function render(_ctx, _cache) {
2938
3009
  }, [
2939
3010
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.visibleSessionsList, (session, __, ___, _cached) => {
2940
3011
  const _memo = ([_ctx.activeSessionExportKey === _ctx.getSessionExportKey(session), session.messageCount, session.updatedAt, session.title, session.sourceLabel, session.cwd, _ctx.isSessionPinned(session), _ctx.sessionsLoading, session.match && session.match.count])
2941
- if (_cached && _cached.key === session.source + '-' + session.sessionId + '-' + session.filePath && _isMemoSame(_cached, _memo)) return _cached
3012
+ if (_cached && _cached.el && _cached.key === session.source + '-' + session.sessionId + '-' + session.filePath && _isMemoSame(_cached, _memo)) return _cached
2942
3013
  const _item = (_openBlock(), _createElementBlock("div", {
2943
3014
  key: session.source + '-' + session.sessionId + '-' + session.filePath,
2944
3015
  class: _normalizeClass([
@@ -3173,6 +3244,27 @@ return function render(_ctx, _cache) {
3173
3244
  _createElementVNode("path", { d: "M2.5 12v1.5a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V12" })
3174
3245
  ]))
3175
3246
  ], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]),
3247
+ _createElementVNode("button", {
3248
+ class: "btn-session-open session-brief-copy",
3249
+ onClick: _ctx.copySessionWorkspaceBrief,
3250
+ disabled: !_ctx.activeSessionWorkspaceSummary.available,
3251
+ title: _ctx.t('sessions.workspace.copy'),
3252
+ "aria-label": _ctx.t('sessions.workspace.copy')
3253
+ }, [
3254
+ (_openBlock(), _createElementBlock("svg", {
3255
+ viewBox: "0 0 16 16",
3256
+ fill: "none",
3257
+ stroke: "currentColor",
3258
+ "stroke-width": "1.8",
3259
+ "stroke-linecap": "round",
3260
+ "stroke-linejoin": "round"
3261
+ }, [
3262
+ _createElementVNode("path", { d: "M4 2.5h6.5L13 5v8.5H4z" }),
3263
+ _createElementVNode("path", { d: "M10.5 2.5V5H13" }),
3264
+ _createElementVNode("path", { d: "M6 8h5" }),
3265
+ _createElementVNode("path", { d: "M6 10.5h5" })
3266
+ ]))
3267
+ ], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]),
3176
3268
  _createElementVNode("div", { class: "session-link-group" }, [
3177
3269
  _createElementVNode("button", {
3178
3270
  class: "btn-session-open",
@@ -3270,6 +3362,140 @@ return function render(_ctx, _cache) {
3270
3362
  key: 5,
3271
3363
  class: "session-preview-body"
3272
3364
  }, [
3365
+ (_ctx.activeSessionWorkspaceSummary.available)
3366
+ ? (_openBlock(), _createElementBlock("section", {
3367
+ key: 0,
3368
+ class: "session-workspace",
3369
+ "aria-label": _ctx.t('sessions.workspace.title')
3370
+ }, [
3371
+ _createElementVNode("div", { class: "session-workspace-header" }, [
3372
+ _createElementVNode("div", null, [
3373
+ _createElementVNode("div", { class: "session-workspace-kicker" }, _toDisplayString(_ctx.t('sessions.workspace.kicker')), 1 /* TEXT */),
3374
+ _createElementVNode("h3", { class: "session-workspace-title" }, _toDisplayString(_ctx.t('sessions.workspace.title')), 1 /* TEXT */),
3375
+ _createElementVNode("p", { class: "session-workspace-subtitle" }, _toDisplayString(_ctx.t('sessions.workspace.subtitle', { count: _ctx.activeSessionWorkspaceSummary.messageCount })), 1 /* TEXT */)
3376
+ ]),
3377
+ _createElementVNode("button", {
3378
+ class: "btn-mini",
3379
+ type: "button",
3380
+ onClick: _ctx.copySessionWorkspaceBrief
3381
+ }, _toDisplayString(_ctx.t('sessions.workspace.copy')), 9 /* TEXT, PROPS */, ["onClick"])
3382
+ ]),
3383
+ _createElementVNode("div", { class: "session-workspace-metrics" }, [
3384
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.metrics, (metric) => {
3385
+ return (_openBlock(), _createElementBlock("div", {
3386
+ key: metric.key,
3387
+ class: "session-workspace-metric"
3388
+ }, [
3389
+ _createElementVNode("span", { class: "session-workspace-metric-value" }, _toDisplayString(metric.value), 1 /* TEXT */),
3390
+ _createElementVNode("span", { class: "session-workspace-metric-label" }, _toDisplayString(metric.label), 1 /* TEXT */)
3391
+ ]))
3392
+ }), 128 /* KEYED_FRAGMENT */))
3393
+ ]),
3394
+ _createElementVNode("div", { class: "session-workspace-grid" }, [
3395
+ _createElementVNode("div", { class: "session-workspace-card session-workspace-card-wide" }, [
3396
+ _createElementVNode("div", { class: "session-workspace-card-title" }, _toDisplayString(_ctx.t('sessions.workspace.signals')), 1 /* TEXT */),
3397
+ (_ctx.activeSessionWorkspaceSummary.signals.length)
3398
+ ? (_openBlock(), _createElementBlock("ul", {
3399
+ key: 0,
3400
+ class: "session-workspace-list"
3401
+ }, [
3402
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.signals, (item, index) => {
3403
+ return (_openBlock(), _createElementBlock("li", {
3404
+ key: 'signal-' + index
3405
+ }, _toDisplayString(item), 1 /* TEXT */))
3406
+ }), 128 /* KEYED_FRAGMENT */))
3407
+ ]))
3408
+ : (_openBlock(), _createElementBlock("div", {
3409
+ key: 1,
3410
+ class: "session-workspace-empty"
3411
+ }, _toDisplayString(_ctx.t('sessions.workspace.empty')), 1 /* TEXT */))
3412
+ ]),
3413
+ _createElementVNode("div", { class: "session-workspace-card" }, [
3414
+ _createElementVNode("div", { class: "session-workspace-card-title" }, _toDisplayString(_ctx.t('sessions.workspace.commands')), 1 /* TEXT */),
3415
+ (_ctx.activeSessionWorkspaceSummary.commands.length)
3416
+ ? (_openBlock(), _createElementBlock("ul", {
3417
+ key: 0,
3418
+ class: "session-workspace-list session-workspace-code-list"
3419
+ }, [
3420
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.commands, (item, index) => {
3421
+ return (_openBlock(), _createElementBlock("li", {
3422
+ key: 'command-' + index
3423
+ }, [
3424
+ _createElementVNode("code", null, _toDisplayString(item), 1 /* TEXT */)
3425
+ ]))
3426
+ }), 128 /* KEYED_FRAGMENT */))
3427
+ ]))
3428
+ : (_openBlock(), _createElementBlock("div", {
3429
+ key: 1,
3430
+ class: "session-workspace-empty"
3431
+ }, _toDisplayString(_ctx.t('sessions.workspace.noneCommands')), 1 /* TEXT */))
3432
+ ]),
3433
+ _createElementVNode("div", { class: "session-workspace-card" }, [
3434
+ _createElementVNode("div", { class: "session-workspace-card-title" }, _toDisplayString(_ctx.t('sessions.workspace.files')), 1 /* TEXT */),
3435
+ (_ctx.activeSessionWorkspaceSummary.files.length)
3436
+ ? (_openBlock(), _createElementBlock("ul", {
3437
+ key: 0,
3438
+ class: "session-workspace-list session-workspace-code-list"
3439
+ }, [
3440
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.files, (item, index) => {
3441
+ return (_openBlock(), _createElementBlock("li", {
3442
+ key: 'file-' + index
3443
+ }, [
3444
+ _createElementVNode("code", null, _toDisplayString(item), 1 /* TEXT */)
3445
+ ]))
3446
+ }), 128 /* KEYED_FRAGMENT */))
3447
+ ]))
3448
+ : (_openBlock(), _createElementBlock("div", {
3449
+ key: 1,
3450
+ class: "session-workspace-empty"
3451
+ }, _toDisplayString(_ctx.t('sessions.workspace.noneFiles')), 1 /* TEXT */))
3452
+ ]),
3453
+ _createElementVNode("div", { class: "session-workspace-card" }, [
3454
+ _createElementVNode("div", { class: "session-workspace-card-title" }, _toDisplayString(_ctx.t('sessions.workspace.links')), 1 /* TEXT */),
3455
+ (_ctx.activeSessionWorkspaceSummary.links.length)
3456
+ ? (_openBlock(), _createElementBlock("ul", {
3457
+ key: 0,
3458
+ class: "session-workspace-list"
3459
+ }, [
3460
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.links, (item, index) => {
3461
+ return (_openBlock(), _createElementBlock("li", {
3462
+ key: 'link-' + index
3463
+ }, _toDisplayString(item), 1 /* TEXT */))
3464
+ }), 128 /* KEYED_FRAGMENT */))
3465
+ ]))
3466
+ : (_openBlock(), _createElementBlock("div", {
3467
+ key: 1,
3468
+ class: "session-workspace-empty"
3469
+ }, _toDisplayString(_ctx.t('sessions.workspace.noneLinks')), 1 /* TEXT */))
3470
+ ]),
3471
+ _createElementVNode("div", {
3472
+ class: _normalizeClass(["session-workspace-card", { 'session-workspace-card-alert': _ctx.activeSessionWorkspaceSummary.risks.length || _ctx.activeSessionWorkspaceSummary.nextSteps.length }])
3473
+ }, [
3474
+ _createElementVNode("div", { class: "session-workspace-card-title" }, _toDisplayString(_ctx.t('sessions.workspace.risks')), 1 /* TEXT */),
3475
+ (_ctx.activeSessionWorkspaceSummary.risks.length || _ctx.activeSessionWorkspaceSummary.nextSteps.length)
3476
+ ? (_openBlock(), _createElementBlock("ul", {
3477
+ key: 0,
3478
+ class: "session-workspace-list"
3479
+ }, [
3480
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.risks, (item, index) => {
3481
+ return (_openBlock(), _createElementBlock("li", {
3482
+ key: 'risk-' + index
3483
+ }, _toDisplayString(item), 1 /* TEXT */))
3484
+ }), 128 /* KEYED_FRAGMENT */)),
3485
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionWorkspaceSummary.nextSteps, (item, index) => {
3486
+ return (_openBlock(), _createElementBlock("li", {
3487
+ key: 'next-' + index
3488
+ }, _toDisplayString(item), 1 /* TEXT */))
3489
+ }), 128 /* KEYED_FRAGMENT */))
3490
+ ]))
3491
+ : (_openBlock(), _createElementBlock("div", {
3492
+ key: 1,
3493
+ class: "session-workspace-empty"
3494
+ }, _toDisplayString(_ctx.t('sessions.workspace.noneRisks')), 1 /* TEXT */))
3495
+ ], 2 /* CLASS */)
3496
+ ])
3497
+ ], 8 /* PROPS */, ["aria-label"]))
3498
+ : _createCommentVNode("v-if", true),
3273
3499
  _createElementVNode("div", { class: "session-preview-messages" }, [
3274
3500
  (_ctx.activeSessionDetailClipped)
3275
3501
  ? (_openBlock(), _createElementBlock("div", {
@@ -3277,9 +3503,9 @@ return function render(_ctx, _cache) {
3277
3503
  class: "session-item-sub session-item-wrap"
3278
3504
  }, _toDisplayString(_ctx.t('sessions.preview.clipped', { count: _ctx.activeSessionMessages.length })), 1 /* TEXT */))
3279
3505
  : _createCommentVNode("v-if", true),
3280
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionMessages, (msg, idx, ___, _cached) => {
3506
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionVisibleMessages, (msg, idx, ___, _cached) => {
3281
3507
  const _memo = ([msg.text, msg.timestamp, msg.roleLabel, msg.normalizedRole])
3282
- if (_cached && _cached.key === _ctx.getRecordRenderKey(msg, idx) && _isMemoSame(_cached, _memo)) return _cached
3508
+ if (_cached && _cached.el && _cached.key === _ctx.getRecordRenderKey(msg, idx) && _isMemoSame(_cached, _memo)) return _cached
3283
3509
  const _item = (_openBlock(), _createElementBlock("div", {
3284
3510
  key: _ctx.getRecordRenderKey(msg, idx),
3285
3511
  "data-message-key": _ctx.getRecordRenderKey(msg, idx),
@@ -3300,7 +3526,21 @@ return function render(_ctx, _cache) {
3300
3526
  ], 10 /* CLASS, PROPS */, ["data-message-key"]))
3301
3527
  _item.memo = _memo
3302
3528
  return _item
3303
- }, _cache, 2), 128 /* KEYED_FRAGMENT */))
3529
+ }, _cache, 2), 128 /* KEYED_FRAGMENT */)),
3530
+ (_ctx.canLoadMoreSessionMessages)
3531
+ ? (_openBlock(), _createElementBlock("div", {
3532
+ key: 1,
3533
+ class: "session-preview-load-more"
3534
+ }, [
3535
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('sessions.preview.shownCount', { shown: _ctx.activeSessionVisibleMessages.length, total: _ctx.activeSessionMessages.length })), 1 /* TEXT */),
3536
+ _createElementVNode("button", {
3537
+ class: "btn-mini",
3538
+ type: "button",
3539
+ onClick: _ctx.loadMoreSessionMessages,
3540
+ disabled: _ctx.sessionPreviewLoadingMore
3541
+ }, _toDisplayString(_ctx.sessionPreviewLoadingMore ? _ctx.t('sessions.preview.loadingMore') : _ctx.t('sessions.preview.loadMore', { remain: _ctx.sessionPreviewRemainingCount })), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3542
+ ]))
3543
+ : _createCommentVNode("v-if", true)
3304
3544
  ])
3305
3545
  ]))
3306
3546
  ], 40 /* PROPS, NEED_HYDRATION */, ["onScroll"]),
@@ -3316,7 +3556,7 @@ return function render(_ctx, _cache) {
3316
3556
  _createElementVNode("div", { class: "session-timeline-track" }),
3317
3557
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionTimelineNodes, (node, __, ___, _cached) => {
3318
3558
  const _memo = ([_ctx.sessionTimelineActiveKey === node.key, node.safePercent, node.title])
3319
- if (_cached && _cached.key === 'timeline-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3559
+ if (_cached && _cached.el && _cached.key === 'timeline-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3320
3560
  const _item = (_openBlock(), _createElementBlock("button", {
3321
3561
  key: 'timeline-' + node.key,
3322
3562
  type: "button",
@@ -3348,7 +3588,7 @@ return function render(_ctx, _cache) {
3348
3588
  ]),
3349
3589
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionTimelineNodes, (node, __, ___, _cached) => {
3350
3590
  const _memo = ([_ctx.sessionTimelineActiveKey === node.key, node.safePercent, node.title])
3351
- if (_cached && _cached.key === 'timeline-bar-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3591
+ if (_cached && _cached.el && _cached.key === 'timeline-bar-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3352
3592
  const _item = (_openBlock(), _createElementBlock("button", {
3353
3593
  key: 'timeline-bar-' + node.key,
3354
3594
  type: "button",
@@ -3827,6 +4067,7 @@ return function render(_ctx, _cache) {
3827
4067
  key: 0,
3828
4068
  class: "mode-content",
3829
4069
  id: "panel-orchestration",
4070
+ "data-active": _ctx.mainTab === 'orchestration' ? 'true' : 'false',
3830
4071
  role: "tabpanel",
3831
4072
  "aria-labelledby": "tab-orchestration"
3832
4073
  }, [
@@ -3857,663 +4098,1031 @@ return function render(_ctx, _cache) {
3857
4098
  disabled: _ctx.loading || !!_ctx.initError
3858
4099
  }, _toDisplayString(_ctx.t('dashboard.doctor.title')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3859
4100
  ])
3860
- ]),
3861
- (_ctx.taskOrchestrationQueueStats.running || _ctx.taskOrchestrationQueueStats.queued || _ctx.taskOrchestration.runs.length)
3862
- ? (_openBlock(), _createElementBlock("div", {
3863
- key: 0,
3864
- class: "task-hero-meta-strip",
3865
- "aria-label": _ctx.t('orchestration.summary.aria')
3866
- }, [
3867
- _createElementVNode("div", { class: "task-hero-meta" }, [
3868
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.running')) + " ", 1 /* TEXT */),
3869
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationQueueStats.running), 1 /* TEXT */)
3870
- ]),
3871
- _createElementVNode("div", { class: "task-hero-meta" }, [
3872
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.queued')) + " ", 1 /* TEXT */),
3873
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationQueueStats.queued), 1 /* TEXT */)
3874
- ]),
3875
- _createElementVNode("div", { class: "task-hero-meta" }, [
3876
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.runs')) + " ", 1 /* TEXT */),
3877
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.runs.length), 1 /* TEXT */)
3878
- ])
3879
- ], 8 /* PROPS */, ["aria-label"]))
3880
- : _createCommentVNode("v-if", true)
4101
+ ])
3881
4102
  ]),
3882
- _createElementVNode("div", { class: "task-layout-grid task-layout-grid-primary" }, [
3883
- _createElementVNode("section", { class: "selector-section task-compose-flow-card" }, [
3884
- _createElementVNode("div", { class: "task-flow-section task-flow-section-compact" }, [
3885
- _createElementVNode("div", { class: "task-flow-head" }, [
3886
- _createElementVNode("div", { class: "task-flow-step" }, "1"),
4103
+ _createElementVNode("div", { class: "task-layout-grid task-layout-grid-primary task-quick-layout" }, [
4104
+ _createElementVNode("section", { class: "selector-section task-compose-flow-card task-quick-card" }, [
4105
+ _createElementVNode("aside", {
4106
+ class: "task-project-sidebar",
4107
+ "aria-label": _ctx.t('orchestration.workspace.aria')
4108
+ }, [
4109
+ _createElementVNode("div", { class: "task-project-sidebar-head" }, [
3887
4110
  _createElementVNode("div", null, [
3888
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step1.title')), 1 /* TEXT */),
3889
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step1.subtitle')), 1 /* TEXT */)
3890
- ])
3891
- ]),
3892
- (!_ctx.taskOrchestration.target.trim())
3893
- ? (_openBlock(), _createElementBlock("details", {
3894
- key: 0,
3895
- class: "task-template-panel"
3896
- }, [
3897
- _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.templates.title')), 1 /* TEXT */),
3898
- _createElementVNode("div", { class: "task-template-block" }, [
3899
- _createElementVNode("div", { class: "task-template-chip-group" }, [
3900
- _createElementVNode("button", {
3901
- type: "button",
3902
- class: "task-template-chip",
3903
- onClick: $event => {_ctx.taskOrchestration.target = _ctx.t('orchestration.templates.reviewFix.target'); _ctx.taskOrchestration.selectedEngine = 'codex'; _ctx.taskOrchestration.workflowIdsText = ''; _ctx.taskOrchestration.notes = _ctx.t('orchestration.templates.reviewFix.notes'); _ctx.taskOrchestration.followUpsText = _ctx.t('orchestration.templates.reviewFix.followUps')}
3904
- }, _toDisplayString(_ctx.t('orchestration.templates.reviewFix.label')), 9 /* TEXT, PROPS */, ["onClick"]),
3905
- _createElementVNode("button", {
3906
- type: "button",
3907
- class: "task-template-chip",
3908
- onClick: $event => {_ctx.taskOrchestration.target = _ctx.t('orchestration.templates.planOnly.target'); _ctx.taskOrchestration.selectedEngine = 'codex'; _ctx.taskOrchestration.workflowIdsText = ''; _ctx.taskOrchestration.notes = _ctx.t('orchestration.templates.planOnly.notes'); _ctx.taskOrchestration.followUpsText = ''}
3909
- }, _toDisplayString(_ctx.t('orchestration.templates.planOnly.label')), 9 /* TEXT, PROPS */, ["onClick"]),
3910
- _createElementVNode("button", {
3911
- type: "button",
3912
- class: "task-template-chip",
3913
- onClick: $event => {_ctx.taskOrchestration.target = _ctx.t('orchestration.templates.workflowBatch.target'); _ctx.taskOrchestration.selectedEngine = 'workflow'; _ctx.taskOrchestration.workflowIdsText = _ctx.t('orchestration.templates.workflowBatch.workflowIds'); _ctx.taskOrchestration.notes = _ctx.t('orchestration.templates.workflowBatch.notes'); _ctx.taskOrchestration.followUpsText = ''}
3914
- }, _toDisplayString(_ctx.t('orchestration.templates.workflowBatch.label')), 9 /* TEXT, PROPS */, ["onClick"])
3915
- ])
3916
- ])
3917
- ]))
3918
- : _createCommentVNode("v-if", true),
3919
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-primary" }, [
3920
- _createElementVNode("label", { class: "selector-field task-field task-field-wide task-goal-field" }, [
3921
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.target')), 1 /* TEXT */),
3922
- _withDirectives(_createElementVNode("textarea", {
3923
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.target) = $event),
3924
- class: "task-textarea task-textarea-goal",
3925
- rows: "5",
3926
- placeholder: _ctx.t('orchestration.fields.target.placeholder')
3927
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
3928
- [_vModelText, _ctx.taskOrchestration.target]
3929
- ]),
3930
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.target.hint')), 1 /* TEXT */)
3931
- ])
3932
- ]),
3933
- _createElementVNode("div", { class: "task-draft-overview task-draft-inline" }, [
3934
- _createElementVNode("div", { class: "task-draft-inline-head" }, [
3935
- _createElementVNode("span", {
3936
- class: _normalizeClass(['pill', _ctx.taskOrchestrationDraftReadiness.tone])
3937
- }, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.title), 3 /* TEXT, CLASS */),
3938
- _createElementVNode("div", { class: "task-readiness-copy task-draft-inline-copy" }, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.summary), 1 /* TEXT */)
4111
+ _createElementVNode("div", { class: "task-thread-card-label" }, _toDisplayString(_ctx.t('orchestration.workspace.title')), 1 /* TEXT */),
4112
+ _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.workspace.subtitle')), 1 /* TEXT */)
3939
4113
  ]),
3940
- _createElementVNode("div", { class: "task-config-strip" }, [
3941
- _createElementVNode("div", { class: "task-config-pill" }, _toDisplayString(_ctx.taskOrchestration.selectedEngine === 'workflow' ? _ctx.t('orchestration.engine.workflow') : _ctx.t('orchestration.engine.codex')), 1 /* TEXT */),
3942
- _createElementVNode("div", { class: "task-config-pill" }, _toDisplayString(_ctx.taskOrchestration.runMode === 'dry-run' ? _ctx.t('orchestration.runMode.dryRun') : (_ctx.taskOrchestration.runMode === 'read' ? _ctx.t('orchestration.runMode.readOnly') : _ctx.t('orchestration.runMode.write'))), 1 /* TEXT */),
3943
- (_ctx.taskOrchestration.title.trim())
3944
- ? (_openBlock(), _createElementBlock("div", {
3945
- key: 0,
3946
- class: "task-config-pill"
3947
- }, _toDisplayString(_ctx.t('orchestration.pills.hasTitle')), 1 /* TEXT */))
3948
- : _createCommentVNode("v-if", true),
3949
- (_ctx.taskOrchestration.selectedEngine === 'workflow' && _ctx.taskOrchestrationDraftMetrics.workflowCount > 0)
3950
- ? (_openBlock(), _createElementBlock("div", {
3951
- key: 1,
3952
- class: "task-config-pill"
3953
- }, _toDisplayString(_ctx.t('orchestration.pills.workflowCount', { count: _ctx.taskOrchestrationDraftMetrics.workflowCount })), 1 /* TEXT */))
3954
- : _createCommentVNode("v-if", true),
3955
- (_ctx.taskOrchestration.plan)
3956
- ? (_openBlock(), _createElementBlock("div", {
3957
- key: 2,
3958
- class: "task-config-pill"
3959
- }, _toDisplayString(_ctx.t('orchestration.pills.planNodes', { count: _ctx.taskOrchestrationDraftMetrics.planNodeCount })), 1 /* TEXT */))
3960
- : _createCommentVNode("v-if", true)
3961
- ])
3962
- ])
3963
- ]),
3964
- _createElementVNode("div", { class: "task-flow-section task-flow-section-compact" }, [
3965
- _createElementVNode("div", { class: "task-flow-head" }, [
3966
- _createElementVNode("div", { class: "task-flow-step" }, "2"),
3967
- _createElementVNode("div", null, [
3968
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step2.title')), 1 /* TEXT */),
3969
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step2.subtitle')), 1 /* TEXT */)
3970
- ])
4114
+ _createElementVNode("button", {
4115
+ type: "button",
4116
+ class: "btn-mini",
4117
+ onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4118
+ disabled: _ctx.taskOrchestration.loading
4119
+ }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
3971
4120
  ]),
3972
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-compact task-composer-grid-inline" }, [
3973
- _createElementVNode("label", { class: "selector-field" }, [
3974
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.engine')), 1 /* TEXT */),
3975
- _withDirectives(_createElementVNode("select", {
3976
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.selectedEngine) = $event),
3977
- class: "provider-fast-switch-select",
3978
- disabled: ""
4121
+ _createElementVNode("div", {
4122
+ class: "task-project-list",
4123
+ "aria-label": _ctx.t('orchestration.workspace.selector')
4124
+ }, [
4125
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceItems, (workspace) => {
4126
+ return (_openBlock(), _createElementBlock("button", {
4127
+ key: workspace.key,
4128
+ type: "button",
4129
+ class: _normalizeClass(['task-project-item', { active: workspace.active }]),
4130
+ "aria-selected": workspace.active ? 'true' : 'false',
4131
+ title: workspace.path ? _ctx.t('orchestration.workspace.pathHidden') : workspace.meta,
4132
+ onClick: $event => (_ctx.selectTaskWorkspace(workspace.path))
3979
4133
  }, [
3980
- _createElementVNode("option", { value: "codex" }, _toDisplayString(_ctx.t('orchestration.engine.codex')), 1 /* TEXT */),
3981
- _createElementVNode("option", { value: "workflow" }, _toDisplayString(_ctx.t('orchestration.engine.workflow')), 1 /* TEXT */)
3982
- ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
3983
- [_vModelSelect, _ctx.taskOrchestration.selectedEngine]
3984
- ])
4134
+ _createElementVNode("span", { class: "task-project-item-title" }, _toDisplayString(workspace.label), 1 /* TEXT */),
4135
+ _createElementVNode("span", { class: "task-project-item-meta" }, _toDisplayString(workspace.path ? _ctx.t('orchestration.workspace.pathHidden') : workspace.meta), 1 /* TEXT */),
4136
+ _createElementVNode("span", { class: "task-project-item-stats" }, _toDisplayString(_ctx.t('orchestration.workspace.counts', { runs: workspace.runCount, queue: workspace.queueCount })), 1 /* TEXT */)
4137
+ ], 10 /* CLASS, PROPS */, ["aria-selected", "title", "onClick"]))
4138
+ }), 128 /* KEYED_FRAGMENT */))
4139
+ ], 8 /* PROPS */, ["aria-label"]),
4140
+ _createElementVNode("button", {
4141
+ type: "button",
4142
+ class: "btn-tool btn-primary task-project-new-session",
4143
+ onClick: $event => (_ctx.startNewTaskWorkspaceSession())
4144
+ }, _toDisplayString(_ctx.t('orchestration.workspace.newSession')), 9 /* TEXT, PROPS */, ["onClick"]),
4145
+ _createElementVNode("div", { class: "task-session-inbox" }, [
4146
+ _createElementVNode("div", { class: "task-session-inbox-head" }, [
4147
+ _createElementVNode("span", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.title')), 1 /* TEXT */),
4148
+ _createElementVNode("span", { class: "pill neutral" }, _toDisplayString(_ctx.taskOrchestrationWorkspaceSessions.length), 1 /* TEXT */)
3985
4149
  ]),
3986
- _createElementVNode("label", { class: "selector-field" }, [
3987
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.runMode')), 1 /* TEXT */),
3988
- _withDirectives(_createElementVNode("select", {
3989
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.runMode) = $event),
3990
- class: "provider-fast-switch-select",
3991
- disabled: ""
4150
+ (!_ctx.taskOrchestrationWorkspaceSessions.length)
4151
+ ? (_openBlock(), _createElementBlock("div", {
4152
+ key: 0,
4153
+ class: "task-empty-state task-session-empty"
4154
+ }, [
4155
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.empty.title')), 1 /* TEXT */),
4156
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.empty.subtitle')), 1 /* TEXT */)
4157
+ ]))
4158
+ : _createCommentVNode("v-if", true),
4159
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceSessions.slice(0, 8), (session) => {
4160
+ return (_openBlock(), _createElementBlock("button", {
4161
+ key: session.id,
4162
+ type: "button",
4163
+ class: "task-session-inbox-item",
4164
+ onClick: $event => (_ctx.continueTaskWorkspaceSession(session))
3992
4165
  }, [
3993
- _createElementVNode("option", { value: "write" }, _toDisplayString(_ctx.t('orchestration.runMode.write')), 1 /* TEXT */),
3994
- _createElementVNode("option", { value: "read" }, _toDisplayString(_ctx.t('orchestration.runMode.readOnly')), 1 /* TEXT */),
3995
- _createElementVNode("option", { value: "dry-run" }, _toDisplayString(_ctx.t('orchestration.runMode.dryRun')), 1 /* TEXT */)
3996
- ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
3997
- [_vModelSelect, _ctx.taskOrchestration.runMode]
3998
- ])
3999
- ])
4000
- ]),
4001
- _createElementVNode("details", { class: "task-advanced-panel" }, [
4002
- _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.advanced.title')), 1 /* TEXT */),
4003
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-secondary" }, [
4004
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4005
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.title')), 1 /* TEXT */),
4006
- _withDirectives(_createElementVNode("input", {
4007
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.title) = $event),
4008
- class: "model-input",
4009
- type: "text",
4010
- placeholder: _ctx.t('orchestration.fields.title.placeholder')
4011
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4012
- [_vModelText, _ctx.taskOrchestration.title]
4013
- ])
4014
- ]),
4015
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4016
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.notes')), 1 /* TEXT */),
4017
- _withDirectives(_createElementVNode("textarea", {
4018
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.notes) = $event),
4019
- class: "task-textarea",
4020
- rows: "3",
4021
- placeholder: _ctx.t('orchestration.fields.notes.placeholder')
4022
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4023
- [_vModelText, _ctx.taskOrchestration.notes]
4166
+ _createElementVNode("span", { class: "task-session-inbox-main" }, [
4167
+ _createElementVNode("span", { class: "task-session-inbox-title" }, _toDisplayString(session.type === 'queue' ? _ctx.t('orchestration.workspace.sessions.queueTitle') : _ctx.t('orchestration.workspace.sessions.runTitle')), 1 /* TEXT */),
4168
+ _createElementVNode("span", { class: "task-session-inbox-meta" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.detailsHidden')), 1 /* TEXT */)
4024
4169
  ]),
4025
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.notes.hint')), 1 /* TEXT */)
4170
+ _createElementVNode("span", {
4171
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(session.status)])
4172
+ }, _toDisplayString(session.status), 3 /* TEXT, CLASS */)
4173
+ ], 8 /* PROPS */, ["onClick"]))
4174
+ }), 128 /* KEYED_FRAGMENT */))
4175
+ ])
4176
+ ], 8 /* PROPS */, ["aria-label"]),
4177
+ _createElementVNode("div", { class: "task-quick-main" }, [
4178
+ _createElementVNode("div", { class: "task-quick-copy" }, [
4179
+ _createElementVNode("div", { class: "task-hero-kicker" }, _toDisplayString(_ctx.t('orchestration.quick.kicker')), 1 /* TEXT */),
4180
+ _createElementVNode("div", { class: "selector-title task-quick-title" }, _toDisplayString(_ctx.t('orchestration.quick.title')), 1 /* TEXT */),
4181
+ _createElementVNode("div", { class: "skills-panel-note task-hero-copy" }, _toDisplayString(_ctx.t('orchestration.quick.subtitle')), 1 /* TEXT */)
4182
+ ]),
4183
+ _createElementVNode("section", {
4184
+ class: "task-agent-cockpit",
4185
+ "aria-label": _ctx.t('orchestration.agent.aria')
4186
+ }, [
4187
+ _createElementVNode("div", { class: "task-agent-cockpit-head" }, [
4188
+ _createElementVNode("div", null, [
4189
+ _createElementVNode("div", { class: "task-hero-kicker" }, _toDisplayString(_ctx.t('orchestration.agent.kicker')), 1 /* TEXT */),
4190
+ _createElementVNode("div", { class: "selector-title task-agent-title" }, _toDisplayString(_ctx.t('orchestration.agent.title')), 1 /* TEXT */),
4191
+ _createElementVNode("div", { class: "skills-panel-note task-agent-copy" }, _toDisplayString(_ctx.t('orchestration.agent.subtitle')), 1 /* TEXT */)
4026
4192
  ]),
4027
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4028
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.followUps')), 1 /* TEXT */),
4029
- _withDirectives(_createElementVNode("textarea", {
4030
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.followUpsText) = $event),
4031
- class: "task-textarea",
4032
- rows: "3",
4033
- placeholder: _ctx.t('orchestration.fields.followUps.placeholder')
4034
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4035
- [_vModelText, _ctx.taskOrchestration.followUpsText]
4036
- ])
4193
+ _createElementVNode("span", {
4194
+ class: _normalizeClass(['pill', _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning ? 'warn' : (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run ? _ctx.taskRunStatusTone(_ctx.taskOrchestrationSelectedRun.run.status) : 'neutral')])
4195
+ }, _toDisplayString(_ctx.taskOrchestration.running ? _ctx.t('orchestration.agent.state.running') : (_ctx.taskOrchestration.planning ? _ctx.t('orchestration.agent.state.planning') : (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run ? _ctx.taskOrchestrationSelectedRun.run.status : _ctx.t('orchestration.agent.state.ready')))), 3 /* TEXT, CLASS */)
4196
+ ]),
4197
+ _createElementVNode("div", { class: "task-agent-surface-grid" }, [
4198
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4199
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.workspace')), 1 /* TEXT */),
4200
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspacePath ? _ctx.t('orchestration.privacy.workspace.selected') : _ctx.t('orchestration.chat.context.workspace.auto')), 1 /* TEXT */)
4037
4201
  ]),
4038
- _createElementVNode("label", { class: "selector-field" }, [
4039
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.concurrency')), 1 /* TEXT */),
4040
- _withDirectives(_createElementVNode("input", {
4041
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.concurrency) = $event),
4042
- class: "model-input",
4043
- type: "number",
4044
- min: "1",
4045
- max: "8"
4046
- }, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
4047
- [_vModelText, _ctx.taskOrchestration.concurrency]
4048
- ]),
4049
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.concurrency.hint')), 1 /* TEXT */)
4202
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4203
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.session')), 1 /* TEXT */),
4204
+ _createElementVNode("strong", null, _toDisplayString((_ctx.taskOrchestration.threadId.trim() || (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.threadId)) ? _ctx.t('orchestration.privacy.thread.selected') : _ctx.t('orchestration.chat.context.thread.auto')), 1 /* TEXT */)
4050
4205
  ]),
4051
- _createElementVNode("label", { class: "selector-field" }, [
4052
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.autoFixRounds')), 1 /* TEXT */),
4053
- _withDirectives(_createElementVNode("input", {
4054
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.autoFixRounds) = $event),
4055
- class: "model-input",
4056
- type: "number",
4057
- min: "0",
4058
- max: "5"
4059
- }, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
4060
- [_vModelText, _ctx.taskOrchestration.autoFixRounds]
4061
- ]),
4062
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.autoFixRounds.hint')), 1 /* TEXT */)
4206
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4207
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.mode')), 1 /* TEXT */),
4208
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.selectedEngine === 'workflow' ? _ctx.t('orchestration.engine.workflow') : _ctx.t('orchestration.engine.openaiChat')) + " · " + _toDisplayString(_ctx.taskOrchestration.runMode === 'dry-run' ? _ctx.t('orchestration.runMode.dryRun') : (_ctx.taskOrchestration.runMode === 'read' ? _ctx.t('orchestration.runMode.readOnly') : _ctx.t('orchestration.runMode.write'))), 1 /* TEXT */)
4063
4209
  ]),
4064
- (_ctx.taskOrchestration.selectedEngine === 'workflow')
4065
- ? (_openBlock(), _createElementBlock("label", {
4210
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4211
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.trace')), 1 /* TEXT */),
4212
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns.length) + " " + _toDisplayString(_ctx.t('orchestration.agent.surface.runs')) + " · " + _toDisplayString(_ctx.taskOrchestrationWorkspaceQueue.length) + " " + _toDisplayString(_ctx.t('orchestration.agent.surface.queue')), 1 /* TEXT */)
4213
+ ])
4214
+ ])
4215
+ ], 8 /* PROPS */, ["aria-label"]),
4216
+ _createElementVNode("div", { class: "task-quick-input-card task-chat-panel" }, [
4217
+ _createElementVNode("div", {
4218
+ class: "task-chat-thread",
4219
+ role: "log",
4220
+ "aria-label": _ctx.t('orchestration.chat.thread.aria')
4221
+ }, [
4222
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationConversationMessages, (message) => {
4223
+ return (_openBlock(), _createElementBlock("div", {
4224
+ key: message.id,
4225
+ class: _normalizeClass(['task-chat-bubble-row', message.role === 'user' ? 'is-user' : 'is-assistant'])
4226
+ }, [
4227
+ _createElementVNode("div", { class: "task-chat-bubble" }, [
4228
+ _createElementVNode("div", { class: "task-chat-bubble-label" }, _toDisplayString(message.label), 1 /* TEXT */),
4229
+ _createElementVNode("div", { class: "task-chat-bubble-text" }, _toDisplayString(message.text), 1 /* TEXT */),
4230
+ (message.meta)
4231
+ ? (_openBlock(), _createElementBlock("div", {
4232
+ key: 0,
4233
+ class: "task-chat-bubble-meta"
4234
+ }, _toDisplayString(message.meta), 1 /* TEXT */))
4235
+ : _createCommentVNode("v-if", true)
4236
+ ])
4237
+ ], 2 /* CLASS */))
4238
+ }), 128 /* KEYED_FRAGMENT */)),
4239
+ (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4240
+ ? (_openBlock(), _createElementBlock("div", {
4066
4241
  key: 0,
4067
- class: "selector-field task-field-wide"
4242
+ class: "task-chat-bubble-row is-user task-thread-plan-request"
4068
4243
  }, [
4069
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.workflowIds')), 1 /* TEXT */),
4070
- _withDirectives(_createElementVNode("textarea", {
4071
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.workflowIdsText) = $event),
4072
- class: "task-textarea",
4073
- rows: "3",
4074
- placeholder: _ctx.t('orchestration.fields.workflowIds.placeholder')
4075
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4076
- [_vModelText, _ctx.taskOrchestration.workflowIdsText]
4077
- ]),
4078
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.workflowIds.hint', { count: _ctx.taskOrchestration.workflows.length })), 1 /* TEXT */),
4079
- (_ctx.taskOrchestration.workflows.length)
4244
+ _createElementVNode("div", { class: "task-chat-bubble" }, [
4245
+ _createElementVNode("div", { class: "task-chat-bubble-label" }, "You · /plan"),
4246
+ _createElementVNode("div", { class: "task-chat-bubble-text" }, "/plan " + _toDisplayString(_ctx.taskOrchestration.target), 1 /* TEXT */),
4247
+ (_ctx.taskOrchestrationDraftMetrics.followUpCount)
4248
+ ? (_openBlock(), _createElementBlock("div", {
4249
+ key: 0,
4250
+ class: "task-chat-bubble-meta"
4251
+ }, _toDisplayString(_ctx.t('orchestration.chat.input.sequenceHint', { count: _ctx.taskOrchestrationDraftMetrics.followUpCount + 1 })), 1 /* TEXT */))
4252
+ : _createCommentVNode("v-if", true)
4253
+ ])
4254
+ ]))
4255
+ : _createCommentVNode("v-if", true),
4256
+ (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4257
+ ? (_openBlock(), _createElementBlock("section", {
4258
+ key: 1,
4259
+ class: "selector-section task-plan-card task-thread-message-card task-thread-plan-card"
4260
+ }, [
4261
+ _createElementVNode("div", { class: "task-thread-card-label" }, "AI · " + _toDisplayString(_ctx.t('orchestration.plan.title')), 1 /* TEXT */),
4262
+ (_ctx.taskOrchestration.lastError)
4080
4263
  ? (_openBlock(), _createElementBlock("div", {
4081
4264
  key: 0,
4082
- class: "task-workflow-suggestions"
4265
+ class: "task-issue-item"
4266
+ }, _toDisplayString(_ctx.taskOrchestration.lastError), 1 /* TEXT */))
4267
+ : _createCommentVNode("v-if", true),
4268
+ (_ctx.taskOrchestration.plan)
4269
+ ? (_openBlock(), _createElementBlock("div", {
4270
+ key: 1,
4271
+ class: "task-thread-run-summary task-thread-plan-summary"
4083
4272
  }, [
4084
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.workflows, (workflow) => {
4085
- return (_openBlock(), _createElementBlock("button", {
4086
- key: workflow.id || workflow.name,
4087
- type: "button",
4088
- class: "task-workflow-chip",
4089
- onClick: $event => (_ctx.appendTaskWorkflowId(workflow.id || workflow.name))
4090
- }, [
4091
- _createElementVNode("span", null, _toDisplayString(workflow.name || workflow.id), 1 /* TEXT */),
4092
- (workflow.stepCount)
4093
- ? (_openBlock(), _createElementBlock("small", { key: 0 }, _toDisplayString(_ctx.t('orchestration.workflow.stepCount', { count: workflow.stepCount })), 1 /* TEXT */))
4094
- : _createCommentVNode("v-if", true)
4095
- ], 8 /* PROPS */, ["onClick"]))
4273
+ _createElementVNode("span", { class: "pill configured" }, "/plan"),
4274
+ _createElementVNode("span", { class: "task-thread-run-summary-copy" }, _toDisplayString(_ctx.t('orchestration.chat.assistant.planSummary', { nodes: _ctx.taskOrchestration.plan.nodes.length, waves: _ctx.taskOrchestration.plan.waves.length })), 1 /* TEXT */)
4275
+ ]))
4276
+ : _createCommentVNode("v-if", true),
4277
+ (_ctx.taskOrchestration.planIssues.length)
4278
+ ? (_openBlock(), _createElementBlock("div", {
4279
+ key: 2,
4280
+ class: "task-issues-list"
4281
+ }, [
4282
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planIssues, (issue) => {
4283
+ return (_openBlock(), _createElementBlock("div", {
4284
+ key: issue.code + issue.message,
4285
+ class: "task-issue-item"
4286
+ }, _toDisplayString(issue.message), 1 /* TEXT */))
4096
4287
  }), 128 /* KEYED_FRAGMENT */))
4097
4288
  ]))
4098
- : _createCommentVNode("v-if", true)
4099
- ]))
4100
- : _createCommentVNode("v-if", true)
4101
- ])
4102
- ])
4103
- ]),
4104
- _createElementVNode("div", { class: "task-flow-section task-flow-section-actions task-flow-section-compact" }, [
4105
- _createElementVNode("div", { class: "task-flow-head" }, [
4106
- _createElementVNode("div", { class: "task-flow-step" }, "3"),
4107
- _createElementVNode("div", null, [
4108
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step3.title')), 1 /* TEXT */),
4109
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step3.subtitle')), 1 /* TEXT */)
4110
- ])
4111
- ]),
4112
- _createElementVNode("div", { class: "task-action-row task-action-row-prominent" }, [
4113
- _createElementVNode("button", {
4114
- type: "button",
4115
- class: "btn-tool task-action-preview",
4116
- onClick: $event => (_ctx.previewTaskPlan()),
4117
- disabled: _ctx.taskOrchestration.planning || _ctx.taskOrchestration.running || !_ctx.taskOrchestration.target.trim()
4118
- }, _toDisplayString(_ctx.taskOrchestration.planning ? _ctx.t('orchestration.actions.planning') : _ctx.t('orchestration.actions.previewOnly')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4119
- _createElementVNode("div", { class: "task-action-row-right task-action-row-right-prominent" }, [
4120
- _createElementVNode("button", {
4121
- type: "button",
4122
- class: "btn-tool btn-primary",
4123
- onClick: $event => (_ctx.planAndRunTaskOrchestration()),
4124
- disabled: _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4125
- }, _toDisplayString((_ctx.taskOrchestration.running || _ctx.taskOrchestration.planning) ? _ctx.t('orchestration.actions.preparing') : (_ctx.taskOrchestration.runMode === 'dry-run' ? _ctx.t('orchestration.actions.generatePlan') : _ctx.t('orchestration.actions.planAndRun'))), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4126
- _createElementVNode("button", {
4127
- type: "button",
4128
- class: "btn-tool",
4129
- onClick: $event => (_ctx.queueTaskOrchestrationAndStart()),
4130
- disabled: _ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4131
- }, _toDisplayString((_ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting) ? _ctx.t('orchestration.actions.processing') : _ctx.t('orchestration.actions.queueAndStart')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4132
- ])
4133
- ]),
4134
- _createElementVNode("div", { class: "task-action-caption" }, _toDisplayString(_ctx.t('orchestration.actions.caption')), 1 /* TEXT */)
4135
- ])
4136
- ])
4137
- ]),
4138
- (!(_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError || _ctx.taskOrchestration.queue.length || _ctx.taskOrchestration.runs.length || _ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError))
4139
- ? (_openBlock(), _createElementBlock("section", {
4140
- key: 0,
4141
- class: "selector-section task-stage-card"
4142
- }, [
4143
- _createElementVNode("div", { class: "task-stage-empty" }, [
4144
- _createElementVNode("div", null, [
4145
- _createElementVNode("div", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.stage.title')), 1 /* TEXT */),
4146
- _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.stage.subtitle')), 1 /* TEXT */)
4147
- ]),
4148
- _createElementVNode("div", { class: "task-stage-strip" }, [
4149
- _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.target')), 1 /* TEXT */),
4150
- _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.preview')), 1 /* TEXT */),
4151
- _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.run')), 1 /* TEXT */)
4289
+ : _createCommentVNode("v-if", true),
4290
+ (_ctx.taskOrchestration.planWarnings.length)
4291
+ ? (_openBlock(), _createElementBlock("div", {
4292
+ key: 3,
4293
+ class: "task-warning-list"
4294
+ }, [
4295
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planWarnings, (warning) => {
4296
+ return (_openBlock(), _createElementBlock("div", {
4297
+ key: warning,
4298
+ class: "task-warning-item"
4299
+ }, _toDisplayString(warning), 1 /* TEXT */))
4300
+ }), 128 /* KEYED_FRAGMENT */))
4301
+ ]))
4302
+ : _createCommentVNode("v-if", true),
4303
+ (_ctx.taskOrchestration.plan)
4304
+ ? (_openBlock(), _createElementBlock("details", {
4305
+ key: 4,
4306
+ class: "task-thread-run-details task-thread-plan-details"
4307
+ }, [
4308
+ _createElementVNode("summary", null, "Plan details"),
4309
+ _createElementVNode("div", { class: "task-plan-summary-strip" }, [
4310
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4311
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.nodes')), 1 /* TEXT */),
4312
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.nodes.length), 1 /* TEXT */)
4313
+ ]),
4314
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4315
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.waves')), 1 /* TEXT */),
4316
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.waves.length), 1 /* TEXT */)
4317
+ ]),
4318
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4319
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.engine')), 1 /* TEXT */),
4320
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.engine), 1 /* TEXT */)
4321
+ ]),
4322
+ (_ctx.taskOrchestration.plan.threadId)
4323
+ ? (_openBlock(), _createElementBlock("div", {
4324
+ key: 0,
4325
+ class: "task-plan-summary-item"
4326
+ }, [
4327
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4328
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.threadId), 1 /* TEXT */)
4329
+ ]))
4330
+ : _createCommentVNode("v-if", true),
4331
+ (_ctx.taskOrchestration.plan.cwd)
4332
+ ? (_openBlock(), _createElementBlock("div", {
4333
+ key: 1,
4334
+ class: "task-plan-summary-item"
4335
+ }, [
4336
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4337
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.cwd), 1 /* TEXT */)
4338
+ ]))
4339
+ : _createCommentVNode("v-if", true)
4340
+ ]),
4341
+ _createElementVNode("div", { class: "task-wave-list" }, [
4342
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.waves, (wave) => {
4343
+ return (_openBlock(), _createElementBlock("div", {
4344
+ key: wave.label,
4345
+ class: "task-wave-card"
4346
+ }, [
4347
+ _createElementVNode("div", { class: "task-wave-title" }, _toDisplayString(wave.label), 1 /* TEXT */),
4348
+ _createElementVNode("div", { class: "task-wave-nodes" }, _toDisplayString(wave.nodeIds.join(', ')), 1 /* TEXT */)
4349
+ ]))
4350
+ }), 128 /* KEYED_FRAGMENT */))
4351
+ ]),
4352
+ _createElementVNode("div", { class: "task-node-list" }, [
4353
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.nodes, (node) => {
4354
+ return (_openBlock(), _createElementBlock("div", {
4355
+ key: node.id,
4356
+ class: "task-node-card"
4357
+ }, [
4358
+ _createElementVNode("div", { class: "task-node-head" }, [
4359
+ _createElementVNode("div", null, [
4360
+ _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4361
+ _createElementVNode("div", { class: "task-node-meta" }, [
4362
+ _createTextVNode(_toDisplayString(node.id) + " · " + _toDisplayString(node.kind), 1 /* TEXT */),
4363
+ (node.workflowId)
4364
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(node.workflowId), 1 /* TEXT */))
4365
+ : _createCommentVNode("v-if", true)
4366
+ ])
4367
+ ]),
4368
+ _createElementVNode("span", {
4369
+ class: _normalizeClass(['pill', node.write ? 'configured' : 'empty'])
4370
+ }, _toDisplayString(node.write ? _ctx.t('orchestration.plan.node.write') : _ctx.t('orchestration.plan.node.readOnly')), 3 /* TEXT, CLASS */)
4371
+ ]),
4372
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */)
4373
+ ]))
4374
+ }), 128 /* KEYED_FRAGMENT */))
4375
+ ])
4376
+ ]))
4377
+ : _createCommentVNode("v-if", true)
4378
+ ]))
4379
+ : _createCommentVNode("v-if", true)
4380
+ ], 8 /* PROPS */, ["aria-label"]),
4381
+ _createElementVNode("div", { class: "task-thread-composer" }, [
4382
+ _createElementVNode("label", { class: "task-quick-target-field task-chat-composer" }, [
4383
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.chat.input.label')), 1 /* TEXT */),
4384
+ _createElementVNode("span", {
4385
+ class: "task-composer-prompt-glyph",
4386
+ "aria-hidden": "true"
4387
+ }, "›"),
4388
+ _withDirectives(_createElementVNode("textarea", {
4389
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.chatDraft) = $event),
4390
+ class: "task-textarea task-textarea-goal task-quick-target",
4391
+ rows: "3",
4392
+ placeholder: _ctx.t('orchestration.chat.input.placeholder'),
4393
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.submitTaskOrchestrationChatMessage()), ["exact","prevent"]), ["enter"])
4394
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "onKeydown"]), [
4395
+ [_vModelText, _ctx.taskOrchestration.chatDraft]
4396
+ ]),
4397
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.chat.input.hint')), 1 /* TEXT */)
4398
+ ]),
4399
+ _createElementVNode("div", { class: "task-chat-send-row" }, [
4400
+ _createElementVNode("div", { class: "task-chat-action-buttons task-chat-primary-action" }, [
4401
+ _createElementVNode("button", {
4402
+ type: "button",
4403
+ class: "btn-tool btn-primary task-chat-primary-button",
4404
+ onClick: $event => (_ctx.planAndRunTaskOrchestrationFromChat()),
4405
+ disabled: _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning || (!_ctx.taskOrchestration.target.trim() && !_ctx.taskOrchestration.chatDraft.trim())
4406
+ }, _toDisplayString(_ctx.taskOrchestration.running ? _ctx.t('orchestration.actions.processing') : (_ctx.taskOrchestration.planning ? _ctx.t('orchestration.actions.planning') : _ctx.t('orchestration.chat.input.work'))), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4407
+ ]),
4408
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.taskOrchestrationDraftMetrics.hasTarget ? _ctx.t('orchestration.chat.input.sequenceHint', { count: _ctx.taskOrchestrationDraftMetrics.followUpCount + 2 }) : _ctx.t('orchestration.chat.input.workHint')), 1 /* TEXT */)
4409
+ ]),
4410
+ _createElementVNode("div", { class: "task-chat-execute-caption" }, _toDisplayString(_ctx.t('orchestration.chat.input.workCaption')), 1 /* TEXT */),
4411
+ _createElementVNode("div", {
4412
+ class: "task-chat-context-row task-chat-context-row-primary",
4413
+ role: "group",
4414
+ "aria-label": _ctx.t('orchestration.chat.context.aria')
4415
+ }, [
4416
+ _createElementVNode("span", { class: "task-chat-context-chip task-chat-context-chip-strong" }, [
4417
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4418
+ _createElementVNode("strong", null, _toDisplayString((_ctx.taskOrchestrationWorkspacePath || _ctx.taskOrchestration.workspacePath.trim()) ? _ctx.t('orchestration.privacy.workspace.selected') : _ctx.t('orchestration.chat.context.workspace.auto')), 1 /* TEXT */)
4419
+ ]),
4420
+ _createElementVNode("span", { class: "task-chat-context-chip task-chat-context-chip-strong" }, [
4421
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4422
+ _createElementVNode("strong", null, _toDisplayString((_ctx.taskOrchestration.threadId.trim() || (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.threadId)) ? _ctx.t('orchestration.privacy.thread.selected') : _ctx.t('orchestration.chat.context.thread.auto')), 1 /* TEXT */)
4423
+ ]),
4424
+ _createElementVNode("span", { class: "task-chat-context-chip" }, _toDisplayString(_ctx.taskOrchestrationDraftMetrics.hasTarget ? _ctx.t('orchestration.chat.context.sequence.value', { count: _ctx.taskOrchestrationDraftMetrics.requestCount }) : _ctx.t('orchestration.chat.context.sequence.empty')), 1 /* TEXT */),
4425
+ _createElementVNode("span", { class: "task-chat-context-chip" }, _toDisplayString(_ctx.taskOrchestration.runMode === 'dry-run' ? _ctx.t('orchestration.runMode.dryRun') : (_ctx.taskOrchestration.runMode === 'read' ? _ctx.t('orchestration.runMode.readOnly') : _ctx.t('orchestration.runMode.write') )), 1 /* TEXT */),
4426
+ _createElementVNode("button", {
4427
+ type: "button",
4428
+ class: "task-chat-context-chip task-chat-context-action",
4429
+ onClick: $event => (_ctx.taskOrchestration.settingsOpen = true)
4430
+ }, _toDisplayString(_ctx.t('orchestration.advanced.open')), 9 /* TEXT, PROPS */, ["onClick"])
4431
+ ], 8 /* PROPS */, ["aria-label"]),
4432
+ _createElementVNode("div", { class: "task-action-caption" }, _toDisplayString(_ctx.t('orchestration.quick.caption')), 1 /* TEXT */)
4152
4433
  ])
4153
4434
  ])
4154
- ]))
4155
- : (_openBlock(), _createElementBlock("div", {
4156
- key: 1,
4157
- class: "task-layout-grid task-layout-grid-secondary"
4158
- }, [
4159
- (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4160
- ? (_openBlock(), _createElementBlock("section", {
4161
- key: 0,
4162
- class: "selector-section task-plan-card"
4163
- }, [
4164
- (_ctx.taskOrchestration.lastError)
4165
- ? (_openBlock(), _createElementBlock("div", {
4435
+ ]),
4436
+ _createElementVNode("aside", { class: "task-quick-side-card" }, [
4437
+ _createElementVNode("section", { class: "selector-section task-workbench-card task-side-workbench-card" }, [
4438
+ _createElementVNode("div", { class: "task-thread-card-label" }, _toDisplayString(_ctx.t('orchestration.workbench.title')), 1 /* TEXT */),
4439
+ _createElementVNode("div", { class: "task-thread-run-summary" }, [
4440
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run)
4441
+ ? (_openBlock(), _createElementBlock("span", {
4442
+ key: 0,
4443
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(_ctx.taskOrchestrationSelectedRun.run.status)])
4444
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 3 /* TEXT, CLASS */))
4445
+ : (_ctx.taskOrchestrationWorkspaceRuns.length)
4446
+ ? (_openBlock(), _createElementBlock("span", {
4447
+ key: 1,
4448
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(_ctx.taskOrchestrationWorkspaceRuns[0].status)])
4449
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns[0].status), 3 /* TEXT, CLASS */))
4450
+ : (_ctx.taskOrchestrationWorkspaceQueue.length)
4451
+ ? (_openBlock(), _createElementBlock("span", {
4452
+ key: 2,
4453
+ class: "pill neutral"
4454
+ }, _toDisplayString(_ctx.t('orchestration.workbench.queueCount', { count: _ctx.taskOrchestrationWorkspaceQueue.length })), 1 /* TEXT */))
4455
+ : (_openBlock(), _createElementBlock("span", {
4456
+ key: 3,
4457
+ class: "pill empty"
4458
+ }, _toDisplayString(_ctx.t('orchestration.workbench.ready')), 1 /* TEXT */)),
4459
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run)
4460
+ ? (_openBlock(), _createElementBlock("span", {
4461
+ key: 4,
4462
+ class: "task-thread-run-summary-copy"
4463
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.taskOrchestrationSelectedRun.run.runId || _ctx.taskOrchestration.selectedRunId), 1 /* TEXT */))
4464
+ : (_ctx.taskOrchestrationWorkspaceRuns.length)
4465
+ ? (_openBlock(), _createElementBlock("span", {
4466
+ key: 5,
4467
+ class: "task-thread-run-summary-copy"
4468
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns[0].summary || _ctx.taskOrchestrationWorkspaceRuns[0].runId), 1 /* TEXT */))
4469
+ : (_ctx.taskOrchestrationWorkspaceQueue.length)
4470
+ ? (_openBlock(), _createElementBlock("span", {
4471
+ key: 6,
4472
+ class: "task-thread-run-summary-copy"
4473
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceQueue[0].title || _ctx.taskOrchestrationWorkspaceQueue[0].target || _ctx.taskOrchestrationWorkspaceQueue[0].taskId), 1 /* TEXT */))
4474
+ : (_openBlock(), _createElementBlock("span", {
4475
+ key: 7,
4476
+ class: "task-thread-run-summary-copy"
4477
+ }, _toDisplayString(_ctx.t('orchestration.workbench.subtitle')), 1 /* TEXT */))
4478
+ ]),
4479
+ _createElementVNode("details", {
4480
+ class: "task-thread-run-details",
4481
+ open: ""
4482
+ }, [
4483
+ _createElementVNode("summary", null, _toDisplayString(_ctx.t('orchestration.agent.trace.title')), 1 /* TEXT */),
4484
+ _createElementVNode("div", { class: "settings-tab-actions task-header-actions task-thread-detail-actions" }, [
4485
+ _createElementVNode("button", {
4486
+ type: "button",
4487
+ class: "btn-tool btn-tool-compact",
4488
+ onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4489
+ disabled: _ctx.taskOrchestration.loading
4490
+ }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4491
+ (_ctx.taskOrchestrationWorkspaceQueue.length)
4492
+ ? (_openBlock(), _createElementBlock("button", {
4166
4493
  key: 0,
4167
- class: "task-issue-item"
4168
- }, _toDisplayString(_ctx.taskOrchestration.lastError), 1 /* TEXT */))
4169
- : _createCommentVNode("v-if", true),
4170
- _createElementVNode("div", { class: "selector-header task-section-header" }, [
4171
- _createElementVNode("div", null, [
4172
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.plan.title')), 1 /* TEXT */),
4173
- _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.plan.subtitle')), 1 /* TEXT */)
4174
- ])
4494
+ type: "button",
4495
+ class: "btn-tool btn-tool-compact",
4496
+ onClick: $event => (_ctx.startTaskQueueRunner()),
4497
+ disabled: _ctx.taskOrchestration.queueStarting
4498
+ }, _toDisplayString(_ctx.taskOrchestration.queueStarting ? _ctx.t('orchestration.queue.starting') : _ctx.t('orchestration.queue.start')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]))
4499
+ : _createCommentVNode("v-if", true)
4500
+ ]),
4501
+ _createElementVNode("div", { class: "task-agent-trace-grid" }, [
4502
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4503
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.plan')), 1 /* TEXT */),
4504
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan ? _ctx.taskOrchestration.plan.nodes.length : 0), 1 /* TEXT */)
4175
4505
  ]),
4176
- (_ctx.taskOrchestration.planIssues.length)
4177
- ? (_openBlock(), _createElementBlock("div", {
4178
- key: 1,
4179
- class: "task-issues-list"
4180
- }, [
4181
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planIssues, (issue) => {
4182
- return (_openBlock(), _createElementBlock("div", {
4183
- key: issue.code + issue.message,
4184
- class: "task-issue-item"
4185
- }, _toDisplayString(issue.message), 1 /* TEXT */))
4186
- }), 128 /* KEYED_FRAGMENT */))
4187
- ]))
4188
- : _createCommentVNode("v-if", true),
4189
- (_ctx.taskOrchestration.planWarnings.length)
4506
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4507
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.queue')), 1 /* TEXT */),
4508
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspaceQueue.length), 1 /* TEXT */)
4509
+ ]),
4510
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4511
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.runs')), 1 /* TEXT */),
4512
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns.length), 1 /* TEXT */)
4513
+ ]),
4514
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4515
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.nodes')), 1 /* TEXT */),
4516
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4517
+ ])
4518
+ ]),
4519
+ ((_ctx.taskOrchestrationWorkspaceQueue.length ? 1 : 0) + (_ctx.taskOrchestrationWorkspaceRuns.length ? 1 : 0) + ((_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError) ? 1 : 0) > 1)
4520
+ ? (_openBlock(), _createElementBlock("div", {
4521
+ key: 0,
4522
+ class: "task-workbench-tabs",
4523
+ role: "group",
4524
+ "aria-label": _ctx.t('orchestration.workbench.tabs.aria')
4525
+ }, [
4526
+ (_ctx.taskOrchestrationWorkspaceQueue.length)
4527
+ ? (_openBlock(), _createElementBlock("button", {
4528
+ key: 0,
4529
+ type: "button",
4530
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'queue' }]),
4531
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'queue')
4532
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.queue', { count: _ctx.taskOrchestrationWorkspaceQueue.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4533
+ : _createCommentVNode("v-if", true),
4534
+ (_ctx.taskOrchestrationWorkspaceRuns.length)
4535
+ ? (_openBlock(), _createElementBlock("button", {
4536
+ key: 1,
4537
+ type: "button",
4538
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'runs' }]),
4539
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'runs')
4540
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.runs', { count: _ctx.taskOrchestrationWorkspaceRuns.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4541
+ : _createCommentVNode("v-if", true),
4542
+ (_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4543
+ ? (_openBlock(), _createElementBlock("button", {
4544
+ key: 2,
4545
+ type: "button",
4546
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'detail' }]),
4547
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'detail')
4548
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.detail')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4549
+ : _createCommentVNode("v-if", true)
4550
+ ], 8 /* PROPS */, ["aria-label"]))
4551
+ : _createCommentVNode("v-if", true),
4552
+ ((_ctx.taskOrchestrationWorkspaceQueue.length && _ctx.taskOrchestration.workspaceTab === 'queue') || (!_ctx.taskOrchestrationWorkspaceRuns.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4553
+ ? (_openBlock(), _createElementBlock("div", {
4554
+ key: 1,
4555
+ class: "task-workbench-panel"
4556
+ }, [
4557
+ (!_ctx.taskOrchestrationWorkspaceQueue.length)
4558
+ ? (_openBlock(), _createElementBlock("div", {
4559
+ key: 0,
4560
+ class: "task-empty-state"
4561
+ }, [
4562
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.queue.empty.title')), 1 /* TEXT */),
4563
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.queue.empty.subtitle')), 1 /* TEXT */)
4564
+ ]))
4565
+ : (_openBlock(), _createElementBlock("div", {
4566
+ key: 1,
4567
+ class: "task-runtime-list"
4568
+ }, [
4569
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceQueue, (item) => {
4570
+ return (_openBlock(), _createElementBlock("div", {
4571
+ key: item.taskId,
4572
+ class: _normalizeClass(['task-runtime-item', { active: item.lastRunId && _ctx.taskOrchestration.selectedRunId === item.lastRunId, clickable: !!item.lastRunId }]),
4573
+ role: item.lastRunId ? 'button' : null,
4574
+ tabindex: item.lastRunId ? 0 : -1,
4575
+ "aria-disabled": item.lastRunId ? null : 'true',
4576
+ onClick: $event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null),
4577
+ onKeydown: [
4578
+ _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["enter"]),
4579
+ _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["space"])
4580
+ ]
4581
+ }, [
4582
+ _createElementVNode("div", { class: "task-runtime-item-main" }, [
4583
+ _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.target || item.taskId), 1 /* TEXT */),
4584
+ _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.taskId) + " · " + _toDisplayString(item.updatedAt || item.createdAt), 1 /* TEXT */),
4585
+ (item.threadId || item.cwd)
4586
+ ? (_openBlock(), _createElementBlock("div", {
4587
+ key: 0,
4588
+ class: "task-runtime-item-meta"
4589
+ }, [
4590
+ (item.threadId)
4591
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')) + ": " + _toDisplayString(item.threadId), 1 /* TEXT */))
4592
+ : _createCommentVNode("v-if", true),
4593
+ (item.threadId && item.cwd)
4594
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · "))
4595
+ : _createCommentVNode("v-if", true),
4596
+ (item.cwd)
4597
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')) + ": " + _toDisplayString(item.cwd), 1 /* TEXT */))
4598
+ : _createCommentVNode("v-if", true)
4599
+ ]))
4600
+ : _createCommentVNode("v-if", true),
4601
+ (item.lastSummary)
4602
+ ? (_openBlock(), _createElementBlock("div", {
4603
+ key: 1,
4604
+ class: "task-runtime-item-summary"
4605
+ }, _toDisplayString(item.lastSummary), 1 /* TEXT */))
4606
+ : _createCommentVNode("v-if", true)
4607
+ ]),
4608
+ _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4609
+ _createElementVNode("span", {
4610
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status || item.runStatus)])
4611
+ }, _toDisplayString(item.status || item.runStatus), 3 /* TEXT, CLASS */),
4612
+ (_ctx.isTaskRunActive(item.status || item.runStatus))
4613
+ ? (_openBlock(), _createElementBlock("button", {
4614
+ key: 0,
4615
+ type: "button",
4616
+ class: "btn-mini",
4617
+ onClick: _withModifiers($event => (_ctx.cancelTaskRunFromUi(item.taskId)), ["stop"])
4618
+ }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick"]))
4619
+ : _createCommentVNode("v-if", true)
4620
+ ])
4621
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["role", "tabindex", "aria-disabled", "onClick", "onKeydown"]))
4622
+ }), 128 /* KEYED_FRAGMENT */))
4623
+ ]))
4624
+ ]))
4625
+ : (_ctx.taskOrchestration.workspaceTab === 'runs' || (!_ctx.taskOrchestrationWorkspaceQueue.length && _ctx.taskOrchestrationWorkspaceRuns.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4190
4626
  ? (_openBlock(), _createElementBlock("div", {
4191
4627
  key: 2,
4192
- class: "task-warning-list"
4628
+ class: "task-workbench-panel"
4193
4629
  }, [
4194
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planWarnings, (warning) => {
4195
- return (_openBlock(), _createElementBlock("div", {
4196
- key: warning,
4197
- class: "task-warning-item"
4198
- }, _toDisplayString(warning), 1 /* TEXT */))
4199
- }), 128 /* KEYED_FRAGMENT */))
4200
- ]))
4201
- : _createCommentVNode("v-if", true),
4202
- (_ctx.taskOrchestration.plan)
4203
- ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [
4204
- _createElementVNode("div", { class: "task-plan-summary-strip" }, [
4205
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4206
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.nodes')), 1 /* TEXT */),
4207
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.nodes.length), 1 /* TEXT */)
4208
- ]),
4209
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4210
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.waves')), 1 /* TEXT */),
4211
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.waves.length), 1 /* TEXT */)
4212
- ]),
4213
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4214
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.engine')), 1 /* TEXT */),
4215
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.engine), 1 /* TEXT */)
4216
- ])
4217
- ]),
4218
- _createElementVNode("div", { class: "task-wave-list" }, [
4219
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.waves, (wave) => {
4220
- return (_openBlock(), _createElementBlock("div", {
4221
- key: wave.label,
4222
- class: "task-wave-card"
4630
+ (!_ctx.taskOrchestrationWorkspaceRuns.length)
4631
+ ? (_openBlock(), _createElementBlock("div", {
4632
+ key: 0,
4633
+ class: "task-empty-state"
4223
4634
  }, [
4224
- _createElementVNode("div", { class: "task-wave-title" }, _toDisplayString(wave.label), 1 /* TEXT */),
4225
- _createElementVNode("div", { class: "task-wave-nodes" }, _toDisplayString(wave.nodeIds.join(', ')), 1 /* TEXT */)
4635
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.runs.empty.title')), 1 /* TEXT */),
4636
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.runs.empty.subtitle')), 1 /* TEXT */)
4226
4637
  ]))
4227
- }), 128 /* KEYED_FRAGMENT */))
4228
- ]),
4229
- _createElementVNode("div", { class: "task-node-list" }, [
4230
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.nodes, (node) => {
4231
- return (_openBlock(), _createElementBlock("div", {
4232
- key: node.id,
4233
- class: "task-node-card"
4638
+ : (_openBlock(), _createElementBlock("div", {
4639
+ key: 1,
4640
+ class: "task-runtime-list"
4234
4641
  }, [
4235
- _createElementVNode("div", { class: "task-node-head" }, [
4236
- _createElementVNode("div", null, [
4237
- _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4238
- _createElementVNode("div", { class: "task-node-meta" }, [
4239
- _createTextVNode(_toDisplayString(node.id) + " · " + _toDisplayString(node.kind), 1 /* TEXT */),
4240
- (node.workflowId)
4241
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(node.workflowId), 1 /* TEXT */))
4642
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceRuns, (item) => {
4643
+ return (_openBlock(), _createElementBlock("button", {
4644
+ key: item.runId,
4645
+ type: "button",
4646
+ class: _normalizeClass(['task-runtime-item', { active: _ctx.taskOrchestration.selectedRunId === item.runId }]),
4647
+ onClick: $event => {_ctx.taskOrchestration.workspaceTab = 'detail'; _ctx.selectTaskRun(item.runId)}
4648
+ }, [
4649
+ _createElementVNode("div", { class: "task-runtime-item-main" }, [
4650
+ _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.taskId || item.runId), 1 /* TEXT */),
4651
+ _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.runId) + " · " + _toDisplayString(item.durationMs || 0) + "ms", 1 /* TEXT */),
4652
+ (item.threadId || item.cwd)
4653
+ ? (_openBlock(), _createElementBlock("div", {
4654
+ key: 0,
4655
+ class: "task-runtime-item-meta"
4656
+ }, [
4657
+ (item.threadId)
4658
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')) + ": " + _toDisplayString(item.threadId), 1 /* TEXT */))
4659
+ : _createCommentVNode("v-if", true),
4660
+ (item.threadId && item.cwd)
4661
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · "))
4662
+ : _createCommentVNode("v-if", true),
4663
+ (item.cwd)
4664
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')) + ": " + _toDisplayString(item.cwd), 1 /* TEXT */))
4665
+ : _createCommentVNode("v-if", true)
4666
+ ]))
4667
+ : _createCommentVNode("v-if", true),
4668
+ (item.summary)
4669
+ ? (_openBlock(), _createElementBlock("div", {
4670
+ key: 1,
4671
+ class: "task-runtime-item-summary"
4672
+ }, _toDisplayString(item.summary), 1 /* TEXT */))
4242
4673
  : _createCommentVNode("v-if", true)
4674
+ ]),
4675
+ _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4676
+ _createElementVNode("span", {
4677
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4678
+ }, _toDisplayString(item.status), 3 /* TEXT, CLASS */)
4243
4679
  ])
4244
- ]),
4245
- _createElementVNode("span", {
4246
- class: _normalizeClass(['pill', node.write ? 'configured' : 'empty'])
4247
- }, _toDisplayString(node.write ? _ctx.t('orchestration.plan.node.write') : _ctx.t('orchestration.plan.node.readOnly')), 3 /* TEXT, CLASS */)
4248
- ]),
4249
- _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */)
4680
+ ], 10 /* CLASS, PROPS */, ["onClick"]))
4681
+ }), 128 /* KEYED_FRAGMENT */))
4250
4682
  ]))
4251
- }), 128 /* KEYED_FRAGMENT */))
4252
- ])
4253
- ], 64 /* STABLE_FRAGMENT */))
4254
- : _createCommentVNode("v-if", true)
4255
- ]))
4256
- : _createCommentVNode("v-if", true),
4257
- (_ctx.taskOrchestration.queue.length || _ctx.taskOrchestration.runs.length || _ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4258
- ? (_openBlock(), _createElementBlock("section", {
4259
- key: 1,
4260
- class: "selector-section task-workbench-card"
4261
- }, [
4262
- _createElementVNode("div", { class: "selector-header task-section-header" }, [
4263
- _createElementVNode("div", null, [
4264
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.workbench.title')), 1 /* TEXT */),
4265
- _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.workbench.subtitle')), 1 /* TEXT */)
4266
- ]),
4267
- _createElementVNode("div", { class: "settings-tab-actions task-header-actions" }, [
4268
- _createElementVNode("button", {
4269
- type: "button",
4270
- class: "btn-tool btn-tool-compact",
4271
- onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4272
- disabled: _ctx.taskOrchestration.loading
4273
- }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4274
- (_ctx.taskOrchestration.queue.length)
4275
- ? (_openBlock(), _createElementBlock("button", {
4276
- key: 0,
4683
+ ]))
4684
+ : (_openBlock(), _createElementBlock("div", {
4685
+ key: 3,
4686
+ class: "task-workbench-panel"
4687
+ }, [
4688
+ _createElementVNode("div", { class: "task-detail-toolbar settings-tab-actions" }, [
4689
+ _createElementVNode("button", {
4690
+ type: "button",
4691
+ class: "btn-tool btn-tool-compact",
4692
+ onClick: $event => (_ctx.taskOrchestration.selectedRunId ? _ctx.loadTaskRunDetail(_ctx.taskOrchestration.selectedRunId) : null),
4693
+ disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunLoading
4694
+ }, _toDisplayString(_ctx.taskOrchestration.selectedRunLoading ? _ctx.t('common.refreshing') : _ctx.t('orchestration.detail.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4695
+ _createElementVNode("button", {
4696
+ type: "button",
4697
+ class: "btn-tool btn-tool-compact",
4698
+ onClick: $event => (_ctx.retryTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4699
+ disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.retrying
4700
+ }, _toDisplayString(_ctx.taskOrchestration.retrying ? _ctx.t('orchestration.detail.retrying') : _ctx.t('orchestration.detail.retry')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4701
+ _createElementVNode("button", {
4277
4702
  type: "button",
4278
4703
  class: "btn-tool btn-tool-compact",
4279
- onClick: $event => (_ctx.startTaskQueueRunner()),
4280
- disabled: _ctx.taskOrchestration.queueStarting
4281
- }, _toDisplayString(_ctx.taskOrchestration.queueStarting ? _ctx.t('orchestration.queue.starting') : _ctx.t('orchestration.queue.start')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]))
4704
+ onClick: _ctx.continueTaskThreadFromUi,
4705
+ disabled: !_ctx.taskOrchestrationSelectedRun
4706
+ }, _toDisplayString(_ctx.t('orchestration.detail.continueThread')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4707
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run && _ctx.isTaskRunActive(_ctx.taskOrchestrationSelectedRun.run.status))
4708
+ ? (_openBlock(), _createElementBlock("button", {
4709
+ key: 0,
4710
+ type: "button",
4711
+ class: "btn-tool btn-tool-compact",
4712
+ onClick: $event => (_ctx.cancelTaskRunFromUi(_ctx.taskOrchestration.selectedRunId))
4713
+ }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick"]))
4714
+ : _createCommentVNode("v-if", true)
4715
+ ]),
4716
+ (_ctx.taskOrchestration.selectedRunError)
4717
+ ? (_openBlock(), _createElementBlock("div", {
4718
+ key: 0,
4719
+ class: "task-issue-item"
4720
+ }, _toDisplayString(_ctx.taskOrchestration.selectedRunError), 1 /* TEXT */))
4721
+ : _createCommentVNode("v-if", true),
4722
+ (!_ctx.taskOrchestrationSelectedRun)
4723
+ ? (_openBlock(), _createElementBlock("div", {
4724
+ key: 1,
4725
+ class: "task-empty-state"
4726
+ }, [
4727
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.detail.empty.title')), 1 /* TEXT */),
4728
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.detail.empty.subtitle')), 1 /* TEXT */)
4729
+ ]))
4730
+ : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
4731
+ _createElementVNode("div", { class: "task-detail-summary-strip" }, [
4732
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4733
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.status')), 1 /* TEXT */),
4734
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 1 /* TEXT */)
4735
+ ]),
4736
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4737
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.duration')), 1 /* TEXT */),
4738
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.durationMs || 0) + "ms", 1 /* TEXT */)
4739
+ ]),
4740
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4741
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.nodes')), 1 /* TEXT */),
4742
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4743
+ ]),
4744
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4745
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.summary')), 1 /* TEXT */),
4746
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.t('common.none')), 1 /* TEXT */)
4747
+ ]),
4748
+ (_ctx.taskOrchestrationSelectedRun.threadId)
4749
+ ? (_openBlock(), _createElementBlock("div", {
4750
+ key: 0,
4751
+ class: "task-plan-summary-item"
4752
+ }, [
4753
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4754
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.threadId), 1 /* TEXT */)
4755
+ ]))
4756
+ : _createCommentVNode("v-if", true),
4757
+ (_ctx.taskOrchestrationSelectedRun.cwd)
4758
+ ? (_openBlock(), _createElementBlock("div", {
4759
+ key: 1,
4760
+ class: "task-plan-summary-item"
4761
+ }, [
4762
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4763
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.cwd), 1 /* TEXT */)
4764
+ ]))
4765
+ : _createCommentVNode("v-if", true)
4766
+ ]),
4767
+ (_ctx.taskOrchestrationSelectedRun.run.error)
4768
+ ? (_openBlock(), _createElementBlock("div", {
4769
+ key: 0,
4770
+ class: "task-issue-item"
4771
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.error), 1 /* TEXT */))
4772
+ : _createCommentVNode("v-if", true),
4773
+ _createElementVNode("div", { class: "task-node-list" }, [
4774
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationSelectedRunNodes, (node) => {
4775
+ return (_openBlock(), _createElementBlock("div", {
4776
+ key: node.id,
4777
+ class: "task-node-card task-node-card-detail"
4778
+ }, [
4779
+ _createElementVNode("div", { class: "task-node-head" }, [
4780
+ _createElementVNode("div", null, [
4781
+ _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4782
+ _createElementVNode("div", { class: "task-node-meta" }, _toDisplayString(_ctx.t('orchestration.detail.node.meta', { id: node.id, attempts: (node.attemptCount || 0), autoFix: (node.autoFixRounds || 0) })), 1 /* TEXT */)
4783
+ ]),
4784
+ _createElementVNode("span", {
4785
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(node.status)])
4786
+ }, _toDisplayString(node.status), 3 /* TEXT, CLASS */)
4787
+ ]),
4788
+ (node.summary)
4789
+ ? (_openBlock(), _createElementBlock("div", {
4790
+ key: 0,
4791
+ class: "task-runtime-item-summary"
4792
+ }, _toDisplayString(node.summary), 1 /* TEXT */))
4793
+ : _createCommentVNode("v-if", true),
4794
+ (node.error && node.error !== node.summary)
4795
+ ? (_openBlock(), _createElementBlock("div", {
4796
+ key: 1,
4797
+ class: "task-node-deps"
4798
+ }, _toDisplayString(_ctx.t('orchestration.labels.error')) + _toDisplayString(node.error), 1 /* TEXT */))
4799
+ : _createCommentVNode("v-if", true),
4800
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */),
4801
+ (node.output && typeof node.output === 'object')
4802
+ ? (_openBlock(), _createElementBlock("div", {
4803
+ key: 2,
4804
+ class: "task-node-output-card"
4805
+ }, [
4806
+ _createElementVNode("div", { class: "task-node-output-head" }, [
4807
+ _createElementVNode("strong", null, _toDisplayString(_ctx.t('orchestration.detail.node.output')), 1 /* TEXT */),
4808
+ (node.output.provider || node.output.model)
4809
+ ? (_openBlock(), _createElementBlock("span", {
4810
+ key: 0,
4811
+ class: "task-node-output-meta"
4812
+ }, [
4813
+ _createTextVNode(_toDisplayString(node.output.provider || ''), 1 /* TEXT */),
4814
+ (node.output.provider && node.output.model)
4815
+ ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [
4816
+ _createTextVNode(" · ")
4817
+ ], 64 /* STABLE_FRAGMENT */))
4818
+ : _createCommentVNode("v-if", true),
4819
+ _createTextVNode(_toDisplayString(node.output.model || ''), 1 /* TEXT */)
4820
+ ]))
4821
+ : _createCommentVNode("v-if", true)
4822
+ ]),
4823
+ _createElementVNode("div", { class: "task-node-output-facts" }, [
4824
+ (node.output.endpoint)
4825
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.detail.node.endpoint')) + _toDisplayString(node.output.endpoint), 1 /* TEXT */))
4826
+ : _createCommentVNode("v-if", true),
4827
+ (node.output.status)
4828
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, "HTTP " + _toDisplayString(node.output.status), 1 /* TEXT */))
4829
+ : _createCommentVNode("v-if", true),
4830
+ (node.output.durationMs)
4831
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(node.output.durationMs) + "ms", 1 /* TEXT */))
4832
+ : _createCommentVNode("v-if", true)
4833
+ ]),
4834
+ _createElementVNode("pre", { class: "task-log-block task-output-block" }, _toDisplayString(_ctx.formatTaskNodeOutputText(node)), 1 /* TEXT */),
4835
+ (node.output.materializedFiles && node.output.materializedFiles.length)
4836
+ ? (_openBlock(), _createElementBlock("div", {
4837
+ key: 0,
4838
+ class: "task-materialized-files"
4839
+ }, [
4840
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.detail.node.materializedFiles')), 1 /* TEXT */),
4841
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(node.output.materializedFiles, (file) => {
4842
+ return (_openBlock(), _createElementBlock("div", {
4843
+ key: file.path || file.relativePath,
4844
+ class: "task-materialized-file"
4845
+ }, _toDisplayString(file.relativePath || file.path) + " · " + _toDisplayString(file.bytes || 0) + " bytes", 1 /* TEXT */))
4846
+ }), 128 /* KEYED_FRAGMENT */))
4847
+ ]))
4848
+ : _createCommentVNode("v-if", true),
4849
+ (node.output.workspaceFiles && node.output.workspaceFiles.length)
4850
+ ? (_openBlock(), _createElementBlock("div", {
4851
+ key: 1,
4852
+ class: "task-materialized-files task-workspace-files"
4853
+ }, [
4854
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.detail.node.workspaceFiles')), 1 /* TEXT */),
4855
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(node.output.workspaceFiles, (file) => {
4856
+ return (_openBlock(), _createElementBlock("div", {
4857
+ key: file.path || file.relativePath,
4858
+ class: "task-materialized-file"
4859
+ }, _toDisplayString([String(file.operation || '').trim().toUpperCase(), String(file.relativePath || file.path || '').trim(), Number.isFinite(Number(file.bytes)) ? (Number(file.bytes) + ' bytes') : '', typeof file.existed === 'boolean' ? (file.existed ? 'existed' : 'new') : ''].filter(Boolean).join(' · ')), 1 /* TEXT */))
4860
+ }), 128 /* KEYED_FRAGMENT */))
4861
+ ]))
4862
+ : _createCommentVNode("v-if", true)
4863
+ ]))
4864
+ : _createCommentVNode("v-if", true),
4865
+ _createElementVNode("pre", { class: "task-log-block" }, _toDisplayString(_ctx.formatTaskNodeLogs(node.logs)), 1 /* TEXT */)
4866
+ ]))
4867
+ }), 128 /* KEYED_FRAGMENT */))
4868
+ ])
4869
+ ], 64 /* STABLE_FRAGMENT */))
4870
+ ]))
4871
+ ])
4872
+ ]),
4873
+ _createElementVNode("details", {
4874
+ class: "selector-section task-side-settings-card task-advanced-panel task-quick-advanced",
4875
+ open: _ctx.taskOrchestration.settingsOpen,
4876
+ onToggle: $event => (_ctx.taskOrchestration.settingsOpen = $event.target.open)
4877
+ }, [
4878
+ _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.advanced.title')), 1 /* TEXT */),
4879
+ _createElementVNode("div", { class: "task-action-row-right task-action-row-right-prominent task-codex-queue-action" }, [
4880
+ _createElementVNode("button", {
4881
+ type: "button",
4882
+ class: "btn-tool",
4883
+ onClick: $event => (_ctx.queueTaskOrchestrationAndStart()),
4884
+ disabled: _ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4885
+ }, _toDisplayString((_ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting) ? _ctx.t('orchestration.actions.processing') : _ctx.t('orchestration.actions.queueAndStart')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4886
+ ]),
4887
+ _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-secondary" }, [
4888
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4889
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.title')), 1 /* TEXT */),
4890
+ _withDirectives(_createElementVNode("input", {
4891
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.title) = $event),
4892
+ class: "model-input",
4893
+ type: "text",
4894
+ placeholder: _ctx.t('orchestration.fields.title.placeholder')
4895
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4896
+ [_vModelText, _ctx.taskOrchestration.title]
4897
+ ])
4898
+ ]),
4899
+ _createElementVNode("label", { class: "selector-field" }, [
4900
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.engine')), 1 /* TEXT */),
4901
+ _withDirectives(_createElementVNode("select", {
4902
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.selectedEngine) = $event),
4903
+ class: "provider-fast-switch-select",
4904
+ onChange: $event => (_ctx.taskOrchestration.selectedEngine === 'workflow' ? null : _ctx.taskOrchestration.workflowIdsText = '')
4905
+ }, [
4906
+ _createElementVNode("option", { value: "openai-chat" }, _toDisplayString(_ctx.t('orchestration.engine.openaiChat')), 1 /* TEXT */),
4907
+ _createElementVNode("option", { value: "workflow" }, _toDisplayString(_ctx.t('orchestration.engine.workflow')), 1 /* TEXT */)
4908
+ ], 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onChange"]), [
4909
+ [_vModelSelect, _ctx.taskOrchestration.selectedEngine]
4910
+ ])
4911
+ ]),
4912
+ _createElementVNode("label", { class: "selector-field" }, [
4913
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.runMode')), 1 /* TEXT */),
4914
+ _withDirectives(_createElementVNode("select", {
4915
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.runMode) = $event),
4916
+ class: "provider-fast-switch-select"
4917
+ }, [
4918
+ _createElementVNode("option", { value: "write" }, _toDisplayString(_ctx.t('orchestration.runMode.write')), 1 /* TEXT */),
4919
+ _createElementVNode("option", { value: "read" }, _toDisplayString(_ctx.t('orchestration.runMode.readOnly')), 1 /* TEXT */),
4920
+ _createElementVNode("option", { value: "dry-run" }, _toDisplayString(_ctx.t('orchestration.runMode.dryRun')), 1 /* TEXT */)
4921
+ ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
4922
+ [_vModelSelect, _ctx.taskOrchestration.runMode]
4923
+ ])
4924
+ ]),
4925
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4926
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.notes')), 1 /* TEXT */),
4927
+ _withDirectives(_createElementVNode("textarea", {
4928
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.notes) = $event),
4929
+ class: "task-textarea",
4930
+ rows: "3",
4931
+ placeholder: _ctx.t('orchestration.fields.notes.placeholder')
4932
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4933
+ [_vModelText, _ctx.taskOrchestration.notes]
4934
+ ]),
4935
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.notes.hint')), 1 /* TEXT */)
4936
+ ]),
4937
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4938
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.workspacePath')), 1 /* TEXT */),
4939
+ _withDirectives(_createElementVNode("input", {
4940
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.workspacePath) = $event),
4941
+ class: "model-input",
4942
+ type: "text",
4943
+ placeholder: _ctx.t('orchestration.fields.workspacePath.placeholder')
4944
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4945
+ [_vModelText, _ctx.taskOrchestration.workspacePath]
4946
+ ]),
4947
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.workspacePath.hint')), 1 /* TEXT */)
4948
+ ]),
4949
+ _createElementVNode("label", { class: "selector-field" }, [
4950
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.threadId')), 1 /* TEXT */),
4951
+ _withDirectives(_createElementVNode("input", {
4952
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.threadId) = $event),
4953
+ class: "model-input",
4954
+ type: "text",
4955
+ placeholder: _ctx.t('orchestration.fields.threadId.placeholder')
4956
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4957
+ [_vModelText, _ctx.taskOrchestration.threadId]
4958
+ ]),
4959
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.threadId.hint')), 1 /* TEXT */)
4960
+ ]),
4961
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4962
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.followUps')), 1 /* TEXT */),
4963
+ _withDirectives(_createElementVNode("textarea", {
4964
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.followUpsText) = $event),
4965
+ class: "task-textarea",
4966
+ rows: "3",
4967
+ placeholder: _ctx.t('orchestration.fields.followUps.placeholder')
4968
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4969
+ [_vModelText, _ctx.taskOrchestration.followUpsText]
4970
+ ])
4971
+ ]),
4972
+ _createElementVNode("label", { class: "selector-field" }, [
4973
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.concurrency')), 1 /* TEXT */),
4974
+ _withDirectives(_createElementVNode("input", {
4975
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.concurrency) = $event),
4976
+ class: "model-input",
4977
+ type: "number",
4978
+ min: "1",
4979
+ max: "8"
4980
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
4981
+ [_vModelText, _ctx.taskOrchestration.concurrency]
4982
+ ]),
4983
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.concurrency.hint')), 1 /* TEXT */)
4984
+ ]),
4985
+ _createElementVNode("label", { class: "selector-field" }, [
4986
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.autoFixRounds')), 1 /* TEXT */),
4987
+ _withDirectives(_createElementVNode("input", {
4988
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.autoFixRounds) = $event),
4989
+ class: "model-input",
4990
+ type: "number",
4991
+ min: "0",
4992
+ max: "5"
4993
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue"]), [
4994
+ [_vModelText, _ctx.taskOrchestration.autoFixRounds]
4995
+ ]),
4996
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.autoFixRounds.hint')), 1 /* TEXT */)
4997
+ ]),
4998
+ (_ctx.taskOrchestration.selectedEngine === 'workflow')
4999
+ ? (_openBlock(), _createElementBlock("label", {
5000
+ key: 0,
5001
+ class: "selector-field task-field-wide"
5002
+ }, [
5003
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.workflowIds')), 1 /* TEXT */),
5004
+ _withDirectives(_createElementVNode("textarea", {
5005
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.workflowIdsText) = $event),
5006
+ class: "task-textarea",
5007
+ rows: "3",
5008
+ placeholder: _ctx.t('orchestration.fields.workflowIds.placeholder')
5009
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
5010
+ [_vModelText, _ctx.taskOrchestration.workflowIdsText]
5011
+ ]),
5012
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.workflowIds.hint', { count: _ctx.taskOrchestration.workflows.length })), 1 /* TEXT */),
5013
+ (_ctx.taskOrchestration.workflows.length)
5014
+ ? (_openBlock(), _createElementBlock("div", {
5015
+ key: 0,
5016
+ class: "task-workflow-suggestions"
5017
+ }, [
5018
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.workflows, (workflow) => {
5019
+ return (_openBlock(), _createElementBlock("button", {
5020
+ key: workflow.id || workflow.name,
5021
+ type: "button",
5022
+ class: "task-workflow-chip",
5023
+ onClick: $event => (_ctx.appendTaskWorkflowId(workflow.id || workflow.name))
5024
+ }, [
5025
+ _createElementVNode("span", null, _toDisplayString(workflow.name || workflow.id), 1 /* TEXT */),
5026
+ (workflow.stepCount)
5027
+ ? (_openBlock(), _createElementBlock("small", { key: 0 }, _toDisplayString(_ctx.t('orchestration.workflow.stepCount', { count: workflow.stepCount })), 1 /* TEXT */))
5028
+ : _createCommentVNode("v-if", true)
5029
+ ], 8 /* PROPS */, ["onClick"]))
5030
+ }), 128 /* KEYED_FRAGMENT */))
5031
+ ]))
4282
5032
  : _createCommentVNode("v-if", true)
5033
+ ]))
5034
+ : _createCommentVNode("v-if", true)
5035
+ ])
5036
+ ], 40 /* PROPS, NEED_HYDRATION */, ["open", "onToggle"]),
5037
+ _createElementVNode("div", { class: "task-provider-status-card" }, [
5038
+ _createElementVNode("div", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.openai.status.title')), 1 /* TEXT */),
5039
+ _createElementVNode("div", { class: "task-readiness-copy" }, _toDisplayString(_ctx.t('orchestration.openai.status.subtitle')), 1 /* TEXT */),
5040
+ (_ctx.taskOrchestration.openAiChatStatus)
5041
+ ? (_openBlock(), _createElementBlock("div", {
5042
+ key: 0,
5043
+ class: "task-provider-status-grid"
5044
+ }, [
5045
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5046
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.provider')), 1 /* TEXT */),
5047
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.providerName ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5048
+ ]),
5049
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5050
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.model')), 1 /* TEXT */),
5051
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.model ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5052
+ ]),
5053
+ _createElementVNode("div", { class: "task-provider-status-row task-provider-status-row-wide" }, [
5054
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.endpoint')), 1 /* TEXT */),
5055
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.endpoint ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5056
+ ]),
5057
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5058
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.apiKey')), 1 /* TEXT */),
5059
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.hasApiKey ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.missing')), 1 /* TEXT */)
5060
+ ]),
5061
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5062
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.headers')), 1 /* TEXT */),
5063
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.hasExtraHeaders ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
4283
5064
  ])
4284
- ]),
4285
- ((_ctx.taskOrchestration.queue.length ? 1 : 0) + (_ctx.taskOrchestration.runs.length ? 1 : 0) + ((_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError) ? 1 : 0) > 1)
4286
- ? (_openBlock(), _createElementBlock("div", {
4287
- key: 0,
4288
- class: "task-workbench-tabs",
4289
- role: "group",
4290
- "aria-label": _ctx.t('orchestration.workbench.tabs.aria')
4291
- }, [
4292
- (_ctx.taskOrchestration.queue.length)
4293
- ? (_openBlock(), _createElementBlock("button", {
4294
- key: 0,
4295
- type: "button",
4296
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'queue' }]),
4297
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'queue')
4298
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.queue', { count: _ctx.taskOrchestration.queue.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4299
- : _createCommentVNode("v-if", true),
4300
- (_ctx.taskOrchestration.runs.length)
4301
- ? (_openBlock(), _createElementBlock("button", {
4302
- key: 1,
4303
- type: "button",
4304
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'runs' }]),
4305
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'runs')
4306
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.runs', { count: _ctx.taskOrchestration.runs.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4307
- : _createCommentVNode("v-if", true),
4308
- (_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4309
- ? (_openBlock(), _createElementBlock("button", {
4310
- key: 2,
4311
- type: "button",
4312
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'detail' }]),
4313
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'detail')
4314
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.detail')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4315
- : _createCommentVNode("v-if", true)
4316
- ], 8 /* PROPS */, ["aria-label"]))
4317
- : _createCommentVNode("v-if", true),
4318
- (_ctx.taskOrchestration.workspaceTab === 'queue' || (!_ctx.taskOrchestration.runs.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4319
- ? (_openBlock(), _createElementBlock("div", {
4320
- key: 1,
4321
- class: "task-workbench-panel"
4322
- }, [
4323
- (!_ctx.taskOrchestration.queue.length)
4324
- ? (_openBlock(), _createElementBlock("div", {
4325
- key: 0,
4326
- class: "task-empty-state"
4327
- }, [
4328
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.queue.empty.title')), 1 /* TEXT */),
4329
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.queue.empty.subtitle')), 1 /* TEXT */)
4330
- ]))
4331
- : (_openBlock(), _createElementBlock("div", {
4332
- key: 1,
4333
- class: "task-runtime-list"
4334
- }, [
4335
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.queue, (item) => {
4336
- return (_openBlock(), _createElementBlock("div", {
4337
- key: item.taskId,
4338
- class: _normalizeClass(['task-runtime-item', { active: item.lastRunId && _ctx.taskOrchestration.selectedRunId === item.lastRunId, clickable: !!item.lastRunId }]),
4339
- role: item.lastRunId ? 'button' : null,
4340
- tabindex: item.lastRunId ? 0 : -1,
4341
- "aria-disabled": item.lastRunId ? null : 'true',
4342
- onClick: $event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null),
4343
- onKeydown: [
4344
- _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["enter"]),
4345
- _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["space"])
4346
- ]
4347
- }, [
4348
- _createElementVNode("div", { class: "task-runtime-item-main" }, [
4349
- _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.target || item.taskId), 1 /* TEXT */),
4350
- _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.taskId) + " · " + _toDisplayString(item.updatedAt || item.createdAt), 1 /* TEXT */),
4351
- (item.lastSummary)
4352
- ? (_openBlock(), _createElementBlock("div", {
4353
- key: 0,
4354
- class: "task-runtime-item-summary"
4355
- }, _toDisplayString(item.lastSummary), 1 /* TEXT */))
4356
- : _createCommentVNode("v-if", true)
4357
- ]),
4358
- _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4359
- _createElementVNode("span", {
4360
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4361
- }, _toDisplayString(item.status), 3 /* TEXT, CLASS */),
4362
- _createElementVNode("button", {
4363
- type: "button",
4364
- class: "btn-mini",
4365
- onClick: _withModifiers($event => (_ctx.cancelTaskRunFromUi(item.taskId)), ["stop"]),
4366
- disabled: item.status !== 'queued' && item.status !== 'running'
4367
- }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4368
- ])
4369
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["role", "tabindex", "aria-disabled", "onClick", "onKeydown"]))
4370
- }), 128 /* KEYED_FRAGMENT */))
4371
- ]))
4372
- ]))
4373
- : (_ctx.taskOrchestration.workspaceTab === 'runs' || (!_ctx.taskOrchestration.queue.length && _ctx.taskOrchestration.runs.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4374
- ? (_openBlock(), _createElementBlock("div", {
4375
- key: 2,
4376
- class: "task-workbench-panel"
4377
- }, [
4378
- (!_ctx.taskOrchestration.runs.length)
4379
- ? (_openBlock(), _createElementBlock("div", {
4380
- key: 0,
4381
- class: "task-empty-state"
4382
- }, [
4383
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.runs.empty.title')), 1 /* TEXT */),
4384
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.runs.empty.subtitle')), 1 /* TEXT */)
4385
- ]))
4386
- : (_openBlock(), _createElementBlock("div", {
4387
- key: 1,
4388
- class: "task-runtime-list"
4389
- }, [
4390
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.runs, (item) => {
4391
- return (_openBlock(), _createElementBlock("button", {
4392
- key: item.runId,
4393
- type: "button",
4394
- class: _normalizeClass(['task-runtime-item', { active: _ctx.taskOrchestration.selectedRunId === item.runId }]),
4395
- onClick: $event => {_ctx.taskOrchestration.workspaceTab = 'detail'; _ctx.selectTaskRun(item.runId)}
4396
- }, [
4397
- _createElementVNode("div", { class: "task-runtime-item-main" }, [
4398
- _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.taskId || item.runId), 1 /* TEXT */),
4399
- _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.runId) + " · " + _toDisplayString(item.durationMs || 0) + "ms", 1 /* TEXT */),
4400
- (item.summary)
4401
- ? (_openBlock(), _createElementBlock("div", {
4402
- key: 0,
4403
- class: "task-runtime-item-summary"
4404
- }, _toDisplayString(item.summary), 1 /* TEXT */))
4405
- : _createCommentVNode("v-if", true)
4406
- ]),
4407
- _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4408
- _createElementVNode("span", {
4409
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4410
- }, _toDisplayString(item.status), 3 /* TEXT, CLASS */)
4411
- ])
4412
- ], 10 /* CLASS, PROPS */, ["onClick"]))
4413
- }), 128 /* KEYED_FRAGMENT */))
4414
- ]))
4415
- ]))
4416
- : (_openBlock(), _createElementBlock("div", {
4417
- key: 3,
4418
- class: "task-workbench-panel"
4419
- }, [
4420
- _createElementVNode("div", { class: "task-detail-toolbar settings-tab-actions" }, [
4421
- _createElementVNode("button", {
4422
- type: "button",
4423
- class: "btn-tool btn-tool-compact",
4424
- onClick: $event => (_ctx.taskOrchestration.selectedRunId ? _ctx.loadTaskRunDetail(_ctx.taskOrchestration.selectedRunId) : null),
4425
- disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunLoading
4426
- }, _toDisplayString(_ctx.taskOrchestration.selectedRunLoading ? _ctx.t('common.refreshing') : _ctx.t('orchestration.detail.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4427
- _createElementVNode("button", {
4428
- type: "button",
4429
- class: "btn-tool btn-tool-compact",
4430
- onClick: $event => (_ctx.retryTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4431
- disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.retrying
4432
- }, _toDisplayString(_ctx.taskOrchestration.retrying ? _ctx.t('orchestration.detail.retrying') : _ctx.t('orchestration.detail.retry')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4433
- _createElementVNode("button", {
4434
- type: "button",
4435
- class: "btn-tool btn-tool-compact",
4436
- onClick: $event => (_ctx.cancelTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4437
- disabled: !_ctx.taskOrchestrationSelectedRun || !_ctx.taskOrchestrationSelectedRun.run || !_ctx.isTaskRunActive(_ctx.taskOrchestrationSelectedRun.run.status)
4438
- }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4439
- ]),
4440
- (_ctx.taskOrchestration.selectedRunError)
4441
- ? (_openBlock(), _createElementBlock("div", {
4442
- key: 0,
4443
- class: "task-issue-item"
4444
- }, _toDisplayString(_ctx.taskOrchestration.selectedRunError), 1 /* TEXT */))
4445
- : _createCommentVNode("v-if", true),
4446
- (!_ctx.taskOrchestrationSelectedRun)
4447
- ? (_openBlock(), _createElementBlock("div", {
4448
- key: 1,
4449
- class: "task-empty-state"
4450
- }, [
4451
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.detail.empty.title')), 1 /* TEXT */),
4452
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.detail.empty.subtitle')), 1 /* TEXT */)
4453
- ]))
4454
- : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
4455
- _createElementVNode("div", { class: "task-detail-summary-strip" }, [
4456
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4457
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.status')), 1 /* TEXT */),
4458
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 1 /* TEXT */)
4459
- ]),
4460
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4461
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.duration')), 1 /* TEXT */),
4462
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.durationMs || 0) + "ms", 1 /* TEXT */)
4463
- ]),
4464
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4465
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.nodes')), 1 /* TEXT */),
4466
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4467
- ]),
4468
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4469
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.summary')), 1 /* TEXT */),
4470
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.t('common.none')), 1 /* TEXT */)
4471
- ])
4472
- ]),
4473
- (_ctx.taskOrchestrationSelectedRun.run.error)
4474
- ? (_openBlock(), _createElementBlock("div", {
4475
- key: 0,
4476
- class: "task-issue-item"
4477
- }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.error), 1 /* TEXT */))
4478
- : _createCommentVNode("v-if", true),
4479
- _createElementVNode("div", { class: "task-node-list" }, [
4480
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationSelectedRunNodes, (node) => {
4481
- return (_openBlock(), _createElementBlock("div", {
4482
- key: node.id,
4483
- class: "task-node-card task-node-card-detail"
4484
- }, [
4485
- _createElementVNode("div", { class: "task-node-head" }, [
4486
- _createElementVNode("div", null, [
4487
- _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4488
- _createElementVNode("div", { class: "task-node-meta" }, _toDisplayString(_ctx.t('orchestration.detail.node.meta', { id: node.id, attempts: (node.attemptCount || 0), autoFix: (node.autoFixRounds || 0) })), 1 /* TEXT */)
4489
- ]),
4490
- _createElementVNode("span", {
4491
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(node.status)])
4492
- }, _toDisplayString(node.status), 3 /* TEXT, CLASS */)
4493
- ]),
4494
- (node.summary)
4495
- ? (_openBlock(), _createElementBlock("div", {
4496
- key: 0,
4497
- class: "task-runtime-item-summary"
4498
- }, _toDisplayString(node.summary), 1 /* TEXT */))
4499
- : _createCommentVNode("v-if", true),
4500
- (node.error && node.error !== node.summary)
4501
- ? (_openBlock(), _createElementBlock("div", {
4502
- key: 1,
4503
- class: "task-node-deps"
4504
- }, _toDisplayString(_ctx.t('orchestration.labels.error')) + _toDisplayString(node.error), 1 /* TEXT */))
4505
- : _createCommentVNode("v-if", true),
4506
- _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */),
4507
- _createElementVNode("pre", { class: "task-log-block" }, _toDisplayString(_ctx.formatTaskNodeLogs(node.logs)), 1 /* TEXT */)
4508
- ]))
4509
- }), 128 /* KEYED_FRAGMENT */))
4510
- ])
4511
- ], 64 /* STABLE_FRAGMENT */))
4512
- ]))
4513
- ]))
4514
- : _createCommentVNode("v-if", true)
5065
+ ]))
5066
+ : (_openBlock(), _createElementBlock("div", {
5067
+ key: 1,
5068
+ class: "task-readiness-copy"
5069
+ }, _toDisplayString(_ctx.t('orchestration.openai.status.notLoaded')), 1 /* TEXT */)),
5070
+ (_ctx.taskOrchestration.openAiChatStatus && _ctx.taskOrchestration.openAiChatStatus.error)
5071
+ ? (_openBlock(), _createElementBlock("div", {
5072
+ key: 2,
5073
+ class: "task-issue-item task-provider-status-error"
5074
+ }, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.error), 1 /* TEXT */))
5075
+ : _createCommentVNode("v-if", true),
5076
+ _createElementVNode("button", {
5077
+ type: "button",
5078
+ class: "btn-tool btn-tool-compact task-provider-config-button",
5079
+ onClick: $event => (_ctx.openTaskOpenAiChatConfig())
5080
+ }, _toDisplayString(_ctx.t('orchestration.openai.status.configure')), 9 /* TEXT, PROPS */, ["onClick"])
5081
+ ]),
5082
+ _createElementVNode("div", { class: "task-readiness-head" }, [
5083
+ _createElementVNode("div", null, [
5084
+ _createElementVNode("div", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.quick.checklist.title')), 1 /* TEXT */),
5085
+ _createElementVNode("div", { class: "task-readiness-copy" }, _toDisplayString(_ctx.t('orchestration.quick.checklist.subtitle')), 1 /* TEXT */)
5086
+ ])
5087
+ ]),
5088
+ _createElementVNode("div", { class: "task-readiness-grid task-quick-checklist" }, [
5089
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationDraftChecklist, (item) => {
5090
+ return (_openBlock(), _createElementBlock("div", {
5091
+ key: item.key,
5092
+ class: _normalizeClass(['task-readiness-item', { done: item.done }])
5093
+ }, [
5094
+ _createElementVNode("strong", null, _toDisplayString(item.label), 1 /* TEXT */),
5095
+ _createElementVNode("span", null, _toDisplayString(item.detail), 1 /* TEXT */)
5096
+ ], 2 /* CLASS */))
5097
+ }), 128 /* KEYED_FRAGMENT */))
5098
+ ]),
5099
+ _createElementVNode("div", { class: "task-quick-status-card" }, [
5100
+ _createElementVNode("div", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.quick.status.title')), 1 /* TEXT */),
5101
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.title), 1 /* TEXT */),
5102
+ _createElementVNode("span", null, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.summary), 1 /* TEXT */)
5103
+ ])
5104
+ ])
5105
+ ])
5106
+ ]),
5107
+ (!(_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError || _ctx.taskOrchestrationWorkspaceQueue.length || _ctx.taskOrchestrationWorkspaceRuns.length || _ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError))
5108
+ ? (_openBlock(), _createElementBlock("section", {
5109
+ key: 0,
5110
+ class: "selector-section task-stage-card"
5111
+ }, [
5112
+ _createElementVNode("div", { class: "task-stage-empty" }, [
5113
+ _createElementVNode("div", null, [
5114
+ _createElementVNode("div", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.stage.title')), 1 /* TEXT */),
5115
+ _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.stage.subtitle')), 1 /* TEXT */)
5116
+ ]),
5117
+ _createElementVNode("div", { class: "task-stage-strip" }, [
5118
+ _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.target')), 1 /* TEXT */),
5119
+ _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.preview')), 1 /* TEXT */),
5120
+ _createElementVNode("div", { class: "task-stage-pill" }, _toDisplayString(_ctx.t('orchestration.stage.pill.run')), 1 /* TEXT */)
5121
+ ])
5122
+ ])
4515
5123
  ]))
4516
- ], 512 /* NEED_PATCH */)), [
5124
+ : _createCommentVNode("v-if", true)
5125
+ ], 8 /* PROPS */, ["data-active"])), [
4517
5126
  [_vShow, _ctx.mainTab === 'orchestration']
4518
5127
  ])
4519
5128
  : _createCommentVNode("v-if", true),
@@ -8905,7 +9514,7 @@ return function render(_ctx, _cache) {
8905
9514
  onClick: _withModifiers($event => (_ctx.showHealthCheckModal = false), ["self"])
8906
9515
  }, [
8907
9516
  _createElementVNode("div", {
8908
- class: "modal",
9517
+ class: "modal modal-health-check",
8909
9518
  role: "dialog",
8910
9519
  "aria-modal": "true",
8911
9520
  "aria-labelledby": "health-check-modal-title"
@@ -8914,73 +9523,155 @@ return function render(_ctx, _cache) {
8914
9523
  class: "modal-title",
8915
9524
  id: "health-check-modal-title"
8916
9525
  }, _toDisplayString(_ctx.t('config.health.title')), 1 /* TEXT */),
8917
- (!_ctx.healthCheckResult)
8918
- ? (_openBlock(), _createElementBlock("div", {
8919
- key: 0,
8920
- class: "state-message"
8921
- }, _toDisplayString(_ctx.t('common.notLoaded')), 1 /* TEXT */))
8922
- : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [
8923
- _createElementVNode("div", { class: "form-hint" }, [
8924
- _createTextVNode(_toDisplayString(_ctx.healthCheckResult.ok ? _ctx.t('config.health.ok') : _ctx.t('config.health.fail')) + " ", 1 /* TEXT */),
8925
- (_ctx.healthCheckResult.issues)
8926
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, "(" + _toDisplayString(_ctx.t('config.health.issues', { count: _ctx.healthCheckResult.issues.length })) + ")", 1 /* TEXT */))
9526
+ _createElementVNode("div", { class: "health-check-modal-body" }, [
9527
+ (!_ctx.healthCheckResult)
9528
+ ? (_openBlock(), _createElementBlock("div", {
9529
+ key: 0,
9530
+ class: "state-message"
9531
+ }, _toDisplayString(_ctx.t('common.notLoaded')), 1 /* TEXT */))
9532
+ : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [
9533
+ _createElementVNode("div", { class: "form-hint" }, [
9534
+ _createTextVNode(_toDisplayString(_ctx.healthCheckResult.ok ? _ctx.t('config.health.ok') : _ctx.t('config.health.fail')) + " ", 1 /* TEXT */),
9535
+ (_ctx.healthCheckResult.issues)
9536
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, "(" + _toDisplayString(_ctx.t('config.health.issues', { count: _ctx.healthCheckResult.issues.length })) + ")", 1 /* TEXT */))
9537
+ : _createCommentVNode("v-if", true)
9538
+ ]),
9539
+ (_ctx.healthCheckResult.remote && _ctx.healthCheckResult.remote.type === 'remote-health-check')
9540
+ ? (_openBlock(), _createElementBlock("div", {
9541
+ key: 0,
9542
+ class: "form-hint"
9543
+ }, [
9544
+ _createTextVNode(_toDisplayString(_ctx.healthCheckResult.remote.endpoint || '') + " ", 1 /* TEXT */),
9545
+ (_ctx.healthCheckResult.remote.statusCode)
9546
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(_ctx.healthCheckResult.remote.statusCode), 1 /* TEXT */))
9547
+ : _createCommentVNode("v-if", true),
9548
+ (_ctx.healthCheckResult.remote.message)
9549
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · " + _toDisplayString(_ctx.healthCheckResult.remote.message), 1 /* TEXT */))
9550
+ : _createCommentVNode("v-if", true)
9551
+ ]))
9552
+ : _createCommentVNode("v-if", true),
9553
+ (_ctx.healthCheckResult.remote && _ctx.healthCheckResult.remote.type === 'providers-health')
9554
+ ? (_openBlock(), _createElementBlock("div", {
9555
+ key: 1,
9556
+ class: "form-hint"
9557
+ }, _toDisplayString(_ctx.t('config.health.providersSummary', _ctx.healthCheckResult.remote.summary || { total: 0, green: 0, yellow: 0, red: 0 })), 1 /* TEXT */))
9558
+ : _createCommentVNode("v-if", true),
9559
+ (_ctx.getHealthCheckFailedProviderItems().length)
9560
+ ? (_openBlock(), _createElementBlock("div", {
9561
+ key: 2,
9562
+ class: "model-list health-failed-provider-list"
9563
+ }, [
9564
+ _createElementVNode("div", { class: "model-item health-failed-provider-header" }, [
9565
+ _createElementVNode("span", { class: "health-failed-provider-main" }, [
9566
+ _createElementVNode("input", {
9567
+ type: "checkbox",
9568
+ checked: _ctx.areAllHealthCheckFailedProvidersSelected(),
9569
+ disabled: !_ctx.getSelectableHealthCheckFailedProviderItems().length || _ctx.healthCheckFailedProviderDeleting,
9570
+ onChange: $event => (_ctx.setAllHealthCheckFailedProviderSelections($event.target.checked)),
9571
+ "aria-label": _ctx.t('config.health.failedProviders.selectAllAria')
9572
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange", "aria-label"]),
9573
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('config.health.failedProviders.title')), 1 /* TEXT */)
9574
+ ]),
9575
+ _createElementVNode("span", { class: "health-failed-provider-actions" }, [
9576
+ _createElementVNode("button", {
9577
+ type: "button",
9578
+ class: "btn-link",
9579
+ disabled: !_ctx.getSelectableHealthCheckFailedProviderItems().length || _ctx.healthCheckFailedProviderDeleting,
9580
+ onClick: $event => (_ctx.setAllHealthCheckFailedProviderSelections(true))
9581
+ }, _toDisplayString(_ctx.t('config.health.failedProviders.selectAll')), 9 /* TEXT, PROPS */, ["disabled", "onClick"]),
9582
+ _createElementVNode("button", {
9583
+ type: "button",
9584
+ class: "btn-link",
9585
+ disabled: !_ctx.hasHealthCheckFailedProviderSelection() || _ctx.healthCheckFailedProviderDeleting,
9586
+ onClick: $event => (_ctx.setAllHealthCheckFailedProviderSelections(false))
9587
+ }, _toDisplayString(_ctx.t('config.health.failedProviders.clearSelection')), 9 /* TEXT, PROPS */, ["disabled", "onClick"]),
9588
+ _createElementVNode("span", { class: "latency error" }, _toDisplayString(_ctx.getHealthCheckFailedProviderItems().length), 1 /* TEXT */)
9589
+ ])
9590
+ ]),
9591
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getHealthCheckFailedProviderItems(), (item) => {
9592
+ return (_openBlock(), _createElementBlock("label", {
9593
+ key: item.key,
9594
+ class: _normalizeClass(["model-item health-failed-provider-item", { disabled: !item.deletable }])
9595
+ }, [
9596
+ _createElementVNode("span", { class: "health-failed-provider-main" }, [
9597
+ _createElementVNode("input", {
9598
+ type: "checkbox",
9599
+ checked: item.selected,
9600
+ disabled: !item.deletable || _ctx.healthCheckFailedProviderDeleting,
9601
+ onChange: $event => (_ctx.toggleHealthCheckFailedProviderSelection(item, $event.target.checked)),
9602
+ "aria-label": _ctx.t('config.health.failedProviders.selectAria', { name: item.name })
9603
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "disabled", "onChange", "aria-label"]),
9604
+ _createElementVNode("span", null, [
9605
+ _createElementVNode("strong", null, _toDisplayString(item.name), 1 /* TEXT */),
9606
+ (item.detail)
9607
+ ? (_openBlock(), _createElementBlock("span", {
9608
+ key: 0,
9609
+ class: "form-hint"
9610
+ }, _toDisplayString(item.detail), 1 /* TEXT */))
9611
+ : _createCommentVNode("v-if", true),
9612
+ (!item.deletable)
9613
+ ? (_openBlock(), _createElementBlock("span", {
9614
+ key: 1,
9615
+ class: "form-hint"
9616
+ }, _toDisplayString(item.blockedReason === 'readonly' ? _ctx.t('config.health.failedProviders.writeRequired') : _ctx.t('config.health.failedProviders.notDeletable')), 1 /* TEXT */))
9617
+ : _createCommentVNode("v-if", true)
9618
+ ])
9619
+ ]),
9620
+ _createElementVNode("span", { class: "latency error" }, _toDisplayString(item.status), 1 /* TEXT */)
9621
+ ], 2 /* CLASS */))
9622
+ }), 128 /* KEYED_FRAGMENT */))
9623
+ ]))
9624
+ : _createCommentVNode("v-if", true),
9625
+ (_ctx.healthCheckResult.remote && _ctx.healthCheckResult.remote.speedTests)
9626
+ ? (_openBlock(), _createElementBlock("div", {
9627
+ key: 3,
9628
+ class: "model-list"
9629
+ }, [
9630
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.healthCheckResult.remote.speedTests, (result, name) => {
9631
+ return (_openBlock(), _createElementBlock("div", {
9632
+ key: 'health-speed-' + name,
9633
+ class: "model-item"
9634
+ }, [
9635
+ _createElementVNode("span", null, _toDisplayString(name), 1 /* TEXT */),
9636
+ (result && result.ok)
9637
+ ? (_openBlock(), _createElementBlock("span", {
9638
+ key: 0,
9639
+ class: "latency ok"
9640
+ }, _toDisplayString(_ctx.formatLatency(result)), 1 /* TEXT */))
9641
+ : (_openBlock(), _createElementBlock("span", {
9642
+ key: 1,
9643
+ class: "latency error"
9644
+ }, _toDisplayString((result && result.error) ? result.error : _ctx.t('config.health.fail')), 1 /* TEXT */))
9645
+ ]))
9646
+ }), 128 /* KEYED_FRAGMENT */))
9647
+ ]))
9648
+ : _createCommentVNode("v-if", true),
9649
+ (_ctx.healthCheckResult.issues && _ctx.healthCheckResult.issues.length)
9650
+ ? (_openBlock(), _createElementBlock("div", {
9651
+ key: 4,
9652
+ class: "model-list"
9653
+ }, [
9654
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.healthCheckResult.issues, (issue, index) => {
9655
+ return (_openBlock(), _createElementBlock("div", {
9656
+ key: issue.code || ('health-issue-' + index),
9657
+ class: "model-item"
9658
+ }, [
9659
+ _createElementVNode("span", null, _toDisplayString(issue.message || issue.code || ''), 1 /* TEXT */)
9660
+ ]))
9661
+ }), 128 /* KEYED_FRAGMENT */))
9662
+ ]))
8927
9663
  : _createCommentVNode("v-if", true)
8928
- ]),
8929
- (_ctx.healthCheckResult.remote && _ctx.healthCheckResult.remote.type === 'remote-health-check')
8930
- ? (_openBlock(), _createElementBlock("div", {
8931
- key: 0,
8932
- class: "form-hint"
8933
- }, [
8934
- _createTextVNode(_toDisplayString(_ctx.healthCheckResult.remote.endpoint || '') + " ", 1 /* TEXT */),
8935
- (_ctx.healthCheckResult.remote.statusCode)
8936
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(_ctx.healthCheckResult.remote.statusCode), 1 /* TEXT */))
8937
- : _createCommentVNode("v-if", true),
8938
- (_ctx.healthCheckResult.remote.message)
8939
- ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · " + _toDisplayString(_ctx.healthCheckResult.remote.message), 1 /* TEXT */))
8940
- : _createCommentVNode("v-if", true)
8941
- ]))
8942
- : _createCommentVNode("v-if", true),
8943
- (_ctx.healthCheckResult.remote && _ctx.healthCheckResult.remote.speedTests)
8944
- ? (_openBlock(), _createElementBlock("div", {
8945
- key: 1,
8946
- class: "model-list"
8947
- }, [
8948
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.healthCheckResult.remote.speedTests, (result, name) => {
8949
- return (_openBlock(), _createElementBlock("div", {
8950
- key: 'health-speed-' + name,
8951
- class: "model-item"
8952
- }, [
8953
- _createElementVNode("span", null, _toDisplayString(name), 1 /* TEXT */),
8954
- (result && result.ok)
8955
- ? (_openBlock(), _createElementBlock("span", {
8956
- key: 0,
8957
- class: "latency ok"
8958
- }, _toDisplayString(_ctx.formatLatency(result)), 1 /* TEXT */))
8959
- : (_openBlock(), _createElementBlock("span", {
8960
- key: 1,
8961
- class: "latency error"
8962
- }, _toDisplayString((result && result.error) ? result.error : _ctx.t('config.health.fail')), 1 /* TEXT */))
8963
- ]))
8964
- }), 128 /* KEYED_FRAGMENT */))
8965
- ]))
8966
- : _createCommentVNode("v-if", true),
8967
- (_ctx.healthCheckResult.issues && _ctx.healthCheckResult.issues.length)
8968
- ? (_openBlock(), _createElementBlock("div", {
8969
- key: 2,
8970
- class: "model-list"
8971
- }, [
8972
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.healthCheckResult.issues, (issue, index) => {
8973
- return (_openBlock(), _createElementBlock("div", {
8974
- key: issue.code || ('health-issue-' + index),
8975
- class: "model-item"
8976
- }, [
8977
- _createElementVNode("span", null, _toDisplayString(issue.message || issue.code || ''), 1 /* TEXT */)
8978
- ]))
8979
- }), 128 /* KEYED_FRAGMENT */))
8980
- ]))
8981
- : _createCommentVNode("v-if", true)
8982
- ], 64 /* STABLE_FRAGMENT */)),
8983
- _createElementVNode("div", { class: "btn-group" }, [
9664
+ ], 64 /* STABLE_FRAGMENT */))
9665
+ ]),
9666
+ _createElementVNode("div", { class: "btn-group health-check-modal-actions" }, [
9667
+ (_ctx.getHealthCheckFailedProviderItems().length)
9668
+ ? (_openBlock(), _createElementBlock("button", {
9669
+ key: 0,
9670
+ class: "btn btn-confirm btn-danger",
9671
+ disabled: _ctx.healthCheckFailedProviderDeleting || !_ctx.hasHealthCheckFailedProviderSelection(),
9672
+ onClick: $event => (_ctx.deleteSelectedHealthCheckFailedProviders())
9673
+ }, _toDisplayString(_ctx.healthCheckFailedProviderDeleting ? _ctx.t('config.health.failedProviders.deleting') : _ctx.t('config.health.failedProviders.deleteSelected')), 9 /* TEXT, PROPS */, ["disabled", "onClick"]))
9674
+ : _createCommentVNode("v-if", true),
8984
9675
  _createElementVNode("button", {
8985
9676
  class: "btn btn-confirm",
8986
9677
  onClick: $event => (_ctx.showHealthCheckModal = false)