dsh-taskboard 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -160
- package/lib/client.js +2564 -678
- package/lib/host/execution.js +3 -0
- package/lib/host/execution.js.map +1 -1
- package/lib/host/routes.js +31 -1
- package/lib/host/routes.js.map +1 -1
- package/lib/host/session-sync.js +449 -0
- package/lib/host/session-sync.js.map +1 -0
- package/lib/host/store.js +9 -2
- package/lib/host/store.js.map +1 -1
- package/lib/index.js +109 -2
- package/lib/index.js.map +1 -1
- package/lib/shared/api.js.map +1 -1
- package/lib/shared/protocol.js +27 -1
- package/lib/shared/protocol.js.map +1 -1
- package/package.json +75 -75
- package/src/client/api.ts +8 -0
- package/src/client/board/AlertModal.tsx +3 -1
- package/src/client/board/ImportModal.tsx +26 -24
- package/src/client/board/SettingsModal.tsx +98 -22
- package/src/client/board/SlashPromptInput.tsx +272 -0
- package/src/client/board/TaskBoard.tsx +53 -49
- package/src/client/board/TaskCard.tsx +33 -21
- package/src/client/board/TaskDetail.tsx +169 -104
- package/src/client/board/TaskFormModal.tsx +254 -202
- package/src/client/board/TemplateManager.tsx +32 -29
- package/src/client/board/labels.ts +36 -27
- package/src/client/controller.ts +62 -2
- package/src/client/i18n/en.ts +455 -0
- package/src/client/i18n/runtime.ts +155 -0
- package/src/client/i18n/zh.ts +460 -0
- package/src/client/index.ts +182 -42
- package/src/client/sidebar-entry.ts +13 -3
- package/src/client/styles.ts +131 -0
- package/src/host/execution.ts +14 -1
- package/src/host/routes.ts +49 -1
- package/src/host/session-sync.ts +650 -0
- package/src/host/store.ts +15 -1
- package/src/index.ts +125 -1
- package/src/shared/api.ts +49 -0
- package/src/shared/protocol.ts +54 -0
- package/src/shared/version.ts +1 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zh-CN dictionary — the taskboard UI namespace's key canon.
|
|
3
|
+
*
|
|
4
|
+
* Every key the board renders goes here; en.ts is type-checked against
|
|
5
|
+
* this file's key set (Dict), so the two dictionaries can never drift
|
|
6
|
+
* apart at compile time. Keys are flat '<domain>.<object>[.<detail>'
|
|
7
|
+
* strings; values may carry {name} placeholders (translate() substitutes
|
|
8
|
+
* them; unknown names are left verbatim — {{lastExecution}} survives).
|
|
9
|
+
*
|
|
10
|
+
* @module dsh-taskboard/client/i18n/zh
|
|
11
|
+
*/
|
|
12
|
+
export const zh = {
|
|
13
|
+
// ── shared vocabulary ──────────────────────────────────────────────
|
|
14
|
+
'shared.close': '关闭',
|
|
15
|
+
'shared.cancel': '取消',
|
|
16
|
+
'shared.loading': '读取中…',
|
|
17
|
+
'shared.blocked': '受阻',
|
|
18
|
+
'shared.permission': '权限',
|
|
19
|
+
'shared.confirmDelete': '确认删除',
|
|
20
|
+
'shared.current': '(当前:{name})',
|
|
21
|
+
'shared.entry.aria': 'Agent 任务看板',
|
|
22
|
+
'shared.entry.label': '任务看板',
|
|
23
|
+
'shared.stats.title': '待办 {todo} | 进行中 {doing} | 待验收 {review}(待办|进行中|待验收)',
|
|
24
|
+
'shared.duplicate.suffix': '(副本)',
|
|
25
|
+
|
|
26
|
+
// ── status / urgency / outcome enums (labels.ts) ──────────────────
|
|
27
|
+
'status.column.backlog': '待规划',
|
|
28
|
+
'status.column.todo': '待办',
|
|
29
|
+
'status.column.in_progress': '进行中',
|
|
30
|
+
'status.column.in_review': '待验收',
|
|
31
|
+
'status.column.done': '已完成',
|
|
32
|
+
'status.column.canceled': '已取消',
|
|
33
|
+
'status.column.archived': '已归档',
|
|
34
|
+
'status.pill.backlog': '待规划',
|
|
35
|
+
'status.pill.todo': '待办',
|
|
36
|
+
'status.pill.in_progress': '进行中',
|
|
37
|
+
'status.pill.in_review': '待验收',
|
|
38
|
+
'status.pill.done': '完成',
|
|
39
|
+
'status.pill.canceled': '取消',
|
|
40
|
+
'status.pill.archived': '归档',
|
|
41
|
+
'status.move.backlog': '待规划',
|
|
42
|
+
'status.move.todo': '待办',
|
|
43
|
+
'status.move.in_progress': '进行中',
|
|
44
|
+
'status.move.in_review': '待验收',
|
|
45
|
+
'status.move.done': '完成',
|
|
46
|
+
'status.move.canceled': '取消',
|
|
47
|
+
'status.move.archived': '归档',
|
|
48
|
+
'urgency.urgent': '紧急',
|
|
49
|
+
'urgency.normal': '一般',
|
|
50
|
+
'urgency.relaxed': '不急',
|
|
51
|
+
'outcome.running': '执行中',
|
|
52
|
+
'outcome.succeeded': '成功',
|
|
53
|
+
'outcome.failed': '失败',
|
|
54
|
+
'outcome.cancelled': '已取消',
|
|
55
|
+
|
|
56
|
+
// ── board toolbar & columns (TaskBoard) ───────────────────────────
|
|
57
|
+
'board.title': 'Agent 任务看板',
|
|
58
|
+
'board.count.tasks': '{n} 任务 · rev {rev}',
|
|
59
|
+
'board.action.newTask': '+ 新建任务 ▼',
|
|
60
|
+
'board.action.blankTask': '空白任务',
|
|
61
|
+
'board.action.manageTemplates': '⌗ 管理模板…',
|
|
62
|
+
'board.search.placeholder': '搜索标题 / ID…',
|
|
63
|
+
'board.filter.allProjects': '全部项目',
|
|
64
|
+
'board.sort.title': '列内排序',
|
|
65
|
+
'board.sort.default': '默认排序',
|
|
66
|
+
'board.sort.updated': '最近更新',
|
|
67
|
+
'board.sort.urgency': '按紧急度',
|
|
68
|
+
'board.sort.created': '创建时间',
|
|
69
|
+
'board.sort.byTitle': '按标题',
|
|
70
|
+
'board.action.backToBoard': '返回看板',
|
|
71
|
+
'board.action.otherTasks': '其它任务',
|
|
72
|
+
'board.action.settingsTitle': '看板设置:新建任务的默认执行隔离等',
|
|
73
|
+
'board.action.settings': '🛠 设置',
|
|
74
|
+
'board.action.diagTitle': '健康诊断:遗留 worktree、台账基本项',
|
|
75
|
+
'board.action.diag': '⚙ 诊断',
|
|
76
|
+
'board.action.importTitle': '从 JSON 备份文件导入台账(预览后合并或整册替换)',
|
|
77
|
+
'board.action.import': '⬆ 导入',
|
|
78
|
+
'board.action.exportTitle': '导出台账:完整 JSON 备份或任务清单 CSV',
|
|
79
|
+
'board.action.export': '⬇ 导出 ▼',
|
|
80
|
+
'board.export.jsonTitle': '完整台账备份(含执行历史与看板设置),可用于导入恢复',
|
|
81
|
+
'board.export.json': '完整台账(JSON)',
|
|
82
|
+
'board.export.csvTitle': '任务清单表格(Excel 可直接打开,中文已加 BOM)',
|
|
83
|
+
'board.export.csv': '任务清单(CSV)',
|
|
84
|
+
'board.drag.forbidden': '无法从「{from}」拖至「{to}」',
|
|
85
|
+
'board.empty': '无任务',
|
|
86
|
+
'board.secondary.empty': '无已取消 / 已归档 / 已删除任务',
|
|
87
|
+
'board.group.trashed': '已删除',
|
|
88
|
+
|
|
89
|
+
// ── diagnostics panel (TaskBoard) ─────────────────────────────────
|
|
90
|
+
'diag.title': '健康诊断',
|
|
91
|
+
'diag.subtitle': '台账基本项与 worktree 遗留清理',
|
|
92
|
+
'diag.revision': '台账修订号',
|
|
93
|
+
'diag.tasks': '任务总数',
|
|
94
|
+
'diag.running': '执行中',
|
|
95
|
+
'diag.orphans': '遗留 worktree',
|
|
96
|
+
'diag.orphans.heading': '遗留 worktree(台账无主但目录存在)',
|
|
97
|
+
'diag.orphans.none': '无遗留 — 各项目 .dsh-worktrees 目录干净',
|
|
98
|
+
'diag.orphans.cleanup': '清理',
|
|
99
|
+
'diag.orphans.hint': '提示:有未提交修改的遗留目录会被拒绝清理,请先手动处理其内容。live 任务的 worktree 请在任务详情页删除。',
|
|
100
|
+
'diag.gitignore.heading': 'gitignore 建议',
|
|
101
|
+
'diag.gitignore.none': '无待办 — 各 git 项目已忽略 .dsh-worktrees 目录',
|
|
102
|
+
'diag.gitignore.suggestA': '建议在 .gitignore 加入一行',
|
|
103
|
+
'diag.gitignore.suggestB': '(不会自动修改)',
|
|
104
|
+
|
|
105
|
+
// ── task card (TaskCard) ──────────────────────────────────────────
|
|
106
|
+
'card.drag.running': '该任务正由会话执行中({title}),不能拖动',
|
|
107
|
+
'card.badge.stale': '⏱ 认领超时',
|
|
108
|
+
'card.badge.modelTitle': '固定模型: {model}',
|
|
109
|
+
'card.badge.modelEffort': ' · 思考强度: {effort}',
|
|
110
|
+
'card.badge.checklistReview': '待验收:清单未全部勾选',
|
|
111
|
+
'card.badge.checklist': '验收清单进度',
|
|
112
|
+
'card.badge.pendingPurge': '待清除',
|
|
113
|
+
'card.session.jumpTitle': '点击一键跳转到会话:{id}',
|
|
114
|
+
'card.session.missing': '该会话已被删除({id}),无法打开',
|
|
115
|
+
'card.session.archived': '该会话已归档({id}),已从会话列表隐藏',
|
|
116
|
+
'card.session.unavailable': '会话导航不可用,会话 ID:{id}',
|
|
117
|
+
'card.reject.placeholder': '退回原因(可选,agent 开工前会读)…',
|
|
118
|
+
'card.reject.confirm': '退回待办',
|
|
119
|
+
'card.action.doneTitle': '验收完成:移至已完成',
|
|
120
|
+
'card.action.done': '✓ 完成',
|
|
121
|
+
'card.action.rejectTitle': '退回待办,可附退回原因',
|
|
122
|
+
'card.action.reject': '✗ 退回',
|
|
123
|
+
|
|
124
|
+
// ── alert modal ───────────────────────────────────────────────────
|
|
125
|
+
'alert.ok': '知道了',
|
|
126
|
+
|
|
127
|
+
// ── diff view (TaskDetail) ────────────────────────────────────────
|
|
128
|
+
'diff.commit': '提交 {hash}',
|
|
129
|
+
'diff.file': '文件 {path}',
|
|
130
|
+
'diff.truncated': '⚠ 内容过长已截断',
|
|
131
|
+
'diff.failed': '获取失败(原因见看板顶部错误条;对象可能已随 worktree 删除丢失)',
|
|
132
|
+
|
|
133
|
+
// ── checklist block (TaskDetail) ──────────────────────────────────
|
|
134
|
+
'checklist.title': '验收清单(DoD)',
|
|
135
|
+
'checklist.unchecked': ' · {n} 项未完成',
|
|
136
|
+
'checklist.allDone': ' · 全部完成',
|
|
137
|
+
'checklist.byUser': '👤 用户',
|
|
138
|
+
'checklist.uncheckedItem': '未完成',
|
|
139
|
+
'checklist.evidence': '证据:{note}',
|
|
140
|
+
|
|
141
|
+
// ── execution report block (TaskDetail) ───────────────────────────
|
|
142
|
+
'report.title': '执行报告',
|
|
143
|
+
'report.submitted': '由执行会话提交 · {time}',
|
|
144
|
+
'report.changedFiles': '改动文件',
|
|
145
|
+
'report.checks': '自验情况',
|
|
146
|
+
'report.artifacts': '产物',
|
|
147
|
+
'report.risk': '剩余风险',
|
|
148
|
+
|
|
149
|
+
// ── isolation block (TaskDetail) ──────────────────────────────────
|
|
150
|
+
'iso.title': '执行隔离',
|
|
151
|
+
'iso.none': '📁 原目录执行',
|
|
152
|
+
'iso.worktreeTitle': '执行隔离 · Worktree',
|
|
153
|
+
'iso.branch': '🌿 分支',
|
|
154
|
+
'iso.baseline': '基线 {base} → {head}',
|
|
155
|
+
'iso.changed': '改动 {n} 个文件',
|
|
156
|
+
'iso.commit.openTitle': '点击展开该提交的 diff',
|
|
157
|
+
'iso.commits.more': '… 共 {n} 个提交',
|
|
158
|
+
'iso.nocommit': '该次执行没有产生提交(改动可能未提交,见下方警告)',
|
|
159
|
+
'iso.dirty.toggle': '⚠ 有 {n} 处未提交修改(合并前请让 agent 提交,或手动处理)',
|
|
160
|
+
'iso.dirty.expand': ' ▼ 查看文件',
|
|
161
|
+
'iso.dirty.collapse': ' ▲',
|
|
162
|
+
'iso.dirty.openTitle': '点击查看该文件的未提交 diff',
|
|
163
|
+
'iso.dirty.more': '… 共 {n} 处(完整列表见任务台账)',
|
|
164
|
+
'iso.hint.running': '执行中 — 结束后可合并或清理',
|
|
165
|
+
'iso.merge.confirm': '将分支以 --no-ff 合并到主工作区?',
|
|
166
|
+
'iso.merge.go': '确认合并',
|
|
167
|
+
'iso.merge.title': '在主工作区 git merge --no-ff 该任务分支(要求主区干净;冲突会原样报告)',
|
|
168
|
+
'iso.merge.button': '⇥ 合并到主工作区',
|
|
169
|
+
'iso.merge.failed': '合并失败:{error}',
|
|
170
|
+
'iso.merge.noop': '该分支没有领先主工作区的新提交,无需合并(可退回续跑或直接清理)',
|
|
171
|
+
'iso.remove.wt': '🗑 删除 worktree',
|
|
172
|
+
'iso.remove.wtTitle': 'git worktree remove(有未提交修改时拒绝)',
|
|
173
|
+
'iso.remove.wtb': '🗑 删 worktree + 分支',
|
|
174
|
+
'iso.remove.wtbTitle': '删除 worktree 并删除任务分支(有未提交修改时拒绝)',
|
|
175
|
+
'iso.remove.confirmWt': '删除 worktree 目录?',
|
|
176
|
+
'iso.remove.confirmWtb': '删除 worktree 并删除分支?',
|
|
177
|
+
'iso.remove.failed': '删除失败:{error}',
|
|
178
|
+
'iso.remove.branchFailed': 'worktree 已删除,但分支删除失败:{error}',
|
|
179
|
+
'iso.hint.keep': '分支与 worktree 保留中 — 可退回继续修改',
|
|
180
|
+
|
|
181
|
+
// ── detail pane (TaskDetail) ──────────────────────────────────────
|
|
182
|
+
'detail.session.jumpTitle': '一键跳转到对应会话:{id}',
|
|
183
|
+
'detail.session.jump': '🤖 跳转会话 ↗',
|
|
184
|
+
'detail.action.edit': '✎ 编辑',
|
|
185
|
+
'detail.action.duplicateTitle': '复制此任务的全部配置为一张新卡(待办列)',
|
|
186
|
+
'detail.action.duplicate': '⧉ 复制',
|
|
187
|
+
'detail.action.saveTplTitle': '把此任务的配置(含清单)保存为模板,新建任务时可用',
|
|
188
|
+
'detail.action.saveTplDone': '已存为模板(新建任务 ▼ 下拉可用,可在模板管理中改名)',
|
|
189
|
+
'detail.action.saveTpl': '⌗ 存为模板',
|
|
190
|
+
'detail.action.reuseTitle': '续跑:保留现有 worktree 与分支(上次的改动和提交都在原处),在其上继续执行;默认「立即执行」会重置为全新基线',
|
|
191
|
+
'detail.action.reuse': '↻ 续跑',
|
|
192
|
+
'detail.action.runTitleModel': '新会话执行({model})',
|
|
193
|
+
'detail.action.runTitleDefault': '新会话执行(默认模型)',
|
|
194
|
+
'detail.action.run': '▶ 立即执行',
|
|
195
|
+
'detail.action.stopConfirm': '停止该执行会话?',
|
|
196
|
+
'detail.action.stop': '停止',
|
|
197
|
+
'detail.action.stopTitle': '停止执行会话 {id}(任务回到待办)',
|
|
198
|
+
'detail.action.stopExec': '■ 停止执行',
|
|
199
|
+
'detail.chip.nextRun': '{cron} · 下次 {time}',
|
|
200
|
+
'detail.chip.checklist': '清单 {done}/{total}',
|
|
201
|
+
'detail.chip.isolated': 'Worktree 隔离',
|
|
202
|
+
'detail.chip.holderTitle': '点击跳转至该会话:{id}',
|
|
203
|
+
'detail.chip.holderStale': '认领超时 · ',
|
|
204
|
+
'detail.chip.holderBy': '由 ',
|
|
205
|
+
'detail.chip.holderSuffix': ' 持有 ↗',
|
|
206
|
+
'detail.chip.trashed': '已删除待清除',
|
|
207
|
+
'detail.sub.line': '更新 {time} · 最近操作 {who}',
|
|
208
|
+
'detail.updatedBy.system': '⚙️ 系统',
|
|
209
|
+
'detail.updatedBy.user': '👤 用户',
|
|
210
|
+
'detail.field.description': '描述',
|
|
211
|
+
'detail.field.prompt': '执行 Prompt',
|
|
212
|
+
'detail.move.to': '移至→{status}',
|
|
213
|
+
'detail.move.confirmDoneUnchecked': '仍有 {n} 项清单未勾选,确认完成?',
|
|
214
|
+
'detail.move.confirmDone': '确认完成?',
|
|
215
|
+
'detail.move.confirm': '确认',
|
|
216
|
+
'detail.blocked.unmark': '✓ 解除受阻',
|
|
217
|
+
'detail.blocked.mark': '⛔ 标记受阻',
|
|
218
|
+
'detail.release.title': '释放 {id} 的认领:任务回到待办(持有会话可能仍在工作,确认它已停止后再释放)',
|
|
219
|
+
'detail.release.button': '🔓 释放认领',
|
|
220
|
+
'detail.comments.title': '评论',
|
|
221
|
+
'detail.comments.empty': '暂无评论 — agent 交接时会在这里汇报改动与验证结果',
|
|
222
|
+
'detail.comments.user': '用户',
|
|
223
|
+
'detail.composer.placeholder': '以用户身份留言(agent 开工前会读)…',
|
|
224
|
+
'detail.composer.send': '发表',
|
|
225
|
+
'detail.exec.title': '执行记录',
|
|
226
|
+
'detail.exec.prunedTitle': '更早的 {n} 条执行记录已按保留上限清理',
|
|
227
|
+
'detail.exec.pruned': '+{n} 已清理',
|
|
228
|
+
'detail.exec.trigger.manual': '手动',
|
|
229
|
+
'detail.exec.trigger.scheduled': '定时',
|
|
230
|
+
'detail.exec.openTitle': '点击打开该执行会话:{id}',
|
|
231
|
+
'detail.danger.delete': '🗑 删除(标记待清除)',
|
|
232
|
+
'detail.danger.purgeConfirm': '物理清除不可恢复',
|
|
233
|
+
'detail.danger.purgeGo': '确认清除',
|
|
234
|
+
'detail.danger.purge': '🔥 物理清除(需确认)',
|
|
235
|
+
|
|
236
|
+
// ── task form modal (TaskFormModal) ───────────────────────────────
|
|
237
|
+
'form.title.create': '新建任务',
|
|
238
|
+
'form.title.edit': '编辑任务',
|
|
239
|
+
'form.subtitle.create': '推入看板,项目内会话可认领执行',
|
|
240
|
+
'form.subtitle.edit': '调整任务内容与执行配置',
|
|
241
|
+
'form.field.title': '标题',
|
|
242
|
+
'form.field.titlePlaceholder': '一句话说清要做什么',
|
|
243
|
+
'form.field.project': '项目',
|
|
244
|
+
'form.field.model': '模型(默认 = 会话默认模型)',
|
|
245
|
+
'form.field.modelDefault': '默认模型',
|
|
246
|
+
'form.model.option': '{name}({provider})',
|
|
247
|
+
'form.field.effort': '思考强度(Reasoning Effort)',
|
|
248
|
+
'form.field.effortTitle': '设置模型的思考强度(如 low/medium/high);默认 = 跟随模型/提供商默认',
|
|
249
|
+
'form.effort.follow': '跟随模型默认',
|
|
250
|
+
'form.effort.low': '低 (low)',
|
|
251
|
+
'form.effort.medium': '中 (medium)',
|
|
252
|
+
'form.effort.high': '高 (high)',
|
|
253
|
+
'form.effort.none': '关闭思考 (none)',
|
|
254
|
+
'form.field.preset': '执行模式(preset)',
|
|
255
|
+
'form.field.presetTitle': '执行会话按该 preset 组合(决定工具集与人设);默认 = 部署默认 preset',
|
|
256
|
+
'form.preset.follow': '跟随部署默认',
|
|
257
|
+
'form.preset.defaultTag': '(部署默认)',
|
|
258
|
+
'form.field.urgency': '紧急度',
|
|
259
|
+
'form.urgency.urgent': '紧急',
|
|
260
|
+
'form.urgency.urgentHint': '优先处理',
|
|
261
|
+
'form.urgency.normal': '一般',
|
|
262
|
+
'form.urgency.normalHint': '正常排期',
|
|
263
|
+
'form.urgency.relaxed': '不急',
|
|
264
|
+
'form.urgency.relaxedHint': '有空再做',
|
|
265
|
+
'form.field.description': '描述',
|
|
266
|
+
'form.field.descriptionOptional': '描述(可选)',
|
|
267
|
+
'form.desc.placeholder': '需求细节、背景说明、验收标准…',
|
|
268
|
+
'form.field.prompt': '执行 Prompt(实际 Prompt = 标题+任务描述+Prompt)',
|
|
269
|
+
'form.field.promptOptional': '执行 Prompt(可选;实际 Prompt = 标题+任务描述+Prompt)',
|
|
270
|
+
'form.prompt.placeholder': '追加在「标题+任务描述」之后发给执行会话的补充指令。支持模板变量:{{lastExecution}}(上次执行结果)、{{lastComments}}(最近 3 条评论)',
|
|
271
|
+
'form.field.mode': '执行方式',
|
|
272
|
+
'form.mode.claim': '🤝 认领制',
|
|
273
|
+
'form.mode.claimHint': '项目内会话认领',
|
|
274
|
+
'form.mode.scheduled': '⏰ 定时执行',
|
|
275
|
+
'form.mode.scheduledHint': '到点自动开跑',
|
|
276
|
+
'form.field.cron': 'Cron 表达式',
|
|
277
|
+
'form.cron.placeholder': '分 时 日 月 周',
|
|
278
|
+
'form.cron.daily': '每天 09:00',
|
|
279
|
+
'form.cron.hourly': '每小时',
|
|
280
|
+
'form.cron.every10min': '每 10 分钟',
|
|
281
|
+
'form.cron.weekly': '每周一 09:00',
|
|
282
|
+
'form.cron.next': '下次 {time}',
|
|
283
|
+
'form.field.isolation': '执行隔离',
|
|
284
|
+
'form.iso.locked': '任务已有执行记录,隔离方式已锁定',
|
|
285
|
+
'form.iso.lockedShort': '已锁定(执行开始后不可更改)',
|
|
286
|
+
'form.iso.nonGit': '当前项目非 git 仓库',
|
|
287
|
+
'form.iso.worktree': '🌿 Worktree 隔离',
|
|
288
|
+
'form.iso.worktreeTitle': '每次执行在独立 worktree 分支上进行',
|
|
289
|
+
'form.iso.worktreeHint': '独立分支 task/标题+ID,互不污染',
|
|
290
|
+
'form.iso.none': '📁 原目录执行',
|
|
291
|
+
'form.iso.noneTitle': '直接在项目目录执行(不使用 git)',
|
|
292
|
+
'form.iso.noneHintNonGit': '当前项目非 git 仓库,将在原目录执行',
|
|
293
|
+
'form.iso.noneHint': '不使用 git,直接在项目目录工作',
|
|
294
|
+
'form.iso.nonGitNote': '当前项目非 git 仓库,将在原目录执行(任务仍按默认配置创建,运行时自动降级)',
|
|
295
|
+
'form.field.checklist': '验收清单(DoD)',
|
|
296
|
+
'form.field.checklistOptional': '验收清单(DoD,可选)',
|
|
297
|
+
'form.check.itemPlaceholder': '验收项 {n}(完成标准)',
|
|
298
|
+
'form.check.removeTitle': '删除该验收项',
|
|
299
|
+
'form.check.add': '+ 添加验收项',
|
|
300
|
+
'form.check.checkedTitle': '勾选状态随保存保留(当前勾选人:{who})',
|
|
301
|
+
'form.check.notCheckedYet': '未勾选',
|
|
302
|
+
'form.check.hintCreate': '共 {n} 项,执行会话按清单干活并逐项勾选,未完成项验收时高亮',
|
|
303
|
+
'form.check.hintEdit': '已勾选 {checked}/{total}(保存将整体覆盖清单,勾选状态保留)',
|
|
304
|
+
'form.hint.needTitle': '请填写标题',
|
|
305
|
+
'form.hint.needProject': '请选择项目',
|
|
306
|
+
'form.hint.cronBad': 'Cron 表达式无效(分 时 日 月 周)',
|
|
307
|
+
'form.hint.nextRun': '下次运行 {time}',
|
|
308
|
+
'form.hint.saveVersion': '保存后版本 v{v} → v{next}',
|
|
309
|
+
'form.hint.createClaim': '创建后项目内会话可认领执行',
|
|
310
|
+
'form.action.runBlockedTitle': '任务正在执行中,不能重复发起',
|
|
311
|
+
'form.action.runBusyTitle': '正在提交…',
|
|
312
|
+
'form.action.runTitle': '保存后立即发起执行(新会话)',
|
|
313
|
+
'form.action.run': '⚡ 立即执行',
|
|
314
|
+
'form.action.save': '保存修改',
|
|
315
|
+
'form.action.create': '创建任务',
|
|
316
|
+
|
|
317
|
+
// ── template manager (TemplateManager) ────────────────────────────
|
|
318
|
+
'tpl.aria': '管理模板',
|
|
319
|
+
'tpl.title': '任务模板',
|
|
320
|
+
'tpl.subtitle': '新建任务 ▼ 下拉的模板:改名 / 删除 / 直接使用;任务详情页「存为模板」可新增',
|
|
321
|
+
'tpl.empty': '暂无模板 — 在任务详情页点「存为模板」把常用配置沉淀下来',
|
|
322
|
+
'tpl.name.aria': '模板名 {name}',
|
|
323
|
+
'tpl.builtin': '内置',
|
|
324
|
+
'tpl.custom': '自建',
|
|
325
|
+
'tpl.meta.checklist': ' · 清单 {n} 项',
|
|
326
|
+
'tpl.rename.title': '保存改名',
|
|
327
|
+
'tpl.rename.button': '改名',
|
|
328
|
+
'tpl.use.title': '用此模板打开新建表单',
|
|
329
|
+
'tpl.use.button': '用此新建',
|
|
330
|
+
'tpl.delete.title': '删除该模板',
|
|
331
|
+
'tpl.renamed': '模板已改名',
|
|
332
|
+
'tpl.foot.hint': '模板随台账一同保存在 DSH 主目录,升级不丢',
|
|
333
|
+
|
|
334
|
+
// ── import modal (ImportModal) ────────────────────────────────────
|
|
335
|
+
'imp.aria': '导入台账',
|
|
336
|
+
'imp.title': '导入台账',
|
|
337
|
+
'imp.subtitle': '选择导出的 JSON 备份文件:先预览、再合并或整册替换',
|
|
338
|
+
'imp.parseError': '文件不是合法 JSON',
|
|
339
|
+
'imp.note': '⬇ JSON 导出的文件即为同格式备份,可直接导入恢复;导入文件的 schemaVersion 必须与当前版本一致。',
|
|
340
|
+
'imp.previewing': '预览中…',
|
|
341
|
+
'imp.stat.create': '新增',
|
|
342
|
+
'imp.stat.overwrite': '覆盖(同 id)',
|
|
343
|
+
'imp.stat.invalid': '无效(跳过)',
|
|
344
|
+
'imp.sec.create': '新增任务',
|
|
345
|
+
'imp.sec.overwrite': '覆盖任务(整卡替换,含执行历史与评论)',
|
|
346
|
+
'imp.sec.invalid': '无效条目(不会导入)',
|
|
347
|
+
'imp.noId': '(无 id)',
|
|
348
|
+
'imp.mode.merge': '⊕ 合并',
|
|
349
|
+
'imp.mode.mergeHint': '新增 + 按 id 覆盖,其余不动',
|
|
350
|
+
'imp.mode.replace': '💣 整册替换',
|
|
351
|
+
'imp.mode.replaceHint': '清空当前台账,以导入文件为准(先自动备份)',
|
|
352
|
+
'imp.result.replace': '整册替换完成:导入 {n} 张(原 {total} 张已整册备份)',
|
|
353
|
+
'imp.result.merge': '合并完成:新增 {n} 张、覆盖 {m} 张',
|
|
354
|
+
'imp.foot.replaceConfirm': '⚠ 再次点击确认执行整册替换(不可撤销,已自动备份)',
|
|
355
|
+
'imp.foot.replaceNeedConfirm': '整册替换需要二次确认',
|
|
356
|
+
'imp.foot.mergeHint': '合并只写入预览中列出的任务',
|
|
357
|
+
'imp.action.run': '执行导入',
|
|
358
|
+
'imp.action.confirmReplace': '确认整册替换',
|
|
359
|
+
|
|
360
|
+
// ── board settings modal (SettingsModal) ──────────────────────────
|
|
361
|
+
'set.aria': '看板设置',
|
|
362
|
+
'set.title': '看板设置',
|
|
363
|
+
'set.subtitle': '新建任务与会话同步的全局默认值',
|
|
364
|
+
'set.iso.heading': '默认执行隔离',
|
|
365
|
+
'set.iso.noneHint': '不使用 git,直接在项目目录工作(出厂默认)',
|
|
366
|
+
'set.iso.worktreeHint': '每次执行在独立 worktree 分支上进行(task/标题+ID),互不污染',
|
|
367
|
+
'set.iso.current': '当前保存的默认:{current}。仅影响之后新建的任务;已有任务保持创建时的选择,非 git 项目运行时仍自动降级原目录。',
|
|
368
|
+
'set.sync.heading': '自动同步工作区会话',
|
|
369
|
+
'set.sync.off.name': '🚫 关闭同步',
|
|
370
|
+
'set.sync.off.title': '仅管理在任务看板中创建和触发的任务',
|
|
371
|
+
'set.sync.off.hint': '仅管理看板任务(出厂默认)',
|
|
372
|
+
'set.sync.on.name': '🔄 自动纳入会话',
|
|
373
|
+
'set.sync.on.title': '各工作区直接新建的会话也会在看板展示,运行中进入「进行中」,完成后自动进入「待验收」',
|
|
374
|
+
'set.sync.on.hint': '跟踪运行并在完成后进入待验收',
|
|
375
|
+
'set.sync.stateOn': '已开启:工作区直接新建并执行的会话将自动在看板生成任务卡片,并在完成后流转至「待验收」列。',
|
|
376
|
+
'set.sync.stateOff': '已关闭:仅在看板内部创建与触发执行的任务会出现在看板上。',
|
|
377
|
+
'set.foot.dirty': '有未保存的修改',
|
|
378
|
+
'set.foot.clean': '与看板当前设置一致',
|
|
379
|
+
'set.action.save': '保存设置',
|
|
380
|
+
|
|
381
|
+
// ── execution permission (PR #14) ─────────────────────────────────
|
|
382
|
+
'form.field.permission': '执行权限',
|
|
383
|
+
'form.perm.write': '可写入工作区',
|
|
384
|
+
'form.perm.writeHint': '可读写工作区及临时目录(推荐默认)',
|
|
385
|
+
'form.perm.readOnly': '仅可查看',
|
|
386
|
+
'form.perm.readOnlyHint': '只读查看与检索,禁止修改文件或执行外部命令',
|
|
387
|
+
'form.perm.fullAccess': '完全权限',
|
|
388
|
+
'form.perm.fullAccessHint': '完全无限制权限,可访问全盘及执行外部命令',
|
|
389
|
+
'form.perm.defaultTag': '(默认)',
|
|
390
|
+
'set.perm.heading': '默认执行权限',
|
|
391
|
+
'set.perm.writeName': '📁 可写入工作区(出厂默认)',
|
|
392
|
+
'set.perm.writeHint': '可读写工作区及临时目录,写操作无需二次确认',
|
|
393
|
+
'set.perm.readOnlyName': '🔒 仅可查看',
|
|
394
|
+
'set.perm.readOnlyHint': '仅允许只读查看与检索,禁止修改文件或破坏性命令',
|
|
395
|
+
'set.perm.fullName': '⚡ 完全权限',
|
|
396
|
+
'set.perm.fullHint': '完全无限制权限,可访问全盘及执行系统外部命令',
|
|
397
|
+
'set.perm.current': '当前保存的默认:{current}。新建任务时预设的执行权限。',
|
|
398
|
+
'card.badge.permReadOnly': '🔒 仅查看',
|
|
399
|
+
'card.badge.permReadOnlyTitle': '权限:仅可查看',
|
|
400
|
+
'card.badge.permFull': '⚡ 全权限',
|
|
401
|
+
'card.badge.permFullTitle': '权限:完全权限',
|
|
402
|
+
'detail.chip.permReadOnly': '仅可查看',
|
|
403
|
+
'detail.chip.permFull': '完全权限',
|
|
404
|
+
'detail.chip.permWrite': '可写入工作区',
|
|
405
|
+
'tpl.meta.permReadOnly': '仅查看',
|
|
406
|
+
'tpl.meta.permFull': '全权限',
|
|
407
|
+
|
|
408
|
+
// ── markdown lightbox (PR #14) ────────────────────────────────────
|
|
409
|
+
'md.imageAlt': '图片 {n}',
|
|
410
|
+
'md.imageTitle': '点击查看大图 ({alt})',
|
|
411
|
+
'md.lightboxAlt': '大图预览',
|
|
412
|
+
'md.closePreview': '关闭预览',
|
|
413
|
+
|
|
414
|
+
// ── slash completion popup (PR #14) ───────────────────────────────
|
|
415
|
+
'slash.aria': '快捷命令与技能',
|
|
416
|
+
'slash.title': '快捷命令与技能补全',
|
|
417
|
+
'slash.hint': '↑↓ 选择 · Enter / Tab 确认 · Esc 关闭',
|
|
418
|
+
'slash.badge.command': '⚡ 命令',
|
|
419
|
+
'slash.badge.skill': '🧩 技能',
|
|
420
|
+
'slash.tipA': '💡 输入',
|
|
421
|
+
'slash.tipB': '可快速补全 Slash 命令与 Agent 技能',
|
|
422
|
+
'slash.cmd.goal.desc': '自主完成长期目标任务,持续深度推进',
|
|
423
|
+
'slash.cmd.goal.hint': '<目标描述>',
|
|
424
|
+
'slash.cmd.schedule.desc': '设置一次性定时或周期性 Cron 调度',
|
|
425
|
+
'slash.cmd.schedule.hint': '<时间/表达式>',
|
|
426
|
+
'slash.cmd.plan.desc': '在行动前制定分步实施计划并由用户确认',
|
|
427
|
+
'slash.cmd.browser.desc': '启动网页浏览器交互与实时页面检索',
|
|
428
|
+
'slash.cmd.grill-me.desc': '通过多轮单题访谈深入对齐需求与设计意图',
|
|
429
|
+
'slash.cmd.teamwork-preview.desc': '多智能体协作与团队工作流预览',
|
|
430
|
+
'slash.cmd.learn.desc': '沉淀解决经验与新规则到知识库',
|
|
431
|
+
'slash.cmd.review.desc': '多维度代码审查(正确性、架构与安全)',
|
|
432
|
+
'slash.cmd.security.desc': '安全加固与代码漏洞扫描',
|
|
433
|
+
'slash.cmd.permission.desc': '切换当前会话权限级别 (read-only / workspace-write / full-access)',
|
|
434
|
+
'slash.cmd.permission.hint': '<preset>',
|
|
435
|
+
'slash.skill.frontend-ui-engineering': '构建生产级、可访问的高品质前端界面与组件',
|
|
436
|
+
'slash.skill.api-and-interface-design': '设计稳定契约、清晰边界的 REST / RPC 接口',
|
|
437
|
+
'slash.skill.test-driven-development': '测试驱动开发(TDD),编写单元与集成测试',
|
|
438
|
+
'slash.skill.debugging-and-error-recovery': '系统化定位 Bug 根因并恢复错误',
|
|
439
|
+
'slash.skill.performance-optimization': '前后端性能调优、减少渲染开销与查询优化',
|
|
440
|
+
'slash.skill.ci-cd-and-automation': '自动化构建、CI/CD 流水线与质量门禁',
|
|
441
|
+
'slash.skill.code-review-and-quality': '多轴向代码审查与重构指导',
|
|
442
|
+
'slash.skill.code-simplification': '精简复杂逻辑,提升可读性与可维护性',
|
|
443
|
+
'slash.skill.context-engineering': '优化上下文结构与提示词工程',
|
|
444
|
+
'slash.skill.doubt-driven-development': '以怀疑驱动的对抗式审查,确保核心逻辑正确',
|
|
445
|
+
'slash.skill.git-workflow-and-versioning': 'Git 工作流、分支管理、语义化版本与变更日志',
|
|
446
|
+
'slash.skill.idea-refine': '通过发散与收敛思维细化方案与假设检验',
|
|
447
|
+
'slash.skill.incremental-implementation': '小步快跑、增量交付多文件变更',
|
|
448
|
+
'slash.skill.interview-me': '深度访谈挖掘真实意图',
|
|
449
|
+
'slash.skill.memory-leak-debugging': '排查诊断 JavaScript/Node.js 内存泄漏',
|
|
450
|
+
'slash.skill.observability-and-instrumentation': '添加日志、指标打点与链路追踪',
|
|
451
|
+
'slash.skill.planning-and-task-breakdown': '将复杂需求拆解为有序可执行任务',
|
|
452
|
+
'slash.skill.security-and-hardening': '防御安全漏洞、输入过滤与鉴权加固',
|
|
453
|
+
'slash.skill.shipping-and-launch': '生产发布前检查清单与回滚策略',
|
|
454
|
+
'slash.skill.source-driven-development': '基于权威官方文档与源码进行设计实现',
|
|
455
|
+
'slash.skill.spec-driven-development': '在编码前制定清晰的技术规范',
|
|
456
|
+
'slash.skill.using-agent-skills': '发现并动态调用智能体各项专业技能',
|
|
457
|
+
} as const
|
|
458
|
+
|
|
459
|
+
/** The dictionary shape en.ts must match key-for-key. */
|
|
460
|
+
export type TaskboardDict = Record<keyof typeof zh, string>
|