@zq-silk/yui 0.15.7 → 0.15.8
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 +192 -399
- package/README.md +127 -1149
- package/dist/agent/adapterCatalog.js +15 -2
- package/dist/agent/agent.js +23 -3
- package/dist/agent/argumentPolicy.js +7 -1
- package/dist/agent/connectionPlan.js +62 -0
- package/dist/agent/executionComponents.js +158 -0
- package/dist/agent/launchEnvironment.js +31 -3
- package/dist/agent/managedRuntimeEnvironment.js +3 -5
- package/dist/{turn/turn.js → agentRun/agentRun.js} +166 -109
- package/dist/{turn/turnIdentity.js → agentRun/runIdentity.js} +4 -4
- package/dist/brief/taskBrief.js +12 -0
- package/dist/cli/agentConfigurationPicker.js +13 -0
- package/dist/cli/commandCatalog.js +157 -70
- package/dist/cli/interactionCandidates.js +5 -5
- package/dist/cli/interactionPolicy.js +38 -8
- package/dist/cli/invocationRouter.js +1 -1
- package/dist/cli/managedDiagnostics.js +28 -0
- package/dist/cli/operatorWizard.js +1 -7
- package/dist/cli/roleOptionOrder.js +27 -0
- package/dist/cli/roleWizard.js +50 -14
- package/dist/cli/updateOrchestrator.js +1 -1
- package/dist/cli/updatePorts.js +3 -4
- package/dist/cli.js +178 -95
- package/dist/commands/agentCommands.js +72 -14
- package/dist/commands/capabilityCommands.js +9 -6
- package/dist/commands/configCommands.js +20 -20
- package/dist/commands/deliveryGuardPreflight.js +2 -2
- package/dist/commands/executionAuditCommands.js +24 -24
- package/dist/commands/globalRoleCommands.js +1 -1
- package/dist/commands/grantCommands.js +4 -4
- package/dist/commands/operatorCommands.js +1 -7
- package/dist/commands/projectCommands.js +4 -4
- package/dist/commands/resourcesCommands.js +2 -2
- package/dist/commands/roleConfiguration.js +25 -5
- package/dist/commands/roleRuntimeGuard.js +4 -5
- package/dist/commands/sessionCommands.js +3 -7
- package/dist/commands/taskActivationCommands.js +259 -0
- package/dist/commands/taskActor.js +28 -49
- package/dist/commands/taskCommands.js +1188 -710
- package/dist/commands/taskContextCommand.js +39 -583
- package/dist/commands/taskExecutionCommands.js +32 -32
- package/dist/commands/taskInputCommands.js +40 -104
- package/dist/commands/taskIntegrationCommands.js +3 -2
- package/dist/commands/taskIntegrationQueueCommands.js +1 -1
- package/dist/commands/taskNextActionCommand.js +8 -8
- package/dist/commands/taskOverviewCommand.js +33 -45
- package/dist/commands/taskRemoteDeliveryCommand.js +2 -2
- package/dist/commands/taskRoleRuntimeStatus.js +133 -102
- package/dist/commands/telemetryCommands.js +36 -38
- package/dist/config/configCatalog.js +4 -4
- package/dist/config/yuiConfig.js +8 -8
- package/dist/context/contextSnapshot.js +10 -10
- package/dist/context/dispatchContext.js +11 -11
- package/dist/context/roleSessionContext.js +6 -3
- package/dist/context/{turnContextPack.js → runContextPack.js} +146 -81
- package/dist/context/{turnInputContract.js → runInputContract.js} +73 -60
- package/dist/context/sessionBootstrapManifest.js +21 -2
- package/dist/context/sourceRunContext.js +30 -0
- package/dist/context/taskContext.js +458 -0
- package/dist/context/wakeNotification.js +27 -27
- package/dist/controller/agentRuntimeObserver.js +21 -24
- package/dist/controller/capabilityBridge.js +17 -6
- package/dist/controller/clientRuntime.js +65 -92
- package/dist/controller/controller.js +114 -188
- package/dist/controller/fileSchedulerStoreAdapter.js +787 -887
- package/dist/controller/jobControl.js +54 -85
- package/dist/controller/resourceInventory.js +8 -27
- package/dist/controller/resourceInventoryLinux.js +12 -13
- package/dist/controller/runtime.js +529 -479
- package/dist/controller/runtimeEventInbox.js +55 -25
- package/dist/controller/runtimeEventProcessor.js +22 -31
- package/dist/controller/{runtimeHookTurnFence.js → runtimeHookRunFence.js} +91 -115
- package/dist/controller/runtimeLaunchCoordinator.js +80 -426
- package/dist/controller/runtimeObservationHook.js +14 -18
- package/dist/controller/sessionNotify.js +16 -24
- package/dist/controller/sessionOwnerReconciliation.js +168 -50
- package/dist/controller/structuredProviderObservation.js +138 -99
- package/dist/coordination/workMailbox.js +3 -3
- package/dist/coordination/workMailboxQueue.js +36 -33
- package/dist/core/boundedRpc.js +8 -1
- package/dist/core/controllerClient.js +20 -1
- package/dist/core/controllerServer.js +4 -4
- package/dist/doctor/doctor.js +13 -2
- package/dist/domain/agentResultTransport.js +9 -9
- package/dist/execution/codexThreadNaming.js +2 -8
- package/dist/execution/executionHealth.js +51 -63
- package/dist/execution/reviewMainRun.js +137 -0
- package/dist/execution/workItemExecution.js +28 -29
- package/dist/execution/workItemExecutionProjection.js +99 -107
- package/dist/execution/workItemMainRun.js +141 -0
- package/dist/executor/agentAdapter.js +227 -20
- package/dist/executor/agentConfigurationCatalog.js +126 -4
- package/dist/executor/agentConfigurationProbe.js +162 -4
- package/dist/executor/agentExecutor.js +79 -78
- package/dist/executor/effectiveLaunch.js +105 -18
- package/dist/executor/executorRegistry.js +29 -44
- package/dist/executor/fileRoleLaunchPlanner.js +229 -154
- package/dist/executor/workspacePreflightClassification.js +16 -16
- package/dist/grant/capabilityGrant.js +6 -3
- package/dist/input/inputRequest.js +12 -10
- package/dist/integration/gitIntegrationService.js +4 -11
- package/dist/integration/integrationQueueService.js +4 -4
- package/dist/interaction/operatorPresentation.js +1 -1
- package/dist/kernel/builtinCapabilities.js +247 -12
- package/dist/kernel/capabilityRegistry.js +64 -18
- package/dist/kernel/instanceHost.js +12 -1
- package/dist/kernel/kernelPorts.js +2 -2
- package/dist/lifecycle/canonicalLifecycleEvent.js +44 -49
- package/dist/lifecycle/exactRunTerminalization.js +449 -0
- package/dist/message/message.js +62 -6
- package/dist/message/messageContinuation.js +204 -0
- package/dist/observability/executionAudit.js +70 -72
- package/dist/observability/faultClassification.js +2 -2
- package/dist/observability/orchestrationMetrics.js +8 -8
- package/dist/operator/operatorSessionHistory.js +1 -7
- package/dist/output/agentConfigurationPresentation.js +8 -3
- package/dist/output/agentRunConfigurationPresentation.js +128 -0
- package/dist/output/rolePresentation.js +54 -3
- package/dist/plugins/pluginChild.js +104 -0
- package/dist/plugins/pluginIntent.js +26 -0
- package/dist/plugins/pluginInterpreter.js +43 -0
- package/dist/plugins/pluginPackage.js +101 -0
- package/dist/plugins/pluginProcess.js +112 -0
- package/dist/plugins/pluginService.js +380 -0
- package/dist/profile/agentProfile.js +1 -1
- package/dist/repository/gitWorkspace.js +26 -4
- package/dist/repository/project.js +19 -4
- package/dist/repository/taskBaseFreshness.js +13 -13
- package/dist/repository/taskWorkspaceCoordinator.js +20 -27
- package/dist/repository/taskWorkspacePreparer.js +344 -83
- package/dist/resources/autoResourceGc.js +3 -3
- package/dist/resources/liveReferences.js +3 -3
- package/dist/resources/projectResource.js +123 -0
- package/dist/resources/projectResourceService.js +421 -0
- package/dist/resources/resourceDiscovery.js +6 -6
- package/dist/resources/resourceGc.js +1 -1
- package/dist/resources/resourceRegistrar.js +1 -1
- package/dist/resources/resourceTypes.js +1 -1
- package/dist/review/deltaRecheck.js +3 -3
- package/dist/review/reviewAcceptance.js +16 -16
- package/dist/review/reviewDecision.js +7 -7
- package/dist/review/reviewRound.js +21 -20
- package/dist/review/reviewerAvailability.js +2 -2
- package/dist/role/role.js +51 -7
- package/dist/role/taskRoleUpdate.js +30 -0
- package/dist/runtime/acpProtocol.js +425 -0
- package/dist/runtime/acpSession.js +731 -0
- package/dist/runtime/acpSessionConfiguration.js +260 -0
- package/dist/runtime/agentDriver.js +30 -11
- package/dist/runtime/agentEndpoint.js +278 -0
- package/dist/runtime/agentEndpointIdentity.js +86 -0
- package/dist/runtime/agentEndpointOwnership.js +239 -0
- package/dist/runtime/agentError.js +2 -10
- package/dist/runtime/agentHost.js +565 -314
- package/dist/runtime/agentRunConfiguration.js +258 -0
- package/dist/runtime/builtinAgentDrivers.js +134 -18
- package/dist/runtime/builtinAgentErrorMappers.js +55 -3
- package/dist/runtime/builtinTranscriptUsage.js +1 -1
- package/dist/runtime/claude-process-owner +0 -0
- package/dist/runtime/codexAppServerRuntime.js +38 -30
- package/dist/runtime/codexInteractiveHost.js +41 -6
- package/dist/runtime/continuationManager.js +2 -6
- package/dist/runtime/executionEnvironment.js +30 -0
- package/dist/runtime/firstProgressAdvisory.js +11 -11
- package/dist/runtime/index.js +4 -3
- package/dist/runtime/jsonLineChannel.js +109 -0
- package/dist/runtime/launchBroker.js +91 -16
- package/dist/runtime/launchDiagnostics.js +2 -2
- package/dist/runtime/lifecycleReservation.js +10 -18
- package/dist/runtime/managedCaller.js +61 -17
- package/dist/runtime/nativeSessionControl.js +102 -0
- package/dist/runtime/ports.js +6 -21
- package/dist/runtime/processExitObservation.js +8 -7
- package/dist/runtime/promptEnvelope.js +17 -6
- package/dist/runtime/providerContinuation.js +3 -9
- package/dist/runtime/providerContinuationReconciliationService.js +4 -13
- package/dist/runtime/providerControl.js +2 -7
- package/dist/runtime/providerRuntimeIdentity.js +110 -222
- package/dist/runtime/providerRuntimeReconciler.js +5 -9
- package/dist/runtime/runtimeBinding.js +0 -1
- package/dist/runtime/runtimeContinuationProjection.js +4 -7
- package/dist/runtime/runtimeDeadlines.js +9 -0
- package/dist/runtime/runtimeHealthPolicy.js +1 -1
- package/dist/runtime/runtimeObservation.js +29 -65
- package/dist/runtime/runtimeProjection.js +43 -51
- package/dist/runtime/runtimeSessionCandidate.js +1 -3
- package/dist/runtime/sessionLaunchRequest.js +3 -7
- package/dist/runtime/sessionOwnerIdentity.js +7 -54
- package/dist/runtime/sessionOwnerRegistry.js +22 -17
- package/dist/runtime/sessionReconciliation.js +4 -8
- package/dist/runtime/sessionTerminationGuard.js +70 -259
- package/dist/runtime/sessionTokenMetrics.js +5 -16
- package/dist/runtime/structuredProviderHost.js +237 -117
- package/dist/runtime/taskRuntimeIsolation.js +39 -122
- package/dist/runtime/tmuxAdapters.js +39 -86
- package/dist/scheduler/activeRoleRunDelivery.js +354 -0
- package/dist/scheduler/leaderWakeupProcessor.js +75 -266
- package/dist/scheduler/operatorInputNotificationProcessor.js +1 -1
- package/dist/scheduler/ports.js +80 -9
- package/dist/scheduler/{roleTurnLiveness.js → roleRunLiveness.js} +26 -30
- package/dist/scheduler/{roleTurnStall.js → roleRunStall.js} +128 -139
- package/dist/scheduler/taskExecutionProjection.js +120 -124
- package/dist/scheduler/taskObservabilityProjection.js +29 -29
- package/dist/scheduler/taskWake.js +11 -4
- package/dist/scheduler/wakeReason.js +9 -1
- package/dist/setup/setupCommand.js +1 -0
- package/dist/storage/migrations/agentRunContract.js +159 -0
- package/dist/storage/migrations/removeRuntimeGeneration.js +207 -0
- package/dist/storage/sqliteSchema.js +431 -5
- package/dist/storage/sqliteStore.js +375 -220
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +10 -5
- package/dist/storage/taskStore.js +13 -11
- package/dist/storage/upgrade/upgradeOrchestrator.js +5 -7
- package/dist/surface/surfaceContributions.js +102 -0
- package/dist/task/completionReadiness.js +32 -6
- package/dist/task/deliveryGuard.js +16 -16
- package/dist/task/draftPlan.js +72 -12
- package/dist/task/nextAction.js +144 -128
- package/dist/task/remoteDelivery.js +6 -6
- package/dist/task/task.js +184 -18
- package/dist/task/taskActivation.js +301 -0
- package/dist/task/taskActivationService.js +392 -0
- package/dist/task/taskRecordReference.js +5 -4
- package/dist/task/taskRecordRetirement.js +1 -1
- package/dist/telemetry/sqliteTelemetryStore.js +55 -68
- package/dist/telemetry/telemetryConfig.js +14 -14
- package/dist/telemetry/telemetryWiring.js +2 -2
- package/dist/web/assets/assetManifest.js +2 -0
- package/dist/web/assets/client/app.js +120 -20
- package/dist/web/assets/client/components.js +87 -54
- package/dist/web/assets/client/i18n.js +83 -41
- package/dist/web/assets/client/markdown.js +1 -1
- package/dist/web/assets/client/taskSurface.js +353 -0
- package/dist/web/assets/client/view.js +49 -44
- package/dist/web/assets/shell.js +1 -1
- package/dist/web/assets/styles/cards.js +22 -4
- package/dist/web/controllerWeb.js +60 -0
- package/dist/web/webMutation.js +28 -0
- package/dist/web/webServer.js +118 -8
- package/dist/web/webSnapshot.js +81 -74
- package/dist/web/webTaskSurface.js +64 -0
- package/dist/workItem/dependencyGate.js +1 -1
- package/dist/workItem/workItem.js +80 -48
- package/dist/workspace/workItemChangeSetManager.js +16 -9
- package/docs/agent-result-consumption.md +94 -0
- package/docs/agent-runtime-drivers.md +91 -0
- package/docs/architecture/README.md +38 -0
- package/docs/architecture/capabilities-and-resources.md +79 -0
- package/docs/managed-turn-and-session-runtime.md +222 -0
- package/docs/observability/README.md +81 -0
- package/docs/plugin-sdk.md +290 -0
- package/docs/provider-runtime.md +163 -0
- package/docs/release-workflow.md +303 -0
- package/docs/roles-and-configuration.md +113 -0
- package/docs/sqlite-control-plane-design.md +76 -0
- package/docs/task-dag-semantics.md +57 -0
- package/docs/task-delivery.md +103 -0
- package/docs/task-local-identity.md +6 -6
- package/docs/testing/verification-levels.md +86 -0
- package/i18n/README.zh-CN.md +98 -739
- package/package.json +2 -2
- package/skills/yui-leader/SKILL.md +130 -103
- package/skills/yui-leader/references/integration.md +39 -0
- package/skills/yui-leader/references/replicated-execution.md +42 -0
- package/skills/yui-leader/references/task-plugins.md +33 -0
- package/skills/yui-operator/SKILL.md +30 -59
- package/skills/yui-reviewer/SKILL.md +35 -36
- package/skills/yui-runtime/SKILL.md +88 -24
- package/skills/yui-runtime/references/publication.md +22 -0
- package/skills/yui-runtime/references/recovery.md +64 -0
- package/skills/yui-worker/SKILL.md +37 -39
- package/dist/cli/roleOptionCatalog.js +0 -68
- package/dist/context/sourceTurnContext.js +0 -30
- package/dist/execution/reviewMainTurn.js +0 -161
- package/dist/execution/workItemMainTurn.js +0 -164
- package/dist/lifecycle/exactTurnTerminalization.js +0 -407
- package/dist/runtime/preallocatedNativeSession.js +0 -13
- package/dist/runtime/runtimeStopReceipt.js +0 -42
- package/dist/scheduler/activeRoleTurnDelivery.js +0 -315
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AGENT_ADAPTER_CATALOG } from "../../../agent/adapterCatalog.js";
|
|
2
|
+
import { AGENT_EXECUTION_COMPONENT_CATALOG } from "../../../agent/executionComponents.js";
|
|
1
3
|
export const COMPONENTS_SCRIPT = `
|
|
2
4
|
// Reusable widgets and record cards. Everything here is a pure builder:
|
|
3
5
|
// data + i18n in, DOM out. Page composition lives in view.js.
|
|
@@ -5,15 +7,19 @@ import { node } from "/assets/js/dom.js";
|
|
|
5
7
|
import { formatDateTime, relativeTime } from "/assets/js/format.js";
|
|
6
8
|
import { escapeHtml, inlineMarkdown, renderMarkdown } from "/assets/js/markdown.js";
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// Mirrors src/agent/adapterCatalog.ts to avoid a runtime import loop.
|
|
13
|
-
const adapterLabels = { codex: "Codex", claude: "Claude" };
|
|
10
|
+
// Generated from the server catalogs, not a second product registry.
|
|
11
|
+
const adapterLabels = ${JSON.stringify(Object.fromEntries(AGENT_ADAPTER_CATALOG.map(({ id, label }) => [id, label])))};
|
|
12
|
+
const componentLabels = ${JSON.stringify(Object.fromEntries(AGENT_EXECUTION_COMPONENT_CATALOG.map(({ id, label }) => [id, label])))};
|
|
14
13
|
function adapterLabel(adapterId) {
|
|
15
14
|
return adapterLabels[adapterId] || adapterId;
|
|
16
15
|
}
|
|
16
|
+
function componentLabel(component, adapterId) {
|
|
17
|
+
return component ? componentLabels[component] || component : adapterLabel(adapterId);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function translatedStatus(t, prefix, status) {
|
|
21
|
+
return t(prefix + "." + status);
|
|
22
|
+
}
|
|
17
23
|
|
|
18
24
|
// --- Small widgets -----------------------------------------------------------
|
|
19
25
|
export function metaItem(label, value) {
|
|
@@ -37,7 +43,9 @@ export function chip(text, extraClass) {
|
|
|
37
43
|
export function agentBadge(agent) {
|
|
38
44
|
if (!agent) return null;
|
|
39
45
|
const badge = node("span", "agent-badge");
|
|
40
|
-
if (agent.adapterId
|
|
46
|
+
if (agent.adapterId || agent.component) {
|
|
47
|
+
badge.append(chip(componentLabel(agent.component, agent.adapterId), "is-adapter"));
|
|
48
|
+
}
|
|
41
49
|
if (agent.model) badge.append(chip(agent.model));
|
|
42
50
|
if (agent.effort) badge.append(chip(agent.effort));
|
|
43
51
|
return badge.childNodes.length ? badge : null;
|
|
@@ -102,6 +110,9 @@ const EXEC_STATUS_TONE = {
|
|
|
102
110
|
"working": "is-active",
|
|
103
111
|
"completed": "is-muted",
|
|
104
112
|
"retired": "is-muted",
|
|
113
|
+
"cancelled": "is-muted",
|
|
114
|
+
"accepted": "is-muted",
|
|
115
|
+
"open": "is-active",
|
|
105
116
|
"archived": "is-muted"
|
|
106
117
|
};
|
|
107
118
|
|
|
@@ -114,9 +125,9 @@ export function executionBand(projection, t, locale) {
|
|
|
114
125
|
head.append(pill(t, "exec.status", projection.status));
|
|
115
126
|
head.append(node("span", "exec-band-owner",
|
|
116
127
|
t("exec.owner." + projection.owner) + " · " + t("exec.action." + projection.action)));
|
|
117
|
-
if (projection.
|
|
128
|
+
if (projection.activeRuns && projection.activeRuns.length > 0) {
|
|
118
129
|
head.append(node("span", "exec-band-executors",
|
|
119
|
-
projection.
|
|
130
|
+
projection.activeRuns.length + " " + t("exec.executors")));
|
|
120
131
|
}
|
|
121
132
|
if (projection.monitoring === "stopped") {
|
|
122
133
|
head.append(node("span", "exec-band-stopped", t("exec.monitoring.stopped")));
|
|
@@ -176,9 +187,10 @@ export function workItemExecutionCard(projection, t) {
|
|
|
176
187
|
row.append(statusDot(lane.status));
|
|
177
188
|
row.append(node("span", "lane-role", lane.roleName));
|
|
178
189
|
row.append(node("span", "lane-status", t("workExec.lane." + lane.status)));
|
|
179
|
-
row.append(
|
|
180
|
-
|
|
181
|
-
if (lane.
|
|
190
|
+
if (lane.delivery) row.append(chip(t("run.delivery." + lane.delivery)));
|
|
191
|
+
row.append(node("span", "mono", lane.currentRunId || t("detail.unobserved")));
|
|
192
|
+
if (lane.retryRunId) row.append(chip(t("workExec.retry") + " · " + lane.retryRunId, "is-danger"));
|
|
193
|
+
if (lane.settleRunId) row.append(chip(t("workExec.settle") + " · " + lane.settleRunId));
|
|
182
194
|
if (lane.session === "unobserved") row.append(chip(t("detail.unobserved")));
|
|
183
195
|
lanes.append(row);
|
|
184
196
|
});
|
|
@@ -187,18 +199,18 @@ export function workItemExecutionCard(projection, t) {
|
|
|
187
199
|
|
|
188
200
|
const facts = node("div", "record-meta execution-resource-meta");
|
|
189
201
|
facts.append(node("span", "", t("workExec.main") + " · "
|
|
190
|
-
+ (projection.
|
|
191
|
-
+ " [" + t("workExec.mainStatus." + projection.
|
|
202
|
+
+ (projection.mainRun.runId || t("detail.unobserved"))
|
|
203
|
+
+ " [" + t("workExec.mainStatus." + projection.mainRun.status) + "]"));
|
|
192
204
|
facts.append(node("span", "", t("workExec.candidate") + " · "
|
|
193
205
|
+ (projection.candidate.candidateId || t("workExec.none"))
|
|
194
206
|
+ " [" + t("workExec.candidateStatus." + projection.candidate.status) + "]"));
|
|
195
207
|
card.append(facts);
|
|
196
208
|
|
|
197
209
|
if (projection.candidate.sourceExecutionGroupId) {
|
|
198
|
-
const provenance = projection.candidate.
|
|
199
|
-
return lane.laneId + " → " + lane.
|
|
210
|
+
const provenance = projection.candidate.successfulLaneRuns.map(function (lane) {
|
|
211
|
+
return lane.laneId + " → " + lane.successfulRunId;
|
|
200
212
|
}).join(", ") || t("detail.unobserved");
|
|
201
|
-
card.append(node("p", "muted mono", (projection.candidate.
|
|
213
|
+
card.append(node("p", "muted mono", (projection.candidate.mainRunId || t("detail.unobserved"))
|
|
202
214
|
+ " → " + projection.candidate.sourceExecutionGroupId + " → " + provenance));
|
|
203
215
|
}
|
|
204
216
|
|
|
@@ -279,7 +291,7 @@ export function candidateList(candidates, t, locale) {
|
|
|
279
291
|
row.append(node("span", "candidate-summary", candidate.summary));
|
|
280
292
|
const source = candidate.source.type === "direct"
|
|
281
293
|
? t("candidate.source.direct")
|
|
282
|
-
: t("candidate.source.
|
|
294
|
+
: t("candidate.source.run") + " " + candidate.source.runId;
|
|
283
295
|
row.append(node("span", "candidate-source", source));
|
|
284
296
|
row.append(node("time", "", formatDateTime(candidate.createdAt, locale)));
|
|
285
297
|
list.append(row);
|
|
@@ -444,7 +456,7 @@ export function inputCard(input, _options, t, locale, actions) {
|
|
|
444
456
|
}
|
|
445
457
|
if (input.requester) {
|
|
446
458
|
top.append(node("span", "input-requester",
|
|
447
|
-
t("detail.requester") + " · " + input.requester.roleName + " / " + input.requester.
|
|
459
|
+
t("detail.requester") + " · " + input.requester.roleName + " / " + (input.requester.runId ?? input.requester.nativeSessionId)));
|
|
448
460
|
}
|
|
449
461
|
card.append(top);
|
|
450
462
|
card.append(answerActions(input, actions, t));
|
|
@@ -455,13 +467,13 @@ export function inputCard(input, _options, t, locale, actions) {
|
|
|
455
467
|
export function conclusionMeta(task, t, locale, kind) {
|
|
456
468
|
const meta = node("div", "conclusion-meta");
|
|
457
469
|
const actor = kind === "archived" ? task.archivedBy
|
|
458
|
-
: kind === "
|
|
470
|
+
: kind === "cancelled" ? task.retiredBy
|
|
459
471
|
: task.completedBy;
|
|
460
472
|
const at = kind === "archived" ? task.archivedAt
|
|
461
|
-
: kind === "
|
|
473
|
+
: kind === "cancelled" ? task.retiredAt
|
|
462
474
|
: task.completedAt;
|
|
463
475
|
const label = kind === "archived" ? t("detail.archivedBy")
|
|
464
|
-
: kind === "
|
|
476
|
+
: kind === "cancelled" ? t("detail.cancelledBy")
|
|
465
477
|
: t("detail.completedBy");
|
|
466
478
|
if (actor) meta.append(node("span", "", label + " · " + authorName(t, actor)));
|
|
467
479
|
if (at) meta.append(node("time", "", formatDateTime(at, locale)));
|
|
@@ -471,7 +483,7 @@ export function conclusionMeta(task, t, locale, kind) {
|
|
|
471
483
|
// --- Record cards -----------------------------------------------------------------
|
|
472
484
|
// WorkItems that no longer need action render collapsed; everything actionable
|
|
473
485
|
// (pending, running, awaiting acceptance, failed) stays expanded.
|
|
474
|
-
const WORK_ITEM_OPEN_STATUSES = ["
|
|
486
|
+
const WORK_ITEM_OPEN_STATUSES = ["open"];
|
|
475
487
|
|
|
476
488
|
export function workItemCard(item, titles, t, locale, actions, taskId) {
|
|
477
489
|
const collapsible = WORK_ITEM_OPEN_STATUSES.indexOf(item.status) === -1;
|
|
@@ -561,46 +573,51 @@ export function workItemCard(item, titles, t, locale, actions, taskId) {
|
|
|
561
573
|
return card;
|
|
562
574
|
}
|
|
563
575
|
|
|
564
|
-
export function
|
|
576
|
+
export function runCard(run, t, locale) {
|
|
565
577
|
const card = node("article", "execute-card");
|
|
566
|
-
card.dataset.status =
|
|
578
|
+
card.dataset.status = run.status;
|
|
567
579
|
|
|
568
580
|
const idRow = node("div", "execute-id");
|
|
569
|
-
idRow.append(statusDot(
|
|
570
|
-
idRow.append(node("span", "role",
|
|
571
|
-
idRow.append(node("span", "",
|
|
572
|
-
if (
|
|
573
|
-
if (
|
|
574
|
-
idRow.append(node("time", "", formatDateTime(
|
|
581
|
+
idRow.append(statusDot(run.status));
|
|
582
|
+
idRow.append(node("span", "role", run.roleName));
|
|
583
|
+
idRow.append(node("span", "", run.id));
|
|
584
|
+
if (run.workItemId) idRow.append(node("span", "", t("detail.workItem") + " · " + run.workItemId));
|
|
585
|
+
if (run.purpose) idRow.append(chip(t("run.purpose." + run.purpose)));
|
|
586
|
+
idRow.append(node("time", "", formatDateTime(run.result?.completedAt || run.updatedAt, locale)));
|
|
575
587
|
card.append(idRow);
|
|
588
|
+
const observation = node("div", "record-meta");
|
|
589
|
+
observation.append(node("span", "", t("run.recordState") + " · " + t("status." + run.status)));
|
|
590
|
+
observation.append(node("span", "", t("run.delivery") + " · "
|
|
591
|
+
+ t("run.delivery." + (run.execution?.delivery || "unobserved"))));
|
|
592
|
+
card.append(observation);
|
|
576
593
|
|
|
577
|
-
const visibleInput =
|
|
594
|
+
const visibleInput = run.inputs && run.inputs.length ? run.inputs[0].input : null;
|
|
578
595
|
card.append(richText(t("detail.instruction"), visibleInput?.directive || visibleInput?.action || "-", t, { className: "execute-io", threshold: 320 }));
|
|
579
|
-
if (
|
|
580
|
-
card.append(richText(t("detail.outcome"),
|
|
596
|
+
if (run.result?.output) {
|
|
597
|
+
card.append(richText(t("detail.outcome"), run.result.output, t, { className: "execute-io outcome", threshold: 320 }));
|
|
581
598
|
}
|
|
582
|
-
if (
|
|
583
|
-
card.append(richText(t("detail.failure"),
|
|
599
|
+
if (run.result?.diagnostic) {
|
|
600
|
+
card.append(richText(t("detail.failure"), run.result.diagnostic, t, { className: "execute-io outcome", threshold: 320 }));
|
|
584
601
|
}
|
|
585
602
|
|
|
586
603
|
const foot = node("div", "execute-foot");
|
|
587
604
|
const tags = node("div", "execute-tags");
|
|
588
|
-
tags.append(chip(t("mode." +
|
|
589
|
-
if (
|
|
590
|
-
tags.append(chip(t("detail.lineage") + " · " +
|
|
591
|
-
+ (
|
|
605
|
+
tags.append(chip(t("mode." + run.mode)));
|
|
606
|
+
if (run.executionGroupId) {
|
|
607
|
+
tags.append(chip(t("detail.lineage") + " · " + run.executionGroupId
|
|
608
|
+
+ (run.executionLaneId ? "/" + run.executionLaneId : "")));
|
|
592
609
|
}
|
|
593
|
-
const badge =
|
|
610
|
+
const badge = run.effective ? agentBadge(run.effective) : (run.agentId ? agentBadge(run) : null);
|
|
594
611
|
if (badge) tags.append(badge);
|
|
595
612
|
foot.append(tags);
|
|
596
|
-
foot.append(pill(t, "
|
|
613
|
+
foot.append(pill(t, "run", run.status));
|
|
597
614
|
card.append(foot);
|
|
598
615
|
|
|
599
|
-
if (
|
|
616
|
+
if (run.effective) {
|
|
600
617
|
const eff = node("div", "record-meta");
|
|
601
|
-
eff.append(node("span", "", t("detail.effective") + " · r" +
|
|
602
|
-
eff.append(node("span", "", t("detail.profileIntent") + " · " +
|
|
603
|
-
eff.append(node("span", "", t("detail.permission") + " · " +
|
|
618
|
+
eff.append(node("span", "", t("detail.effective") + " · r" + run.effective.sourceDesiredRevision));
|
|
619
|
+
eff.append(node("span", "", t("detail.profileIntent") + " · " + run.effective.profileAccess));
|
|
620
|
+
eff.append(node("span", "", t("detail.permission") + " · " + run.effective.permission.strategy));
|
|
604
621
|
card.append(eff);
|
|
605
622
|
}
|
|
606
623
|
|
|
@@ -631,8 +648,8 @@ export function reviewCard(round, t, locale) {
|
|
|
631
648
|
if (round.workspace && round.workspace.root) {
|
|
632
649
|
meta.append(pathMetaItem(t("detail.workspace"), round.workspace.root));
|
|
633
650
|
}
|
|
634
|
-
if (round.
|
|
635
|
-
meta.append(node("span", "mono", t("detail.
|
|
651
|
+
if (round.reviewerRunId) {
|
|
652
|
+
meta.append(node("span", "mono", t("detail.reviewerRun") + " · " + round.reviewerRunId));
|
|
636
653
|
}
|
|
637
654
|
if (round.workspaceDisposition) {
|
|
638
655
|
meta.append(node("span", "", t("detail.workspaceDisposition") + " · "
|
|
@@ -647,7 +664,7 @@ export function reviewCard(round, t, locale) {
|
|
|
647
664
|
groupMeta.append(node("span", "", t("reviewExec.assignment") + " · "
|
|
648
665
|
+ group.assignment.contextSnapshotRef.id));
|
|
649
666
|
groupMeta.append(node("span", "", t("reviewExec.main") + " · "
|
|
650
|
-
+ (round.
|
|
667
|
+
+ (round.reviewerRunId || t("detail.unobserved"))));
|
|
651
668
|
execution.append(groupMeta);
|
|
652
669
|
const lanes = node("div", "lane-list");
|
|
653
670
|
group.lanes.forEach(function (lane) {
|
|
@@ -656,7 +673,7 @@ export function reviewCard(round, t, locale) {
|
|
|
656
673
|
row.append(node("span", "lane-role", t("reviewExec.producer") + " " + lane.ordinal
|
|
657
674
|
+ " · " + lane.roleName));
|
|
658
675
|
row.append(node("span", "lane-status", t("reviewExec.status." + lane.disposition)));
|
|
659
|
-
row.append(node("span", "mono", lane.
|
|
676
|
+
row.append(node("span", "mono", lane.currentRunId || t("detail.unobserved")));
|
|
660
677
|
lanes.append(row);
|
|
661
678
|
});
|
|
662
679
|
execution.append(lanes);
|
|
@@ -694,6 +711,7 @@ export function roleCard(role, task, t, locale, actions) {
|
|
|
694
711
|
if (activeBinding) {
|
|
695
712
|
const badge = agentBadge({
|
|
696
713
|
adapterId: activeBinding.adapterId,
|
|
714
|
+
component: activeBinding.component,
|
|
697
715
|
model: activeBinding.config && activeBinding.config.model,
|
|
698
716
|
effort: activeBinding.config && activeBinding.config.effort
|
|
699
717
|
});
|
|
@@ -745,10 +763,10 @@ export function roleCard(role, task, t, locale, actions) {
|
|
|
745
763
|
const bindings = bindingIds.map(function (id) {
|
|
746
764
|
const binding = role.agentBindings[id];
|
|
747
765
|
const model = binding.config && binding.config.model;
|
|
748
|
-
return
|
|
766
|
+
return componentLabel(binding.component, binding.adapterId) + (model ? " · " + model : "");
|
|
749
767
|
});
|
|
750
768
|
const activeBindingLabel = activeBinding
|
|
751
|
-
?
|
|
769
|
+
? componentLabel(activeBinding.component, activeBinding.adapterId) + (activeBinding.config && activeBinding.config.model ? " · " + activeBinding.config.model : "")
|
|
752
770
|
: undefined;
|
|
753
771
|
cols.append(chipRow(t("detail.agents"), bindings, activeBindingLabel));
|
|
754
772
|
}
|
|
@@ -801,7 +819,7 @@ export function historyEventRow(event, t, locale) {
|
|
|
801
819
|
return card;
|
|
802
820
|
}
|
|
803
821
|
|
|
804
|
-
export function messageCard(message, t, locale) {
|
|
822
|
+
export function messageCard(message, t, locale, result) {
|
|
805
823
|
const card = node("article", "record-card");
|
|
806
824
|
const head = node("div", "record-head");
|
|
807
825
|
const titleRow = node("div", "record-title-row");
|
|
@@ -814,10 +832,25 @@ export function messageCard(message, t, locale) {
|
|
|
814
832
|
const meta = node("div", "record-meta");
|
|
815
833
|
meta.append(node("span", "mono", message.id));
|
|
816
834
|
meta.append(node("time", "", formatDateTime(message.createdAt, locale)));
|
|
817
|
-
if (message.
|
|
835
|
+
if (message.runId) meta.append(node("span", "mono", message.runId + (message.workItemId ? " · " + message.workItemId : "")));
|
|
836
|
+
if (message.recipient) {
|
|
837
|
+
meta.append(node("span", "mono", "→ " + message.recipient.roleName + " · "
|
|
838
|
+
+ (message.recipient.reviewRoundId || message.recipient.workItemId)));
|
|
839
|
+
meta.append(node("span", "mono", !message.recipient.ownerRunId ? t("messageDelivery.notification") : message.continuation?.runId
|
|
840
|
+
? t("messageDelivery.run") + " " + message.continuation.runId
|
|
841
|
+
: message.continuation?.notDeliveredReason
|
|
842
|
+
? t("messageDelivery.blocked") + " " + message.continuation.notDeliveredReason
|
|
843
|
+
: t("messageDelivery.pending")));
|
|
844
|
+
}
|
|
818
845
|
card.append(meta);
|
|
819
846
|
|
|
820
847
|
card.append(richText(null, message.body, t));
|
|
848
|
+
if (message.resultRef) {
|
|
849
|
+
card.append(node("small", "mono", message.resultRef.runId));
|
|
850
|
+
if (result?.output) card.append(richText(t("detail.outcome"), result.output, t));
|
|
851
|
+
if (result?.diagnostic) card.append(richText(t("detail.failure"), result.diagnostic, t));
|
|
852
|
+
if (!result) card.append(node("p", "muted", t("detail.unobserved")));
|
|
853
|
+
}
|
|
821
854
|
return card;
|
|
822
855
|
}
|
|
823
856
|
|
|
@@ -14,7 +14,7 @@ const messages = {
|
|
|
14
14
|
"overview.lede": "Tracking {total} tasks — {active} active, {inputs} awaiting input, {completed} completed.",
|
|
15
15
|
"overview.distribution": "Status distribution",
|
|
16
16
|
"overview.attention": "Needs attention",
|
|
17
|
-
"overview.attentionEmpty": "No open inputs or stalled
|
|
17
|
+
"overview.attentionEmpty": "No open inputs or stalled AgentRuns.",
|
|
18
18
|
"overview.activeNow": "Active now",
|
|
19
19
|
"overview.activeEmpty": "No tasks are currently active.",
|
|
20
20
|
"sync.label": "LAST SYNC",
|
|
@@ -91,8 +91,8 @@ const messages = {
|
|
|
91
91
|
"detail.effective": "Effective launch",
|
|
92
92
|
"detail.effectiveAgent": "Effective Agent",
|
|
93
93
|
"detail.failure": "Execution failure",
|
|
94
|
-
"detail.
|
|
95
|
-
"detail.execution": "
|
|
94
|
+
"detail.reviewerRun": "Reviewer AgentRun",
|
|
95
|
+
"detail.execution": "AgentRuns",
|
|
96
96
|
"detail.expectedOutput": "Expected output",
|
|
97
97
|
"detail.focus": "Current focus",
|
|
98
98
|
"detail.runtimeHealth": "Runtime health",
|
|
@@ -122,6 +122,8 @@ const messages = {
|
|
|
122
122
|
"detail.replacement": "Replacement Task",
|
|
123
123
|
"detail.responsibilities": "Responsibilities",
|
|
124
124
|
"detail.retired": "Task retired",
|
|
125
|
+
"detail.cancelled": "Task cancelled",
|
|
126
|
+
"detail.cancelledBy": "Cancelled by",
|
|
125
127
|
"detail.retiredBy": "Retired by",
|
|
126
128
|
"detail.reviewBase": "Review base",
|
|
127
129
|
"detail.reviews": "Reviews",
|
|
@@ -140,7 +142,18 @@ const messages = {
|
|
|
140
142
|
"disposition.removed": "Removed",
|
|
141
143
|
"empty.brief": "No task brief has been recorded.",
|
|
142
144
|
"empty.none": "No items",
|
|
143
|
-
"empty.
|
|
145
|
+
"empty.runs": "No AgentRuns yet.",
|
|
146
|
+
"run.recordState": "Record state",
|
|
147
|
+
"run.delivery": "Delivery evidence",
|
|
148
|
+
"run.delivery.unobserved": "Unobserved",
|
|
149
|
+
"run.delivery.submitting": "Submitting",
|
|
150
|
+
"run.delivery.deferred": "Waiting for admission — not accepted",
|
|
151
|
+
"run.delivery.accepted": "Accepted — awaiting terminal evidence",
|
|
152
|
+
"run.delivery.delivery-unknown": "Acceptance unknown — no automatic replay",
|
|
153
|
+
"run.delivery.rejected": "Rejected",
|
|
154
|
+
"run.delivery.completed": "Completed",
|
|
155
|
+
"run.delivery.failed": "Failed",
|
|
156
|
+
"run.delivery.cancelled": "Cancelled",
|
|
144
157
|
"empty.tasks": "No tasks match this view.",
|
|
145
158
|
"errors.answer": "Unable to answer this input.",
|
|
146
159
|
"errors.dashboard": "Unable to read the dashboard.",
|
|
@@ -152,6 +165,7 @@ const messages = {
|
|
|
152
165
|
"group.draft": "Draft",
|
|
153
166
|
"group.finished": "Completed",
|
|
154
167
|
"group.retired": "Retired",
|
|
168
|
+
"group.cancelled": "Cancelled",
|
|
155
169
|
"input.answered": "Input answered.",
|
|
156
170
|
"input.blocking": "Blocking",
|
|
157
171
|
"input.freeText": "Type your answer",
|
|
@@ -164,6 +178,10 @@ const messages = {
|
|
|
164
178
|
"loading.dashboard": "Reading local state…",
|
|
165
179
|
"loading.detail": "Reading task detail…",
|
|
166
180
|
"messageKind.operator": "Operator",
|
|
181
|
+
"messageDelivery.run": "Execution record (not acceptance):",
|
|
182
|
+
"messageDelivery.blocked": "Not delivered:",
|
|
183
|
+
"messageDelivery.pending": "Saved, awaiting admission",
|
|
184
|
+
"messageDelivery.notification": "Leader notification; not a separate execution",
|
|
167
185
|
"messageKind.role-result": "Role result",
|
|
168
186
|
"messageKind.system": "System",
|
|
169
187
|
"messageKind.user": "User",
|
|
@@ -210,9 +228,10 @@ const messages = {
|
|
|
210
228
|
"role.exited": "Exited",
|
|
211
229
|
"role.failed": "Failed",
|
|
212
230
|
"role.idle": "Idle",
|
|
231
|
+
"role.unknown": "Unknown / not observed",
|
|
213
232
|
"role.running": "Running",
|
|
214
|
-
"
|
|
215
|
-
"
|
|
233
|
+
"run.active": "Active",
|
|
234
|
+
"run.failed": "Failed",
|
|
216
235
|
"search.label": "Search tasks",
|
|
217
236
|
"search.placeholder": "Filter by title, ID, tag, or project…",
|
|
218
237
|
"stats.inputs": "inputs",
|
|
@@ -223,8 +242,9 @@ const messages = {
|
|
|
223
242
|
"status.completed": "Completed",
|
|
224
243
|
"status.draft": "Draft",
|
|
225
244
|
"status.retired": "Retired",
|
|
245
|
+
"status.cancelled": "Cancelled",
|
|
226
246
|
"sync.label": "Last sync",
|
|
227
|
-
"tabs.exec": "
|
|
247
|
+
"tabs.exec": "AgentRuns",
|
|
228
248
|
"tabs.focus": "Focus",
|
|
229
249
|
"tabs.history": "History",
|
|
230
250
|
"tabs.label": "Task sections",
|
|
@@ -248,6 +268,8 @@ const messages = {
|
|
|
248
268
|
"time.justNow": "just now",
|
|
249
269
|
"work.awaiting_acceptance": "Awaiting acceptance",
|
|
250
270
|
"work.cancelled": "Cancelled",
|
|
271
|
+
"work.open": "Open",
|
|
272
|
+
"work.accepted": "Accepted",
|
|
251
273
|
"work.completed": "Completed",
|
|
252
274
|
"work.failed": "Failed",
|
|
253
275
|
"work.pending": "Pending",
|
|
@@ -257,28 +279,26 @@ const messages = {
|
|
|
257
279
|
"workExec.title": "Execution and recovery",
|
|
258
280
|
"workExec.shape.direct": "Direct",
|
|
259
281
|
"workExec.shape.replicated": "Replicated",
|
|
260
|
-
"workExec.lane.running": "
|
|
282
|
+
"workExec.lane.running": "Execution record open",
|
|
261
283
|
"workExec.lane.succeeded": "Succeeded",
|
|
262
284
|
"workExec.lane.needs-attention": "Needs attention",
|
|
263
285
|
"workExec.lane.failed": "Failed",
|
|
264
286
|
"workExec.lane.unknown": "Unknown",
|
|
265
287
|
"workExec.retry": "Retry",
|
|
266
288
|
"workExec.settle": "Settle",
|
|
267
|
-
"workExec.main": "Main
|
|
289
|
+
"workExec.main": "Main AgentRun",
|
|
268
290
|
"workExec.candidate": "Candidate source",
|
|
269
291
|
"workExec.next": "Next action",
|
|
270
292
|
"workExec.owner": "owner",
|
|
271
293
|
"workExec.none": "none",
|
|
272
294
|
"workExec.synthesis.not-applicable": "No synthesis",
|
|
273
|
-
"workExec.synthesis.
|
|
274
|
-
"workExec.synthesis.
|
|
275
|
-
"workExec.synthesis.
|
|
276
|
-
"workExec.synthesis.main-running": "Main Turn running",
|
|
277
|
-
"workExec.synthesis.main-needs-attention": "Main Turn needs attention",
|
|
295
|
+
"workExec.synthesis.awaiting-selection": "Leader selects synthesis sources",
|
|
296
|
+
"workExec.synthesis.main-running": "Main execution record open",
|
|
297
|
+
"workExec.synthesis.main-needs-attention": "Main AgentRun needs attention",
|
|
278
298
|
"workExec.synthesis.complete": "Synthesis complete",
|
|
279
299
|
"workExec.synthesis.unknown": "Synthesis unknown",
|
|
280
300
|
"workExec.mainStatus.not-started": "Not started",
|
|
281
|
-
"workExec.mainStatus.running": "
|
|
301
|
+
"workExec.mainStatus.running": "Execution record open",
|
|
282
302
|
"workExec.mainStatus.succeeded": "Succeeded",
|
|
283
303
|
"workExec.mainStatus.needs-attention": "Needs attention",
|
|
284
304
|
"workExec.mainStatus.unknown": "Unknown",
|
|
@@ -289,9 +309,9 @@ const messages = {
|
|
|
289
309
|
"workExec.action.wait-for-lanes": "Wait for Lanes",
|
|
290
310
|
"workExec.action.retry-or-settle-lanes": "Retry or settle exact Lanes",
|
|
291
311
|
"workExec.action.inspect-unknown": "Inspect missing facts",
|
|
292
|
-
"workExec.action.
|
|
293
|
-
"workExec.action.wait-for-main": "Wait for main
|
|
294
|
-
"workExec.action.retry-main": "Retry main
|
|
312
|
+
"workExec.action.select-synthesis-sources": "Select synthesis source AgentRuns",
|
|
313
|
+
"workExec.action.wait-for-main": "Wait for main AgentRun",
|
|
314
|
+
"workExec.action.retry-main": "Retry main AgentRun",
|
|
295
315
|
"workExec.action.redispatch-work": "Redispatch WorkItem",
|
|
296
316
|
"workExec.action.submit-candidate": "Submit Candidate",
|
|
297
317
|
"workExec.action.decide-candidate": "Review or accept Candidate",
|
|
@@ -308,6 +328,7 @@ const messages = {
|
|
|
308
328
|
"exec.status.working": "Working",
|
|
309
329
|
"exec.status.completed": "Completed",
|
|
310
330
|
"exec.status.retired": "Retired",
|
|
331
|
+
"exec.status.cancelled": "Cancelled",
|
|
311
332
|
"exec.status.archived": "Archived",
|
|
312
333
|
"exec.owner.leader": "Leader",
|
|
313
334
|
"exec.owner.worker": "Worker",
|
|
@@ -359,9 +380,9 @@ const messages = {
|
|
|
359
380
|
"detail.lineage": "Execution",
|
|
360
381
|
"detail.requester": "Requested by",
|
|
361
382
|
"candidate.source.direct": "Direct",
|
|
362
|
-
"candidate.source.
|
|
363
|
-
"
|
|
364
|
-
"
|
|
383
|
+
"candidate.source.run": "AgentRun",
|
|
384
|
+
"run.purpose.execution": "Execution",
|
|
385
|
+
"run.purpose.review": "Review",
|
|
365
386
|
"review.scope.work-item": "Work item",
|
|
366
387
|
"review.scope.task": "Task"
|
|
367
388
|
},
|
|
@@ -456,8 +477,8 @@ const messages = {
|
|
|
456
477
|
"detail.effective": "实际启动配置",
|
|
457
478
|
"detail.effectiveAgent": "实际 Agent",
|
|
458
479
|
"detail.failure": "执行失败",
|
|
459
|
-
"detail.
|
|
460
|
-
"detail.execution": "
|
|
480
|
+
"detail.reviewerRun": "Reviewer 执行记录",
|
|
481
|
+
"detail.execution": "执行记录",
|
|
461
482
|
"detail.expectedOutput": "期望产出",
|
|
462
483
|
"detail.focus": "当前重点",
|
|
463
484
|
"detail.runtimeHealth": "运行健康",
|
|
@@ -487,6 +508,8 @@ const messages = {
|
|
|
487
508
|
"detail.replacement": "替代任务",
|
|
488
509
|
"detail.responsibilities": "职责",
|
|
489
510
|
"detail.retired": "任务已退役",
|
|
511
|
+
"detail.cancelled": "任务已取消",
|
|
512
|
+
"detail.cancelledBy": "取消人",
|
|
490
513
|
"detail.retiredBy": "退役人",
|
|
491
514
|
"detail.reviewBase": "评审基线",
|
|
492
515
|
"detail.reviews": "评审记录",
|
|
@@ -505,7 +528,18 @@ const messages = {
|
|
|
505
528
|
"disposition.removed": "已移除",
|
|
506
529
|
"empty.brief": "尚未记录任务简报。",
|
|
507
530
|
"empty.none": "暂无条目",
|
|
508
|
-
"empty.
|
|
531
|
+
"empty.runs": "暂无执行记录。",
|
|
532
|
+
"run.recordState": "记录状态",
|
|
533
|
+
"run.delivery": "投递证据",
|
|
534
|
+
"run.delivery.unobserved": "尚无观察证据",
|
|
535
|
+
"run.delivery.submitting": "正在提交",
|
|
536
|
+
"run.delivery.deferred": "等待准入,明确未接受",
|
|
537
|
+
"run.delivery.accepted": "已接受,等待准确终态",
|
|
538
|
+
"run.delivery.delivery-unknown": "接受结果未知,不自动重发",
|
|
539
|
+
"run.delivery.rejected": "已拒绝",
|
|
540
|
+
"run.delivery.completed": "已完成",
|
|
541
|
+
"run.delivery.failed": "已失败",
|
|
542
|
+
"run.delivery.cancelled": "已取消",
|
|
509
543
|
"empty.tasks": "当前视图没有匹配的任务。",
|
|
510
544
|
"errors.answer": "无法回答该输入请求。",
|
|
511
545
|
"errors.dashboard": "无法读取控制面板。",
|
|
@@ -517,6 +551,7 @@ const messages = {
|
|
|
517
551
|
"group.draft": "草稿",
|
|
518
552
|
"group.finished": "已完成",
|
|
519
553
|
"group.retired": "已退役",
|
|
554
|
+
"group.cancelled": "已取消",
|
|
520
555
|
"input.answered": "输入已回答。",
|
|
521
556
|
"input.blocking": "阻塞",
|
|
522
557
|
"input.freeText": "输入回答",
|
|
@@ -529,6 +564,10 @@ const messages = {
|
|
|
529
564
|
"loading.dashboard": "正在读取本地状态…",
|
|
530
565
|
"loading.detail": "正在读取任务详情…",
|
|
531
566
|
"messageKind.operator": "Operator",
|
|
567
|
+
"messageDelivery.run": "执行记录(非落实确认):",
|
|
568
|
+
"messageDelivery.blocked": "尚未投递:",
|
|
569
|
+
"messageDelivery.pending": "已保存,等待执行准入",
|
|
570
|
+
"messageDelivery.notification": "Leader 通知,不单独派发执行",
|
|
532
571
|
"messageKind.role-result": "角色结果",
|
|
533
572
|
"messageKind.system": "系统",
|
|
534
573
|
"messageKind.user": "用户",
|
|
@@ -575,9 +614,10 @@ const messages = {
|
|
|
575
614
|
"role.exited": "已退出",
|
|
576
615
|
"role.failed": "失败",
|
|
577
616
|
"role.idle": "空闲",
|
|
617
|
+
"role.unknown": "未知/未观察",
|
|
578
618
|
"role.running": "运行中",
|
|
579
|
-
"
|
|
580
|
-
"
|
|
619
|
+
"run.active": "执行中",
|
|
620
|
+
"run.failed": "失败",
|
|
581
621
|
"search.label": "搜索任务",
|
|
582
622
|
"search.placeholder": "按标题、ID、标签或项目筛选…",
|
|
583
623
|
"stats.inputs": "项输入",
|
|
@@ -588,8 +628,9 @@ const messages = {
|
|
|
588
628
|
"status.completed": "已完成",
|
|
589
629
|
"status.draft": "草稿",
|
|
590
630
|
"status.retired": "已退役",
|
|
631
|
+
"status.cancelled": "已取消",
|
|
591
632
|
"sync.label": "最近同步",
|
|
592
|
-
"tabs.exec": "
|
|
633
|
+
"tabs.exec": "执行记录",
|
|
593
634
|
"tabs.focus": "焦点",
|
|
594
635
|
"tabs.history": "历史",
|
|
595
636
|
"tabs.label": "任务分区",
|
|
@@ -613,6 +654,8 @@ const messages = {
|
|
|
613
654
|
"time.justNow": "刚刚",
|
|
614
655
|
"work.awaiting_acceptance": "待验收",
|
|
615
656
|
"work.cancelled": "已取消",
|
|
657
|
+
"work.open": "未验收",
|
|
658
|
+
"work.accepted": "已验收",
|
|
616
659
|
"work.completed": "已完成",
|
|
617
660
|
"work.failed": "失败",
|
|
618
661
|
"work.pending": "待处理",
|
|
@@ -622,28 +665,26 @@ const messages = {
|
|
|
622
665
|
"workExec.title": "执行与恢复",
|
|
623
666
|
"workExec.shape.direct": "直接执行",
|
|
624
667
|
"workExec.shape.replicated": "复制执行",
|
|
625
|
-
"workExec.lane.running": "
|
|
668
|
+
"workExec.lane.running": "执行记录未结清",
|
|
626
669
|
"workExec.lane.succeeded": "已成功",
|
|
627
670
|
"workExec.lane.needs-attention": "需要处理",
|
|
628
671
|
"workExec.lane.failed": "已结算失败",
|
|
629
672
|
"workExec.lane.unknown": "未知",
|
|
630
673
|
"workExec.retry": "重试",
|
|
631
674
|
"workExec.settle": "结算",
|
|
632
|
-
"workExec.main": "
|
|
675
|
+
"workExec.main": "主执行记录",
|
|
633
676
|
"workExec.candidate": "Candidate 来源",
|
|
634
677
|
"workExec.next": "下一步",
|
|
635
678
|
"workExec.owner": "责任人",
|
|
636
679
|
"workExec.none": "无",
|
|
637
680
|
"workExec.synthesis.not-applicable": "无需综合",
|
|
638
|
-
"workExec.synthesis.
|
|
639
|
-
"workExec.synthesis.
|
|
640
|
-
"workExec.synthesis.
|
|
641
|
-
"workExec.synthesis.main-running": "主 Turn 运行中",
|
|
642
|
-
"workExec.synthesis.main-needs-attention": "主 Turn 需要处理",
|
|
681
|
+
"workExec.synthesis.awaiting-selection": "等待 Leader 选择综合来源",
|
|
682
|
+
"workExec.synthesis.main-running": "主执行记录未结清",
|
|
683
|
+
"workExec.synthesis.main-needs-attention": "主执行记录需要处理",
|
|
643
684
|
"workExec.synthesis.complete": "综合已完成",
|
|
644
685
|
"workExec.synthesis.unknown": "综合状态未知",
|
|
645
686
|
"workExec.mainStatus.not-started": "未启动",
|
|
646
|
-
"workExec.mainStatus.running": "
|
|
687
|
+
"workExec.mainStatus.running": "执行记录未结清",
|
|
647
688
|
"workExec.mainStatus.succeeded": "已成功",
|
|
648
689
|
"workExec.mainStatus.needs-attention": "需要处理",
|
|
649
690
|
"workExec.mainStatus.unknown": "未知",
|
|
@@ -654,9 +695,9 @@ const messages = {
|
|
|
654
695
|
"workExec.action.wait-for-lanes": "等待 Lane",
|
|
655
696
|
"workExec.action.retry-or-settle-lanes": "重试或结算指定 Lane",
|
|
656
697
|
"workExec.action.inspect-unknown": "检查缺失事实",
|
|
657
|
-
"workExec.action.
|
|
658
|
-
"workExec.action.wait-for-main": "
|
|
659
|
-
"workExec.action.retry-main": "
|
|
698
|
+
"workExec.action.select-synthesis-sources": "选择综合来源执行记录",
|
|
699
|
+
"workExec.action.wait-for-main": "等待主执行记录",
|
|
700
|
+
"workExec.action.retry-main": "重试主执行记录",
|
|
660
701
|
"workExec.action.redispatch-work": "重新派发 WorkItem",
|
|
661
702
|
"workExec.action.submit-candidate": "提交 Candidate",
|
|
662
703
|
"workExec.action.decide-candidate": "评审或接纳 Candidate",
|
|
@@ -673,6 +714,7 @@ const messages = {
|
|
|
673
714
|
"exec.status.working": "执行中",
|
|
674
715
|
"exec.status.completed": "已完成",
|
|
675
716
|
"exec.status.retired": "已退役",
|
|
717
|
+
"exec.status.cancelled": "已取消",
|
|
676
718
|
"exec.status.archived": "已归档",
|
|
677
719
|
"exec.owner.leader": "负责人",
|
|
678
720
|
"exec.owner.worker": "执行者",
|
|
@@ -724,9 +766,9 @@ const messages = {
|
|
|
724
766
|
"detail.lineage": "执行谱系",
|
|
725
767
|
"detail.requester": "请求方",
|
|
726
768
|
"candidate.source.direct": "直接",
|
|
727
|
-
"candidate.source.
|
|
728
|
-
"
|
|
729
|
-
"
|
|
769
|
+
"candidate.source.run": "执行记录",
|
|
770
|
+
"run.purpose.execution": "执行",
|
|
771
|
+
"run.purpose.review": "评审",
|
|
730
772
|
"review.scope.work-item": "工作项",
|
|
731
773
|
"review.scope.task": "任务"
|
|
732
774
|
}
|
|
@@ -3,7 +3,7 @@ export const MARKDOWN_SCRIPT = `
|
|
|
3
3
|
//
|
|
4
4
|
// Agent-authored prose (focus, outcomes, reviews, messages) arrives as plain
|
|
5
5
|
// text with informal Markdown. Rendering structure (headings, lists, code)
|
|
6
|
-
//
|
|
6
|
+
// runs walls of text into scannable blocks.
|
|
7
7
|
//
|
|
8
8
|
// Safety rule: every byte of user text is HTML-escaped BEFORE any tag is
|
|
9
9
|
// introduced; the transforms below only ever add our own elements. Links are
|