@linxin666/dsh-client-ui-task-board 0.1.18 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +1 -1
- package/README.zh.md +1 -1
- package/lib/client.js +78 -50
- package/lib/client.js.map +1 -1
- package/lib/index.js +43 -1
- package/lib/types/client/PluginSettingsCard.d.ts +1 -1
- package/lib/types/client/TaskBoardSettingsCard.d.ts +5 -0
- package/lib/types/client/board/status-key.d.ts +4 -0
- package/lib/types/client/settings-form.d.ts +8 -0
- package/lib/types/core/scheduler.d.ts +3 -0
- package/lib/types/core/tasks.d.ts +3 -1
- package/lib/types/index.d.ts +3 -1
- package/lib/types/mount-once.d.ts +24 -0
- package/package.json +1 -1
- package/src/client/TaskBoardSettingsCard.tsx +8 -0
- package/src/client/board/TaskBoard.tsx +10 -16
- package/src/client/board/TaskDetail.tsx +1 -9
- package/src/client/board/status-key.ts +11 -0
- package/src/client/board.module.css +68 -1
- package/src/client/index.ts +13 -7
- package/src/client/locales.ts +1 -1
- package/src/client/settings-form.ts +15 -1
- package/src/core/controller.ts +4 -0
- package/src/core/scheduler.ts +12 -2
- package/src/core/store.ts +1 -6
- package/src/core/tasks.ts +1 -1
- package/src/core/use-cases/task-update.ts +1 -6
- package/src/index.ts +4 -1
- package/src/mount-once.ts +48 -0
package/README.i18n.yaml
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# node scripts/verify-docs.mjs --write <dir>
|
|
5
5
|
README.md: ed814f18cf9668624c70d26ef8190d378aaf62f1
|
|
6
|
-
README.zh.md:
|
|
6
|
+
README.zh.md: 093c361adb207e3c307b72d1ce5ecabfc62b4af0
|
package/README.zh.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
## 功能
|
|
12
12
|
|
|
13
13
|
- **侧边栏入口**:侧边栏列(旧版 `[data-pane="sidebar"]`,DSH 0.1.0-rc.6 AppFrame 布局为 `[class*="sidebarCol"]`)内、新会话按钮下方注入「任务看板」入口行(宽栏显示图标+文字,折叠 rail 显示纯图标,随 DSH 皮肤 token 自适应)。
|
|
14
|
-
- **多列看板**:待规划 / 待办 / 进行中 / 已完成 / 已失败 五列;卡片显示标题、描述、状态、更新时间、执行次数;顶部支持搜索过滤、归档视图(已完成/已失败任务可归档,归档后移出看板,可随时恢复,执行记录与会话 transcript
|
|
14
|
+
- **多列看板**:待规划 / 待办 / 进行中 / 已完成 / 已失败 五列;卡片显示标题、描述、状态、更新时间、执行次数;顶部支持搜索过滤、归档视图(已完成/已失败任务可归档,归档后移出看板,可随时恢复,执行记录与会话 transcript 保留可追溯)、新建任务、返回会话。
|
|
15
15
|
- **任务详情**:点卡片打开详情(标题/描述/执行 Prompt/执行记录),**不会**一点就执行;详情内提供「执行 / 重新执行」「删除(带确认)」「查看会话(跳转到执行 transcript)」以及手动移到待规划/待办。
|
|
16
16
|
- **真实执行**:点「执行」后,插件通过客户端 runtime 连接工作区会话(`workspaces.connectWorkspace`,空白会话复用或 host 新建),把任务标题设为会话名,以任务 Prompt 调用 `session.prompt([{ type: 'text', text }], 'queue')` 驱动真实 agent;随后订阅该会话快照,轮次真实结束后把卡片置为 已完成/已失败 并记录执行结果。执行会话会出现在会话列表,可点进对话查看真实 transcript。
|
|
17
17
|
- **任务级执行目标**:任务可钉住「在哪跑、怎么跑」——**工作区**(执行会话落在指定工作区)、**模式**(会话以指定 agent 预设组合,趁会话仍为空白时走 `agentPresets.select` 切换)、**权限**(经 `/permission <id>` 斜杠命令应用的沙箱预设:read-only / workspace-write / danger-full-access)。留空即回退运行时默认(最近工作区 / 部署预设 / 会话默认)。钉不住的目标会在发 Prompt **之前**失败,任务绝不会悄悄按没要求过的设置运行。
|
package/lib/client.js
CHANGED
|
@@ -59,7 +59,7 @@ window.__ModuleLoader__.load({
|
|
|
59
59
|
return typeof value === "string" && ALL_STATUSES.includes(value);
|
|
60
60
|
}
|
|
61
61
|
/** Normalize one optional execution-target string: trim; blank collapses to undefined. */
|
|
62
|
-
function normalizeTargetId
|
|
62
|
+
function normalizeTargetId(value) {
|
|
63
63
|
const trimmed = value?.trim();
|
|
64
64
|
return trimmed === void 0 || trimmed === "" ? void 0 : trimmed;
|
|
65
65
|
}
|
|
@@ -74,8 +74,8 @@ window.__ModuleLoader__.load({
|
|
|
74
74
|
createdAt: now,
|
|
75
75
|
updatedAt: now,
|
|
76
76
|
executions: [],
|
|
77
|
-
workspaceId: normalizeTargetId
|
|
78
|
-
mode: normalizeTargetId
|
|
77
|
+
workspaceId: normalizeTargetId(input.workspaceId),
|
|
78
|
+
mode: normalizeTargetId(input.mode),
|
|
79
79
|
permission: isTaskPermission(input.permission) ? input.permission : void 0
|
|
80
80
|
};
|
|
81
81
|
}
|
|
@@ -425,10 +425,6 @@ window.__ModuleLoader__.load({
|
|
|
425
425
|
* back to the runtime default); an unknown permission string is ignored so
|
|
426
426
|
* stale UI can never persist a value the execution service rejects.
|
|
427
427
|
*/
|
|
428
|
-
/** Collapse a blank target string to undefined (clears the pin). */
|
|
429
|
-
function normalizeTargetId$1(value) {
|
|
430
|
-
return value !== void 0 && value.trim() === "" ? void 0 : value;
|
|
431
|
-
}
|
|
432
428
|
/** Keep an unknown permission string from entering the ledger. */
|
|
433
429
|
function normalizePermission(current, value) {
|
|
434
430
|
if (value === void 0) return void 0;
|
|
@@ -445,8 +441,8 @@ window.__ModuleLoader__.load({
|
|
|
445
441
|
function applyUpdateTask(tasks, id, patch, now) {
|
|
446
442
|
return tasks.map((task) => {
|
|
447
443
|
if (task.id !== id) return task;
|
|
448
|
-
const workspaceId = "workspaceId" in patch ? normalizeTargetId
|
|
449
|
-
const mode = "mode" in patch ? normalizeTargetId
|
|
444
|
+
const workspaceId = "workspaceId" in patch ? normalizeTargetId(patch.workspaceId) : void 0;
|
|
445
|
+
const mode = "mode" in patch ? normalizeTargetId(patch.mode) : void 0;
|
|
450
446
|
const permission = "permission" in patch ? normalizePermission(task.permission, patch.permission) : void 0;
|
|
451
447
|
const next = {
|
|
452
448
|
...task,
|
|
@@ -467,6 +463,8 @@ window.__ModuleLoader__.load({
|
|
|
467
463
|
return snapshot.tasks.find((task) => task.id === snapshot.selectedTaskId);
|
|
468
464
|
}
|
|
469
465
|
function randomUuid() {
|
|
466
|
+
const randomUUID = globalThis.crypto?.randomUUID;
|
|
467
|
+
if (randomUUID !== void 0) return randomUUID.call(globalThis.crypto);
|
|
470
468
|
const bytes = globalThis.crypto?.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
|
|
471
469
|
if (bytes === void 0) return `t-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
472
470
|
bytes[6] = bytes[6] & 15 | 64;
|
|
@@ -1115,6 +1113,9 @@ window.__ModuleLoader__.load({
|
|
|
1115
1113
|
environmentListener;
|
|
1116
1114
|
disposed = false;
|
|
1117
1115
|
started = false;
|
|
1116
|
+
/** Cron expressions that matched no instant in the scan window, per task —
|
|
1117
|
+
* remembered so a never-matching rule is not re-scanned on every tick. */
|
|
1118
|
+
unmatchableRepair = /* @__PURE__ */ new Map();
|
|
1118
1119
|
/** @param deps - tasks/clock/trigger/apply faces (see {@link SchedulerDeps}). */
|
|
1119
1120
|
constructor(deps) {
|
|
1120
1121
|
this.deps = deps;
|
|
@@ -1176,8 +1177,13 @@ window.__ModuleLoader__.load({
|
|
|
1176
1177
|
const schedule = task.schedule;
|
|
1177
1178
|
if (schedule === void 0 || !schedule.enabled) continue;
|
|
1178
1179
|
if (schedule.nextRunAt === void 0) {
|
|
1180
|
+
if (this.unmatchableRepair.get(task.id) === schedule.cron) continue;
|
|
1179
1181
|
const repaired = nextRunAtMs(schedule.cron, now);
|
|
1180
|
-
if (repaired === void 0)
|
|
1182
|
+
if (repaired === void 0) {
|
|
1183
|
+
this.unmatchableRepair.set(task.id, schedule.cron);
|
|
1184
|
+
continue;
|
|
1185
|
+
}
|
|
1186
|
+
this.unmatchableRepair.delete(task.id);
|
|
1181
1187
|
this.deps.applySchedule(task.id, repaired, void 0);
|
|
1182
1188
|
continue;
|
|
1183
1189
|
}
|
|
@@ -1237,10 +1243,6 @@ window.__ModuleLoader__.load({
|
|
|
1237
1243
|
}
|
|
1238
1244
|
return true;
|
|
1239
1245
|
}
|
|
1240
|
-
/** Collapse a blank persisted target string to undefined (clears the pin). */
|
|
1241
|
-
function normalizeTargetId(value) {
|
|
1242
|
-
return value !== void 0 && value.trim() === "" ? void 0 : value;
|
|
1243
|
-
}
|
|
1244
1246
|
/** Normalize an unknown persisted status back into the closed status union. */
|
|
1245
1247
|
function normalizeStatus(status) {
|
|
1246
1248
|
return isTaskStatus(status) ? status : "todo";
|
|
@@ -1384,7 +1386,7 @@ window.__ModuleLoader__.load({
|
|
|
1384
1386
|
const zh = {
|
|
1385
1387
|
"entry.label": "任务看板",
|
|
1386
1388
|
"board.title": "任务看板",
|
|
1387
|
-
"board.close": "
|
|
1389
|
+
"board.close": "返回会话",
|
|
1388
1390
|
"board.new": "新建任务",
|
|
1389
1391
|
"board.search": "筛选任务…",
|
|
1390
1392
|
"board.empty": "这个状态还没有任务",
|
|
@@ -1614,7 +1616,7 @@ window.__ModuleLoader__.load({
|
|
|
1614
1616
|
}
|
|
1615
1617
|
//#endregion
|
|
1616
1618
|
//#region \0dsh-css:packages/dsh-task-board/src/client/board.module.css.mjs
|
|
1617
|
-
const css$1 = "[data-pane=conversation],[class*=centerCol]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}._7D6uKa_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}._7D6uKa_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}._7D6uKa_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}._7D6uKa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryLabel{display:none}._7D6uKa_board{background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}._7D6uKa_boardHeader{flex:none;align-items:center;gap:10px;display:flex}._7D6uKa_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}._7D6uKa_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}._7D6uKa_search::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_columns{flex:1;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;min-height:0;display:grid}._7D6uKa_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}._7D6uKa_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}._7D6uKa_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}._7D6uKa_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}._7D6uKa_statusDot{border-radius:50%;flex:none;width:8px;height:8px}._7D6uKa_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}._7D6uKa_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}._7D6uKa_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}._7D6uKa_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}._7D6uKa_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}._7D6uKa_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}._7D6uKa_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}._7D6uKa_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}._7D6uKa_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}._7D6uKa_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}._7D6uKa_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}._7D6uKa_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._7D6uKa_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}._7D6uKa_cardRun{flex:none}._7D6uKa_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}._7D6uKa_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}._7D6uKa_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}._7D6uKa_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}._7D6uKa_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite _7D6uKa_dshTbSpin}@keyframes _7D6uKa_dshTbSpin{to{transform:rotate(360deg)}}._7D6uKa_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7D6uKa_primaryButton:disabled{opacity:.5;cursor:default}._7D6uKa_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._7D6uKa_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7D6uKa_ghostButton:disabled{opacity:.45;cursor:default}._7D6uKa_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_dangerButton:hover:not(:disabled){filter:brightness(1.08)}._7D6uKa_dangerButton:active:not(:disabled){filter:brightness(.94)}._7D6uKa_dangerButton:disabled{opacity:.5;cursor:default}._7D6uKa_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._7D6uKa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}._7D6uKa_linkButton:hover{text-decoration:underline}._7D6uKa_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._7D6uKa_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}._7D6uKa_modalTitle{margin:0;font-size:15px;font-weight:700}._7D6uKa_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}._7D6uKa_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}._7D6uKa_field{flex-direction:column;gap:5px;display:flex}._7D6uKa_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._7D6uKa_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_select{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;max-width:100%;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._7D6uKa_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._7D6uKa_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}._7D6uKa_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}._7D6uKa_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}._7D6uKa_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._7D6uKa_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}._7D6uKa_detailSection{flex-direction:column;gap:6px;display:flex}._7D6uKa_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}._7D6uKa_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}._7D6uKa_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}._7D6uKa_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleRow{align-items:center;gap:8px;display:flex}._7D6uKa_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}._7D6uKa_scheduleInputInvalid,._7D6uKa_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}._7D6uKa_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}._7D6uKa_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}._7D6uKa_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._7D6uKa_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}._7D6uKa_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}._7D6uKa_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}._7D6uKa_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}._7D6uKa_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}._7D6uKa_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}._7D6uKa_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}._7D6uKa_moveRow{flex-wrap:wrap;gap:8px;display:flex}._7D6uKa_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}._7D6uKa_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}._7D6uKa_entry:focus-visible,._7D6uKa_card:focus-visible,._7D6uKa_primaryButton:focus-visible,._7D6uKa_ghostButton:focus-visible,._7D6uKa_dangerButton:focus-visible,._7D6uKa_iconButton:focus-visible,._7D6uKa_linkButton:focus-visible,._7D6uKa_search:focus-visible,._7D6uKa_input:focus-visible,._7D6uKa_select:focus-visible,._7D6uKa_schedulePreset:focus-visible,._7D6uKa_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._7D6uKa_entry,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._7D6uKa_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}._7D6uKa_entry:active,._7D6uKa_primaryButton:active:not(:disabled),._7D6uKa_ghostButton:active:not(:disabled),._7D6uKa_dangerButton:active:not(:disabled),._7D6uKa_iconButton:active:not(:disabled),._7D6uKa_linkButton:active:not(:disabled){transform:translateY(1px)}._7D6uKa_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}._7D6uKa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton:hover:not(:disabled){text-decoration:underline}._7D6uKa_iconButton:disabled,._7D6uKa_linkButton:disabled{opacity:.45;cursor:default}._7D6uKa_search:focus,._7D6uKa_select:focus,._7D6uKa_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:none}._7D6uKa_cardSpinner{animation:none}}";
|
|
1619
|
+
const css$1 = "[data-pane=conversation],[class*=centerCol]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0;container:_7D6uKa_task-board-view/inline-size}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}._7D6uKa_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}._7D6uKa_entry:hover{background:var(--dsw-specific-sidebar-nav-item-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_entry[data-active]{background:var(--dsw-specific-sidebar-nav-item-active);color:var(--dsw-alias-label-primary);font-weight:600}._7D6uKa_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}._7D6uKa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryLabel{display:none}._7D6uKa_board{box-sizing:border-box;background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}._7D6uKa_boardHeader{flex:none;align-items:center;gap:10px;display:flex}._7D6uKa_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}._7D6uKa_backButton{align-items:center;gap:4px;display:inline-flex}._7D6uKa_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}._7D6uKa_search::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_columns{overscroll-behavior-inline:contain;scrollbar-color:var(--dsw-alias-border-l3) var(--dsw-alias-interactive-bg-hover);scrollbar-width:thin;flex:1;grid-auto-columns:minmax(220px,1fr);grid-auto-flow:column;gap:12px;min-height:0;padding-bottom:6px;display:grid;overflow:auto hidden}._7D6uKa_columns::-webkit-scrollbar{height:10px}._7D6uKa_columns::-webkit-scrollbar-track{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l3);background-clip:content-box;border:2px solid #0000;border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-border-l4);background-clip:content-box}._7D6uKa_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}._7D6uKa_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}._7D6uKa_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}._7D6uKa_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}._7D6uKa_statusDot{border-radius:50%;flex:none;width:8px;height:8px}._7D6uKa_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}._7D6uKa_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}._7D6uKa_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}._7D6uKa_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}._7D6uKa_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}._7D6uKa_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}._7D6uKa_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}._7D6uKa_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}._7D6uKa_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}._7D6uKa_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}._7D6uKa_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}._7D6uKa_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._7D6uKa_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}._7D6uKa_cardRun{flex:none}._7D6uKa_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}._7D6uKa_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}._7D6uKa_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}._7D6uKa_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}._7D6uKa_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite _7D6uKa_dshTbSpin}@keyframes _7D6uKa_dshTbSpin{to{transform:rotate(360deg)}}._7D6uKa_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7D6uKa_primaryButton:disabled{opacity:.5;cursor:default}._7D6uKa_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._7D6uKa_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7D6uKa_ghostButton:disabled{opacity:.45;cursor:default}._7D6uKa_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_dangerButton:hover:not(:disabled){filter:brightness(1.08)}._7D6uKa_dangerButton:active:not(:disabled){filter:brightness(.94)}._7D6uKa_dangerButton:disabled{opacity:.5;cursor:default}._7D6uKa_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._7D6uKa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}._7D6uKa_linkButton:hover{text-decoration:underline}._7D6uKa_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._7D6uKa_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}._7D6uKa_modalTitle{margin:0;font-size:15px;font-weight:700}._7D6uKa_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}._7D6uKa_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}._7D6uKa_field{flex-direction:column;gap:5px;display:flex}._7D6uKa_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._7D6uKa_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_select{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;max-width:100%;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._7D6uKa_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._7D6uKa_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}._7D6uKa_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}._7D6uKa_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}._7D6uKa_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._7D6uKa_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}._7D6uKa_detailSection{flex-direction:column;gap:6px;display:flex}._7D6uKa_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}._7D6uKa_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}._7D6uKa_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}._7D6uKa_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleRow{align-items:center;gap:8px;display:flex}._7D6uKa_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}._7D6uKa_scheduleInputInvalid,._7D6uKa_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}._7D6uKa_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}._7D6uKa_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}._7D6uKa_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._7D6uKa_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}._7D6uKa_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}._7D6uKa_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}._7D6uKa_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}._7D6uKa_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}._7D6uKa_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}._7D6uKa_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}._7D6uKa_moveRow{flex-wrap:wrap;gap:8px;display:flex}._7D6uKa_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}._7D6uKa_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}@container _7D6uKa_task-board-view (width<=720px){._7D6uKa_board{gap:10px;padding:10px}._7D6uKa_columns{gap:10px}}@container _7D6uKa_task-board-view (width<=600px){._7D6uKa_boardHeader{flex-wrap:wrap;gap:8px}._7D6uKa_search{flex:calc(100% - 72px);min-width:0}._7D6uKa_boardHeader>button{flex:1 1 0;min-width:max-content}}._7D6uKa_entry:focus-visible,._7D6uKa_card:focus-visible,._7D6uKa_primaryButton:focus-visible,._7D6uKa_ghostButton:focus-visible,._7D6uKa_dangerButton:focus-visible,._7D6uKa_iconButton:focus-visible,._7D6uKa_linkButton:focus-visible,._7D6uKa_search:focus-visible,._7D6uKa_input:focus-visible,._7D6uKa_select:focus-visible,._7D6uKa_schedulePreset:focus-visible,._7D6uKa_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._7D6uKa_entry,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._7D6uKa_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}._7D6uKa_entry:active,._7D6uKa_primaryButton:active:not(:disabled),._7D6uKa_ghostButton:active:not(:disabled),._7D6uKa_dangerButton:active:not(:disabled),._7D6uKa_iconButton:active:not(:disabled),._7D6uKa_linkButton:active:not(:disabled){transform:translateY(1px)}._7D6uKa_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}._7D6uKa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton:hover:not(:disabled){text-decoration:underline}._7D6uKa_iconButton:disabled,._7D6uKa_linkButton:disabled{opacity:.45;cursor:default}._7D6uKa_search:focus,._7D6uKa_select:focus,._7D6uKa_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:none}._7D6uKa_cardSpinner{animation:none}}";
|
|
1618
1620
|
const tagId$1 = "@linxin666/dsh-client-ui-task-board/board.module.css";
|
|
1619
1621
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
1620
1622
|
const tag = document.createElement("style");
|
|
@@ -1624,6 +1626,7 @@ window.__ModuleLoader__.load({
|
|
|
1624
1626
|
document.head.appendChild(tag);
|
|
1625
1627
|
}
|
|
1626
1628
|
var board_module_css_default = {
|
|
1629
|
+
"backButton": "_7D6uKa_backButton",
|
|
1627
1630
|
"board": "_7D6uKa_board",
|
|
1628
1631
|
"boardHeader": "_7D6uKa_boardHeader",
|
|
1629
1632
|
"boardTitle": "_7D6uKa_boardTitle",
|
|
@@ -1686,7 +1689,8 @@ window.__ModuleLoader__.load({
|
|
|
1686
1689
|
"search": "_7D6uKa_search",
|
|
1687
1690
|
"select": "_7D6uKa_select",
|
|
1688
1691
|
"statusBadge": "_7D6uKa_statusBadge",
|
|
1689
|
-
"statusDot": "_7D6uKa_statusDot"
|
|
1692
|
+
"statusDot": "_7D6uKa_statusDot",
|
|
1693
|
+
"task-board-view": "_7D6uKa_task-board-view"
|
|
1690
1694
|
};
|
|
1691
1695
|
//#endregion
|
|
1692
1696
|
//#region src/client/schedule-presets.ts
|
|
@@ -1968,6 +1972,16 @@ window.__ModuleLoader__.load({
|
|
|
1968
1972
|
});
|
|
1969
1973
|
}
|
|
1970
1974
|
//#endregion
|
|
1975
|
+
//#region src/client/board/status-key.ts
|
|
1976
|
+
/** Task status → locale key (board column titles and the detail badge). */
|
|
1977
|
+
const STATUS_KEY = {
|
|
1978
|
+
backlog: "board.status.backlog",
|
|
1979
|
+
todo: "board.status.todo",
|
|
1980
|
+
running: "board.status.running",
|
|
1981
|
+
done: "board.status.done",
|
|
1982
|
+
failed: "board.status.failed"
|
|
1983
|
+
};
|
|
1984
|
+
//#endregion
|
|
1971
1985
|
//#region src/client/board/TaskCard.tsx
|
|
1972
1986
|
/**
|
|
1973
1987
|
* Task card: the board's column item. Clicking opens the task detail — it
|
|
@@ -2108,14 +2122,6 @@ window.__ModuleLoader__.load({
|
|
|
2108
2122
|
failed: "detail.result.failed",
|
|
2109
2123
|
cancelled: "detail.result.cancelled"
|
|
2110
2124
|
};
|
|
2111
|
-
/** Status → locale key (detail badge). */
|
|
2112
|
-
const STATUS_KEY$1 = {
|
|
2113
|
-
backlog: "board.status.backlog",
|
|
2114
|
-
todo: "board.status.todo",
|
|
2115
|
-
running: "board.status.running",
|
|
2116
|
-
done: "board.status.done",
|
|
2117
|
-
failed: "board.status.failed"
|
|
2118
|
-
};
|
|
2119
2125
|
/** One execution-history row. */
|
|
2120
2126
|
function ExecutionRow({ execution, onOpen }) {
|
|
2121
2127
|
const result = execution.result;
|
|
@@ -2399,7 +2405,7 @@ window.__ModuleLoader__.load({
|
|
|
2399
2405
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2400
2406
|
className: board_module_css_default.statusBadge,
|
|
2401
2407
|
"data-status": current.status,
|
|
2402
|
-
children: t(STATUS_KEY
|
|
2408
|
+
children: t(STATUS_KEY[current.status])
|
|
2403
2409
|
}),
|
|
2404
2410
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2405
2411
|
type: "button",
|
|
@@ -2542,14 +2548,6 @@ window.__ModuleLoader__.load({
|
|
|
2542
2548
|
* active. Cards open the task detail (never execute directly); the header
|
|
2543
2549
|
* offers filter, new-task, and a back-to-chat escape.
|
|
2544
2550
|
*/
|
|
2545
|
-
/** Column status → locale key. */
|
|
2546
|
-
const STATUS_KEY = {
|
|
2547
|
-
backlog: "board.status.backlog",
|
|
2548
|
-
todo: "board.status.todo",
|
|
2549
|
-
running: "board.status.running",
|
|
2550
|
-
done: "board.status.done",
|
|
2551
|
-
failed: "board.status.failed"
|
|
2552
|
-
};
|
|
2553
2551
|
/** Case-insensitive title/description match. */
|
|
2554
2552
|
function matchesFilter(task, filter) {
|
|
2555
2553
|
if (filter.trim() === "") return true;
|
|
@@ -2589,6 +2587,18 @@ window.__ModuleLoader__.load({
|
|
|
2589
2587
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
2590
2588
|
className: board_module_css_default.boardHeader,
|
|
2591
2589
|
children: [
|
|
2590
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
2591
|
+
type: "button",
|
|
2592
|
+
className: `${board_module_css_default.ghostButton} ${board_module_css_default.backButton}`,
|
|
2593
|
+
"aria-label": t("board.close"),
|
|
2594
|
+
onClick: () => {
|
|
2595
|
+
controller.closeBoard();
|
|
2596
|
+
},
|
|
2597
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2598
|
+
"aria-hidden": "true",
|
|
2599
|
+
children: "‹"
|
|
2600
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("board.close") })]
|
|
2601
|
+
}),
|
|
2592
2602
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
2593
2603
|
className: board_module_css_default.boardTitle,
|
|
2594
2604
|
children: t("board.title")
|
|
@@ -2618,14 +2628,6 @@ window.__ModuleLoader__.load({
|
|
|
2618
2628
|
setShowNew(true);
|
|
2619
2629
|
},
|
|
2620
2630
|
children: ["+ ", t("board.new")]
|
|
2621
|
-
}),
|
|
2622
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2623
|
-
type: "button",
|
|
2624
|
-
className: board_module_css_default.ghostButton,
|
|
2625
|
-
onClick: () => {
|
|
2626
|
-
controller.closeBoard();
|
|
2627
|
-
},
|
|
2628
|
-
children: t("board.close")
|
|
2629
2631
|
})
|
|
2630
2632
|
]
|
|
2631
2633
|
}),
|
|
@@ -3153,6 +3155,9 @@ window.__ModuleLoader__.load({
|
|
|
3153
3155
|
specs;
|
|
3154
3156
|
staged = /* @__PURE__ */ new Map();
|
|
3155
3157
|
listeners = /* @__PURE__ */ new Set();
|
|
3158
|
+
/** The scope subscription installed in the constructor; released by dispose(). */
|
|
3159
|
+
disposeScope;
|
|
3160
|
+
disposed = false;
|
|
3156
3161
|
saving = false;
|
|
3157
3162
|
failed = false;
|
|
3158
3163
|
failedReason;
|
|
@@ -3160,10 +3165,20 @@ window.__ModuleLoader__.load({
|
|
|
3160
3165
|
constructor(scope, specs) {
|
|
3161
3166
|
this.scope = scope;
|
|
3162
3167
|
this.specs = new Map(specs.map((spec) => [spec.field, spec]));
|
|
3163
|
-
scope.subscribe(() => {
|
|
3168
|
+
this.disposeScope = scope.subscribe(() => {
|
|
3164
3169
|
this.publish();
|
|
3165
3170
|
});
|
|
3166
3171
|
}
|
|
3172
|
+
/**
|
|
3173
|
+
* Release the scope subscription and every bound store listener. The card
|
|
3174
|
+
* must call this on teardown; later calls are no-ops.
|
|
3175
|
+
*/
|
|
3176
|
+
dispose() {
|
|
3177
|
+
if (this.disposed) return;
|
|
3178
|
+
this.disposed = true;
|
|
3179
|
+
this.disposeScope();
|
|
3180
|
+
this.listeners.clear();
|
|
3181
|
+
}
|
|
3167
3182
|
/** Publish a projection of this form, rebuilt whenever the scope or a draft changes. */
|
|
3168
3183
|
bind(project) {
|
|
3169
3184
|
const store = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(project());
|
|
@@ -3389,6 +3404,13 @@ window.__ModuleLoader__.load({
|
|
|
3389
3404
|
...this.form.actions()
|
|
3390
3405
|
};
|
|
3391
3406
|
}
|
|
3407
|
+
/**
|
|
3408
|
+
* Release the card's scope subscription and bound stores; the slot
|
|
3409
|
+
* disposer calls this on teardown.
|
|
3410
|
+
*/
|
|
3411
|
+
dispose() {
|
|
3412
|
+
this.form.dispose();
|
|
3413
|
+
}
|
|
3392
3414
|
};
|
|
3393
3415
|
/**
|
|
3394
3416
|
* Render the task-board card.
|
|
@@ -3474,13 +3496,19 @@ window.__ModuleLoader__.load({
|
|
|
3474
3496
|
}), "task-board: dictionaries");
|
|
3475
3497
|
const settingsScope = (ctx.get("webUiSettings") ?? ctx.settingsScope).bind({ namespace: TASK_BOARD_NS });
|
|
3476
3498
|
const settingsCard = new TaskBoardSettingsCardController(settingsScope);
|
|
3477
|
-
ctx.slots.inject("web-ui.plugin.item", () =>
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3499
|
+
ctx.slots.inject("web-ui.plugin.item", () => {
|
|
3500
|
+
const unregister = ctx.slots.register({
|
|
3501
|
+
name: "web-ui.plugin.item",
|
|
3502
|
+
id: "task-board",
|
|
3503
|
+
order: 110,
|
|
3504
|
+
locale: NS,
|
|
3505
|
+
inject: () => settingsCard.inject()
|
|
3506
|
+
}, TaskBoardSettingsCard);
|
|
3507
|
+
return () => {
|
|
3508
|
+
settingsCard.dispose();
|
|
3509
|
+
unregister();
|
|
3510
|
+
};
|
|
3511
|
+
});
|
|
3484
3512
|
let uiDisposer;
|
|
3485
3513
|
const mountUi = () => {
|
|
3486
3514
|
if (uiDisposer !== void 0) return;
|