@zq-silk/yui 0.2.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +603 -133
- package/README.md +806 -31
- package/dist/agent/agent.js +2 -1
- package/dist/agent/argumentPolicy.js +3 -1
- package/dist/agent/launchEnvironment.js +106 -0
- package/dist/agent/managedRuntimeEnvironment.js +34 -0
- package/dist/brief/taskBrief.js +11 -1
- package/dist/cli/agentConfigurationPicker.js +287 -0
- package/dist/cli/commandCatalog.js +488 -60
- package/dist/cli/completion.js +146 -22
- package/dist/cli/helpRenderer.js +3 -1
- package/dist/cli/interactionCandidates.js +53 -15
- package/dist/cli/interactionPolicy.js +267 -30
- package/dist/cli/interactiveSelection.js +6 -2
- package/dist/cli/invocationRouter.js +5 -1
- package/dist/cli/operatorWizard.js +87 -0
- package/dist/cli/roleOptionCatalog.js +1 -0
- package/dist/cli/roleWizard.js +185 -21
- package/dist/cli/updateCommand.js +62 -19
- package/dist/cli/updateOrchestrator.js +539 -0
- package/dist/cli/updatePorts.js +1119 -0
- package/dist/cli/upgradeCommand.js +112 -0
- package/dist/cli.js +1420 -86
- package/dist/commands/agentCommands.js +146 -3
- package/dist/commands/configCommands.js +126 -0
- package/dist/commands/controllerCommands.js +365 -0
- package/dist/commands/globalRoleCommands.js +168 -126
- package/dist/commands/jobCommands.js +18 -8
- package/dist/commands/operatorCommands.js +159 -9
- package/dist/commands/profileCommands.js +203 -0
- package/dist/commands/projectCommands.js +650 -0
- package/dist/commands/roleConfiguration.js +85 -24
- package/dist/commands/roleRuntimeGuard.js +12 -0
- package/dist/commands/roleSkillValidation.js +47 -0
- package/dist/commands/taskActor.js +127 -0
- package/dist/commands/taskCommands.js +4201 -313
- package/dist/commands/taskCompletionGate.js +131 -0
- package/dist/commands/taskContextCommand.js +244 -30
- package/dist/commands/taskInputCommands.js +177 -59
- package/dist/commands/taskIntegrationCommands.js +303 -0
- package/dist/commands/taskOverviewCommand.js +363 -0
- package/dist/commands/taskRoleRuntimeStatus.js +125 -19
- package/dist/commands/textInput.js +15 -0
- package/dist/completion/completionInstaller.js +26 -22
- package/dist/config/yuiConfig.js +4 -3
- package/dist/context/dispatchContext.js +90 -38
- package/dist/context/roleSessionContext.js +119 -0
- package/dist/controller/claudeLifecycleHook.js +203 -0
- package/dist/controller/clientRuntime.js +408 -56
- package/dist/controller/codexLifecycleHook.js +108 -0
- package/dist/controller/controller.js +1089 -32
- package/dist/controller/domainIdentity.js +505 -0
- package/dist/controller/ephemeralResourceReaper.js +131 -0
- package/dist/controller/fileSchedulerStoreAdapter.js +2153 -103
- package/dist/controller/providerHookRunFence.js +127 -0
- package/dist/controller/resourceCleanupLinux.js +286 -0
- package/dist/controller/resourceInventory.js +531 -0
- package/dist/controller/resourceInventoryLinux.js +610 -0
- package/dist/controller/runtime.js +629 -10
- package/dist/controller/runtimeEventInbox.js +564 -0
- package/dist/controller/runtimeEventProcessor.js +248 -0
- package/dist/controller/runtimeLaunchCoordinator.js +477 -0
- package/dist/controller/sessionNotify.js +121 -78
- package/dist/coordination/deadlineScheduler.js +15 -0
- package/dist/coordination/mailboxScheduler.js +108 -0
- package/dist/coordination/workMailbox.js +329 -0
- package/dist/coordination/workMailboxQueue.js +86 -0
- package/dist/core/controllerClient.js +19 -5
- package/dist/core/controllerEndpoint.js +37 -0
- package/dist/core/controllerServer.js +218 -10
- package/dist/core/protocol.js +6 -2
- package/dist/decision/decision.js +2 -1
- package/dist/doctor/doctor.js +681 -32
- package/dist/domain/validation.js +53 -0
- package/dist/errors/cliError.js +5 -3
- package/dist/event/taskEvent.js +7 -3
- package/dist/execution/codexThreadNaming.js +160 -0
- package/dist/execution/executionGroup.js +579 -0
- package/dist/executor/agentAdapter.js +255 -40
- package/dist/executor/agentConfigurationCatalog.js +326 -0
- package/dist/executor/agentConfigurationProbe.js +506 -0
- package/dist/executor/agentExecutor.js +625 -10
- package/dist/executor/codexConfigConflict.js +290 -0
- package/dist/executor/effectiveLaunch.js +340 -0
- package/dist/executor/executorRegistry.js +238 -36
- package/dist/executor/fileRoleLaunchPlanner.js +550 -40
- package/dist/executor/turnCompletion.js +126 -0
- package/dist/input/inputRequest.js +30 -9
- package/dist/integration/changeSet.js +36 -0
- package/dist/integration/checkResult.js +24 -0
- package/dist/integration/gitIntegrationService.js +695 -0
- package/dist/integration/integrationAttempt.js +142 -0
- package/dist/interaction/operatorPresentation.js +96 -0
- package/dist/lifecycle/canonicalLifecycleEvent.js +342 -0
- package/dist/lifecycle/exactRunTerminalization.js +572 -0
- package/dist/lifecycle/providerLifecycleMapping.js +190 -0
- package/dist/lifecycle/taskRoleSessionReset.js +124 -0
- package/dist/message/message.js +23 -7
- package/dist/milestone/milestone.js +2 -1
- package/dist/operator/operatorSessionHistory.js +124 -0
- package/dist/output/agentConfigurationPresentation.js +43 -0
- package/dist/output/rolePresentation.js +34 -10
- package/dist/output/terminal.js +8 -0
- package/dist/output/timePresentation.js +55 -0
- package/dist/profile/agentProfile.js +128 -0
- package/dist/repository/gitWorkspace.js +578 -24
- package/dist/repository/project.js +213 -0
- package/dist/repository/taskWorkspaceCoordinator.js +392 -0
- package/dist/repository/taskWorkspacePreparer.js +1688 -191
- package/dist/review/reviewConfig.js +11 -0
- package/dist/review/reviewRound.js +399 -0
- package/dist/review/taskFinalReviewContract.js +90 -0
- package/dist/role/role.js +124 -23
- package/dist/run/agentRun.js +155 -12
- package/dist/run/runIdentity.js +82 -0
- package/dist/runtime/exactControlPlane.js +472 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/lifecycleReservation.js +38 -0
- package/dist/runtime/ports.js +11 -0
- package/dist/runtime/preallocatedNativeSession.js +13 -0
- package/dist/runtime/promptEnvelope.js +30 -0
- package/dist/runtime/runtimeBinding.js +31 -0
- package/dist/runtime/runtimeOwner.js +14 -0
- package/dist/runtime/sessionLaunchRequest.js +62 -0
- package/dist/runtime/sessionTitle.js +54 -0
- package/dist/runtime/taskRuntimeIsolation.js +643 -0
- package/dist/runtime/tmuxAdapters.js +315 -0
- package/dist/runtime/turnCompletion.js +3 -0
- package/dist/runtime/validation.js +23 -0
- package/dist/scheduler/activeRoleRunDelivery.js +342 -32
- package/dist/scheduler/activeTaskProgress.js +63 -0
- package/dist/scheduler/leaderFailure.js +2 -1
- package/dist/scheduler/leaderWakeupProcessor.js +307 -66
- package/dist/scheduler/operatorInputNotificationProcessor.js +109 -46
- package/dist/scheduler/operatorNotification.js +44 -2
- package/dist/scheduler/ports.js +28 -1
- package/dist/scheduler/roleRunLiveness.js +131 -25
- package/dist/scheduler/roleRunStall.js +951 -0
- package/dist/scheduler/taskExecutionProjection.js +544 -0
- package/dist/scheduler/wakeupQueue.js +3 -0
- package/dist/setup/setupCommand.js +302 -52
- package/dist/storage/compatibleTaskStore.js +102 -0
- package/dist/storage/migration/baseline.js +78 -0
- package/dist/storage/migration/classifier.js +51 -0
- package/dist/storage/migration/compatibleCodec.js +53 -0
- package/dist/storage/migration/engine.js +147 -0
- package/dist/storage/migration/index.js +33 -0
- package/dist/storage/migration/planner.js +154 -0
- package/dist/storage/migration/productionRegistry.js +486 -0
- package/dist/storage/migration/registry.js +169 -0
- package/dist/storage/migration/report.js +54 -0
- package/dist/storage/migration/types.js +31 -0
- package/dist/storage/storageSchema.js +147 -123
- package/dist/storage/storageVersions.js +11 -0
- package/dist/storage/taskStore.js +1793 -197
- package/dist/storage/upgrade/homeClassification.js +156 -0
- package/dist/storage/upgrade/homeMigrationTarget.js +595 -0
- package/dist/storage/upgrade/offlineUpgradeInventory.js +315 -0
- package/dist/storage/upgrade/productionMigrationRegistry.js +6 -0
- package/dist/storage/upgrade/recordVersionScan.js +176 -0
- package/dist/storage/upgrade/recordVersions.js +159 -0
- package/dist/storage/upgrade/switchProgress.js +80 -0
- package/dist/storage/upgrade/upgradeOrchestrator.js +948 -0
- package/dist/storage/upgrade/upgradeReceipt.js +161 -0
- package/dist/storage/upgradeCoordination.js +186 -0
- package/dist/storage/upgradeFence.js +366 -0
- package/dist/task/task.js +132 -26
- package/dist/task/taskRecordReference.js +66 -0
- package/dist/tmux/commandExecutor.js +75 -2
- package/dist/tmux/tmuxManager.js +747 -49
- package/dist/version.js +23 -0
- package/dist/web/assets/assetManifest.js +62 -0
- package/dist/web/assets/client/app.js +631 -0
- package/dist/web/assets/client/components.js +605 -0
- package/dist/web/assets/client/dom.js +14 -0
- package/dist/web/assets/client/format.js +28 -0
- package/dist/web/assets/client/i18n.js +494 -0
- package/dist/web/assets/client/markdown.js +114 -0
- package/dist/web/assets/client/theme.js +32 -0
- package/dist/web/assets/client/view.js +458 -0
- package/dist/web/assets/fontData.js +12 -0
- package/dist/web/assets/fonts.js +12 -0
- package/dist/web/assets/shell.js +114 -0
- package/dist/web/assets/styles/cards.js +135 -0
- package/dist/web/assets/styles/layout.js +47 -0
- package/dist/web/assets/styles/markdown.js +29 -0
- package/dist/web/assets/styles/responsive.js +39 -0
- package/dist/web/assets/styles/tokens.js +101 -0
- package/dist/web/assets/styles/widgets.js +147 -0
- package/dist/web/tmuxWebTerminal.js +158 -0
- package/dist/web/webServer.js +463 -0
- package/dist/web/webSnapshot.js +148 -0
- package/dist/workItem/workItem.js +642 -23
- package/dist/workspace/gitChangeSetCapture.js +86 -0
- package/dist/workspace/workItemChangeSetManager.js +445 -0
- package/dist/worktree/managedWorkspace.js +202 -0
- package/docs/task-local-identity.md +62 -0
- package/i18n/README.zh-CN.md +406 -31
- package/package.json +10 -2
- package/skills/yui-leader/SKILL.md +601 -39
- package/skills/yui-operator/SKILL.md +255 -34
- package/skills/yui-reviewer/SKILL.md +57 -0
- package/skills/yui-worker/SKILL.md +214 -17
- package/dist/commands/repositoryCommands.js +0 -86
- package/dist/operator/operatorContext.js +0 -66
- package/dist/repository/repository.js +0 -55
- package/dist/scheduler/archivedTaskRuntime.js +0 -12
- package/dist/worktree/roleWorkspace.js +0 -62
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Four-state classification of a real Yui Home.
|
|
3
|
+
*
|
|
4
|
+
* This layers real, I/O-based corruption detection onto the pure WI-3
|
|
5
|
+
* classifier. It reports exactly one shared product state — current,
|
|
6
|
+
* compatible-old, migration-required, or unsupported — together with the
|
|
7
|
+
* on-disk layout and aggregate versions and, when the store cannot be used, the
|
|
8
|
+
* incompatible component (layout vs aggregate).
|
|
9
|
+
*
|
|
10
|
+
* Corruption is only ever reported from a *real* structural failure: a
|
|
11
|
+
* `state.json` that is not parseable / not shaped like the record locators
|
|
12
|
+
* describe / carries a record with an invalid `schemaVersion`, a broken reference
|
|
13
|
+
* graph (detected by the strict loader once every axis is already current), or a
|
|
14
|
+
* `schema.json` manifest that is not valid. It is never inferred from version
|
|
15
|
+
* magnitude. An older or newer version — on ANY axis, including a single older
|
|
16
|
+
* record family — is a version verdict (`COMPATIBLE` for an all-compatible path,
|
|
17
|
+
* `MIGRATABLE` for an offline path, otherwise `NEEDS_NEW_VERSION`), never
|
|
18
|
+
* `CORRUPTED`. An older Home without a complete declared path fails closed with
|
|
19
|
+
* a precise missing declaration/step reason.
|
|
20
|
+
*
|
|
21
|
+
* The three axes are independent: record versions come from the durable
|
|
22
|
+
* manifest and raw `state.json` is traversed structurally only to verify that
|
|
23
|
+
* non-empty families agree. This keeps a record-only-older Home on its version
|
|
24
|
+
* axis without letting an empty target family masquerade as current.
|
|
25
|
+
*/
|
|
26
|
+
import { classifyStorage } from "../migration/index.js";
|
|
27
|
+
import { inspectStorageSchema } from "../storageSchema.js";
|
|
28
|
+
import { FileTaskStore, StorageRecordError } from "../taskStore.js";
|
|
29
|
+
import { inspectSourceVersionState } from "./homeMigrationTarget.js";
|
|
30
|
+
/**
|
|
31
|
+
* Classify a real Home. Reads `schema.json` (and, for a current Home,
|
|
32
|
+
* `state.json` through the strict loader) read-only; never mutates the Home.
|
|
33
|
+
*/
|
|
34
|
+
export function classifyHome(options) {
|
|
35
|
+
const { home, registry, latest } = options;
|
|
36
|
+
const schema = inspectStorageSchema(home);
|
|
37
|
+
const base = {
|
|
38
|
+
latestLayoutVersion: latest.layout,
|
|
39
|
+
latestAggregateVersion: latest.aggregate
|
|
40
|
+
};
|
|
41
|
+
if (schema.status === "uninitialized") {
|
|
42
|
+
return {
|
|
43
|
+
...base,
|
|
44
|
+
classification: { verdict: "USABLE", status: "current" },
|
|
45
|
+
uninitialized: true
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (schema.status === "invalid") {
|
|
49
|
+
// A malformed manifest is real structural damage, not a version verdict.
|
|
50
|
+
return {
|
|
51
|
+
...base,
|
|
52
|
+
classification: {
|
|
53
|
+
verdict: "CORRUPTED",
|
|
54
|
+
status: "unsupported",
|
|
55
|
+
detail: `Storage schema manifest is invalid: ${schema.detail}`
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Read all three durable axes read-only, then structurally cross-check raw
|
|
60
|
+
// state.json without invoking the strict current loader. Version differences
|
|
61
|
+
// remain version facts; manifest/state contradictions surface as corruption.
|
|
62
|
+
const inspected = inspectSourceVersionState(home, latest);
|
|
63
|
+
if ("corruption" in inspected) {
|
|
64
|
+
return {
|
|
65
|
+
...base,
|
|
66
|
+
classification: {
|
|
67
|
+
verdict: "CORRUPTED",
|
|
68
|
+
status: "unsupported",
|
|
69
|
+
detail: inspected.corruption.detail
|
|
70
|
+
},
|
|
71
|
+
layoutVersion: schema.currentLayoutVersion,
|
|
72
|
+
aggregateVersion: schema.currentAggregateSchemaVersion,
|
|
73
|
+
...(incompatibleComponentOf(schema) === undefined
|
|
74
|
+
? {}
|
|
75
|
+
: { incompatibleComponent: incompatibleComponentOf(schema) })
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const source = inspected.source;
|
|
79
|
+
// The reference graph can only be validated by the strict loader, which only
|
|
80
|
+
// understands the current versions. So run it exactly when every axis is
|
|
81
|
+
// already current (the plan would be a no-op); a throw there is genuine
|
|
82
|
+
// structural/reference corruption, never a version mismatch. An older/newer
|
|
83
|
+
// axis skips the loader and is decided purely by the planner below.
|
|
84
|
+
//
|
|
85
|
+
// Crucially, the strict loader is ONLY invoked when the manifest itself is
|
|
86
|
+
// `current`. An `unsupported` manifest (e.g. a pre-baseline Home with no
|
|
87
|
+
// recordVersions field) must never reach FileTaskStore: requireStorageSchema
|
|
88
|
+
// would throw StorageSchemaError, which doctor/upgrade must surface as a
|
|
89
|
+
// structured NEEDS_NEW_VERSION verdict, not as an invalid/corruption error.
|
|
90
|
+
const corruption = (schema.status === "current" && isFullyCurrent(source, latest))
|
|
91
|
+
? detectCurrentHomeCorruption(home)
|
|
92
|
+
: undefined;
|
|
93
|
+
const classification = classifyStorage(registry, source, latest, corruption);
|
|
94
|
+
return {
|
|
95
|
+
...base,
|
|
96
|
+
classification,
|
|
97
|
+
layoutVersion: schema.currentLayoutVersion,
|
|
98
|
+
aggregateVersion: schema.currentAggregateSchemaVersion,
|
|
99
|
+
...(incompatibleComponentOf(schema) === undefined
|
|
100
|
+
? {}
|
|
101
|
+
: { incompatibleComponent: incompatibleComponentOf(schema) })
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Load a Home whose every axis is already current through the strict
|
|
106
|
+
* `FileTaskStore` gate to detect real structural/reference corruption. This is
|
|
107
|
+
* only ever called when the source equals `latest` across all three axes, so a
|
|
108
|
+
* version error cannot occur here and any throw is genuine corruption (bad
|
|
109
|
+
* record shape, a broken reference graph).
|
|
110
|
+
*/
|
|
111
|
+
function detectCurrentHomeCorruption(home) {
|
|
112
|
+
try {
|
|
113
|
+
const store = new FileTaskStore(home);
|
|
114
|
+
store.getConfig();
|
|
115
|
+
store.listTasks();
|
|
116
|
+
store.listProjects();
|
|
117
|
+
store.listConfiguredAgents();
|
|
118
|
+
store.listWorkMailboxes();
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (error instanceof StorageRecordError) {
|
|
123
|
+
return { corrupted: true, detail: error.message };
|
|
124
|
+
}
|
|
125
|
+
// A non-record error (e.g. an unexpected I/O fault) is surfaced, not
|
|
126
|
+
// silently swallowed as "usable".
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** True when the source is already at `latest` on every axis (a no-op plan). */
|
|
131
|
+
function isFullyCurrent(source, latest) {
|
|
132
|
+
if (source.layout !== latest.layout || source.aggregate !== latest.aggregate) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// Every family shared by source and target must already match; a family
|
|
136
|
+
// present on only one side is a difference the planner reasons about, not a
|
|
137
|
+
// "current" match, so it is not fully current.
|
|
138
|
+
const kinds = new Set([
|
|
139
|
+
...Object.keys(source.record),
|
|
140
|
+
...Object.keys(latest.record)
|
|
141
|
+
]);
|
|
142
|
+
for (const kind of kinds) {
|
|
143
|
+
const from = source.record[kind]?.version;
|
|
144
|
+
const to = latest.record[kind]?.version;
|
|
145
|
+
if (from !== to)
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
function incompatibleComponentOf(schema) {
|
|
151
|
+
return schema.status === "unsupported" ? schema.incompatibleComponent : undefined;
|
|
152
|
+
}
|
|
153
|
+
/** A structural corruption check over an already-read snapshot (for tests/reports). */
|
|
154
|
+
export function snapshotHasState(snapshot) {
|
|
155
|
+
return snapshot.state !== null;
|
|
156
|
+
}
|