codexmate 0.0.56 → 0.1.1

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 (42) hide show
  1. package/README.md +2 -2
  2. package/README.vi.md +1 -0
  3. package/README.zh.md +2 -2
  4. package/cli/openai-bridge-retry.js +62 -0
  5. package/cli/openai-bridge-runtime.js +1819 -0
  6. package/cli/openai-bridge.js +137 -2048
  7. package/cli.js +749 -133
  8. package/lib/task-orchestrator.js +90 -21
  9. package/lib/task-workspace-chat.js +292 -0
  10. package/package.json +2 -2
  11. package/web-ui/app.js +67 -131
  12. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  13. package/web-ui/modules/app.methods.agents.mjs +192 -1
  14. package/web-ui/modules/app.methods.claude-config.mjs +65 -25
  15. package/web-ui/modules/app.methods.navigation.mjs +67 -83
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +40 -10
  18. package/web-ui/modules/app.methods.session-actions.mjs +1 -12
  19. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  20. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  21. package/web-ui/modules/app.methods.startup-claude.mjs +16 -31
  22. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  23. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  24. package/web-ui/modules/app.methods.web-ui-preferences.mjs +442 -68
  25. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  26. package/web-ui/modules/i18n/locales/en.mjs +181 -30
  27. package/web-ui/modules/i18n/locales/ja.mjs +178 -27
  28. package/web-ui/modules/i18n/locales/vi.mjs +180 -29
  29. package/web-ui/modules/i18n/locales/zh-tw.mjs +181 -30
  30. package/web-ui/modules/i18n/locales/zh.mjs +183 -32
  31. package/web-ui/modules/i18n.mjs +5 -12
  32. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  33. package/web-ui/partials/index/layout-header.html +44 -38
  34. package/web-ui/partials/index/modals-basic.html +26 -0
  35. package/web-ui/partials/index/panel-orchestration.html +489 -282
  36. package/web-ui/partials/index/panel-prompts.html +66 -3
  37. package/web-ui/res/web-ui-render.precompiled.js +1181 -604
  38. package/web-ui/styles/layout-shell.css +157 -1
  39. package/web-ui/styles/modals-core.css +173 -0
  40. package/web-ui/styles/navigation-panels.css +11 -0
  41. package/web-ui/styles/responsive.css +32 -0
  42. package/web-ui/styles/task-orchestration.css +2161 -4
@@ -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 */),
@@ -328,40 +362,22 @@ return function render(_ctx, _cache) {
328
362
  ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('common.current', { value: _ctx.opencodeModel })), 1 /* TEXT */))
329
363
  : _createCommentVNode("v-if", true)
330
364
  ])
331
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
332
- ], 8 /* PROPS */, ["aria-label"]),
333
- _createElementVNode("div", {
334
- class: "side-section",
335
- role: "navigation",
336
- "aria-label": _ctx.t('side.prompts')
337
- }, [
338
- _createElementVNode("div", { class: "side-section-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
339
- _createElementVNode("button", {
340
- id: "side-tab-prompts-agents",
341
- "data-main-tab": "prompts",
342
- "data-prompts-sub-tab": "codex",
343
- "aria-current": _ctx.mainTab === 'prompts' && _ctx.promptsSubTab === 'codex' ? 'page' : null,
344
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') && _ctx.promptsSubTab === 'codex' }]),
345
- onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
346
- onClick: $event => {_ctx.switchPromptsSubTab('codex'); _ctx.onMainTabClick('prompts')}
347
- }, [
348
- _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.agents')), 1 /* TEXT */),
349
- _createElementVNode("div", { class: "side-item-meta" }, [
350
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.agents.meta')), 1 /* TEXT */)
351
- ])
352
365
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
353
366
  _createElementVNode("button", {
354
- id: "side-tab-prompts-project",
367
+ id: "side-tab-prompts",
355
368
  "data-main-tab": "prompts",
356
- "data-prompts-sub-tab": "claude-project",
357
- "aria-current": _ctx.mainTab === 'prompts' && _ctx.promptsSubTab === 'claude-project' ? 'page' : null,
358
- class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') && _ctx.promptsSubTab === 'claude-project' }]),
369
+ "aria-current": _ctx.mainTab === 'prompts' ? 'page' : null,
370
+ class: _normalizeClass(['side-item', { active: _ctx.isMainTabNavActive('prompts') }]),
359
371
  onPointerdown: $event => (_ctx.onMainTabPointerDown('prompts', $event)),
360
- onClick: $event => {_ctx.switchPromptsSubTab('claude-project'); _ctx.onMainTabClick('prompts')}
372
+ onClick: $event => (_ctx.onMainTabClick('prompts', $event))
361
373
  }, [
362
- _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts.claude')), 1 /* TEXT */),
374
+ _createElementVNode("span", {
375
+ class: "side-item-icon",
376
+ "aria-hidden": "true"
377
+ }, "P"),
378
+ _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.prompts')), 1 /* TEXT */),
363
379
  _createElementVNode("div", { class: "side-item-meta" }, [
364
- _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.claude.meta')), 1 /* TEXT */)
380
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('side.prompts.meta')), 1 /* TEXT */)
365
381
  ])
366
382
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
367
383
  ], 8 /* PROPS */, ["aria-label"]),
@@ -379,6 +395,10 @@ return function render(_ctx, _cache) {
379
395
  onPointerdown: $event => (_ctx.onMainTabPointerDown('sessions', $event)),
380
396
  onClick: $event => (_ctx.onMainTabClick('sessions', $event))
381
397
  }, [
398
+ _createElementVNode("span", {
399
+ class: "side-item-icon",
400
+ "aria-hidden": "true"
401
+ }, "S"),
382
402
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.sessions.browser')), 1 /* TEXT */),
383
403
  _createElementVNode("div", { class: "side-item-meta" }, [
384
404
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.sessions.browser.meta')), 1 /* TEXT */),
@@ -393,6 +413,10 @@ return function render(_ctx, _cache) {
393
413
  onPointerdown: $event => (_ctx.onMainTabPointerDown('usage', $event)),
394
414
  onClick: $event => (_ctx.onMainTabClick('usage', $event))
395
415
  }, [
416
+ _createElementVNode("span", {
417
+ class: "side-item-icon",
418
+ "aria-hidden": "true"
419
+ }, "↗"),
396
420
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.usage')), 1 /* TEXT */),
397
421
  _createElementVNode("div", { class: "side-item-meta" }, [
398
422
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.usage.meta')), 1 /* TEXT */),
@@ -411,17 +435,21 @@ return function render(_ctx, _cache) {
411
435
  _createElementVNode("button", {
412
436
  id: "side-tab-orchestration",
413
437
  "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))
438
+ class: "side-item side-item-disabled",
439
+ "aria-disabled": "true",
440
+ disabled: "",
441
+ title: _ctx.t('orchestration.rebuilding.body')
418
442
  }, [
443
+ _createElementVNode("span", {
444
+ class: "side-item-icon",
445
+ "aria-hidden": "true"
446
+ }, "T"),
419
447
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.orchestration')), 1 /* TEXT */),
420
448
  _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 */)
449
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.rebuilding.status')), 1 /* TEXT */),
450
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.rebuilding.title')), 1 /* TEXT */)
423
451
  ])
424
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"])
452
+ ], 8 /* PROPS */, ["title"])
425
453
  ], 8 /* PROPS */, ["aria-label"]))
426
454
  : _createCommentVNode("v-if", true),
427
455
  _createElementVNode("div", {
@@ -438,6 +466,10 @@ return function render(_ctx, _cache) {
438
466
  onPointerdown: $event => (_ctx.onMainTabPointerDown('market', $event)),
439
467
  onClick: $event => (_ctx.onMainTabClick('market', $event))
440
468
  }, [
469
+ _createElementVNode("span", {
470
+ class: "side-item-icon",
471
+ "aria-hidden": "true"
472
+ }, "★"),
441
473
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('tab.market')), 1 /* TEXT */),
442
474
  _createElementVNode("div", { class: "side-item-meta" }, [
443
475
  _createElementVNode("span", null, _toDisplayString(_ctx.t('skills.localLabel', { target: _ctx.skillsTargetLabel })), 1 /* TEXT */),
@@ -459,6 +491,10 @@ return function render(_ctx, _cache) {
459
491
  onPointerdown: $event => (_ctx.onMainTabPointerDown('plugins', $event)),
460
492
  onClick: $event => (_ctx.onMainTabClick('plugins', $event))
461
493
  }, [
494
+ _createElementVNode("span", {
495
+ class: "side-item-icon",
496
+ "aria-hidden": "true"
497
+ }, "◇"),
462
498
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.plugins.tools')), 1 /* TEXT */),
463
499
  _createElementVNode("div", { class: "side-item-meta" }, [
464
500
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.plugins.tools.meta')), 1 /* TEXT */),
@@ -480,6 +516,10 @@ return function render(_ctx, _cache) {
480
516
  onPointerdown: $event => (_ctx.onMainTabPointerDown('settings', $event)),
481
517
  onClick: $event => (_ctx.onMainTabClick('settings', $event))
482
518
  }, [
519
+ _createElementVNode("span", {
520
+ class: "side-item-icon",
521
+ "aria-hidden": "true"
522
+ }, "⚙"),
483
523
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.system.settings')), 1 /* TEXT */),
484
524
  _createElementVNode("div", { class: "side-item-meta" }, [
485
525
  _createElementVNode("span", null, _toDisplayString(_ctx.t('side.system.settings.meta')), 1 /* TEXT */)
@@ -493,6 +533,10 @@ return function render(_ctx, _cache) {
493
533
  onPointerdown: $event => (_ctx.onMainTabPointerDown('trash', $event)),
494
534
  onClick: $event => (_ctx.onMainTabClick('trash', $event))
495
535
  }, [
536
+ _createElementVNode("span", {
537
+ class: "side-item-icon",
538
+ "aria-hidden": "true"
539
+ }, "⌫"),
496
540
  _createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('settings.trash.title')), 1 /* TEXT */),
497
541
  _createElementVNode("div", { class: "side-item-meta" }, [
498
542
  _createElementVNode("span", null, _toDisplayString(_ctx.t('settings.trash.meta')), 1 /* TEXT */),
@@ -2939,7 +2983,7 @@ return function render(_ctx, _cache) {
2939
2983
  }, [
2940
2984
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.visibleSessionsList, (session, __, ___, _cached) => {
2941
2985
  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])
2942
- if (_cached && _cached.key === session.source + '-' + session.sessionId + '-' + session.filePath && _isMemoSame(_cached, _memo)) return _cached
2986
+ if (_cached && _cached.el && _cached.key === session.source + '-' + session.sessionId + '-' + session.filePath && _isMemoSame(_cached, _memo)) return _cached
2943
2987
  const _item = (_openBlock(), _createElementBlock("div", {
2944
2988
  key: session.source + '-' + session.sessionId + '-' + session.filePath,
2945
2989
  class: _normalizeClass([
@@ -3435,7 +3479,7 @@ return function render(_ctx, _cache) {
3435
3479
  : _createCommentVNode("v-if", true),
3436
3480
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.activeSessionVisibleMessages, (msg, idx, ___, _cached) => {
3437
3481
  const _memo = ([msg.text, msg.timestamp, msg.roleLabel, msg.normalizedRole])
3438
- if (_cached && _cached.key === _ctx.getRecordRenderKey(msg, idx) && _isMemoSame(_cached, _memo)) return _cached
3482
+ if (_cached && _cached.el && _cached.key === _ctx.getRecordRenderKey(msg, idx) && _isMemoSame(_cached, _memo)) return _cached
3439
3483
  const _item = (_openBlock(), _createElementBlock("div", {
3440
3484
  key: _ctx.getRecordRenderKey(msg, idx),
3441
3485
  "data-message-key": _ctx.getRecordRenderKey(msg, idx),
@@ -3486,7 +3530,7 @@ return function render(_ctx, _cache) {
3486
3530
  _createElementVNode("div", { class: "session-timeline-track" }),
3487
3531
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionTimelineNodes, (node, __, ___, _cached) => {
3488
3532
  const _memo = ([_ctx.sessionTimelineActiveKey === node.key, node.safePercent, node.title])
3489
- if (_cached && _cached.key === 'timeline-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3533
+ if (_cached && _cached.el && _cached.key === 'timeline-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3490
3534
  const _item = (_openBlock(), _createElementBlock("button", {
3491
3535
  key: 'timeline-' + node.key,
3492
3536
  type: "button",
@@ -3518,7 +3562,7 @@ return function render(_ctx, _cache) {
3518
3562
  ]),
3519
3563
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sessionTimelineNodes, (node, __, ___, _cached) => {
3520
3564
  const _memo = ([_ctx.sessionTimelineActiveKey === node.key, node.safePercent, node.title])
3521
- if (_cached && _cached.key === 'timeline-bar-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3565
+ if (_cached && _cached.el && _cached.key === 'timeline-bar-' + node.key && _isMemoSame(_cached, _memo)) return _cached
3522
3566
  const _item = (_openBlock(), _createElementBlock("button", {
3523
3567
  key: 'timeline-bar-' + node.key,
3524
3568
  type: "button",
@@ -3997,6 +4041,7 @@ return function render(_ctx, _cache) {
3997
4041
  key: 0,
3998
4042
  class: "mode-content",
3999
4043
  id: "panel-orchestration",
4044
+ "data-active": _ctx.mainTab === 'orchestration' ? 'true' : 'false',
4000
4045
  role: "tabpanel",
4001
4046
  "aria-labelledby": "tab-orchestration"
4002
4047
  }, [
@@ -4027,185 +4072,878 @@ return function render(_ctx, _cache) {
4027
4072
  disabled: _ctx.loading || !!_ctx.initError
4028
4073
  }, _toDisplayString(_ctx.t('dashboard.doctor.title')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4029
4074
  ])
4030
- ]),
4031
- (_ctx.taskOrchestrationQueueStats.running || _ctx.taskOrchestrationQueueStats.queued || _ctx.taskOrchestration.runs.length)
4032
- ? (_openBlock(), _createElementBlock("div", {
4033
- key: 0,
4034
- class: "task-hero-meta-strip",
4035
- "aria-label": _ctx.t('orchestration.summary.aria')
4036
- }, [
4037
- _createElementVNode("div", { class: "task-hero-meta" }, [
4038
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.running')) + " ", 1 /* TEXT */),
4039
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationQueueStats.running), 1 /* TEXT */)
4040
- ]),
4041
- _createElementVNode("div", { class: "task-hero-meta" }, [
4042
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.queued')) + " ", 1 /* TEXT */),
4043
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationQueueStats.queued), 1 /* TEXT */)
4044
- ]),
4045
- _createElementVNode("div", { class: "task-hero-meta" }, [
4046
- _createTextVNode(_toDisplayString(_ctx.t('orchestration.summary.runs')) + " ", 1 /* TEXT */),
4047
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.runs.length), 1 /* TEXT */)
4048
- ])
4049
- ], 8 /* PROPS */, ["aria-label"]))
4050
- : _createCommentVNode("v-if", true)
4075
+ ])
4051
4076
  ]),
4052
- _createElementVNode("div", { class: "task-layout-grid task-layout-grid-primary" }, [
4053
- _createElementVNode("section", { class: "selector-section task-compose-flow-card" }, [
4054
- _createElementVNode("div", { class: "task-flow-section task-flow-section-compact" }, [
4055
- _createElementVNode("div", { class: "task-flow-head" }, [
4056
- _createElementVNode("div", { class: "task-flow-step" }, "1"),
4077
+ _createElementVNode("div", { class: "task-layout-grid task-layout-grid-primary task-quick-layout" }, [
4078
+ _createElementVNode("section", { class: "selector-section task-compose-flow-card task-quick-card" }, [
4079
+ _createElementVNode("aside", {
4080
+ class: "task-project-sidebar",
4081
+ "aria-label": _ctx.t('orchestration.workspace.aria')
4082
+ }, [
4083
+ _createElementVNode("div", { class: "task-project-sidebar-head" }, [
4057
4084
  _createElementVNode("div", null, [
4058
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step1.title')), 1 /* TEXT */),
4059
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step1.subtitle')), 1 /* TEXT */)
4060
- ])
4085
+ _createElementVNode("div", { class: "task-thread-card-label" }, _toDisplayString(_ctx.t('orchestration.workspace.title')), 1 /* TEXT */),
4086
+ _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.workspace.subtitle')), 1 /* TEXT */)
4087
+ ]),
4088
+ _createElementVNode("button", {
4089
+ type: "button",
4090
+ class: "btn-mini",
4091
+ onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4092
+ disabled: _ctx.taskOrchestration.loading
4093
+ }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4061
4094
  ]),
4062
- (!_ctx.taskOrchestration.target.trim())
4063
- ? (_openBlock(), _createElementBlock("details", {
4064
- key: 0,
4065
- class: "task-template-panel"
4095
+ _createElementVNode("div", {
4096
+ class: "task-project-list",
4097
+ "aria-label": _ctx.t('orchestration.workspace.selector')
4098
+ }, [
4099
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceItems, (workspace) => {
4100
+ return (_openBlock(), _createElementBlock("button", {
4101
+ key: workspace.key,
4102
+ type: "button",
4103
+ class: _normalizeClass(['task-project-item', { active: workspace.active }]),
4104
+ "aria-selected": workspace.active ? 'true' : 'false',
4105
+ title: workspace.path ? _ctx.t('orchestration.workspace.pathHidden') : workspace.meta,
4106
+ onClick: $event => (_ctx.selectTaskWorkspace(workspace.path))
4066
4107
  }, [
4067
- _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.templates.title')), 1 /* TEXT */),
4068
- _createElementVNode("div", { class: "task-template-block" }, [
4069
- _createElementVNode("div", { class: "task-template-chip-group" }, [
4070
- _createElementVNode("button", {
4071
- type: "button",
4072
- class: "task-template-chip",
4073
- 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')}
4074
- }, _toDisplayString(_ctx.t('orchestration.templates.reviewFix.label')), 9 /* TEXT, PROPS */, ["onClick"]),
4075
- _createElementVNode("button", {
4076
- type: "button",
4077
- class: "task-template-chip",
4078
- 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 = ''}
4079
- }, _toDisplayString(_ctx.t('orchestration.templates.planOnly.label')), 9 /* TEXT, PROPS */, ["onClick"]),
4080
- _createElementVNode("button", {
4081
- type: "button",
4082
- class: "task-template-chip",
4083
- 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 = ''}
4084
- }, _toDisplayString(_ctx.t('orchestration.templates.workflowBatch.label')), 9 /* TEXT, PROPS */, ["onClick"])
4085
- ])
4086
- ])
4087
- ]))
4088
- : _createCommentVNode("v-if", true),
4089
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-primary" }, [
4090
- _createElementVNode("label", { class: "selector-field task-field task-field-wide task-goal-field" }, [
4091
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.target')), 1 /* TEXT */),
4092
- _withDirectives(_createElementVNode("textarea", {
4093
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.target) = $event),
4094
- class: "task-textarea task-textarea-goal",
4095
- rows: "5",
4096
- placeholder: _ctx.t('orchestration.fields.target.placeholder')
4097
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4098
- [_vModelText, _ctx.taskOrchestration.target]
4099
- ]),
4100
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.target.hint')), 1 /* TEXT */)
4101
- ])
4108
+ _createElementVNode("span", { class: "task-project-item-title" }, _toDisplayString(workspace.label), 1 /* TEXT */),
4109
+ _createElementVNode("span", { class: "task-project-item-meta" }, _toDisplayString(workspace.path ? _ctx.t('orchestration.workspace.pathHidden') : workspace.meta), 1 /* TEXT */),
4110
+ _createElementVNode("span", { class: "task-project-item-stats" }, _toDisplayString(_ctx.t('orchestration.workspace.counts', { runs: workspace.runCount, queue: workspace.queueCount })), 1 /* TEXT */)
4111
+ ], 10 /* CLASS, PROPS */, ["aria-selected", "title", "onClick"]))
4112
+ }), 128 /* KEYED_FRAGMENT */))
4113
+ ], 8 /* PROPS */, ["aria-label"]),
4114
+ _createElementVNode("button", {
4115
+ type: "button",
4116
+ class: "btn-tool btn-primary task-project-new-session",
4117
+ onClick: $event => (_ctx.startNewTaskWorkspaceSession())
4118
+ }, _toDisplayString(_ctx.t('orchestration.workspace.newSession')), 9 /* TEXT, PROPS */, ["onClick"]),
4119
+ _createElementVNode("div", { class: "task-session-inbox" }, [
4120
+ _createElementVNode("div", { class: "task-session-inbox-head" }, [
4121
+ _createElementVNode("span", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.title')), 1 /* TEXT */),
4122
+ _createElementVNode("span", { class: "pill neutral" }, _toDisplayString(_ctx.taskOrchestrationWorkspaceSessions.length), 1 /* TEXT */)
4123
+ ]),
4124
+ (!_ctx.taskOrchestrationWorkspaceSessions.length)
4125
+ ? (_openBlock(), _createElementBlock("div", {
4126
+ key: 0,
4127
+ class: "task-empty-state task-session-empty"
4128
+ }, [
4129
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.empty.title')), 1 /* TEXT */),
4130
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.empty.subtitle')), 1 /* TEXT */)
4131
+ ]))
4132
+ : _createCommentVNode("v-if", true),
4133
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceSessions.slice(0, 8), (session) => {
4134
+ return (_openBlock(), _createElementBlock("button", {
4135
+ key: session.id,
4136
+ type: "button",
4137
+ class: "task-session-inbox-item",
4138
+ onClick: $event => (_ctx.continueTaskWorkspaceSession(session))
4139
+ }, [
4140
+ _createElementVNode("span", { class: "task-session-inbox-main" }, [
4141
+ _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 */),
4142
+ _createElementVNode("span", { class: "task-session-inbox-meta" }, _toDisplayString(_ctx.t('orchestration.workspace.sessions.detailsHidden')), 1 /* TEXT */)
4143
+ ]),
4144
+ _createElementVNode("span", {
4145
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(session.status)])
4146
+ }, _toDisplayString(session.status), 3 /* TEXT, CLASS */)
4147
+ ], 8 /* PROPS */, ["onClick"]))
4148
+ }), 128 /* KEYED_FRAGMENT */))
4149
+ ])
4150
+ ], 8 /* PROPS */, ["aria-label"]),
4151
+ _createElementVNode("div", { class: "task-quick-main" }, [
4152
+ _createElementVNode("div", { class: "task-quick-copy" }, [
4153
+ _createElementVNode("div", { class: "task-hero-kicker" }, _toDisplayString(_ctx.t('orchestration.quick.kicker')), 1 /* TEXT */),
4154
+ _createElementVNode("div", { class: "selector-title task-quick-title" }, _toDisplayString(_ctx.t('orchestration.quick.title')), 1 /* TEXT */),
4155
+ _createElementVNode("div", { class: "skills-panel-note task-hero-copy" }, _toDisplayString(_ctx.t('orchestration.quick.subtitle')), 1 /* TEXT */)
4102
4156
  ]),
4103
- _createElementVNode("div", { class: "task-draft-overview task-draft-inline" }, [
4104
- _createElementVNode("div", { class: "task-draft-inline-head" }, [
4157
+ _createElementVNode("section", {
4158
+ class: "task-agent-cockpit",
4159
+ "aria-label": _ctx.t('orchestration.agent.aria')
4160
+ }, [
4161
+ _createElementVNode("div", { class: "task-agent-cockpit-head" }, [
4162
+ _createElementVNode("div", null, [
4163
+ _createElementVNode("div", { class: "task-hero-kicker" }, _toDisplayString(_ctx.t('orchestration.agent.kicker')), 1 /* TEXT */),
4164
+ _createElementVNode("div", { class: "selector-title task-agent-title" }, _toDisplayString(_ctx.t('orchestration.agent.title')), 1 /* TEXT */),
4165
+ _createElementVNode("div", { class: "skills-panel-note task-agent-copy" }, _toDisplayString(_ctx.t('orchestration.agent.subtitle')), 1 /* TEXT */)
4166
+ ]),
4105
4167
  _createElementVNode("span", {
4106
- class: _normalizeClass(['pill', _ctx.taskOrchestrationDraftReadiness.tone])
4107
- }, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.title), 3 /* TEXT, CLASS */),
4108
- _createElementVNode("div", { class: "task-readiness-copy task-draft-inline-copy" }, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.summary), 1 /* TEXT */)
4168
+ class: _normalizeClass(['pill', _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning ? 'warn' : (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run ? _ctx.taskRunStatusTone(_ctx.taskOrchestrationSelectedRun.run.status) : 'neutral')])
4169
+ }, _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 */)
4109
4170
  ]),
4110
- _createElementVNode("div", { class: "task-config-strip" }, [
4111
- _createElementVNode("div", { class: "task-config-pill" }, _toDisplayString(_ctx.taskOrchestration.selectedEngine === 'workflow' ? _ctx.t('orchestration.engine.workflow') : _ctx.t('orchestration.engine.codex')), 1 /* TEXT */),
4112
- _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 */),
4113
- (_ctx.taskOrchestration.title.trim())
4171
+ _createElementVNode("div", { class: "task-agent-surface-grid" }, [
4172
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4173
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.workspace')), 1 /* TEXT */),
4174
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspacePath ? _ctx.t('orchestration.privacy.workspace.selected') : _ctx.t('orchestration.chat.context.workspace.auto')), 1 /* TEXT */)
4175
+ ]),
4176
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4177
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.session')), 1 /* TEXT */),
4178
+ _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 */)
4179
+ ]),
4180
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4181
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.mode')), 1 /* TEXT */),
4182
+ _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 */)
4183
+ ]),
4184
+ _createElementVNode("div", { class: "task-agent-surface-card" }, [
4185
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.surface.trace')), 1 /* TEXT */),
4186
+ _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 */)
4187
+ ])
4188
+ ])
4189
+ ], 8 /* PROPS */, ["aria-label"]),
4190
+ _createElementVNode("div", { class: "task-quick-input-card task-chat-panel" }, [
4191
+ _createElementVNode("div", {
4192
+ class: "task-chat-thread",
4193
+ role: "log",
4194
+ "aria-label": _ctx.t('orchestration.chat.thread.aria')
4195
+ }, [
4196
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationConversationMessages, (message) => {
4197
+ return (_openBlock(), _createElementBlock("div", {
4198
+ key: message.id,
4199
+ class: _normalizeClass(['task-chat-bubble-row', message.role === 'user' ? 'is-user' : 'is-assistant'])
4200
+ }, [
4201
+ _createElementVNode("div", { class: "task-chat-bubble" }, [
4202
+ _createElementVNode("div", { class: "task-chat-bubble-label" }, _toDisplayString(message.label), 1 /* TEXT */),
4203
+ _createElementVNode("div", { class: "task-chat-bubble-text" }, _toDisplayString(message.text), 1 /* TEXT */),
4204
+ (message.meta)
4205
+ ? (_openBlock(), _createElementBlock("div", {
4206
+ key: 0,
4207
+ class: "task-chat-bubble-meta"
4208
+ }, _toDisplayString(message.meta), 1 /* TEXT */))
4209
+ : _createCommentVNode("v-if", true)
4210
+ ])
4211
+ ], 2 /* CLASS */))
4212
+ }), 128 /* KEYED_FRAGMENT */)),
4213
+ (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4114
4214
  ? (_openBlock(), _createElementBlock("div", {
4115
4215
  key: 0,
4116
- class: "task-config-pill"
4117
- }, _toDisplayString(_ctx.t('orchestration.pills.hasTitle')), 1 /* TEXT */))
4216
+ class: "task-chat-bubble-row is-user task-thread-plan-request"
4217
+ }, [
4218
+ _createElementVNode("div", { class: "task-chat-bubble" }, [
4219
+ _createElementVNode("div", { class: "task-chat-bubble-label" }, "You · /plan"),
4220
+ _createElementVNode("div", { class: "task-chat-bubble-text" }, "/plan " + _toDisplayString(_ctx.taskOrchestration.target), 1 /* TEXT */),
4221
+ (_ctx.taskOrchestrationDraftMetrics.followUpCount)
4222
+ ? (_openBlock(), _createElementBlock("div", {
4223
+ key: 0,
4224
+ class: "task-chat-bubble-meta"
4225
+ }, _toDisplayString(_ctx.t('orchestration.chat.input.sequenceHint', { count: _ctx.taskOrchestrationDraftMetrics.followUpCount + 1 })), 1 /* TEXT */))
4226
+ : _createCommentVNode("v-if", true)
4227
+ ])
4228
+ ]))
4118
4229
  : _createCommentVNode("v-if", true),
4119
- (_ctx.taskOrchestration.selectedEngine === 'workflow' && _ctx.taskOrchestrationDraftMetrics.workflowCount > 0)
4120
- ? (_openBlock(), _createElementBlock("div", {
4230
+ (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4231
+ ? (_openBlock(), _createElementBlock("section", {
4121
4232
  key: 1,
4122
- class: "task-config-pill"
4123
- }, _toDisplayString(_ctx.t('orchestration.pills.workflowCount', { count: _ctx.taskOrchestrationDraftMetrics.workflowCount })), 1 /* TEXT */))
4124
- : _createCommentVNode("v-if", true),
4125
- (_ctx.taskOrchestration.plan)
4126
- ? (_openBlock(), _createElementBlock("div", {
4127
- key: 2,
4128
- class: "task-config-pill"
4129
- }, _toDisplayString(_ctx.t('orchestration.pills.planNodes', { count: _ctx.taskOrchestrationDraftMetrics.planNodeCount })), 1 /* TEXT */))
4233
+ class: "selector-section task-plan-card task-thread-message-card task-thread-plan-card"
4234
+ }, [
4235
+ _createElementVNode("div", { class: "task-thread-card-label" }, "AI · " + _toDisplayString(_ctx.t('orchestration.plan.title')), 1 /* TEXT */),
4236
+ (_ctx.taskOrchestration.lastError)
4237
+ ? (_openBlock(), _createElementBlock("div", {
4238
+ key: 0,
4239
+ class: "task-issue-item"
4240
+ }, _toDisplayString(_ctx.taskOrchestration.lastError), 1 /* TEXT */))
4241
+ : _createCommentVNode("v-if", true),
4242
+ (_ctx.taskOrchestration.plan)
4243
+ ? (_openBlock(), _createElementBlock("div", {
4244
+ key: 1,
4245
+ class: "task-thread-run-summary task-thread-plan-summary"
4246
+ }, [
4247
+ _createElementVNode("span", { class: "pill configured" }, "/plan"),
4248
+ _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 */)
4249
+ ]))
4250
+ : _createCommentVNode("v-if", true),
4251
+ (_ctx.taskOrchestration.planIssues.length)
4252
+ ? (_openBlock(), _createElementBlock("div", {
4253
+ key: 2,
4254
+ class: "task-issues-list"
4255
+ }, [
4256
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planIssues, (issue) => {
4257
+ return (_openBlock(), _createElementBlock("div", {
4258
+ key: issue.code + issue.message,
4259
+ class: "task-issue-item"
4260
+ }, _toDisplayString(issue.message), 1 /* TEXT */))
4261
+ }), 128 /* KEYED_FRAGMENT */))
4262
+ ]))
4263
+ : _createCommentVNode("v-if", true),
4264
+ (_ctx.taskOrchestration.planWarnings.length)
4265
+ ? (_openBlock(), _createElementBlock("div", {
4266
+ key: 3,
4267
+ class: "task-warning-list"
4268
+ }, [
4269
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planWarnings, (warning) => {
4270
+ return (_openBlock(), _createElementBlock("div", {
4271
+ key: warning,
4272
+ class: "task-warning-item"
4273
+ }, _toDisplayString(warning), 1 /* TEXT */))
4274
+ }), 128 /* KEYED_FRAGMENT */))
4275
+ ]))
4276
+ : _createCommentVNode("v-if", true),
4277
+ (_ctx.taskOrchestration.plan)
4278
+ ? (_openBlock(), _createElementBlock("details", {
4279
+ key: 4,
4280
+ class: "task-thread-run-details task-thread-plan-details"
4281
+ }, [
4282
+ _createElementVNode("summary", null, "Plan details"),
4283
+ _createElementVNode("div", { class: "task-plan-summary-strip" }, [
4284
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4285
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.nodes')), 1 /* TEXT */),
4286
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.nodes.length), 1 /* TEXT */)
4287
+ ]),
4288
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4289
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.waves')), 1 /* TEXT */),
4290
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.waves.length), 1 /* TEXT */)
4291
+ ]),
4292
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4293
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.engine')), 1 /* TEXT */),
4294
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.engine), 1 /* TEXT */)
4295
+ ]),
4296
+ (_ctx.taskOrchestration.plan.threadId)
4297
+ ? (_openBlock(), _createElementBlock("div", {
4298
+ key: 0,
4299
+ class: "task-plan-summary-item"
4300
+ }, [
4301
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4302
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.threadId), 1 /* TEXT */)
4303
+ ]))
4304
+ : _createCommentVNode("v-if", true),
4305
+ (_ctx.taskOrchestration.plan.cwd)
4306
+ ? (_openBlock(), _createElementBlock("div", {
4307
+ key: 1,
4308
+ class: "task-plan-summary-item"
4309
+ }, [
4310
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4311
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.cwd), 1 /* TEXT */)
4312
+ ]))
4313
+ : _createCommentVNode("v-if", true)
4314
+ ]),
4315
+ _createElementVNode("div", { class: "task-wave-list" }, [
4316
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.waves, (wave) => {
4317
+ return (_openBlock(), _createElementBlock("div", {
4318
+ key: wave.label,
4319
+ class: "task-wave-card"
4320
+ }, [
4321
+ _createElementVNode("div", { class: "task-wave-title" }, _toDisplayString(wave.label), 1 /* TEXT */),
4322
+ _createElementVNode("div", { class: "task-wave-nodes" }, _toDisplayString(wave.nodeIds.join(', ')), 1 /* TEXT */)
4323
+ ]))
4324
+ }), 128 /* KEYED_FRAGMENT */))
4325
+ ]),
4326
+ _createElementVNode("div", { class: "task-node-list" }, [
4327
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.nodes, (node) => {
4328
+ return (_openBlock(), _createElementBlock("div", {
4329
+ key: node.id,
4330
+ class: "task-node-card"
4331
+ }, [
4332
+ _createElementVNode("div", { class: "task-node-head" }, [
4333
+ _createElementVNode("div", null, [
4334
+ _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4335
+ _createElementVNode("div", { class: "task-node-meta" }, [
4336
+ _createTextVNode(_toDisplayString(node.id) + " · " + _toDisplayString(node.kind), 1 /* TEXT */),
4337
+ (node.workflowId)
4338
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(node.workflowId), 1 /* TEXT */))
4339
+ : _createCommentVNode("v-if", true)
4340
+ ])
4341
+ ]),
4342
+ _createElementVNode("span", {
4343
+ class: _normalizeClass(['pill', node.write ? 'configured' : 'empty'])
4344
+ }, _toDisplayString(node.write ? _ctx.t('orchestration.plan.node.write') : _ctx.t('orchestration.plan.node.readOnly')), 3 /* TEXT, CLASS */)
4345
+ ]),
4346
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */)
4347
+ ]))
4348
+ }), 128 /* KEYED_FRAGMENT */))
4349
+ ])
4350
+ ]))
4351
+ : _createCommentVNode("v-if", true)
4352
+ ]))
4130
4353
  : _createCommentVNode("v-if", true)
4354
+ ], 8 /* PROPS */, ["aria-label"]),
4355
+ _createElementVNode("div", { class: "task-thread-composer" }, [
4356
+ _createElementVNode("label", { class: "task-quick-target-field task-chat-composer" }, [
4357
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.chat.input.label')), 1 /* TEXT */),
4358
+ _createElementVNode("span", {
4359
+ class: "task-composer-prompt-glyph",
4360
+ "aria-hidden": "true"
4361
+ }, "›"),
4362
+ _withDirectives(_createElementVNode("textarea", {
4363
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.chatDraft) = $event),
4364
+ class: "task-textarea task-textarea-goal task-quick-target",
4365
+ rows: "3",
4366
+ placeholder: _ctx.t('orchestration.chat.input.placeholder'),
4367
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.submitTaskOrchestrationChatMessage()), ["exact","prevent"]), ["enter"])
4368
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "onKeydown"]), [
4369
+ [_vModelText, _ctx.taskOrchestration.chatDraft]
4370
+ ]),
4371
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.chat.input.hint')), 1 /* TEXT */)
4372
+ ]),
4373
+ _createElementVNode("div", { class: "task-chat-send-row" }, [
4374
+ _createElementVNode("div", { class: "task-chat-action-buttons task-chat-primary-action" }, [
4375
+ _createElementVNode("button", {
4376
+ type: "button",
4377
+ class: "btn-tool btn-primary task-chat-primary-button",
4378
+ onClick: $event => (_ctx.planAndRunTaskOrchestrationFromChat()),
4379
+ disabled: _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning || (!_ctx.taskOrchestration.target.trim() && !_ctx.taskOrchestration.chatDraft.trim())
4380
+ }, _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"])
4381
+ ]),
4382
+ _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 */)
4383
+ ]),
4384
+ _createElementVNode("div", { class: "task-chat-execute-caption" }, _toDisplayString(_ctx.t('orchestration.chat.input.workCaption')), 1 /* TEXT */),
4385
+ _createElementVNode("div", {
4386
+ class: "task-chat-context-row task-chat-context-row-primary",
4387
+ role: "group",
4388
+ "aria-label": _ctx.t('orchestration.chat.context.aria')
4389
+ }, [
4390
+ _createElementVNode("span", { class: "task-chat-context-chip task-chat-context-chip-strong" }, [
4391
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4392
+ _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 */)
4393
+ ]),
4394
+ _createElementVNode("span", { class: "task-chat-context-chip task-chat-context-chip-strong" }, [
4395
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4396
+ _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 */)
4397
+ ]),
4398
+ _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 */),
4399
+ _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 */),
4400
+ _createElementVNode("button", {
4401
+ type: "button",
4402
+ class: "task-chat-context-chip task-chat-context-action",
4403
+ onClick: $event => (_ctx.taskOrchestration.settingsOpen = true)
4404
+ }, _toDisplayString(_ctx.t('orchestration.advanced.open')), 9 /* TEXT, PROPS */, ["onClick"])
4405
+ ], 8 /* PROPS */, ["aria-label"]),
4406
+ _createElementVNode("div", { class: "task-action-caption" }, _toDisplayString(_ctx.t('orchestration.quick.caption')), 1 /* TEXT */)
4131
4407
  ])
4132
4408
  ])
4133
4409
  ]),
4134
- _createElementVNode("div", { class: "task-flow-section task-flow-section-compact" }, [
4135
- _createElementVNode("div", { class: "task-flow-head" }, [
4136
- _createElementVNode("div", { class: "task-flow-step" }, "2"),
4137
- _createElementVNode("div", null, [
4138
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step2.title')), 1 /* TEXT */),
4139
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step2.subtitle')), 1 /* TEXT */)
4140
- ])
4141
- ]),
4142
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-compact task-composer-grid-inline" }, [
4143
- _createElementVNode("label", { class: "selector-field" }, [
4144
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.engine')), 1 /* TEXT */),
4145
- _withDirectives(_createElementVNode("select", {
4146
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.selectedEngine) = $event),
4147
- class: "provider-fast-switch-select",
4148
- disabled: ""
4149
- }, [
4150
- _createElementVNode("option", { value: "codex" }, _toDisplayString(_ctx.t('orchestration.engine.codex')), 1 /* TEXT */),
4151
- _createElementVNode("option", { value: "workflow" }, _toDisplayString(_ctx.t('orchestration.engine.workflow')), 1 /* TEXT */)
4152
- ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
4153
- [_vModelSelect, _ctx.taskOrchestration.selectedEngine]
4154
- ])
4410
+ _createElementVNode("aside", { class: "task-quick-side-card" }, [
4411
+ _createElementVNode("section", { class: "selector-section task-workbench-card task-side-workbench-card" }, [
4412
+ _createElementVNode("div", { class: "task-thread-card-label" }, _toDisplayString(_ctx.t('orchestration.workbench.title')), 1 /* TEXT */),
4413
+ _createElementVNode("div", { class: "task-thread-run-summary" }, [
4414
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run)
4415
+ ? (_openBlock(), _createElementBlock("span", {
4416
+ key: 0,
4417
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(_ctx.taskOrchestrationSelectedRun.run.status)])
4418
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 3 /* TEXT, CLASS */))
4419
+ : (_ctx.taskOrchestrationWorkspaceRuns.length)
4420
+ ? (_openBlock(), _createElementBlock("span", {
4421
+ key: 1,
4422
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(_ctx.taskOrchestrationWorkspaceRuns[0].status)])
4423
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns[0].status), 3 /* TEXT, CLASS */))
4424
+ : (_ctx.taskOrchestrationWorkspaceQueue.length)
4425
+ ? (_openBlock(), _createElementBlock("span", {
4426
+ key: 2,
4427
+ class: "pill neutral"
4428
+ }, _toDisplayString(_ctx.t('orchestration.workbench.queueCount', { count: _ctx.taskOrchestrationWorkspaceQueue.length })), 1 /* TEXT */))
4429
+ : (_openBlock(), _createElementBlock("span", {
4430
+ key: 3,
4431
+ class: "pill empty"
4432
+ }, _toDisplayString(_ctx.t('orchestration.workbench.ready')), 1 /* TEXT */)),
4433
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run)
4434
+ ? (_openBlock(), _createElementBlock("span", {
4435
+ key: 4,
4436
+ class: "task-thread-run-summary-copy"
4437
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.taskOrchestrationSelectedRun.run.runId || _ctx.taskOrchestration.selectedRunId), 1 /* TEXT */))
4438
+ : (_ctx.taskOrchestrationWorkspaceRuns.length)
4439
+ ? (_openBlock(), _createElementBlock("span", {
4440
+ key: 5,
4441
+ class: "task-thread-run-summary-copy"
4442
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns[0].summary || _ctx.taskOrchestrationWorkspaceRuns[0].runId), 1 /* TEXT */))
4443
+ : (_ctx.taskOrchestrationWorkspaceQueue.length)
4444
+ ? (_openBlock(), _createElementBlock("span", {
4445
+ key: 6,
4446
+ class: "task-thread-run-summary-copy"
4447
+ }, _toDisplayString(_ctx.taskOrchestrationWorkspaceQueue[0].title || _ctx.taskOrchestrationWorkspaceQueue[0].target || _ctx.taskOrchestrationWorkspaceQueue[0].taskId), 1 /* TEXT */))
4448
+ : (_openBlock(), _createElementBlock("span", {
4449
+ key: 7,
4450
+ class: "task-thread-run-summary-copy"
4451
+ }, _toDisplayString(_ctx.t('orchestration.workbench.subtitle')), 1 /* TEXT */))
4155
4452
  ]),
4156
- _createElementVNode("label", { class: "selector-field" }, [
4157
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.runMode')), 1 /* TEXT */),
4158
- _withDirectives(_createElementVNode("select", {
4159
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.runMode) = $event),
4160
- class: "provider-fast-switch-select",
4161
- disabled: ""
4162
- }, [
4163
- _createElementVNode("option", { value: "write" }, _toDisplayString(_ctx.t('orchestration.runMode.write')), 1 /* TEXT */),
4164
- _createElementVNode("option", { value: "read" }, _toDisplayString(_ctx.t('orchestration.runMode.readOnly')), 1 /* TEXT */),
4165
- _createElementVNode("option", { value: "dry-run" }, _toDisplayString(_ctx.t('orchestration.runMode.dryRun')), 1 /* TEXT */)
4166
- ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
4167
- [_vModelSelect, _ctx.taskOrchestration.runMode]
4168
- ])
4169
- ])
4170
- ]),
4171
- _createElementVNode("details", { class: "task-advanced-panel" }, [
4172
- _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.advanced.title')), 1 /* TEXT */),
4173
- _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-secondary" }, [
4174
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4175
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.title')), 1 /* TEXT */),
4176
- _withDirectives(_createElementVNode("input", {
4177
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.title) = $event),
4178
- class: "model-input",
4179
- type: "text",
4180
- placeholder: _ctx.t('orchestration.fields.title.placeholder')
4181
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4182
- [_vModelText, _ctx.taskOrchestration.title]
4183
- ])
4453
+ _createElementVNode("details", {
4454
+ class: "task-thread-run-details",
4455
+ open: ""
4456
+ }, [
4457
+ _createElementVNode("summary", null, _toDisplayString(_ctx.t('orchestration.agent.trace.title')), 1 /* TEXT */),
4458
+ _createElementVNode("div", { class: "settings-tab-actions task-header-actions task-thread-detail-actions" }, [
4459
+ _createElementVNode("button", {
4460
+ type: "button",
4461
+ class: "btn-tool btn-tool-compact",
4462
+ onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4463
+ disabled: _ctx.taskOrchestration.loading
4464
+ }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4465
+ (_ctx.taskOrchestrationWorkspaceQueue.length)
4466
+ ? (_openBlock(), _createElementBlock("button", {
4467
+ key: 0,
4468
+ type: "button",
4469
+ class: "btn-tool btn-tool-compact",
4470
+ onClick: $event => (_ctx.startTaskQueueRunner()),
4471
+ disabled: _ctx.taskOrchestration.queueStarting
4472
+ }, _toDisplayString(_ctx.taskOrchestration.queueStarting ? _ctx.t('orchestration.queue.starting') : _ctx.t('orchestration.queue.start')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]))
4473
+ : _createCommentVNode("v-if", true)
4184
4474
  ]),
4185
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4186
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.notes')), 1 /* TEXT */),
4187
- _withDirectives(_createElementVNode("textarea", {
4188
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.notes) = $event),
4189
- class: "task-textarea",
4190
- rows: "3",
4191
- placeholder: _ctx.t('orchestration.fields.notes.placeholder')
4192
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4193
- [_vModelText, _ctx.taskOrchestration.notes]
4475
+ _createElementVNode("div", { class: "task-agent-trace-grid" }, [
4476
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4477
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.plan')), 1 /* TEXT */),
4478
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan ? _ctx.taskOrchestration.plan.nodes.length : 0), 1 /* TEXT */)
4194
4479
  ]),
4195
- _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.notes.hint')), 1 /* TEXT */)
4196
- ]),
4197
- _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4198
- _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.followUps')), 1 /* TEXT */),
4199
- _withDirectives(_createElementVNode("textarea", {
4200
- "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.followUpsText) = $event),
4201
- class: "task-textarea",
4202
- rows: "3",
4203
- placeholder: _ctx.t('orchestration.fields.followUps.placeholder')
4204
- }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4205
- [_vModelText, _ctx.taskOrchestration.followUpsText]
4480
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4481
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.queue')), 1 /* TEXT */),
4482
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspaceQueue.length), 1 /* TEXT */)
4483
+ ]),
4484
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4485
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.runs')), 1 /* TEXT */),
4486
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationWorkspaceRuns.length), 1 /* TEXT */)
4487
+ ]),
4488
+ _createElementVNode("div", { class: "task-agent-trace-card" }, [
4489
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.agent.trace.nodes')), 1 /* TEXT */),
4490
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4206
4491
  ])
4207
4492
  ]),
4208
- _createElementVNode("label", { class: "selector-field" }, [
4493
+ ((_ctx.taskOrchestrationWorkspaceQueue.length ? 1 : 0) + (_ctx.taskOrchestrationWorkspaceRuns.length ? 1 : 0) + ((_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError) ? 1 : 0) > 1)
4494
+ ? (_openBlock(), _createElementBlock("div", {
4495
+ key: 0,
4496
+ class: "task-workbench-tabs",
4497
+ role: "group",
4498
+ "aria-label": _ctx.t('orchestration.workbench.tabs.aria')
4499
+ }, [
4500
+ (_ctx.taskOrchestrationWorkspaceQueue.length)
4501
+ ? (_openBlock(), _createElementBlock("button", {
4502
+ key: 0,
4503
+ type: "button",
4504
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'queue' }]),
4505
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'queue')
4506
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.queue', { count: _ctx.taskOrchestrationWorkspaceQueue.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4507
+ : _createCommentVNode("v-if", true),
4508
+ (_ctx.taskOrchestrationWorkspaceRuns.length)
4509
+ ? (_openBlock(), _createElementBlock("button", {
4510
+ key: 1,
4511
+ type: "button",
4512
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'runs' }]),
4513
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'runs')
4514
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.runs', { count: _ctx.taskOrchestrationWorkspaceRuns.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4515
+ : _createCommentVNode("v-if", true),
4516
+ (_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4517
+ ? (_openBlock(), _createElementBlock("button", {
4518
+ key: 2,
4519
+ type: "button",
4520
+ class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'detail' }]),
4521
+ onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'detail')
4522
+ }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.detail')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4523
+ : _createCommentVNode("v-if", true)
4524
+ ], 8 /* PROPS */, ["aria-label"]))
4525
+ : _createCommentVNode("v-if", true),
4526
+ ((_ctx.taskOrchestrationWorkspaceQueue.length && _ctx.taskOrchestration.workspaceTab === 'queue') || (!_ctx.taskOrchestrationWorkspaceRuns.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4527
+ ? (_openBlock(), _createElementBlock("div", {
4528
+ key: 1,
4529
+ class: "task-workbench-panel"
4530
+ }, [
4531
+ (!_ctx.taskOrchestrationWorkspaceQueue.length)
4532
+ ? (_openBlock(), _createElementBlock("div", {
4533
+ key: 0,
4534
+ class: "task-empty-state"
4535
+ }, [
4536
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.queue.empty.title')), 1 /* TEXT */),
4537
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.queue.empty.subtitle')), 1 /* TEXT */)
4538
+ ]))
4539
+ : (_openBlock(), _createElementBlock("div", {
4540
+ key: 1,
4541
+ class: "task-runtime-list"
4542
+ }, [
4543
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceQueue, (item) => {
4544
+ return (_openBlock(), _createElementBlock("div", {
4545
+ key: item.taskId,
4546
+ class: _normalizeClass(['task-runtime-item', { active: item.lastRunId && _ctx.taskOrchestration.selectedRunId === item.lastRunId, clickable: !!item.lastRunId }]),
4547
+ role: item.lastRunId ? 'button' : null,
4548
+ tabindex: item.lastRunId ? 0 : -1,
4549
+ "aria-disabled": item.lastRunId ? null : 'true',
4550
+ onClick: $event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null),
4551
+ onKeydown: [
4552
+ _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["enter"]),
4553
+ _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["space"])
4554
+ ]
4555
+ }, [
4556
+ _createElementVNode("div", { class: "task-runtime-item-main" }, [
4557
+ _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.target || item.taskId), 1 /* TEXT */),
4558
+ _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.taskId) + " · " + _toDisplayString(item.updatedAt || item.createdAt), 1 /* TEXT */),
4559
+ (item.threadId || item.cwd)
4560
+ ? (_openBlock(), _createElementBlock("div", {
4561
+ key: 0,
4562
+ class: "task-runtime-item-meta"
4563
+ }, [
4564
+ (item.threadId)
4565
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')) + ": " + _toDisplayString(item.threadId), 1 /* TEXT */))
4566
+ : _createCommentVNode("v-if", true),
4567
+ (item.threadId && item.cwd)
4568
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · "))
4569
+ : _createCommentVNode("v-if", true),
4570
+ (item.cwd)
4571
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')) + ": " + _toDisplayString(item.cwd), 1 /* TEXT */))
4572
+ : _createCommentVNode("v-if", true)
4573
+ ]))
4574
+ : _createCommentVNode("v-if", true),
4575
+ (item.lastSummary)
4576
+ ? (_openBlock(), _createElementBlock("div", {
4577
+ key: 1,
4578
+ class: "task-runtime-item-summary"
4579
+ }, _toDisplayString(item.lastSummary), 1 /* TEXT */))
4580
+ : _createCommentVNode("v-if", true)
4581
+ ]),
4582
+ _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4583
+ _createElementVNode("span", {
4584
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status || item.runStatus)])
4585
+ }, _toDisplayString(item.status || item.runStatus), 3 /* TEXT, CLASS */),
4586
+ (_ctx.isTaskRunActive(item.status || item.runStatus))
4587
+ ? (_openBlock(), _createElementBlock("button", {
4588
+ key: 0,
4589
+ type: "button",
4590
+ class: "btn-mini",
4591
+ onClick: _withModifiers($event => (_ctx.cancelTaskRunFromUi(item.taskId)), ["stop"])
4592
+ }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick"]))
4593
+ : _createCommentVNode("v-if", true)
4594
+ ])
4595
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["role", "tabindex", "aria-disabled", "onClick", "onKeydown"]))
4596
+ }), 128 /* KEYED_FRAGMENT */))
4597
+ ]))
4598
+ ]))
4599
+ : (_ctx.taskOrchestration.workspaceTab === 'runs' || (!_ctx.taskOrchestrationWorkspaceQueue.length && _ctx.taskOrchestrationWorkspaceRuns.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4600
+ ? (_openBlock(), _createElementBlock("div", {
4601
+ key: 2,
4602
+ class: "task-workbench-panel"
4603
+ }, [
4604
+ (!_ctx.taskOrchestrationWorkspaceRuns.length)
4605
+ ? (_openBlock(), _createElementBlock("div", {
4606
+ key: 0,
4607
+ class: "task-empty-state"
4608
+ }, [
4609
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.runs.empty.title')), 1 /* TEXT */),
4610
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.runs.empty.subtitle')), 1 /* TEXT */)
4611
+ ]))
4612
+ : (_openBlock(), _createElementBlock("div", {
4613
+ key: 1,
4614
+ class: "task-runtime-list"
4615
+ }, [
4616
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationWorkspaceRuns, (item) => {
4617
+ return (_openBlock(), _createElementBlock("button", {
4618
+ key: item.runId,
4619
+ type: "button",
4620
+ class: _normalizeClass(['task-runtime-item', { active: _ctx.taskOrchestration.selectedRunId === item.runId }]),
4621
+ onClick: $event => {_ctx.taskOrchestration.workspaceTab = 'detail'; _ctx.selectTaskRun(item.runId)}
4622
+ }, [
4623
+ _createElementVNode("div", { class: "task-runtime-item-main" }, [
4624
+ _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.taskId || item.runId), 1 /* TEXT */),
4625
+ _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.runId) + " · " + _toDisplayString(item.durationMs || 0) + "ms", 1 /* TEXT */),
4626
+ (item.threadId || item.cwd)
4627
+ ? (_openBlock(), _createElementBlock("div", {
4628
+ key: 0,
4629
+ class: "task-runtime-item-meta"
4630
+ }, [
4631
+ (item.threadId)
4632
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')) + ": " + _toDisplayString(item.threadId), 1 /* TEXT */))
4633
+ : _createCommentVNode("v-if", true),
4634
+ (item.threadId && item.cwd)
4635
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, " · "))
4636
+ : _createCommentVNode("v-if", true),
4637
+ (item.cwd)
4638
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')) + ": " + _toDisplayString(item.cwd), 1 /* TEXT */))
4639
+ : _createCommentVNode("v-if", true)
4640
+ ]))
4641
+ : _createCommentVNode("v-if", true),
4642
+ (item.summary)
4643
+ ? (_openBlock(), _createElementBlock("div", {
4644
+ key: 1,
4645
+ class: "task-runtime-item-summary"
4646
+ }, _toDisplayString(item.summary), 1 /* TEXT */))
4647
+ : _createCommentVNode("v-if", true)
4648
+ ]),
4649
+ _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4650
+ _createElementVNode("span", {
4651
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4652
+ }, _toDisplayString(item.status), 3 /* TEXT, CLASS */)
4653
+ ])
4654
+ ], 10 /* CLASS, PROPS */, ["onClick"]))
4655
+ }), 128 /* KEYED_FRAGMENT */))
4656
+ ]))
4657
+ ]))
4658
+ : (_openBlock(), _createElementBlock("div", {
4659
+ key: 3,
4660
+ class: "task-workbench-panel"
4661
+ }, [
4662
+ _createElementVNode("div", { class: "task-detail-toolbar settings-tab-actions" }, [
4663
+ _createElementVNode("button", {
4664
+ type: "button",
4665
+ class: "btn-tool btn-tool-compact",
4666
+ onClick: $event => (_ctx.taskOrchestration.selectedRunId ? _ctx.loadTaskRunDetail(_ctx.taskOrchestration.selectedRunId) : null),
4667
+ disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunLoading
4668
+ }, _toDisplayString(_ctx.taskOrchestration.selectedRunLoading ? _ctx.t('common.refreshing') : _ctx.t('orchestration.detail.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4669
+ _createElementVNode("button", {
4670
+ type: "button",
4671
+ class: "btn-tool btn-tool-compact",
4672
+ onClick: $event => (_ctx.retryTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4673
+ disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.retrying
4674
+ }, _toDisplayString(_ctx.taskOrchestration.retrying ? _ctx.t('orchestration.detail.retrying') : _ctx.t('orchestration.detail.retry')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4675
+ _createElementVNode("button", {
4676
+ type: "button",
4677
+ class: "btn-tool btn-tool-compact",
4678
+ onClick: _ctx.continueTaskThreadFromUi,
4679
+ disabled: !_ctx.taskOrchestrationSelectedRun
4680
+ }, _toDisplayString(_ctx.t('orchestration.detail.continueThread')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4681
+ (_ctx.taskOrchestrationSelectedRun && _ctx.taskOrchestrationSelectedRun.run && _ctx.isTaskRunActive(_ctx.taskOrchestrationSelectedRun.run.status))
4682
+ ? (_openBlock(), _createElementBlock("button", {
4683
+ key: 0,
4684
+ type: "button",
4685
+ class: "btn-tool btn-tool-compact",
4686
+ onClick: $event => (_ctx.cancelTaskRunFromUi(_ctx.taskOrchestration.selectedRunId))
4687
+ }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick"]))
4688
+ : _createCommentVNode("v-if", true)
4689
+ ]),
4690
+ (_ctx.taskOrchestration.selectedRunError)
4691
+ ? (_openBlock(), _createElementBlock("div", {
4692
+ key: 0,
4693
+ class: "task-issue-item"
4694
+ }, _toDisplayString(_ctx.taskOrchestration.selectedRunError), 1 /* TEXT */))
4695
+ : _createCommentVNode("v-if", true),
4696
+ (!_ctx.taskOrchestrationSelectedRun)
4697
+ ? (_openBlock(), _createElementBlock("div", {
4698
+ key: 1,
4699
+ class: "task-empty-state"
4700
+ }, [
4701
+ _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.detail.empty.title')), 1 /* TEXT */),
4702
+ _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.detail.empty.subtitle')), 1 /* TEXT */)
4703
+ ]))
4704
+ : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
4705
+ _createElementVNode("div", { class: "task-detail-summary-strip" }, [
4706
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4707
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.status')), 1 /* TEXT */),
4708
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 1 /* TEXT */)
4709
+ ]),
4710
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4711
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.duration')), 1 /* TEXT */),
4712
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.durationMs || 0) + "ms", 1 /* TEXT */)
4713
+ ]),
4714
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4715
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.nodes')), 1 /* TEXT */),
4716
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4717
+ ]),
4718
+ _createElementVNode("div", { class: "task-plan-summary-item" }, [
4719
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.summary')), 1 /* TEXT */),
4720
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.t('common.none')), 1 /* TEXT */)
4721
+ ]),
4722
+ (_ctx.taskOrchestrationSelectedRun.threadId)
4723
+ ? (_openBlock(), _createElementBlock("div", {
4724
+ key: 0,
4725
+ class: "task-plan-summary-item"
4726
+ }, [
4727
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.threadId')), 1 /* TEXT */),
4728
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.threadId), 1 /* TEXT */)
4729
+ ]))
4730
+ : _createCommentVNode("v-if", true),
4731
+ (_ctx.taskOrchestrationSelectedRun.cwd)
4732
+ ? (_openBlock(), _createElementBlock("div", {
4733
+ key: 1,
4734
+ class: "task-plan-summary-item"
4735
+ }, [
4736
+ _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.cwd')), 1 /* TEXT */),
4737
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.cwd), 1 /* TEXT */)
4738
+ ]))
4739
+ : _createCommentVNode("v-if", true)
4740
+ ]),
4741
+ (_ctx.taskOrchestrationSelectedRun.run.error)
4742
+ ? (_openBlock(), _createElementBlock("div", {
4743
+ key: 0,
4744
+ class: "task-issue-item"
4745
+ }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.error), 1 /* TEXT */))
4746
+ : _createCommentVNode("v-if", true),
4747
+ _createElementVNode("div", { class: "task-node-list" }, [
4748
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationSelectedRunNodes, (node) => {
4749
+ return (_openBlock(), _createElementBlock("div", {
4750
+ key: node.id,
4751
+ class: "task-node-card task-node-card-detail"
4752
+ }, [
4753
+ _createElementVNode("div", { class: "task-node-head" }, [
4754
+ _createElementVNode("div", null, [
4755
+ _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4756
+ _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 */)
4757
+ ]),
4758
+ _createElementVNode("span", {
4759
+ class: _normalizeClass(['pill', _ctx.taskRunStatusTone(node.status)])
4760
+ }, _toDisplayString(node.status), 3 /* TEXT, CLASS */)
4761
+ ]),
4762
+ (node.summary)
4763
+ ? (_openBlock(), _createElementBlock("div", {
4764
+ key: 0,
4765
+ class: "task-runtime-item-summary"
4766
+ }, _toDisplayString(node.summary), 1 /* TEXT */))
4767
+ : _createCommentVNode("v-if", true),
4768
+ (node.error && node.error !== node.summary)
4769
+ ? (_openBlock(), _createElementBlock("div", {
4770
+ key: 1,
4771
+ class: "task-node-deps"
4772
+ }, _toDisplayString(_ctx.t('orchestration.labels.error')) + _toDisplayString(node.error), 1 /* TEXT */))
4773
+ : _createCommentVNode("v-if", true),
4774
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */),
4775
+ (node.output && typeof node.output === 'object')
4776
+ ? (_openBlock(), _createElementBlock("div", {
4777
+ key: 2,
4778
+ class: "task-node-output-card"
4779
+ }, [
4780
+ _createElementVNode("div", { class: "task-node-output-head" }, [
4781
+ _createElementVNode("strong", null, _toDisplayString(_ctx.t('orchestration.detail.node.output')), 1 /* TEXT */),
4782
+ (node.output.provider || node.output.model)
4783
+ ? (_openBlock(), _createElementBlock("span", {
4784
+ key: 0,
4785
+ class: "task-node-output-meta"
4786
+ }, [
4787
+ _createTextVNode(_toDisplayString(node.output.provider || ''), 1 /* TEXT */),
4788
+ (node.output.provider && node.output.model)
4789
+ ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [
4790
+ _createTextVNode(" · ")
4791
+ ], 64 /* STABLE_FRAGMENT */))
4792
+ : _createCommentVNode("v-if", true),
4793
+ _createTextVNode(_toDisplayString(node.output.model || ''), 1 /* TEXT */)
4794
+ ]))
4795
+ : _createCommentVNode("v-if", true)
4796
+ ]),
4797
+ _createElementVNode("div", { class: "task-node-output-facts" }, [
4798
+ (node.output.endpoint)
4799
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(_ctx.t('orchestration.detail.node.endpoint')) + _toDisplayString(node.output.endpoint), 1 /* TEXT */))
4800
+ : _createCommentVNode("v-if", true),
4801
+ (node.output.status)
4802
+ ? (_openBlock(), _createElementBlock("span", { key: 1 }, "HTTP " + _toDisplayString(node.output.status), 1 /* TEXT */))
4803
+ : _createCommentVNode("v-if", true),
4804
+ (node.output.durationMs)
4805
+ ? (_openBlock(), _createElementBlock("span", { key: 2 }, _toDisplayString(node.output.durationMs) + "ms", 1 /* TEXT */))
4806
+ : _createCommentVNode("v-if", true)
4807
+ ]),
4808
+ _createElementVNode("pre", { class: "task-log-block task-output-block" }, _toDisplayString(_ctx.formatTaskNodeOutputText(node)), 1 /* TEXT */),
4809
+ (node.output.materializedFiles && node.output.materializedFiles.length)
4810
+ ? (_openBlock(), _createElementBlock("div", {
4811
+ key: 0,
4812
+ class: "task-materialized-files"
4813
+ }, [
4814
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.detail.node.materializedFiles')), 1 /* TEXT */),
4815
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(node.output.materializedFiles, (file) => {
4816
+ return (_openBlock(), _createElementBlock("div", {
4817
+ key: file.path || file.relativePath,
4818
+ class: "task-materialized-file"
4819
+ }, _toDisplayString(file.relativePath || file.path) + " · " + _toDisplayString(file.bytes || 0) + " bytes", 1 /* TEXT */))
4820
+ }), 128 /* KEYED_FRAGMENT */))
4821
+ ]))
4822
+ : _createCommentVNode("v-if", true),
4823
+ (node.output.workspaceFiles && node.output.workspaceFiles.length)
4824
+ ? (_openBlock(), _createElementBlock("div", {
4825
+ key: 1,
4826
+ class: "task-materialized-files task-workspace-files"
4827
+ }, [
4828
+ _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.detail.node.workspaceFiles')), 1 /* TEXT */),
4829
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(node.output.workspaceFiles, (file) => {
4830
+ return (_openBlock(), _createElementBlock("div", {
4831
+ key: file.path || file.relativePath,
4832
+ class: "task-materialized-file"
4833
+ }, _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 */))
4834
+ }), 128 /* KEYED_FRAGMENT */))
4835
+ ]))
4836
+ : _createCommentVNode("v-if", true)
4837
+ ]))
4838
+ : _createCommentVNode("v-if", true),
4839
+ _createElementVNode("pre", { class: "task-log-block" }, _toDisplayString(_ctx.formatTaskNodeLogs(node.logs)), 1 /* TEXT */)
4840
+ ]))
4841
+ }), 128 /* KEYED_FRAGMENT */))
4842
+ ])
4843
+ ], 64 /* STABLE_FRAGMENT */))
4844
+ ]))
4845
+ ])
4846
+ ]),
4847
+ _createElementVNode("details", {
4848
+ class: "selector-section task-side-settings-card task-advanced-panel task-quick-advanced",
4849
+ open: _ctx.taskOrchestration.settingsOpen,
4850
+ onToggle: $event => (_ctx.taskOrchestration.settingsOpen = $event.target.open)
4851
+ }, [
4852
+ _createElementVNode("summary", { class: "task-advanced-summary" }, _toDisplayString(_ctx.t('orchestration.advanced.title')), 1 /* TEXT */),
4853
+ _createElementVNode("div", { class: "task-action-row-right task-action-row-right-prominent task-codex-queue-action" }, [
4854
+ _createElementVNode("button", {
4855
+ type: "button",
4856
+ class: "btn-tool",
4857
+ onClick: $event => (_ctx.queueTaskOrchestrationAndStart()),
4858
+ disabled: _ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4859
+ }, _toDisplayString((_ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting) ? _ctx.t('orchestration.actions.processing') : _ctx.t('orchestration.actions.queueAndStart')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4860
+ ]),
4861
+ _createElementVNode("div", { class: "selector-grid task-composer-grid task-composer-grid-secondary" }, [
4862
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4863
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.title')), 1 /* TEXT */),
4864
+ _withDirectives(_createElementVNode("input", {
4865
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.title) = $event),
4866
+ class: "model-input",
4867
+ type: "text",
4868
+ placeholder: _ctx.t('orchestration.fields.title.placeholder')
4869
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4870
+ [_vModelText, _ctx.taskOrchestration.title]
4871
+ ])
4872
+ ]),
4873
+ _createElementVNode("label", { class: "selector-field" }, [
4874
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.engine')), 1 /* TEXT */),
4875
+ _withDirectives(_createElementVNode("select", {
4876
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.selectedEngine) = $event),
4877
+ class: "provider-fast-switch-select",
4878
+ onChange: $event => (_ctx.taskOrchestration.selectedEngine === 'workflow' ? null : _ctx.taskOrchestration.workflowIdsText = '')
4879
+ }, [
4880
+ _createElementVNode("option", { value: "openai-chat" }, _toDisplayString(_ctx.t('orchestration.engine.openaiChat')), 1 /* TEXT */),
4881
+ _createElementVNode("option", { value: "workflow" }, _toDisplayString(_ctx.t('orchestration.engine.workflow')), 1 /* TEXT */)
4882
+ ], 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onChange"]), [
4883
+ [_vModelSelect, _ctx.taskOrchestration.selectedEngine]
4884
+ ])
4885
+ ]),
4886
+ _createElementVNode("label", { class: "selector-field" }, [
4887
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.runMode')), 1 /* TEXT */),
4888
+ _withDirectives(_createElementVNode("select", {
4889
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.runMode) = $event),
4890
+ class: "provider-fast-switch-select"
4891
+ }, [
4892
+ _createElementVNode("option", { value: "write" }, _toDisplayString(_ctx.t('orchestration.runMode.write')), 1 /* TEXT */),
4893
+ _createElementVNode("option", { value: "read" }, _toDisplayString(_ctx.t('orchestration.runMode.readOnly')), 1 /* TEXT */),
4894
+ _createElementVNode("option", { value: "dry-run" }, _toDisplayString(_ctx.t('orchestration.runMode.dryRun')), 1 /* TEXT */)
4895
+ ], 8 /* PROPS */, ["onUpdate:modelValue"]), [
4896
+ [_vModelSelect, _ctx.taskOrchestration.runMode]
4897
+ ])
4898
+ ]),
4899
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4900
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.notes')), 1 /* TEXT */),
4901
+ _withDirectives(_createElementVNode("textarea", {
4902
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.notes) = $event),
4903
+ class: "task-textarea",
4904
+ rows: "3",
4905
+ placeholder: _ctx.t('orchestration.fields.notes.placeholder')
4906
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4907
+ [_vModelText, _ctx.taskOrchestration.notes]
4908
+ ]),
4909
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.notes.hint')), 1 /* TEXT */)
4910
+ ]),
4911
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4912
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.workspacePath')), 1 /* TEXT */),
4913
+ _withDirectives(_createElementVNode("input", {
4914
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.workspacePath) = $event),
4915
+ class: "model-input",
4916
+ type: "text",
4917
+ placeholder: _ctx.t('orchestration.fields.workspacePath.placeholder')
4918
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4919
+ [_vModelText, _ctx.taskOrchestration.workspacePath]
4920
+ ]),
4921
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.workspacePath.hint')), 1 /* TEXT */)
4922
+ ]),
4923
+ _createElementVNode("label", { class: "selector-field" }, [
4924
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.threadId')), 1 /* TEXT */),
4925
+ _withDirectives(_createElementVNode("input", {
4926
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.threadId) = $event),
4927
+ class: "model-input",
4928
+ type: "text",
4929
+ placeholder: _ctx.t('orchestration.fields.threadId.placeholder')
4930
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4931
+ [_vModelText, _ctx.taskOrchestration.threadId]
4932
+ ]),
4933
+ _createElementVNode("span", { class: "task-field-hint" }, _toDisplayString(_ctx.t('orchestration.fields.threadId.hint')), 1 /* TEXT */)
4934
+ ]),
4935
+ _createElementVNode("label", { class: "selector-field task-field-wide" }, [
4936
+ _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.followUps')), 1 /* TEXT */),
4937
+ _withDirectives(_createElementVNode("textarea", {
4938
+ "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.followUpsText) = $event),
4939
+ class: "task-textarea",
4940
+ rows: "3",
4941
+ placeholder: _ctx.t('orchestration.fields.followUps.placeholder')
4942
+ }, null, 8 /* PROPS */, ["onUpdate:modelValue", "placeholder"]), [
4943
+ [_vModelText, _ctx.taskOrchestration.followUpsText]
4944
+ ])
4945
+ ]),
4946
+ _createElementVNode("label", { class: "selector-field" }, [
4209
4947
  _createElementVNode("span", { class: "selector-label" }, _toDisplayString(_ctx.t('orchestration.fields.concurrency')), 1 /* TEXT */),
4210
4948
  _withDirectives(_createElementVNode("input", {
4211
4949
  "onUpdate:modelValue": $event => ((_ctx.taskOrchestration.concurrency) = $event),
@@ -4269,43 +5007,78 @@ return function render(_ctx, _cache) {
4269
5007
  ]))
4270
5008
  : _createCommentVNode("v-if", true)
4271
5009
  ])
4272
- ])
4273
- ]),
4274
- _createElementVNode("div", { class: "task-flow-section task-flow-section-actions task-flow-section-compact" }, [
4275
- _createElementVNode("div", { class: "task-flow-head" }, [
4276
- _createElementVNode("div", { class: "task-flow-step" }, "3"),
4277
- _createElementVNode("div", null, [
4278
- _createElementVNode("div", { class: "task-flow-title" }, _toDisplayString(_ctx.t('orchestration.step3.title')), 1 /* TEXT */),
4279
- _createElementVNode("div", { class: "task-flow-copy" }, _toDisplayString(_ctx.t('orchestration.step3.subtitle')), 1 /* TEXT */)
4280
- ])
4281
- ]),
4282
- _createElementVNode("div", { class: "task-action-row task-action-row-prominent" }, [
5010
+ ], 40 /* PROPS, NEED_HYDRATION */, ["open", "onToggle"]),
5011
+ _createElementVNode("div", { class: "task-provider-status-card" }, [
5012
+ _createElementVNode("div", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.openai.status.title')), 1 /* TEXT */),
5013
+ _createElementVNode("div", { class: "task-readiness-copy" }, _toDisplayString(_ctx.t('orchestration.openai.status.subtitle')), 1 /* TEXT */),
5014
+ (_ctx.taskOrchestration.openAiChatStatus)
5015
+ ? (_openBlock(), _createElementBlock("div", {
5016
+ key: 0,
5017
+ class: "task-provider-status-grid"
5018
+ }, [
5019
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5020
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.provider')), 1 /* TEXT */),
5021
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.providerName ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5022
+ ]),
5023
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5024
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.model')), 1 /* TEXT */),
5025
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.model ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5026
+ ]),
5027
+ _createElementVNode("div", { class: "task-provider-status-row task-provider-status-row-wide" }, [
5028
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.endpoint')), 1 /* TEXT */),
5029
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.endpoint ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5030
+ ]),
5031
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5032
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.apiKey')), 1 /* TEXT */),
5033
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.hasApiKey ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.missing')), 1 /* TEXT */)
5034
+ ]),
5035
+ _createElementVNode("div", { class: "task-provider-status-row" }, [
5036
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('orchestration.openai.status.headers')), 1 /* TEXT */),
5037
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.hasExtraHeaders ? _ctx.t('orchestration.openai.status.configured') : _ctx.t('orchestration.openai.status.notSet')), 1 /* TEXT */)
5038
+ ])
5039
+ ]))
5040
+ : (_openBlock(), _createElementBlock("div", {
5041
+ key: 1,
5042
+ class: "task-readiness-copy"
5043
+ }, _toDisplayString(_ctx.t('orchestration.openai.status.notLoaded')), 1 /* TEXT */)),
5044
+ (_ctx.taskOrchestration.openAiChatStatus && _ctx.taskOrchestration.openAiChatStatus.error)
5045
+ ? (_openBlock(), _createElementBlock("div", {
5046
+ key: 2,
5047
+ class: "task-issue-item task-provider-status-error"
5048
+ }, _toDisplayString(_ctx.taskOrchestration.openAiChatStatus.error), 1 /* TEXT */))
5049
+ : _createCommentVNode("v-if", true),
4283
5050
  _createElementVNode("button", {
4284
5051
  type: "button",
4285
- class: "btn-tool task-action-preview",
4286
- onClick: $event => (_ctx.previewTaskPlan()),
4287
- disabled: _ctx.taskOrchestration.planning || _ctx.taskOrchestration.running || !_ctx.taskOrchestration.target.trim()
4288
- }, _toDisplayString(_ctx.taskOrchestration.planning ? _ctx.t('orchestration.actions.planning') : _ctx.t('orchestration.actions.previewOnly')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4289
- _createElementVNode("div", { class: "task-action-row-right task-action-row-right-prominent" }, [
4290
- _createElementVNode("button", {
4291
- type: "button",
4292
- class: "btn-tool btn-primary",
4293
- onClick: $event => (_ctx.planAndRunTaskOrchestration()),
4294
- disabled: _ctx.taskOrchestration.running || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4295
- }, _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"]),
4296
- _createElementVNode("button", {
4297
- type: "button",
4298
- class: "btn-tool",
4299
- onClick: $event => (_ctx.queueTaskOrchestrationAndStart()),
4300
- disabled: _ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting || _ctx.taskOrchestration.planning || !_ctx.taskOrchestration.target.trim()
4301
- }, _toDisplayString((_ctx.taskOrchestration.queueAdding || _ctx.taskOrchestration.queueStarting) ? _ctx.t('orchestration.actions.processing') : _ctx.t('orchestration.actions.queueAndStart')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
5052
+ class: "btn-tool btn-tool-compact task-provider-config-button",
5053
+ onClick: $event => (_ctx.openTaskOpenAiChatConfig())
5054
+ }, _toDisplayString(_ctx.t('orchestration.openai.status.configure')), 9 /* TEXT, PROPS */, ["onClick"])
5055
+ ]),
5056
+ _createElementVNode("div", { class: "task-readiness-head" }, [
5057
+ _createElementVNode("div", null, [
5058
+ _createElementVNode("div", { class: "task-readiness-title" }, _toDisplayString(_ctx.t('orchestration.quick.checklist.title')), 1 /* TEXT */),
5059
+ _createElementVNode("div", { class: "task-readiness-copy" }, _toDisplayString(_ctx.t('orchestration.quick.checklist.subtitle')), 1 /* TEXT */)
4302
5060
  ])
4303
5061
  ]),
4304
- _createElementVNode("div", { class: "task-action-caption" }, _toDisplayString(_ctx.t('orchestration.actions.caption')), 1 /* TEXT */)
5062
+ _createElementVNode("div", { class: "task-readiness-grid task-quick-checklist" }, [
5063
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationDraftChecklist, (item) => {
5064
+ return (_openBlock(), _createElementBlock("div", {
5065
+ key: item.key,
5066
+ class: _normalizeClass(['task-readiness-item', { done: item.done }])
5067
+ }, [
5068
+ _createElementVNode("strong", null, _toDisplayString(item.label), 1 /* TEXT */),
5069
+ _createElementVNode("span", null, _toDisplayString(item.detail), 1 /* TEXT */)
5070
+ ], 2 /* CLASS */))
5071
+ }), 128 /* KEYED_FRAGMENT */))
5072
+ ]),
5073
+ _createElementVNode("div", { class: "task-quick-status-card" }, [
5074
+ _createElementVNode("div", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.quick.status.title')), 1 /* TEXT */),
5075
+ _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.title), 1 /* TEXT */),
5076
+ _createElementVNode("span", null, _toDisplayString(_ctx.taskOrchestrationDraftReadiness.summary), 1 /* TEXT */)
5077
+ ])
4305
5078
  ])
4306
5079
  ])
4307
5080
  ]),
4308
- (!(_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))
5081
+ (!(_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))
4309
5082
  ? (_openBlock(), _createElementBlock("section", {
4310
5083
  key: 0,
4311
5084
  class: "selector-section task-stage-card"
@@ -4322,368 +5095,8 @@ return function render(_ctx, _cache) {
4322
5095
  ])
4323
5096
  ])
4324
5097
  ]))
4325
- : (_openBlock(), _createElementBlock("div", {
4326
- key: 1,
4327
- class: "task-layout-grid task-layout-grid-secondary"
4328
- }, [
4329
- (_ctx.taskOrchestration.plan || _ctx.taskOrchestration.planIssues.length || _ctx.taskOrchestration.planWarnings.length || _ctx.taskOrchestration.lastError)
4330
- ? (_openBlock(), _createElementBlock("section", {
4331
- key: 0,
4332
- class: "selector-section task-plan-card"
4333
- }, [
4334
- (_ctx.taskOrchestration.lastError)
4335
- ? (_openBlock(), _createElementBlock("div", {
4336
- key: 0,
4337
- class: "task-issue-item"
4338
- }, _toDisplayString(_ctx.taskOrchestration.lastError), 1 /* TEXT */))
4339
- : _createCommentVNode("v-if", true),
4340
- _createElementVNode("div", { class: "selector-header task-section-header" }, [
4341
- _createElementVNode("div", null, [
4342
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.plan.title')), 1 /* TEXT */),
4343
- _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.plan.subtitle')), 1 /* TEXT */)
4344
- ])
4345
- ]),
4346
- (_ctx.taskOrchestration.planIssues.length)
4347
- ? (_openBlock(), _createElementBlock("div", {
4348
- key: 1,
4349
- class: "task-issues-list"
4350
- }, [
4351
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planIssues, (issue) => {
4352
- return (_openBlock(), _createElementBlock("div", {
4353
- key: issue.code + issue.message,
4354
- class: "task-issue-item"
4355
- }, _toDisplayString(issue.message), 1 /* TEXT */))
4356
- }), 128 /* KEYED_FRAGMENT */))
4357
- ]))
4358
- : _createCommentVNode("v-if", true),
4359
- (_ctx.taskOrchestration.planWarnings.length)
4360
- ? (_openBlock(), _createElementBlock("div", {
4361
- key: 2,
4362
- class: "task-warning-list"
4363
- }, [
4364
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.planWarnings, (warning) => {
4365
- return (_openBlock(), _createElementBlock("div", {
4366
- key: warning,
4367
- class: "task-warning-item"
4368
- }, _toDisplayString(warning), 1 /* TEXT */))
4369
- }), 128 /* KEYED_FRAGMENT */))
4370
- ]))
4371
- : _createCommentVNode("v-if", true),
4372
- (_ctx.taskOrchestration.plan)
4373
- ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [
4374
- _createElementVNode("div", { class: "task-plan-summary-strip" }, [
4375
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4376
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.nodes')), 1 /* TEXT */),
4377
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.nodes.length), 1 /* TEXT */)
4378
- ]),
4379
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4380
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.waves')), 1 /* TEXT */),
4381
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.waves.length), 1 /* TEXT */)
4382
- ]),
4383
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4384
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.plan.summary.engine')), 1 /* TEXT */),
4385
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestration.plan.engine), 1 /* TEXT */)
4386
- ])
4387
- ]),
4388
- _createElementVNode("div", { class: "task-wave-list" }, [
4389
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.waves, (wave) => {
4390
- return (_openBlock(), _createElementBlock("div", {
4391
- key: wave.label,
4392
- class: "task-wave-card"
4393
- }, [
4394
- _createElementVNode("div", { class: "task-wave-title" }, _toDisplayString(wave.label), 1 /* TEXT */),
4395
- _createElementVNode("div", { class: "task-wave-nodes" }, _toDisplayString(wave.nodeIds.join(', ')), 1 /* TEXT */)
4396
- ]))
4397
- }), 128 /* KEYED_FRAGMENT */))
4398
- ]),
4399
- _createElementVNode("div", { class: "task-node-list" }, [
4400
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.plan.nodes, (node) => {
4401
- return (_openBlock(), _createElementBlock("div", {
4402
- key: node.id,
4403
- class: "task-node-card"
4404
- }, [
4405
- _createElementVNode("div", { class: "task-node-head" }, [
4406
- _createElementVNode("div", null, [
4407
- _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4408
- _createElementVNode("div", { class: "task-node-meta" }, [
4409
- _createTextVNode(_toDisplayString(node.id) + " · " + _toDisplayString(node.kind), 1 /* TEXT */),
4410
- (node.workflowId)
4411
- ? (_openBlock(), _createElementBlock("span", { key: 0 }, " · " + _toDisplayString(node.workflowId), 1 /* TEXT */))
4412
- : _createCommentVNode("v-if", true)
4413
- ])
4414
- ]),
4415
- _createElementVNode("span", {
4416
- class: _normalizeClass(['pill', node.write ? 'configured' : 'empty'])
4417
- }, _toDisplayString(node.write ? _ctx.t('orchestration.plan.node.write') : _ctx.t('orchestration.plan.node.readOnly')), 3 /* TEXT, CLASS */)
4418
- ]),
4419
- _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */)
4420
- ]))
4421
- }), 128 /* KEYED_FRAGMENT */))
4422
- ])
4423
- ], 64 /* STABLE_FRAGMENT */))
4424
- : _createCommentVNode("v-if", true)
4425
- ]))
4426
- : _createCommentVNode("v-if", true),
4427
- (_ctx.taskOrchestration.queue.length || _ctx.taskOrchestration.runs.length || _ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4428
- ? (_openBlock(), _createElementBlock("section", {
4429
- key: 1,
4430
- class: "selector-section task-workbench-card"
4431
- }, [
4432
- _createElementVNode("div", { class: "selector-header task-section-header" }, [
4433
- _createElementVNode("div", null, [
4434
- _createElementVNode("span", { class: "selector-title" }, _toDisplayString(_ctx.t('orchestration.workbench.title')), 1 /* TEXT */),
4435
- _createElementVNode("div", { class: "skills-panel-note" }, _toDisplayString(_ctx.t('orchestration.workbench.subtitle')), 1 /* TEXT */)
4436
- ]),
4437
- _createElementVNode("div", { class: "settings-tab-actions task-header-actions" }, [
4438
- _createElementVNode("button", {
4439
- type: "button",
4440
- class: "btn-tool btn-tool-compact",
4441
- onClick: $event => (_ctx.loadTaskOrchestrationOverview({ forceRefresh: true, includeDetail: true })),
4442
- disabled: _ctx.taskOrchestration.loading
4443
- }, _toDisplayString(_ctx.taskOrchestration.loading ? _ctx.t('common.refreshing') : _ctx.t('common.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4444
- (_ctx.taskOrchestration.queue.length)
4445
- ? (_openBlock(), _createElementBlock("button", {
4446
- key: 0,
4447
- type: "button",
4448
- class: "btn-tool btn-tool-compact",
4449
- onClick: $event => (_ctx.startTaskQueueRunner()),
4450
- disabled: _ctx.taskOrchestration.queueStarting
4451
- }, _toDisplayString(_ctx.taskOrchestration.queueStarting ? _ctx.t('orchestration.queue.starting') : _ctx.t('orchestration.queue.start')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]))
4452
- : _createCommentVNode("v-if", true)
4453
- ])
4454
- ]),
4455
- ((_ctx.taskOrchestration.queue.length ? 1 : 0) + (_ctx.taskOrchestration.runs.length ? 1 : 0) + ((_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError) ? 1 : 0) > 1)
4456
- ? (_openBlock(), _createElementBlock("div", {
4457
- key: 0,
4458
- class: "task-workbench-tabs",
4459
- role: "group",
4460
- "aria-label": _ctx.t('orchestration.workbench.tabs.aria')
4461
- }, [
4462
- (_ctx.taskOrchestration.queue.length)
4463
- ? (_openBlock(), _createElementBlock("button", {
4464
- key: 0,
4465
- type: "button",
4466
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'queue' }]),
4467
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'queue')
4468
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.queue', { count: _ctx.taskOrchestration.queue.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4469
- : _createCommentVNode("v-if", true),
4470
- (_ctx.taskOrchestration.runs.length)
4471
- ? (_openBlock(), _createElementBlock("button", {
4472
- key: 1,
4473
- type: "button",
4474
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'runs' }]),
4475
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'runs')
4476
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.runs', { count: _ctx.taskOrchestration.runs.length })), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4477
- : _createCommentVNode("v-if", true),
4478
- (_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunError)
4479
- ? (_openBlock(), _createElementBlock("button", {
4480
- key: 2,
4481
- type: "button",
4482
- class: _normalizeClass(["task-workbench-tab", { active: _ctx.taskOrchestration.workspaceTab === 'detail' }]),
4483
- onClick: $event => (_ctx.taskOrchestration.workspaceTab = 'detail')
4484
- }, _toDisplayString(_ctx.t('orchestration.workbench.tabs.detail')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]))
4485
- : _createCommentVNode("v-if", true)
4486
- ], 8 /* PROPS */, ["aria-label"]))
4487
- : _createCommentVNode("v-if", true),
4488
- (_ctx.taskOrchestration.workspaceTab === 'queue' || (!_ctx.taskOrchestration.runs.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4489
- ? (_openBlock(), _createElementBlock("div", {
4490
- key: 1,
4491
- class: "task-workbench-panel"
4492
- }, [
4493
- (!_ctx.taskOrchestration.queue.length)
4494
- ? (_openBlock(), _createElementBlock("div", {
4495
- key: 0,
4496
- class: "task-empty-state"
4497
- }, [
4498
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.queue.empty.title')), 1 /* TEXT */),
4499
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.queue.empty.subtitle')), 1 /* TEXT */)
4500
- ]))
4501
- : (_openBlock(), _createElementBlock("div", {
4502
- key: 1,
4503
- class: "task-runtime-list"
4504
- }, [
4505
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.queue, (item) => {
4506
- return (_openBlock(), _createElementBlock("div", {
4507
- key: item.taskId,
4508
- class: _normalizeClass(['task-runtime-item', { active: item.lastRunId && _ctx.taskOrchestration.selectedRunId === item.lastRunId, clickable: !!item.lastRunId }]),
4509
- role: item.lastRunId ? 'button' : null,
4510
- tabindex: item.lastRunId ? 0 : -1,
4511
- "aria-disabled": item.lastRunId ? null : 'true',
4512
- onClick: $event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null),
4513
- onKeydown: [
4514
- _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["enter"]),
4515
- _withKeys(_withModifiers($event => (item.lastRunId ? (_ctx.taskOrchestration.workspaceTab = 'detail', _ctx.selectTaskRun(item.lastRunId)) : null), ["self","prevent"]), ["space"])
4516
- ]
4517
- }, [
4518
- _createElementVNode("div", { class: "task-runtime-item-main" }, [
4519
- _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.target || item.taskId), 1 /* TEXT */),
4520
- _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.taskId) + " · " + _toDisplayString(item.updatedAt || item.createdAt), 1 /* TEXT */),
4521
- (item.lastSummary)
4522
- ? (_openBlock(), _createElementBlock("div", {
4523
- key: 0,
4524
- class: "task-runtime-item-summary"
4525
- }, _toDisplayString(item.lastSummary), 1 /* TEXT */))
4526
- : _createCommentVNode("v-if", true)
4527
- ]),
4528
- _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4529
- _createElementVNode("span", {
4530
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4531
- }, _toDisplayString(item.status), 3 /* TEXT, CLASS */),
4532
- _createElementVNode("button", {
4533
- type: "button",
4534
- class: "btn-mini",
4535
- onClick: _withModifiers($event => (_ctx.cancelTaskRunFromUi(item.taskId)), ["stop"]),
4536
- disabled: item.status !== 'queued' && item.status !== 'running'
4537
- }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4538
- ])
4539
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["role", "tabindex", "aria-disabled", "onClick", "onKeydown"]))
4540
- }), 128 /* KEYED_FRAGMENT */))
4541
- ]))
4542
- ]))
4543
- : (_ctx.taskOrchestration.workspaceTab === 'runs' || (!_ctx.taskOrchestration.queue.length && _ctx.taskOrchestration.runs.length && !_ctx.taskOrchestration.selectedRunId && !_ctx.taskOrchestration.selectedRunError))
4544
- ? (_openBlock(), _createElementBlock("div", {
4545
- key: 2,
4546
- class: "task-workbench-panel"
4547
- }, [
4548
- (!_ctx.taskOrchestration.runs.length)
4549
- ? (_openBlock(), _createElementBlock("div", {
4550
- key: 0,
4551
- class: "task-empty-state"
4552
- }, [
4553
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.runs.empty.title')), 1 /* TEXT */),
4554
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.runs.empty.subtitle')), 1 /* TEXT */)
4555
- ]))
4556
- : (_openBlock(), _createElementBlock("div", {
4557
- key: 1,
4558
- class: "task-runtime-list"
4559
- }, [
4560
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestration.runs, (item) => {
4561
- return (_openBlock(), _createElementBlock("button", {
4562
- key: item.runId,
4563
- type: "button",
4564
- class: _normalizeClass(['task-runtime-item', { active: _ctx.taskOrchestration.selectedRunId === item.runId }]),
4565
- onClick: $event => {_ctx.taskOrchestration.workspaceTab = 'detail'; _ctx.selectTaskRun(item.runId)}
4566
- }, [
4567
- _createElementVNode("div", { class: "task-runtime-item-main" }, [
4568
- _createElementVNode("div", { class: "task-runtime-item-title" }, _toDisplayString(item.title || item.taskId || item.runId), 1 /* TEXT */),
4569
- _createElementVNode("div", { class: "task-runtime-item-meta" }, _toDisplayString(item.runId) + " · " + _toDisplayString(item.durationMs || 0) + "ms", 1 /* TEXT */),
4570
- (item.summary)
4571
- ? (_openBlock(), _createElementBlock("div", {
4572
- key: 0,
4573
- class: "task-runtime-item-summary"
4574
- }, _toDisplayString(item.summary), 1 /* TEXT */))
4575
- : _createCommentVNode("v-if", true)
4576
- ]),
4577
- _createElementVNode("div", { class: "task-runtime-item-actions" }, [
4578
- _createElementVNode("span", {
4579
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(item.status)])
4580
- }, _toDisplayString(item.status), 3 /* TEXT, CLASS */)
4581
- ])
4582
- ], 10 /* CLASS, PROPS */, ["onClick"]))
4583
- }), 128 /* KEYED_FRAGMENT */))
4584
- ]))
4585
- ]))
4586
- : (_openBlock(), _createElementBlock("div", {
4587
- key: 3,
4588
- class: "task-workbench-panel"
4589
- }, [
4590
- _createElementVNode("div", { class: "task-detail-toolbar settings-tab-actions" }, [
4591
- _createElementVNode("button", {
4592
- type: "button",
4593
- class: "btn-tool btn-tool-compact",
4594
- onClick: $event => (_ctx.taskOrchestration.selectedRunId ? _ctx.loadTaskRunDetail(_ctx.taskOrchestration.selectedRunId) : null),
4595
- disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.selectedRunLoading
4596
- }, _toDisplayString(_ctx.taskOrchestration.selectedRunLoading ? _ctx.t('common.refreshing') : _ctx.t('orchestration.detail.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4597
- _createElementVNode("button", {
4598
- type: "button",
4599
- class: "btn-tool btn-tool-compact",
4600
- onClick: $event => (_ctx.retryTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4601
- disabled: !_ctx.taskOrchestration.selectedRunId || _ctx.taskOrchestration.retrying
4602
- }, _toDisplayString(_ctx.taskOrchestration.retrying ? _ctx.t('orchestration.detail.retrying') : _ctx.t('orchestration.detail.retry')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4603
- _createElementVNode("button", {
4604
- type: "button",
4605
- class: "btn-tool btn-tool-compact",
4606
- onClick: $event => (_ctx.cancelTaskRunFromUi(_ctx.taskOrchestration.selectedRunId)),
4607
- disabled: !_ctx.taskOrchestrationSelectedRun || !_ctx.taskOrchestrationSelectedRun.run || !_ctx.isTaskRunActive(_ctx.taskOrchestrationSelectedRun.run.status)
4608
- }, _toDisplayString(_ctx.t('common.cancel')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4609
- ]),
4610
- (_ctx.taskOrchestration.selectedRunError)
4611
- ? (_openBlock(), _createElementBlock("div", {
4612
- key: 0,
4613
- class: "task-issue-item"
4614
- }, _toDisplayString(_ctx.taskOrchestration.selectedRunError), 1 /* TEXT */))
4615
- : _createCommentVNode("v-if", true),
4616
- (!_ctx.taskOrchestrationSelectedRun)
4617
- ? (_openBlock(), _createElementBlock("div", {
4618
- key: 1,
4619
- class: "task-empty-state"
4620
- }, [
4621
- _createElementVNode("div", { class: "task-empty-title" }, _toDisplayString(_ctx.t('orchestration.detail.empty.title')), 1 /* TEXT */),
4622
- _createElementVNode("div", { class: "task-empty-copy" }, _toDisplayString(_ctx.t('orchestration.detail.empty.subtitle')), 1 /* TEXT */)
4623
- ]))
4624
- : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
4625
- _createElementVNode("div", { class: "task-detail-summary-strip" }, [
4626
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4627
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.status')), 1 /* TEXT */),
4628
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.status), 1 /* TEXT */)
4629
- ]),
4630
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4631
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.duration')), 1 /* TEXT */),
4632
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.durationMs || 0) + "ms", 1 /* TEXT */)
4633
- ]),
4634
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4635
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.nodes')), 1 /* TEXT */),
4636
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRunNodes.length), 1 /* TEXT */)
4637
- ]),
4638
- _createElementVNode("div", { class: "task-plan-summary-item" }, [
4639
- _createElementVNode("span", { class: "task-plan-summary-label" }, _toDisplayString(_ctx.t('orchestration.detail.summary.summary')), 1 /* TEXT */),
4640
- _createElementVNode("strong", null, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.summary || _ctx.t('common.none')), 1 /* TEXT */)
4641
- ])
4642
- ]),
4643
- (_ctx.taskOrchestrationSelectedRun.run.error)
4644
- ? (_openBlock(), _createElementBlock("div", {
4645
- key: 0,
4646
- class: "task-issue-item"
4647
- }, _toDisplayString(_ctx.taskOrchestrationSelectedRun.run.error), 1 /* TEXT */))
4648
- : _createCommentVNode("v-if", true),
4649
- _createElementVNode("div", { class: "task-node-list" }, [
4650
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.taskOrchestrationSelectedRunNodes, (node) => {
4651
- return (_openBlock(), _createElementBlock("div", {
4652
- key: node.id,
4653
- class: "task-node-card task-node-card-detail"
4654
- }, [
4655
- _createElementVNode("div", { class: "task-node-head" }, [
4656
- _createElementVNode("div", null, [
4657
- _createElementVNode("div", { class: "task-node-title" }, _toDisplayString(node.title || node.id), 1 /* TEXT */),
4658
- _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 */)
4659
- ]),
4660
- _createElementVNode("span", {
4661
- class: _normalizeClass(['pill', _ctx.taskRunStatusTone(node.status)])
4662
- }, _toDisplayString(node.status), 3 /* TEXT, CLASS */)
4663
- ]),
4664
- (node.summary)
4665
- ? (_openBlock(), _createElementBlock("div", {
4666
- key: 0,
4667
- class: "task-runtime-item-summary"
4668
- }, _toDisplayString(node.summary), 1 /* TEXT */))
4669
- : _createCommentVNode("v-if", true),
4670
- (node.error && node.error !== node.summary)
4671
- ? (_openBlock(), _createElementBlock("div", {
4672
- key: 1,
4673
- class: "task-node-deps"
4674
- }, _toDisplayString(_ctx.t('orchestration.labels.error')) + _toDisplayString(node.error), 1 /* TEXT */))
4675
- : _createCommentVNode("v-if", true),
4676
- _createElementVNode("div", { class: "task-node-deps" }, _toDisplayString(_ctx.t('orchestration.labels.dependencies')) + _toDisplayString(_ctx.formatTaskNodeDependencies(node)), 1 /* TEXT */),
4677
- _createElementVNode("pre", { class: "task-log-block" }, _toDisplayString(_ctx.formatTaskNodeLogs(node.logs)), 1 /* TEXT */)
4678
- ]))
4679
- }), 128 /* KEYED_FRAGMENT */))
4680
- ])
4681
- ], 64 /* STABLE_FRAGMENT */))
4682
- ]))
4683
- ]))
4684
- : _createCommentVNode("v-if", true)
4685
- ]))
4686
- ], 512 /* NEED_PATCH */)), [
5098
+ : _createCommentVNode("v-if", true)
5099
+ ], 8 /* PROPS */, ["data-active"])), [
4687
5100
  [_vShow, _ctx.mainTab === 'orchestration']
4688
5101
  ])
4689
5102
  : _createCommentVNode("v-if", true),
@@ -6217,18 +6630,26 @@ return function render(_ctx, _cache) {
6217
6630
  role: "tabpanel",
6218
6631
  "aria-labelledby": "tab-prompts"
6219
6632
  }, [
6220
- _createElementVNode("div", { class: "segmented-control" }, [
6633
+ _createElementVNode("div", {
6634
+ class: "prompts-md-tabs",
6635
+ role: "tablist",
6636
+ "aria-label": _ctx.t('tab.prompts')
6637
+ }, [
6221
6638
  _createElementVNode("button", {
6222
6639
  type: "button",
6223
- class: _normalizeClass(['segment', { active: _ctx.promptsSubTab === 'codex' }]),
6640
+ class: _normalizeClass(['prompts-md-tab', { active: _ctx.promptsSubTab === 'codex' }]),
6641
+ role: "tab",
6642
+ "aria-selected": _ctx.promptsSubTab === 'codex',
6224
6643
  onClick: $event => (_ctx.switchPromptsSubTab('codex'))
6225
- }, _toDisplayString(_ctx.t('prompts.subTab.codex')), 11 /* TEXT, CLASS, PROPS */, ["onClick"]),
6644
+ }, _toDisplayString(_ctx.t('prompts.subTab.codex')), 11 /* TEXT, CLASS, PROPS */, ["aria-selected", "onClick"]),
6226
6645
  _createElementVNode("button", {
6227
6646
  type: "button",
6228
- class: _normalizeClass(['segment', { active: _ctx.promptsSubTab === 'claude-project' }]),
6647
+ class: _normalizeClass(['prompts-md-tab', { active: _ctx.promptsSubTab === 'claude-project' }]),
6648
+ role: "tab",
6649
+ "aria-selected": _ctx.promptsSubTab === 'claude-project',
6229
6650
  onClick: $event => (_ctx.switchPromptsSubTab('claude-project'))
6230
- }, _toDisplayString(_ctx.t('prompts.subTab.project')), 11 /* TEXT, CLASS, PROPS */, ["onClick"])
6231
- ]),
6651
+ }, _toDisplayString(_ctx.t('prompts.subTab.project')), 11 /* TEXT, CLASS, PROPS */, ["aria-selected", "onClick"])
6652
+ ], 8 /* PROPS */, ["aria-label"]),
6232
6653
  (_ctx.promptsSubTab === 'claude-project')
6233
6654
  ? (_openBlock(), _createElementBlock("div", {
6234
6655
  key: 0,
@@ -6410,6 +6831,100 @@ return function render(_ctx, _cache) {
6410
6831
  ])
6411
6832
  ])
6412
6833
  ]),
6834
+ _createElementVNode("div", { class: "prompt-presets-inline-row" }, [
6835
+ _createElementVNode("div", { class: "prompt-presets-inline-group" }, [
6836
+ _createElementVNode("label", { class: "prompt-presets-inline-label" }, _toDisplayString(_ctx.t('prompts.presets.title')), 1 /* TEXT */),
6837
+ _createElementVNode("select", {
6838
+ class: "form-input prompt-presets-select",
6839
+ disabled: _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible || !_ctx.promptPresets.length,
6840
+ title: _ctx.t('prompts.presets.title'),
6841
+ onChange: $event => (_ctx.applyPromptPresetSelection($event))
6842
+ }, [
6843
+ _createElementVNode("option", { value: "" }, _toDisplayString(_ctx.t('prompts.presets.selectPlaceholder')), 1 /* TEXT */),
6844
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.promptPresets, (preset) => {
6845
+ return (_openBlock(), _createElementBlock("option", {
6846
+ key: preset.id,
6847
+ value: preset.id
6848
+ }, _toDisplayString(preset.name), 9 /* TEXT, PROPS */, ["value"]))
6849
+ }), 128 /* KEYED_FRAGMENT */))
6850
+ ], 40 /* PROPS, NEED_HYDRATION */, ["disabled", "title", "onChange"])
6851
+ ]),
6852
+ _createElementVNode("div", { class: "prompt-presets-inline-group prompt-presets-inline-group--save" }, [
6853
+ _withDirectives(_createElementVNode("input", {
6854
+ type: "text",
6855
+ class: "form-input prompt-presets-name-input",
6856
+ "onUpdate:modelValue": $event => ((_ctx.promptPresetNameDraft) = $event),
6857
+ placeholder: _ctx.t('prompts.presets.namePlaceholder'),
6858
+ disabled: _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible,
6859
+ onKeydown: _withKeys(_withModifiers(_ctx.saveCurrentPromptAsPreset, ["prevent"]), ["enter"])
6860
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "placeholder", "disabled", "onKeydown"]), [
6861
+ [_vModelText, _ctx.promptPresetNameDraft]
6862
+ ]),
6863
+ _createElementVNode("button", {
6864
+ type: "button",
6865
+ class: "btn-mini btn-confirm-mini",
6866
+ onClick: _ctx.saveCurrentPromptAsPreset,
6867
+ disabled: _ctx.promptPresetSaving || _ctx.agentsLoading || _ctx.agentsSaving || _ctx.agentsDiffVisible,
6868
+ title: _ctx.t('prompts.presets.saveCurrent')
6869
+ }, _toDisplayString(_ctx.t('prompts.presets.saveCurrent')), 9 /* TEXT, PROPS */, ["onClick", "disabled", "title"])
6870
+ ])
6871
+ ]),
6872
+ _createElementVNode("details", { class: "prompt-presets-panel" }, [
6873
+ _createElementVNode("summary", { class: "prompt-presets-summary" }, [
6874
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('prompts.presets.title')), 1 /* TEXT */),
6875
+ _createElementVNode("small", null, _toDisplayString(_ctx.t('prompts.presets.hint')), 1 /* TEXT */)
6876
+ ]),
6877
+ _createElementVNode("div", { class: "form-group prompt-presets-body" }, [
6878
+ _createElementVNode("div", { class: "editor-frame prompt-presets-frame" }, [
6879
+ (!_ctx.promptPresets.length)
6880
+ ? (_openBlock(), _createElementBlock("div", {
6881
+ key: 0,
6882
+ class: "state-message prompt-presets-empty"
6883
+ }, _toDisplayString(_ctx.t('prompts.presets.empty')), 1 /* TEXT */))
6884
+ : (_openBlock(), _createElementBlock("div", {
6885
+ key: 1,
6886
+ class: "prompt-presets-list"
6887
+ }, [
6888
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.promptPresets, (preset) => {
6889
+ return (_openBlock(), _createElementBlock("article", {
6890
+ key: preset.id,
6891
+ class: "prompt-preset-row"
6892
+ }, [
6893
+ _createElementVNode("div", { class: "prompt-preset-main" }, [
6894
+ _createElementVNode("input", {
6895
+ type: "text",
6896
+ class: "form-input prompt-preset-name",
6897
+ value: _ctx.getPromptPresetRenameDraft(preset),
6898
+ onInput: $event => (_ctx.setPromptPresetRenameDraft(preset.id, $event.target.value)),
6899
+ onKeydown: _withKeys(_withModifiers($event => (_ctx.renamePromptPreset(preset)), ["prevent"]), ["enter"]),
6900
+ "aria-label": _ctx.t('prompts.presets.renameAria')
6901
+ }, null, 40 /* PROPS, NEED_HYDRATION */, ["value", "onInput", "onKeydown", "aria-label"]),
6902
+ _createElementVNode("div", { class: "form-hint" }, _toDisplayString(_ctx.t('prompts.presets.updatedAt', { time: _ctx.formatPromptPresetTime(preset.updatedAt) })), 1 /* TEXT */),
6903
+ _createElementVNode("pre", { class: "prompt-preset-preview" }, _toDisplayString(preset.content), 1 /* TEXT */)
6904
+ ]),
6905
+ _createElementVNode("div", { class: "prompts-editor-actions prompt-preset-actions" }, [
6906
+ _createElementVNode("button", {
6907
+ type: "button",
6908
+ class: "btn-mini",
6909
+ onClick: $event => (_ctx.renamePromptPreset(preset))
6910
+ }, _toDisplayString(_ctx.t('common.save')), 9 /* TEXT, PROPS */, ["onClick"]),
6911
+ _createElementVNode("button", {
6912
+ type: "button",
6913
+ class: "btn-mini",
6914
+ onClick: $event => (_ctx.applyPromptPresetToEditor(preset))
6915
+ }, _toDisplayString(_ctx.t('common.paste')), 9 /* TEXT, PROPS */, ["onClick"]),
6916
+ _createElementVNode("button", {
6917
+ type: "button",
6918
+ class: "btn-mini btn-danger-mini",
6919
+ onClick: $event => (_ctx.deletePromptPreset(preset))
6920
+ }, _toDisplayString(_ctx.t('common.delete')), 9 /* TEXT, PROPS */, ["onClick"])
6921
+ ])
6922
+ ]))
6923
+ }), 128 /* KEYED_FRAGMENT */))
6924
+ ]))
6925
+ ])
6926
+ ])
6927
+ ]),
6413
6928
  _createElementVNode("div", { class: "form-group" }, [
6414
6929
  (_ctx.agentsDiffVisible)
6415
6930
  ? (_openBlock(), _createElementBlock("div", { key: 0 }, [
@@ -6656,6 +7171,37 @@ return function render(_ctx, _cache) {
6656
7171
  _createTextVNode(" " + _toDisplayString(_ctx.t('field.useBuiltinTransform')), 1 /* TEXT */)
6657
7172
  ])
6658
7173
  ]),
7174
+ (_ctx.newProvider.useTransform)
7175
+ ? (_openBlock(), _createElementBlock("div", {
7176
+ key: 0,
7177
+ class: "form-group"
7178
+ }, [
7179
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('field.transformMaxRetries')), 1 /* TEXT */),
7180
+ _withDirectives(_createElementVNode("input", {
7181
+ "onUpdate:modelValue": $event => ((_ctx.newProvider.openaiBridgeMaxRetries) = $event),
7182
+ type: "number",
7183
+ min: "2",
7184
+ max: "10",
7185
+ step: "1",
7186
+ class: _normalizeClass(['form-input', { invalid: !!_ctx.providerFieldError('add', 'openaiBridgeMaxRetries') }]),
7187
+ onBlur: $event => (_ctx.normalizeProviderDraft('add'))
7188
+ }, null, 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onBlur"]), [
7189
+ [
7190
+ _vModelText,
7191
+ _ctx.newProvider.openaiBridgeMaxRetries,
7192
+ void 0,
7193
+ { number: true }
7194
+ ]
7195
+ ]),
7196
+ _createElementVNode("div", { class: "form-hint" }, _toDisplayString(_ctx.t('hint.transformMaxRetries')), 1 /* TEXT */),
7197
+ (_ctx.providerFieldError('add', 'openaiBridgeMaxRetries'))
7198
+ ? (_openBlock(), _createElementBlock("div", {
7199
+ key: 0,
7200
+ class: "form-hint form-error"
7201
+ }, _toDisplayString(_ctx.providerFieldError('add', 'openaiBridgeMaxRetries')), 1 /* TEXT */))
7202
+ : _createCommentVNode("v-if", true)
7203
+ ]))
7204
+ : _createCommentVNode("v-if", true),
6659
7205
  _createElementVNode("div", { class: "btn-group" }, [
6660
7206
  _createElementVNode("button", {
6661
7207
  class: "btn btn-cancel",
@@ -6768,6 +7314,37 @@ return function render(_ctx, _cache) {
6768
7314
  ], 8 /* PROPS */, ["onClick", "title", "aria-label"])
6769
7315
  ])
6770
7316
  ]),
7317
+ (_ctx.editingProvider.useTransform)
7318
+ ? (_openBlock(), _createElementBlock("div", {
7319
+ key: 0,
7320
+ class: "form-group"
7321
+ }, [
7322
+ _createElementVNode("label", { class: "form-label" }, _toDisplayString(_ctx.t('field.transformMaxRetries')), 1 /* TEXT */),
7323
+ _withDirectives(_createElementVNode("input", {
7324
+ "onUpdate:modelValue": $event => ((_ctx.editingProvider.openaiBridgeMaxRetries) = $event),
7325
+ type: "number",
7326
+ min: "2",
7327
+ max: "10",
7328
+ step: "1",
7329
+ class: _normalizeClass(['form-input', { invalid: !!_ctx.providerFieldError('edit', 'openaiBridgeMaxRetries') }]),
7330
+ onBlur: $event => (_ctx.normalizeProviderDraft('edit'))
7331
+ }, null, 42 /* CLASS, PROPS, NEED_HYDRATION */, ["onUpdate:modelValue", "onBlur"]), [
7332
+ [
7333
+ _vModelText,
7334
+ _ctx.editingProvider.openaiBridgeMaxRetries,
7335
+ void 0,
7336
+ { number: true }
7337
+ ]
7338
+ ]),
7339
+ _createElementVNode("div", { class: "form-hint" }, _toDisplayString(_ctx.t('hint.transformMaxRetries')), 1 /* TEXT */),
7340
+ (_ctx.providerFieldError('edit', 'openaiBridgeMaxRetries'))
7341
+ ? (_openBlock(), _createElementBlock("div", {
7342
+ key: 0,
7343
+ class: "form-hint form-error"
7344
+ }, _toDisplayString(_ctx.providerFieldError('edit', 'openaiBridgeMaxRetries')), 1 /* TEXT */))
7345
+ : _createCommentVNode("v-if", true)
7346
+ ]))
7347
+ : _createCommentVNode("v-if", true),
6771
7348
  _createElementVNode("div", { class: "btn-group" }, [
6772
7349
  _createElementVNode("button", {
6773
7350
  class: "btn btn-cancel",