codexmate 0.0.56 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +2 -2
  2. package/README.vi.md +1 -0
  3. package/README.zh.md +2 -2
  4. package/cli/openai-bridge-retry.js +62 -0
  5. package/cli/openai-bridge-runtime.js +1819 -0
  6. package/cli/openai-bridge.js +137 -2048
  7. package/cli.js +749 -133
  8. package/lib/task-orchestrator.js +90 -21
  9. package/lib/task-workspace-chat.js +292 -0
  10. package/package.json +2 -2
  11. package/web-ui/app.js +67 -131
  12. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  13. package/web-ui/modules/app.methods.agents.mjs +192 -1
  14. package/web-ui/modules/app.methods.claude-config.mjs +65 -25
  15. package/web-ui/modules/app.methods.navigation.mjs +67 -83
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +40 -10
  18. package/web-ui/modules/app.methods.session-actions.mjs +1 -12
  19. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  20. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  21. package/web-ui/modules/app.methods.startup-claude.mjs +16 -31
  22. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  23. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  24. package/web-ui/modules/app.methods.web-ui-preferences.mjs +442 -68
  25. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  26. package/web-ui/modules/i18n/locales/en.mjs +181 -30
  27. package/web-ui/modules/i18n/locales/ja.mjs +178 -27
  28. package/web-ui/modules/i18n/locales/vi.mjs +180 -29
  29. package/web-ui/modules/i18n/locales/zh-tw.mjs +181 -30
  30. package/web-ui/modules/i18n/locales/zh.mjs +183 -32
  31. package/web-ui/modules/i18n.mjs +5 -12
  32. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  33. package/web-ui/partials/index/layout-header.html +44 -38
  34. package/web-ui/partials/index/modals-basic.html +26 -0
  35. package/web-ui/partials/index/panel-orchestration.html +489 -282
  36. package/web-ui/partials/index/panel-prompts.html +66 -3
  37. package/web-ui/res/web-ui-render.precompiled.js +1181 -604
  38. package/web-ui/styles/layout-shell.css +157 -1
  39. package/web-ui/styles/modals-core.css +173 -0
  40. package/web-ui/styles/navigation-panels.css +11 -0
  41. package/web-ui/styles/responsive.css +32 -0
  42. package/web-ui/styles/task-orchestration.css +2161 -4
@@ -104,10 +104,13 @@ const vi = Object.freeze({
104
104
  'side.config': 'Cấu hình',
105
105
  'side.sessions': 'Phiên',
106
106
  'side.prompts': 'Prompts',
107
+ 'side.prompts.meta': 'Tệp prompt và preset',
107
108
  'side.plugins': 'Plugin',
108
109
  'side.system': 'Hệ thống',
109
110
  'side.orchestration': 'Tác vụ',
110
111
  'side.skills': 'Skills',
112
+ 'side.collapse': 'Thu gọn thanh bên',
113
+ 'side.expand': 'Mở rộng thanh bên',
111
114
 
112
115
  // Side rail items
113
116
  'side.overview.doctor': 'Doctor',
@@ -126,19 +129,21 @@ const vi = Object.freeze({
126
129
  'side.update.currentOnly': 'Hiện tại v{current}',
127
130
  'side.update.retry': 'Thử kiểm tra phiên bản lại',
128
131
  'side.config.codex': 'Codex',
129
- 'side.config.codex.meta': 'Provider / Model',
132
+ 'side.config.codex.meta': 'Provider · Model',
130
133
  'side.config.claude': 'Claude Code',
131
- 'side.config.claude.meta': 'Cài đặt Claude',
134
+ 'side.config.claude.meta': 'Settings',
132
135
  'side.config.openclaw': 'OpenClaw',
133
- 'side.config.openclaw.meta': 'JSON5 / AGENTS',
136
+ 'side.config.openclaw.meta': 'JSON5 · AGENTS',
134
137
  'side.config.opencode': 'OpenCode',
135
- 'side.config.opencode.meta': 'Config / Provider',
138
+ 'side.config.opencode.meta': 'Provider',
136
139
  'side.sessions.browser': 'Trình duyệt phiên',
137
140
  'side.sessions.browser.meta': 'Duyệt / Xuất / Dọn dẹp',
138
141
  'side.prompts.agents': 'AGENTS.md',
139
142
  'side.prompts.agents.meta': 'Tệp lệnh Codex',
140
143
  'side.prompts.claude': 'CLAUDE.md',
141
144
  'side.prompts.claude.meta': 'Tệp lệnh Claude',
145
+ 'side.prompts.presets': 'Kho preset',
146
+ 'side.prompts.presets.meta': 'Preset prompt tái sử dụng',
142
147
  'side.plugins.tools': 'Công cụ prompt',
143
148
  'side.plugins.tools.meta': 'Mẫu / Biến',
144
149
  'side.plugins.templatesCount': '{count} mẫu',
@@ -217,7 +222,7 @@ const vi = Object.freeze({
217
222
  'title.config': 'Bảng điều khiển cấu hình cục bộ',
218
223
  'title.sessions': 'Phiên & Xuất',
219
224
  'title.usage': 'Thống kê & Xu hướng',
220
- 'title.orchestration': 'Điều phối tác vụ',
225
+ 'title.orchestration': 'Luồng tác vụ',
221
226
  'title.market': 'Cài đặt & Đồng bộ Skills',
222
227
  'title.plugins': 'Plugin & Mẫu',
223
228
  'title.docs': 'Cài CLI & Tài liệu',
@@ -236,6 +241,32 @@ const vi = Object.freeze({
236
241
  'subtitle.prompts': 'Chỉnh sửa AGENTS.md và CLAUDE.md.',
237
242
  'prompts.subTab.codex': 'AGENTS.md (Codex)',
238
243
  'prompts.subTab.project': 'CLAUDE.md',
244
+ 'prompts.subTab.presets': 'Kho preset',
245
+ 'prompts.presets.title': 'Preset',
246
+ 'prompts.presets.hint': 'Quản lý preset.',
247
+ 'prompts.presets.namePlaceholder': 'Tên preset',
248
+ 'prompts.presets.selectPlaceholder': 'Chọn preset…',
249
+ 'prompts.presets.saveCurrent': 'Lưu preset',
250
+ 'prompts.presets.empty': 'Chưa có preset',
251
+ 'prompts.presets.updatedAt': 'Cập nhật: {time}',
252
+ 'prompts.presets.renameAria': 'Đổi tên preset prompt',
253
+ 'prompts.presets.open': 'Mở kho preset',
254
+ 'prompts.presets.addCurrent': 'Thêm vào kho preset',
255
+ 'prompts.presets.defaultName.project': 'CLAUDE.md dự án - {path}',
256
+ 'prompts.presets.error.emptyName': 'Tên preset không được để trống',
257
+ 'prompts.presets.error.emptyContent': 'Nội dung preset không được để trống',
258
+ 'prompts.presets.error.duplicateName': 'Đã có preset trùng tên',
259
+ 'prompts.presets.confirm.addCurrentTitle': 'Thêm vào kho preset?',
260
+ 'prompts.presets.confirm.addCurrentMessage': 'Lưu thành “{name}”.',
261
+ 'prompts.presets.confirm.overwriteTitle': 'Ghi đè preset?',
262
+ 'prompts.presets.confirm.overwriteMessage': 'Preset “{name}” đã tồn tại. Ghi đè bằng nội dung editor hiện tại?',
263
+ 'prompts.presets.confirm.overwriteConfirm': 'Ghi đè',
264
+ 'prompts.presets.confirm.deleteTitle': 'Xóa preset?',
265
+ 'prompts.presets.confirm.deleteMessage': 'Xóa preset “{name}”? Không thể hoàn tác.',
266
+ 'prompts.presets.toast.saved': 'Đã lưu preset',
267
+ 'prompts.presets.toast.pasted': 'Đã dán, chưa lưu.',
268
+ 'prompts.presets.toast.renamed': 'Đã đổi tên preset',
269
+ 'prompts.presets.toast.deleted': 'Đã xóa preset',
239
270
  'prompts.project.pathLabel': 'Đường dẫn dự án (tùy chọn)',
240
271
  'prompts.project.selectPlaceholder': '-- Toàn cục (~/.claude/CLAUDE.md) --',
241
272
  'prompts.project.manualPlaceholder': 'Hoặc nhập đường dẫn gốc dự án...',
@@ -284,11 +315,15 @@ const vi = Object.freeze({
284
315
  'modal.providerCache.errorDetails': 'Chi tiết lỗi',
285
316
  'modal.providerCache.loadFailed': 'Không tải được bản ghi cache',
286
317
 
287
- 'orchestration.readiness.target.label': 'Mục tiêu',
288
- 'orchestration.readiness.target.done': 'Đã viết mục tiêu',
289
- 'orchestration.readiness.target.missing': 'Chưa viết mục tiêu',
318
+ 'orchestration.readiness.target.label': 'Tin nhắn tác vụ',
319
+ 'orchestration.readiness.target.done': 'Đã tin nhắn tác vụ',
320
+ 'orchestration.readiness.target.missing': 'Chưa tin nhắn tác vụ',
321
+ 'orchestration.readiness.sequence.label': 'Thứ tự',
322
+ 'orchestration.readiness.sequence.missing': 'Gửi yêu cầu 1 trước',
323
+ 'orchestration.readiness.sequence.single': 'Hiện chỉ có yêu cầu 1; gửi tiếp để tạo yêu cầu 2.',
324
+ 'orchestration.readiness.sequence.multiple': '{count} yêu cầu sẽ chạy theo thứ tự: hoàn tất yêu cầu 1 rồi tiếp tục yêu cầu 2.',
290
325
  'orchestration.readiness.engine.label': 'Chiến lược chạy',
291
- 'orchestration.readiness.engine.codex': 'Dùng Codex để lập kế hoạch node',
326
+ 'orchestration.readiness.engine.openaiChat': 'Dùng node tương thích OpenAI Chat',
292
327
  'orchestration.readiness.workflow.done': 'Đã chọn {count} Workflow',
293
328
  'orchestration.readiness.workflow.missing': 'Chưa chọn Workflow ID',
294
329
  'orchestration.readiness.scope.label': 'Phạm vi',
@@ -299,12 +334,13 @@ const vi = Object.freeze({
299
334
  'orchestration.readiness.preview.missing': 'Chưa tạo kế hoạch',
300
335
  'orchestration.readiness.preview.blocked': 'Có {count} mục chặn',
301
336
  'orchestration.readiness.preview.ready': 'Kế hoạch sẵn sàng, {count} node',
302
- 'orchestration.readiness.empty.title': 'Viết mục tiêu trước',
303
- 'orchestration.readiness.empty.summary': ' tả kết quả cần đạt, rồi để bộ điều phối tách thành các node.',
337
+ 'orchestration.readiness.empty.title': 'Nhập mục tiêu tác vụ',
338
+ 'orchestration.readiness.empty.summary': 'Xác định mục tiêu, ràng buộc tiêu chí nghiệm thu.',
304
339
  'orchestration.readiness.workflow.title': 'Thiếu Workflow',
305
340
  'orchestration.readiness.workflow.summary': 'Bạn đã chọn chế độ Workflow nhưng chưa chỉ định quy trình tái sử dụng.',
306
- 'orchestration.readiness.preview.title': 'Nên xem trước trước',
307
- 'orchestration.readiness.preview.summary': 'Bản nháp đã đủ hình hài; hãy tạo kế hoạch để kiểm tra node và phụ thuộc.',
341
+ 'orchestration.readiness.preview.title': 'Nên xem trước kế hoạch',
342
+ 'orchestration.readiness.preview.summary': 'Mục tiêu đã có. Dùng /plan để kiểm tra node và phụ thuộc.',
343
+ 'orchestration.readiness.preview.sequenceSummary': 'Bản nháp đã sẵn sàng với {count} yêu cầu theo thứ tự: hoàn tất yêu cầu 1 rồi tiếp tục yêu cầu 2.',
308
344
  'orchestration.readiness.blocked.title': 'Bản xem trước có mục chặn',
309
345
  'orchestration.readiness.blocked.summary': 'Kế hoạch hiện còn {count} mục chặn, hãy xử lý chúng trước.',
310
346
  'orchestration.readiness.warn.title': 'Có thể chạy nhưng có cảnh báo',
@@ -312,8 +348,8 @@ const vi = Object.freeze({
312
348
  'orchestration.readiness.dryRun.title': 'Phù hợp để chạy thử',
313
349
  'orchestration.readiness.dryRun.summary': 'Bây giờ có thể chạy thử an toàn rồi xem kết quả trước khi chạy thật.',
314
350
  'orchestration.readiness.ready.title': 'Sẵn sàng chạy',
315
- 'orchestration.readiness.ready.withFollowUps': 'Mục tiêu chính hành động tiếp theo đã sẵn sàng; thể chạy ngay hoặc đưa vào hàng đợi.',
316
- 'orchestration.readiness.ready.summary': 'Mục tiêu chính đã đủ rõ; thể chạy ngay hoặc đưa vào hàng đợi.',
351
+ 'orchestration.readiness.ready.withFollowUps': '{count} yêu cầu theo thứ tự đã khóa: hoàn tất yêu cầu 1 rồi tiếp tục yêu cầu 2 với ngữ cảnh.',
352
+ 'orchestration.readiness.ready.summary': 'Mục tiêu đã rõ. thể chạy hoặc đưa vào hàng đợi.',
317
353
 
318
354
  // Settings panel
319
355
  'settings.language.sideLabel': 'Ngôn ngữ: {language}',
@@ -701,6 +737,8 @@ const vi = Object.freeze({
701
737
  'modal.claudeConfigEdit.title': 'Chỉnh sửa cấu hình Claude Code',
702
738
  'field.useBuiltinTransform': 'Dùng transform tích hợp (tương thích OpenAI)',
703
739
  'hint.useBuiltinTransform': 'Khi bật, base_url trỏ đến dịch vụ transform tích hợp của codexmate.',
740
+ 'field.transformMaxRetries': 'Số lần thử lại transform tích hợp',
741
+ 'hint.transformMaxRetries': 'Mặc định 2, tối thiểu 2; số lần thử lại sau lần gọi đầu thất bại.',
704
742
  'modal.configTemplate.title': 'Trình soạn thảo template cấu hình (xác nhận thủ công)',
705
743
  'modal.configTemplate.label': 'Template config.toml',
706
744
  'modal.configTemplate.placeholder': 'Chỉnh sửa template config.toml tại đây',
@@ -1089,9 +1127,91 @@ const vi = Object.freeze({
1089
1127
  'usage.range.7d.short': '7 ngày qua',
1090
1128
  'usage.range.30d.short': '30 ngày qua',
1091
1129
  'orchestration.queueStats': 'Hàng đợi: {running} đang chạy · {queued} đang chờ',
1130
+ 'orchestration.rebuilding.status': 'Tạm dừng',
1131
+ 'orchestration.rebuilding.title': 'Đang xây lại',
1132
+ 'orchestration.rebuilding.body': 'Lối vào điều phối tác vụ chỉ hiển thị và hiện chưa thể bấm.',
1092
1133
  'orchestration.hero.kicker': 'Điều phối tác vụ',
1093
- 'orchestration.hero.title': 'Biến mục tiêu thành các bước thực thi',
1094
- 'orchestration.hero.subtitle': 'Viết mục tiêu, xem trước kế hoạch, rồi chạy.',
1134
+ 'orchestration.hero.title': 'Điều phối tác vụ',
1135
+ 'orchestration.hero.subtitle': 'Lập kế hoạch, chạy theo dõi tác vụ với ngữ cảnh workspace/thread.',
1136
+ 'orchestration.quick.kicker': 'Nhập tác vụ',
1137
+ 'orchestration.quick.title': 'Nhập mục tiêu tác vụ',
1138
+ 'orchestration.quick.subtitle': 'Mô tả mục tiêu, ràng buộc và tiêu chí nghiệm thu. Dùng /plan để xem trước trước khi chạy.',
1139
+ 'orchestration.quick.caption': 'Enter thêm yêu cầu; /plan xem trước; Bắt đầu chạy sẽ lập kế hoạch và chạy.',
1140
+ 'orchestration.quick.templates.reviewFix.meta': 'Sửa góp ý review và kiểm thử hồi quy.',
1141
+ 'orchestration.quick.templates.planOnly.meta': 'Chỉ điều tra và lập kế hoạch, không ghi file.',
1142
+ 'orchestration.quick.templates.workflowBatch.meta': 'Dùng Workflow cục bộ cho kiểm tra lặp lại.',
1143
+ 'orchestration.chat.input.label': 'Tin nhắn tác vụ',
1144
+ 'orchestration.chat.input.placeholder': 'Mô tả mục tiêu, ràng buộc và tiêu chí nghiệm thu. Gõ /plan để xem trước.',
1145
+ 'orchestration.chat.input.hint': 'Workspace, thread và chế độ chạy có thể chỉnh trong Nâng cao.',
1146
+ 'orchestration.chat.context.aria': 'Ngữ cảnh tác vụ',
1147
+ 'orchestration.chat.context.workspace.auto': 'Tự phát hiện workspace',
1148
+ 'orchestration.chat.context.workspace.value': 'Workspace {value}',
1149
+ 'orchestration.chat.context.thread.auto': 'Tự tạo thread',
1150
+ 'orchestration.chat.context.thread.value': 'Thread {value}',
1151
+ 'orchestration.chat.context.sequence.empty': 'Thứ tự: chờ yêu cầu 1',
1152
+ 'orchestration.chat.context.sequence.value': 'Thứ tự: {count} yêu cầu',
1153
+ 'orchestration.privacy.workspace.selected': 'Đã chọn workspace',
1154
+ 'orchestration.privacy.thread.selected': 'Đã chọn thread',
1155
+ 'orchestration.chat.thread.aria': 'Cuộc trò chuyện tác vụ',
1156
+ 'orchestration.chat.input.send': 'Thêm yêu cầu',
1157
+ 'orchestration.chat.input.discuss': 'Xem trước kế hoạch',
1158
+ 'orchestration.chat.input.work': 'Bắt đầu chạy',
1159
+ 'orchestration.chat.input.firstHint': 'Nội dung này sẽ thành yêu cầu 1.',
1160
+ 'orchestration.chat.input.sequenceHint': 'Gửi bây giờ sẽ thành yêu cầu {count}.',
1161
+ 'orchestration.chat.input.workHint': 'Nội dung hiện tại sẽ được đưa vào trước khi chạy.',
1162
+ 'orchestration.chat.input.workCaption': 'Enter thêm yêu cầu; /plan chỉ xem trước; Bắt đầu chạy sẽ lập kế hoạch và chạy.',
1163
+ 'orchestration.chat.assistant.contextLabel': 'Ngữ cảnh trước đó',
1164
+ 'orchestration.chat.assistant.contextFallback': 'Đã chọn một tác vụ cũ. Khi tiếp tục, Codexmate sẽ kế thừa thread và workspace của tác vụ đó.',
1165
+ 'orchestration.chat.assistant.resultLabel': 'Kết quả',
1166
+ 'orchestration.chat.assistant.filesSummary': 'Thao tác file: {files}',
1167
+ 'orchestration.chat.assistant.readyLabel': 'Codexmate',
1168
+ 'orchestration.chat.assistant.empty': 'Gửi yêu cầu đầu tiên. Nếu còn yêu cầu thứ hai, hãy gửi tiếp; Codexmate sẽ giữ ngữ cảnh và xử lý theo thứ tự.',
1169
+ 'orchestration.chat.assistant.planLabel': 'Xem trước kế hoạch',
1170
+ 'orchestration.chat.assistant.planSummary': 'Đã tạo kế hoạch: {nodes} node trong {waves} lượt.',
1171
+ 'orchestration.chat.assistant.sequenceReady': 'Đã nhận nhiều yêu cầu. Codexmate sẽ hoàn tất yêu cầu 1 trước, rồi tiếp tục với ngữ cảnh còn lại.',
1172
+ 'orchestration.chat.assistant.singleReady': 'Đã nhận yêu cầu đầu tiên. Có thể thêm yêu cầu 2 hoặc xem trước và chạy ngay.',
1173
+ 'orchestration.chat.user.step': 'Yêu cầu {count}',
1174
+ 'orchestration.chat.meta.thread': 'Thread {value}',
1175
+ 'orchestration.chat.meta.workspace': 'Workspace {value}',
1176
+ 'orchestration.chat.meta.order': 'Chạy tuần tự · giữ ngữ cảnh',
1177
+ 'orchestration.chat.meta.first': 'Hoàn tất mục này trước',
1178
+ 'orchestration.chat.meta.afterPrevious': 'Tiếp tục sau khi yêu cầu trước hoàn tất',
1179
+ 'orchestration.chat.meta.contextKept': 'Ngữ cảnh được giữ trong thread',
1180
+ 'orchestration.chat.meta.previewNext': 'Tiếp theo: xem trước kế hoạch',
1181
+ 'orchestration.quick.checklist.title': 'Kiểm tra sẵn sàng',
1182
+ 'orchestration.quick.checklist.subtitle': 'Chỉ hiển thị blocker ảnh hưởng tới việc chạy.',
1183
+ 'orchestration.quick.status.title': 'Bản nháp hiện tại',
1184
+ 'orchestration.workspace.aria': 'Workspace và bản ghi',
1185
+ 'orchestration.workspace.title': 'Workspace',
1186
+ 'orchestration.workspace.subtitle': 'Chọn dự án và tiếp tục bản ghi.',
1187
+ 'orchestration.workspace.selector': 'Bộ chọn workspace',
1188
+ 'orchestration.workspace.counts': '{runs} runs · {queue} queue',
1189
+ 'orchestration.workspace.newSession': '+ Mới',
1190
+ 'orchestration.workspace.sessions.title': 'Bản ghi',
1191
+ 'orchestration.workspace.sessions.empty.title': 'Chưa có bản ghi cho dự án này',
1192
+ 'orchestration.workspace.sessions.empty.subtitle': 'Tạo bản ghi mới hoặc làm mới để tải lần chạy hiện có.',
1193
+ 'orchestration.workspace.sessions.queueTitle': 'Mục hàng đợi',
1194
+ 'orchestration.workspace.sessions.runTitle': 'Bản ghi chạy',
1195
+ 'orchestration.workspace.sessions.detailsHidden': 'Đã ẩn chi tiết',
1196
+ 'orchestration.workspace.pathHidden': 'Đã ẩn đường dẫn',
1197
+ 'orchestration.agent.aria': 'Trạng thái điều phối tác vụ',
1198
+ 'orchestration.agent.kicker': 'Điều phối tác vụ',
1199
+ 'orchestration.agent.title': 'Console điều phối tác vụ',
1200
+ 'orchestration.agent.subtitle': 'Chọn workspace và bản ghi, chạy tác vụ và xem chi tiết thực thi.',
1201
+ 'orchestration.agent.state.ready': 'Ready',
1202
+ 'orchestration.agent.state.planning': 'Planning',
1203
+ 'orchestration.agent.state.running': 'Running',
1204
+ 'orchestration.agent.surface.workspace': 'Workspace',
1205
+ 'orchestration.agent.surface.session': 'Context',
1206
+ 'orchestration.agent.surface.mode': 'Mode',
1207
+ 'orchestration.agent.surface.trace': 'Trace',
1208
+ 'orchestration.agent.surface.runs': 'runs',
1209
+ 'orchestration.agent.surface.queue': 'queued',
1210
+ 'orchestration.agent.trace.title': 'Live trace',
1211
+ 'orchestration.agent.trace.plan': 'Plan nodes',
1212
+ 'orchestration.agent.trace.queue': 'Queue',
1213
+ 'orchestration.agent.trace.runs': 'Runs',
1214
+ 'orchestration.agent.trace.nodes': 'Run nodes',
1095
1215
  'orchestration.draft.reset': 'Đặt lại bản nháp',
1096
1216
  'orchestration.summary.aria': 'Tóm tắt điều phối tác vụ',
1097
1217
  'orchestration.summary.running': 'Đang chạy',
@@ -1111,14 +1231,15 @@ const vi = Object.freeze({
1111
1231
  'orchestration.templates.workflowBatch.target': 'Chạy một bộ kiểm tra cố định bằng workflow và tóm tắt kết quả',
1112
1232
  'orchestration.templates.workflowBatch.workflowIds': 'diagnose-config\\nsafe-provider-switch',
1113
1233
  'orchestration.templates.workflowBatch.notes': 'Đưa ra kết luận thống nhất; tránh diễn giải lặp lại',
1114
- 'orchestration.fields.target': 'Mục tiêu',
1115
- 'orchestration.fields.target.placeholder': 'vd: Xử comment review PR thêm test regression; tránh các module không liên quan',
1116
- 'orchestration.fields.target.hint': 'Một câu là đủ: kết quả, ràng buộc và tiêu chí chấp nhận.',
1117
- 'orchestration.engine.codex': 'Codex',
1234
+ 'orchestration.fields.target': 'Tin nhắn tác vụ',
1235
+ 'orchestration.fields.target.placeholder': 'vd: sửa comment review PR hiện tại, thêm test regression tránh module không liên quan',
1236
+ 'orchestration.fields.target.hint': 'Một tin nhắn kiểu chat là đủ: kết quả, ràng buộc và tiêu chí chấp nhận.',
1237
+ 'orchestration.engine.openaiChat': 'OpenAI Chat',
1118
1238
  'orchestration.engine.workflow': 'Workflow',
1119
1239
  'orchestration.runMode.write': 'Ghi',
1120
1240
  'orchestration.runMode.readOnly': 'Chỉ đọc',
1121
1241
  'orchestration.runMode.dryRun': 'Thử nghiệm',
1242
+ 'orchestration.pills.sequenceCount': 'Yêu cầu tuần tự {count}',
1122
1243
  'orchestration.pills.hasTitle': 'Có tiêu đề',
1123
1244
  'orchestration.pills.workflowCount': 'Workflows {count}',
1124
1245
  'orchestration.pills.planNodes': 'Kế hoạch {count} nút',
@@ -1127,11 +1248,18 @@ const vi = Object.freeze({
1127
1248
  'orchestration.fields.engine': 'Engine',
1128
1249
  'orchestration.fields.runMode': 'Chế độ chạy',
1129
1250
  'orchestration.advanced.title': 'Nâng cao',
1251
+ 'orchestration.advanced.open': 'Cài đặt',
1130
1252
  'orchestration.fields.title': 'Tiêu đề',
1131
1253
  'orchestration.fields.title.placeholder': 'Tùy chọn. Mặc định là tiêu đề suy ra từ mục tiêu.',
1132
1254
  'orchestration.fields.notes': 'Ghi chú',
1133
1255
  'orchestration.fields.notes.placeholder': 'vd: Chỉ thay đổi tăng dần; không viết lại kiến trúc',
1134
1256
  'orchestration.fields.notes.hint': 'Thêm ranh giới, ràng buộc, quy tắc style hoặc yêu cầu xác minh.',
1257
+ 'orchestration.fields.workspacePath': 'Workspace path',
1258
+ 'orchestration.fields.workspacePath.placeholder': 'e.g. /home/me/project',
1259
+ 'orchestration.fields.workspacePath.hint': 'Plan, run, and queue use this cwd; leave blank to use the server current directory.',
1260
+ 'orchestration.fields.threadId': 'Task thread ID',
1261
+ 'orchestration.fields.threadId.placeholder': 'Optional; generated automatically when empty',
1262
+ 'orchestration.fields.threadId.hint': 'Use the same thread for follow-up requirements, retries, and queue tracking.',
1135
1263
  'orchestration.fields.followUps': 'Theo dõi (mỗi dòng một mục)',
1136
1264
  'orchestration.fields.followUps.placeholder': 'vd:\\nXử lý comment review mới\\nThêm test regression',
1137
1265
  'orchestration.fields.concurrency': 'Đồng thời',
@@ -1147,33 +1275,37 @@ const vi = Object.freeze({
1147
1275
  'orchestration.actions.planning': 'Đang lập kế hoạch...',
1148
1276
  'orchestration.actions.previewOnly': 'Chỉ xem trước',
1149
1277
  'orchestration.actions.preparing': 'Đang chuẩn bị...',
1150
- 'orchestration.actions.generatePlan': 'Tạo kế hoạch',
1151
- 'orchestration.actions.planAndRun': 'Lập kế hoạch & chạy',
1278
+ 'orchestration.actions.generatePlan': 'Gửi /plan',
1279
+ 'orchestration.actions.planAndRun': 'Xem /plan rồi chạy',
1152
1280
  'orchestration.actions.processing': 'Đang xử lý...',
1153
1281
  'orchestration.actions.queueAndStart': 'Xếp hàng & bắt đầu',
1154
- 'orchestration.actions.caption': '"Lập kế hoạch & chạy" làm mới kế hoạch khi cần; dùng "Xếp hàng & bắt đầu" cho chạy hàng loạt.',
1155
- 'orchestration.stage.title': 'Không gian làm việc mở khi có dữ liệu',
1156
- 'orchestration.stage.subtitle': 'Viết mục tiêu trước, rồi xem trước kế hoạch.',
1157
- 'orchestration.stage.pill.target': 'Viết mục tiêu',
1282
+ 'orchestration.actions.caption': 'Khi chạy, kế hoạch được làm mới nếu cần; dùng hàng đợi cho tác vụ hàng loạt.',
1283
+ 'orchestration.stage.title': 'Giai đoạn tác vụ',
1284
+ 'orchestration.stage.subtitle': 'Nhập mục tiêu, xem trước kế hoạch, rồi chạy.',
1285
+ 'orchestration.stage.pill.target': 'Viết tin nhắn',
1158
1286
  'orchestration.stage.pill.preview': 'Xem trước',
1159
1287
  'orchestration.stage.pill.run': 'Chạy hoặc xếp hàng',
1160
1288
  'orchestration.plan.title': 'Xem trước kế hoạch',
1161
- 'orchestration.plan.subtitle': 'Xác nhận nút, đợt và phụ thuộc.',
1289
+ 'orchestration.plan.subtitle': 'Xác nhận node, lượt chạy và phụ thuộc.',
1162
1290
  'orchestration.plan.summary.nodes': 'Nút',
1163
1291
  'orchestration.plan.summary.waves': 'Đợt',
1164
1292
  'orchestration.plan.summary.engine': 'Engine',
1293
+ 'orchestration.plan.summary.threadId': 'Thread ID',
1294
+ 'orchestration.plan.summary.cwd': 'Workspace',
1165
1295
  'orchestration.plan.node.write': 'ghi',
1166
1296
  'orchestration.plan.node.readOnly': 'chỉ đọc',
1167
1297
  'orchestration.labels.dependencies': 'Phụ thuộc: ',
1168
1298
  'orchestration.labels.error': 'Lỗi: ',
1169
1299
  'orchestration.workbench.title': 'Bàn làm việc',
1170
- 'orchestration.workbench.subtitle': 'Chỉ mở rộng khi dữ liệu.',
1300
+ 'orchestration.workbench.subtitle': 'Hiển thị hàng đợi, lịch sử chạy và chi tiết node.',
1171
1301
  'orchestration.queue.start': 'Bắt đầu hàng đợi',
1172
1302
  'orchestration.queue.starting': 'Đang bắt đầu...',
1173
1303
  'orchestration.workbench.tabs.aria': 'Chế độ xem bàn làm việc',
1174
1304
  'orchestration.workbench.tabs.queue': 'Hàng đợi {count}',
1175
1305
  'orchestration.workbench.tabs.runs': 'Lần chạy {count}',
1176
1306
  'orchestration.workbench.tabs.detail': 'Chi tiết lần chạy',
1307
+ 'orchestration.workbench.queueCount': '{count} đang chờ',
1308
+ 'orchestration.workbench.ready': 'Sẵn sàng',
1177
1309
  'orchestration.queue.empty.title': 'Không có tác vụ trong hàng đợi',
1178
1310
  'orchestration.queue.empty.subtitle': 'Xếp hàng tác vụ hàng loạt trước, rồi bắt đầu runner.',
1179
1311
  'orchestration.runs.empty.title': 'Chưa có lần chạy nào',
@@ -1181,13 +1313,32 @@ const vi = Object.freeze({
1181
1313
  'orchestration.detail.refresh': 'Làm mới chi tiết',
1182
1314
  'orchestration.detail.retry': 'Thử lại',
1183
1315
  'orchestration.detail.retrying': 'Đang thử lại...',
1316
+ 'orchestration.detail.continueThread': 'Continue thread',
1184
1317
  'orchestration.detail.empty.title': 'Chọn một lần chạy để xem chi tiết',
1185
1318
  'orchestration.detail.empty.subtitle': 'Chế độ xem này hiển thị trạng thái nút, tóm tắt và log.',
1186
1319
  'orchestration.detail.summary.status': 'Trạng thái',
1187
1320
  'orchestration.detail.summary.duration': 'Thời gian',
1188
1321
  'orchestration.detail.summary.nodes': 'Nút',
1189
1322
  'orchestration.detail.summary.summary': 'Tóm tắt',
1323
+ 'orchestration.detail.context.aria': 'Ngữ cảnh lượt chạy tác vụ',
1324
+ 'orchestration.detail.context.run': 'Run ID',
1190
1325
  'orchestration.detail.node.meta': '{id} · thử {attempts} lần · tự sửa {autoFix}',
1326
+ 'orchestration.openai.status.title': 'Cấu hình chạy OpenAI Chat',
1327
+ 'orchestration.openai.status.subtitle': 'Node tác vụ dùng provider OpenClaw hiện tại; kiểm tra base URL, API key và model trước khi chạy.',
1328
+ 'orchestration.openai.status.provider': 'Provider',
1329
+ 'orchestration.openai.status.model': 'Model',
1330
+ 'orchestration.openai.status.endpoint': 'Endpoint',
1331
+ 'orchestration.openai.status.apiKey': 'API Key',
1332
+ 'orchestration.openai.status.headers': 'Headers thêm',
1333
+ 'orchestration.openai.status.configured': 'Đã cấu hình',
1334
+ 'orchestration.openai.status.missing': 'Thiếu',
1335
+ 'orchestration.openai.status.notSet': 'Chưa đặt',
1336
+ 'orchestration.openai.status.notLoaded': 'Làm mới để tải trạng thái sẵn sàng OpenAI Chat.',
1337
+ 'orchestration.openai.status.configure': 'Cấu hình OpenAI Chat',
1338
+ 'orchestration.detail.node.output': 'AI output',
1339
+ 'orchestration.detail.node.endpoint': 'Endpoint: ',
1340
+ 'orchestration.detail.node.materializedFiles': 'File đã tạo:',
1341
+ 'orchestration.detail.node.workspaceFiles': 'File workspace:',
1191
1342
  'skills.localLabel': '{target} / Skills cục bộ',
1192
1343
  'skills.counts': '{installed} đã cài · {importable} có thể nhập',
1193
1344
  'status.currentSource': 'Nguồn hiện tại',