@zq-silk/yui 2.16.0 → 2.18.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.
Files changed (118) hide show
  1. package/dist/cli/commandCatalog.js +19 -12
  2. package/dist/cli/interactionCandidates.js +20 -5
  3. package/dist/cli/interactionPolicy.js +5 -4
  4. package/dist/cli/roleWizard.js +7 -0
  5. package/dist/commands/controllerCommands.js +13 -4
  6. package/dist/commands/durableJobCommands.js +50 -3
  7. package/dist/commands/globalRoleCommands.js +31 -14
  8. package/dist/commands/inboxCommands.js +1 -0
  9. package/dist/commands/operatorCommands.js +12 -2
  10. package/dist/commands/profileCommands.js +19 -2
  11. package/dist/commands/roleConfiguration.js +3 -0
  12. package/dist/commands/taskCommands.js +16 -0
  13. package/dist/commands/taskRoleRuntimeStatus.js +3 -0
  14. package/dist/controlPlaneCli.js +21 -4
  15. package/dist/controller/agentJobControl.js +9 -1
  16. package/dist/controller/clientRuntime.js +34 -13
  17. package/dist/controller/controller.js +35 -22
  18. package/dist/controller/diagnosticJournal.js +214 -0
  19. package/dist/controller/fileSchedulerStoreAdapter.js +174 -105
  20. package/dist/controller/globalInputDelivery.js +19 -9
  21. package/dist/controller/globalRuntimeAttention.js +11 -3
  22. package/dist/controller/jobControl.js +1 -1
  23. package/dist/controller/jobDefinitionControl.js +24 -13
  24. package/dist/controller/jobSupervisor.js +4 -0
  25. package/dist/controller/providerRetryAdmission.js +9 -0
  26. package/dist/controller/providerRetryDelivery.js +16 -0
  27. package/dist/controller/runtime.js +80 -4
  28. package/dist/controller/runtimeLaunchCoordinator.js +3 -1
  29. package/dist/controller/workerSchedulerStore.js +24 -0
  30. package/dist/core/boundedRpc.js +4 -0
  31. package/dist/core/controllerServer.js +1 -1
  32. package/dist/core/controllerTelemetry.js +92 -19
  33. package/dist/executor/fileRoleLaunchPlanner.js +3 -0
  34. package/dist/job/globalShell.js +51 -0
  35. package/dist/job/jobBusinessResult.js +4 -3
  36. package/dist/job/jobDefinition.js +6 -1
  37. package/dist/job/jobRunner.js +9 -0
  38. package/dist/job/scheduleService.js +2 -0
  39. package/dist/message/globalInboxRecovery.js +30 -19
  40. package/dist/message/globalProviderRetry.js +7 -1
  41. package/dist/message/messageContinuation.js +4 -0
  42. package/dist/output/rolePresentation.js +3 -0
  43. package/dist/profile/agentProfile.js +8 -0
  44. package/dist/profile/agentProfileRuntime.js +16 -1
  45. package/dist/review/reviewDecision.js +6 -0
  46. package/dist/role/availability.js +28 -0
  47. package/dist/role/role.js +6 -0
  48. package/dist/runtime/builtinAgentErrorMappers.js +4 -0
  49. package/dist/runtime/codexNativeAccess.js +21 -4
  50. package/dist/runtime/globalSessionHealth.js +39 -0
  51. package/dist/runtime/tmuxAdapters.js +5 -0
  52. package/dist/scheduler/activeRoleRunDelivery.js +9 -0
  53. package/dist/scheduler/leaderWakeupProcessor.js +8 -1
  54. package/dist/scheduler/roleRunLiveness.js +3 -0
  55. package/dist/scheduler/roleRunStall.js +10 -10
  56. package/dist/storage/persistenceWorker.js +41 -19
  57. package/dist/storage/sqliteSchema.js +43 -9
  58. package/dist/storage/sqliteStore.js +86 -8
  59. package/dist/storage/storageVersions.js +1 -1
  60. package/dist/storage/storeRpc.js +25 -11
  61. package/dist/storage/taskReadRevisionSchema.js +39 -0
  62. package/dist/web/assets/client/app/catalog.js +0 -29
  63. package/dist/web/assets/client/app/jobs.js +115 -0
  64. package/dist/web/assets/client/app/main.js +32 -28
  65. package/dist/web/assets/client/app/manage.js +1 -0
  66. package/dist/web/assets/client/app/settings.js +1 -5
  67. package/dist/web/assets/client/app/taskView.js +7 -11
  68. package/dist/web/assets/client/i18n/en.js +265 -36
  69. package/dist/web/assets/client/i18n/zh-CN.js +264 -35
  70. package/dist/web/assets/client/index.js +4 -0
  71. package/dist/web/assets/client/layout/manageShell.js +61 -15
  72. package/dist/web/assets/client/layout/router.js +2 -1
  73. package/dist/web/assets/client/layout/shortcuts.js +2 -2
  74. package/dist/web/assets/client/layout/workspace.js +99 -112
  75. package/dist/web/assets/client/lib/prefs.js +1 -1
  76. package/dist/web/assets/client/ui/primitives.js +15 -2
  77. package/dist/web/assets/client/views/dock/conversation.js +421 -123
  78. package/dist/web/assets/client/views/dock/session.js +229 -0
  79. package/dist/web/assets/client/views/dock/terminal.js +48 -39
  80. package/dist/web/assets/client/views/jobs.js +1042 -160
  81. package/dist/web/assets/client/views/overview.js +2 -2
  82. package/dist/web/assets/client/views/sidebar.js +3 -0
  83. package/dist/web/assets/client/views/task/page.js +2 -12
  84. package/dist/web/assets/shared/manageNav.js +3 -1
  85. package/dist/web/assets/shell/appRail.js +2 -1
  86. package/dist/web/assets/shell/dock.js +9 -27
  87. package/dist/web/assets/shell/manage.js +7 -2
  88. package/dist/web/assets/shell/models.js +4 -3
  89. package/dist/web/assets/shell/settingsContent.js +0 -3
  90. package/dist/web/assets/shell/sidebar.js +0 -1
  91. package/dist/web/assets/styles/views/conversation.js +96 -17
  92. package/dist/web/assets/styles/views/dock.js +17 -5
  93. package/dist/web/assets/styles/views/jobs.js +301 -12
  94. package/dist/web/assets/styles/views/sidebar.js +1 -2
  95. package/dist/web/assets/styles/views/task.js +1 -2
  96. package/dist/web/assets/styles/views/terminal.js +12 -8
  97. package/dist/web/webConversation.js +1 -0
  98. package/dist/web/webServer.js +28 -1
  99. package/dist/web/webSettings.js +10 -2
  100. package/docs/global-shell-jobs.md +78 -0
  101. package/docs/job-runs.md +6 -3
  102. package/docs/managed-turn-and-session-runtime.md +84 -0
  103. package/docs/managed-turn-and-session-runtime.zh-CN.md +57 -0
  104. package/docs/release-workflow.md +67 -0
  105. package/docs/release-workflow.zh-CN.md +48 -0
  106. package/docs/roles-and-configuration.md +45 -1
  107. package/docs/roles-and-configuration.zh-CN.md +35 -0
  108. package/docs/storage-baseline.md +19 -1
  109. package/docs/storage-baseline.zh-CN.md +10 -1
  110. package/docs/testing/review-evaluation.md +35 -1
  111. package/docs/testing/review-evaluation.zh-CN.md +25 -1
  112. package/docs/testing/verification-levels.md +2 -2
  113. package/docs/testing/verification-levels.zh-CN.md +2 -2
  114. package/package.json +1 -1
  115. package/skills/yui-leader/VERSION +1 -1
  116. package/skills/yui-leader/references/execution.md +19 -8
  117. package/skills/yui-reviewer/SKILL.md +13 -2
  118. package/skills/yui-reviewer/VERSION +1 -1
@@ -50,7 +50,6 @@ export const EN = {
50
50
  "permissions.empty": "No matching templates.",
51
51
  "permissions.retry": "Retry read",
52
52
  "tabs.jobs": "Jobs",
53
- "settings.section.jobs": "Jobs & schedules",
54
53
  "jobs.builtinSync": "Built-in Project sync · safe fast-forward only",
55
54
  "jobs.automatic": "Automatic sync preference",
56
55
  "jobs.syncEvery": "Sync interval (milliseconds, minimum 60000)",
@@ -62,14 +61,52 @@ export const EN = {
62
61
  "jobs.executor": "Execution method",
63
62
  "jobs.executionTask": "Open execution Task",
64
63
  "jobs.sourceJob": "Created by Job / Run",
65
- "jobs.taskCategory": "Task category",
66
- "jobs.category.ordinary": "Ordinary Tasks",
67
- "jobs.category.job": "Job execution Tasks",
68
- "jobs.category.all": "All Tasks",
69
- "jobs.categoryShort.ordinary": "Ordinary",
70
- "jobs.categoryShort.job": "Jobs",
71
- "jobs.categoryShort.all": "All",
72
- "jobs.recentSuccess": "Most recent successful Run",
64
+ "nav.jobs": "Jobs",
65
+ "jobs.scopeLabel": "Owner",
66
+ "jobs.scopeHelp": "Global, or one Task that owns Jobs. Counts, search and the list describe only this scope.",
67
+ "jobs.scopesError": "Owner list unavailable:",
68
+ "jobs.search": "Search Jobs",
69
+ "jobs.count": "{total} Jobs",
70
+ "jobs.countFiltered": "{shown} of {total} Jobs",
71
+ "jobs.noMatch": "No Jobs in this scope match the search.",
72
+ "jobs.noSchedule": "No plan",
73
+ "jobs.noRunsShort": "No Runs",
74
+ "jobs.nextShort": "next",
75
+ "jobs.plan": "Plan",
76
+ "jobs.definition": "Definition",
77
+ "jobs.execution": "Execution",
78
+ "jobs.runVsPlan": "A Run's status describes one execution; it does not turn the plan on or off.",
79
+ "jobs.type": "Type",
80
+ "jobs.type.projectSync": "Project sync",
81
+ "jobs.kind.shell": "Shell command",
82
+ "jobs.form.scripts": "Script files",
83
+ "jobs.form.scriptPath": "Relative path",
84
+ "jobs.form.scriptContent": "Script content",
85
+ "jobs.form.addScript": "Add script",
86
+ "jobs.form.stepOptions": "Timeout and environment",
87
+ "jobs.form.shellHome": "This Job owns its commands and scripts. Each Run uses a version snapshot in a separate directory. Invoke scripts with sh scripts/run.sh. Commands run as the local user, not in a security sandbox; saving does not execute them.",
88
+ "jobs.kind.task": "Task delegation",
89
+ "jobs.kind.agent": "Agent run",
90
+ "jobs.kind.builtin": "Built-in action",
91
+ "jobs.kind.process": "Process",
92
+ "jobs.ownerGlobal": "Global",
93
+ "jobs.ownerTask": "Task",
94
+ "jobs.openInJobs": "Open in Jobs",
95
+ "jobs.moved": "Jobs moved out of Settings into their own entry. This link now opens here.",
96
+ "catalog.sourceJob": "Job",
97
+ "catalog.sourceRemoved": "The Task category filter was removed: the list shows every Task, and Jobs have their own entry.",
98
+ "schedule.enabled": "On",
99
+ "schedule.disabled": "Off",
100
+ "schedule.completed": "Completed",
101
+ "schedule.needs-attention": "Needs attention",
102
+ "schedule.retired": "Retired",
103
+ "admission.admitted": "Admitted",
104
+ "admission.overlap": "Skipped (overlap)",
105
+ "admission.blocked": "Blocked",
106
+ "trigger.manual": "Manual",
107
+ "trigger.schedule": "Scheduled",
108
+ "trigger.retry": "Retry",
109
+ "jobs.recentSuccess": "Last success",
73
110
  "jobs.diagnostics": "Execution diagnostics",
74
111
  "jobs.artifacts": "Registered fixed artifacts",
75
112
  "jobs.registeredOnly": "Only the exact registered owner, Run, commit, path and digest are readable. Linked images must also be registered.",
@@ -88,7 +125,9 @@ export const EN = {
88
125
  "jobs.project": "Target Project",
89
126
  "jobs.name": "Title",
90
127
  "jobs.action": "Controlled action",
91
- "jobs.newJob": "Create Job",
128
+ "jobs.newJob": "New Job",
129
+ "jobs.newJobIn": "Creates the Job in",
130
+ "jobs.ownerShort": "Owner",
92
131
  "jobs.editJob": "Edit Job",
93
132
  "jobs.runNow": "Run now",
94
133
  "jobs.newSchedule": "Create schedule",
@@ -96,10 +135,11 @@ export const EN = {
96
135
  "jobs.cancelRun": "Cancel this Run",
97
136
  "jobs.disable": "Disable future runs",
98
137
  "jobs.enable": "Enable schedule",
99
- "jobs.refresh": "Refresh facts",
138
+ "jobs.refresh": "Refresh",
100
139
  "jobs.save": "Save",
101
140
  "jobs.close": "Close editor",
102
141
  "jobs.discard": "Discard this unsaved draft?",
142
+ "jobs.leaveBusy": "A submission is still in progress; this view stays open until its receipt arrives.",
103
143
  "jobs.loading": "Reading authoritative state…",
104
144
  "jobs.submitting": "Submitting…",
105
145
  "jobs.saved": "Saved. This is not proof of execution or success.",
@@ -109,17 +149,85 @@ export const EN = {
109
149
  "jobs.observed": "Facts refreshed",
110
150
  "jobs.unknown": "Submission outcome is unknown; it will not be resent. Inspect current facts and the original operation before taking another action.",
111
151
  "jobs.empty": "No Jobs in this scope. Creating a Job does not run it.",
112
- "jobs.configuration": "Execution configuration",
113
- "jobs.taskConfig": "Use the documented shell, Task delegation or Agent configuration. Shell requires an exact managed workspace/HEAD; new execution Tasks still require independent activation. Agent input grants no extra authority. No secrets. Executor kind is immutable.",
114
- "jobs.rebind": "Saving a Project refresh Job explicitly binds its current catalog target. It does not refresh the Project. No arbitrary global shell commands.",
152
+ "jobs.configuration": "Configuration",
153
+ "jobs.taskConfig": "Saving changes configuration only; it does not run the Job. Do not include passwords or keys. Execution still requires the relevant permissions and workspace.",
154
+ "jobs.saveAsNew": "Save as new Job",
155
+ "jobs.kindCopyHelp": "You selected a different execution method. Saving creates a new Job. The original Job, history and schedules stay unchanged; schedules are not copied or started.",
156
+ "jobs.rebind": "Saving a Project refresh Job binds its current catalog target. It does not immediately refresh the Project.",
115
157
  "jobs.rule": "Time rule",
116
158
  "jobs.instant": "Instant / interval anchor (ISO time with UTC offset)",
117
159
  "jobs.every": "Interval (milliseconds, minimum 1000)",
118
160
  "jobs.cron": "Cron expression (five fields)",
119
161
  "jobs.timezone": "Timezone",
120
- "jobs.scheduleHelp": "Creating a schedule enables future execution. Rule edits preserve enabled status only when already enabled. Cron uses the service's DST rules; next due is never calculated in this browser.",
162
+ "jobs.scheduleHelp": "New schedules are enabled on save. Editing preserves their current on/off state.",
163
+ "jobs.form.customCron": "Custom Cron",
164
+ "jobs.form.cron": "Recurring",
165
+ "jobs.form.interval": "Fixed interval",
166
+ "jobs.form.once": "Run once",
167
+ "jobs.form.daily": "Daily",
168
+ "jobs.form.weekly": "Weekly",
169
+ "jobs.form.monthly": "Monthly",
170
+ "jobs.form.advanced": "Advanced details",
171
+ "jobs.form.frequency": "Repeat",
172
+ "jobs.form.time": "Time",
173
+ "jobs.form.time24": "Time · 24-hour clock",
174
+ "jobs.form.quickTime": "Common times",
175
+ "jobs.form.cronRequired": "Enter a Cron expression, or return to a repeat frequency.",
176
+ "jobs.form.cronSymbols": "* means any value, , separates values, - defines a range, and / sets a step. Example: 0 9 * * 1-5 runs at 09:00 Monday–Friday. The server validates on save.",
177
+ "jobs.form.cron.minute": "Minute",
178
+ "jobs.form.cron.hour": "Hour",
179
+ "jobs.form.cron.date": "Day",
180
+ "jobs.form.cron.month": "Month",
181
+ "jobs.form.cron.weekday": "Weekday",
182
+ "jobs.form.cron.minuteRange": "0–59",
183
+ "jobs.form.cron.hourRange": "0–23",
184
+ "jobs.form.cron.dateRange": "1–31",
185
+ "jobs.form.cron.monthRange": "1–12",
186
+ "jobs.form.cron.weekdayRange": "0–7; 0/7 = Sun",
187
+ "jobs.form.day": "Day of month",
188
+ "jobs.form.weekdays": "Days of week",
189
+ "jobs.form.monthHelp": "For days 29–31, months without that date are skipped.",
190
+ "jobs.form.complexHelp": "Custom five-field Cron. The server validates on save; complex expressions stay unchanged.",
191
+ "jobs.form.replaceComplex": "This expression cannot be converted losslessly. Switching to the visual form will replace this rule. Continue?",
192
+ "jobs.form.zonePreserved": "Times use this schedule’s saved timezone. Editing does not change it.",
193
+ "jobs.form.forJob": "Run Job",
194
+ "jobs.form.internalId": "Internal identifier",
195
+ "jobs.form.idHelp": "Used for links and record associations. Generated automatically; usually no need to change.",
196
+ "jobs.form.paused": "Future runs are paused. Existing run history is unchanged.",
197
+ "jobs.form.cronTime": "Choose a valid time.",
198
+ "jobs.form.cronDays": "Select at least one day.",
199
+ "jobs.form.cronDay": "Day must be an integer from 1 to 31.",
200
+ "jobs.form.monthRule": "Monthly on day {day}, {time}",
201
+ "jobs.form.command": "Command",
202
+ "jobs.form.remove": "Remove",
203
+ "jobs.form.addStep": "Add step",
204
+ "jobs.form.addEnv": "Add environment variable",
205
+ "jobs.form.envName": "Variable name",
206
+ "jobs.form.envValue": "Value",
207
+ "jobs.form.timeout": "Timeout (ms, optional)",
208
+ "jobs.form.target": "Execution target",
209
+ "jobs.form.goal": "Completion goal",
210
+ "jobs.form.delivery": "Deliver the task",
211
+ "jobs.form.task-created": "Create the task",
212
+ "jobs.form.work-item": "Existing work item",
213
+ "jobs.form.new": "New task",
214
+ "jobs.form.operator": "Global Operator",
215
+ "jobs.form.task": "Task role",
216
+ "jobs.form.job": "Dedicated Agent",
217
+ "jobs.form.serial": "Serial",
218
+ "jobs.form.isolated": "Isolated",
219
+ "jobs.form.concurrency": "Execution policy",
220
+ "jobs.form.addBinding": "Add Project",
221
+ "jobs.form.directory": "Directory",
222
+ "jobs.form.baseRef": "Base branch",
223
+ "jobs.form.unchanged": "Fields not shown here are preserved unchanged.",
224
+ "jobs.form.duplicateEnv": "Environment names must be nonempty and unique.",
225
+ "jobs.form.positiveInteger": "Enter a positive integer.",
226
+ "jobs.form.needStep": "Add at least one execution step.",
227
+ "jobs.form.argvHelp": "This step executes these arguments directly, without a shell. Command is a display description.",
228
+ "jobs.form.addArgument": "Add argument",
121
229
  "jobs.state": "State",
122
- "jobs.recentRun": "Most recent Run",
230
+ "jobs.recentRun": "Latest Run",
123
231
  "jobs.refreshAttempt": "Project: last attempt",
124
232
  "jobs.refreshSuccess": "Project: last successful refresh",
125
233
  "jobs.onceCompleted": "The once plan was admitted. Completed does not mean its Run succeeded.",
@@ -130,7 +238,7 @@ export const EN = {
130
238
  "jobs.lastAttempt": "Last admission attempt",
131
239
  "jobs.lastSuccess": "Last successful scheduled Run",
132
240
  "jobs.refreshFacts": "Project refresh: last attempt / last success",
133
- "jobs.history": "Execution history · exact Runs",
241
+ "jobs.history": "Run history",
134
242
  "jobs.noRuns": "No executions yet.",
135
243
  "jobs.inspectRun": "Inspect attempt Run",
136
244
  "jobs.trigger": "Trigger",
@@ -140,6 +248,83 @@ export const EN = {
140
248
  "jobs.logs": "Step logs",
141
249
  "jobs.truncated": "last 64 KiB",
142
250
  "jobs.noLogs": "No checkpointed step logs yet. This does not establish success.",
251
+ "jobs.copy": "Copy",
252
+ "jobs.copied": "Copied",
253
+ "jobs.copyManual": "Copy manually:",
254
+ "jobs.copyJson": "Copy JSON",
255
+ "jobs.copyCommand": "Copy command",
256
+ "jobs.jsonInvalid": "Configuration is not valid JSON:",
257
+ "jobs.preview": "Reads as",
258
+ "jobs.basics": "Basics",
259
+ "jobs.runDetail": "Run",
260
+ "jobs.closeRun": "Close Run details",
261
+ "jobs.started": "Started",
262
+ "jobs.updated": "Updated",
263
+ "jobs.duration": "Duration",
264
+ "jobs.exit": "Exit",
265
+ "jobs.failedStep": "Failed step",
266
+ "jobs.retryOf": "Retry of",
267
+ "jobs.steps": "Steps",
268
+ "jobs.overview": "Overview",
269
+ "jobs.successRate": "Success rate",
270
+ "jobs.avgDuration": "Avg. duration",
271
+ "jobs.sparkLabel": "Last {count} Runs, {ok} succeeded",
272
+ "jobs.runCount": "{count} Runs",
273
+ "jobs.showMore": "Show {count} more",
274
+ "jobs.filterRuns": "Filter Runs by status",
275
+ "jobs.filter.all": "All",
276
+ "jobs.filter.active": "Active",
277
+ "jobs.col.status": "Status",
278
+ "jobs.col.run": "Run",
279
+ "jobs.col.started": "Started",
280
+ "jobs.lastAttemptShort": "Last attempt",
281
+ "jobs.lastSuccessShort": "Last success",
282
+ "jobs.ruleDaily": "Daily at {time}",
283
+ "jobs.ruleWeekly": "{days} at {time}",
284
+ "jobs.ruleEvery": "Every {period}",
285
+ "jobs.ruleOnce": "Once at {at}",
286
+ "jobs.ruleAnchor": "from",
287
+ "jobs.cfg.input": "Input",
288
+ "jobs.cfg.workspace": "Workspace",
289
+ "jobs.cfg.head": "HEAD",
290
+ "jobs.cfg.owner": "Owner",
291
+ "jobs.cfg.ownerTask": "This Task",
292
+ "jobs.cfg.env": "Environment",
293
+ "jobs.cfg.noEnv": "None",
294
+ "jobs.cfg.goal": "Goal",
295
+ "jobs.cfg.target": "Target",
296
+ "jobs.cfg.concurrency": "Concurrency",
297
+ "jobs.cfg.agentInput": "Instructions",
298
+ "jobs.cfg.other": "Other fields",
299
+ "jobs.cfg.raw": "Exact configuration",
300
+ "jobs.cfg.noParams": "No parameters",
301
+ "jobs.cfg.emptyList": "Empty list",
302
+ "jobs.cfg.emptyText": "Empty",
303
+ "jobs.cfg.fields": "{count} fields",
304
+ "jobs.cfg.value": "Value",
305
+ "jobs.cfg.timeout": "Timeout",
306
+ "jobs.cfg.cwd": "cwd",
307
+ "jobs.cfg.unnamed": "unnamed",
308
+ "jobs.cfg.description": "Description",
309
+ "jobs.cfg.bindings": "Project bindings",
310
+ "jobs.cfg.task": "Task",
311
+ "jobs.cfg.workItem": "WorkItem",
312
+ "jobs.cfg.role": "Role",
313
+ "jobs.cfg.agent": "Agent",
314
+ "jobs.cfg.ownerRun": "Owner Run",
315
+ "jobs.cfg.attempt": "Integration attempt",
316
+ "jobs.action.system.noop": "No-op check",
317
+ "jobs.action.project.refresh": "Project refresh",
318
+ "jobs.goal.delivery": "Deliver in a new Task",
319
+ "jobs.goal.task-created": "Create a Task",
320
+ "jobs.goal.work-item": "Run a WorkItem",
321
+ "jobs.target.new": "New Task",
322
+ "jobs.target.work-item": "Existing WorkItem",
323
+ "jobs.target.operator": "Operator",
324
+ "jobs.target.task": "Task role",
325
+ "jobs.target.job": "Job-owned Agent",
326
+ "jobs.concurrency.serial": "Serial",
327
+ "jobs.concurrency.isolated": "Isolated",
143
328
  "models.subscriptionAuth": "Subscription",
144
329
  "models.account": "Account",
145
330
  "models.providerReadOnlyHelp": "Managed by its provider. Edit the configuration in the owning service.",
@@ -148,7 +333,7 @@ export const EN = {
148
333
  "models.window.weekly": "Weekly",
149
334
  "models.window.monthly": "Monthly",
150
335
  "manage.nav": "Main navigation",
151
- "manage.workbench": "Workbench",
336
+ "manage.workbench": "Tasks",
152
337
  "manage.sections": "Sections",
153
338
  "manage.collapseSections": "Collapse sections",
154
339
  "manage.showSections": "Show sections",
@@ -861,10 +1046,7 @@ export const EN = {
861
1046
  "store.job": "Operation",
862
1047
  "dock.label": "Session panel",
863
1048
  "dock.discussion": "Discussion",
864
- "dock.session": "Terminal",
865
1049
  "conversation.title": "Conversation",
866
- "conversation.defaultMode": "Default view",
867
- "conversation.defaultSaved": "Saved for future openings in this browser. The current view and Session are unchanged.",
868
1050
  "conversation.nativeRequest": "Codex native request",
869
1051
  "conversation.nativeOmitted": "Additional or large native requests are available in Terminal.",
870
1052
  "conversation.leaderQuestions": "Leader questions · Task input channel",
@@ -880,15 +1062,22 @@ export const EN = {
880
1062
  "conversation.input": "Message to the selected Session",
881
1063
  "conversation.send": "Send",
882
1064
  "conversation.model": "Session model",
883
- "conversation.modelsLoad": "Load available models",
884
- "conversation.modelApply": "Apply while idle",
885
- "conversation.launchModel": "Fixed launch request",
886
- "conversation.confirmedModel": "Last native confirmation",
1065
+ "conversation.modelsLoad": "Reload",
1066
+ "conversation.modelApply": "Apply selection",
1067
+ "conversation.selectedModel": "Selected model",
1068
+ "conversation.modelNotSelected": "Choose a model",
1069
+ "conversation.modelsLoading": "Loading models…",
1070
+ "conversation.modelsFailed": "Could not read models. Please reload.",
1071
+ "conversation.modelsEmpty": "No models available",
1072
+ "conversation.modelBusy": "A turn is running. Apply your selection when it finishes.",
1073
+ "conversation.modelTerminalBusy": "Exit Codex in the native terminal before applying. Closing the terminal panel does not exit it.",
1074
+ "conversation.launchModel": "Launch config",
1075
+ "conversation.confirmedModel": "Execution model",
887
1076
  "conversation.modelBoundary": "Same Codex Thread; idle only. Does not change Role defaults or the current Turn. A Host reconnect restores the fixed launch configuration; check the native confirmation again. No automatic retry.",
888
- "conversation.modelApplying": "Applying model; waiting for native confirmation…",
889
- "conversation.modelConfirmed": "Native model adoption confirmed for this live connection.",
890
- "conversation.modelFailed": "Not applied. Review the reason before trying again.",
891
- "conversation.modelUnknown": "Adoption unconfirmed. Do not retry; inspect confirmation or explicitly select a new Session through existing lifecycle controls.",
1077
+ "conversation.modelApplying": "Switching model…",
1078
+ "conversation.modelConfirmed": "Model switched",
1079
+ "conversation.modelFailed": "Could not switch models. Check that the session is idle before retrying.",
1080
+ "conversation.modelUnknown": "Switch not yet confirmed. Repeat submission is blocked.",
892
1081
  "conversation.commands": "Supported commands",
893
1082
  "conversation.literal": "Send as ordinary text",
894
1083
  "conversation.command.help": "Show supported operations",
@@ -899,7 +1088,6 @@ export const EN = {
899
1088
  "conversation.command.latest": "Return to latest messages",
900
1089
  "conversation.commandHelp": "/help · /status · /model · /stop · /latest. Tab completes an unambiguous command; Ctrl/⌘+Enter sends. These are Yui controls, not arbitrary native CLI commands.",
901
1090
  "conversation.commandUnknown": "Unsupported command. Use /help, or explicitly send it as ordinary text.",
902
- "conversation.draftSaved": "Draft saved in this browser tab · Ctrl/⌘+Enter to send",
903
1091
  "conversation.storageFailed": "Browser storage is unavailable. Keep a copy of this draft before leaving.",
904
1092
  "conversation.receiptDetails": "Exact receipt",
905
1093
  "conversation.receipt.sending": "Sending once…",
@@ -927,13 +1115,48 @@ export const EN = {
927
1115
  "conversation.empty": "No public items on this page. Older pages may contain messages.",
928
1116
  "conversation.liveUnavailable": "Live reply observation unavailable; native history only",
929
1117
  "conversation.truncated": "Long item excerpt; open native access for the full item.",
930
- "conversation.placeholder": "Message this Session…",
931
- "conversation.more": "More",
1118
+ "conversation.placeholder": "Message this Session… (/ for commands)",
932
1119
  "conversation.copy": "Copy",
933
1120
  "conversation.copied": "Copied",
934
1121
  "conversation.jump": "Jump to latest",
935
1122
  "conversation.selectModel": "Select model",
936
1123
  "conversation.worked": "Worked",
1124
+ "conversation.modelConfirmedNote": "Confirmed {time} at start, resume or switch; not a live reading, and Desktop changes may not show",
1125
+ "conversation.modelStateConfirmed": "Last confirmed",
1126
+ "conversation.modelStatePending": "Applying",
1127
+ "conversation.modelConfirmedShort": "last native confirmation {time}; not live",
1128
+ "conversation.details": "Session details",
1129
+ "conversation.copyIdentity": "Copy identity",
1130
+ "conversation.copyFailed": "Copy unavailable in this browser",
1131
+ "conversation.modelUnconfirmed": "Model unconfirmed",
1132
+ "conversation.modelUnconfirmedHint": "No native confirmation for this Session; the launch config is not shown as current.",
1133
+ "conversation.modelPendingLabel": "Applying",
1134
+ "conversation.modelHistorical": "Previous Sessions are not observed live.",
1135
+ "conversation.modelNoRead": "Not reported yet.",
1136
+ "conversation.effortUnobserved": "effort not reported",
1137
+ "conversation.launchNote": "Requested at launch; not current",
1138
+ "conversation.agentDefault": "Agent default",
1139
+ "conversation.sendHint": "Send (Ctrl/⌘+Enter)",
1140
+ "conversation.backCurrent": "Back to current Session",
1141
+ "conversation.backCurrentShort": "Current",
1142
+ "conversation.readOnlyHistory": "Previous Session · read only",
1143
+ "conversation.placeholderHistory": "Previous Sessions are read only",
1144
+ "conversation.pendingInput": "Waiting for the last input's receipt",
1145
+ "conversation.turnUnsettled": "Last input delivery is unsettled",
1146
+ "conversation.inputUnavailable": "Input unavailable for this Session",
1147
+ "conversation.sessionActive": "Running",
1148
+ "conversation.sessionEnded": "Ended",
1149
+ "conversation.sessionFailed": "Failed",
1150
+ "conversation.previousSessions": "Previous",
1151
+ "conversation.noSessionShort": "No Session",
1152
+ "conversation.sessionLabel": "Session",
1153
+ "conversation.sessionId": "Session ID",
1154
+ "conversation.authority": "Authority",
1155
+ "conversation.agent": "Agent",
1156
+ "conversation.turn": "Turn",
1157
+ "conversation.writer": "Input",
1158
+ "conversation.stateUnknown": "Unknown",
1159
+ "conversation.disconnectedShort": "Disconnected",
937
1160
  "conversation.activity.commandExecution": "Ran",
938
1161
  "conversation.activity.fileChange": "Edited files",
939
1162
  "conversation.activity.mcpToolCall": "Used tool",
@@ -942,6 +1165,7 @@ export const EN = {
942
1165
  "conversation.activity.collabAgentToolCall": "Asked another agent",
943
1166
  "dock.swap": "Swap with task details",
944
1167
  "dock.hide": "Hide session panel",
1168
+ "dock.show": "Show session panel",
945
1169
  "dock.resize": "Resize session panel",
946
1170
  "dock.target": "Session target",
947
1171
  "discussion.title": "Task discussion",
@@ -999,10 +1223,15 @@ export const EN = {
999
1223
  "terminal.closed": "Detached",
1000
1224
  "terminal.error": "Unavailable",
1001
1225
  "terminal.errorDetail": "Unable to open this native Session. Check that the Controller is running and the Role has a Session.",
1002
- "terminal.global": "Global",
1003
- "terminal.noTargets": "No Roles",
1004
- "terminal.emptyTitle": "Attach to a native Session",
1005
- "terminal.emptyText": "Pick a Role above. The panel shows the Session's current screen; attaching never starts or restarts an Agent.",
1226
+ "session.mode": "Session view",
1227
+ "session.modeChat": "Chat",
1228
+ "session.modeTerminal": "Terminal",
1229
+ "terminal.unavailable": "Unavailable",
1230
+ "terminal.noSessionTitle": "No Session to attach",
1231
+ "terminal.noSessionText": "This Role has no attachable Session yet. Attaching never starts an Agent.",
1232
+ "terminal.notCurrentTitle": "Not the current Session",
1233
+ "terminal.notCurrentText": "The terminal can only attach to the current Session; the selected Session is no longer current.",
1234
+ "conversation.roleReadOnly": "This Role is read only here; its input goes through its dispatch controls.",
1006
1235
  "terminal.cliHint": "Full terminal",
1007
1236
  "terminal.historyLimited": "This Role has a {current}-line tmux history. Exit and re-enter it to use {target} lines.",
1008
1237
  "global.open": "Global input",