@zq-silk/yui 0.6.9 → 0.6.10

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 (56) hide show
  1. package/README.md +10 -3
  2. package/dist/cli/commandCatalog.js +1 -1
  3. package/dist/commands/taskCommands.js +62 -27
  4. package/dist/commands/taskContextCommand.js +27 -1
  5. package/dist/commands/taskRoleRuntimeStatus.js +17 -6
  6. package/dist/controller/agentRuntimeObserver.js +6 -3
  7. package/dist/controller/controller.js +29 -47
  8. package/dist/controller/fileSchedulerStoreAdapter.js +546 -255
  9. package/dist/controller/runtime.js +8 -1
  10. package/dist/controller/runtimeEventInbox.js +16 -5
  11. package/dist/controller/runtimeHookRunFence.js +51 -5
  12. package/dist/controller/runtimeObservationHook.js +8 -2
  13. package/dist/coordination/workMailbox.js +408 -28
  14. package/dist/coordination/workMailboxQueue.js +12 -10
  15. package/dist/executor/agentExecutor.js +101 -94
  16. package/dist/executor/executorRegistry.js +47 -2
  17. package/dist/executor/fileRoleLaunchPlanner.js +4 -2
  18. package/dist/lifecycle/exactRunTerminalization.js +1 -7
  19. package/dist/repository/taskWorkspaceCoordinator.js +9 -4
  20. package/dist/runtime/agentDriver.js +83 -4
  21. package/dist/runtime/agentDriverObservation.js +25 -10
  22. package/dist/runtime/builtinAgentDrivers.js +168 -18
  23. package/dist/runtime/codexAppServerRuntime.js +355 -0
  24. package/dist/runtime/continuationManager.js +117 -0
  25. package/dist/runtime/index.js +2 -0
  26. package/dist/runtime/lifecycleReservation.js +4 -3
  27. package/dist/runtime/promptEnvelope.js +14 -3
  28. package/dist/runtime/providerContinuation.js +225 -0
  29. package/dist/runtime/providerContinuationReconciliationService.js +172 -0
  30. package/dist/runtime/providerRuntimeIdentity.js +232 -0
  31. package/dist/runtime/providerRuntimeReconciler.js +166 -0
  32. package/dist/runtime/runtimeContinuationProjection.js +34 -0
  33. package/dist/runtime/runtimeObservation.js +198 -9
  34. package/dist/runtime/runtimeProjection.js +162 -7
  35. package/dist/scheduler/activeRoleRunDelivery.js +314 -1
  36. package/dist/scheduler/leaderWakeupProcessor.js +1 -1
  37. package/dist/scheduler/operatorInputNotificationProcessor.js +3 -2
  38. package/dist/scheduler/roleRunLiveness.js +8 -7
  39. package/dist/scheduler/roleRunStall.js +4 -2
  40. package/dist/scheduler/taskExecutionProjection.js +2 -2
  41. package/dist/storage/migration/productionRegistry.js +474 -1
  42. package/dist/storage/sqliteSchema.js +102 -21
  43. package/dist/storage/sqliteStore.js +52 -110
  44. package/dist/storage/storageVersions.js +1 -1
  45. package/dist/storage/storeRpc.js +0 -1
  46. package/dist/storage/taskStore.js +40 -53
  47. package/dist/storage/upgrade/sqliteStateMigration.js +0 -21
  48. package/dist/web/assets/client/app.js +1 -1
  49. package/dist/web/assets/client/components.js +233 -4
  50. package/dist/web/assets/client/i18n.js +166 -2
  51. package/dist/web/assets/client/view.js +30 -13
  52. package/dist/web/assets/styles/cards.js +62 -0
  53. package/dist/web/assets/styles/widgets.js +1 -0
  54. package/dist/web/webSnapshot.js +11 -2
  55. package/package.json +1 -1
  56. package/skills/yui-leader/SKILL.md +14 -9
@@ -132,4 +132,66 @@ details.work-item-card>summary.record-head~*{margin-top:0}
132
132
  .criteria-list li{position:relative;padding-left:16px;font-family:var(--font-body);font-size:12px;line-height:1.5;color:var(--text)}
133
133
  .criteria-list li:before{content:"";position:absolute;left:0;top:8px;width:9px;height:2px;border:0;border-radius:2px;background:var(--border-strong)}
134
134
  .criteria-block.is-collapsed .criteria-list li:nth-child(n+7){display:none}
135
+ /* Task-first execution status band */
136
+ .exec-band{display:grid;gap:8px;padding:11px 14px;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius-lg);background:var(--bg-2);box-shadow:var(--shadow-card)}
137
+ .exec-band.is-danger{border-left-color:var(--danger)}
138
+ .exec-band.is-warning{border-left-color:var(--warning)}
139
+ .exec-band.is-active{border-left-color:var(--active)}
140
+ .exec-band.is-accent{border-left-color:var(--accent)}
141
+ .exec-band.is-muted{border-left-color:var(--faint)}
142
+ .exec-band-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
143
+ .exec-band-owner{color:var(--muted);font-family:var(--font-body);font-size:12px;font-weight:600}
144
+ .exec-band-executors{color:var(--active);font-family:var(--font-mono);font-size:10px;letter-spacing:.04em}
145
+ .exec-band-stopped{color:var(--faint);font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase}
146
+ .exec-band-failclosed{color:var(--danger);font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--danger);padding:2px 8px;border-radius:var(--radius-pill)}
147
+ .exec-band-summary{margin:0;font-family:var(--font-body);font-size:13px;line-height:1.55;color:var(--text)}
148
+ .exec-signal-list{display:grid;gap:5px}
149
+ .exec-signal{display:flex;gap:9px;align-items:baseline;padding:6px 10px;border-radius:var(--radius);font-size:11.5px;line-height:1.45}
150
+ .exec-signal.is-attention{background:var(--warning-soft);border:1px solid color-mix(in srgb,var(--warning) 30%,transparent)}
151
+ .exec-signal.is-blocker{background:var(--danger-soft);border:1px solid color-mix(in srgb,var(--danger) 30%,transparent)}
152
+ .exec-signal-kind{flex:none;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
153
+ .exec-signal-text{min-width:0;color:var(--text)}
154
+ /* Unified execution Group (Lanes + resolution) */
155
+ .exec-group{gap:8px}
156
+ .lane-list{display:grid;gap:4px}
157
+ .lane-row{display:flex;align-items:center;gap:9px;padding:5px 9px;border-radius:var(--radius);background:var(--bg-3);border:1px solid var(--border);font-size:11.5px}
158
+ .lane-row .status-dot{margin-top:0}
159
+ .lane-role{font-family:var(--font-body);font-weight:700;font-size:12px;color:var(--text)}
160
+ .lane-status{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
161
+ .lane-summary{flex:1;min-width:0;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
162
+ .exec-resolution{display:flex;gap:9px;align-items:baseline;flex-wrap:wrap;padding:7px 10px;border-radius:var(--radius);background:var(--accent-soft);border:1px solid var(--accent-line)}
163
+ .exec-resolution-decision{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
164
+ .exec-resolution-summary{flex:1;min-width:0;font-size:12px;color:var(--text)}
165
+ .exec-resolution time{color:var(--muted);font-size:10.5px}
166
+ /* Candidates */
167
+ .candidate-list{display:grid;gap:4px}
168
+ .candidate-row{display:flex;align-items:baseline;gap:9px;padding:5px 9px;border-radius:var(--radius);background:var(--bg-3);border:1px solid var(--border);font-size:11.5px}
169
+ .candidate-seq{flex:none;font-family:var(--font-mono);font-size:10px;color:var(--faint)}
170
+ .candidate-summary{flex:1;min-width:0;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
171
+ .candidate-source{flex:none;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
172
+ .candidate-row time{flex:none;color:var(--muted);font-size:10.5px}
173
+ /* Findings */
174
+ .finding-list{display:grid;gap:4px}
175
+ .finding-row{display:flex;align-items:baseline;gap:8px;padding:5px 9px;border-radius:var(--radius);background:var(--bg-3);border:1px solid var(--border);font-size:11.5px}
176
+ .finding-summary{flex:1;min-width:0;color:var(--text)}
177
+ .finding-row.is-critical,.finding-row.is-high{border-left:2px solid var(--danger)}
178
+ .finding-row.is-medium{border-left:2px solid var(--warning)}
179
+ .finding-row.is-low{border-left:2px solid var(--faint)}
180
+ .chip.is-critical{color:var(--danger);border-color:var(--danger)}
181
+ .chip.is-high{color:var(--danger)}
182
+ .chip.is-medium{color:var(--warning)}
183
+ .chip.is-low{color:var(--muted)}
184
+ /* Sidebar derived execution status */
185
+ .task-exec{grid-row:1;grid-column:3;align-self:center;flex:none;font-family:var(--font-mono);font-size:8.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);white-space:nowrap;max-width:90px;overflow:hidden;text-overflow:ellipsis}
186
+ .task-exec.is-blocked,.task-exec.is-attention{color:var(--danger)}
187
+ .task-exec.is-recovering,.task-exec.is-progressing-with-attention{color:var(--warning)}
188
+ .task-exec.is-working,.task-exec.is-waiting-on-agents{color:var(--active)}
189
+ .task-exec.is-needs-leader-action{color:var(--accent)}
190
+ /* Overview row derived status label */
191
+ .overview-row-label{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--warning);white-space:nowrap}
192
+ /* Disposition block */
193
+ .disposition-block{border-left:2px solid var(--warning);padding-left:10px}
194
+ .disposition-block>small{color:var(--warning)}
195
+ /* Input requester */
196
+ .input-requester{color:var(--muted);font-family:var(--font-mono);font-size:10px;letter-spacing:.02em}
135
197
  `;
@@ -54,6 +54,7 @@ kbd{background:var(--bg-3);border:1px solid var(--border);border-bottom-width:2p
54
54
  .filter-dot.completed{background:var(--success);box-shadow:0 0 6px var(--success)}
55
55
  .filter-dot.yielded{background:var(--success);box-shadow:0 0 6px var(--success)}
56
56
  .filter-dot.failed{background:var(--danger);box-shadow:0 0 6px var(--danger)}
57
+ .filter-dot.retired{background:var(--faint)}
57
58
  .filter-dot.archived{background:var(--muted)}
58
59
  .filter-chip[data-status=active].is-active{color:var(--active);background:var(--active-soft);border-color:color-mix(in srgb,var(--active) 45%,transparent)}
59
60
  .filter-chip[data-status=active].is-active .filter-count{color:var(--active)}
@@ -1,5 +1,7 @@
1
1
  import { isRoleRunStalled } from "../scheduler/roleRunStall.js";
2
2
  import { buildTaskExecutionProjection } from "../scheduler/taskExecutionProjection.js";
3
+ import { summarizeExecutionGroup } from "../execution/executionGroup.js";
4
+ import { currentWorkItemExecutionGroup } from "../workItem/workItem.js";
3
5
  export function buildWebDashboardSnapshot(store, now = new Date()) {
4
6
  return store.transaction((reader) => {
5
7
  const statusCounts = {
@@ -38,7 +40,8 @@ export function buildWebDashboardSnapshot(store, now = new Date()) {
38
40
  roleCount: reader.listRoles(task.id).length,
39
41
  openInputCount: taskOpenInputs,
40
42
  needsAttentionCount,
41
- execution
43
+ execution,
44
+ executionStatus: execution?.status ?? null
42
45
  };
43
46
  }).sort(compareDashboardTasks);
44
47
  return {
@@ -94,7 +97,13 @@ export function buildWebTaskDetail(store, taskId) {
94
97
  execution: buildTaskExecutionProjection(reader, taskId),
95
98
  brief: reader.getTaskBrief(taskId),
96
99
  roles,
97
- workItems: reader.listWorkItems(taskId),
100
+ workItems: reader.listWorkItems(taskId).map((item) => {
101
+ const group = currentWorkItemExecutionGroup(item);
102
+ return {
103
+ ...item,
104
+ ...(group === undefined ? {} : { currentExecution: summarizeExecutionGroup(group) })
105
+ };
106
+ }),
98
107
  runs,
99
108
  runtimeHealth: { needsAttentionRuns },
100
109
  reviewRounds: reader.listReviewRounds(taskId),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zq-silk/yui",
3
- "version": "0.6.9",
3
+ "version": "0.6.10",
4
4
  "description": "Local control plane for long-running native agent CLI sessions backed by tmux.",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -49,8 +49,9 @@ Choose the executor in this order:
49
49
  Do not dispatch a Task Role merely to obtain a fresh context, run a command,
50
50
  perform a routine small edit, or add an intermediate review. Direct and native
51
51
  execution add no Worker Role, Worker Yui Session, or Worker AgentRun. The exact
52
- Leader Run fence stays active while native child work is outstanding; the
53
- WorkItem and its workspace remain the durable delivery boundary.
52
+ Leader Run remains active until an explicit Yui yield, completion, or exact
53
+ failure; native child lifecycle never decides that Run outcome. The WorkItem
54
+ and its workspace remain the durable delivery boundary.
54
55
 
55
56
  Provider-native foreground and background child lifecycle stays owned by the
56
57
  current Agent Session. Structured child completion notifications may resume the
@@ -88,10 +89,12 @@ boundary makes that impossible, create only the smallest repair WorkItem and
88
89
  retain the original Candidate, Review, and Integration evidence.
89
90
 
90
91
  Native and managed waits use different fences. For native children, let the
91
- provider deliver structured completion notifications and continue the parent
92
- Agent. The exact Leader Run stays active across intermediate provider Turn
93
- boundaries while native children remain active. Do not poll, send a waiting
94
- Message, rewrite a checkpoint, or yield merely to preserve that native wait.
92
+ provider deliver structured completion notifications while the parent
93
+ Conversation is live. A parent Turn or Activation may end first; Yui preserves
94
+ the active Run and known continuation identities, reconciles only known
95
+ children through adapter metadata, and routes a later result reference through
96
+ the durable inbox. Do not poll, send a waiting Message, rewrite a checkpoint,
97
+ or yield merely to preserve that native wait.
95
98
 
96
99
  For a managed Task Role or Reviewer Run, persist a necessary changed checkpoint,
97
100
  yield the active Leader Run, and stop the turn. Its durable mailbox result or an
@@ -350,9 +353,11 @@ confirmed.
350
353
  Create and communicate with children through the native Agent tools. Yui does
351
354
  not create, address, resume, or terminate those children; it observes their
352
355
  structured lifecycle so the parent AgentRun can span the provider Turns needed
353
- to receive their results. Children must not mutate Yui lifecycle state. Let the
354
- provider's native completion mechanism return results to the Leader, then
355
- synthesize them before deciding the next Yui workflow outcome.
356
+ to receive their results, including a later provider Activation. Children must
357
+ not mutate Yui lifecycle state. If the provider cannot automatically return a
358
+ detached result to the parent, the adapter records a bounded Provider result
359
+ reference and the inbox wakes the Leader. Synthesize that fact before deciding
360
+ the next Yui workflow outcome.
356
361
 
357
362
  Review the returned work and run proportionate checks. Record each round in the
358
363
  WorkItem summary; preserve earlier round facts when updating it: