@muyichengshayu/promptx 0.1.26 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/apps/server/src/db.js +29 -0
- package/apps/server/src/index.js +9 -7
- package/apps/server/src/repository.js +57 -5
- package/apps/server/src/taskRoutes.js +45 -0
- package/apps/web/dist/assets/{CodexSessionManagerDialog-Bp6iLH_5.js → CodexSessionManagerDialog-BDgz18AK.js} +1 -1
- package/apps/web/dist/assets/{TaskDiffReviewDialog-BJOR35hG.js → TaskDiffReviewDialog-BPIVNvtG.js} +1 -1
- package/apps/web/dist/assets/{WorkbenchSettingsDialog-jyJ9EpE0.js → WorkbenchSettingsDialog-BZX1Z34_.js} +2 -2
- package/apps/web/dist/assets/WorkbenchView-CdTz2H8d.js +256 -0
- package/apps/web/dist/assets/WorkbenchView-DqB2zkrZ.css +1 -0
- package/apps/web/dist/assets/index-BSJEmbKe.js +26 -0
- package/apps/web/dist/assets/{index-CtJnPgTH.css → index-CFYJqG5B.css} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/package.json +1 -1
- package/apps/web/dist/assets/WorkbenchView-Dt2Cvuhj.js +0 -246
- package/apps/web/dist/assets/index-CTTVntNr.js +0 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.27
|
|
4
|
+
|
|
5
|
+
- 左侧任务列表新增桌面端拖拽排序能力,并改用 `vue-draggable-plus` 接管交互,拖拽手感、占位反馈与排序稳定性更好。
|
|
6
|
+
- 任务排序改为服务端持久化:拖拽后的顺序会写入数据库,刷新页面、重启服务或远端页面同步后都能保持一致。
|
|
7
|
+
- 修复任务排序当前页不立即生效的问题:任务列表合并逻辑改为以服务端返回顺序为准,不再被本地旧顺序覆盖。
|
|
8
|
+
- 补充任务重排接口校验与相关前后端测试,同时收敛本地重排后的 SSE 冗余刷新,减少一次无意义列表拉取。
|
|
9
|
+
|
|
3
10
|
## 0.1.26
|
|
4
11
|
|
|
5
12
|
- 为当前运行任务补充低频状态对账:即使 SSE 漏掉终态事件,前端也会定时重新拉取当前任务的运行历史和项目状态,避免页面长时间停留在“运行中”,只有刷新后才恢复真实结果。
|
package/apps/server/src/db.js
CHANGED
|
@@ -167,6 +167,7 @@ function migrateToV1() {
|
|
|
167
167
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
168
168
|
slug TEXT NOT NULL UNIQUE,
|
|
169
169
|
edit_token TEXT NOT NULL,
|
|
170
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
170
171
|
title TEXT NOT NULL DEFAULT '',
|
|
171
172
|
auto_title TEXT NOT NULL DEFAULT '',
|
|
172
173
|
last_prompt_preview TEXT NOT NULL DEFAULT '',
|
|
@@ -205,6 +206,7 @@ function migrateToV1() {
|
|
|
205
206
|
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
|
206
207
|
);
|
|
207
208
|
|
|
209
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_sort_order ON tasks(sort_order ASC, created_at DESC, id DESC);
|
|
208
210
|
CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at DESC);
|
|
209
211
|
CREATE INDEX IF NOT EXISTS idx_tasks_visibility ON tasks(visibility, created_at DESC);
|
|
210
212
|
CREATE INDEX IF NOT EXISTS idx_blocks_task_sort ON blocks(task_id, sort_order ASC);
|
|
@@ -325,6 +327,7 @@ function migrateToV1() {
|
|
|
325
327
|
function applyAdditiveSchemaPatches() {
|
|
326
328
|
const alterStatements = [
|
|
327
329
|
`ALTER TABLE tasks ADD COLUMN auto_title TEXT NOT NULL DEFAULT ''`,
|
|
330
|
+
`ALTER TABLE tasks ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0`,
|
|
328
331
|
`ALTER TABLE tasks ADD COLUMN last_prompt_preview TEXT NOT NULL DEFAULT ''`,
|
|
329
332
|
`ALTER TABLE tasks ADD COLUMN todo_items_json TEXT NOT NULL DEFAULT '[]'`,
|
|
330
333
|
`ALTER TABLE tasks ADD COLUMN codex_session_id TEXT NOT NULL DEFAULT ''`,
|
|
@@ -369,11 +372,37 @@ function applyAdditiveSchemaPatches() {
|
|
|
369
372
|
}
|
|
370
373
|
})
|
|
371
374
|
|
|
375
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_tasks_sort_order ON tasks(sort_order ASC, created_at DESC, id DESC)')
|
|
372
376
|
db.exec('CREATE INDEX IF NOT EXISTS idx_tasks_codex_session_id ON tasks(codex_session_id)')
|
|
373
377
|
db.exec(`
|
|
374
378
|
DELETE FROM blocks
|
|
375
379
|
WHERE task_id NOT IN (SELECT id FROM tasks);
|
|
376
380
|
`)
|
|
381
|
+
|
|
382
|
+
normalizeTaskSortOrder()
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
function normalizeTaskSortOrder() {
|
|
386
|
+
const rows = all(
|
|
387
|
+
`SELECT id, sort_order, created_at
|
|
388
|
+
FROM tasks
|
|
389
|
+
ORDER BY sort_order ASC, created_at DESC, id DESC`
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
if (rows.length < 2) {
|
|
393
|
+
return
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
const needsNormalization = rows.some((row, index) => Number(row.sort_order) !== index)
|
|
397
|
+
if (!needsNormalization) {
|
|
398
|
+
return
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
transaction(() => {
|
|
402
|
+
rows.forEach((row, index) => {
|
|
403
|
+
run('UPDATE tasks SET sort_order = ? WHERE id = ?', [index, Number(row.id)])
|
|
404
|
+
})
|
|
405
|
+
})
|
|
377
406
|
}
|
|
378
407
|
|
|
379
408
|
function ensureSchema() {
|
package/apps/server/src/index.js
CHANGED
|
@@ -8,13 +8,14 @@ import {
|
|
|
8
8
|
buildTaskExports,
|
|
9
9
|
canEditTask,
|
|
10
10
|
clearTaskCodexSessionReferences,
|
|
11
|
-
createTask,
|
|
12
|
-
deleteTask,
|
|
13
|
-
getTaskBySlug,
|
|
14
|
-
listAutomationEnabledTasks,
|
|
15
|
-
listTasks,
|
|
16
|
-
purgeExpiredTasks,
|
|
17
|
-
|
|
11
|
+
createTask,
|
|
12
|
+
deleteTask,
|
|
13
|
+
getTaskBySlug,
|
|
14
|
+
listAutomationEnabledTasks,
|
|
15
|
+
listTasks,
|
|
16
|
+
purgeExpiredTasks,
|
|
17
|
+
reorderTasks,
|
|
18
|
+
updateTaskAutomationRuntime,
|
|
18
19
|
updateTaskCodexSession,
|
|
19
20
|
updateTaskNotificationDelivery,
|
|
20
21
|
updateTask,
|
|
@@ -376,6 +377,7 @@ registerTaskRoutes(app, {
|
|
|
376
377
|
listTaskWorkspaceDiffSummaries: taskWorkspaceDiffSummaryService.listTaskWorkspaceDiffSummaries,
|
|
377
378
|
listTasks,
|
|
378
379
|
purgeExpiredContent,
|
|
380
|
+
reorderTasks,
|
|
379
381
|
removeAssetFiles,
|
|
380
382
|
runDispatchService,
|
|
381
383
|
updateTask,
|
|
@@ -43,6 +43,7 @@ function toTask(row, blocks = [], options = {}) {
|
|
|
43
43
|
return {
|
|
44
44
|
id: Number(row.id),
|
|
45
45
|
slug: row.slug,
|
|
46
|
+
sortOrder: Number(row.sort_order) || 0,
|
|
46
47
|
title: row.title,
|
|
47
48
|
autoTitle: row.auto_title || '',
|
|
48
49
|
lastPromptPreview: row.last_prompt_preview || '',
|
|
@@ -274,6 +275,7 @@ function mapTaskSummary(row, firstText = '', blockCount = 0, codexRunCount = 0)
|
|
|
274
275
|
|
|
275
276
|
return {
|
|
276
277
|
slug: row.slug,
|
|
278
|
+
sortOrder: Number(row.sort_order) || 0,
|
|
277
279
|
title: row.title || '',
|
|
278
280
|
autoTitle: row.auto_title || deriveTitleFromBlocks(textBlock) || '',
|
|
279
281
|
lastPromptPreview: row.last_prompt_preview || '',
|
|
@@ -379,12 +381,12 @@ function parseTaskTodoItems(rawValue = '[]') {
|
|
|
379
381
|
|
|
380
382
|
export function listTasks(limit = 30) {
|
|
381
383
|
const rows = all(
|
|
382
|
-
`SELECT id, slug, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
384
|
+
`SELECT id, slug, sort_order, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
383
385
|
automation_enabled, automation_cron, automation_timezone, automation_concurrency_policy, automation_last_triggered_at, automation_next_trigger_at,
|
|
384
386
|
notification_enabled, notification_channel_type, notification_webhook_url, notification_secret, notification_trigger_on, notification_locale, notification_message_mode, notification_last_status, notification_last_error, notification_last_sent_at,
|
|
385
387
|
visibility, expires_at, created_at, updated_at
|
|
386
388
|
FROM tasks
|
|
387
|
-
ORDER BY created_at DESC, id DESC
|
|
389
|
+
ORDER BY sort_order ASC, created_at DESC, id DESC
|
|
388
390
|
LIMIT ?`,
|
|
389
391
|
[Math.max(1, Number(limit) || 30)]
|
|
390
392
|
)
|
|
@@ -408,7 +410,7 @@ export function listTasks(limit = 30) {
|
|
|
408
410
|
|
|
409
411
|
export function getTaskBySlug(slug) {
|
|
410
412
|
const row = get(
|
|
411
|
-
`SELECT id, slug, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
413
|
+
`SELECT id, slug, sort_order, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
412
414
|
automation_enabled, automation_cron, automation_timezone, automation_concurrency_policy, automation_last_triggered_at, automation_next_trigger_at,
|
|
413
415
|
notification_enabled, notification_channel_type, notification_webhook_url, notification_secret, notification_trigger_on, notification_locale, notification_message_mode, notification_last_status, notification_last_error, notification_last_sent_at,
|
|
414
416
|
visibility, expires_at, created_at, updated_at
|
|
@@ -440,19 +442,22 @@ export function createTask(input = {}) {
|
|
|
440
442
|
const expiresAt = resolveExpiresAt(normalizeExpiry(input.expiry || 'none'))
|
|
441
443
|
const slug = ensureSlug(title)
|
|
442
444
|
const editToken = tokenId()
|
|
445
|
+
const topSortOrder = Number(get('SELECT MIN(sort_order) AS value FROM tasks')?.value)
|
|
446
|
+
const sortOrder = Number.isFinite(topSortOrder) ? topSortOrder - 1 : 0
|
|
443
447
|
|
|
444
448
|
transaction(() => {
|
|
445
449
|
run(
|
|
446
450
|
`INSERT INTO tasks (
|
|
447
|
-
slug, edit_token, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
451
|
+
slug, edit_token, sort_order, title, auto_title, last_prompt_preview, todo_items_json, codex_session_id,
|
|
448
452
|
automation_enabled, automation_cron, automation_timezone, automation_concurrency_policy, automation_last_triggered_at, automation_next_trigger_at,
|
|
449
453
|
notification_enabled, notification_channel_type, notification_webhook_url, notification_secret, notification_trigger_on, notification_locale, notification_message_mode, notification_last_status, notification_last_error, notification_last_sent_at,
|
|
450
454
|
visibility, expires_at, created_at, updated_at
|
|
451
455
|
)
|
|
452
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` ,
|
|
456
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` ,
|
|
453
457
|
[
|
|
454
458
|
slug,
|
|
455
459
|
editToken,
|
|
460
|
+
sortOrder,
|
|
456
461
|
title,
|
|
457
462
|
autoTitle,
|
|
458
463
|
lastPromptPreview,
|
|
@@ -767,6 +772,53 @@ export function updateTaskCodexSession(slug, codexSessionId = '') {
|
|
|
767
772
|
return getTaskBySlug(slug)
|
|
768
773
|
}
|
|
769
774
|
|
|
775
|
+
export function reorderTasks(taskSlugs = []) {
|
|
776
|
+
const requestedSlugs = [...new Set(
|
|
777
|
+
(Array.isArray(taskSlugs) ? taskSlugs : [])
|
|
778
|
+
.map((slug) => String(slug || '').trim())
|
|
779
|
+
.filter(Boolean)
|
|
780
|
+
)]
|
|
781
|
+
|
|
782
|
+
if (!requestedSlugs.length) {
|
|
783
|
+
throw new Error('缺少任务排序数据。')
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
const currentRows = all(
|
|
787
|
+
`SELECT slug
|
|
788
|
+
FROM tasks
|
|
789
|
+
ORDER BY sort_order ASC, created_at DESC, id DESC`
|
|
790
|
+
)
|
|
791
|
+
const currentOrder = currentRows.map((row) => String(row.slug || '').trim()).filter(Boolean)
|
|
792
|
+
const existingSlugSet = new Set(currentOrder)
|
|
793
|
+
const nextOrderedSlugs = requestedSlugs.filter((slug) => existingSlugSet.has(slug))
|
|
794
|
+
|
|
795
|
+
if (!nextOrderedSlugs.length) {
|
|
796
|
+
throw new Error('没有可排序的任务。')
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
const remainingSlugs = currentOrder.filter((slug) => !nextOrderedSlugs.includes(slug))
|
|
800
|
+
const finalOrder = [...nextOrderedSlugs, ...remainingSlugs]
|
|
801
|
+
const changed = finalOrder.some((slug, index) => slug !== currentOrder[index])
|
|
802
|
+
|
|
803
|
+
if (!changed) {
|
|
804
|
+
return {
|
|
805
|
+
changed: false,
|
|
806
|
+
items: listTasks(Math.max(finalOrder.length, 1)),
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
transaction(() => {
|
|
811
|
+
finalOrder.forEach((slug, index) => {
|
|
812
|
+
run('UPDATE tasks SET sort_order = ? WHERE slug = ?', [index, slug])
|
|
813
|
+
})
|
|
814
|
+
})
|
|
815
|
+
|
|
816
|
+
return {
|
|
817
|
+
changed: true,
|
|
818
|
+
items: listTasks(Math.max(finalOrder.length, 1)),
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
|
|
770
822
|
export function clearTaskCodexSessionReferences(codexSessionId = '') {
|
|
771
823
|
const normalizedSessionId = String(codexSessionId || '').trim()
|
|
772
824
|
if (!normalizedSessionId) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { normalizeCodexRunEventsMode } from '../../../packages/shared/src/index.js'
|
|
2
2
|
import { getApiErrorPayload } from './apiErrors.js'
|
|
3
3
|
|
|
4
|
+
const MAX_TASK_REORDER_COUNT = 200
|
|
5
|
+
|
|
4
6
|
function createEmptyWorkspaceDiffSummary() {
|
|
5
7
|
return {
|
|
6
8
|
supported: false,
|
|
@@ -120,6 +122,7 @@ function registerTaskRoutes(app, options = {}) {
|
|
|
120
122
|
listTaskCodexRunsWithOptions,
|
|
121
123
|
listTaskWorkspaceDiffSummaries,
|
|
122
124
|
listTasks = () => [],
|
|
125
|
+
reorderTasks = () => ({ changed: false, items: [] }),
|
|
123
126
|
purgeExpiredContent = () => {},
|
|
124
127
|
removeAssetFiles = () => {},
|
|
125
128
|
runDispatchService,
|
|
@@ -159,6 +162,48 @@ function registerTaskRoutes(app, options = {}) {
|
|
|
159
162
|
return reply.code(201).send(decorateTask(task))
|
|
160
163
|
})
|
|
161
164
|
|
|
165
|
+
app.post('/api/tasks/reorder', async (request, reply) => {
|
|
166
|
+
purgeExpiredContent()
|
|
167
|
+
const rawSlugs = Array.isArray(request.body?.slugs) ? request.body.slugs : []
|
|
168
|
+
const normalizedSlugs = rawSlugs
|
|
169
|
+
.map((slug) => String(slug || '').trim())
|
|
170
|
+
.filter(Boolean)
|
|
171
|
+
|
|
172
|
+
if (!normalizedSlugs.length) {
|
|
173
|
+
return reply.code(400).send({
|
|
174
|
+
messageKey: 'errors.taskReorderFailed',
|
|
175
|
+
message: '任务排序数据无效。',
|
|
176
|
+
})
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (normalizedSlugs.length > MAX_TASK_REORDER_COUNT) {
|
|
180
|
+
return reply.code(400).send({
|
|
181
|
+
messageKey: 'errors.taskReorderFailed',
|
|
182
|
+
message: '一次最多只能排序 200 个任务。',
|
|
183
|
+
})
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
let result
|
|
187
|
+
try {
|
|
188
|
+
result = reorderTasks(normalizedSlugs)
|
|
189
|
+
} catch (error) {
|
|
190
|
+
return reply.code(400).send({
|
|
191
|
+
messageKey: 'errors.taskReorderFailed',
|
|
192
|
+
message: error.message || '任务排序失败。',
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (result?.changed) {
|
|
197
|
+
broadcastServerEvent('tasks.changed', {
|
|
198
|
+
reason: 'reordered',
|
|
199
|
+
})
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return {
|
|
203
|
+
items: decorateTaskList(result?.items || listTasks()),
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
|
|
162
207
|
app.get('/api/tasks/:slug', async (request, reply) => {
|
|
163
208
|
purgeExpiredContent()
|
|
164
209
|
const task = getTaskBySlug(request.params.slug)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{w as be,a as p,c as ae,d as ie,g as t,t as r,u as a,b as S,A as tt,B as nt,n as j,e as h,F as we,m as Me,i as P,v as st,f as at,x as _,l as Se,k as $,J as qe,o as it,D as lt,E as ot,
|
|
1
|
+
import{w as be,a as p,c as ae,d as ie,g as t,t as r,u as a,b as S,A as tt,B as nt,n as j,e as h,F as we,m as Me,i as P,v as st,f as at,x as _,l as Se,k as $,J as qe,o as it,D as lt,E as ot,X as rt,y as dt}from"./index-BSJEmbKe.js";import{c as We,A as ct,n as Pe,o as je,r as ut,S as ze,f as ye,L as Ie,p as pt,d as Ge,h as Je,s as mt,q as Oe,_ as gt,P as ft,I as ht,b as vt,t as xt,v as yt,e as Ue,T as bt,w as wt}from"./WorkbenchView-CdTz2H8d.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
package/apps/web/dist/assets/{TaskDiffReviewDialog-BJOR35hG.js → TaskDiffReviewDialog-BPIVNvtG.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{w as V,G as Ye,k as T,x as P,z as w,E as qe,y as Ze,a as h,e as p,g as a,F as te,m as Se,n as F,t as o,b as S,u as t,A as Me,B as et,i as B,l as Re,c as je,d as ue,H as tt,
|
|
1
|
+
import{w as V,G as Ye,k as T,x as P,z as w,E as qe,y as Ze,a as h,e as p,g as a,F as te,m as Se,n as F,t as o,b as S,u as t,A as Me,B as et,i as B,l as Re,c as je,d as ue,H as tt,U as Ae}from"./index-BSJEmbKe.js";import{c as Ee,u as st,g as Le,l as at,S as nt,C as Ie,a as Ne,b as it,d as lt,_ as rt,e as ot,F as Ge,f as Be,h as ut}from"./WorkbenchView-CdTz2H8d.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as o,e as c,g as e,t as a,u as i,F as se,m as ne,
|
|
1
|
+
import{a as o,e as c,g as e,t as a,u as i,F as se,m as ne,n as Xe,v as wt,c as $,i as h,l as Ye,V as Rt,k as v,w as Je,o as Tt,d as de,b as z,A as te,C as St,B as xe,W as Mt,x as m,D as pe,E as Et}from"./index-BSJEmbKe.js";import{c as _e,r as H,d as Pt,i as $t,_ as Ut,E as Bt,j as jt,L as me,k as Nt,h as Ft,I as Lt,m as It}from"./WorkbenchView-CdTz2H8d.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.577.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -13,4 +13,4 @@ import{a as o,e as c,g as e,t as a,u as i,F as se,m as ne,l as Xe,P as wt,k as v
|
|
|
13
13
|
*
|
|
14
14
|
* This source code is licensed under the ISC license.
|
|
15
15
|
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Ge=_e("wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);function At(){return H("/api/relay/config",{cache:"no-store"})}function Qe(U){return H("/api/relay/config",{method:"PUT",body:JSON.stringify(U)})}function Vt(){return H("/api/relay/reconnect",{method:"POST"})}function zt(){return H("/api/system/config",{cache:"no-store"})}function Ht(U){return H("/api/system/config",{method:"PUT",body:JSON.stringify(U)})}function Ot(){return H("/api/diagnostics/runtime",{cache:"no-store"})}const Wt={class:"space-y-4"},Jt={class:"flex items-center justify-between gap-3"},Kt={class:"theme-heading text-sm font-medium"},Gt={class:"theme-toggle-current theme-badge-muted theme-muted-text rounded-sm border border-dashed px-2 py-1 text-[11px]"},Qt={class:"theme-muted-text theme-note-text mt-1"},Xt={class:"space-y-4"},Yt={class:"theme-muted-text px-1 text-[10px] font-medium uppercase tracking-[0.16em]"},Zt=["onClick"],es={class:"flex items-start gap-3"},ts={class:"mt-0.5 flex items-center gap-1.5"},ss={class:"min-w-0 flex-1"},ns={class:"flex items-center justify-between gap-2"},as={class:"truncate text-sm font-medium"},is={class:"theme-muted-text theme-note-text mt-1"},ls={__name:"ThemeToggle",setup(U){const{currentTheme:O,setTheme:W,themes:ae}=wt(),{t:T}=Xe(),ge=v(()=>{const b=ae.value.filter(x=>x.mode==="light"),F=ae.value.filter(x=>x.mode==="dark");return[{id:"light",label:T("theme.groupLight"),items:b},{id:"dark",label:T("theme.groupDark"),items:F}].filter(x=>x.items.length)});function he(b){W(b)}function s(b){return T(`theme.description.${b.id}`,{},b.description)}return(b,F)=>(o(),c("div",Wt,[e("div",null,[e("div",Jt,[e("div",Kt,a(i(T)("theme.heading")),1),e("div",Gt,a(i(T)("theme.currentTheme",{name:i(O).shortName})),1)]),e("div",Qt,a(i(T)("theme.helper")),1)]),e("div",Xt,[(o(!0),c(se,null,ne(ge.value,x=>(o(),c("section",{key:x.id,class:"space-y-1.5"},[e("div",Yt,a(x.label),1),(o(!0),c(se,null,ne(x.items,y=>(o(),c("button",{key:y.id,type:"button",class:Ye(["theme-option theme-toggle-card w-full rounded-sm border px-3 py-2 text-left transition",y.id===i(O).id?"theme-option-active":"theme-option-idle"]),onClick:k=>he(y.id)},[e("div",es,[e("div",ts,[(o(!0),c(se,null,ne(y.swatches,(k,C)=>(o(),c("span",{key:`${y.id}-${C}`,class:"h-3 w-3 rounded-full border border-black/10",style:Rt({backgroundColor:k})},null,4))),128))]),e("div",ss,[e("div",ns,[e("span",as,a(y.shortName),1),y.id===i(O).id?(o(),$(i(Et),{key:0,class:"h-4 w-4 shrink-0"})):h("",!0)]),e("div",is,a(s(y)),1)])])],10,Zt))),128))]))),128))])]))}},os={class:"theme-heading inline-flex items-center gap-2 text-sm font-medium"},rs={class:"settings-dialog-content min-h-0 flex-1 overflow-y-auto px-5 py-5"},cs={key:0,class:"space-y-4"},us={class:"theme-heading text-base font-medium"},ds={class:"theme-muted-text mt-1 text-xs leading-5"},ms={class:"settings-section-card px-4 py-4"},gs={class:"settings-section-card space-y-4 px-4 py-4"},hs={class:"theme-heading text-sm font-medium"},vs={class:"theme-muted-text mt-1 text-xs leading-5"},ys={class:"block space-y-1.5"},xs={class:"theme-muted-text text-xs"},ps={class:"truncate text-sm text-[var(--theme-textPrimary)]"},_s=["onClick"],fs={class:"flex items-center justify-between gap-3"},bs={class:"min-w-0"},Ds={class:"truncate text-[var(--theme-textPrimary)]"},ks={class:"theme-muted-text mt-1 truncate text-xs"},Cs={key:0,class:"theme-status-success rounded-sm border border-dashed px-2 py-0.5 text-[10px]"},ws={class:"theme-muted-text theme-note-text"},Rs={key:1,class:"space-y-4"},Ts={class:"flex items-start justify-between gap-3"},Ss={class:"theme-heading inline-flex items-center gap-2 text-base font-medium"},Ms={class:"settings-section-card space-y-4 px-4 py-4"},Ps={class:"settings-form-card flex items-center justify-between gap-3 px-3 py-2"},Es={class:"text-sm font-medium text-[var(--theme-textPrimary)]"},$s={class:"theme-muted-text mt-1 text-xs"},Us=["disabled"],Bs={class:"grid gap-4 sm:grid-cols-2"},js={class:"space-y-1.5 sm:col-span-2"},Ns={class:"theme-muted-text text-xs"},Fs=["disabled"],Ls={class:"space-y-1.5"},Is={class:"theme-muted-text text-xs"},qs=["disabled"],As={class:"space-y-1.5"},Vs={class:"theme-muted-text text-xs"},zs={class:"relative"},Hs=["type","placeholder","disabled"],Os=["disabled"],Ws={class:"settings-form-footer flex flex-wrap items-center justify-between gap-3"},Js={class:"min-w-0 space-y-1"},Ks={key:0,class:"theme-danger-text theme-note-text"},Gs={key:1,class:"theme-status-warning theme-note-text"},Qs={key:2,class:"theme-danger-text theme-note-text"},Xs={key:3,class:"theme-status-success theme-note-text"},Ys={key:4,class:"theme-danger-text theme-note-text"},Zs={key:5,class:"theme-muted-text theme-note-text"},en={key:6,class:"theme-muted-text theme-note-text"},tn={key:7,class:"theme-muted-text theme-note-text"},sn={key:8,class:"theme-status-success theme-note-text"},nn={key:9,class:"theme-muted-text theme-note-text"},an={class:"flex flex-wrap items-center gap-2"},ln=["disabled"],on=["disabled"],rn=["disabled"],cn={key:2,class:"space-y-4"},un={class:"theme-heading inline-flex items-center gap-2 text-base font-medium"},dn={class:"theme-muted-text mt-1 text-xs leading-5"},mn={class:"settings-section-card space-y-4 px-4 py-4"},gn={class:"space-y-1.5"},hn={class:"theme-muted-text text-xs"},vn=["disabled"],yn={class:"theme-muted-text text-xs leading-5"},xn={class:"settings-form-footer flex flex-wrap items-center justify-between gap-3"},pn={class:"min-w-0 space-y-1"},_n={key:0,class:"theme-status-warning theme-note-text"},fn={key:1,class:"theme-danger-text theme-note-text"},bn={key:2,class:"theme-status-success theme-note-text"},Dn={key:3,class:"theme-muted-text theme-note-text"},kn={class:"flex flex-wrap items-center gap-2"},Cn=["disabled"],wn={class:"settings-section-card space-y-4 px-4 py-4"},Rn={class:"flex flex-wrap items-start justify-between gap-3"},Tn={class:"theme-heading text-sm font-medium"},Sn={class:"theme-muted-text mt-1 text-xs leading-5"},Mn={class:"flex flex-wrap items-center gap-2"},Pn=["disabled"],En={class:"min-w-0 space-y-1"},$n={key:0,class:"theme-danger-text theme-note-text"},Un={key:1,class:"theme-status-success theme-note-text"},Bn={key:2,class:"theme-muted-text theme-note-text"},jn={key:0,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4"},Nn={class:"settings-form-card space-y-1 px-3 py-3"},Fn={class:"theme-heading text-lg font-medium"},Ln={class:"theme-muted-text text-xs"},In={class:"settings-form-card space-y-1 px-3 py-3"},qn={class:"theme-heading text-lg font-medium"},An={class:"theme-muted-text text-xs"},Vn={class:"settings-form-card space-y-1 px-3 py-3"},zn={class:"theme-heading text-lg font-medium"},Hn={class:"theme-muted-text text-xs"},On={class:"settings-form-card space-y-1 px-3 py-3"},Wn={class:"theme-heading text-lg font-medium"},Jn={class:"theme-muted-text text-xs"},Kn={key:1,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4"},Gn={class:"settings-form-card space-y-1 px-3 py-3"},Qn={class:"theme-heading text-lg font-medium"},Xn={class:"theme-muted-text text-xs"},Yn={class:"settings-form-card space-y-1 px-3 py-3"},Zn={class:"theme-heading text-lg font-medium"},ea={class:"theme-muted-text text-xs"},ta={class:"settings-form-card space-y-1 px-3 py-3"},sa={class:"theme-heading text-lg font-medium"},na={class:"theme-muted-text text-xs"},aa={class:"settings-form-card space-y-1 px-3 py-3"},ia={class:"theme-heading text-lg font-medium"},la={class:"theme-muted-text text-xs"},oa={key:2,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3"},ra={class:"settings-form-card space-y-1 px-3 py-3"},ca={class:"theme-heading text-lg font-medium"},ua={class:"theme-muted-text text-xs"},da={class:"settings-form-card space-y-1 px-3 py-3"},ma={class:"theme-heading text-lg font-medium"},ga={class:"theme-muted-text text-xs"},ha={class:"settings-form-card space-y-1 px-3 py-3"},va={class:"theme-heading text-sm font-medium"},ya={class:"theme-muted-text text-xs"},xa={class:"grid gap-4 lg:grid-cols-2"},pa={class:"settings-form-card space-y-3 px-3 py-3"},_a={class:"theme-heading text-sm font-medium"},fa={class:"space-y-2 text-xs"},ba={class:"flex items-center justify-between gap-3"},Da={class:"truncate text-right text-[var(--theme-textPrimary)]"},ka={class:"flex items-center justify-between gap-3"},Ca={class:"text-right text-[var(--theme-textPrimary)]"},wa={class:"flex items-center justify-between gap-3"},Ra={class:"text-right text-[var(--theme-textPrimary)]"},Ta={class:"flex items-center justify-between gap-3"},Sa={class:"text-right text-[var(--theme-textPrimary)]"},Ma={class:"flex items-center justify-between gap-3"},Pa={class:"text-right text-[var(--theme-textPrimary)]"},Ea={class:"settings-form-card space-y-3 px-3 py-3"},$a={class:"theme-heading text-sm font-medium"},Ua={class:"space-y-2 text-xs"},Ba={class:"theme-muted-text"},ja={class:"text-[var(--theme-textPrimary)]"},Na={key:3,class:"settings-form-card space-y-3 px-3 py-3"},Fa={class:"theme-heading text-sm font-medium"},La={class:"grid gap-2 sm:grid-cols-2 xl:grid-cols-3 text-xs"},Ia={class:"theme-muted-text"},qa={class:"text-[var(--theme-textPrimary)]"},Aa={key:4,class:"settings-form-card space-y-2 px-3 py-3"},Va={class:"theme-heading text-sm font-medium"},za={class:"theme-muted-text text-xs leading-5"},Ha={class:"theme-muted-text text-xs leading-5"},Oa={key:3,class:"space-y-4"},Wa={class:"theme-heading text-base font-medium"},Ja={class:"theme-muted-text mt-1 text-xs leading-5"},Ka={class:"settings-section-card px-4 py-4"},Ga={class:"flex items-center justify-between gap-3"},Qa={class:"theme-heading text-sm font-medium"},Xa={class:"theme-muted-text mt-1 text-xs leading-5"},Ya={class:"theme-badge-strong rounded-sm border border-dashed px-2.5 py-1 text-xs font-medium"},si={__name:"WorkbenchSettingsDialog",props:{open:{type:Boolean,default:!1}},emits:["close"],setup(U,{emit:O}){const W=U,ae=O,{locale:T,localeOptions:ge,setLocale:he,t:s}=Xe(),b=m(""),F=m(!1),x=m(""),y=m(!1),k=m(!1),C=m(!1),_=m(""),w=m(""),ie=m(!1),L=m(!1),I=m(""),J=m(""),q=m(!1),K=m(""),R=m(null),u=m(null),f=m(!1),A=pe({runnerMaxConcurrentRuns:!1}),G=m(!1),le=m(!1),oe=m(!1),re=m(!1),r=pe({enabled:!1,relayUrl:"",deviceId:"",deviceToken:""}),V=pe({runnerMaxConcurrentRuns:3}),S=m("theme");let B=null,j=null,ce=null;const Ze=v(()=>[{id:"theme",label:s("theme.title"),description:s("theme.sectionDescription"),icon:qt},{id:"relay",label:s("settingsDialog.relay.sectionLabel"),description:s("settingsDialog.relay.sectionDescription"),icon:Ge},{id:"system",label:s("settingsDialog.system.sectionLabel"),description:s("settingsDialog.system.sectionDescription"),icon:Ke},{id:"about",label:s("settingsDialog.about.sectionLabel"),description:s("settingsDialog.about.sectionDescription"),icon:Lt}]);function et(t=null,n=""){const l=String((t==null?void 0:t.messageKey)||"").trim();if(l){const g=s(l);if(g&&g!==l)return g}return String((t==null?void 0:t.message)||"").trim()||(n?s(n):"")}function ue(t="",n=""){const l=String(t||"").trim();if(l){const g=`settingsDialog.relay.reason.${l}`,D=s(g);if(D!==g)return D}return String(n||"").trim()||s("common.notAvailable")}function tt(t=null){const n=String((t==null?void 0:t.type)||"").trim()||"unknown",l=`settingsDialog.relay.event.${n}`,g=s(l);return g!==l?g:n}function st(t=null){const n=String((t==null?void 0:t.lastErrorKey)||"").trim(),l=t!=null&&t.lastErrorParams&&typeof t.lastErrorParams=="object"?t.lastErrorParams:{};return n==="connect_failed"?s("settingsDialog.relay.error.connect_failed"):n==="disconnected"?s("settingsDialog.relay.error.disconnected",{reason:ue(l.reasonCode,t==null?void 0:t.lastCloseReason)}):n==="rejected"?s("settingsDialog.relay.error.rejected",{reason:ue(l.reasonCode,t==null?void 0:t.lastCloseReason)}):n==="closed_with_code"?s("settingsDialog.relay.error.closedWithCode",{code:l.code||(t==null?void 0:t.lastCloseCode)||0}):String((t==null?void 0:t.lastError)||"").trim()}const nt=v(()=>{var t,n,l,g;return C.value?s("settingsDialog.relay.status.reconnecting"):k.value||G.value?s("settingsDialog.relay.status.saving"):y.value?s("settingsDialog.relay.status.loading"):(t=u.value)!=null&&t.reconnectPaused?s("settingsDialog.relay.status.paused"):(n=u.value)!=null&&n.connected?s("settingsDialog.relay.status.connected"):(((l=u.value)==null?void 0:l.enabled)??r.enabled)&&Number(((g=u.value)==null?void 0:g.nextReconnectDelayMs)||0)>0?s("settingsDialog.relay.status.waitingReconnect"):r.enabled?s("settingsDialog.relay.status.disconnected"):s("settingsDialog.relay.status.disabled")}),at=v(()=>{var t,n;return(t=u.value)!=null&&t.reconnectPaused?"theme-status-danger":(n=u.value)!=null&&n.connected?"theme-status-success":r.enabled?"theme-status-warning":"theme-status-neutral"}),it=v(()=>{var t,n,l;return!f.value&&!_.value&&!w.value&&!((t=u.value)!=null&&t.lastError)&&!((n=u.value)!=null&&n.lastCloseReason)&&!((l=u.value)!=null&&l.lastConnectedAt)}),lt=v(()=>{const t=r.deviceToken?`${"*".repeat(Math.max(0,r.deviceToken.length-4))}${r.deviceToken.slice(-4)}`:"";return JSON.stringify({generatedAt:new Date().toISOString(),source:"local-settings",config:{enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceTokenMasked:t,managedByEnv:f.value},status:u.value||null},null,2)}),N=v(()=>{var t,n;return((n=(t=R.value)==null?void 0:t.runner)==null?void 0:n.runner)||null}),Q=v(()=>{var t,n;return!!((n=(t=R.value)==null?void 0:t.runner)!=null&&n.ok&&N.value)}),p=v(()=>{var t;return((t=N.value)==null?void 0:t.metrics)||null}),fe=v(()=>{var t;return((t=R.value)==null?void 0:t.recovery)||null}),be=v(()=>{var t;return((t=R.value)==null?void 0:t.maintenance)||null}),ot=v(()=>{var t;return((t=R.value)==null?void 0:t.gitDiffWorker)||null}),rt=v(()=>JSON.stringify({generatedAt:new Date().toISOString(),source:"local-settings",config:{runner:{maxConcurrentRuns:V.runnerMaxConcurrentRuns,managedByEnv:A.runnerMaxConcurrentRuns}},diagnostics:R.value||null},null,2));function X(t){const n=String(t||"").trim();if(!n)return s("common.notAvailable");const l=new Date(n);return Number.isNaN(l.getTime())?n:Pt(l.toISOString(),{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}const ct=v(()=>{var t,n,l,g,D,M,P,E;return[{key:"queued_cancelled",label:s("settingsDialog.system.stopReasons.queued_cancelled"),value:Math.max(0,Number((n=(t=p.value)==null?void 0:t.stopReasons)==null?void 0:n.queued_cancelled)||0)},{key:"user_requested",label:s("settingsDialog.system.stopReasons.user_requested"),value:Math.max(0,Number((g=(l=p.value)==null?void 0:l.stopReasons)==null?void 0:g.user_requested)||0)},{key:"user_requested_after_error",label:s("settingsDialog.system.stopReasons.user_requested_after_error"),value:Math.max(0,Number((M=(D=p.value)==null?void 0:D.stopReasons)==null?void 0:M.user_requested_after_error)||0)},{key:"stop_timeout",label:s("settingsDialog.system.stopReasons.stop_timeout"),value:Math.max(0,Number((E=(P=p.value)==null?void 0:P.stopReasons)==null?void 0:E.stop_timeout)||0)}]}),ut=v(()=>{var t,n,l,g,D,M,P,E,Z,ee;return[{key:"runner_timeout_without_stop_request",label:s("settingsDialog.system.stopTimeoutPhases.runner_timeout_without_stop_request"),value:Math.max(0,Number((n=(t=p.value)==null?void 0:t.stopTimeoutPhases)==null?void 0:n.runner_timeout_without_stop_request)||0)},{key:"runner_timeout_before_cancel",label:s("settingsDialog.system.stopTimeoutPhases.runner_timeout_before_cancel"),value:Math.max(0,Number((g=(l=p.value)==null?void 0:l.stopTimeoutPhases)==null?void 0:g.runner_timeout_before_cancel)||0)},{key:"cli_not_exiting",label:s("settingsDialog.system.stopTimeoutPhases.cli_not_exiting"),value:Math.max(0,Number((M=(D=p.value)==null?void 0:D.stopTimeoutPhases)==null?void 0:M.cli_not_exiting)||0)},{key:"os_kill_slow",label:s("settingsDialog.system.stopTimeoutPhases.os_kill_slow"),value:Math.max(0,Number((E=(P=p.value)==null?void 0:P.stopTimeoutPhases)==null?void 0:E.os_kill_slow)||0)},{key:"runner_finalize_after_exit",label:s("settingsDialog.system.stopTimeoutPhases.runner_finalize_after_exit"),value:Math.max(0,Number((ee=(Z=p.value)==null?void 0:Z.stopTimeoutPhases)==null?void 0:ee.runner_finalize_after_exit)||0)}]}),dt=v(()=>ge.value.map(t=>({value:t.value,label:t.value==="zh-CN"?s("locale.zhHans"):s("locale.enUs"),englishLabel:t.englishLabel})));async function mt(){F.value=!0,x.value="";try{const t=await It(),n=String((t==null?void 0:t.version)||"").trim();b.value=n,n||(x.value=s("settingsDialog.about.versionPending"))}catch(t){b.value="",x.value=(t==null?void 0:t.message)||s("settingsDialog.about.versionLoadFailed")}finally{F.value=!1}}function ve(t={}){r.enabled=!!(t!=null&&t.enabled),r.relayUrl=String((t==null?void 0:t.relayUrl)||""),r.deviceId=String((t==null?void 0:t.deviceId)||""),r.deviceToken=String((t==null?void 0:t.deviceToken)||"")}function De(t={}){var n;V.runnerMaxConcurrentRuns=Math.max(1,Number((n=t==null?void 0:t.runner)==null?void 0:n.maxConcurrentRuns)||3)}async function ke(){y.value=!0,_.value="",w.value="";try{const t=await At();ve((t==null?void 0:t.config)||{}),f.value=!!(t!=null&&t.managedByEnv),u.value=(t==null?void 0:t.relay)||null}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayConfigLoadFailed"),u.value=null}finally{y.value=!1}}async function gt(){var t,n;ie.value=!0,I.value="",J.value="";try{const l=await zt();De((l==null?void 0:l.config)||{}),A.runnerMaxConcurrentRuns=!!((n=(t=l==null?void 0:l.managedByEnv)==null?void 0:t.runner)!=null&&n.maxConcurrentRuns),Y()}catch(l){I.value=(l==null?void 0:l.message)||s("settingsDialog.system.systemConfigLoadFailed")}finally{ie.value=!1}}async function Y(){q.value=!0,K.value="";try{R.value=await Ot()}catch(t){K.value=(t==null?void 0:t.message)||s("settingsDialog.system.systemDiagnosticsLoadFailed")}finally{q.value=!1}}async function ht(){k.value=!0,_.value="",w.value="";try{const t=await Qe({enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceToken:r.deviceToken});ve((t==null?void 0:t.config)||{}),f.value=!!(t!=null&&t.managedByEnv),u.value=(t==null?void 0:t.relay)||null,w.value=r.enabled?s("settingsDialog.relay.relayConfigSavedEnabled"):s("settingsDialog.relay.relayConfigSavedDisabled")}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayConfigSaveFailed")}finally{k.value=!1}}async function vt(){C.value=!0,_.value="",w.value="";try{const t=await Vt();u.value=(t==null?void 0:t.relay)||null,w.value=s("settingsDialog.relay.relayReconnectTriggered"),setTimeout(()=>{ke()},1200)}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayReconnectFailed")}finally{C.value=!1}}async function yt(){var t,n;L.value=!0,I.value="",J.value="";try{const l=await Ht({runner:{maxConcurrentRuns:V.runnerMaxConcurrentRuns}});De((l==null?void 0:l.config)||{}),A.runnerMaxConcurrentRuns=!!((n=(t=l==null?void 0:l.managedByEnv)==null?void 0:t.runner)!=null&&n.maxConcurrentRuns),J.value=s("settingsDialog.system.systemConfigSaved"),Y()}catch(l){I.value=(l==null?void 0:l.message)||s("settingsDialog.system.systemConfigSaveFailed")}finally{L.value=!1}}function xt(){return!!(String(r.relayUrl||"").trim()&&String(r.deviceId||"").trim()&&String(r.deviceToken||"").trim())}async function pt(){var t;if(!f.value){if(_.value="",w.value="",r.enabled&&!xt()){r.enabled=!1,_.value=s("settingsDialog.relay.relayFieldsRequired");return}G.value=!0;try{const n=await Qe({enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceToken:r.deviceToken});ve((n==null?void 0:n.config)||{}),f.value=!!(n!=null&&n.managedByEnv),u.value=(n==null?void 0:n.relay)||null,w.value=r.enabled?s("settingsDialog.relay.relayEnabledSaved"):s("settingsDialog.relay.relayConfigSavedDisabled")}catch(n){r.enabled=!!((t=u.value)!=null&&t.enabled),_.value=(n==null?void 0:n.message)||s("settingsDialog.relay.relayToggleFailed")}finally{G.value=!1}}}async function Ce(t){var l;if((l=navigator.clipboard)!=null&&l.writeText&&window.isSecureContext){await navigator.clipboard.writeText(t);return}const n=document.createElement("textarea");n.value=t,n.setAttribute("readonly","true"),n.style.position="fixed",n.style.opacity="0",n.style.pointerEvents="none",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)}async function _t(){try{await Ce(lt.value),oe.value=!0,B&&clearTimeout(B),B=setTimeout(()=>{oe.value=!1,B=null},2e3)}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayDiagnosticsCopyFailed")}}async function ft(){try{await Ce(rt.value),re.value=!0,j&&clearTimeout(j),j=setTimeout(()=>{re.value=!1,j=null},2e3)}catch(t){K.value=(t==null?void 0:t.message)||s("settingsDialog.system.systemDiagnosticsCopyFailed")}}function bt(t){he(t)}function ye(){ce&&(clearInterval(ce),ce=null)}function Dt(){ye(),!(!W.open||S.value!=="system")&&(Y(),ce=setInterval(()=>{Y()},5e3))}return Je(()=>W.open,t=>{if(t){S.value="theme",mt(),ke(),gt();return}},{immediate:!0}),Je([()=>W.open,S],([t,n])=>{if(t&&n==="system"){Dt();return}ye()},{immediate:!0}),Tt(()=>{B&&(clearTimeout(B),B=null),j&&(clearTimeout(j),j=null),ye()}),(t,n)=>(o(),$(Ft,{open:U.open,"backdrop-class":"z-[70] items-end justify-center px-0 py-0 sm:items-center sm:px-4 sm:py-6","panel-class":"settings-dialog-panel h-full max-w-5xl sm:h-[42rem] sm:max-h-[88vh]","header-class":"settings-dialog-header px-5 py-4","body-class":"settings-dialog-body min-h-0 flex flex-1 flex-col sm:flex-row",onClose:n[7]||(n[7]=l=>ae("close"))},{title:de(()=>[e("div",os,[z(i(Nt),{class:"h-4 w-4"}),e("span",null,a(i(s)("common.settings")),1)])]),default:de(()=>{var l,g,D,M,P,E,Z,ee,we,Re,Te,Se,Me,Pe,Ee,$e,Ue,Be,je,Ne,Fe,Le,Ie,qe,Ae,Ve,ze,He,Oe,We;return[z($t,{modelValue:S.value,"onUpdate:modelValue":n[0]||(n[0]=d=>S.value=d),sections:Ze.value},null,8,["modelValue","sections"]),e("div",rs,[S.value==="theme"?(o(),c("section",cs,[e("div",null,[e("div",us,a(i(s)("theme.title")),1),e("p",ds,a(i(s)("theme.sectionDescription")),1)]),e("section",ms,[z(ls)]),e("section",gs,[e("div",null,[e("div",hs,a(i(s)("locale.title")),1),e("p",vs,a(i(s)("locale.description")),1)]),e("label",ys,[e("span",xs,a(i(s)("locale.field")),1),z(Ut,{"model-value":i(T),options:dt.value,"get-option-value":d=>d.value,"onUpdate:modelValue":bt},{trigger:de(({selectedOption:d})=>[e("div",ps,a((d==null?void 0:d.label)||i(s)("common.select")),1)]),option:de(({option:d,selected:kt,select:Ct})=>[e("button",{type:"button",class:"workbench-select-option theme-filter-idle w-full rounded-sm border border-dashed px-3 py-2 text-left text-sm",onClick:Za=>Ct()},[e("div",fs,[e("div",bs,[e("div",Ds,a(d.label),1),e("div",ks,a(d.englishLabel),1)]),kt?(o(),c("span",Cs,a(i(s)("common.enabled")),1)):h("",!0)])],8,_s)]),_:1},8,["model-value","options","get-option-value"])]),e("p",ws,a(i(s)("locale.immediateHint")),1)])])):S.value==="relay"?(o(),c("section",Rs,[e("div",Ts,[e("div",null,[e("div",Ss,[z(i(Ge),{class:"h-4 w-4"}),e("span",null,a(i(s)("settingsDialog.relay.title")),1)])]),e("span",{class:Ye(["rounded-sm border border-dashed px-2.5 py-1 text-xs font-medium",at.value])},a(nt.value),3)]),e("section",Ms,[e("label",Ps,[e("div",null,[e("div",Es,a(i(s)("settingsDialog.relay.enableTitle")),1),e("p",$s,a(i(s)("settingsDialog.relay.enableDescription")),1)]),te(e("input",{"onUpdate:modelValue":n[1]||(n[1]=d=>r.enabled=d),type:"checkbox",class:"h-4 w-4",disabled:f.value,onChange:pt},null,40,Us),[[St,r.enabled]])]),e("div",Bs,[e("label",js,[e("span",Ns,a(i(s)("settingsDialog.relay.relayUrl")),1),te(e("input",{"onUpdate:modelValue":n[2]||(n[2]=d=>r.relayUrl=d),type:"text",placeholder:"https://user1.promptx.example.com",class:"tool-input",disabled:f.value},null,8,Fs),[[xe,r.relayUrl]])]),e("label",Ls,[e("span",Is,a(i(s)("settingsDialog.relay.deviceId")),1),te(e("input",{"onUpdate:modelValue":n[3]||(n[3]=d=>r.deviceId=d),type:"text",placeholder:"my-macbook",class:"tool-input",disabled:f.value},null,8,qs),[[xe,r.deviceId]])]),e("label",As,[e("span",Vs,a(i(s)("settingsDialog.relay.deviceToken")),1),e("div",zs,[te(e("input",{"onUpdate:modelValue":n[4]||(n[4]=d=>r.deviceToken=d),type:le.value?"text":"password",placeholder:i(s)("settingsDialog.relay.deviceTokenPlaceholder"),class:"tool-input pr-10",disabled:f.value},null,8,Hs),[[Mt,r.deviceToken]]),e("button",{type:"button",class:"theme-icon-button absolute inset-y-1 right-1 flex h-auto w-8 items-center justify-center",disabled:f.value,onClick:n[5]||(n[5]=d=>le.value=!le.value)},[le.value?(o(),$(i(jt),{key:1,class:"h-4 w-4"})):(o(),$(i(Bt),{key:0,class:"h-4 w-4"}))],8,Os)])])]),e("div",Ws,[e("div",Js,[(l=u.value)!=null&&l.reconnectPausedReason?(o(),c("p",Ks,a(i(s)("settingsDialog.relay.pausedReconnect",{reason:ue(u.value.reconnectPausedReasonCode,u.value.reconnectPausedReason)})),1)):h("",!0),f.value?(o(),c("p",Gs,a(i(s)("settingsDialog.relay.managedByEnv")),1)):h("",!0),_.value?(o(),c("p",Qs,a(_.value),1)):w.value?(o(),c("p",Xs,a(w.value),1)):(g=u.value)!=null&&g.lastError?(o(),c("p",Ys,a(i(s)("settingsDialog.relay.lastError",{value:st(u.value)})),1)):(D=u.value)!=null&&D.lastCloseReason?(o(),c("p",Zs,a(i(s)("settingsDialog.relay.lastClosed",{reason:ue(u.value.lastCloseReasonCode,u.value.lastCloseReason),code:u.value.lastCloseCode})),1)):(M=u.value)!=null&&M.lastConnectedAt?(o(),c("p",en,a(i(s)("settingsDialog.relay.lastConnected",{value:X(u.value.lastConnectedAt)})),1)):h("",!0),(E=(P=u.value)==null?void 0:P.recentEvents)!=null&&E.length?(o(),c("p",tn,a(i(s)("settingsDialog.relay.recentEvent",{value:tt(u.value.recentEvents[0])})),1)):h("",!0),oe.value?(o(),c("p",sn,a(i(s)("settingsDialog.relay.copied")),1)):h("",!0),it.value?(o(),c("p",nn,a(i(s)("settingsDialog.relay.defaultHint")),1)):h("",!0)]),e("div",an,[e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||k.value||G.value||C.value||!(((Z=u.value)==null?void 0:Z.enabled)??r.enabled),onClick:vt},[C.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(C.value?i(s)("settingsDialog.relay.reconnecting"):i(s)("settingsDialog.relay.reconnectNow")),1)],8,ln),e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||C.value,onClick:_t},[e("span",null,a(oe.value?i(s)("settingsDialog.relay.diagnosticsCopied"):i(s)("settingsDialog.relay.copyDiagnostics")),1)],8,on),e("button",{type:"button",class:"tool-button tool-button-primary inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||k.value||G.value||C.value||f.value,onClick:ht},[k.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(k.value?i(s)("common.saving"):i(s)("settingsDialog.relay.saveConfig")),1)],8,rn)])])])])):S.value==="system"?(o(),c("section",cn,[e("div",null,[e("div",un,[z(i(Ke),{class:"h-4 w-4"}),e("span",null,a(i(s)("settingsDialog.system.title")),1)]),e("p",dn,a(i(s)("settingsDialog.system.intro")),1)]),e("section",mn,[e("label",gn,[e("span",hn,a(i(s)("settingsDialog.system.maxConcurrentRuns")),1),te(e("input",{"onUpdate:modelValue":n[6]||(n[6]=d=>V.runnerMaxConcurrentRuns=d),type:"number",min:"1",max:"16",step:"1",class:"tool-input",disabled:A.runnerMaxConcurrentRuns||ie.value||L.value},null,8,vn),[[xe,V.runnerMaxConcurrentRuns,void 0,{number:!0}]]),e("p",yn,a(i(s)("settingsDialog.system.maxConcurrentRunsHint")),1)]),e("div",xn,[e("div",pn,[A.runnerMaxConcurrentRuns?(o(),c("p",_n,a(i(s)("settingsDialog.system.managedByEnv")),1)):I.value?(o(),c("p",fn,a(I.value),1)):J.value?(o(),c("p",bn,a(J.value),1)):(o(),c("p",Dn,a(i(s)("settingsDialog.system.diagnosticsHint")),1))]),e("div",kn,[e("button",{type:"button",class:"tool-button tool-button-primary inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:A.runnerMaxConcurrentRuns||ie.value||L.value,onClick:yt},[L.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(L.value?i(s)("common.saving"):i(s)("settingsDialog.system.saveConfig")),1)],8,Cn)])])]),e("section",wn,[e("div",Rn,[e("div",null,[e("div",Tn,a(i(s)("settingsDialog.system.runtimeDiagnostics")),1),e("p",Sn,a(i(s)("settingsDialog.system.runtimeDiagnosticsHint")),1)]),e("div",Mn,[e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:q.value,onClick:Y},[q.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(q.value?i(s)("settingsDialog.system.refreshingDiagnostics"):i(s)("settingsDialog.system.refreshDiagnostics")),1)],8,Pn),e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",onClick:ft},[e("span",null,a(re.value?i(s)("settingsDialog.system.diagnosticsCopied"):i(s)("settingsDialog.system.copyDiagnostics")),1)])])]),e("div",En,[K.value?(o(),c("p",$n,a(K.value),1)):re.value?(o(),c("p",Un,a(i(s)("settingsDialog.system.diagnosticsCopiedHint")),1)):(o(),c("p",Bn,a(i(s)("settingsDialog.system.diagnosticsHint")),1))]),Q.value?(o(),c("div",jn,[e("div",Nn,[n[8]||(n[8]=e("div",{class:"theme-muted-text text-xs"},"active",-1)),e("div",Fn,a(((ee=N.value)==null?void 0:ee.activeRunCount)||0),1),e("p",Ln,a(i(s)("settingsDialog.system.active")),1)]),e("div",In,[n[9]||(n[9]=e("div",{class:"theme-muted-text text-xs"},"tracked",-1)),e("div",qn,a(((we=N.value)==null?void 0:we.trackedRunCount)||0),1),e("p",An,a(i(s)("settingsDialog.system.tracked")),1)]),e("div",Vn,[n[10]||(n[10]=e("div",{class:"theme-muted-text text-xs"},"queued",-1)),e("div",zn,a(((Re=N.value)==null?void 0:Re.queuedRunCount)||0),1),e("p",Hn,a(i(s)("settingsDialog.system.queued")),1)]),e("div",On,[n[11]||(n[11]=e("div",{class:"theme-muted-text text-xs"},"maxConcurrent",-1)),e("div",Wn,a(((Se=(Te=N.value)==null?void 0:Te.config)==null?void 0:Se.maxConcurrentRuns)||V.runnerMaxConcurrentRuns),1),e("p",Jn,a(i(s)("settingsDialog.system.maxConcurrent")),1)])])):h("",!0),Q.value?(o(),c("div",Kn,[e("div",Gn,[n[12]||(n[12]=e("div",{class:"theme-muted-text text-xs"},"completed",-1)),e("div",Qn,a(((Me=p.value)==null?void 0:Me.totalCompleted)||0),1),e("p",Xn,a(i(s)("settingsDialog.system.completed")),1)]),e("div",Yn,[n[13]||(n[13]=e("div",{class:"theme-muted-text text-xs"},"stopped",-1)),e("div",Zn,a(((Pe=p.value)==null?void 0:Pe.totalStopped)||0),1),e("p",ea,a(i(s)("settingsDialog.system.stopped")),1)]),e("div",ta,[n[14]||(n[14]=e("div",{class:"theme-muted-text text-xs"},"error",-1)),e("div",sa,a(((Ee=p.value)==null?void 0:Ee.totalErrored)||0),1),e("p",na,a(i(s)("settingsDialog.system.error")),1)]),e("div",aa,[n[15]||(n[15]=e("div",{class:"theme-muted-text text-xs"},"stop_timeout",-1)),e("div",ia,a((($e=p.value)==null?void 0:$e.totalStopTimeout)||0),1),e("p",la,a(i(s)("settingsDialog.system.stopTimeout")),1)])])):h("",!0),Q.value?(o(),c("div",oa,[e("div",ra,[n[16]||(n[16]=e("div",{class:"theme-muted-text text-xs"},"event flush failures",-1)),e("div",ca,a(((Ue=p.value)==null?void 0:Ue.eventFlushFailureCount)||0),1),e("p",ua,a(i(s)("settingsDialog.system.eventWriteFailures")),1)]),e("div",da,[n[17]||(n[17]=e("div",{class:"theme-muted-text text-xs"},"recovered runs",-1)),e("div",ma,a(((je=(Be=fe.value)==null?void 0:Be.metrics)==null?void 0:je.totalRecovered)||0),1),e("p",ga,a(i(s)("settingsDialog.system.recoveredRuns")),1)]),e("div",ha,[n[18]||(n[18]=e("div",{class:"theme-muted-text text-xs"},"last cleanup",-1)),e("div",va,a(X((Fe=(Ne=be.value)==null?void 0:Ne.lastCleanup)==null?void 0:Fe.finishedAt)),1),e("p",ya,a(i(s)("settingsDialog.system.lastMaintenanceAt")),1)])])):h("",!0),e("div",xa,[e("div",pa,[e("div",_a,a(i(s)("settingsDialog.system.baseStatus")),1),e("div",fa,[e("div",ba,[n[19]||(n[19]=e("span",{class:"theme-muted-text"},"runner baseUrl",-1)),e("span",Da,a(((Ie=(Le=R.value)==null?void 0:Le.runner)==null?void 0:Ie.baseUrl)||"-"),1)]),e("div",ka,[n[20]||(n[20]=e("span",{class:"theme-muted-text"},"runner startedAt",-1)),e("span",Ca,a(X((qe=N.value)==null?void 0:qe.startedAt)),1)]),e("div",wa,[n[21]||(n[21]=e("span",{class:"theme-muted-text"},"last sweep",-1)),e("span",Ra,a(X((Ve=(Ae=fe.value)==null?void 0:Ae.metrics)==null?void 0:Ve.lastSweepFinishedAt)),1)]),e("div",Ta,[n[22]||(n[22]=e("span",{class:"theme-muted-text"},"git diff worker",-1)),e("span",Sa,a(ot.value?i(s)("settingsDialog.system.available"):i(s)("settingsDialog.system.unknown")),1)]),e("div",Ma,[n[23]||(n[23]=e("span",{class:"theme-muted-text"},"db vacuum",-1)),e("span",Pa,a(X((ze=be.value)==null?void 0:ze.lastVacuumAt)),1)])])]),e("div",Ea,[e("div",$a,a(i(s)("settingsDialog.system.stopReasonTitle")),1),e("div",Ua,[(o(!0),c(se,null,ne(ct.value,d=>(o(),c("div",{key:d.key,class:"flex items-center justify-between gap-3"},[e("span",Ba,a(d.label),1),e("span",ja,a(d.value),1)]))),128))])])]),Q.value?(o(),c("div",Na,[e("div",Fa,a(i(s)("settingsDialog.system.stopTimeoutPhaseTitle")),1),e("div",La,[(o(!0),c(se,null,ne(ut.value,d=>(o(),c("div",{key:d.key,class:"flex items-center justify-between gap-3 rounded-sm border border-dashed border-[var(--theme-borderMuted)] px-2.5 py-2"},[e("span",Ia,a(d.label),1),e("span",qa,a(d.value),1)]))),128))])])):h("",!0),!Q.value&&!q.value?(o(),c("div",Aa,[e("div",Va,a(i(s)("settingsDialog.system.runnerUnavailable")),1),e("p",za,a(et((He=R.value)==null?void 0:He.runner,"settingsDialog.system.runnerUnavailableDescription")),1),e("p",Ha," baseUrl: "+a(((We=(Oe=R.value)==null?void 0:Oe.runner)==null?void 0:We.baseUrl)||"-"),1)])):h("",!0)])])):(o(),c("section",Oa,[e("div",null,[e("div",Wa,a(i(s)("settingsDialog.about.title")),1),e("p",Ja,a(i(s)("settingsDialog.about.intro")),1)]),e("section",Ka,[e("div",Ga,[e("div",null,[e("div",Qa,a(i(s)("settingsDialog.about.versionTitle")),1),e("p",Xa,a(x.value||i(s)("settingsDialog.about.versionDescription")),1)]),e("span",Ya,a(F.value?i(s)("common.loading"):b.value?`v${b.value}`:i(s)("common.unavailable")),1)])])]))])]}),_:1},8,["open"]))}};export{si as default};
|
|
16
|
+
*/const Ge=_e("wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);function Vt(){return H("/api/relay/config",{cache:"no-store"})}function Qe(U){return H("/api/relay/config",{method:"PUT",body:JSON.stringify(U)})}function At(){return H("/api/relay/reconnect",{method:"POST"})}function zt(){return H("/api/system/config",{cache:"no-store"})}function Ht(U){return H("/api/system/config",{method:"PUT",body:JSON.stringify(U)})}function Ot(){return H("/api/diagnostics/runtime",{cache:"no-store"})}const Wt={class:"space-y-4"},Jt={class:"flex items-center justify-between gap-3"},Kt={class:"theme-heading text-sm font-medium"},Gt={class:"theme-toggle-current theme-badge-muted theme-muted-text rounded-sm border border-dashed px-2 py-1 text-[11px]"},Qt={class:"theme-muted-text theme-note-text mt-1"},Xt={class:"space-y-4"},Yt={class:"theme-muted-text px-1 text-[10px] font-medium uppercase tracking-[0.16em]"},Zt=["onClick"],es={class:"flex items-start gap-3"},ts={class:"mt-0.5 flex items-center gap-1.5"},ss={class:"min-w-0 flex-1"},ns={class:"flex items-center justify-between gap-2"},as={class:"truncate text-sm font-medium"},is={class:"theme-muted-text theme-note-text mt-1"},ls={__name:"ThemeToggle",setup(U){const{currentTheme:O,setTheme:W,themes:ae}=Rt(),{t:T}=Ye(),ge=v(()=>{const b=ae.value.filter(x=>x.mode==="light"),F=ae.value.filter(x=>x.mode==="dark");return[{id:"light",label:T("theme.groupLight"),items:b},{id:"dark",label:T("theme.groupDark"),items:F}].filter(x=>x.items.length)});function he(b){W(b)}function s(b){return T(`theme.description.${b.id}`,{},b.description)}return(b,F)=>(o(),c("div",Wt,[e("div",null,[e("div",Jt,[e("div",Kt,a(i(T)("theme.heading")),1),e("div",Gt,a(i(T)("theme.currentTheme",{name:i(O).shortName})),1)]),e("div",Qt,a(i(T)("theme.helper")),1)]),e("div",Xt,[(o(!0),c(se,null,ne(ge.value,x=>(o(),c("section",{key:x.id,class:"space-y-1.5"},[e("div",Yt,a(x.label),1),(o(!0),c(se,null,ne(x.items,y=>(o(),c("button",{key:y.id,type:"button",class:Xe(["theme-option theme-toggle-card w-full rounded-sm border px-3 py-2 text-left transition",y.id===i(O).id?"theme-option-active":"theme-option-idle"]),onClick:k=>he(y.id)},[e("div",es,[e("div",ts,[(o(!0),c(se,null,ne(y.swatches,(k,C)=>(o(),c("span",{key:`${y.id}-${C}`,class:"h-3 w-3 rounded-full border border-black/10",style:wt({backgroundColor:k})},null,4))),128))]),e("div",ss,[e("div",ns,[e("span",as,a(y.shortName),1),y.id===i(O).id?(o(),$(i(Pt),{key:0,class:"h-4 w-4 shrink-0"})):h("",!0)]),e("div",is,a(s(y)),1)])])],10,Zt))),128))]))),128))])]))}},os={class:"theme-heading inline-flex items-center gap-2 text-sm font-medium"},rs={class:"settings-dialog-content min-h-0 flex-1 overflow-y-auto px-5 py-5"},cs={key:0,class:"space-y-4"},us={class:"theme-heading text-base font-medium"},ds={class:"theme-muted-text mt-1 text-xs leading-5"},ms={class:"settings-section-card px-4 py-4"},gs={class:"settings-section-card space-y-4 px-4 py-4"},hs={class:"theme-heading text-sm font-medium"},vs={class:"theme-muted-text mt-1 text-xs leading-5"},ys={class:"block space-y-1.5"},xs={class:"theme-muted-text text-xs"},ps={class:"truncate text-sm text-[var(--theme-textPrimary)]"},_s=["onClick"],fs={class:"flex items-center justify-between gap-3"},bs={class:"min-w-0"},Ds={class:"truncate text-[var(--theme-textPrimary)]"},ks={class:"theme-muted-text mt-1 truncate text-xs"},Cs={key:0,class:"theme-status-success rounded-sm border border-dashed px-2 py-0.5 text-[10px]"},ws={class:"theme-muted-text theme-note-text"},Rs={key:1,class:"space-y-4"},Ts={class:"flex items-start justify-between gap-3"},Ss={class:"theme-heading inline-flex items-center gap-2 text-base font-medium"},Ms={class:"settings-section-card space-y-4 px-4 py-4"},Es={class:"settings-form-card flex items-center justify-between gap-3 px-3 py-2"},Ps={class:"text-sm font-medium text-[var(--theme-textPrimary)]"},$s={class:"theme-muted-text mt-1 text-xs"},Us=["disabled"],Bs={class:"grid gap-4 sm:grid-cols-2"},js={class:"space-y-1.5 sm:col-span-2"},Ns={class:"theme-muted-text text-xs"},Fs=["disabled"],Ls={class:"space-y-1.5"},Is={class:"theme-muted-text text-xs"},qs=["disabled"],Vs={class:"space-y-1.5"},As={class:"theme-muted-text text-xs"},zs={class:"relative"},Hs=["type","placeholder","disabled"],Os=["disabled"],Ws={class:"settings-form-footer flex flex-wrap items-center justify-between gap-3"},Js={class:"min-w-0 space-y-1"},Ks={key:0,class:"theme-danger-text theme-note-text"},Gs={key:1,class:"theme-status-warning theme-note-text"},Qs={key:2,class:"theme-danger-text theme-note-text"},Xs={key:3,class:"theme-status-success theme-note-text"},Ys={key:4,class:"theme-danger-text theme-note-text"},Zs={key:5,class:"theme-muted-text theme-note-text"},en={key:6,class:"theme-muted-text theme-note-text"},tn={key:7,class:"theme-muted-text theme-note-text"},sn={key:8,class:"theme-status-success theme-note-text"},nn={key:9,class:"theme-muted-text theme-note-text"},an={class:"flex flex-wrap items-center gap-2"},ln=["disabled"],on=["disabled"],rn=["disabled"],cn={key:2,class:"space-y-4"},un={class:"theme-heading inline-flex items-center gap-2 text-base font-medium"},dn={class:"theme-muted-text mt-1 text-xs leading-5"},mn={class:"settings-section-card space-y-4 px-4 py-4"},gn={class:"space-y-1.5"},hn={class:"theme-muted-text text-xs"},vn=["disabled"],yn={class:"theme-muted-text text-xs leading-5"},xn={class:"settings-form-footer flex flex-wrap items-center justify-between gap-3"},pn={class:"min-w-0 space-y-1"},_n={key:0,class:"theme-status-warning theme-note-text"},fn={key:1,class:"theme-danger-text theme-note-text"},bn={key:2,class:"theme-status-success theme-note-text"},Dn={key:3,class:"theme-muted-text theme-note-text"},kn={class:"flex flex-wrap items-center gap-2"},Cn=["disabled"],wn={class:"settings-section-card space-y-4 px-4 py-4"},Rn={class:"flex flex-wrap items-start justify-between gap-3"},Tn={class:"theme-heading text-sm font-medium"},Sn={class:"theme-muted-text mt-1 text-xs leading-5"},Mn={class:"flex flex-wrap items-center gap-2"},En=["disabled"],Pn={class:"min-w-0 space-y-1"},$n={key:0,class:"theme-danger-text theme-note-text"},Un={key:1,class:"theme-status-success theme-note-text"},Bn={key:2,class:"theme-muted-text theme-note-text"},jn={key:0,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4"},Nn={class:"settings-form-card space-y-1 px-3 py-3"},Fn={class:"theme-heading text-lg font-medium"},Ln={class:"theme-muted-text text-xs"},In={class:"settings-form-card space-y-1 px-3 py-3"},qn={class:"theme-heading text-lg font-medium"},Vn={class:"theme-muted-text text-xs"},An={class:"settings-form-card space-y-1 px-3 py-3"},zn={class:"theme-heading text-lg font-medium"},Hn={class:"theme-muted-text text-xs"},On={class:"settings-form-card space-y-1 px-3 py-3"},Wn={class:"theme-heading text-lg font-medium"},Jn={class:"theme-muted-text text-xs"},Kn={key:1,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4"},Gn={class:"settings-form-card space-y-1 px-3 py-3"},Qn={class:"theme-heading text-lg font-medium"},Xn={class:"theme-muted-text text-xs"},Yn={class:"settings-form-card space-y-1 px-3 py-3"},Zn={class:"theme-heading text-lg font-medium"},ea={class:"theme-muted-text text-xs"},ta={class:"settings-form-card space-y-1 px-3 py-3"},sa={class:"theme-heading text-lg font-medium"},na={class:"theme-muted-text text-xs"},aa={class:"settings-form-card space-y-1 px-3 py-3"},ia={class:"theme-heading text-lg font-medium"},la={class:"theme-muted-text text-xs"},oa={key:2,class:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3"},ra={class:"settings-form-card space-y-1 px-3 py-3"},ca={class:"theme-heading text-lg font-medium"},ua={class:"theme-muted-text text-xs"},da={class:"settings-form-card space-y-1 px-3 py-3"},ma={class:"theme-heading text-lg font-medium"},ga={class:"theme-muted-text text-xs"},ha={class:"settings-form-card space-y-1 px-3 py-3"},va={class:"theme-heading text-sm font-medium"},ya={class:"theme-muted-text text-xs"},xa={class:"grid gap-4 lg:grid-cols-2"},pa={class:"settings-form-card space-y-3 px-3 py-3"},_a={class:"theme-heading text-sm font-medium"},fa={class:"space-y-2 text-xs"},ba={class:"flex items-center justify-between gap-3"},Da={class:"truncate text-right text-[var(--theme-textPrimary)]"},ka={class:"flex items-center justify-between gap-3"},Ca={class:"text-right text-[var(--theme-textPrimary)]"},wa={class:"flex items-center justify-between gap-3"},Ra={class:"text-right text-[var(--theme-textPrimary)]"},Ta={class:"flex items-center justify-between gap-3"},Sa={class:"text-right text-[var(--theme-textPrimary)]"},Ma={class:"flex items-center justify-between gap-3"},Ea={class:"text-right text-[var(--theme-textPrimary)]"},Pa={class:"settings-form-card space-y-3 px-3 py-3"},$a={class:"theme-heading text-sm font-medium"},Ua={class:"space-y-2 text-xs"},Ba={class:"theme-muted-text"},ja={class:"text-[var(--theme-textPrimary)]"},Na={key:3,class:"settings-form-card space-y-3 px-3 py-3"},Fa={class:"theme-heading text-sm font-medium"},La={class:"grid gap-2 sm:grid-cols-2 xl:grid-cols-3 text-xs"},Ia={class:"theme-muted-text"},qa={class:"text-[var(--theme-textPrimary)]"},Va={key:4,class:"settings-form-card space-y-2 px-3 py-3"},Aa={class:"theme-heading text-sm font-medium"},za={class:"theme-muted-text text-xs leading-5"},Ha={class:"theme-muted-text text-xs leading-5"},Oa={key:3,class:"space-y-4"},Wa={class:"theme-heading text-base font-medium"},Ja={class:"theme-muted-text mt-1 text-xs leading-5"},Ka={class:"settings-section-card px-4 py-4"},Ga={class:"flex items-center justify-between gap-3"},Qa={class:"theme-heading text-sm font-medium"},Xa={class:"theme-muted-text mt-1 text-xs leading-5"},Ya={class:"theme-badge-strong rounded-sm border border-dashed px-2.5 py-1 text-xs font-medium"},si={__name:"WorkbenchSettingsDialog",props:{open:{type:Boolean,default:!1}},emits:["close"],setup(U,{emit:O}){const W=U,ae=O,{locale:T,localeOptions:ge,setLocale:he,t:s}=Ye(),b=m(""),F=m(!1),x=m(""),y=m(!1),k=m(!1),C=m(!1),_=m(""),w=m(""),ie=m(!1),L=m(!1),I=m(""),J=m(""),q=m(!1),K=m(""),R=m(null),u=m(null),f=m(!1),V=pe({runnerMaxConcurrentRuns:!1}),G=m(!1),le=m(!1),oe=m(!1),re=m(!1),r=pe({enabled:!1,relayUrl:"",deviceId:"",deviceToken:""}),A=pe({runnerMaxConcurrentRuns:3}),S=m("theme");let B=null,j=null,ce=null;const Ze=v(()=>[{id:"theme",label:s("theme.title"),description:s("theme.sectionDescription"),icon:qt},{id:"relay",label:s("settingsDialog.relay.sectionLabel"),description:s("settingsDialog.relay.sectionDescription"),icon:Ge},{id:"system",label:s("settingsDialog.system.sectionLabel"),description:s("settingsDialog.system.sectionDescription"),icon:Ke},{id:"about",label:s("settingsDialog.about.sectionLabel"),description:s("settingsDialog.about.sectionDescription"),icon:Lt}]);function et(t=null,n=""){const l=String((t==null?void 0:t.messageKey)||"").trim();if(l){const g=s(l);if(g&&g!==l)return g}return String((t==null?void 0:t.message)||"").trim()||(n?s(n):"")}function ue(t="",n=""){const l=String(t||"").trim();if(l){const g=`settingsDialog.relay.reason.${l}`,D=s(g);if(D!==g)return D}return String(n||"").trim()||s("common.notAvailable")}function tt(t=null){const n=String((t==null?void 0:t.type)||"").trim()||"unknown",l=`settingsDialog.relay.event.${n}`,g=s(l);return g!==l?g:n}function st(t=null){const n=String((t==null?void 0:t.lastErrorKey)||"").trim(),l=t!=null&&t.lastErrorParams&&typeof t.lastErrorParams=="object"?t.lastErrorParams:{};return n==="connect_failed"?s("settingsDialog.relay.error.connect_failed"):n==="disconnected"?s("settingsDialog.relay.error.disconnected",{reason:ue(l.reasonCode,t==null?void 0:t.lastCloseReason)}):n==="rejected"?s("settingsDialog.relay.error.rejected",{reason:ue(l.reasonCode,t==null?void 0:t.lastCloseReason)}):n==="closed_with_code"?s("settingsDialog.relay.error.closedWithCode",{code:l.code||(t==null?void 0:t.lastCloseCode)||0}):String((t==null?void 0:t.lastError)||"").trim()}const nt=v(()=>{var t,n,l,g;return C.value?s("settingsDialog.relay.status.reconnecting"):k.value||G.value?s("settingsDialog.relay.status.saving"):y.value?s("settingsDialog.relay.status.loading"):(t=u.value)!=null&&t.reconnectPaused?s("settingsDialog.relay.status.paused"):(n=u.value)!=null&&n.connected?s("settingsDialog.relay.status.connected"):(((l=u.value)==null?void 0:l.enabled)??r.enabled)&&Number(((g=u.value)==null?void 0:g.nextReconnectDelayMs)||0)>0?s("settingsDialog.relay.status.waitingReconnect"):r.enabled?s("settingsDialog.relay.status.disconnected"):s("settingsDialog.relay.status.disabled")}),at=v(()=>{var t,n;return(t=u.value)!=null&&t.reconnectPaused?"theme-status-danger":(n=u.value)!=null&&n.connected?"theme-status-success":r.enabled?"theme-status-warning":"theme-status-neutral"}),it=v(()=>{var t,n,l;return!f.value&&!_.value&&!w.value&&!((t=u.value)!=null&&t.lastError)&&!((n=u.value)!=null&&n.lastCloseReason)&&!((l=u.value)!=null&&l.lastConnectedAt)}),lt=v(()=>{const t=r.deviceToken?`${"*".repeat(Math.max(0,r.deviceToken.length-4))}${r.deviceToken.slice(-4)}`:"";return JSON.stringify({generatedAt:new Date().toISOString(),source:"local-settings",config:{enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceTokenMasked:t,managedByEnv:f.value},status:u.value||null},null,2)}),N=v(()=>{var t,n;return((n=(t=R.value)==null?void 0:t.runner)==null?void 0:n.runner)||null}),Q=v(()=>{var t,n;return!!((n=(t=R.value)==null?void 0:t.runner)!=null&&n.ok&&N.value)}),p=v(()=>{var t;return((t=N.value)==null?void 0:t.metrics)||null}),fe=v(()=>{var t;return((t=R.value)==null?void 0:t.recovery)||null}),be=v(()=>{var t;return((t=R.value)==null?void 0:t.maintenance)||null}),ot=v(()=>{var t;return((t=R.value)==null?void 0:t.gitDiffWorker)||null}),rt=v(()=>JSON.stringify({generatedAt:new Date().toISOString(),source:"local-settings",config:{runner:{maxConcurrentRuns:A.runnerMaxConcurrentRuns,managedByEnv:V.runnerMaxConcurrentRuns}},diagnostics:R.value||null},null,2));function X(t){const n=String(t||"").trim();if(!n)return s("common.notAvailable");const l=new Date(n);return Number.isNaN(l.getTime())?n:Et(l.toISOString(),{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}const ct=v(()=>{var t,n,l,g,D,M,E,P;return[{key:"queued_cancelled",label:s("settingsDialog.system.stopReasons.queued_cancelled"),value:Math.max(0,Number((n=(t=p.value)==null?void 0:t.stopReasons)==null?void 0:n.queued_cancelled)||0)},{key:"user_requested",label:s("settingsDialog.system.stopReasons.user_requested"),value:Math.max(0,Number((g=(l=p.value)==null?void 0:l.stopReasons)==null?void 0:g.user_requested)||0)},{key:"user_requested_after_error",label:s("settingsDialog.system.stopReasons.user_requested_after_error"),value:Math.max(0,Number((M=(D=p.value)==null?void 0:D.stopReasons)==null?void 0:M.user_requested_after_error)||0)},{key:"stop_timeout",label:s("settingsDialog.system.stopReasons.stop_timeout"),value:Math.max(0,Number((P=(E=p.value)==null?void 0:E.stopReasons)==null?void 0:P.stop_timeout)||0)}]}),ut=v(()=>{var t,n,l,g,D,M,E,P,Z,ee;return[{key:"runner_timeout_without_stop_request",label:s("settingsDialog.system.stopTimeoutPhases.runner_timeout_without_stop_request"),value:Math.max(0,Number((n=(t=p.value)==null?void 0:t.stopTimeoutPhases)==null?void 0:n.runner_timeout_without_stop_request)||0)},{key:"runner_timeout_before_cancel",label:s("settingsDialog.system.stopTimeoutPhases.runner_timeout_before_cancel"),value:Math.max(0,Number((g=(l=p.value)==null?void 0:l.stopTimeoutPhases)==null?void 0:g.runner_timeout_before_cancel)||0)},{key:"cli_not_exiting",label:s("settingsDialog.system.stopTimeoutPhases.cli_not_exiting"),value:Math.max(0,Number((M=(D=p.value)==null?void 0:D.stopTimeoutPhases)==null?void 0:M.cli_not_exiting)||0)},{key:"os_kill_slow",label:s("settingsDialog.system.stopTimeoutPhases.os_kill_slow"),value:Math.max(0,Number((P=(E=p.value)==null?void 0:E.stopTimeoutPhases)==null?void 0:P.os_kill_slow)||0)},{key:"runner_finalize_after_exit",label:s("settingsDialog.system.stopTimeoutPhases.runner_finalize_after_exit"),value:Math.max(0,Number((ee=(Z=p.value)==null?void 0:Z.stopTimeoutPhases)==null?void 0:ee.runner_finalize_after_exit)||0)}]}),dt=v(()=>ge.value.map(t=>({value:t.value,label:t.value==="zh-CN"?s("locale.zhHans"):s("locale.enUs"),englishLabel:t.englishLabel})));async function mt(){F.value=!0,x.value="";try{const t=await It(),n=String((t==null?void 0:t.version)||"").trim();b.value=n,n||(x.value=s("settingsDialog.about.versionPending"))}catch(t){b.value="",x.value=(t==null?void 0:t.message)||s("settingsDialog.about.versionLoadFailed")}finally{F.value=!1}}function ve(t={}){r.enabled=!!(t!=null&&t.enabled),r.relayUrl=String((t==null?void 0:t.relayUrl)||""),r.deviceId=String((t==null?void 0:t.deviceId)||""),r.deviceToken=String((t==null?void 0:t.deviceToken)||"")}function De(t={}){var n;A.runnerMaxConcurrentRuns=Math.max(1,Number((n=t==null?void 0:t.runner)==null?void 0:n.maxConcurrentRuns)||3)}async function ke(){y.value=!0,_.value="",w.value="";try{const t=await Vt();ve((t==null?void 0:t.config)||{}),f.value=!!(t!=null&&t.managedByEnv),u.value=(t==null?void 0:t.relay)||null}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayConfigLoadFailed"),u.value=null}finally{y.value=!1}}async function gt(){var t,n;ie.value=!0,I.value="",J.value="";try{const l=await zt();De((l==null?void 0:l.config)||{}),V.runnerMaxConcurrentRuns=!!((n=(t=l==null?void 0:l.managedByEnv)==null?void 0:t.runner)!=null&&n.maxConcurrentRuns),Y()}catch(l){I.value=(l==null?void 0:l.message)||s("settingsDialog.system.systemConfigLoadFailed")}finally{ie.value=!1}}async function Y(){q.value=!0,K.value="";try{R.value=await Ot()}catch(t){K.value=(t==null?void 0:t.message)||s("settingsDialog.system.systemDiagnosticsLoadFailed")}finally{q.value=!1}}async function ht(){k.value=!0,_.value="",w.value="";try{const t=await Qe({enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceToken:r.deviceToken});ve((t==null?void 0:t.config)||{}),f.value=!!(t!=null&&t.managedByEnv),u.value=(t==null?void 0:t.relay)||null,w.value=r.enabled?s("settingsDialog.relay.relayConfigSavedEnabled"):s("settingsDialog.relay.relayConfigSavedDisabled")}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayConfigSaveFailed")}finally{k.value=!1}}async function vt(){C.value=!0,_.value="",w.value="";try{const t=await At();u.value=(t==null?void 0:t.relay)||null,w.value=s("settingsDialog.relay.relayReconnectTriggered"),setTimeout(()=>{ke()},1200)}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayReconnectFailed")}finally{C.value=!1}}async function yt(){var t,n;L.value=!0,I.value="",J.value="";try{const l=await Ht({runner:{maxConcurrentRuns:A.runnerMaxConcurrentRuns}});De((l==null?void 0:l.config)||{}),V.runnerMaxConcurrentRuns=!!((n=(t=l==null?void 0:l.managedByEnv)==null?void 0:t.runner)!=null&&n.maxConcurrentRuns),J.value=s("settingsDialog.system.systemConfigSaved"),Y()}catch(l){I.value=(l==null?void 0:l.message)||s("settingsDialog.system.systemConfigSaveFailed")}finally{L.value=!1}}function xt(){return!!(String(r.relayUrl||"").trim()&&String(r.deviceId||"").trim()&&String(r.deviceToken||"").trim())}async function pt(){var t;if(!f.value){if(_.value="",w.value="",r.enabled&&!xt()){r.enabled=!1,_.value=s("settingsDialog.relay.relayFieldsRequired");return}G.value=!0;try{const n=await Qe({enabled:r.enabled,relayUrl:r.relayUrl,deviceId:r.deviceId,deviceToken:r.deviceToken});ve((n==null?void 0:n.config)||{}),f.value=!!(n!=null&&n.managedByEnv),u.value=(n==null?void 0:n.relay)||null,w.value=r.enabled?s("settingsDialog.relay.relayEnabledSaved"):s("settingsDialog.relay.relayConfigSavedDisabled")}catch(n){r.enabled=!!((t=u.value)!=null&&t.enabled),_.value=(n==null?void 0:n.message)||s("settingsDialog.relay.relayToggleFailed")}finally{G.value=!1}}}async function Ce(t){var l;if((l=navigator.clipboard)!=null&&l.writeText&&window.isSecureContext){await navigator.clipboard.writeText(t);return}const n=document.createElement("textarea");n.value=t,n.setAttribute("readonly","true"),n.style.position="fixed",n.style.opacity="0",n.style.pointerEvents="none",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n)}async function _t(){try{await Ce(lt.value),oe.value=!0,B&&clearTimeout(B),B=setTimeout(()=>{oe.value=!1,B=null},2e3)}catch(t){_.value=(t==null?void 0:t.message)||s("settingsDialog.relay.relayDiagnosticsCopyFailed")}}async function ft(){try{await Ce(rt.value),re.value=!0,j&&clearTimeout(j),j=setTimeout(()=>{re.value=!1,j=null},2e3)}catch(t){K.value=(t==null?void 0:t.message)||s("settingsDialog.system.systemDiagnosticsCopyFailed")}}function bt(t){he(t)}function ye(){ce&&(clearInterval(ce),ce=null)}function Dt(){ye(),!(!W.open||S.value!=="system")&&(Y(),ce=setInterval(()=>{Y()},5e3))}return Je(()=>W.open,t=>{if(t){S.value="theme",mt(),ke(),gt();return}},{immediate:!0}),Je([()=>W.open,S],([t,n])=>{if(t&&n==="system"){Dt();return}ye()},{immediate:!0}),Tt(()=>{B&&(clearTimeout(B),B=null),j&&(clearTimeout(j),j=null),ye()}),(t,n)=>(o(),$(Ft,{open:U.open,"backdrop-class":"z-[70] items-end justify-center px-0 py-0 sm:items-center sm:px-4 sm:py-6","panel-class":"settings-dialog-panel h-full max-w-5xl sm:h-[42rem] sm:max-h-[88vh]","header-class":"settings-dialog-header px-5 py-4","body-class":"settings-dialog-body min-h-0 flex flex-1 flex-col sm:flex-row",onClose:n[7]||(n[7]=l=>ae("close"))},{title:de(()=>[e("div",os,[z(i(Nt),{class:"h-4 w-4"}),e("span",null,a(i(s)("common.settings")),1)])]),default:de(()=>{var l,g,D,M,E,P,Z,ee,we,Re,Te,Se,Me,Ee,Pe,$e,Ue,Be,je,Ne,Fe,Le,Ie,qe,Ve,Ae,ze,He,Oe,We;return[z($t,{modelValue:S.value,"onUpdate:modelValue":n[0]||(n[0]=d=>S.value=d),sections:Ze.value},null,8,["modelValue","sections"]),e("div",rs,[S.value==="theme"?(o(),c("section",cs,[e("div",null,[e("div",us,a(i(s)("theme.title")),1),e("p",ds,a(i(s)("theme.sectionDescription")),1)]),e("section",ms,[z(ls)]),e("section",gs,[e("div",null,[e("div",hs,a(i(s)("locale.title")),1),e("p",vs,a(i(s)("locale.description")),1)]),e("label",ys,[e("span",xs,a(i(s)("locale.field")),1),z(Ut,{"model-value":i(T),options:dt.value,"get-option-value":d=>d.value,"onUpdate:modelValue":bt},{trigger:de(({selectedOption:d})=>[e("div",ps,a((d==null?void 0:d.label)||i(s)("common.select")),1)]),option:de(({option:d,selected:kt,select:Ct})=>[e("button",{type:"button",class:"workbench-select-option theme-filter-idle w-full rounded-sm border border-dashed px-3 py-2 text-left text-sm",onClick:Za=>Ct()},[e("div",fs,[e("div",bs,[e("div",Ds,a(d.label),1),e("div",ks,a(d.englishLabel),1)]),kt?(o(),c("span",Cs,a(i(s)("common.enabled")),1)):h("",!0)])],8,_s)]),_:1},8,["model-value","options","get-option-value"])]),e("p",ws,a(i(s)("locale.immediateHint")),1)])])):S.value==="relay"?(o(),c("section",Rs,[e("div",Ts,[e("div",null,[e("div",Ss,[z(i(Ge),{class:"h-4 w-4"}),e("span",null,a(i(s)("settingsDialog.relay.title")),1)])]),e("span",{class:Xe(["rounded-sm border border-dashed px-2.5 py-1 text-xs font-medium",at.value])},a(nt.value),3)]),e("section",Ms,[e("label",Es,[e("div",null,[e("div",Ps,a(i(s)("settingsDialog.relay.enableTitle")),1),e("p",$s,a(i(s)("settingsDialog.relay.enableDescription")),1)]),te(e("input",{"onUpdate:modelValue":n[1]||(n[1]=d=>r.enabled=d),type:"checkbox",class:"h-4 w-4",disabled:f.value,onChange:pt},null,40,Us),[[St,r.enabled]])]),e("div",Bs,[e("label",js,[e("span",Ns,a(i(s)("settingsDialog.relay.relayUrl")),1),te(e("input",{"onUpdate:modelValue":n[2]||(n[2]=d=>r.relayUrl=d),type:"text",placeholder:"https://user1.promptx.example.com",class:"tool-input",disabled:f.value},null,8,Fs),[[xe,r.relayUrl]])]),e("label",Ls,[e("span",Is,a(i(s)("settingsDialog.relay.deviceId")),1),te(e("input",{"onUpdate:modelValue":n[3]||(n[3]=d=>r.deviceId=d),type:"text",placeholder:"my-macbook",class:"tool-input",disabled:f.value},null,8,qs),[[xe,r.deviceId]])]),e("label",Vs,[e("span",As,a(i(s)("settingsDialog.relay.deviceToken")),1),e("div",zs,[te(e("input",{"onUpdate:modelValue":n[4]||(n[4]=d=>r.deviceToken=d),type:le.value?"text":"password",placeholder:i(s)("settingsDialog.relay.deviceTokenPlaceholder"),class:"tool-input pr-10",disabled:f.value},null,8,Hs),[[Mt,r.deviceToken]]),e("button",{type:"button",class:"theme-icon-button absolute inset-y-1 right-1 flex h-auto w-8 items-center justify-center",disabled:f.value,onClick:n[5]||(n[5]=d=>le.value=!le.value)},[le.value?(o(),$(i(jt),{key:1,class:"h-4 w-4"})):(o(),$(i(Bt),{key:0,class:"h-4 w-4"}))],8,Os)])])]),e("div",Ws,[e("div",Js,[(l=u.value)!=null&&l.reconnectPausedReason?(o(),c("p",Ks,a(i(s)("settingsDialog.relay.pausedReconnect",{reason:ue(u.value.reconnectPausedReasonCode,u.value.reconnectPausedReason)})),1)):h("",!0),f.value?(o(),c("p",Gs,a(i(s)("settingsDialog.relay.managedByEnv")),1)):h("",!0),_.value?(o(),c("p",Qs,a(_.value),1)):w.value?(o(),c("p",Xs,a(w.value),1)):(g=u.value)!=null&&g.lastError?(o(),c("p",Ys,a(i(s)("settingsDialog.relay.lastError",{value:st(u.value)})),1)):(D=u.value)!=null&&D.lastCloseReason?(o(),c("p",Zs,a(i(s)("settingsDialog.relay.lastClosed",{reason:ue(u.value.lastCloseReasonCode,u.value.lastCloseReason),code:u.value.lastCloseCode})),1)):(M=u.value)!=null&&M.lastConnectedAt?(o(),c("p",en,a(i(s)("settingsDialog.relay.lastConnected",{value:X(u.value.lastConnectedAt)})),1)):h("",!0),(P=(E=u.value)==null?void 0:E.recentEvents)!=null&&P.length?(o(),c("p",tn,a(i(s)("settingsDialog.relay.recentEvent",{value:tt(u.value.recentEvents[0])})),1)):h("",!0),oe.value?(o(),c("p",sn,a(i(s)("settingsDialog.relay.copied")),1)):h("",!0),it.value?(o(),c("p",nn,a(i(s)("settingsDialog.relay.defaultHint")),1)):h("",!0)]),e("div",an,[e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||k.value||G.value||C.value||!(((Z=u.value)==null?void 0:Z.enabled)??r.enabled),onClick:vt},[C.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(C.value?i(s)("settingsDialog.relay.reconnecting"):i(s)("settingsDialog.relay.reconnectNow")),1)],8,ln),e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||C.value,onClick:_t},[e("span",null,a(oe.value?i(s)("settingsDialog.relay.diagnosticsCopied"):i(s)("settingsDialog.relay.copyDiagnostics")),1)],8,on),e("button",{type:"button",class:"tool-button tool-button-primary inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:y.value||k.value||G.value||C.value||f.value,onClick:ht},[k.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(k.value?i(s)("common.saving"):i(s)("settingsDialog.relay.saveConfig")),1)],8,rn)])])])])):S.value==="system"?(o(),c("section",cn,[e("div",null,[e("div",un,[z(i(Ke),{class:"h-4 w-4"}),e("span",null,a(i(s)("settingsDialog.system.title")),1)]),e("p",dn,a(i(s)("settingsDialog.system.intro")),1)]),e("section",mn,[e("label",gn,[e("span",hn,a(i(s)("settingsDialog.system.maxConcurrentRuns")),1),te(e("input",{"onUpdate:modelValue":n[6]||(n[6]=d=>A.runnerMaxConcurrentRuns=d),type:"number",min:"1",max:"16",step:"1",class:"tool-input",disabled:V.runnerMaxConcurrentRuns||ie.value||L.value},null,8,vn),[[xe,A.runnerMaxConcurrentRuns,void 0,{number:!0}]]),e("p",yn,a(i(s)("settingsDialog.system.maxConcurrentRunsHint")),1)]),e("div",xn,[e("div",pn,[V.runnerMaxConcurrentRuns?(o(),c("p",_n,a(i(s)("settingsDialog.system.managedByEnv")),1)):I.value?(o(),c("p",fn,a(I.value),1)):J.value?(o(),c("p",bn,a(J.value),1)):(o(),c("p",Dn,a(i(s)("settingsDialog.system.diagnosticsHint")),1))]),e("div",kn,[e("button",{type:"button",class:"tool-button tool-button-primary inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:V.runnerMaxConcurrentRuns||ie.value||L.value,onClick:yt},[L.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(L.value?i(s)("common.saving"):i(s)("settingsDialog.system.saveConfig")),1)],8,Cn)])])]),e("section",wn,[e("div",Rn,[e("div",null,[e("div",Tn,a(i(s)("settingsDialog.system.runtimeDiagnostics")),1),e("p",Sn,a(i(s)("settingsDialog.system.runtimeDiagnosticsHint")),1)]),e("div",Mn,[e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",disabled:q.value,onClick:Y},[q.value?(o(),$(i(me),{key:0,class:"h-4 w-4 animate-spin"})):h("",!0),e("span",null,a(q.value?i(s)("settingsDialog.system.refreshingDiagnostics"):i(s)("settingsDialog.system.refreshDiagnostics")),1)],8,En),e("button",{type:"button",class:"tool-button inline-flex items-center gap-2 px-3 py-2 text-xs",onClick:ft},[e("span",null,a(re.value?i(s)("settingsDialog.system.diagnosticsCopied"):i(s)("settingsDialog.system.copyDiagnostics")),1)])])]),e("div",Pn,[K.value?(o(),c("p",$n,a(K.value),1)):re.value?(o(),c("p",Un,a(i(s)("settingsDialog.system.diagnosticsCopiedHint")),1)):(o(),c("p",Bn,a(i(s)("settingsDialog.system.diagnosticsHint")),1))]),Q.value?(o(),c("div",jn,[e("div",Nn,[n[8]||(n[8]=e("div",{class:"theme-muted-text text-xs"},"active",-1)),e("div",Fn,a(((ee=N.value)==null?void 0:ee.activeRunCount)||0),1),e("p",Ln,a(i(s)("settingsDialog.system.active")),1)]),e("div",In,[n[9]||(n[9]=e("div",{class:"theme-muted-text text-xs"},"tracked",-1)),e("div",qn,a(((we=N.value)==null?void 0:we.trackedRunCount)||0),1),e("p",Vn,a(i(s)("settingsDialog.system.tracked")),1)]),e("div",An,[n[10]||(n[10]=e("div",{class:"theme-muted-text text-xs"},"queued",-1)),e("div",zn,a(((Re=N.value)==null?void 0:Re.queuedRunCount)||0),1),e("p",Hn,a(i(s)("settingsDialog.system.queued")),1)]),e("div",On,[n[11]||(n[11]=e("div",{class:"theme-muted-text text-xs"},"maxConcurrent",-1)),e("div",Wn,a(((Se=(Te=N.value)==null?void 0:Te.config)==null?void 0:Se.maxConcurrentRuns)||A.runnerMaxConcurrentRuns),1),e("p",Jn,a(i(s)("settingsDialog.system.maxConcurrent")),1)])])):h("",!0),Q.value?(o(),c("div",Kn,[e("div",Gn,[n[12]||(n[12]=e("div",{class:"theme-muted-text text-xs"},"completed",-1)),e("div",Qn,a(((Me=p.value)==null?void 0:Me.totalCompleted)||0),1),e("p",Xn,a(i(s)("settingsDialog.system.completed")),1)]),e("div",Yn,[n[13]||(n[13]=e("div",{class:"theme-muted-text text-xs"},"stopped",-1)),e("div",Zn,a(((Ee=p.value)==null?void 0:Ee.totalStopped)||0),1),e("p",ea,a(i(s)("settingsDialog.system.stopped")),1)]),e("div",ta,[n[14]||(n[14]=e("div",{class:"theme-muted-text text-xs"},"error",-1)),e("div",sa,a(((Pe=p.value)==null?void 0:Pe.totalErrored)||0),1),e("p",na,a(i(s)("settingsDialog.system.error")),1)]),e("div",aa,[n[15]||(n[15]=e("div",{class:"theme-muted-text text-xs"},"stop_timeout",-1)),e("div",ia,a((($e=p.value)==null?void 0:$e.totalStopTimeout)||0),1),e("p",la,a(i(s)("settingsDialog.system.stopTimeout")),1)])])):h("",!0),Q.value?(o(),c("div",oa,[e("div",ra,[n[16]||(n[16]=e("div",{class:"theme-muted-text text-xs"},"event flush failures",-1)),e("div",ca,a(((Ue=p.value)==null?void 0:Ue.eventFlushFailureCount)||0),1),e("p",ua,a(i(s)("settingsDialog.system.eventWriteFailures")),1)]),e("div",da,[n[17]||(n[17]=e("div",{class:"theme-muted-text text-xs"},"recovered runs",-1)),e("div",ma,a(((je=(Be=fe.value)==null?void 0:Be.metrics)==null?void 0:je.totalRecovered)||0),1),e("p",ga,a(i(s)("settingsDialog.system.recoveredRuns")),1)]),e("div",ha,[n[18]||(n[18]=e("div",{class:"theme-muted-text text-xs"},"last cleanup",-1)),e("div",va,a(X((Fe=(Ne=be.value)==null?void 0:Ne.lastCleanup)==null?void 0:Fe.finishedAt)),1),e("p",ya,a(i(s)("settingsDialog.system.lastMaintenanceAt")),1)])])):h("",!0),e("div",xa,[e("div",pa,[e("div",_a,a(i(s)("settingsDialog.system.baseStatus")),1),e("div",fa,[e("div",ba,[n[19]||(n[19]=e("span",{class:"theme-muted-text"},"runner baseUrl",-1)),e("span",Da,a(((Ie=(Le=R.value)==null?void 0:Le.runner)==null?void 0:Ie.baseUrl)||"-"),1)]),e("div",ka,[n[20]||(n[20]=e("span",{class:"theme-muted-text"},"runner startedAt",-1)),e("span",Ca,a(X((qe=N.value)==null?void 0:qe.startedAt)),1)]),e("div",wa,[n[21]||(n[21]=e("span",{class:"theme-muted-text"},"last sweep",-1)),e("span",Ra,a(X((Ae=(Ve=fe.value)==null?void 0:Ve.metrics)==null?void 0:Ae.lastSweepFinishedAt)),1)]),e("div",Ta,[n[22]||(n[22]=e("span",{class:"theme-muted-text"},"git diff worker",-1)),e("span",Sa,a(ot.value?i(s)("settingsDialog.system.available"):i(s)("settingsDialog.system.unknown")),1)]),e("div",Ma,[n[23]||(n[23]=e("span",{class:"theme-muted-text"},"db vacuum",-1)),e("span",Ea,a(X((ze=be.value)==null?void 0:ze.lastVacuumAt)),1)])])]),e("div",Pa,[e("div",$a,a(i(s)("settingsDialog.system.stopReasonTitle")),1),e("div",Ua,[(o(!0),c(se,null,ne(ct.value,d=>(o(),c("div",{key:d.key,class:"flex items-center justify-between gap-3"},[e("span",Ba,a(d.label),1),e("span",ja,a(d.value),1)]))),128))])])]),Q.value?(o(),c("div",Na,[e("div",Fa,a(i(s)("settingsDialog.system.stopTimeoutPhaseTitle")),1),e("div",La,[(o(!0),c(se,null,ne(ut.value,d=>(o(),c("div",{key:d.key,class:"flex items-center justify-between gap-3 rounded-sm border border-dashed border-[var(--theme-borderMuted)] px-2.5 py-2"},[e("span",Ia,a(d.label),1),e("span",qa,a(d.value),1)]))),128))])])):h("",!0),!Q.value&&!q.value?(o(),c("div",Va,[e("div",Aa,a(i(s)("settingsDialog.system.runnerUnavailable")),1),e("p",za,a(et((He=R.value)==null?void 0:He.runner,"settingsDialog.system.runnerUnavailableDescription")),1),e("p",Ha," baseUrl: "+a(((We=(Oe=R.value)==null?void 0:Oe.runner)==null?void 0:We.baseUrl)||"-"),1)])):h("",!0)])])):(o(),c("section",Oa,[e("div",null,[e("div",Wa,a(i(s)("settingsDialog.about.title")),1),e("p",Ja,a(i(s)("settingsDialog.about.intro")),1)]),e("section",Ka,[e("div",Ga,[e("div",null,[e("div",Qa,a(i(s)("settingsDialog.about.versionTitle")),1),e("p",Xa,a(x.value||i(s)("settingsDialog.about.versionDescription")),1)]),e("span",Ya,a(F.value?i(s)("common.loading"):b.value?`v${b.value}`:i(s)("common.unavailable")),1)])])]))])]}),_:1},8,["open"]))}};export{si as default};
|