@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.
Files changed (208) hide show
  1. package/ARCHITECTURE.md +603 -133
  2. package/README.md +806 -31
  3. package/dist/agent/agent.js +2 -1
  4. package/dist/agent/argumentPolicy.js +3 -1
  5. package/dist/agent/launchEnvironment.js +106 -0
  6. package/dist/agent/managedRuntimeEnvironment.js +34 -0
  7. package/dist/brief/taskBrief.js +11 -1
  8. package/dist/cli/agentConfigurationPicker.js +287 -0
  9. package/dist/cli/commandCatalog.js +488 -60
  10. package/dist/cli/completion.js +146 -22
  11. package/dist/cli/helpRenderer.js +3 -1
  12. package/dist/cli/interactionCandidates.js +53 -15
  13. package/dist/cli/interactionPolicy.js +267 -30
  14. package/dist/cli/interactiveSelection.js +6 -2
  15. package/dist/cli/invocationRouter.js +5 -1
  16. package/dist/cli/operatorWizard.js +87 -0
  17. package/dist/cli/roleOptionCatalog.js +1 -0
  18. package/dist/cli/roleWizard.js +185 -21
  19. package/dist/cli/updateCommand.js +62 -19
  20. package/dist/cli/updateOrchestrator.js +539 -0
  21. package/dist/cli/updatePorts.js +1119 -0
  22. package/dist/cli/upgradeCommand.js +112 -0
  23. package/dist/cli.js +1420 -86
  24. package/dist/commands/agentCommands.js +146 -3
  25. package/dist/commands/configCommands.js +126 -0
  26. package/dist/commands/controllerCommands.js +365 -0
  27. package/dist/commands/globalRoleCommands.js +168 -126
  28. package/dist/commands/jobCommands.js +18 -8
  29. package/dist/commands/operatorCommands.js +159 -9
  30. package/dist/commands/profileCommands.js +203 -0
  31. package/dist/commands/projectCommands.js +650 -0
  32. package/dist/commands/roleConfiguration.js +85 -24
  33. package/dist/commands/roleRuntimeGuard.js +12 -0
  34. package/dist/commands/roleSkillValidation.js +47 -0
  35. package/dist/commands/taskActor.js +127 -0
  36. package/dist/commands/taskCommands.js +4201 -313
  37. package/dist/commands/taskCompletionGate.js +131 -0
  38. package/dist/commands/taskContextCommand.js +244 -30
  39. package/dist/commands/taskInputCommands.js +177 -59
  40. package/dist/commands/taskIntegrationCommands.js +303 -0
  41. package/dist/commands/taskOverviewCommand.js +363 -0
  42. package/dist/commands/taskRoleRuntimeStatus.js +125 -19
  43. package/dist/commands/textInput.js +15 -0
  44. package/dist/completion/completionInstaller.js +26 -22
  45. package/dist/config/yuiConfig.js +4 -3
  46. package/dist/context/dispatchContext.js +90 -38
  47. package/dist/context/roleSessionContext.js +119 -0
  48. package/dist/controller/claudeLifecycleHook.js +203 -0
  49. package/dist/controller/clientRuntime.js +408 -56
  50. package/dist/controller/codexLifecycleHook.js +108 -0
  51. package/dist/controller/controller.js +1089 -32
  52. package/dist/controller/domainIdentity.js +505 -0
  53. package/dist/controller/ephemeralResourceReaper.js +131 -0
  54. package/dist/controller/fileSchedulerStoreAdapter.js +2153 -103
  55. package/dist/controller/providerHookRunFence.js +127 -0
  56. package/dist/controller/resourceCleanupLinux.js +286 -0
  57. package/dist/controller/resourceInventory.js +531 -0
  58. package/dist/controller/resourceInventoryLinux.js +610 -0
  59. package/dist/controller/runtime.js +629 -10
  60. package/dist/controller/runtimeEventInbox.js +564 -0
  61. package/dist/controller/runtimeEventProcessor.js +248 -0
  62. package/dist/controller/runtimeLaunchCoordinator.js +477 -0
  63. package/dist/controller/sessionNotify.js +121 -78
  64. package/dist/coordination/deadlineScheduler.js +15 -0
  65. package/dist/coordination/mailboxScheduler.js +108 -0
  66. package/dist/coordination/workMailbox.js +329 -0
  67. package/dist/coordination/workMailboxQueue.js +86 -0
  68. package/dist/core/controllerClient.js +19 -5
  69. package/dist/core/controllerEndpoint.js +37 -0
  70. package/dist/core/controllerServer.js +218 -10
  71. package/dist/core/protocol.js +6 -2
  72. package/dist/decision/decision.js +2 -1
  73. package/dist/doctor/doctor.js +681 -32
  74. package/dist/domain/validation.js +53 -0
  75. package/dist/errors/cliError.js +5 -3
  76. package/dist/event/taskEvent.js +7 -3
  77. package/dist/execution/codexThreadNaming.js +160 -0
  78. package/dist/execution/executionGroup.js +579 -0
  79. package/dist/executor/agentAdapter.js +255 -40
  80. package/dist/executor/agentConfigurationCatalog.js +326 -0
  81. package/dist/executor/agentConfigurationProbe.js +506 -0
  82. package/dist/executor/agentExecutor.js +625 -10
  83. package/dist/executor/codexConfigConflict.js +290 -0
  84. package/dist/executor/effectiveLaunch.js +340 -0
  85. package/dist/executor/executorRegistry.js +238 -36
  86. package/dist/executor/fileRoleLaunchPlanner.js +550 -40
  87. package/dist/executor/turnCompletion.js +126 -0
  88. package/dist/input/inputRequest.js +30 -9
  89. package/dist/integration/changeSet.js +36 -0
  90. package/dist/integration/checkResult.js +24 -0
  91. package/dist/integration/gitIntegrationService.js +695 -0
  92. package/dist/integration/integrationAttempt.js +142 -0
  93. package/dist/interaction/operatorPresentation.js +96 -0
  94. package/dist/lifecycle/canonicalLifecycleEvent.js +342 -0
  95. package/dist/lifecycle/exactRunTerminalization.js +572 -0
  96. package/dist/lifecycle/providerLifecycleMapping.js +190 -0
  97. package/dist/lifecycle/taskRoleSessionReset.js +124 -0
  98. package/dist/message/message.js +23 -7
  99. package/dist/milestone/milestone.js +2 -1
  100. package/dist/operator/operatorSessionHistory.js +124 -0
  101. package/dist/output/agentConfigurationPresentation.js +43 -0
  102. package/dist/output/rolePresentation.js +34 -10
  103. package/dist/output/terminal.js +8 -0
  104. package/dist/output/timePresentation.js +55 -0
  105. package/dist/profile/agentProfile.js +128 -0
  106. package/dist/repository/gitWorkspace.js +578 -24
  107. package/dist/repository/project.js +213 -0
  108. package/dist/repository/taskWorkspaceCoordinator.js +392 -0
  109. package/dist/repository/taskWorkspacePreparer.js +1688 -191
  110. package/dist/review/reviewConfig.js +11 -0
  111. package/dist/review/reviewRound.js +399 -0
  112. package/dist/review/taskFinalReviewContract.js +90 -0
  113. package/dist/role/role.js +124 -23
  114. package/dist/run/agentRun.js +155 -12
  115. package/dist/run/runIdentity.js +82 -0
  116. package/dist/runtime/exactControlPlane.js +472 -0
  117. package/dist/runtime/index.js +8 -0
  118. package/dist/runtime/lifecycleReservation.js +38 -0
  119. package/dist/runtime/ports.js +11 -0
  120. package/dist/runtime/preallocatedNativeSession.js +13 -0
  121. package/dist/runtime/promptEnvelope.js +30 -0
  122. package/dist/runtime/runtimeBinding.js +31 -0
  123. package/dist/runtime/runtimeOwner.js +14 -0
  124. package/dist/runtime/sessionLaunchRequest.js +62 -0
  125. package/dist/runtime/sessionTitle.js +54 -0
  126. package/dist/runtime/taskRuntimeIsolation.js +643 -0
  127. package/dist/runtime/tmuxAdapters.js +315 -0
  128. package/dist/runtime/turnCompletion.js +3 -0
  129. package/dist/runtime/validation.js +23 -0
  130. package/dist/scheduler/activeRoleRunDelivery.js +342 -32
  131. package/dist/scheduler/activeTaskProgress.js +63 -0
  132. package/dist/scheduler/leaderFailure.js +2 -1
  133. package/dist/scheduler/leaderWakeupProcessor.js +307 -66
  134. package/dist/scheduler/operatorInputNotificationProcessor.js +109 -46
  135. package/dist/scheduler/operatorNotification.js +44 -2
  136. package/dist/scheduler/ports.js +28 -1
  137. package/dist/scheduler/roleRunLiveness.js +131 -25
  138. package/dist/scheduler/roleRunStall.js +951 -0
  139. package/dist/scheduler/taskExecutionProjection.js +544 -0
  140. package/dist/scheduler/wakeupQueue.js +3 -0
  141. package/dist/setup/setupCommand.js +302 -52
  142. package/dist/storage/compatibleTaskStore.js +102 -0
  143. package/dist/storage/migration/baseline.js +78 -0
  144. package/dist/storage/migration/classifier.js +51 -0
  145. package/dist/storage/migration/compatibleCodec.js +53 -0
  146. package/dist/storage/migration/engine.js +147 -0
  147. package/dist/storage/migration/index.js +33 -0
  148. package/dist/storage/migration/planner.js +154 -0
  149. package/dist/storage/migration/productionRegistry.js +486 -0
  150. package/dist/storage/migration/registry.js +169 -0
  151. package/dist/storage/migration/report.js +54 -0
  152. package/dist/storage/migration/types.js +31 -0
  153. package/dist/storage/storageSchema.js +147 -123
  154. package/dist/storage/storageVersions.js +11 -0
  155. package/dist/storage/taskStore.js +1793 -197
  156. package/dist/storage/upgrade/homeClassification.js +156 -0
  157. package/dist/storage/upgrade/homeMigrationTarget.js +595 -0
  158. package/dist/storage/upgrade/offlineUpgradeInventory.js +315 -0
  159. package/dist/storage/upgrade/productionMigrationRegistry.js +6 -0
  160. package/dist/storage/upgrade/recordVersionScan.js +176 -0
  161. package/dist/storage/upgrade/recordVersions.js +159 -0
  162. package/dist/storage/upgrade/switchProgress.js +80 -0
  163. package/dist/storage/upgrade/upgradeOrchestrator.js +948 -0
  164. package/dist/storage/upgrade/upgradeReceipt.js +161 -0
  165. package/dist/storage/upgradeCoordination.js +186 -0
  166. package/dist/storage/upgradeFence.js +366 -0
  167. package/dist/task/task.js +132 -26
  168. package/dist/task/taskRecordReference.js +66 -0
  169. package/dist/tmux/commandExecutor.js +75 -2
  170. package/dist/tmux/tmuxManager.js +747 -49
  171. package/dist/version.js +23 -0
  172. package/dist/web/assets/assetManifest.js +62 -0
  173. package/dist/web/assets/client/app.js +631 -0
  174. package/dist/web/assets/client/components.js +605 -0
  175. package/dist/web/assets/client/dom.js +14 -0
  176. package/dist/web/assets/client/format.js +28 -0
  177. package/dist/web/assets/client/i18n.js +494 -0
  178. package/dist/web/assets/client/markdown.js +114 -0
  179. package/dist/web/assets/client/theme.js +32 -0
  180. package/dist/web/assets/client/view.js +458 -0
  181. package/dist/web/assets/fontData.js +12 -0
  182. package/dist/web/assets/fonts.js +12 -0
  183. package/dist/web/assets/shell.js +114 -0
  184. package/dist/web/assets/styles/cards.js +135 -0
  185. package/dist/web/assets/styles/layout.js +47 -0
  186. package/dist/web/assets/styles/markdown.js +29 -0
  187. package/dist/web/assets/styles/responsive.js +39 -0
  188. package/dist/web/assets/styles/tokens.js +101 -0
  189. package/dist/web/assets/styles/widgets.js +147 -0
  190. package/dist/web/tmuxWebTerminal.js +158 -0
  191. package/dist/web/webServer.js +463 -0
  192. package/dist/web/webSnapshot.js +148 -0
  193. package/dist/workItem/workItem.js +642 -23
  194. package/dist/workspace/gitChangeSetCapture.js +86 -0
  195. package/dist/workspace/workItemChangeSetManager.js +445 -0
  196. package/dist/worktree/managedWorkspace.js +202 -0
  197. package/docs/task-local-identity.md +62 -0
  198. package/i18n/README.zh-CN.md +406 -31
  199. package/package.json +10 -2
  200. package/skills/yui-leader/SKILL.md +601 -39
  201. package/skills/yui-operator/SKILL.md +255 -34
  202. package/skills/yui-reviewer/SKILL.md +57 -0
  203. package/skills/yui-worker/SKILL.md +214 -17
  204. package/dist/commands/repositoryCommands.js +0 -86
  205. package/dist/operator/operatorContext.js +0 -66
  206. package/dist/repository/repository.js +0 -55
  207. package/dist/scheduler/archivedTaskRuntime.js +0 -12
  208. 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
+ }