@zq-silk/yui 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/artifacts/artifactCapability.js +39 -10
- package/dist/artifacts/imageMetadata.js +120 -0
- package/dist/artifacts/managedGit.js +7 -4
- package/dist/artifacts/taskArtifactRepository.js +6 -0
- package/dist/cli/commandCatalog.js +18 -9
- package/dist/cli/invocationAuthority.js +1 -1
- package/dist/commands/executionAuditCommands.js +5 -0
- package/dist/commands/globalRoleCommands.js +41 -3
- package/dist/commands/projectCommands.js +89 -94
- package/dist/commands/roleSkillValidation.js +4 -8
- package/dist/commands/taskCommands.js +65 -14
- package/dist/commands/taskUsageCommand.js +38 -0
- package/dist/context/roleSessionContext.js +18 -2
- package/dist/context/runContextPack.js +5 -1
- package/dist/context/sessionBootstrapManifest.js +18 -3
- package/dist/context/skillCatalog.js +108 -0
- package/dist/context/skillPackage.js +161 -0
- package/dist/context/taskContext.js +3 -2
- package/dist/context/taskSearch.js +127 -0
- package/dist/controlPlaneCli.js +25 -20
- package/dist/controller/fileSchedulerStoreAdapter.js +39 -8
- package/dist/controller/globalInputDelivery.js +2 -4
- package/dist/controller/jobControl.js +2 -0
- package/dist/controller/nativeHostInput.js +37 -0
- package/dist/controller/providerRetryDelivery.js +4 -2
- package/dist/controller/runtime.js +93 -2
- package/dist/controller/runtimeEventInbox.js +2 -2
- package/dist/controller/runtimeEventProcessor.js +3 -3
- package/dist/doctor/doctor.js +10 -0
- package/dist/execution/reviewMainRun.js +1 -0
- package/dist/execution/workItemMainRun.js +1 -0
- package/dist/executor/agentAdapter.js +3 -5
- package/dist/executor/codexConfigConflict.js +6 -4
- package/dist/executor/effectiveLaunch.js +24 -1
- package/dist/executor/fileRoleLaunchPlanner.js +15 -7
- package/dist/integration/gitIntegrationService.js +7 -12
- package/dist/integration/integrationSourceApplication.js +4 -2
- package/dist/interaction/notificationPresentation.js +85 -0
- package/dist/interaction/operatorPresentation.js +1 -2
- package/dist/job/httpPreview.js +61 -0
- package/dist/job/jobRunner.js +12 -2
- package/dist/kernel/builtinCapabilities.js +3 -1
- package/dist/message/message.js +15 -1
- package/dist/output/rolePresentation.js +4 -1
- package/dist/repository/executionLaneGitSnapshot.js +2 -1
- package/dist/repository/gitCompatibility.js +62 -0
- package/dist/repository/gitWorkspace.js +48 -71
- package/dist/repository/gitWorktreeInventory.js +121 -0
- package/dist/repository/project.js +74 -25
- package/dist/resources/resourceDiscovery.js +2 -2
- package/dist/resources/resourceGc.js +7 -4
- package/dist/resources/resourceRegistrar.js +2 -1
- package/dist/runtime/agentEndpoint.js +8 -0
- package/dist/runtime/agentHost.js +170 -3
- package/dist/runtime/codexAppServerRuntime.js +1 -1
- package/dist/runtime/codexNativeAccess.js +175 -0
- package/dist/runtime/controlledCodexTui.js +116 -0
- package/dist/runtime/publicReply.js +23 -0
- package/dist/runtime/runtimeObservation.js +48 -0
- package/dist/runtime/structuredProviderHost.js +16 -7
- package/dist/runtime/taskCostMetrics.js +133 -0
- package/dist/runtime/taskUsageMetrics.js +11 -2
- package/dist/runtime/taskUsageQuery.js +38 -0
- package/dist/scheduler/leaderWakeupProcessor.js +1 -9
- package/dist/scheduler/taskExecutionProjection.js +2 -0
- package/dist/scheduler/taskObservabilityProjection.js +9 -1
- package/dist/storage/homeLayout.js +13 -0
- package/dist/storage/sqliteSchema.js +44 -0
- package/dist/storage/sqliteStore.js +53 -0
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +2 -0
- package/dist/storage/taskSearch.js +35 -0
- package/dist/storage/upgrade/projectKnowledgeMigration.js +52 -0
- package/dist/task/ordinaryArchive.js +42 -0
- package/dist/tmux/tmuxManager.js +8 -8
- package/dist/web/assets/assetManifest.js +11 -51
- package/dist/web/assets/client/app/catalog.js +215 -0
- package/dist/web/assets/client/app/main.js +148 -0
- package/dist/web/assets/client/app/selection.js +139 -0
- package/dist/web/assets/client/app/settings.js +326 -0
- package/dist/web/assets/client/app/taskView.js +280 -0
- package/dist/web/assets/client/domain/context.js +96 -0
- package/dist/web/assets/client/domain/records.js +126 -0
- package/dist/web/assets/client/domain/runs.js +119 -0
- package/dist/web/assets/client/domain/taskForms.js +197 -0
- package/dist/web/assets/client/domain/vocab.js +69 -0
- package/dist/web/assets/client/domain/work.js +116 -0
- package/dist/web/assets/client/i18n/en.js +900 -0
- package/dist/web/assets/client/i18n/zh-CN.js +898 -0
- package/dist/web/assets/client/index.js +114 -0
- package/dist/web/assets/client/layout/resizer.js +37 -0
- package/dist/web/assets/client/layout/router.js +35 -0
- package/dist/web/assets/client/layout/shortcuts.js +45 -0
- package/dist/web/assets/client/layout/sizing.js +95 -0
- package/dist/web/assets/client/layout/workspace.js +247 -0
- package/dist/web/assets/client/{api.js → lib/api.js} +20 -4
- package/dist/web/assets/client/{dom.js → lib/dom.js} +24 -12
- package/dist/web/assets/client/{format.js → lib/format.js} +7 -0
- package/dist/web/assets/client/lib/i18n.js +54 -0
- package/dist/web/assets/client/lib/markdown.js +167 -0
- package/dist/web/assets/client/lib/prefs.js +28 -0
- package/dist/web/assets/client/lib/theme.js +68 -0
- package/dist/web/assets/client/ui/containers.js +101 -0
- package/dist/web/assets/client/ui/controls.js +51 -0
- package/dist/web/assets/client/ui/forms.js +48 -0
- package/dist/web/assets/client/ui/metrics.js +137 -0
- package/dist/web/assets/client/ui/primitives.js +92 -0
- package/dist/web/assets/client/ui/text.js +33 -0
- package/dist/web/assets/client/ui/toast.js +12 -0
- package/dist/web/assets/client/views/bodySearch.js +172 -0
- package/dist/web/assets/client/views/createTask.js +85 -0
- package/dist/web/assets/client/views/dock/conversation.js +612 -0
- package/dist/web/assets/client/views/dock/discussion.js +173 -0
- package/dist/web/assets/client/views/dock/preview.js +129 -0
- package/dist/web/assets/client/views/dock/terminal.js +199 -0
- package/dist/web/assets/client/views/globalInput.js +67 -0
- package/dist/web/assets/client/{overview.js → views/overview.js} +61 -51
- package/dist/web/assets/client/{sidebar.js → views/sidebar.js} +56 -62
- package/dist/web/assets/client/views/skills.js +152 -0
- package/dist/web/assets/client/views/task/actions.js +36 -0
- package/dist/web/assets/client/views/task/delivery.js +185 -0
- package/dist/web/assets/client/views/task/deliveryResults.js +159 -0
- package/dist/web/assets/client/views/task/files.js +272 -0
- package/dist/web/assets/client/views/task/observation.js +153 -0
- package/dist/web/assets/client/views/task/overview.js +161 -0
- package/dist/web/assets/client/views/task/page.js +131 -0
- package/dist/web/assets/client/views/task/records.js +163 -0
- package/dist/web/assets/client/views/task/runtime.js +130 -0
- package/dist/web/assets/client/views/task/timeline.js +190 -0
- package/dist/web/assets/shared/geometry.js +19 -0
- package/dist/web/assets/shared/taskTabs.js +8 -0
- package/dist/web/assets/shared/themes.js +93 -0
- package/dist/web/assets/shell/dialogs.js +63 -0
- package/dist/web/assets/shell/dock.js +40 -0
- package/dist/web/assets/shell/index.js +40 -0
- package/dist/web/assets/shell/settings.js +34 -0
- package/dist/web/assets/shell/sidebar.js +45 -0
- package/dist/web/assets/styles/index.js +41 -0
- package/dist/web/assets/styles/{responsive.js → layout/responsive.js} +10 -10
- package/dist/web/assets/styles/{layout.js → layout/workspace.js} +17 -24
- package/dist/web/assets/styles/markdown.js +22 -3
- package/dist/web/assets/styles/tokens.js +10 -63
- package/dist/web/assets/styles/ui/controls.js +76 -0
- package/dist/web/assets/styles/ui/forms.js +46 -0
- package/dist/web/assets/styles/ui/surfaces.js +122 -0
- package/dist/web/assets/styles/views/delivery.js +29 -0
- package/dist/web/assets/styles/views/dock.js +71 -0
- package/dist/web/assets/styles/views/page.js +32 -0
- package/dist/web/assets/styles/views/records.js +70 -0
- package/dist/web/assets/styles/views/settings.js +26 -0
- package/dist/web/assets/styles/views/sidebar.js +74 -0
- package/dist/web/assets/styles/views/task.js +80 -0
- package/dist/web/assets/styles/views/terminal.js +38 -0
- package/dist/web/taskPreviews.js +205 -0
- package/dist/web/tmuxWebTerminal.js +16 -9
- package/dist/web/webConversation.js +373 -0
- package/dist/web/webMaterials.js +155 -0
- package/dist/web/webServer.js +295 -18
- package/dist/web/webSettings.js +331 -0
- package/dist/web/webSkills.js +86 -0
- package/dist/web/webSnapshot.js +40 -8
- package/dist/web/webTaskSurface.js +106 -8
- package/dist/workspace/gitChangeSetCapture.js +3 -1
- package/docs/cli-information-contract.md +1 -1
- package/docs/cli-information-contract.zh-CN.md +1 -1
- package/docs/managed-turn-and-session-runtime.md +31 -0
- package/docs/managed-turn-and-session-runtime.zh-CN.md +22 -0
- package/docs/release-workflow.md +54 -0
- package/docs/release-workflow.zh-CN.md +39 -0
- package/docs/storage-baseline.md +38 -1
- package/docs/storage-baseline.zh-CN.md +22 -0
- package/docs/task-discovery.md +28 -0
- package/docs/testing/verification-levels.md +2 -2
- package/i18n/README.zh-CN.md +1 -1
- package/package.json +1 -1
- package/skills/yui-leader/SKILL.md +5 -4
- package/skills/yui-leader/references/execution.md +2 -1
- package/skills/yui-operator/SKILL.md +3 -0
- package/skills/yui-reviewer/SKILL.md +4 -2
- package/skills/yui-runtime/SKILL.md +43 -2
- package/skills/yui-worker/SKILL.md +3 -2
- package/dist/web/assets/client/app.js +0 -808
- package/dist/web/assets/client/components.js +0 -477
- package/dist/web/assets/client/detail.js +0 -379
- package/dist/web/assets/client/dock.js +0 -309
- package/dist/web/assets/client/evidence.js +0 -364
- package/dist/web/assets/client/forms.js +0 -230
- package/dist/web/assets/client/i18n.js +0 -1277
- package/dist/web/assets/client/markdown.js +0 -114
- package/dist/web/assets/client/records.js +0 -198
- package/dist/web/assets/client/sections.js +0 -349
- package/dist/web/assets/client/theme.js +0 -71
- package/dist/web/assets/shell.js +0 -161
- package/dist/web/assets/styles/components.js +0 -216
- package/dist/web/assets/styles/views.js +0 -309
- /package/dist/web/assets/{icons.js → shared/icons.js} +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { readArtifactCapability } from "../artifacts/artifactCapability.js";
|
|
2
1
|
import { openTaskArtifactRepository } from "../artifacts/taskArtifactRepository.js";
|
|
2
|
+
import { compareTextArtifacts, readArtifactPreview } from "./webMaterials.js";
|
|
3
|
+
import { readTaskSearchSource } from "../context/taskSearch.js";
|
|
3
4
|
import { applyGlobalInputControl } from "../commands/globalRoleCommands.js";
|
|
4
|
-
import { applyTaskInputControl, sendTaskMessageCommand, updateTaskMetadataCommand } from "../commands/taskCommands.js";
|
|
5
|
+
import { applyTaskInputControl, runTaskCommand, sendTaskMessageCommand, updateTaskMetadataCommand } from "../commands/taskCommands.js";
|
|
6
|
+
import { runTaskActivationCommand } from "../commands/taskActivationCommands.js";
|
|
5
7
|
import { runTaskInputCommand } from "../commands/taskInputCommands.js";
|
|
6
8
|
import { inspectTaskContext, listTaskContext, readTaskContext, readTaskContextDelta, withContextObservations } from "../context/taskContext.js";
|
|
7
9
|
import { BUILTIN_CAPABILITIES } from "../kernel/builtinCapabilities.js";
|
|
@@ -9,6 +11,7 @@ import { capabilitySchemaError } from "../kernel/capabilitySchema.js";
|
|
|
9
11
|
import { recordGlobalInterruptResult, recordGlobalSteerResult } from "../message/globalInterrupt.js";
|
|
10
12
|
import { recordTaskInterruptResult } from "../message/taskInterrupt.js";
|
|
11
13
|
import { AGENT_HOST_CONTROL_PROTOCOL, foldInterruptLiveReceipt, foldSteerLiveReceipt, sendAgentHostCancelControl, sendAgentHostSteerControl } from "../runtime/agentHost.js";
|
|
14
|
+
import { validateOrdinaryTaskArchive } from "../task/ordinaryArchive.js";
|
|
12
15
|
import { webLocalMutation, WebRequestRejected } from "./webMutation.js";
|
|
13
16
|
const DEFAULT_WEB_HOST_CONTROL = {
|
|
14
17
|
steer: sendAgentHostSteerControl,
|
|
@@ -29,7 +32,7 @@ function controlTarget(taskId, input) {
|
|
|
29
32
|
* its token before using this port; input never supplies a caller or Role.
|
|
30
33
|
* Managed capability RPC keeps its own Session authentication unchanged.
|
|
31
34
|
*/
|
|
32
|
-
export function createWebTaskSurface(store, options = {}, observations = [], hostControl = DEFAULT_WEB_HOST_CONTROL) {
|
|
35
|
+
export function createWebTaskSurface(store, options = {}, observations = [], hostControl = DEFAULT_WEB_HOST_CONTROL, lifecycle) {
|
|
33
36
|
const environment = {};
|
|
34
37
|
const commandOptions = { ...options, environment, runtime: undefined };
|
|
35
38
|
// Notifications are after the outer transaction. Their failure must not be
|
|
@@ -39,26 +42,120 @@ export function createWebTaskSurface(store, options = {}, observations = [], hos
|
|
|
39
42
|
? { kind: "role", taskId, roleName: "leader" } : { kind: "task", taskId });
|
|
40
43
|
};
|
|
41
44
|
return {
|
|
45
|
+
workbench: (taskId) => store.transaction(tx => {
|
|
46
|
+
const task = tx.getTask(taskId);
|
|
47
|
+
if (!task)
|
|
48
|
+
throw new WebRequestRejected("Task not found.");
|
|
49
|
+
const brief = tx.getTaskBrief(taskId);
|
|
50
|
+
const clip = (value) => value === undefined ? undefined
|
|
51
|
+
: value.length > 1200 ? value.slice(0, 1200) + "…" : value;
|
|
52
|
+
return {
|
|
53
|
+
core: readTaskContext(tx, taskId, environment),
|
|
54
|
+
task: {
|
|
55
|
+
id: task.id, title: clip(task.title), status: task.status, updatedAt: task.updatedAt,
|
|
56
|
+
executionGate: task.executionGate, priority: task.priority, tags: task.tags?.slice(0, 16).map(value => clip(value)),
|
|
57
|
+
projectBindings: task.projectBindings.slice(0, 32),
|
|
58
|
+
description: clip(task.description), completionSummary: clip(task.completionSummary),
|
|
59
|
+
retirementSummary: clip(task.retirementSummary), archiveSummary: clip(task.archiveSummary),
|
|
60
|
+
archiveReason: clip(task.archiveReason),
|
|
61
|
+
activationRequest: task.activationRequest && {
|
|
62
|
+
disposition: task.activationRequest.disposition,
|
|
63
|
+
outcome: clip(task.activationRequest.outcome),
|
|
64
|
+
operation: { requestId: task.activationRequest.operation.requestId }
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
evidence: {
|
|
68
|
+
reviews: tx.listReviewRounds(taskId).sort((a, b) => b.createdAt.localeCompare(a.createdAt)).slice(0, 3)
|
|
69
|
+
.map(round => ({
|
|
70
|
+
id: round.id, status: round.status, runId: round.reviewerRunId,
|
|
71
|
+
excerpt: round.reviewerRunId ? clip(tx.getRun(taskId, round.reviewerRunId)?.result?.output) : undefined
|
|
72
|
+
})),
|
|
73
|
+
integrations: tx.listIntegrationAttempts(taskId).sort((a, b) => b.createdAt.localeCompare(a.createdAt)).slice(0, 3)
|
|
74
|
+
.map(attempt => ({
|
|
75
|
+
id: attempt.id, status: attempt.status, summary: clip(attempt.summary),
|
|
76
|
+
checks: attempt.checks?.slice(0, 8).map(check => ({ name: clip(check.name), outcome: check.outcome }))
|
|
77
|
+
}))
|
|
78
|
+
},
|
|
79
|
+
brief: brief && {
|
|
80
|
+
objective: clip(brief.objective), currentFocus: clip(brief.currentFocus),
|
|
81
|
+
leaderSummary: clip(brief.leaderSummary), technicalApproach: clip(brief.technicalApproach),
|
|
82
|
+
boundaries: brief.boundaries?.slice(0, 8).map(value => clip(value)),
|
|
83
|
+
updatedAt: brief.updatedAt
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}),
|
|
87
|
+
projects: (after) => {
|
|
88
|
+
const projects = store.listProjects().filter(project => project.status === "active")
|
|
89
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
90
|
+
const remaining = projects.filter(project => after === undefined || project.id.localeCompare(after) > 0);
|
|
91
|
+
const page = remaining.slice(0, 40);
|
|
92
|
+
return { projects: page.map(({ id, name }) => ({ id, name: name.slice(0, 200) })),
|
|
93
|
+
total: projects.length, nextCursor: remaining.length > page.length ? page.at(-1).id : null };
|
|
94
|
+
},
|
|
95
|
+
create: (input) => {
|
|
96
|
+
const result = webLocalMutation(store, tx => {
|
|
97
|
+
// A lost response must be reconciled, never create another Task.
|
|
98
|
+
if (tx.listTasks().some(task => tx.listMessages(task.id)
|
|
99
|
+
.some(message => message.submissionKey === input.requestId))) {
|
|
100
|
+
throw new Error("This creation request was already saved; inspect the Task catalog before continuing.");
|
|
101
|
+
}
|
|
102
|
+
const created = runTaskCommand(["create", input.title,
|
|
103
|
+
...input.projectIds.flatMap(id => ["--project", id])], tx, commandOptions);
|
|
104
|
+
if (created.kind !== "output")
|
|
105
|
+
throw new Error("Unexpected Task creation result.");
|
|
106
|
+
const taskId = created.data.task.id;
|
|
107
|
+
updateTaskMetadataCommand(tx, taskId, { description: input.requirements }, commandOptions);
|
|
108
|
+
const submitted = sendTaskMessageCommand(tx, taskId, input.requirements, commandOptions, undefined, input.plan ? "discuss" : "record", input.requestId);
|
|
109
|
+
return { task: submitted.task, submission: submitted.feedback, messageId: submitted.message.id };
|
|
110
|
+
});
|
|
111
|
+
notify(result.task.id, input.plan);
|
|
112
|
+
return result;
|
|
113
|
+
},
|
|
114
|
+
activate: (taskId, requestId) => {
|
|
115
|
+
const result = webLocalMutation(store, tx => runTaskActivationCommand([
|
|
116
|
+
"request", taskId, "--request-id", requestId, "--environment", "empty"
|
|
117
|
+
], tx, commandOptions));
|
|
118
|
+
notify(taskId);
|
|
119
|
+
return result.kind === "output" ? result.data : result;
|
|
120
|
+
},
|
|
121
|
+
archive: async (taskId) => {
|
|
122
|
+
if (!lifecycle)
|
|
123
|
+
throw new WebRequestRejected("Ordinary archive is unavailable.");
|
|
124
|
+
// Preflight rejection precedes any physical effects; later errors remain
|
|
125
|
+
// unknown and must be reconciled from the Task and archive diagnostics.
|
|
126
|
+
webLocalMutation(store, tx => validateOrdinaryTaskArchive(tx, taskId, commandOptions));
|
|
127
|
+
return lifecycle.archive(taskId);
|
|
128
|
+
},
|
|
42
129
|
evidence: (taskId) => store.transaction(reader => {
|
|
43
130
|
if (reader.getTask(taskId) === null)
|
|
44
131
|
throw new WebRequestRejected("Task not found.");
|
|
45
132
|
return { taskId, integrations: reader.listIntegrationAttempts(taskId),
|
|
46
133
|
reviews: reader.listReviewRounds(taskId), workspaces: reader.listManagedWorkspaces(taskId) };
|
|
47
134
|
}),
|
|
48
|
-
artifacts: async (taskId) => {
|
|
135
|
+
artifacts: async (taskId, selectedCommit, offset = 0) => {
|
|
49
136
|
if (store.getTask(taskId) === null)
|
|
50
137
|
throw new WebRequestRejected("Task not found.");
|
|
51
138
|
const repo = openTaskArtifactRepository(store.rootDirectory(), taskId);
|
|
52
|
-
|
|
139
|
+
if (selectedCommit !== undefined && !repo.exists())
|
|
140
|
+
throw new WebRequestRejected("Artifact revision unavailable.");
|
|
141
|
+
const commit = selectedCommit ?? await repo.head();
|
|
53
142
|
const entries = commit === null ? [] : await repo.list(commit);
|
|
54
|
-
|
|
143
|
+
if (!Number.isSafeInteger(offset) || offset < 0 || offset > entries.length)
|
|
144
|
+
throw new WebRequestRejected("Invalid artifact offset.");
|
|
145
|
+
return { taskId, commit, entries: entries.slice(offset, offset + 40), total: entries.length,
|
|
146
|
+
nextOffset: offset + 40 < entries.length ? offset + 40 : null };
|
|
55
147
|
},
|
|
56
|
-
artifact: async (taskId, relativePath, commit) => {
|
|
148
|
+
artifact: async (taskId, relativePath, commit, offset = 0) => {
|
|
57
149
|
if (store.getTask(taskId) === null)
|
|
58
150
|
throw new WebRequestRejected("Task not found.");
|
|
59
151
|
// The browser always names a fixed revision. Never substitute HEAD after
|
|
60
152
|
// a missing object, and never execute/render artifact HTML as an app.
|
|
61
|
-
return
|
|
153
|
+
return readArtifactPreview(store.rootDirectory(), taskId, { taskId, relativePath, commit }, offset);
|
|
154
|
+
},
|
|
155
|
+
artifactDiff: async (taskId, relativePath, commit, beforeCommit, offset = 0) => {
|
|
156
|
+
if (store.getTask(taskId) === null)
|
|
157
|
+
throw new WebRequestRejected("Task not found.");
|
|
158
|
+
return compareTextArtifacts(store.rootDirectory(), taskId, { taskId, relativePath, commit: beforeCommit }, { taskId, relativePath, commit }, offset);
|
|
62
159
|
},
|
|
63
160
|
globalState: (roleName) => {
|
|
64
161
|
const role = store.getGlobalRole(roleName);
|
|
@@ -247,6 +344,7 @@ export function createWebTaskSurface(store, options = {}, observations = [], hos
|
|
|
247
344
|
},
|
|
248
345
|
read: async (taskId) => withContextObservations(readTaskContext(store, taskId, environment), observations),
|
|
249
346
|
delta: (taskId, input) => readTaskContextDelta(store, taskId, input, environment),
|
|
347
|
+
searchSource: (taskId, input) => readTaskSearchSource(store, taskId, input, environment),
|
|
250
348
|
inspect: (taskId, input) => inspectTaskContext(store, taskId, input, environment),
|
|
251
349
|
// The same paged family discovery as `task context list`: summaries and
|
|
252
350
|
// exact references, never bodies; continuations keep their filters.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
+
import { supportedGit } from "../repository/gitCompatibility.js";
|
|
3
4
|
const executeFile = promisify(execFile);
|
|
4
5
|
export async function captureManagedGitChanges(input) {
|
|
5
6
|
await assertManagedHead(input);
|
|
@@ -61,8 +62,9 @@ async function assertManagedHead(input) {
|
|
|
61
62
|
return headCommit;
|
|
62
63
|
}
|
|
63
64
|
async function git(args) {
|
|
65
|
+
const program = supportedGit();
|
|
64
66
|
try {
|
|
65
|
-
const result = await executeFile(
|
|
67
|
+
const result = await executeFile(program.path, [...args], {
|
|
66
68
|
encoding: "utf8",
|
|
67
69
|
maxBuffer: 16 * 1024 * 1024,
|
|
68
70
|
timeout: 120_000
|
|
@@ -20,7 +20,7 @@ schema migration or new snapshot/cache store is introduced.
|
|
|
20
20
|
| What changed? | `task context delta <task> --after <cursor>` | Immutable events with a fixed upper bound, not a snapshot of current mutable state |
|
|
21
21
|
| Which Global input? | `session context <role>` | Identity, profile, authority, current native Turn/retry and separate bounded pending/recent Message pages |
|
|
22
22
|
| Read Global input | `role message list <role> [--pending]`, `role message show <role> <id>` | Scoped discovery, then exact original; queue acceptance never erases history |
|
|
23
|
-
| What arrived in this wake? | `task wake show <task> <wake>` | Fixed
|
|
23
|
+
| What arrived in this wake? | `task wake show <task> <wake>` | Fixed-window inputs/results, attributed optional summaries and exact original reads; `--history` expands diagnostics |
|
|
24
24
|
| What was assigned? | `task run context <task>/<run>` | Frozen authority and a single `pointers` inventory with summaries; changed identities in `deltaRefs`; current observations remain separate |
|
|
25
25
|
| Which configuration is real? | `task role session inspect <task> <role>` | Task/Role identity, desired binding, frozen Session, current Provider binding, retry and explicit Host observation; no full Task/Role copies or Provider conversation history |
|
|
26
26
|
|
|
@@ -18,7 +18,7 @@ CLI 调用成功,不代表 Task、原生 Turn 或远端投递完成。
|
|
|
18
18
|
| 发生了什么变化? | `task context delta <task> --after <cursor>` | 固定上界内的不可变事件,不是可变当前状态的快照 |
|
|
19
19
|
| Global 收到了什么? | `session context <role>` | 身份、Profile、权限、当前原生 Turn/retry,以及分别有界的 pending/recent Message 页 |
|
|
20
20
|
| 读取 Global 输入 | `role message list <role> [--pending]`、`role message show <role> <id>` | 在自身范围内发现,再读完整原文;队列接受不删除历史 |
|
|
21
|
-
| 本次唤醒带来什么? | `task wake show <task> <wake>` |
|
|
21
|
+
| 本次唤醒带来什么? | `task wake show <task> <wake>` | 固定窗口的输入/结果、标明来源的可选摘要和确切原文入口;`--history` 展开诊断历史 |
|
|
22
22
|
| 分配了什么? | `task run context <task>/<run>` | 冻结授权与一份带摘要的 `pointers` 目录;`deltaRefs` 表示变化身份;当前观察独立 |
|
|
23
23
|
| 实际配置是什么? | `task role session inspect <task> <role>` | Task/Role 身份、期望绑定、冻结 Session、当前 Provider 绑定、retry 与显式 Host 观察;不复制整个 Task/Role 或 Provider 会话历史 |
|
|
24
24
|
|
|
@@ -69,6 +69,14 @@ Run Pack is a reference directory: read the relevant requirement and message
|
|
|
69
69
|
bodies before acting, rather than treating a successful load as the deliverable.
|
|
70
70
|
Planning Packs expose no Project write scope or Task-completion permission.
|
|
71
71
|
|
|
72
|
+
The Manifest pointer is a recovery locator, not a read receipt. Load its exact
|
|
73
|
+
`yui-runtime`, Role Skills and profile on first entry, a new/version-changed
|
|
74
|
+
Session, or missing context after compaction/recovery. Reuse instructions only
|
|
75
|
+
when the same-version full content is still available; Yui stores no "already
|
|
76
|
+
read" state. Always refresh dynamic facts. Leader notifications use
|
|
77
|
+
`currentCommand`; dispatched AgentRuns use the actual Run ID with
|
|
78
|
+
`loadCommand`/`expandCommand`, never their placeholder templates.
|
|
79
|
+
|
|
72
80
|
Every new Run, including planning, Review and continuation, binds an explicit
|
|
73
81
|
frozen Snapshot before dispatch. Context reads validate its full identity and
|
|
74
82
|
content digest, then read its stored values without rebuilding current Task
|
|
@@ -123,6 +131,20 @@ Human input, explicit execution entry and activation failure are delivered
|
|
|
123
131
|
promptly through the existing wake mechanism. Worker results retain their
|
|
124
132
|
aggregation window. Busy native input still preserves pending messages.
|
|
125
133
|
|
|
134
|
+
Normal and retry notifications share the same bounded presentation: factual
|
|
135
|
+
change labels, attributed optional author summaries, and original read entries.
|
|
136
|
+
An author can begin a Message/report with `Yui-Summary: <one line>` (summary
|
|
137
|
+
at most 512 UTF-8 bytes). It remains in the original record; no schema migration,
|
|
138
|
+
summary store, read-acknowledgement or extra model call is involved. Missing or
|
|
139
|
+
oversized summaries fall back to facts without clipping qualifications.
|
|
140
|
+
Summaries never grant authority, accept results or mark reviews approved.
|
|
141
|
+
|
|
142
|
+
`task wake show <task> <wake>` now defaults to inputs/results and explicit
|
|
143
|
+
references, including older referenced originals. It omits unrelated diagnostic
|
|
144
|
+
events and merely started Runs; `--history` restores full fixed-window discovery.
|
|
145
|
+
Both views retain the fixed window, deduplication, exact detail commands and
|
|
146
|
+
bounded `contentPage` continuations. Read decision-relevant originals in full.
|
|
147
|
+
|
|
126
148
|
| Evidence | Disposition |
|
|
127
149
|
| --- | --- |
|
|
128
150
|
| Busy with proven non-acceptance | Preserve input; a new transport attempt may use the same Session |
|
|
@@ -276,6 +298,15 @@ Queue/steer require `--request-id`; steer/interrupt require `--expected-target`.
|
|
|
276
298
|
These commands retain the caller's existing Session authority; do not fabricate
|
|
277
299
|
a Task/Run or borrow the browser's user authority. Configuration remains under
|
|
278
300
|
`config role`, lifecycle under `session`. New controlled Global Sessions use the Host console.
|
|
301
|
+
The current controlled Codex Operator and Task Leader can also open a native
|
|
302
|
+
TUI view from Web Terminal. Its authenticated loopback relay attaches to the
|
|
303
|
+
Host's existing App Server connection and exact Thread. Complete text prompts,
|
|
304
|
+
steer and interrupt reuse Host admission and settlement; native server requests
|
|
305
|
+
retain their original request/Thread/Turn identity. Configuration overrides and
|
|
306
|
+
new/forked Threads are rejected. Web uses the existing terminal writer lease;
|
|
307
|
+
other browser windows remain read-only until the writer detaches. Closing this
|
|
308
|
+
view does not stop the Host or Provider. Conversation and native history remain
|
|
309
|
+
views of the same Provider facts, not a second Task message store.
|
|
279
310
|
A live unmanaged Session is not silently adopted; an explicit Session lifecycle
|
|
280
311
|
action is needed first.
|
|
281
312
|
|
|
@@ -55,6 +55,21 @@ Run Context 冻结 Assignment、来源引用、生效配置和工作区边界。
|
|
|
55
55
|
和消息正文,而不是把加载成功当成交付物。规划 Pack 不暴露 Project 写范围或 Task 完成
|
|
56
56
|
权限。
|
|
57
57
|
|
|
58
|
+
Manifest 指针是恢复定位入口,不是已读凭据。首次进入、新会话、版本变化、压缩或恢复后
|
|
59
|
+
说明缺失时,从其确切路径加载 `yui-runtime`、Role Skills 和 profile;仅当同版本全文仍在
|
|
60
|
+
当前可用上下文中,才复用而不机械重读。系统不保存“已经读过”状态。动态事实仍须刷新:
|
|
61
|
+
Leader 通知使用 `currentCommand`,显式 AgentRun 使用真实 Run ID 的
|
|
62
|
+
`loadCommand`/`expandCommand`,不可直接执行占位模板。
|
|
63
|
+
|
|
64
|
+
正常和重试通知共用有界呈现:流程事实、标明作者来源的可选摘要与原文入口。Agent 可在
|
|
65
|
+
Message/报告首行写 `Yui-Summary: <单行摘要>`(摘要最多 512 UTF-8 字节),保留失败、
|
|
66
|
+
未验证、待决定等限定。摘要存在原文本身,不新增数据格式、摘要存储、已读状态或模型调用;
|
|
67
|
+
缺失或超长时使用事实模板,不截断关键限定。摘要不是授权、验收或审查通过结论。
|
|
68
|
+
|
|
69
|
+
`task wake show <task> <wake>` 默认展示消息、结果与明确引用(包括窗口外原文),
|
|
70
|
+
不再枚举无关诊断事件和仅启动的 Run;`--history` 展开完整固定窗口历史。两个视图保留
|
|
71
|
+
去重、固定窗口、确切原文命令及 `contentPage` 续读。决策所依赖的原文仍须全文读取。
|
|
72
|
+
|
|
58
73
|
新 Run(包括规划、Review 和消息续接)必须在派发前绑定明确冻结的 Snapshot。
|
|
59
74
|
Context 读取校验完整身份与内容 digest,然后直接读取已保存的值,不重新收集当前
|
|
60
75
|
Task 记录。聚合执行从该 Snapshot 读取已选择的 Producer 结果;可写 Project 来自
|
|
@@ -223,6 +238,13 @@ queue/steer 要求 `--request-id`,steer/interrupt 要求 `--expected-target`
|
|
|
223
238
|
配置仍使用 `config role`,生命周期使用 `session`。新的受控 Global Session 使用 Host console。活动的非受管 Session
|
|
224
239
|
不会被静默采用,需要先执行显式的 Session 生命周期操作。
|
|
225
240
|
|
|
241
|
+
当前受控 Codex Operator 与 Task Leader 也可从 Web Terminal 打开原生 TUI 视图。
|
|
242
|
+
经过认证的本地 relay 连接 Host 现有 App Server 连接中的精确 Thread;完整文本、
|
|
243
|
+
steer 和 interrupt 复用 Host 准入与回执,原生问题/审批保留原 request/Thread/Turn
|
|
244
|
+
身份。配置覆盖和新建/派生 Thread 被拒绝。Web 复用已有终端 writer lease,
|
|
245
|
+
其他窗口在 writer 脱离前保持只读。关闭视图不会停止 Host 或 Provider。会话与
|
|
246
|
+
原生历史仍来自同一 Provider 事实,不建立另一份 Task 消息存储。
|
|
247
|
+
|
|
226
248
|
## 精确结果
|
|
227
249
|
|
|
228
250
|
原生终态只结算相匹配的那次执行。已知的原生 Turn ID 必须匹配;串行流可以使用已证明的
|
package/docs/release-workflow.md
CHANGED
|
@@ -51,6 +51,60 @@ merely to avoid a version decision. Package versions remain distinct from protoc
|
|
|
51
51
|
and persistent-storage contracts: their compatibility checks and required migrations
|
|
52
52
|
are unchanged, and the storage rules below do not authorize a package release.
|
|
53
53
|
|
|
54
|
+
### 2.5.0 compatibility and migration notes
|
|
55
|
+
|
|
56
|
+
This minor includes Task110's notification and context-loading improvements.
|
|
57
|
+
Normal and recovery notifications share bounded facts, optional attributed
|
|
58
|
+
author summaries and exact action entries. A summary is not acceptance or
|
|
59
|
+
authority: relevant requirements, user messages and execution results must
|
|
60
|
+
still be read in full.
|
|
61
|
+
|
|
62
|
+
Session instructions name the required Skills explicitly. Reuse is conditional
|
|
63
|
+
on the complete same-version instructions remaining available in context;
|
|
64
|
+
first entry, changed instructions or missing/compacted content require loading
|
|
65
|
+
the exact Manifest and referenced files again. There is no persistent read
|
|
66
|
+
receipt, instruction cache or additional model call for summarization.
|
|
67
|
+
|
|
68
|
+
`task wake show` now focuses on relevant messages, results and referenced
|
|
69
|
+
evidence by default. Use `--history` for the broader fixed-window diagnostic
|
|
70
|
+
view and follow pagination when present. Consumers must not treat the focused
|
|
71
|
+
view as all history. Original records, exact older references, deduplication,
|
|
72
|
+
snapshot boundaries and unknown-input no-replay rules are preserved.
|
|
73
|
+
|
|
74
|
+
No storage migration is added; storage remains **1.6**. Deterministic tests and
|
|
75
|
+
package smoke do not prove real-model instruction reuse or compaction recovery.
|
|
76
|
+
Byte measurements are not token savings and can increase for a simple first
|
|
77
|
+
entry. Publishing this package does not upgrade a global CLI, migrate a Home
|
|
78
|
+
or restart a Controller.
|
|
79
|
+
|
|
80
|
+
### 2.4.0 compatibility and migration notes
|
|
81
|
+
|
|
82
|
+
This minor ships the unified Web Task/Operator conversations and same-thread
|
|
83
|
+
Codex terminal access, Task workbench, settings, text materials, pinned
|
|
84
|
+
Markdown/image previews, bounded search and exact selection references,
|
|
85
|
+
Task-owned HTTP previews, current-Session model/Slash controls, Skill browsing
|
|
86
|
+
and explicit bindings. Knowledge applicability, complete frozen Skill packages,
|
|
87
|
+
and sourced usage/cost evidence are included. Git 2.29+ compatibility and the
|
|
88
|
+
Task109 model-validation, terminal-reader isolation and unknown-send recovery
|
|
89
|
+
fixes are included; Task110's unmerged work is not part of this release.
|
|
90
|
+
|
|
91
|
+
Storage is now **1.6**. Use the supported centralized, contiguous same-major
|
|
92
|
+
upgrade path for older supported Homes; do not edit stored records manually.
|
|
93
|
+
Historical missing cost remains unknown. Old Skill provenance is not rebuilt
|
|
94
|
+
from today's files: if restoring an old Session reports missing frozen-package
|
|
95
|
+
evidence, follow its new-Session guidance while preserving the old history.
|
|
96
|
+
Current model adoption is connection-local and does not change future defaults;
|
|
97
|
+
exit the Host-owned native TUI before changing its model (closing a viewer only
|
|
98
|
+
detaches it). Unknown sends must be inspected by their original request ID,
|
|
99
|
+
not replayed from a fresh tab. These are explicit behavioral boundaries, not
|
|
100
|
+
a general backward-compatibility promise.
|
|
101
|
+
|
|
102
|
+
The [Task109 report](testing/web-coverage-final.md) records Linux browser and
|
|
103
|
+
real-model evidence with its original platform and sandbox limitations.
|
|
104
|
+
Official CI/package smoke is separate evidence, not macOS browser/live-model
|
|
105
|
+
coverage. Real-model checks remain opt-in. Publishing this package does not
|
|
106
|
+
upgrade the global CLI, migrate a user's Home or restart their Controller.
|
|
107
|
+
|
|
54
108
|
### 2.3.0 compatibility and migration notes
|
|
55
109
|
|
|
56
110
|
This minor release separates Task acceptance and verified remote delivery from
|
|
@@ -36,6 +36,45 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
|
|
|
36
36
|
不能将不兼容冒称为兼容,也不为回避版本选择新增历史兼容机制。包版本与协议、
|
|
37
37
|
持久存储契约仍然独立:兼容性检查和必要迁移要求不变,下文存储规则不授予发版权限。
|
|
38
38
|
|
|
39
|
+
### 2.5.0 兼容性及迁移说明
|
|
40
|
+
|
|
41
|
+
本 minor 包含 Task110 的通知和上下文加载优化。正常与恢复通知共用有界事实、
|
|
42
|
+
可选且注明来源的作者摘要及精确行动入口。摘要不是验收或授权:相关需求、
|
|
43
|
+
用户消息和执行结果仍须全文读取。
|
|
44
|
+
|
|
45
|
+
会话说明显式列出所需 Skill。只有完整的同版本说明仍在可用上下文中时才能复用;
|
|
46
|
+
首次进入、说明变更或内容缺失/被压缩时,须重新加载精确 Manifest 及其引用文件。
|
|
47
|
+
没有新增持久已读回执、说明缓存或专用模型摘要调用。
|
|
48
|
+
|
|
49
|
+
`task wake show` 默认聚焦相关消息、结果及引用证据;如需更完整的固定窗口诊断,
|
|
50
|
+
使用 `--history`,有分页时继续读取。调用方不能将聚焦视图当作全部历史。
|
|
51
|
+
原始记录、精确旧引用、去重、快照边界及未知输入不得重放的规则保持不变。
|
|
52
|
+
|
|
53
|
+
本版不新增存储迁移,存储仍为 **1.6**。确定性测试及安装包冒烟不证明真实模型
|
|
54
|
+
会复用说明或在压缩后正确补读;字节测量不是 token 节省,简单首次进入的开销
|
|
55
|
+
可能增加。发布本包不会升级全局 CLI、迁移 Home 或重启 Controller。
|
|
56
|
+
|
|
57
|
+
### 2.4.0 兼容性及迁移说明
|
|
58
|
+
|
|
59
|
+
本 minor 发布统一 Web Task/Operator 对话及同 Thread Codex 终端、任务工作台、
|
|
60
|
+
设置、文本材料、固定版本 Markdown/图片预览、有界检索与精确选区引用、
|
|
61
|
+
Task-owned HTTP 预览、当前 Session 模型/Slash 操作,以及 Skill 浏览和显式绑定。
|
|
62
|
+
同时包含 Knowledge 适用范围、完整冻结 Skill 包、具来源的用量/费用证据、
|
|
63
|
+
Git 2.29+ 支持,以及 Task109 的模型校验、终端读者隔离和未知发送恢复修复。
|
|
64
|
+
Task110 尚未合入的工作不属于本版本。
|
|
65
|
+
|
|
66
|
+
存储版本现为 **1.6**。旧的受支持 Home 应走集中、连续的同主版本升级路径,
|
|
67
|
+
不要手工修改存储记录。历史缺失费用仍为未知;旧 Skill 来源不会从今天的文件
|
|
68
|
+
补造。恢复旧 Session 若提示缺少冻结包证据,应保留旧历史并按提示建立新 Session。
|
|
69
|
+
当前模型操作只作用于本次连接,不修改未来默认值;切换模型前须退出 Host 持有的
|
|
70
|
+
原生 TUI,关闭浏览器查看器仅断开查看。未知发送必须查询原 request-id,
|
|
71
|
+
不能通过新标签页重放。这些是明确的行为边界,不是一般向后兼容承诺。
|
|
72
|
+
|
|
73
|
+
[Task109 报告](testing/web-coverage-final.md) 保留 Linux 浏览器和真实模型证据,
|
|
74
|
+
以及原平台/沙箱限制。正式 CI/安装包冒烟是独立证据,不代表 macOS 浏览器或
|
|
75
|
+
真实模型覆盖。真实模型测试保持 opt-in。发布本包不会升级全局 CLI、迁移用户
|
|
76
|
+
Home 或重启其 Controller。
|
|
77
|
+
|
|
39
78
|
### 2.3.0 兼容性及迁移说明
|
|
40
79
|
|
|
41
80
|
本次 minor 将 Task 验收与已核验的远端交付、不可变 Integration 历史、
|
package/docs/storage-baseline.md
CHANGED
|
@@ -2,11 +2,48 @@
|
|
|
2
2
|
|
|
3
3
|
# Storage baseline 1.0
|
|
4
4
|
|
|
5
|
-
Current storage is 1.
|
|
5
|
+
Current storage is 1.6. The declared 1.5 → 1.6 transition adds optional
|
|
6
|
+
source-attributed monetary evidence to canonical runtime observations. Existing
|
|
7
|
+
observations remain unchanged: absent amounts and prices stay unknown. The SQL
|
|
8
|
+
layout is unchanged.
|
|
9
|
+
|
|
10
|
+
The declared 1.3 → 1.4 transition gives Project
|
|
11
|
+
Knowledge applicability and exact version history, and updates proposal
|
|
12
|
+
fingerprints to include applicability and replacement intent. It restores
|
|
13
|
+
`scope`/`expiresWhen` only from an exact matching accepted proposal. Migrated
|
|
14
|
+
knowledge starts at version 1 of the observed head; older proposals remain
|
|
15
|
+
available, but missing historical edits are not invented. Frozen Context
|
|
16
|
+
snapshots and their digests are unchanged. The SQL layout is unchanged.
|
|
17
|
+
|
|
18
|
+
The declared 1.2 → 1.3 transition adds optional exact Session fences to
|
|
19
|
+
structured inputs and permits their explicit nondelivery reason without an
|
|
20
|
+
Assignment. Existing Role-addressed inputs remain unchanged.
|
|
21
|
+
|
|
22
|
+
The declared 1.1 → 1.2 transition adds optional
|
|
6
23
|
CapabilityGrant authorization-source evidence and native-human input/archive
|
|
7
24
|
audit records. Existing valid Operator grants remain unchanged; migration does
|
|
8
25
|
not infer or invent past user authority. The SQL layout is unchanged.
|
|
9
26
|
|
|
27
|
+
The 1.4 → 1.5 transition introduces complete Skill package references in
|
|
28
|
+
effective launch snapshots and Session Manifests. Historical records and their
|
|
29
|
+
digests are preserved byte-for-byte; missing package metadata explicitly means
|
|
30
|
+
legacy entrypoint-only/unrecorded evidence. Migration cannot recover resources
|
|
31
|
+
that were never captured. Existing running Hosts keep their original inputs;
|
|
32
|
+
restoring a legacy Session requires explicitly selecting a new Session. No
|
|
33
|
+
ordinary reader backfills historical versions from mutable sources.
|
|
34
|
+
|
|
35
|
+
New launches snapshot raw resources under `runtime/skill-packages/<digest>`.
|
|
36
|
+
The version covers sorted relative paths, SHA-256 byte digests, sizes and
|
|
37
|
+
executable flags. Builtin Skills share a complete sibling tree to preserve
|
|
38
|
+
cross-Role references; configured Skills are bounded to their own directory.
|
|
39
|
+
Symlinks and special files are rejected, as are packages exceeding 2,048 files,
|
|
40
|
+
8 MiB per file, 32 MiB total or 32 directory levels. Scripts are retained,
|
|
41
|
+
never run on import. Sources must be readable and physically rooted.
|
|
42
|
+
Sessions and AgentRuns retain the compact source/version/inventory pointers;
|
|
43
|
+
file bodies stay in the package. Changing a source affects a new Session only.
|
|
44
|
+
Lost or corrupted packages fail closed rather than being rebuilt from current
|
|
45
|
+
sources.
|
|
46
|
+
|
|
10
47
|
Yui 1.0.0 starts from one clean persistent contract. The package version,
|
|
11
48
|
storage schema, record envelopes and Controller protocol are separate
|
|
12
49
|
identities; none is inferred from another.
|
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
# 存储基线 1.0
|
|
4
4
|
|
|
5
|
+
当前存储为 1.5。已声明的 1.3 → 1.4 迁移为正式项目知识增加适用信息和精确版本历史,
|
|
6
|
+
并将提案指纹扩展到适用范围、失效条件及替代意图。仅从精确匹配的已接受提案恢复
|
|
7
|
+
`scope`/`expiresWhen`;存量知识以已观察到的当前内容建立版本 1,不臆造缺失的修改历史。
|
|
8
|
+
已有提案的身份、审批和来源保留,冻结的 Context 快照及摘要不改写。物理 SQL 结构不变。
|
|
9
|
+
|
|
10
|
+
既有 1.2 → 1.3 迁移为结构化输入增加可选的精确 Session 限定和无 Assignment
|
|
11
|
+
时的明确未投递原因;既有按 Role 寻址的输入保持原样,不推断历史 Session 选择。
|
|
12
|
+
|
|
13
|
+
1.4 → 1.5 在现有 effective launch 和 Session
|
|
14
|
+
Manifest 中新增完整 Skill 包引用,不改 SQL 布局。历史记录与摘要原样保留;
|
|
15
|
+
缺少包元数据明确表示旧版只记录入口正文或没有装载证据,不能拿当前源目录
|
|
16
|
+
补造历史版本。运行中的旧 Host 保留原输入;恢复缺少包快照的旧 Session 时
|
|
17
|
+
会给出需要显式创建新 Session 的诊断,不在普通读取中迁移或回填。
|
|
18
|
+
|
|
19
|
+
新 Session 将资源保存到 `runtime/skill-packages/<digest>`,摘要覆盖排序后的
|
|
20
|
+
相对路径、原始文件字节摘要、大小与可执行标志。内置 Skills 共享完整兄弟目录,
|
|
21
|
+
保留跨 Role 相对引用;自定义 Skill 限于其自身目录。拒绝符号链接、特殊文件,
|
|
22
|
+
以及超过 2,048 个文件、单文件 8 MiB、总计 32 MiB 或 32 层目录的包。
|
|
23
|
+
脚本只保存,不因装载而执行。Session、AgentRun、CLI 和 Web 复用精简来源、
|
|
24
|
+
版本与资源清单引用,不复制大文件正文。源更新只影响新 Session;快照丢失或
|
|
25
|
+
损坏明确报错,不从当前源目录重建。
|
|
26
|
+
|
|
5
27
|
Yui 1.0.0 从唯一、纯净的持久化契约开始。软件包版本、存储结构、记录封装和
|
|
6
28
|
Controller 协议是相互独立的身份,不能从其中一个推断另一个。
|
|
7
29
|
|
package/docs/task-discovery.md
CHANGED
|
@@ -25,6 +25,34 @@ and semantic progress.
|
|
|
25
25
|
|
|
26
26
|
## Query and page contract
|
|
27
27
|
|
|
28
|
+
### Project knowledge
|
|
29
|
+
|
|
30
|
+
Current Task and Run Context select active knowledge only from the bound
|
|
31
|
+
projects. `scope` and `expiresWhen` are free text: the Agent reads the original
|
|
32
|
+
and decides whether it applies to the actual task. Engineering does not infer
|
|
33
|
+
semantic expiry or execute knowledge content. Explicit Operator retirement
|
|
34
|
+
removes an entry from future current Context; frozen Run evidence is unchanged.
|
|
35
|
+
Context pointers expose applicability and version, with complete source and
|
|
36
|
+
prior versions available through the exact detail read.
|
|
37
|
+
|
|
38
|
+
`project knowledge list` and `project knowledge proposals list` return compact
|
|
39
|
+
`items/total/complete/nextCursor` pages (`--limit`, `--cursor`); `--all` includes
|
|
40
|
+
retired knowledge or decided proposals respectively. `show` returns the exact
|
|
41
|
+
knowledge/proposal, or `contentPage` for a long record: continue with its cursor
|
|
42
|
+
and concatenate `text` in offset order before parsing. Mutation receipts contain
|
|
43
|
+
identities, not the entire Project. Web’s Task Records → Project knowledge uses
|
|
44
|
+
the same paged discovery and exact source reader.
|
|
45
|
+
|
|
46
|
+
Proposal identity includes project, source Task/Decision/Milestone/commit,
|
|
47
|
+
title, body, scope, expiry condition and superseded knowledge ID. Only outer
|
|
48
|
+
whitespace is trimmed; internal whitespace, case and Unicode remain significant.
|
|
49
|
+
An omitted condition differs from a supplied one; omit a condition in a
|
|
50
|
+
replacement proposal to clear it upon `accept --update`. A repeated identical
|
|
51
|
+
proposal reuses its existing pending/accepted identity. Changed applicability
|
|
52
|
+
still requires the existing Operator approval, including explicit `--update`
|
|
53
|
+
for a same-title replacement. Each effective update or retirement increments
|
|
54
|
+
the formal version and preserves its exact prior content and provenance.
|
|
55
|
+
|
|
28
56
|
```sh
|
|
29
57
|
yui task list --project project-1 --status active --limit 20 --json
|
|
30
58
|
yui task list --attention openInputs --json
|
|
@@ -50,12 +50,12 @@ is required.
|
|
|
50
50
|
## Permanent core smoke
|
|
51
51
|
|
|
52
52
|
`npm test` and `npm run test:core` build the checkout and run the maintained suite.
|
|
53
|
-
The stable suite owns current storage 1.
|
|
53
|
+
The stable suite owns current storage 1.6 and its declared 1.0/1.1/1.2/1.3/1.4/1.5 minor
|
|
54
54
|
transition. It contains no undeclared historical format compatibility path.
|
|
55
55
|
|
|
56
56
|
Current coverage includes:
|
|
57
57
|
|
|
58
|
-
1. Fresh storage 1.
|
|
58
|
+
1. Fresh storage 1.6, exact schema/record validation, no initialization over
|
|
59
59
|
unknown data, and rejection of old integer formats without mutation.
|
|
60
60
|
2. Exact-version staging, mismatched-target refusal, same-major contiguous
|
|
61
61
|
minor preflight, explicit maintenance-owner identity across handover, and
|
package/i18n/README.zh-CN.md
CHANGED
|
@@ -40,7 +40,7 @@ Yui 是面向编程 Agent 的本地控制面。你只需用自然语言把目标
|
|
|
40
40
|
npm 包包含 Linux x64、Mac Intel 和 Apple Silicon 的 Yui 预编译程序。
|
|
41
41
|
同一份包在三个平台验证后发布,运行时只选择对应平台的程序。
|
|
42
42
|
|
|
43
|
-
需要 Linux x64 / glibc 或 macOS(x64 或 Apple Silicon)、Git
|
|
43
|
+
需要 Linux x64 / glibc 或 macOS(x64 或 Apple Silicon)、Git 2.29.0 或更新版本、tmux,以及
|
|
44
44
|
Node.js `^20.17.0`、`^22.9.0`、`^24.0.0` 或 `^26.0.0`。macOS 上可用
|
|
45
45
|
`brew install tmux` 安装 tmux。最简单的方式是先安装 Codex CLI 或 Claude
|
|
46
46
|
Code CLI,并确保它已经可以使用你自己的账号正常工作。Yui 负责协调 Agent,
|
package/package.json
CHANGED
|
@@ -14,10 +14,11 @@ their summaries. Resolve links relative to the file containing them.
|
|
|
14
14
|
|
|
15
15
|
Current Context is a bounded working set, not all Task history. Use
|
|
16
16
|
`task context list <task> --store <store>` or a domain list for discovery,
|
|
17
|
-
then an exact detail read. A wake contains
|
|
18
|
-
not
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
then an exact detail read. A wake contains attributed change summaries and
|
|
18
|
+
original Message/Run pointers, not complete reports. Follow `yui-runtime`'s
|
|
19
|
+
`nextCursor` and `contentPage` rules: read the complete focused wake view and
|
|
20
|
+
relevant originals before disposition; use `wake show --history` only when
|
|
21
|
+
window history/diagnostics matter. Summaries never decide completion.
|
|
21
22
|
|
|
22
23
|
Before WorkItem dispatch, put the complete bounded requirements in the WorkItem
|
|
23
24
|
or explicitly select up to 16 relevant readable materials with repeated
|
|
@@ -420,7 +420,8 @@ notification; no active AgentRun is required.
|
|
|
420
420
|
|
|
421
421
|
Before ending authorized execution:
|
|
422
422
|
|
|
423
|
-
1. Inspect the wake
|
|
423
|
+
1. Inspect the focused wake inputs/results (expand `--history` when needed),
|
|
424
|
+
resolve every referenced Worker or Reviewer AgentRun
|
|
424
425
|
with `yui task run show`, read each original result in full, and make the
|
|
425
426
|
next decision.
|
|
426
427
|
2. Persist actual WorkItem lifecycle and material Brief, Decision, Milestone,
|
|
@@ -30,6 +30,9 @@ another reader's understanding or action. Do not narrate dispatch, attach,
|
|
|
30
30
|
heartbeat, sampling, unchanged waiting, or routine recovery.
|
|
31
31
|
|
|
32
32
|
A `[Yui updates]` message is a wake envelope containing durable references.
|
|
33
|
+
Follow `yui-runtime`'s conditional instruction loading and attributed summary
|
|
34
|
+
contract for both Global Message inputs and these notices. Summaries locate
|
|
35
|
+
originals; they cannot grant user authority or prove result acceptance.
|
|
33
36
|
Read those exact records before responding and combine related updates into one
|
|
34
37
|
user-level summary. Do not create a Codex Goal, polling loop, private monitoring
|
|
35
38
|
task, or synthetic progress message; future durable events will wake the
|
|
@@ -110,8 +110,10 @@ frozen Review or its original report.
|
|
|
110
110
|
|
|
111
111
|
A helpful default result layout is Conclusion, Material findings, Verification,
|
|
112
112
|
Uncertainty, and Recommended next action. Markdown or JSON are both acceptable.
|
|
113
|
-
Yui preserves the original text and does not parse
|
|
114
|
-
missing headings, field names, or formatting.
|
|
113
|
+
Yui preserves the original text and does not parse a verdict or reject it for
|
|
114
|
+
missing headings, field names, or formatting. Follow `yui-runtime`'s optional
|
|
115
|
+
`Yui-Summary:` first-line convention for attributed notification text; retain
|
|
116
|
+
material findings and uncertainty rather than implying automatic approval.
|
|
115
117
|
|
|
116
118
|
For normal software delivery, follow the applicable Project Policy. The
|
|
117
119
|
Leader decides whether risk warrants one independent Task-final Review of the
|