codexmate 0.0.55 → 0.0.57

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 (49) hide show
  1. package/README.md +2 -0
  2. package/README.vi.md +2 -0
  3. package/README.zh.md +2 -0
  4. package/cli/local-bridge.js +221 -22
  5. package/cli.js +797 -134
  6. package/lib/task-orchestrator.js +90 -21
  7. package/lib/task-workspace-chat.js +292 -0
  8. package/package.json +2 -2
  9. package/web-ui/app.js +57 -129
  10. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  11. package/web-ui/modules/app.computed.session.mjs +210 -0
  12. package/web-ui/modules/app.methods.agents.mjs +3 -0
  13. package/web-ui/modules/app.methods.claude-config.mjs +178 -22
  14. package/web-ui/modules/app.methods.codex-config.mjs +294 -65
  15. package/web-ui/modules/app.methods.navigation.mjs +71 -84
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +15 -1
  18. package/web-ui/modules/app.methods.runtime.mjs +7 -2
  19. package/web-ui/modules/app.methods.session-actions.mjs +25 -12
  20. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  21. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  22. package/web-ui/modules/app.methods.startup-claude.mjs +35 -17
  23. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  24. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  25. package/web-ui/modules/app.methods.web-ui-preferences.mjs +415 -68
  26. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  27. package/web-ui/modules/i18n/locales/en.mjs +187 -28
  28. package/web-ui/modules/i18n/locales/ja.mjs +184 -25
  29. package/web-ui/modules/i18n/locales/vi.mjs +186 -33
  30. package/web-ui/modules/i18n/locales/zh-tw.mjs +187 -28
  31. package/web-ui/modules/i18n/locales/zh.mjs +189 -30
  32. package/web-ui/modules/i18n.mjs +5 -12
  33. package/web-ui/modules/provider-default-names.mjs +25 -0
  34. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  35. package/web-ui/partials/index/layout-header.html +37 -14
  36. package/web-ui/partials/index/modal-health-check.html +69 -5
  37. package/web-ui/partials/index/panel-config-codex.html +2 -2
  38. package/web-ui/partials/index/panel-orchestration.html +489 -282
  39. package/web-ui/partials/index/panel-sessions.html +97 -17
  40. package/web-ui/res/web-ui-render.precompiled.js +1423 -732
  41. package/web-ui/session-helpers.mjs +4 -1
  42. package/web-ui/styles/layout-shell.css +157 -1
  43. package/web-ui/styles/navigation-panels.css +11 -0
  44. package/web-ui/styles/responsive.css +98 -0
  45. package/web-ui/styles/sessions-preview.css +212 -2
  46. package/web-ui/styles/sessions-toolbar-trash.css +61 -18
  47. package/web-ui/styles/skills-list.css +122 -0
  48. package/web-ui/styles/task-orchestration.css +2161 -4
  49. package/web-ui/styles/titles-cards.css +52 -0
@@ -147,6 +147,8 @@ const en = Object.freeze({
147
147
  'side.system': 'System',
148
148
  'side.orchestration': 'Tasks',
149
149
  'side.skills': 'Skills',
150
+ 'side.collapse': 'Collapse sidebar',
151
+ 'side.expand': 'Expand sidebar',
150
152
 
151
153
  // Side rail items
152
154
  'side.overview.doctor': 'Doctor',
@@ -202,7 +204,7 @@ const en = Object.freeze({
202
204
  'title.config': 'Local Configuration Console',
203
205
  'title.sessions': 'Sessions & Export',
204
206
  'title.usage': 'Local Usage & Trends',
205
- 'title.orchestration': 'Task Orchestration',
207
+ 'title.orchestration': 'Task Thread',
206
208
  'title.market': 'Skills Install & Sync',
207
209
  'title.plugins': 'Plugins & Templates',
208
210
  'title.docs': 'CLI Install & Docs',
@@ -213,7 +215,7 @@ const en = Object.freeze({
213
215
  'subtitle.config': 'Manage local configs and models.',
214
216
  'subtitle.sessions': 'Browse and export sessions.',
215
217
  'subtitle.usage': 'View usage for the last 7/30 days.',
216
- 'subtitle.orchestration': 'Plan, queue, run, and review local tasks.',
218
+ 'subtitle.orchestration': 'Chat with Codexmate, then send /plan when the task is ready.',
217
219
  'subtitle.market': 'Manage local skills.',
218
220
  'subtitle.plugins': 'Manage reusable prompt templates and plugins.',
219
221
  'subtitle.docs': 'CLI install commands and troubleshooting.',
@@ -432,6 +434,8 @@ const en = Object.freeze({
432
434
  'toast.apply.fail': 'Failed to apply configuration',
433
435
  'toast.check.success': 'Check passed',
434
436
  'toast.check.fail': 'Check failed',
437
+ 'toast.health.noFailedProviderSelection': 'Select at least one failed provider first',
438
+ 'toast.health.deleteFailedProvidersDone': 'Deleted {count} failed provider(s)',
435
439
  'toast.noChanges': 'No changes detected',
436
440
  'toast.template.loadFail': 'Failed to load template',
437
441
  'toast.template.empty': 'Template cannot be empty',
@@ -660,6 +664,32 @@ const en = Object.freeze({
660
664
  'sessions.preview.rerender': 'Re-render',
661
665
  'sessions.preview.preparing': 'Preparing session content...',
662
666
  'sessions.preview.clipped': 'Showing the latest {count} messages only.',
667
+ 'sessions.workspace.kicker': 'Work memory',
668
+ 'sessions.workspace.title': 'Session reuse summary',
669
+ 'sessions.workspace.subtitle': 'Extracted signals, commands, files, links, and risks from {count} loaded messages.',
670
+ 'sessions.workspace.copy': 'Copy brief',
671
+ 'sessions.workspace.copy.title': 'Session workspace brief',
672
+ 'sessions.workspace.copy.source': 'Source',
673
+ 'sessions.workspace.copy.path': 'Path',
674
+ 'sessions.workspace.copy.empty': 'No session brief to copy yet',
675
+ 'sessions.workspace.copy.success': 'Workspace brief copied',
676
+ 'sessions.workspace.metric.messages': 'Messages',
677
+ 'sessions.workspace.metric.user': 'User',
678
+ 'sessions.workspace.metric.assistant': 'Assistant',
679
+ 'sessions.workspace.metric.commands': 'Commands',
680
+ 'sessions.workspace.metric.artifacts': 'Artifacts',
681
+ 'sessions.workspace.metric.risks': 'Risks / todos',
682
+ 'sessions.workspace.signals': 'Task signals',
683
+ 'sessions.workspace.commands': 'Reusable commands',
684
+ 'sessions.workspace.files': 'Related files',
685
+ 'sessions.workspace.links': 'Related links',
686
+ 'sessions.workspace.risks': 'Risks and todos',
687
+ 'sessions.workspace.nextSteps': 'Next steps',
688
+ 'sessions.workspace.empty': 'No strong signals yet. Continue with the raw messages below.',
689
+ 'sessions.workspace.noneCommands': 'No command signals',
690
+ 'sessions.workspace.noneFiles': 'No file signals',
691
+ 'sessions.workspace.noneLinks': 'No link signals',
692
+ 'sessions.workspace.noneRisks': 'No risks or todos detected',
663
693
  'sessions.preview.shownCount': 'Shown {shown} / {total}',
664
694
  'sessions.preview.loadMore': 'Load more (remaining {remain})',
665
695
  'sessions.preview.loadingMore': 'Loading older messages...',
@@ -895,7 +925,18 @@ const en = Object.freeze({
895
925
  'config.health.title': 'Config health check',
896
926
  'config.health.run': 'Run check',
897
927
  'config.health.running': 'Checking...',
898
- 'config.health.hint': 'Runs availability probes across all providers and refreshes latency badges.',
928
+ 'config.health.hint': 'Checks only the currently selected provider; unselected providers do not count as this check\'s errors.',
929
+ 'config.health.codexHint': 'Checks the current Codex route provider, endpoint, auth, and model through the local bridge.',
930
+ 'config.health.providersSummary': 'Providers: {total} total · {green} ok · {yellow} config issues · {red} failed',
931
+ 'config.health.failedProviders.title': 'Failed providers to delete',
932
+ 'config.health.failedProviders.selectAria': 'Select failed provider {name} for deletion',
933
+ 'config.health.failedProviders.clearSelection': 'Clear',
934
+ 'config.health.failedProviders.selectAll': 'Select all',
935
+ 'config.health.failedProviders.selectAllAria': 'Select all deletable failed providers',
936
+ 'config.health.failedProviders.notDeletable': 'Reserved/system provider; cannot be deleted here.',
937
+ 'config.health.failedProviders.writeRequired': 'Enable provider writes in this tab before deleting.',
938
+ 'config.health.failedProviders.deleteSelected': 'Remove selected configs',
939
+ 'config.health.failedProviders.deleting': 'Deleting...',
899
940
  'config.health.progress': '{done}/{total} done · {failed} failed',
900
941
  'config.health.ok': 'Passed',
901
942
  'config.health.fail': 'Failed',
@@ -919,19 +960,105 @@ const en = Object.freeze({
919
960
  'usage.range.7d.short': 'Last 7 days',
920
961
  'usage.range.30d.short': 'Last 30 days',
921
962
  'orchestration.queueStats': 'Queue: {running} running · {queued} queued',
922
- 'orchestration.hero.kicker': 'Task orchestration',
923
- 'orchestration.hero.title': 'Turn goals into executable steps',
924
- 'orchestration.hero.subtitle': 'Write a target, preview a plan, then run.',
963
+ 'orchestration.rebuilding.status': 'Paused',
964
+ 'orchestration.rebuilding.title': 'Rebuilding',
965
+ 'orchestration.rebuilding.body': 'Task orchestration is visible but disabled for now.',
966
+ 'orchestration.hero.kicker': 'ORCHESTRATION',
967
+ 'orchestration.hero.title': 'Task orchestration',
968
+ 'orchestration.hero.subtitle': 'Plan, run, and trace tasks with workspace and thread context.',
969
+ 'orchestration.quick.kicker': 'Task input',
970
+ 'orchestration.quick.title': 'Enter a task objective',
971
+ 'orchestration.quick.subtitle': 'Describe the objective, constraints, and acceptance criteria. Use /plan to preview before running.',
972
+ 'orchestration.quick.caption': 'Enter appends a request; /plan previews; Start work plans and runs.',
973
+ 'orchestration.quick.templates.reviewFix.meta': 'Fix review feedback and validate regressions.',
974
+ 'orchestration.quick.templates.planOnly.meta': 'Investigate first without writing files.',
975
+ 'orchestration.quick.templates.workflowBatch.meta': 'Reuse local workflows for repeatable checks.',
976
+ 'orchestration.chat.input.label': 'Task message',
977
+ 'orchestration.chat.input.placeholder': 'Describe the objective, constraints, and acceptance criteria. Type /plan to preview.',
978
+ 'orchestration.chat.input.hint': 'Workspace, thread, and run mode can be adjusted in Advanced.',
979
+ 'orchestration.chat.context.aria': 'Task context',
980
+ 'orchestration.chat.context.workspace.auto': 'Workspace auto-detected',
981
+ 'orchestration.chat.context.workspace.value': 'Workspace {value}',
982
+ 'orchestration.chat.context.thread.auto': 'Thread auto-generated',
983
+ 'orchestration.chat.context.thread.value': 'Thread {value}',
984
+ 'orchestration.chat.context.sequence.empty': 'Sequence: waiting for request 1',
985
+ 'orchestration.chat.context.sequence.value': 'Sequence: {count} request(s)',
986
+ 'orchestration.privacy.workspace.selected': 'Workspace selected',
987
+ 'orchestration.privacy.thread.selected': 'Thread selected',
988
+ 'orchestration.chat.thread.aria': 'Task conversation',
989
+ 'orchestration.chat.input.send': 'Append request',
990
+ 'orchestration.chat.input.discuss': 'Preview plan',
991
+ 'orchestration.chat.input.work': 'Start work',
992
+ 'orchestration.chat.input.firstHint': 'This becomes request 1.',
993
+ 'orchestration.chat.input.workHint': 'Current input is included before execution.',
994
+ 'orchestration.chat.input.workCaption': 'Enter appends a request; /plan previews only; Start work plans and runs.',
995
+ 'orchestration.chat.input.sequenceHint': 'Sending now becomes request {count}.',
996
+ 'orchestration.chat.assistant.contextLabel': 'Previous context',
997
+ 'orchestration.chat.assistant.contextFallback': 'A previous task is selected. Continuing will inherit its thread and workspace.',
998
+ 'orchestration.chat.assistant.resultLabel': 'Result',
999
+ 'orchestration.chat.assistant.filesSummary': 'File operations: {files}',
1000
+ 'orchestration.chat.assistant.readyLabel': 'Codexmate',
1001
+ 'orchestration.chat.assistant.empty': 'Enter a task objective. Multiple requests run in order with context preserved.',
1002
+ 'orchestration.chat.assistant.planLabel': 'Plan preview',
1003
+ 'orchestration.chat.assistant.planSummary': 'Plan ready: {nodes} nodes across {waves} waves.',
1004
+ 'orchestration.chat.assistant.sequenceReady': 'Multiple requests received. Codexmate will finish request 1 first, then continue with the remaining context.',
1005
+ 'orchestration.chat.assistant.singleReady': 'Request received. Add another request or type /plan to preview.',
1006
+ 'orchestration.chat.user.step': 'Request {count}',
1007
+ 'orchestration.chat.meta.thread': 'Thread {value}',
1008
+ 'orchestration.chat.meta.workspace': 'Workspace {value}',
1009
+ 'orchestration.chat.meta.order': 'Sequential execution · context kept',
1010
+ 'orchestration.chat.meta.first': 'Finish this first',
1011
+ 'orchestration.chat.meta.afterPrevious': 'Continue after the previous request completes',
1012
+ 'orchestration.chat.meta.contextKept': 'Context is kept on the thread',
1013
+ 'orchestration.chat.meta.previewNext': 'Next: /plan preview',
1014
+ 'orchestration.quick.checklist.title': 'Ready check',
1015
+ 'orchestration.quick.checklist.subtitle': 'Only the blockers that affect execution stay visible.',
1016
+ 'orchestration.agent.aria': 'Task orchestration state',
1017
+ 'orchestration.agent.kicker': 'Task orchestration',
1018
+ 'orchestration.agent.title': 'Task orchestration console',
1019
+ 'orchestration.agent.subtitle': 'Select a workspace and session, run tasks, and inspect execution details.',
1020
+ 'orchestration.agent.state.ready': 'Ready',
1021
+ 'orchestration.agent.state.planning': 'Planning',
1022
+ 'orchestration.agent.state.running': 'Running',
1023
+ 'orchestration.agent.surface.workspace': 'Workspace',
1024
+ 'orchestration.agent.surface.session': 'Context',
1025
+ 'orchestration.agent.surface.mode': 'Mode',
1026
+ 'orchestration.agent.surface.trace': 'Trace',
1027
+ 'orchestration.agent.surface.runs': 'runs',
1028
+ 'orchestration.agent.surface.queue': 'queued',
1029
+ 'orchestration.agent.trace.title': 'Live trace',
1030
+ 'orchestration.agent.trace.plan': 'Plan nodes',
1031
+ 'orchestration.agent.trace.queue': 'Queue',
1032
+ 'orchestration.agent.trace.runs': 'Runs',
1033
+ 'orchestration.agent.trace.nodes': 'Run nodes',
1034
+ 'orchestration.quick.status.title': 'Current draft',
1035
+ 'orchestration.workspace.aria': 'Workspace and sessions',
1036
+ 'orchestration.workspace.title': 'Workspace',
1037
+ 'orchestration.workspace.subtitle': 'Pick a project, then create or resume sessions for it.',
1038
+ 'orchestration.workspace.selector': 'Workspace selector',
1039
+ 'orchestration.workspace.counts': '{runs} runs · {queue} queue',
1040
+ 'orchestration.workspace.newSession': '+ New',
1041
+ 'orchestration.workspace.sessions.title': 'Records',
1042
+ 'orchestration.workspace.sessions.empty.title': 'No records yet',
1043
+ 'orchestration.workspace.sessions.empty.subtitle': 'Create a record or refresh to load existing runs.',
1044
+ 'orchestration.workspace.sessions.queueTitle': 'Queued item',
1045
+ 'orchestration.workspace.sessions.runTitle': 'Run record',
1046
+ 'orchestration.workspace.sessions.detailsHidden': 'Details hidden for privacy',
1047
+ 'orchestration.workspace.pathHidden': 'Path hidden for privacy',
925
1048
  'orchestration.draft.reset': 'Reset draft',
926
1049
  'orchestration.summary.aria': 'Task orchestration summary',
927
1050
  'orchestration.summary.running': 'Running',
928
1051
  'orchestration.summary.queued': 'Queued',
929
1052
  'orchestration.summary.runs': 'Runs',
930
- 'orchestration.readiness.target.label': 'Target',
931
- 'orchestration.readiness.target.done': 'Target written',
932
- 'orchestration.readiness.target.missing': 'Target not written yet',
1053
+ 'orchestration.readiness.target.label': 'Task message',
1054
+ 'orchestration.readiness.target.done': 'Task message written',
1055
+ 'orchestration.readiness.target.missing': 'Task message not written yet',
1056
+ 'orchestration.readiness.sequence.label': 'Sequence',
1057
+ 'orchestration.readiness.sequence.missing': 'Send request 1 first',
1058
+ 'orchestration.readiness.sequence.single': 'Only request 1 is set; send another message to create request 2.',
1059
+ 'orchestration.readiness.sequence.multiple': '{count} requests will run in order: finish request 1, then continue request 2.',
933
1060
  'orchestration.readiness.engine.label': 'Execution strategy',
934
- 'orchestration.readiness.engine.codex': 'Use Codex to plan nodes',
1061
+ 'orchestration.readiness.engine.openaiChat': 'Use OpenAI Chat-compatible nodes',
935
1062
  'orchestration.readiness.workflow.done': '{count} workflow(s) selected',
936
1063
  'orchestration.readiness.workflow.missing': 'No Workflow ID selected yet',
937
1064
  'orchestration.readiness.scope.label': 'Scope',
@@ -942,12 +1069,13 @@ const en = Object.freeze({
942
1069
  'orchestration.readiness.preview.missing': 'No plan generated yet',
943
1070
  'orchestration.readiness.preview.blocked': '{count} blocker(s)',
944
1071
  'orchestration.readiness.preview.ready': 'Plan ready, {count} node(s)',
945
- 'orchestration.readiness.empty.title': 'Write a target first',
946
- 'orchestration.readiness.empty.summary': 'Describe the outcome first, then let the orchestrator split it into nodes.',
1072
+ 'orchestration.readiness.empty.title': 'Write a task message first',
1073
+ 'orchestration.readiness.empty.summary': 'Define the objective, constraints, and acceptance criteria.',
947
1074
  'orchestration.readiness.workflow.title': 'Workflow missing',
948
1075
  'orchestration.readiness.workflow.summary': 'Workflow mode is selected, but no reusable workflow is specified yet.',
949
- 'orchestration.readiness.preview.title': 'Preview recommended',
950
- 'orchestration.readiness.preview.summary': 'The draft is ready; generate a plan first to confirm nodes and dependencies.',
1076
+ 'orchestration.readiness.preview.title': 'Plan preview recommended',
1077
+ 'orchestration.readiness.preview.summary': 'Objective is set. Use /plan to confirm nodes and dependencies.',
1078
+ 'orchestration.readiness.preview.sequenceSummary': 'The draft is ready with {count} ordered requests: finish request 1, then continue request 2.',
951
1079
  'orchestration.readiness.blocked.title': 'Preview has blockers',
952
1080
  'orchestration.readiness.blocked.summary': 'The current plan still has {count} blocker(s). Resolve them first.',
953
1081
  'orchestration.readiness.warn.title': 'Runnable with warnings',
@@ -955,8 +1083,8 @@ const en = Object.freeze({
955
1083
  'orchestration.readiness.dryRun.title': 'Good fit for dry run',
956
1084
  'orchestration.readiness.dryRun.summary': 'You can safely run a dry run now and inspect the result before executing for real.',
957
1085
  'orchestration.readiness.ready.title': 'Ready to run',
958
- 'orchestration.readiness.ready.withFollowUps': 'The main target and follow-up actions are ready; run directly or enqueue it.',
959
- 'orchestration.readiness.ready.summary': 'The main target is clear enough; run directly or enqueue it.',
1086
+ 'orchestration.readiness.ready.withFollowUps': '{count} ordered requests are locked: finish request 1, then continue request 2 with context.',
1087
+ 'orchestration.readiness.ready.summary': 'Objective is clear. Run now or enqueue.',
960
1088
  'orchestration.step1.title': 'Start with the outcome',
961
1089
  'orchestration.step1.subtitle': 'Only include what affects execution.',
962
1090
  'orchestration.templates.title': 'Quick examples',
@@ -971,14 +1099,15 @@ const en = Object.freeze({
971
1099
  'orchestration.templates.workflowBatch.target': 'Run a fixed set of checks using workflows and summarize results',
972
1100
  'orchestration.templates.workflowBatch.workflowIds': 'diagnose-config\nsafe-provider-switch',
973
1101
  'orchestration.templates.workflowBatch.notes': 'Produce a unified conclusion; avoid repetitive narration',
974
- 'orchestration.fields.target': 'Target',
975
- 'orchestration.fields.target.placeholder': 'e.g. Address PR review comments and add regression tests; avoid unrelated modules',
976
- 'orchestration.fields.target.hint': 'One sentence is enough: outcome, constraints, and acceptance criteria.',
977
- 'orchestration.engine.codex': 'Codex',
1102
+ 'orchestration.fields.target': 'Task message',
1103
+ 'orchestration.fields.target.placeholder': 'e.g. Fix current PR review comments, add regression tests, and avoid unrelated modules',
1104
+ 'orchestration.fields.target.hint': 'One chat-style message is enough: outcome, constraints, and acceptance criteria.',
1105
+ 'orchestration.engine.openaiChat': 'OpenAI Chat',
978
1106
  'orchestration.engine.workflow': 'Workflow',
979
1107
  'orchestration.runMode.write': 'Write',
980
1108
  'orchestration.runMode.readOnly': 'Read-only',
981
1109
  'orchestration.runMode.dryRun': 'Dry run',
1110
+ 'orchestration.pills.sequenceCount': 'Sequential requests {count}',
982
1111
  'orchestration.pills.hasTitle': 'Title set',
983
1112
  'orchestration.pills.workflowCount': 'Workflows {count}',
984
1113
  'orchestration.pills.planNodes': 'Plan {count} nodes',
@@ -987,11 +1116,18 @@ const en = Object.freeze({
987
1116
  'orchestration.fields.engine': 'Engine',
988
1117
  'orchestration.fields.runMode': 'Run mode',
989
1118
  'orchestration.advanced.title': 'Advanced',
1119
+ 'orchestration.advanced.open': 'Settings',
990
1120
  'orchestration.fields.title': 'Title',
991
1121
  'orchestration.fields.title.placeholder': 'Optional. Defaults to an inferred title from target.',
992
1122
  'orchestration.fields.notes': 'Notes',
993
1123
  'orchestration.fields.notes.placeholder': 'e.g. Do incremental changes only; do not rewrite architecture',
994
1124
  'orchestration.fields.notes.hint': 'Add boundaries, constraints, style rules, or verification requirements.',
1125
+ 'orchestration.fields.workspacePath': 'Workspace path',
1126
+ 'orchestration.fields.workspacePath.placeholder': 'e.g. /home/me/project',
1127
+ 'orchestration.fields.workspacePath.hint': 'Plan, run, and queue use this cwd; leave blank to use the server current directory.',
1128
+ 'orchestration.fields.threadId': 'Task thread ID',
1129
+ 'orchestration.fields.threadId.placeholder': 'Optional; generated automatically when empty',
1130
+ 'orchestration.fields.threadId.hint': 'Use the same thread for follow-up requirements, retries, and queue tracking.',
995
1131
  'orchestration.fields.followUps': 'Follow-ups (one per line)',
996
1132
  'orchestration.fields.followUps.placeholder': 'e.g.\nAddress new review comments\nAdd regression tests',
997
1133
  'orchestration.fields.concurrency': 'Concurrency',
@@ -1007,14 +1143,14 @@ const en = Object.freeze({
1007
1143
  'orchestration.actions.planning': 'Planning...',
1008
1144
  'orchestration.actions.previewOnly': 'Preview only',
1009
1145
  'orchestration.actions.preparing': 'Preparing...',
1010
- 'orchestration.actions.generatePlan': 'Generate plan',
1011
- 'orchestration.actions.planAndRun': 'Plan & run',
1146
+ 'orchestration.actions.generatePlan': 'Send /plan',
1147
+ 'orchestration.actions.planAndRun': 'Preview /plan and run',
1012
1148
  'orchestration.actions.processing': 'Working...',
1013
1149
  'orchestration.actions.queueAndStart': 'Queue & start',
1014
- 'orchestration.actions.caption': '“Plan & run” refreshes the plan when needed; use “Queue & start” for batch runs.',
1015
- 'orchestration.stage.title': 'Workspace opens when there is data',
1016
- 'orchestration.stage.subtitle': 'Write the target first, then preview the plan.',
1017
- 'orchestration.stage.pill.target': 'Write target',
1150
+ 'orchestration.actions.caption': 'Execution refreshes the plan when needed; use queue mode for batch runs.',
1151
+ 'orchestration.stage.title': 'Task stage',
1152
+ 'orchestration.stage.subtitle': 'Define the objective, preview the plan, then run.',
1153
+ 'orchestration.stage.pill.target': 'Write message',
1018
1154
  'orchestration.stage.pill.preview': 'Preview',
1019
1155
  'orchestration.stage.pill.run': 'Run or queue',
1020
1156
  'orchestration.plan.title': 'Plan preview',
@@ -1022,18 +1158,22 @@ const en = Object.freeze({
1022
1158
  'orchestration.plan.summary.nodes': 'Nodes',
1023
1159
  'orchestration.plan.summary.waves': 'Waves',
1024
1160
  'orchestration.plan.summary.engine': 'Engine',
1161
+ 'orchestration.plan.summary.threadId': 'Thread ID',
1162
+ 'orchestration.plan.summary.cwd': 'Workspace',
1025
1163
  'orchestration.plan.node.write': 'write',
1026
1164
  'orchestration.plan.node.readOnly': 'read-only',
1027
1165
  'orchestration.labels.dependencies': 'Dependencies: ',
1028
1166
  'orchestration.labels.error': 'Error: ',
1029
1167
  'orchestration.workbench.title': 'Workbench',
1030
- 'orchestration.workbench.subtitle': 'Only expands when there is data.',
1168
+ 'orchestration.workbench.subtitle': 'Queue, run history, and node details.',
1031
1169
  'orchestration.queue.start': 'Start queue',
1032
1170
  'orchestration.queue.starting': 'Starting...',
1033
1171
  'orchestration.workbench.tabs.aria': 'Workbench views',
1034
1172
  'orchestration.workbench.tabs.queue': 'Queue {count}',
1035
1173
  'orchestration.workbench.tabs.runs': 'Runs {count}',
1036
1174
  'orchestration.workbench.tabs.detail': 'Run detail',
1175
+ 'orchestration.workbench.queueCount': '{count} queued',
1176
+ 'orchestration.workbench.ready': 'Ready',
1037
1177
  'orchestration.queue.empty.title': 'No queued tasks',
1038
1178
  'orchestration.queue.empty.subtitle': 'Queue batch tasks first, then start the runner.',
1039
1179
  'orchestration.runs.empty.title': 'No runs yet',
@@ -1041,13 +1181,32 @@ const en = Object.freeze({
1041
1181
  'orchestration.detail.refresh': 'Refresh detail',
1042
1182
  'orchestration.detail.retry': 'Retry',
1043
1183
  'orchestration.detail.retrying': 'Retrying...',
1184
+ 'orchestration.detail.continueThread': 'Continue thread',
1044
1185
  'orchestration.detail.empty.title': 'Select a run to view details',
1045
1186
  'orchestration.detail.empty.subtitle': 'This view shows node statuses, summaries, and logs.',
1046
1187
  'orchestration.detail.summary.status': 'Status',
1047
1188
  'orchestration.detail.summary.duration': 'Duration',
1048
1189
  'orchestration.detail.summary.nodes': 'Nodes',
1049
1190
  'orchestration.detail.summary.summary': 'Summary',
1191
+ 'orchestration.detail.context.aria': 'Task run context',
1192
+ 'orchestration.detail.context.run': 'Run ID',
1050
1193
  'orchestration.detail.node.meta': '{id} · attempts {attempts} · auto-fix {autoFix}',
1194
+ 'orchestration.openai.status.title': 'OpenAI Chat runtime',
1195
+ 'orchestration.openai.status.subtitle': 'Task nodes use the current OpenAI Chat configuration: base URL, API key, and model are checked before execution.',
1196
+ 'orchestration.openai.status.provider': 'Provider',
1197
+ 'orchestration.openai.status.model': 'Model',
1198
+ 'orchestration.openai.status.endpoint': 'Endpoint',
1199
+ 'orchestration.openai.status.apiKey': 'API key',
1200
+ 'orchestration.openai.status.headers': 'Extra headers',
1201
+ 'orchestration.openai.status.configured': 'Configured',
1202
+ 'orchestration.openai.status.missing': 'Missing',
1203
+ 'orchestration.openai.status.notSet': 'Not set',
1204
+ 'orchestration.openai.status.notLoaded': 'Refresh to load OpenAI Chat readiness.',
1205
+ 'orchestration.openai.status.configure': 'Configure OpenAI Chat',
1206
+ 'orchestration.detail.node.output': 'AI output',
1207
+ 'orchestration.detail.node.endpoint': 'Endpoint: ',
1208
+ 'orchestration.detail.node.materializedFiles': 'Materialized files:',
1209
+ 'orchestration.detail.node.workspaceFiles': 'Workspace files:',
1051
1210
  'skills.localLabel': '{target} / Local skills',
1052
1211
  'skills.counts': '{installed} installed · {importable} importable',
1053
1212
 
@@ -1301,7 +1460,7 @@ const en = Object.freeze({
1301
1460
  'claude.health.title': 'Config health check',
1302
1461
  'claude.health.run': 'Run check',
1303
1462
  'claude.health.running': 'Checking...',
1304
- 'claude.health.hint': 'Runs availability probes for all Claude configs and refreshes the latency badges.',
1463
+ 'claude.health.hint': 'Checks only the currently selected Claude config; unselected configs do not count as this check\'s errors.',
1305
1464
  'claude.health.progress': '{done}/{total} done · {failed} failed',
1306
1465
  'claude.md.title': 'CLAUDE.md',
1307
1466
  'claude.md.open': 'Open CLAUDE.md',