@zq-silk/yui 0.6.8 → 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.
- package/README.md +10 -3
- package/dist/cli/commandCatalog.js +1 -1
- package/dist/commands/taskCommands.js +63 -28
- package/dist/commands/taskContextCommand.js +27 -1
- package/dist/commands/taskRoleRuntimeStatus.js +17 -6
- package/dist/controller/agentRuntimeObserver.js +6 -3
- package/dist/controller/controller.js +29 -47
- package/dist/controller/fileSchedulerStoreAdapter.js +572 -258
- package/dist/controller/runtime.js +8 -1
- package/dist/controller/runtimeEventInbox.js +16 -5
- package/dist/controller/runtimeHookRunFence.js +51 -5
- package/dist/controller/runtimeObservationHook.js +8 -2
- package/dist/coordination/workMailbox.js +408 -28
- package/dist/coordination/workMailboxQueue.js +12 -10
- package/dist/executor/agentExecutor.js +101 -94
- package/dist/executor/executorRegistry.js +47 -2
- package/dist/executor/fileRoleLaunchPlanner.js +4 -2
- package/dist/lifecycle/exactRunTerminalization.js +1 -7
- package/dist/repository/taskWorkspaceCoordinator.js +9 -4
- package/dist/runtime/agentDriver.js +83 -4
- package/dist/runtime/agentDriverObservation.js +25 -10
- package/dist/runtime/builtinAgentDrivers.js +168 -18
- package/dist/runtime/codexAppServerRuntime.js +355 -0
- package/dist/runtime/continuationManager.js +117 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/lifecycleReservation.js +4 -3
- package/dist/runtime/promptEnvelope.js +14 -3
- package/dist/runtime/providerContinuation.js +225 -0
- package/dist/runtime/providerContinuationReconciliationService.js +172 -0
- package/dist/runtime/providerRuntimeIdentity.js +232 -0
- package/dist/runtime/providerRuntimeReconciler.js +166 -0
- package/dist/runtime/runtimeContinuationProjection.js +34 -0
- package/dist/runtime/runtimeObservation.js +217 -6
- package/dist/runtime/runtimeProjection.js +172 -11
- package/dist/scheduler/activeRoleRunDelivery.js +314 -1
- package/dist/scheduler/leaderWakeupProcessor.js +2 -1
- package/dist/scheduler/operatorInputNotificationProcessor.js +3 -2
- package/dist/scheduler/roleRunLiveness.js +8 -7
- package/dist/scheduler/roleRunStall.js +4 -2
- package/dist/scheduler/taskExecutionProjection.js +2 -2
- package/dist/storage/migration/productionRegistry.js +474 -1
- package/dist/storage/sqliteSchema.js +102 -21
- package/dist/storage/sqliteStore.js +52 -110
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +0 -1
- package/dist/storage/taskStore.js +40 -53
- package/dist/storage/upgrade/sqliteStateMigration.js +0 -21
- package/dist/task/nextAction.js +1 -1
- package/dist/web/assets/client/app.js +1 -1
- package/dist/web/assets/client/components.js +233 -4
- package/dist/web/assets/client/i18n.js +166 -2
- package/dist/web/assets/client/view.js +30 -13
- package/dist/web/assets/styles/cards.js +62 -0
- package/dist/web/assets/styles/widgets.js +1 -0
- package/dist/web/webSnapshot.js +11 -2
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +33 -24
- package/skills/yui-operator/SKILL.md +7 -5
|
@@ -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)}
|
package/dist/web/webSnapshot.js
CHANGED
|
@@ -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
|
@@ -38,20 +38,24 @@ Choose the executor in this order:
|
|
|
38
38
|
|
|
39
39
|
1. **Leader directly** when the work is small and the current Leader context,
|
|
40
40
|
authority, and tools are sufficient.
|
|
41
|
-
2. **
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
Session and durable Run lifecycle.
|
|
41
|
+
2. **Native subagents** when bounded implementation or research benefits from
|
|
42
|
+
specialist attention or parallel fan-out inside the current Agent Session.
|
|
43
|
+
Give each child an explicit Profile, workspace access, and result contract.
|
|
44
|
+
3. **Task Role AgentRun** when the work genuinely needs independent durable
|
|
45
|
+
ownership, different credentials or authority, a provider/model capability
|
|
46
|
+
unavailable to the current Agent, or an independently managed Session and
|
|
47
|
+
Run lifecycle.
|
|
49
48
|
|
|
50
49
|
Do not dispatch a Task Role merely to obtain a fresh context, run a command,
|
|
51
50
|
perform a routine small edit, or add an intermediate review. Direct and native
|
|
52
51
|
execution add no Worker Role, Worker Yui Session, or Worker AgentRun. The exact
|
|
53
|
-
Leader Run
|
|
54
|
-
|
|
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.
|
|
55
|
+
|
|
56
|
+
Provider-native foreground and background child lifecycle stays owned by the
|
|
57
|
+
current Agent Session. Structured child completion notifications may resume the
|
|
58
|
+
Leader in later provider Turns while the same Yui AgentRun remains active.
|
|
55
59
|
|
|
56
60
|
A Project-backed code result still uses one WorkItem-owned Develop workspace
|
|
57
61
|
and a clean committed Candidate. The fast path compresses orchestration, not
|
|
@@ -84,11 +88,13 @@ WorkItem while its delivery scope remains open. If an immutable final-review
|
|
|
84
88
|
boundary makes that impossible, create only the smallest repair WorkItem and
|
|
85
89
|
retain the original Candidate, Review, and Integration evidence.
|
|
86
90
|
|
|
87
|
-
Native and managed waits use different fences. For
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
Native and managed waits use different fences. For native children, let the
|
|
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.
|
|
92
98
|
|
|
93
99
|
For a managed Task Role or Reviewer Run, persist a necessary changed checkpoint,
|
|
94
100
|
yield the active Leader Run, and stop the turn. Its durable mailbox result or an
|
|
@@ -344,12 +350,14 @@ hint only if this Agent's native child API supports that override; otherwise
|
|
|
344
350
|
inherit the actual runtime setting. Never claim a model that cannot be
|
|
345
351
|
confirmed.
|
|
346
352
|
|
|
347
|
-
Create and communicate with
|
|
348
|
-
not create, address, resume, or terminate
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
+
Create and communicate with children through the native Agent tools. Yui does
|
|
354
|
+
not create, address, resume, or terminate those children; it observes their
|
|
355
|
+
structured lifecycle so the parent AgentRun can span the provider Turns needed
|
|
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.
|
|
353
361
|
|
|
354
362
|
Review the returned work and run proportionate checks. Record each round in the
|
|
355
363
|
WorkItem summary; preserve earlier round facts when updating it:
|
|
@@ -617,9 +625,10 @@ evidence; truthfully surface the blocker through the supported provider failure
|
|
|
617
625
|
boundary. Do not add a fallback protocol.
|
|
618
626
|
|
|
619
627
|
Yield before waiting only for managed Task Role or Reviewer results whose
|
|
620
|
-
durable mailbox can wake the Task. Do not yield
|
|
621
|
-
|
|
622
|
-
|
|
628
|
+
durable mailbox can wake the Task. Do not yield merely because native child
|
|
629
|
+
results are outstanding: the provider owns their completion notifications, and
|
|
630
|
+
Yui keeps this AgentRun active across intermediate provider Turns. After native
|
|
631
|
+
work drains, continue to Task completion, InputRequest, or final yield.
|
|
623
632
|
|
|
624
633
|
Complete only after required WorkItems are accepted, Role work is terminal,
|
|
625
634
|
latest isolated results are integrated or deliberately abandoned, and user
|
|
@@ -162,11 +162,13 @@ Do not pre-split WorkItems or decide their dependsOn, execution path,
|
|
|
162
162
|
acceptance, or Integration; the Leader owns WorkItem creation, replacement,
|
|
163
163
|
parallel dispatch, dependency and conflict resolution inside the one Task.
|
|
164
164
|
|
|
165
|
-
The Leader chooses among direct execution,
|
|
166
|
-
AgentRun.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
The Leader chooses among direct execution, native subagents, and a Task Role
|
|
166
|
+
AgentRun. Native subagents are created inside the Leader Session, inherit the
|
|
167
|
+
Leader Agent, ignore Task Role Agent bindings, and have no Yui launch command.
|
|
168
|
+
Their structured lifecycle and completion notifications may span provider
|
|
169
|
+
Turns inside the same Yui AgentRun. A Task Role is required when the user
|
|
170
|
+
requests a different provider, credentials, interactive Session, or durable
|
|
171
|
+
independent lifecycle.
|
|
170
172
|
|
|
171
173
|
When the user requires a specific Leader or Worker provider, inspect Roles
|
|
172
174
|
before routing:
|