@zq-silk/yui 0.14.0 → 0.14.2
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/ARCHITECTURE.md +64 -35
- package/README.md +258 -125
- package/dist/agent/argumentPolicy.js +2 -1
- package/dist/agent/managedRuntimeEnvironment.js +5 -8
- package/dist/cli/commandCatalog.js +74 -109
- package/dist/cli/helpRenderer.js +1 -2
- package/dist/cli/interactionCandidates.js +10 -0
- package/dist/cli/interactionPolicy.js +76 -37
- package/dist/cli/roleWizard.js +5 -6
- package/dist/cli/updateOrchestrator.js +10 -8
- package/dist/cli/updatePorts.js +17 -13
- package/dist/cli/upgradeCommand.js +2 -5
- package/dist/cli.js +268 -231
- package/dist/commands/agentCommands.js +13 -0
- package/dist/commands/configCommands.js +7 -19
- package/dist/commands/configOverview.js +3 -2
- package/dist/commands/durableJobCommands.js +1 -1
- package/dist/commands/executionAuditCommands.js +4 -9
- package/dist/commands/globalRoleCommands.js +17 -0
- package/dist/commands/profileCommands.js +200 -30
- package/dist/commands/sessionCommands.js +1 -1
- package/dist/commands/taskActor.js +29 -127
- package/dist/commands/taskChangeSetCommands.js +1 -3
- package/dist/commands/taskCommands.js +1771 -2107
- package/dist/commands/taskCompletionGate.js +27 -103
- package/dist/commands/taskContextCommand.js +47 -80
- package/dist/commands/taskExecutionCommands.js +9 -27
- package/dist/commands/taskInputCommands.js +10 -10
- package/dist/commands/taskIntegrationCommands.js +69 -61
- package/dist/commands/taskIntegrationQueueCommands.js +1 -1
- package/dist/commands/taskNextActionCommand.js +8 -29
- package/dist/commands/taskOverviewCommand.js +25 -3
- package/dist/commands/taskPublicationCommands.js +151 -85
- package/dist/commands/taskPublicationVerifyCommand.js +181 -0
- package/dist/commands/taskRemoteDeliveryCommand.js +134 -0
- package/dist/commands/taskRoleRuntimeStatus.js +5 -6
- package/dist/commands/taskUpstreamCommands.js +79 -95
- package/dist/config/configCatalog.js +1 -1
- package/dist/context/contextSnapshot.js +17 -2
- package/dist/context/sessionBootstrapManifest.js +18 -1
- package/dist/context/sourceTurnContext.js +30 -0
- package/dist/context/turnContextPack.js +107 -48
- package/dist/context/turnInputContract.js +11 -4
- package/dist/context/wakeNotification.js +84 -22
- package/dist/controller/agentRuntimeObserver.js +9 -12
- package/dist/controller/clientRuntime.js +13 -13
- package/dist/controller/controller.js +11 -11
- package/dist/controller/fileSchedulerStoreAdapter.js +262 -219
- package/dist/controller/jobControl.js +11 -10
- package/dist/controller/resourceInventory.js +6 -6
- package/dist/controller/resourceInventoryLinux.js +2 -2
- package/dist/controller/runtime.js +18 -61
- package/dist/controller/runtimeEventInbox.js +57 -34
- package/dist/controller/runtimeEventProcessor.js +36 -96
- package/dist/controller/runtimeHookTurnFence.js +33 -57
- package/dist/controller/runtimeLaunchCoordinator.js +44 -40
- package/dist/controller/runtimeObservationHook.js +18 -12
- package/dist/controller/sessionNotify.js +43 -28
- package/dist/controller/sessionOwnerReconciliation.js +21 -21
- package/dist/controller/structuredProviderObservation.js +13 -16
- package/dist/coordination/workMailboxQueue.js +132 -0
- package/dist/core/controllerServer.js +1 -0
- package/dist/domain/agentResultTransport.js +60 -0
- package/dist/execution/executionHealth.js +111 -118
- package/dist/execution/reviewMainTurn.js +161 -0
- package/dist/execution/workItemExecution.js +454 -0
- package/dist/execution/workItemExecutionProjection.js +309 -0
- package/dist/execution/workItemMainTurn.js +164 -0
- package/dist/executor/agentExecutor.js +19 -19
- package/dist/executor/executorRegistry.js +7 -28
- package/dist/executor/fileRoleLaunchPlanner.js +51 -83
- package/dist/external/githubPublicationVerifier.js +114 -0
- package/dist/external/gitlabPublicationVerifier.js +158 -0
- package/dist/external/pinnedCommandRunner.js +73 -0
- package/dist/integration/changeSetManifest.js +0 -3
- package/dist/integration/deliveryObligation.js +43 -6
- package/dist/integration/gitIntegrationService.js +284 -101
- package/dist/integration/integrationAttempt.js +64 -14
- package/dist/integration/integrationQueueEntry.js +5 -35
- package/dist/integration/integrationQueueService.js +65 -194
- package/dist/lifecycle/canonicalLifecycleEvent.js +16 -15
- package/dist/lifecycle/exactTurnTerminalization.js +100 -97
- package/dist/message/message.js +16 -0
- package/dist/observability/executionAudit.js +4 -25
- package/dist/observability/faultClassification.js +58 -70
- package/dist/observability/orchestrationMetrics.js +8 -50
- package/dist/profile/agentProfile.js +60 -15
- package/dist/profile/agentProfileRuntime.js +100 -0
- package/dist/release/releaseWorkflowPorts.js +5 -68
- package/dist/repository/executionLaneGitSnapshot.js +80 -0
- package/dist/repository/gitWorkspace.js +9 -67
- package/dist/repository/taskBaseFreshness.js +3 -1
- package/dist/repository/taskWorkspaceCoordinator.js +32 -4
- package/dist/repository/taskWorkspacePreparer.js +252 -411
- package/dist/resources/liveReferences.js +6 -55
- package/dist/resources/resourceDiscovery.js +1 -30
- package/dist/resources/resourceRegistrar.js +0 -23
- package/dist/review/deltaRecheck.js +8 -65
- package/dist/review/reviewAcceptance.js +22 -19
- package/dist/review/reviewConfig.js +0 -10
- package/dist/review/reviewDecision.js +2 -2
- package/dist/review/reviewRound.js +147 -273
- package/dist/review/reviewerAvailability.js +13 -23
- package/dist/role/role.js +3 -0
- package/dist/runtime/agentDriverObservation.js +1 -1
- package/dist/runtime/agentHost.js +51 -51
- package/dist/runtime/builtinAgentDrivers.js +9 -2
- package/dist/runtime/codexAppServerRuntime.js +23 -5
- package/dist/runtime/exactControlPlane.js +2 -267
- package/dist/runtime/firstProgressAdvisory.js +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/launchBroker.js +11 -11
- package/dist/runtime/lifecycleReservation.js +2 -2
- package/dist/runtime/managedCaller.js +111 -0
- package/dist/runtime/ports.js +16 -3
- package/dist/runtime/preallocatedNativeSession.js +2 -2
- package/dist/runtime/processExitObservation.js +3 -2
- package/dist/runtime/providerContinuationReconciliationService.js +1 -1
- package/dist/runtime/runtimeBinding.js +1 -1
- package/dist/runtime/runtimeObservation.js +33 -16
- package/dist/runtime/runtimeSessionCandidate.js +2 -2
- package/dist/runtime/runtimeStopReceipt.js +11 -11
- package/dist/runtime/sessionLaunchRequest.js +2 -2
- package/dist/runtime/sessionOwnerIdentity.js +9 -9
- package/dist/runtime/sessionOwnerRegistry.js +13 -13
- package/dist/runtime/sessionReconciliation.js +4 -4
- package/dist/runtime/sessionTerminationGuard.js +9 -9
- package/dist/runtime/sessionTokenMetrics.js +5 -7
- package/dist/runtime/structuredProviderHost.js +5 -5
- package/dist/runtime/taskRuntimeIsolation.js +24 -24
- package/dist/runtime/tmuxAdapters.js +32 -30
- package/dist/scheduler/activeRoleTurnDelivery.js +37 -15
- package/dist/scheduler/leaderWakeupProcessor.js +78 -55
- package/dist/scheduler/roleTurnLiveness.js +6 -6
- package/dist/scheduler/roleTurnStall.js +8 -9
- package/dist/scheduler/taskExecutionProjection.js +19 -41
- package/dist/scheduler/taskObservabilityProjection.js +75 -122
- package/dist/storage/sqliteSchema.js +1 -21
- package/dist/storage/sqliteStore.js +62 -47
- package/dist/storage/storageSchema.js +1 -8
- package/dist/storage/storageVersions.js +7 -4
- package/dist/storage/taskStore.js +8 -8
- package/dist/storage/upgrade/upgradeOrchestrator.js +112 -83
- package/dist/task/completionReadiness.js +17 -98
- package/dist/task/deliveryGuard.js +9 -11
- package/dist/task/draftPlan.js +142 -0
- package/dist/task/nextAction.js +179 -477
- package/dist/task/publicationVerification.js +1 -0
- package/dist/task/remoteDelivery.js +233 -0
- package/dist/task/task.js +108 -4
- package/dist/task/taskRecordReference.js +0 -1
- package/dist/turn/turn.js +109 -16
- package/dist/verification/verificationGateService.js +0 -26
- package/dist/web/assets/client/components.js +99 -121
- package/dist/web/assets/client/i18n.js +136 -58
- package/dist/web/assets/client/view.js +44 -0
- package/dist/web/assets/styles/cards.js +3 -15
- package/dist/web/assets/styles/widgets.js +4 -0
- package/dist/web/webSnapshot.js +29 -14
- package/dist/workItem/dependencyGate.js +34 -0
- package/dist/workItem/workItem.js +99 -266
- package/dist/workspace/workItemChangeSetManager.js +15 -59
- package/docs/task-local-identity.md +1 -1
- package/i18n/README.zh-CN.md +165 -59
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +272 -782
- package/skills/yui-operator/SKILL.md +190 -365
- package/skills/yui-reviewer/SKILL.md +40 -33
- package/skills/yui-runtime/SKILL.md +27 -6
- package/skills/yui-worker/SKILL.md +19 -6
- package/dist/execution/candidateConvergence.js +0 -623
- package/dist/execution/executionGroup.js +0 -854
- package/dist/execution/resourceBroker.js +0 -426
- package/dist/executor/launchPlan.js +0 -16
- package/dist/review/reviewFinding.js +0 -240
- package/dist/review/reviewFindingLedger.js +0 -550
- package/dist/review/reviewOutcomeClassifier.js +0 -255
- package/dist/scheduler/resourceQueueProjection.js +0 -71
- package/dist/task/repairWave.js +0 -150
|
@@ -156,82 +156,65 @@ export function executionBand(projection, t, locale) {
|
|
|
156
156
|
return band;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
// ---
|
|
160
|
-
export function
|
|
159
|
+
// --- WorkItem execution and recovery -----------------------------------------
|
|
160
|
+
export function workItemExecutionCard(projection, t) {
|
|
161
161
|
const card = node("article", "record-card exec-group");
|
|
162
162
|
const head = node("div", "record-head");
|
|
163
163
|
const titleRow = node("div", "record-title-row");
|
|
164
|
-
titleRow.append(node("strong", "record-title",
|
|
164
|
+
titleRow.append(node("strong", "record-title", t("workExec.title")));
|
|
165
165
|
head.append(titleRow);
|
|
166
166
|
const pills = node("div", "record-pills");
|
|
167
|
-
pills.append(
|
|
168
|
-
|
|
169
|
-
? t("exec.strategy.fixed").replace("{count}", String(summary.strategy.count))
|
|
170
|
-
: t("exec.strategy.adaptive").replace("{max}", String(summary.strategy.max));
|
|
171
|
-
pills.append(chip(strategy));
|
|
172
|
-
if (summary.failedLaneCount > 0) {
|
|
173
|
-
pills.append(chip(summary.failedLaneCount + " " + t("exec.lanesFailed"), "is-danger"));
|
|
174
|
-
}
|
|
167
|
+
pills.append(chip(t("workExec.shape." + projection.shape), "is-active"));
|
|
168
|
+
pills.append(chip(t("workExec.synthesis." + projection.synthesis.status)));
|
|
175
169
|
head.append(pills);
|
|
176
170
|
card.append(head);
|
|
177
171
|
|
|
178
|
-
if (
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
res.append(node("span", "exec-resolution-decision",
|
|
222
|
-
t("resolution." + summary.resolution.decision)));
|
|
223
|
-
res.append(node("span", "exec-resolution-summary", summary.resolution.summary));
|
|
224
|
-
res.append(node("time", "", formatDateTime(summary.resolution.decidedAt, locale)));
|
|
225
|
-
card.append(res);
|
|
226
|
-
}
|
|
172
|
+
if (projection.lanes && projection.lanes.length) {
|
|
173
|
+
const lanes = node("div", "lane-list");
|
|
174
|
+
projection.lanes.forEach(function (lane) {
|
|
175
|
+
const row = node("div", "lane-row");
|
|
176
|
+
row.append(statusDot(lane.status));
|
|
177
|
+
row.append(node("span", "lane-role", lane.roleName));
|
|
178
|
+
row.append(node("span", "lane-status", t("workExec.lane." + lane.status)));
|
|
179
|
+
row.append(node("span", "mono", lane.currentTurnId || t("detail.unobserved")));
|
|
180
|
+
if (lane.retryTurnId) row.append(chip(t("workExec.retry") + " · " + lane.retryTurnId, "is-danger"));
|
|
181
|
+
if (lane.settleTurnId) row.append(chip(t("workExec.settle") + " · " + lane.settleTurnId));
|
|
182
|
+
if (lane.session === "unobserved") row.append(chip(t("detail.unobserved")));
|
|
183
|
+
lanes.append(row);
|
|
184
|
+
});
|
|
185
|
+
card.append(lanes);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const facts = node("div", "record-meta execution-resource-meta");
|
|
189
|
+
facts.append(node("span", "", t("workExec.main") + " · "
|
|
190
|
+
+ (projection.mainTurn.turnId || t("detail.unobserved"))
|
|
191
|
+
+ " [" + t("workExec.mainStatus." + projection.mainTurn.status) + "]"));
|
|
192
|
+
facts.append(node("span", "", t("workExec.candidate") + " · "
|
|
193
|
+
+ (projection.candidate.candidateId || t("workExec.none"))
|
|
194
|
+
+ " [" + t("workExec.candidateStatus." + projection.candidate.status) + "]"));
|
|
195
|
+
card.append(facts);
|
|
196
|
+
|
|
197
|
+
if (projection.candidate.sourceExecutionGroupId) {
|
|
198
|
+
const provenance = projection.candidate.successfulLaneTurns.map(function (lane) {
|
|
199
|
+
return lane.laneId + " → " + lane.successfulTurnId;
|
|
200
|
+
}).join(", ") || t("detail.unobserved");
|
|
201
|
+
card.append(node("p", "muted mono", (projection.candidate.mainTurnId || t("detail.unobserved"))
|
|
202
|
+
+ " → " + projection.candidate.sourceExecutionGroupId + " → " + provenance));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const next = node("div", "exec-resolution");
|
|
206
|
+
next.append(node("span", "exec-resolution-decision", t("workExec.next")));
|
|
207
|
+
next.append(node("span", "exec-resolution-summary",
|
|
208
|
+
t("workExec.action." + projection.nextAction.kind)
|
|
209
|
+
+ " · " + t("workExec.owner") + " "
|
|
210
|
+
+ (projection.nextAction.owners.join(", ") || t("workExec.none"))));
|
|
211
|
+
if (projection.nextAction.targetIds.length) {
|
|
212
|
+
next.append(node("span", "mono", projection.nextAction.targetIds.join(", ")));
|
|
213
|
+
}
|
|
214
|
+
card.append(next);
|
|
227
215
|
return card;
|
|
228
216
|
}
|
|
229
217
|
|
|
230
|
-
function formatResource(used, remaining, observable) {
|
|
231
|
-
const value = String(used) + (remaining === undefined ? "" : "/" + String(used + remaining));
|
|
232
|
-
return observable === false ? value + "*" : value;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
218
|
export function observabilityMetricCard(observability, t) {
|
|
236
219
|
if (!observability) return null;
|
|
237
220
|
const card = node("div", "observability-metrics");
|
|
@@ -305,23 +288,6 @@ export function candidateList(candidates, t, locale) {
|
|
|
305
288
|
return block;
|
|
306
289
|
}
|
|
307
290
|
|
|
308
|
-
// --- Execution findings (checks / review findings) ---------------------------
|
|
309
|
-
export function findingsBlock(label, findings, t) {
|
|
310
|
-
if (!findings || !findings.length) return null;
|
|
311
|
-
const block = node("div", "record-block");
|
|
312
|
-
block.append(node("small", "", label));
|
|
313
|
-
const list = node("div", "finding-list");
|
|
314
|
-
findings.forEach(function (finding) {
|
|
315
|
-
const row = node("div", "finding-row is-" + finding.severity);
|
|
316
|
-
row.append(chip(t("finding.severity." + finding.severity), "is-" + finding.severity));
|
|
317
|
-
row.append(node("span", "finding-summary", finding.summary));
|
|
318
|
-
row.append(chip(t("finding.status." + finding.status)));
|
|
319
|
-
list.append(row);
|
|
320
|
-
});
|
|
321
|
-
block.append(list);
|
|
322
|
-
return block;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
291
|
// --- Progressive disclosure --------------------------------------------------
|
|
326
292
|
// Re-render is cheap and happens whenever the underlying data changes, so all
|
|
327
293
|
// disclosure state (collapsed blocks, visible pages) is deliberately
|
|
@@ -548,44 +514,28 @@ export function workItemCard(item, titles, t, locale, actions, taskId) {
|
|
|
548
514
|
}
|
|
549
515
|
if (chipCols.childNodes.length) body.append(chipCols);
|
|
550
516
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
if (item.currentExecution) {
|
|
554
|
-
body.append(executionGroupCard(item.currentExecution, t, locale));
|
|
517
|
+
if (item.execution) {
|
|
518
|
+
body.append(workItemExecutionCard(item.execution, t));
|
|
555
519
|
}
|
|
556
520
|
|
|
557
521
|
if (item.observability) {
|
|
558
522
|
const observability = item.observability;
|
|
559
|
-
if (observability.executionGroups && observability.executionGroups.length) {
|
|
560
|
-
observability.executionGroups.forEach(function (group) {
|
|
561
|
-
if (!item.currentExecution || group.groupId !== item.currentExecution.groupId) {
|
|
562
|
-
body.append(executionGroupCard(group, t, locale));
|
|
563
|
-
}
|
|
564
|
-
});
|
|
565
|
-
}
|
|
566
523
|
const metrics = node("div", "record-meta work-item-observability");
|
|
567
524
|
metrics.append(node("span", "", t("detail.cost") + " · "
|
|
568
|
-
+ observability.cost.
|
|
569
|
-
|
|
525
|
+
+ (observability.cost.tokensObservable
|
|
526
|
+
? observability.cost.tokens + " tokens"
|
|
527
|
+
: t("detail.unobserved"))));
|
|
528
|
+
metrics.append(node("span", "", observability.cost.toolCallsObservable
|
|
529
|
+
? observability.cost.toolCalls + " tools"
|
|
530
|
+
: t("detail.unobserved")));
|
|
570
531
|
metrics.append(node("span", "", observability.cost.wallClockSeconds + "s"));
|
|
571
532
|
metrics.append(node("span", "", t("detail.contextSnapshots") + " · "
|
|
572
533
|
+ observability.context.snapshotCount));
|
|
573
|
-
metrics.append(node("span", "", t("detail.
|
|
574
|
-
+ observability.
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
}
|
|
534
|
+
metrics.append(node("span", "", t("detail.results") + " · "
|
|
535
|
+
+ (observability.resultCount == null
|
|
536
|
+
? t("detail.unobserved")
|
|
537
|
+
: observability.resultCount)));
|
|
578
538
|
body.append(metrics);
|
|
579
|
-
if (observability.stages && observability.stages.length) {
|
|
580
|
-
const stages = node("div", "chip-row work-item-stages");
|
|
581
|
-
observability.stages.forEach(function (stage) {
|
|
582
|
-
const label = (stage.stage || "single")
|
|
583
|
-
+ (stage.round === undefined ? "" : " #" + stage.round)
|
|
584
|
-
+ (stage.resolution ? " · " + stage.resolution : "");
|
|
585
|
-
stages.append(chip(label, stage.groupId === observability.currentGroupId ? "is-active" : ""));
|
|
586
|
-
});
|
|
587
|
-
body.append(stages);
|
|
588
|
-
}
|
|
589
539
|
}
|
|
590
540
|
|
|
591
541
|
// Review candidates submitted for this WorkItem, newest first.
|
|
@@ -629,6 +579,9 @@ export function turnCard(turn, t, locale) {
|
|
|
629
579
|
if (turn.result?.output) {
|
|
630
580
|
card.append(richText(t("detail.outcome"), turn.result.output, t, { className: "execute-io outcome", threshold: 320 }));
|
|
631
581
|
}
|
|
582
|
+
if (turn.result?.diagnostic) {
|
|
583
|
+
card.append(richText(t("detail.failure"), turn.result.diagnostic, t, { className: "execute-io outcome", threshold: 320 }));
|
|
584
|
+
}
|
|
632
585
|
|
|
633
586
|
const foot = node("div", "execute-foot");
|
|
634
587
|
const tags = node("div", "execute-tags");
|
|
@@ -662,6 +615,9 @@ export function reviewCard(round, t, locale) {
|
|
|
662
615
|
head.append(titleRow);
|
|
663
616
|
const headPills = node("div", "record-pills");
|
|
664
617
|
if (round.scope) headPills.append(pill(t, "review.scope", round.scope));
|
|
618
|
+
headPills.append(chip(t(round.executionGroup
|
|
619
|
+
? "reviewExec.replicated"
|
|
620
|
+
: "reviewExec.direct"), round.executionGroup ? "is-active" : ""));
|
|
665
621
|
headPills.append(pill(t, "review", round.status));
|
|
666
622
|
head.append(headPills);
|
|
667
623
|
card.append(head);
|
|
@@ -675,23 +631,44 @@ export function reviewCard(round, t, locale) {
|
|
|
675
631
|
if (round.workspace && round.workspace.root) {
|
|
676
632
|
meta.append(pathMetaItem(t("detail.workspace"), round.workspace.root));
|
|
677
633
|
}
|
|
678
|
-
if (round.
|
|
679
|
-
meta.append(node("span", "", t("detail.
|
|
634
|
+
if (round.reviewerTurnId) {
|
|
635
|
+
meta.append(node("span", "mono", t("detail.reviewerTurn") + " · " + round.reviewerTurnId));
|
|
680
636
|
}
|
|
681
637
|
if (round.workspaceDisposition) {
|
|
682
638
|
meta.append(node("span", "", t("detail.workspaceDisposition") + " · "
|
|
683
639
|
+ t("disposition." + round.workspaceDisposition.kind)));
|
|
684
640
|
}
|
|
685
641
|
card.append(meta);
|
|
686
|
-
if (round.
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
642
|
+
if (round.executionGroup) {
|
|
643
|
+
const group = round.executionGroup;
|
|
644
|
+
const execution = node("div", "record-block exec-group");
|
|
645
|
+
const groupMeta = node("div", "record-meta execution-resource-meta");
|
|
646
|
+
groupMeta.append(node("span", "mono", group.id));
|
|
647
|
+
groupMeta.append(node("span", "", t("reviewExec.assignment") + " · "
|
|
648
|
+
+ group.assignment.contextSnapshotRef.id));
|
|
649
|
+
groupMeta.append(node("span", "", t("reviewExec.main") + " · "
|
|
650
|
+
+ (round.reviewerTurnId || t("detail.unobserved"))));
|
|
651
|
+
execution.append(groupMeta);
|
|
652
|
+
const lanes = node("div", "lane-list");
|
|
653
|
+
group.lanes.forEach(function (lane) {
|
|
654
|
+
const row = node("div", "lane-row");
|
|
655
|
+
row.append(statusDot(lane.disposition === "open" ? "running" : lane.disposition));
|
|
656
|
+
row.append(node("span", "lane-role", t("reviewExec.producer") + " " + lane.ordinal
|
|
657
|
+
+ " · " + lane.roleName));
|
|
658
|
+
row.append(node("span", "lane-status", t("reviewExec.status." + lane.disposition)));
|
|
659
|
+
row.append(node("span", "mono", lane.currentTurnId || t("detail.unobserved")));
|
|
660
|
+
lanes.append(row);
|
|
661
|
+
});
|
|
662
|
+
execution.append(lanes);
|
|
663
|
+
card.append(execution);
|
|
664
|
+
}
|
|
665
|
+
if (round.failure) {
|
|
666
|
+
card.append(richText(
|
|
667
|
+
t("detail.failure"),
|
|
668
|
+
round.failure.kind + ": " + round.failure.message,
|
|
669
|
+
t
|
|
670
|
+
));
|
|
671
|
+
}
|
|
695
672
|
return card;
|
|
696
673
|
}
|
|
697
674
|
|
|
@@ -831,6 +808,7 @@ export function messageCard(message, t, locale) {
|
|
|
831
808
|
titleRow.append(node("strong", "record-title", messageAuthor(message, t)));
|
|
832
809
|
head.append(titleRow);
|
|
833
810
|
if (message.kind) head.append(pill(t, "messageKind", message.kind));
|
|
811
|
+
if (message.status) head.append(pill(t, "status", message.status));
|
|
834
812
|
card.append(head);
|
|
835
813
|
|
|
836
814
|
const meta = node("div", "record-meta");
|
|
@@ -36,11 +36,18 @@ const messages = {
|
|
|
36
36
|
"breadcrumb.taskList": "All work",
|
|
37
37
|
"controls.language": "Language",
|
|
38
38
|
"controls.theme": "Theme",
|
|
39
|
+
"common.yes": "yes",
|
|
40
|
+
"common.no": "no",
|
|
39
41
|
"decision.active": "Active",
|
|
40
42
|
"decision.superseded": "Superseded",
|
|
41
43
|
"delivery.delivered": "Delivered",
|
|
42
44
|
"delivery.pushed": "Pushed · awaiting provider acceptance",
|
|
43
45
|
"delivery.pending": "Awaiting delivery",
|
|
46
|
+
"remoteDelivery.none": "No code delivery",
|
|
47
|
+
"remoteDelivery.unavailable": "Exact heads unavailable",
|
|
48
|
+
"remoteDelivery.pending": "Pending merge",
|
|
49
|
+
"remoteDelivery.partial": "Partially merged",
|
|
50
|
+
"remoteDelivery.merged": "Merged",
|
|
44
51
|
"detail.acceptance": "Acceptance criteria",
|
|
45
52
|
"detail.agent": "Agent",
|
|
46
53
|
"detail.agents": "Agents",
|
|
@@ -49,16 +56,12 @@ const messages = {
|
|
|
49
56
|
"detail.assignee": "Assignee",
|
|
50
57
|
"detail.attention": "Needs your input",
|
|
51
58
|
"detail.baseRef": "Base ref",
|
|
52
|
-
"detail.checks": "Checks",
|
|
53
59
|
"detail.completedBy": "Completed by",
|
|
54
60
|
"detail.conclusion": "Task conclusion",
|
|
55
61
|
"detail.constraints": "Constraints",
|
|
56
62
|
"detail.decisions": "Decisions",
|
|
57
63
|
"detail.dependsOn": "Depends on",
|
|
58
64
|
"detail.dag": "Task DAG",
|
|
59
|
-
"detail.stage": "Stage",
|
|
60
|
-
"detail.round": "Round",
|
|
61
|
-
"detail.stageAttempt": "Attempt",
|
|
62
65
|
"detail.cost": "Cost",
|
|
63
66
|
"detail.tokens": "Tokens",
|
|
64
67
|
"detail.sessionTotalTokens": "Session total tokens",
|
|
@@ -66,7 +69,6 @@ const messages = {
|
|
|
66
69
|
"detail.toolCalls": "Tool calls",
|
|
67
70
|
"detail.wallClock": "Wall clock",
|
|
68
71
|
"detail.ready": "Ready",
|
|
69
|
-
"detail.quorum": "Quorum",
|
|
70
72
|
"detail.contextSnapshots": "Context snapshots",
|
|
71
73
|
"detail.contextBytes": "Context bytes",
|
|
72
74
|
"detail.compression": "Compression",
|
|
@@ -74,13 +76,22 @@ const messages = {
|
|
|
74
76
|
"detail.partial": "partial",
|
|
75
77
|
"detail.unavailable": "unavailable",
|
|
76
78
|
"detail.unobserved": "unobserved",
|
|
77
|
-
"detail.
|
|
79
|
+
"detail.results": "Agent results",
|
|
80
|
+
"detail.remoteDelivery": "Remote delivery",
|
|
81
|
+
"detail.expectedHeads": "Expected heads",
|
|
82
|
+
"detail.provisional": "provisional",
|
|
83
|
+
"detail.allMerged": "All merged",
|
|
84
|
+
"detail.allVerified": "All verified",
|
|
85
|
+
"detail.integratedCoverage": "Archive --integrated coverage",
|
|
86
|
+
"detail.satisfied": "satisfied",
|
|
87
|
+
"detail.blocked": "blocked",
|
|
78
88
|
"detail.desired": "Desired launch",
|
|
79
89
|
"detail.desiredAgent": "Desired Agent",
|
|
80
90
|
"detail.due": "Due",
|
|
81
91
|
"detail.effective": "Effective launch",
|
|
82
92
|
"detail.effectiveAgent": "Effective Agent",
|
|
83
|
-
"detail.
|
|
93
|
+
"detail.failure": "Execution failure",
|
|
94
|
+
"detail.reviewerTurn": "Reviewer Turn",
|
|
84
95
|
"detail.execution": "Turns",
|
|
85
96
|
"detail.expectedOutput": "Expected output",
|
|
86
97
|
"detail.focus": "Current focus",
|
|
@@ -187,6 +198,14 @@ const messages = {
|
|
|
187
198
|
"review.failed": "Failed",
|
|
188
199
|
"review.pending": "Pending",
|
|
189
200
|
"review.running": "Running",
|
|
201
|
+
"reviewExec.assignment": "Frozen assignment",
|
|
202
|
+
"reviewExec.direct": "Direct Review",
|
|
203
|
+
"reviewExec.main": "Main Reviewer synthesis",
|
|
204
|
+
"reviewExec.producer": "Producer",
|
|
205
|
+
"reviewExec.replicated": "Replicated Review",
|
|
206
|
+
"reviewExec.status.failed": "Settled failed",
|
|
207
|
+
"reviewExec.status.open": "Open",
|
|
208
|
+
"reviewExec.status.succeeded": "Succeeded",
|
|
190
209
|
"role.detached": "Detached",
|
|
191
210
|
"role.exited": "Exited",
|
|
192
211
|
"role.failed": "Failed",
|
|
@@ -235,6 +254,48 @@ const messages = {
|
|
|
235
254
|
"work.retired": "Retired",
|
|
236
255
|
"work.running": "Running",
|
|
237
256
|
"work.superseded": "Superseded",
|
|
257
|
+
"workExec.title": "Execution and recovery",
|
|
258
|
+
"workExec.shape.direct": "Direct",
|
|
259
|
+
"workExec.shape.replicated": "Replicated",
|
|
260
|
+
"workExec.lane.running": "Running",
|
|
261
|
+
"workExec.lane.succeeded": "Succeeded",
|
|
262
|
+
"workExec.lane.needs-attention": "Needs attention",
|
|
263
|
+
"workExec.lane.failed": "Failed",
|
|
264
|
+
"workExec.lane.unknown": "Unknown",
|
|
265
|
+
"workExec.retry": "Retry",
|
|
266
|
+
"workExec.settle": "Settle",
|
|
267
|
+
"workExec.main": "Main Turn",
|
|
268
|
+
"workExec.candidate": "Candidate source",
|
|
269
|
+
"workExec.next": "Next action",
|
|
270
|
+
"workExec.owner": "owner",
|
|
271
|
+
"workExec.none": "none",
|
|
272
|
+
"workExec.synthesis.not-applicable": "No synthesis",
|
|
273
|
+
"workExec.synthesis.blocked-by-open-lanes": "Waiting for all Lanes",
|
|
274
|
+
"workExec.synthesis.eligible": "Eligible for synthesis",
|
|
275
|
+
"workExec.synthesis.insufficient-results": "Insufficient successful results",
|
|
276
|
+
"workExec.synthesis.main-running": "Main Turn running",
|
|
277
|
+
"workExec.synthesis.main-needs-attention": "Main Turn needs attention",
|
|
278
|
+
"workExec.synthesis.complete": "Synthesis complete",
|
|
279
|
+
"workExec.synthesis.unknown": "Synthesis unknown",
|
|
280
|
+
"workExec.mainStatus.not-started": "Not started",
|
|
281
|
+
"workExec.mainStatus.running": "Running",
|
|
282
|
+
"workExec.mainStatus.succeeded": "Succeeded",
|
|
283
|
+
"workExec.mainStatus.needs-attention": "Needs attention",
|
|
284
|
+
"workExec.mainStatus.unknown": "Unknown",
|
|
285
|
+
"workExec.candidateStatus.none": "None",
|
|
286
|
+
"workExec.candidateStatus.observed": "Observed",
|
|
287
|
+
"workExec.candidateStatus.unknown": "Unknown",
|
|
288
|
+
"workExec.action.dispatch-work": "Dispatch work",
|
|
289
|
+
"workExec.action.wait-for-lanes": "Wait for Lanes",
|
|
290
|
+
"workExec.action.retry-or-settle-lanes": "Retry or settle exact Lanes",
|
|
291
|
+
"workExec.action.inspect-unknown": "Inspect missing facts",
|
|
292
|
+
"workExec.action.await-main-dispatch": "Await main Turn dispatch",
|
|
293
|
+
"workExec.action.wait-for-main": "Wait for main Turn",
|
|
294
|
+
"workExec.action.retry-main": "Retry main Turn",
|
|
295
|
+
"workExec.action.redispatch-work": "Redispatch WorkItem",
|
|
296
|
+
"workExec.action.submit-candidate": "Submit Candidate",
|
|
297
|
+
"workExec.action.decide-candidate": "Review or accept Candidate",
|
|
298
|
+
"workExec.action.none": "No action",
|
|
238
299
|
"stats.running": "running",
|
|
239
300
|
"stats.inputs": "inputs",
|
|
240
301
|
"exec.status.needs-leader-action": "Needs leader action",
|
|
@@ -277,16 +338,6 @@ const messages = {
|
|
|
277
338
|
"exec.monitoring.stopped": "Monitoring stopped",
|
|
278
339
|
"exec.failClosed": "Fail-closed",
|
|
279
340
|
"exec.executors": "active",
|
|
280
|
-
"exec.purpose.execution": "Execution",
|
|
281
|
-
"exec.purpose.review": "Review",
|
|
282
|
-
"exec.strategy.fixed": "Fixed · {count} lanes",
|
|
283
|
-
"exec.strategy.adaptive": "Adaptive · up to {max}",
|
|
284
|
-
"exec.lanesFailed": "failed",
|
|
285
|
-
"lane.pending": "Pending",
|
|
286
|
-
"lane.running": "Running",
|
|
287
|
-
"lane.completed": "Completed",
|
|
288
|
-
"lane.failed": "Failed",
|
|
289
|
-
"lane.skipped": "Skipped",
|
|
290
341
|
"dag.ready": "Ready",
|
|
291
342
|
"dag.dependsOn": "Dependencies",
|
|
292
343
|
"dag.rootCause": "Root cause",
|
|
@@ -300,27 +351,15 @@ const messages = {
|
|
|
300
351
|
"dag.edge.active": "active",
|
|
301
352
|
"dag.edge.failed-open": "failed",
|
|
302
353
|
"dag.edge.dead": "missing",
|
|
303
|
-
"resolution.accept": "Accepted",
|
|
304
|
-
"resolution.reject": "Rejected",
|
|
305
|
-
"resolution.retry": "Retry",
|
|
306
|
-
"resolution.blocked": "Blocked",
|
|
307
354
|
"detail.candidates": "Candidates",
|
|
308
355
|
"detail.disposition": "Retirement",
|
|
309
356
|
"detail.replacementWorkItem": "Replaced by",
|
|
310
357
|
"detail.endedAt": "Ended",
|
|
311
|
-
"detail.findings": "Findings",
|
|
312
|
-
"detail.report": "Report",
|
|
313
358
|
"detail.workspaceDisposition": "Workspace",
|
|
314
359
|
"detail.lineage": "Execution",
|
|
315
360
|
"detail.requester": "Requested by",
|
|
316
361
|
"candidate.source.direct": "Direct",
|
|
317
362
|
"candidate.source.turn": "Turn",
|
|
318
|
-
"finding.severity.low": "Low",
|
|
319
|
-
"finding.severity.medium": "Medium",
|
|
320
|
-
"finding.severity.high": "High",
|
|
321
|
-
"finding.severity.critical": "Critical",
|
|
322
|
-
"finding.status.open": "Open",
|
|
323
|
-
"finding.status.resolved": "Resolved",
|
|
324
363
|
"turn.purpose.execution": "Execution",
|
|
325
364
|
"turn.purpose.review": "Review",
|
|
326
365
|
"review.scope.work-item": "Work item",
|
|
@@ -362,11 +401,18 @@ const messages = {
|
|
|
362
401
|
"breadcrumb.taskList": "所有工作",
|
|
363
402
|
"controls.language": "语言",
|
|
364
403
|
"controls.theme": "主题",
|
|
404
|
+
"common.yes": "是",
|
|
405
|
+
"common.no": "否",
|
|
365
406
|
"decision.active": "有效",
|
|
366
407
|
"decision.superseded": "已替代",
|
|
367
408
|
"delivery.delivered": "已送达",
|
|
368
409
|
"delivery.pushed": "已推送 · 等待提供方确认",
|
|
369
410
|
"delivery.pending": "等待送达",
|
|
411
|
+
"remoteDelivery.none": "无代码交付",
|
|
412
|
+
"remoteDelivery.unavailable": "精确 head 不可用",
|
|
413
|
+
"remoteDelivery.pending": "待合入",
|
|
414
|
+
"remoteDelivery.partial": "部分合入",
|
|
415
|
+
"remoteDelivery.merged": "已合入",
|
|
370
416
|
"detail.acceptance": "验收标准",
|
|
371
417
|
"detail.agent": "Agent",
|
|
372
418
|
"detail.agents": "智能体",
|
|
@@ -375,16 +421,12 @@ const messages = {
|
|
|
375
421
|
"detail.assignee": "负责人",
|
|
376
422
|
"detail.attention": "需要你的输入",
|
|
377
423
|
"detail.baseRef": "基线引用",
|
|
378
|
-
"detail.checks": "检查",
|
|
379
424
|
"detail.completedBy": "完成人",
|
|
380
425
|
"detail.conclusion": "任务结论",
|
|
381
426
|
"detail.constraints": "约束",
|
|
382
427
|
"detail.decisions": "决策",
|
|
383
428
|
"detail.dependsOn": "依赖",
|
|
384
429
|
"detail.dag": "任务 DAG",
|
|
385
|
-
"detail.stage": "阶段",
|
|
386
|
-
"detail.round": "轮次",
|
|
387
|
-
"detail.stageAttempt": "阶段尝试",
|
|
388
430
|
"detail.cost": "成本",
|
|
389
431
|
"detail.tokens": "Token",
|
|
390
432
|
"detail.sessionTotalTokens": "Session 累计 Token",
|
|
@@ -392,7 +434,6 @@ const messages = {
|
|
|
392
434
|
"detail.toolCalls": "工具调用",
|
|
393
435
|
"detail.wallClock": "墙钟时间",
|
|
394
436
|
"detail.ready": "可就绪",
|
|
395
|
-
"detail.quorum": "法定数量",
|
|
396
437
|
"detail.contextSnapshots": "上下文快照",
|
|
397
438
|
"detail.contextBytes": "上下文字节",
|
|
398
439
|
"detail.compression": "压缩",
|
|
@@ -400,13 +441,22 @@ const messages = {
|
|
|
400
441
|
"detail.partial": "部分可见",
|
|
401
442
|
"detail.unavailable": "不可用",
|
|
402
443
|
"detail.unobserved": "未观测",
|
|
403
|
-
"detail.
|
|
444
|
+
"detail.results": "Agent 结果",
|
|
445
|
+
"detail.remoteDelivery": "远端交付",
|
|
446
|
+
"detail.expectedHeads": "预期交付头",
|
|
447
|
+
"detail.provisional": "暂定",
|
|
448
|
+
"detail.allMerged": "已全部合入",
|
|
449
|
+
"detail.allVerified": "已全部验证",
|
|
450
|
+
"detail.integratedCoverage": "归档 --integrated 覆盖",
|
|
451
|
+
"detail.satisfied": "已满足",
|
|
452
|
+
"detail.blocked": "未满足",
|
|
404
453
|
"detail.desired": "期望启动配置",
|
|
405
454
|
"detail.desiredAgent": "期望 Agent",
|
|
406
455
|
"detail.due": "截止时间",
|
|
407
456
|
"detail.effective": "实际启动配置",
|
|
408
457
|
"detail.effectiveAgent": "实际 Agent",
|
|
409
|
-
"detail.
|
|
458
|
+
"detail.failure": "执行失败",
|
|
459
|
+
"detail.reviewerTurn": "Reviewer Turn",
|
|
410
460
|
"detail.execution": "运行",
|
|
411
461
|
"detail.expectedOutput": "期望产出",
|
|
412
462
|
"detail.focus": "当前重点",
|
|
@@ -513,6 +563,14 @@ const messages = {
|
|
|
513
563
|
"review.failed": "失败",
|
|
514
564
|
"review.pending": "待准备",
|
|
515
565
|
"review.running": "评审中",
|
|
566
|
+
"reviewExec.assignment": "冻结任务",
|
|
567
|
+
"reviewExec.direct": "直接评审",
|
|
568
|
+
"reviewExec.main": "主 Reviewer 综合",
|
|
569
|
+
"reviewExec.producer": "Producer",
|
|
570
|
+
"reviewExec.replicated": "复制评审",
|
|
571
|
+
"reviewExec.status.failed": "已结算失败",
|
|
572
|
+
"reviewExec.status.open": "待结算",
|
|
573
|
+
"reviewExec.status.succeeded": "已成功",
|
|
516
574
|
"role.detached": "已分离",
|
|
517
575
|
"role.exited": "已退出",
|
|
518
576
|
"role.failed": "失败",
|
|
@@ -561,6 +619,48 @@ const messages = {
|
|
|
561
619
|
"work.retired": "已退役",
|
|
562
620
|
"work.running": "进行中",
|
|
563
621
|
"work.superseded": "已替代",
|
|
622
|
+
"workExec.title": "执行与恢复",
|
|
623
|
+
"workExec.shape.direct": "直接执行",
|
|
624
|
+
"workExec.shape.replicated": "复制执行",
|
|
625
|
+
"workExec.lane.running": "运行中",
|
|
626
|
+
"workExec.lane.succeeded": "已成功",
|
|
627
|
+
"workExec.lane.needs-attention": "需要处理",
|
|
628
|
+
"workExec.lane.failed": "已结算失败",
|
|
629
|
+
"workExec.lane.unknown": "未知",
|
|
630
|
+
"workExec.retry": "重试",
|
|
631
|
+
"workExec.settle": "结算",
|
|
632
|
+
"workExec.main": "主 Turn",
|
|
633
|
+
"workExec.candidate": "Candidate 来源",
|
|
634
|
+
"workExec.next": "下一步",
|
|
635
|
+
"workExec.owner": "责任人",
|
|
636
|
+
"workExec.none": "无",
|
|
637
|
+
"workExec.synthesis.not-applicable": "无需综合",
|
|
638
|
+
"workExec.synthesis.blocked-by-open-lanes": "等待全部 Lane 结算",
|
|
639
|
+
"workExec.synthesis.eligible": "可综合",
|
|
640
|
+
"workExec.synthesis.insufficient-results": "成功结果不足",
|
|
641
|
+
"workExec.synthesis.main-running": "主 Turn 运行中",
|
|
642
|
+
"workExec.synthesis.main-needs-attention": "主 Turn 需要处理",
|
|
643
|
+
"workExec.synthesis.complete": "综合已完成",
|
|
644
|
+
"workExec.synthesis.unknown": "综合状态未知",
|
|
645
|
+
"workExec.mainStatus.not-started": "未启动",
|
|
646
|
+
"workExec.mainStatus.running": "运行中",
|
|
647
|
+
"workExec.mainStatus.succeeded": "已成功",
|
|
648
|
+
"workExec.mainStatus.needs-attention": "需要处理",
|
|
649
|
+
"workExec.mainStatus.unknown": "未知",
|
|
650
|
+
"workExec.candidateStatus.none": "无",
|
|
651
|
+
"workExec.candidateStatus.observed": "已观测",
|
|
652
|
+
"workExec.candidateStatus.unknown": "未知",
|
|
653
|
+
"workExec.action.dispatch-work": "派发工作",
|
|
654
|
+
"workExec.action.wait-for-lanes": "等待 Lane",
|
|
655
|
+
"workExec.action.retry-or-settle-lanes": "重试或结算指定 Lane",
|
|
656
|
+
"workExec.action.inspect-unknown": "检查缺失事实",
|
|
657
|
+
"workExec.action.await-main-dispatch": "等待主 Turn 派发",
|
|
658
|
+
"workExec.action.wait-for-main": "等待主 Turn",
|
|
659
|
+
"workExec.action.retry-main": "重试主 Turn",
|
|
660
|
+
"workExec.action.redispatch-work": "重新派发 WorkItem",
|
|
661
|
+
"workExec.action.submit-candidate": "提交 Candidate",
|
|
662
|
+
"workExec.action.decide-candidate": "评审或接纳 Candidate",
|
|
663
|
+
"workExec.action.none": "无需操作",
|
|
564
664
|
"stats.running": "运行中",
|
|
565
665
|
"stats.inputs": "项输入",
|
|
566
666
|
"exec.status.needs-leader-action": "待负责人处理",
|
|
@@ -603,16 +703,6 @@ const messages = {
|
|
|
603
703
|
"exec.monitoring.stopped": "监控已停止",
|
|
604
704
|
"exec.failClosed": "失败关闭",
|
|
605
705
|
"exec.executors": "活跃",
|
|
606
|
-
"exec.purpose.execution": "执行",
|
|
607
|
-
"exec.purpose.review": "评审",
|
|
608
|
-
"exec.strategy.fixed": "固定 · {count} 条泳道",
|
|
609
|
-
"exec.strategy.adaptive": "自适应 · 最多 {max}",
|
|
610
|
-
"exec.lanesFailed": "失败",
|
|
611
|
-
"lane.pending": "待处理",
|
|
612
|
-
"lane.running": "运行中",
|
|
613
|
-
"lane.completed": "已完成",
|
|
614
|
-
"lane.failed": "失败",
|
|
615
|
-
"lane.skipped": "已跳过",
|
|
616
706
|
"dag.ready": "可就绪",
|
|
617
707
|
"dag.dependsOn": "依赖",
|
|
618
708
|
"dag.rootCause": "根因",
|
|
@@ -626,27 +716,15 @@ const messages = {
|
|
|
626
716
|
"dag.edge.active": "进行中",
|
|
627
717
|
"dag.edge.failed-open": "失败传播",
|
|
628
718
|
"dag.edge.dead": "缺失",
|
|
629
|
-
"resolution.accept": "已接受",
|
|
630
|
-
"resolution.reject": "已拒绝",
|
|
631
|
-
"resolution.retry": "已重试",
|
|
632
|
-
"resolution.blocked": "已阻塞",
|
|
633
719
|
"detail.candidates": "候选方案",
|
|
634
720
|
"detail.disposition": "退役处置",
|
|
635
721
|
"detail.replacementWorkItem": "替代项",
|
|
636
722
|
"detail.endedAt": "结束时间",
|
|
637
|
-
"detail.findings": "发现",
|
|
638
|
-
"detail.report": "报告",
|
|
639
723
|
"detail.workspaceDisposition": "工作区",
|
|
640
724
|
"detail.lineage": "执行谱系",
|
|
641
725
|
"detail.requester": "请求方",
|
|
642
726
|
"candidate.source.direct": "直接",
|
|
643
727
|
"candidate.source.turn": "Turn",
|
|
644
|
-
"finding.severity.low": "低",
|
|
645
|
-
"finding.severity.medium": "中",
|
|
646
|
-
"finding.severity.high": "高",
|
|
647
|
-
"finding.severity.critical": "严重",
|
|
648
|
-
"finding.status.open": "未解决",
|
|
649
|
-
"finding.status.resolved": "已解决",
|
|
650
728
|
"turn.purpose.execution": "执行",
|
|
651
729
|
"turn.purpose.review": "评审",
|
|
652
730
|
"review.scope.work-item": "工作项",
|