@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
@@ -47,6 +47,11 @@ const agentChildren = [
47
47
  },
48
48
  { name: "list", summary: "List configured Agents." },
49
49
  { name: "show", summary: "Show one configured Agent.", usage: "yui agent show <id>" },
50
+ {
51
+ name: "capabilities",
52
+ summary: "Probe one Agent CLI for runtime configuration options.",
53
+ usage: "yui agent capabilities <id>"
54
+ },
50
55
  {
51
56
  name: "update",
52
57
  summary: "Update a configured Agent.",
@@ -62,19 +67,28 @@ const roleProfileOptions = [
62
67
  "--expected-output", "--system-prompt", "--skill"
63
68
  ];
64
69
  const roleAgentOptions = [
65
- "--model", "--effort", "--sandbox", "--approval", "--permission-mode", "--search"
70
+ "--model", "--effort", "--permission-strategy", "--sandbox", "--approval", "--permission-mode",
71
+ "--allowed-tool", "--disallowed-tool", "--search"
66
72
  ];
67
73
  const roleProfileClearOptions = [
68
74
  "--clear-description", "--clear-responsibilities", "--clear-constraints",
69
75
  "--clear-expected-output", "--clear-system-prompt", "--clear-skills"
70
76
  ];
71
77
  const roleAgentClearOptions = [
72
- "--clear-model", "--clear-effort", "--clear-sandbox", "--clear-approval",
73
- "--clear-permission-mode", "--clear-search", "--clear-agent-config"
78
+ "--clear-model", "--clear-effort", "--clear-allowed-tools", "--clear-disallowed-tools",
79
+ "--clear-search", "--clear-agent-config"
80
+ ];
81
+ const agentProfileOptions = [
82
+ "--description", "--instructions", "--skill", "--model", "--effort"
83
+ ];
84
+ const agentProfileClearOptions = [
85
+ "--clear-description", "--clear-instructions", "--clear-skills",
86
+ "--clear-model", "--clear-effort"
74
87
  ];
75
88
  const roleAgentOptionValues = {
76
89
  "--sandbox": ["read-only", "workspace-write", "danger-full-access"],
77
90
  "--approval": ["untrusted", "on-request", "never"],
91
+ "--permission-strategy": ["default", "bypass", "configured"],
78
92
  "--search": ["true"]
79
93
  };
80
94
  const roleChildren = [
@@ -99,6 +113,7 @@ const roleChildren = [
99
113
  },
100
114
  { name: "remove", summary: "Remove a global Role.", usage: "yui role remove <name>" },
101
115
  { name: "bind", summary: "Bind and activate an Agent for a global Role.", usage: "yui role bind <role> <agent-id>" },
116
+ { name: "unbind", summary: "Unbind a dormant Agent from a global Role.", usage: "yui role unbind <role> <agent-id>" },
102
117
  { name: "enter", summary: "Enter a global Role's native session.", usage: "yui role enter <role>" },
103
118
  {
104
119
  name: "session",
@@ -120,20 +135,59 @@ const roleChildren = [
120
135
  ]
121
136
  }
122
137
  ];
138
+ const profileChildren = [
139
+ {
140
+ name: "add",
141
+ summary: "Add a reusable Agent Profile.",
142
+ usage: "yui profile add <id> [--access <read|write>] [Profile settings]",
143
+ options: ["--access", ...agentProfileOptions],
144
+ optionValues: { "--access": ["read", "write"] }
145
+ },
146
+ { name: "list", summary: "List Agent Profiles." },
147
+ { name: "show", summary: "Show one Agent Profile.", usage: "yui profile show <id>" },
148
+ {
149
+ name: "update",
150
+ summary: "Update an Agent Profile.",
151
+ usage: "yui profile update <id> [--access <read|write>] [Profile settings]",
152
+ options: ["--access", ...agentProfileOptions, ...agentProfileClearOptions],
153
+ optionValues: { "--access": ["read", "write"] }
154
+ },
155
+ { name: "remove", summary: "Remove a custom Agent Profile.", usage: "yui profile remove <id>" },
156
+ { name: "reset", summary: "Reset all built-in Agent Profiles." }
157
+ ];
123
158
  const taskChildren = [
124
159
  {
125
160
  name: "create",
126
161
  summary: "Create a Draft Task.",
127
- usage: "yui task create <title> [--repository <id>] [--base <ref>]",
128
- options: ["--repository", "--base"]
162
+ usage: "yui task create <title> [--project <project> ...] [--base <project>=<ref> ...] [--require-integration]",
163
+ options: ["--project", "--base", "--require-integration"]
164
+ },
165
+ {
166
+ name: "project",
167
+ summary: "Manage Projects bound to a Task.",
168
+ sections: [{ id: "manage", title: "Commands", entries: ["list", "add"] }],
169
+ children: [
170
+ {
171
+ name: "list",
172
+ summary: "List the Projects bound to a Task.",
173
+ usage: "yui task project list <task>"
174
+ },
175
+ {
176
+ name: "add",
177
+ summary: "Add a Project to a Task.",
178
+ usage: "yui task project add <task> <project> [--base <ref>] [--directory <name>]",
179
+ options: ["--base", "--directory"]
180
+ }
181
+ ]
129
182
  },
130
183
  {
131
184
  name: "update",
132
185
  summary: "Update Task metadata.",
133
- usage: "yui task update <id> [--title <text>] [--description <text>|--clear-description] [--priority <low|medium|high|urgent>|--clear-priority] [--tags <comma-separated>|--clear-tags] [--due-at <RFC3339>|--clear-due-at]",
186
+ usage: "yui task update <id> [--title <text>] [--description <text>|--clear-description] [--priority <low|medium|high|urgent>|--clear-priority] [--tags <comma-separated>|--clear-tags] [--due-at <RFC3339>|--clear-due-at] [--require-integration]",
134
187
  options: [
135
188
  "--title", "--description", "--priority", "--tags", "--due-at",
136
- "--clear-description", "--clear-priority", "--clear-tags", "--clear-due-at"
189
+ "--clear-description", "--clear-priority", "--clear-tags", "--clear-due-at",
190
+ "--require-integration"
137
191
  ],
138
192
  optionValues: { "--priority": ["low", "medium", "high", "urgent"] }
139
193
  },
@@ -141,25 +195,49 @@ const taskChildren = [
141
195
  {
142
196
  name: "complete",
143
197
  summary: "Complete an active Task and stop automatic wakeups.",
144
- usage: "yui task complete <id> --summary <text>",
145
- options: ["--summary"]
198
+ usage: "yui task complete <id> (--summary <text>|--summary-file <path|->)",
199
+ options: ["--summary", "--summary-file"],
200
+ fileOptions: ["--summary-file"]
146
201
  },
147
202
  { name: "reopen", summary: "Reopen a completed Task.", usage: "yui task reopen <id>" },
148
- { name: "list", summary: "List Tasks." },
203
+ {
204
+ name: "retire",
205
+ summary: "Retire a stale Task while preserving its historical evidence.",
206
+ usage: "yui task retire <task> (--summary <text>|--summary-file <path|->) [--replacement <task>]",
207
+ options: ["--summary", "--summary-file", "--replacement"],
208
+ fileOptions: ["--summary-file"]
209
+ },
210
+ {
211
+ name: "list",
212
+ summary: "List unarchived Task overviews.",
213
+ usage: "yui task list [--all] [--verbose]",
214
+ options: ["--all", "--verbose"]
215
+ },
149
216
  { name: "show", summary: "Show a Task.", usage: "yui task show <id>" },
150
217
  {
151
218
  name: "context",
152
219
  summary: "Show consolidated working context for a Task.",
153
220
  usage: "yui task context <task>"
154
221
  },
155
- { name: "archive", summary: "Archive a Task.", usage: "yui task archive <id>" },
222
+ {
223
+ name: "archive",
224
+ summary: "Archive a Task after confirming the main worktree outcome.",
225
+ usage: "yui task archive <id> (--integrated|--abandon)",
226
+ options: ["--integrated", "--abandon"]
227
+ },
156
228
  { name: "reconcile", summary: "Run one immediate Controller reconciliation.", usage: "yui task reconcile <id>" },
157
229
  {
158
230
  name: "message",
159
231
  summary: "Manage durable Task messages.",
160
232
  sections: [{ id: "manage", title: "Commands", entries: ["send", "list"] }],
161
233
  children: [
162
- { name: "send", summary: "Send a Task message.", usage: "yui task message send <id> <body>" },
234
+ {
235
+ name: "send",
236
+ summary: "Send a Task message.",
237
+ usage: "yui task message send <id> (<body>|--body-file <path|->)",
238
+ options: ["--body-file"],
239
+ fileOptions: ["--body-file"]
240
+ },
163
241
  { name: "list", summary: "List Task messages.", usage: "yui task message list <id>" }
164
242
  ]
165
243
  },
@@ -183,13 +261,13 @@ const taskChildren = [
183
261
  {
184
262
  name: "show",
185
263
  summary: "Show one input request.",
186
- usage: "yui task input show <input> [--task <task>]",
264
+ usage: "yui task input show (<task>/<input> | <input> --task <task>)",
187
265
  options: ["--task"]
188
266
  },
189
267
  {
190
268
  name: "answer",
191
269
  summary: "Answer one open input request.",
192
- usage: "yui task input answer <input> [--task <task>] (--choice <key> | --text <text>)",
270
+ usage: "yui task input answer (<task>/<input> | <input> --task <task>) (--choice <key> | --text <text>)",
193
271
  options: ["--task", "--choice", "--text"]
194
272
  },
195
273
  {
@@ -204,14 +282,14 @@ const taskChildren = [
204
282
  name: "role",
205
283
  summary: "Manage Roles within a Task.",
206
284
  sections: [{ id: "manage", title: "Commands", entries: [
207
- "add", "list", "status", "show", "update", "remove", "bind", "enter"
285
+ "add", "list", "status", "show", "update", "remove", "bind", "unbind", "reset", "enter"
208
286
  ] }],
209
287
  children: [
210
288
  {
211
289
  name: "add",
212
290
  summary: "Add a Role to a Task.",
213
- usage: "yui task role add <task> <name> [--agent <id>] [Role and Agent settings]",
214
- options: ["--agent", ...roleProfileOptions, ...roleAgentOptions],
291
+ usage: "yui task role add <task> <name> [--profile <id>] [--agent <id>] [Role and Agent settings]",
292
+ options: ["--profile", "--agent", ...roleProfileOptions, ...roleAgentOptions],
215
293
  optionValues: roleAgentOptionValues
216
294
  },
217
295
  { name: "list", summary: "List Task Roles.", usage: "yui task role list <task>" },
@@ -225,57 +303,243 @@ const taskChildren = [
225
303
  name: "update",
226
304
  summary: "Update a Task Role.",
227
305
  usage: "yui task role update <task> <role> [Role and Agent settings]",
228
- options: ["--agent", ...roleProfileOptions, ...roleAgentOptions,
306
+ options: ["--profile", "--agent", ...roleProfileOptions, ...roleAgentOptions,
229
307
  ...roleProfileClearOptions, ...roleAgentClearOptions],
230
308
  optionValues: roleAgentOptionValues
231
309
  },
232
310
  { name: "remove", summary: "Remove a Task Role.", usage: "yui task role remove <task> <role>" },
233
311
  { name: "bind", summary: "Bind and activate an Agent for a Task Role.", usage: "yui task role bind <task> <role> <agent-id>" },
312
+ { name: "unbind", summary: "Unbind a dormant Agent from a Task Role.", usage: "yui task role unbind <task> <role> <agent-id>" },
313
+ {
314
+ name: "reset",
315
+ summary: "Fail current work, forget the native Session, and request verified cleanup.",
316
+ usage: "yui task role reset <task> <role> --reason <text>",
317
+ options: ["--reason"]
318
+ },
234
319
  { name: "enter", summary: "Enter a Task Role's native session.", usage: "yui task role enter <task> <role>" }
235
320
  ]
236
321
  },
237
322
  {
238
323
  name: "work",
239
324
  summary: "Manage finite Task work items.",
240
- sections: [{ id: "manage", title: "Commands", entries: ["create", "list", "update", "dispatch"] }],
325
+ sections: [{
326
+ id: "manage",
327
+ title: "Commands",
328
+ entries: [
329
+ "create", "list", "show", "update", "scope", "dispatch", "isolate", "capture", "cleanup",
330
+ "review", "group", "accept", "reject", "retire"
331
+ ]
332
+ }],
241
333
  children: [
242
334
  {
243
335
  name: "create",
244
336
  summary: "Create a work item.",
245
- usage: "yui task work create <task> <title> [--role <name>]",
246
- options: ["--role"]
337
+ usage: "yui task work create <task> <title> [--project <project> ...] [--base-ref <project>=<ref> ...] [--objective <text>] [--accept <criterion> ...] [--after <work> ...] [--role <name>]",
338
+ options: ["--project", "--base-ref", "--objective", "--accept", "--after", "--role"]
247
339
  },
248
340
  { name: "list", summary: "List work items for a Task.", usage: "yui task work list <task>" },
341
+ { name: "show", summary: "Show one Work Item.", usage: "yui task work show <work>" },
249
342
  {
250
343
  name: "update",
251
344
  summary: "Update a work item's state.",
252
- usage: "yui task work update <id> <todo|running|done|failed> [--summary <text>]",
345
+ usage: "yui task work update <task>/<work> <todo|running|done|failed> [--summary <text>]",
253
346
  options: ["--summary"],
254
- argumentValues: { 1: ["todo", "running", "done", "failed"] }
347
+ argumentValues: {
348
+ 1: ["todo", "running", "done", "failed"]
349
+ }
350
+ },
351
+ {
352
+ name: "scope",
353
+ summary: "Expand the Projects a WorkItem may modify.",
354
+ usage: "yui task work scope <task>/<work> [--project <project> ...]",
355
+ options: ["--project"]
255
356
  },
256
357
  {
257
358
  name: "dispatch",
258
359
  summary: "Dispatch a work item to its Role.",
259
- usage: "yui task work dispatch <id> [--input <text>]",
260
- options: ["--input"]
360
+ usage: "yui task work dispatch <task>/<work> [--input <text>] [--strategy fixed:<count>|adaptive:<max>] [--lane-role <role> ...]",
361
+ options: ["--input", "--strategy", "--lane-role"]
362
+ },
363
+ {
364
+ name: "group",
365
+ summary: "Resolve a Worker ExecutionGroup after its Lanes finish.",
366
+ executable: true,
367
+ sections: [{ id: "manage", title: "Commands", entries: ["resolve"] }],
368
+ children: [{
369
+ name: "resolve",
370
+ summary: "Select Lane outputs and resolve the Worker group.",
371
+ usage: "yui task work group resolve <task>/<work> --decision <accept|reject|blocked> --summary <text> [--lane <lane-id> ...]",
372
+ options: ["--decision", "--summary", "--lane"],
373
+ optionValues: { "--decision": ["accept", "reject", "blocked"] }
374
+ }]
375
+ },
376
+ {
377
+ name: "isolate",
378
+ summary: "Create a WorkItem-owned isolated worktree.",
379
+ usage: "yui task work isolate <task>/<work>"
380
+ },
381
+ {
382
+ name: "capture",
383
+ summary: "Capture a terminal isolated WorkItem result as a ChangeSet.",
384
+ usage: "yui task work capture <task>/<work>"
385
+ },
386
+ {
387
+ name: "cleanup",
388
+ summary: "Release an idle WorkItem runtime or remove its final clean worktree.",
389
+ usage: "yui task work cleanup <task>/<work> (--runtime-only|--integrated|--abandon)",
390
+ options: ["--runtime-only", "--integrated", "--abandon"]
391
+ },
392
+ {
393
+ name: "review",
394
+ summary: "Ask the configured reviewer to inspect a WorkItem candidate.",
395
+ usage: "yui task work review <task>/<work>",
396
+ executable: true,
397
+ sections: [
398
+ { id: "retry", title: "Task-final recovery", entries: ["retry"] },
399
+ { id: "workspace", title: "Review workspace", entries: ["cleanup", "preserve"] }
400
+ ],
401
+ children: [
402
+ {
403
+ name: "retry",
404
+ summary: "Retry a failed Task-final ReviewRound that has no Reviewer Run.",
405
+ usage: "yui task work review retry <task>/<review-round>"
406
+ },
407
+ {
408
+ name: "cleanup",
409
+ summary: "Remove only a clean terminal ReviewRound worktree.",
410
+ usage: "yui task work review cleanup <task>/<review-round>"
411
+ },
412
+ {
413
+ name: "preserve",
414
+ summary: "Record that a terminal ReviewRound worktree is retained for diagnosis.",
415
+ usage: "yui task work review preserve <task>/<review-round>"
416
+ }
417
+ ]
418
+ },
419
+ {
420
+ name: "accept",
421
+ summary: "Accept a successful, validated, integrated Work Item.",
422
+ usage: "yui task work accept <task>/<work> --summary <text>",
423
+ options: ["--summary"]
424
+ },
425
+ {
426
+ name: "reject",
427
+ summary: "Reject an awaiting Work Item so it can be retried.",
428
+ usage: "yui task work reject <task>/<work> --summary <text>",
429
+ options: ["--summary"]
430
+ },
431
+ {
432
+ name: "retire",
433
+ summary: "Retire a WorkItem and settle its exact Runs.",
434
+ usage: "yui task work retire <work> --summary <text> [--replacement <work>]",
435
+ options: ["--summary", "--replacement"]
261
436
  }
262
437
  ]
263
438
  },
264
439
  {
265
440
  name: "run",
266
- summary: "Inspect and control Agent Runs.",
267
- sections: [{ id: "manage", title: "Commands", entries: ["list", "retry", "yield"] }],
441
+ summary: "Inspect and control Task Role Agent Runs.",
442
+ sections: [{ id: "manage", title: "Commands", entries: ["list", "retry", "settle", "recover", "yield", "checkpoint"] }],
268
443
  children: [
269
- { name: "list", summary: "List Runs for a work item.", usage: "yui task run list <work>" },
270
- { name: "retry", summary: "Retry a failed Run.", usage: "yui task run retry <run>" },
444
+ { name: "list", summary: "List Runs for a work item.", usage: "yui task run list <task>/<work>" },
445
+ {
446
+ name: "retry",
447
+ summary: "Retry a failed execution Run or request a fresh Round for an exact failed final Review Run.",
448
+ usage: "yui task run retry <task>/<run>"
449
+ },
450
+ {
451
+ name: "settle",
452
+ summary: "Close an obsolete stranded final Review Run without requesting a retry Round.",
453
+ usage: "yui task run settle <task>/<run>"
454
+ },
455
+ {
456
+ name: "recover",
457
+ summary: "Record one exact Leader-controlled Run recovery decision.",
458
+ usage: "yui task run recover <task>/<run> --action <diagnose|retry|replace-session|terminate> --expected-progress-at <timestamp> --provider-acceptance <accepted|rejected|ambiguous> --reason <text>",
459
+ options: ["--action", "--expected-progress-at", "--provider-acceptance", "--reason", "--role", "--agent-id", "--adapter-id", "--native-session-id", "--launch-id"]
460
+ },
271
461
  {
272
462
  name: "yield",
273
463
  summary: "Complete an active Run and wake the Leader.",
274
- usage: "yui task run yield <run> --summary <text>",
275
- options: ["--summary"]
464
+ usage: "yui task run yield <task>/<run> (--summary <text>|--summary-file <path|->)",
465
+ options: ["--summary", "--summary-file"],
466
+ fileOptions: ["--summary-file"]
467
+ },
468
+ {
469
+ name: "checkpoint",
470
+ summary: "Record durable progress for a long-running Agent Run.",
471
+ usage: "yui task run checkpoint <run> (--note <text>|--note-file <path|->)",
472
+ options: ["--note", "--note-file"],
473
+ fileOptions: ["--note-file"],
474
+ hidden: true
276
475
  }
277
476
  ]
278
477
  },
478
+ {
479
+ name: "review",
480
+ summary: "Control Task-final ReviewRounds.",
481
+ sections: [{ id: "manage", title: "Commands", entries: ["request", "group", "retry"] }],
482
+ children: [
483
+ {
484
+ name: "request",
485
+ summary: "Request one Task-local final ReviewRound from a Global Role.",
486
+ usage: "yui task review request <task> --role <global-role> [--strategy fixed:<count>|adaptive:<max>] [--lane-role <role> ...]",
487
+ options: ["--role", "--strategy", "--lane-role"]
488
+ },
489
+ {
490
+ name: "group",
491
+ summary: "Resolve a Reviewer ExecutionGroup after its Lanes finish.",
492
+ executable: true,
493
+ sections: [{ id: "manage", title: "Commands", entries: ["resolve"] }],
494
+ children: [{
495
+ name: "resolve",
496
+ summary: "Select Reviewer Lane evidence and resolve the group.",
497
+ usage: "yui task review group resolve <task>/<review-round> --decision <accept|reject|blocked> --summary <text> [--lane <lane-id> ...]",
498
+ options: ["--decision", "--summary", "--lane"],
499
+ optionValues: { "--decision": ["accept", "reject", "blocked"] }
500
+ }]
501
+ },
502
+ {
503
+ name: "retry",
504
+ summary: "Retry a failed Task-final ReviewRound without a Reviewer Run.",
505
+ usage: "yui task review retry <task>/<review-round>"
506
+ }
507
+ ]
508
+ },
509
+ {
510
+ name: "integration",
511
+ summary: "Safely integrate ChangeSets with Leader-owned conflict decisions.",
512
+ sections: [{ id: "manage", title: "Commands", entries: ["start", "continue", "resolve", "abort", "list", "show", "cleanup"] }],
513
+ children: [
514
+ {
515
+ name: "start",
516
+ summary: "Build, validate, and CAS-commit an integration candidate.",
517
+ usage: "yui task integration start <task> [--project <project>] --change-set <id> [--change-set <id> ...] [--target <ref>] [--check <command> ...]",
518
+ options: ["--project", "--change-set", "--target", "--check"]
519
+ },
520
+ {
521
+ name: "continue",
522
+ summary: "Continue a Leader-approved manual resolution.",
523
+ usage: "yui task integration continue <task>/<integration>"
524
+ },
525
+ {
526
+ name: "resolve",
527
+ summary: "Record the Leader's semantic conflict decision.",
528
+ usage: "yui task integration resolve <task>/<integration> --option <manual-resolution|reject> --rationale <text>",
529
+ options: ["--option", "--rationale"],
530
+ optionValues: { "--option": ["manual-resolution", "reject"] }
531
+ },
532
+ {
533
+ name: "abort",
534
+ summary: "Abandon a running or blocked Integration Attempt.",
535
+ usage: "yui task integration abort <task>/<integration> --reason <text>",
536
+ options: ["--reason"]
537
+ },
538
+ { name: "list", summary: "List Integration Attempts.", usage: "yui task integration list <task>" },
539
+ { name: "show", summary: "Show one Integration Attempt.", usage: "yui task integration show <task>/<integration>" },
540
+ { name: "cleanup", summary: "Remove a terminal Integration worktree and branch.", usage: "yui task integration cleanup <task>/<integration>" }
541
+ ]
542
+ },
279
543
  {
280
544
  name: "brief",
281
545
  summary: "Manage the Task Brief, the authoritative summary of current task state.",
@@ -285,8 +549,8 @@ const taskChildren = [
285
549
  {
286
550
  name: "update",
287
551
  summary: "Create or update the Task Brief.",
288
- usage: "yui task brief update <task> [--objective <text>] [--boundary <text> ...] [--focus <text>] [--leader-summary <text>]",
289
- options: ["--objective", "--boundary", "--focus", "--leader-summary"]
552
+ usage: "yui task brief update <task> [--objective <text>] [--boundary <text> ...] [--approach <text>] [--focus <text>] [--leader-summary <text>]",
553
+ options: ["--objective", "--boundary", "--approach", "--focus", "--leader-summary"]
290
554
  }
291
555
  ]
292
556
  },
@@ -345,21 +609,35 @@ const taskChildren = [
345
609
  ];
346
610
  export const ROOT_COMMAND = buildNode({
347
611
  name: "yui",
348
- summary: "Coordinate native Agent CLI sessions through tmux.",
612
+ summary: "Coordinate durable, isolated Agent work.",
349
613
  usage: "yui [--json] <command>",
350
614
  sections: [
351
- { id: "general", title: "General", entries: ["help", "version", "update", "setup", "doctor", "completion"] },
352
- { id: "workflow", title: "Workflow", entries: ["operator", "repository", "task"] },
353
- { id: "configuration", title: "Configuration", entries: ["agent", "role"] },
354
- { id: "operations", title: "Operations", entries: ["controller", "jobs"] },
615
+ { id: "general", title: "General", entries: [
616
+ "help", "version", "update", "upgrade", "setup", "doctor", "completion"
617
+ ] },
618
+ { id: "workflow", title: "Workflow", entries: ["operator", "project", "task"] },
619
+ { id: "configuration", title: "Configuration", entries: ["config", "agent", "profile", "role"] },
620
+ { id: "operations", title: "Operations", entries: ["web", "controller", "jobs"] },
355
621
  { id: "internal", title: "Internal", entries: ["internal"] }
356
622
  ],
357
623
  children: [
358
624
  { name: "help", summary: "Show root or scoped command help.", usage: "yui help [command ...]", commandPathArguments: true },
359
625
  { name: "version", summary: "Print the installed Yui version." },
360
626
  { name: "update", summary: "Install the latest published Yui package globally." },
627
+ {
628
+ name: "upgrade",
629
+ summary: "Migrate this Home's storage to the current schema.",
630
+ usage: "yui upgrade [--dry-run]",
631
+ options: ["--dry-run"]
632
+ },
361
633
  { name: "setup", summary: "Initialize or update Yui configuration." },
362
634
  { name: "doctor", summary: "Check Yui dependencies and file state." },
635
+ {
636
+ name: "web",
637
+ summary: "Serve the local Task and Agent control room.",
638
+ usage: "yui web [--host <loopback>] [--port <port>]",
639
+ options: ["--host", "--port"]
640
+ },
363
641
  {
364
642
  name: "completion",
365
643
  summary: "Interactively configure shell completion.",
@@ -384,68 +662,206 @@ export const ROOT_COMMAND = buildNode({
384
662
  },
385
663
  {
386
664
  name: "controller",
387
- summary: "Inspect, stop, or restart the local Controller.",
388
- sections: [{ id: "lifecycle", title: "Commands", entries: ["status", "stop", "restart"] }],
665
+ summary: "Inspect and recover local Controller runtime resources.",
666
+ sections: [{
667
+ id: "lifecycle",
668
+ title: "Commands",
669
+ entries: ["status", "cleanup", "identity", "stop", "restart"]
670
+ }],
389
671
  children: [
390
- { name: "status", summary: "Show Controller status." },
672
+ {
673
+ name: "status",
674
+ summary: "Show Controller and Agent runtime resources.",
675
+ usage: "yui controller status [--all] [--verbose]",
676
+ options: ["--all", "--verbose"]
677
+ },
678
+ {
679
+ name: "cleanup",
680
+ summary: "Interactively clean confirmed unused runtime resources.",
681
+ usage: "yui controller cleanup [--all]",
682
+ options: ["--all"]
683
+ },
684
+ {
685
+ name: "identity",
686
+ summary: "Read the authenticated Controller launch identity.",
687
+ hidden: true
688
+ },
391
689
  { name: "stop", summary: "Stop the Controller." },
392
690
  { name: "restart", summary: "Restart internal services without stopping tmux sessions." }
393
691
  ]
394
692
  },
693
+ {
694
+ name: "config",
695
+ summary: "Inspect or update Yui configuration.",
696
+ sections: [{ id: "manage", title: "Commands", entries: ["show", "set", "review"] }],
697
+ children: [
698
+ { name: "show", summary: "Show effective Yui configuration." },
699
+ {
700
+ name: "set",
701
+ summary: "Update Yui configuration.",
702
+ usage: "yui config set <--time-zone <IANA timezone> | --reconciliation-interval-seconds <5-300>>",
703
+ options: ["--time-zone", "--reconciliation-interval-seconds"]
704
+ },
705
+ {
706
+ name: "review",
707
+ summary: "Configure WorkItem review.",
708
+ sections: [{ id: "manage", title: "Commands", entries: ["show", "set", "clear"] }],
709
+ children: [
710
+ { name: "show", summary: "Show the global review rule." },
711
+ {
712
+ name: "set",
713
+ summary: "Enable review with a Global Role.",
714
+ usage: "yui config review set --role <global-role> --trigger <always|leader|final>",
715
+ options: ["--role", "--trigger"],
716
+ optionValues: { "--trigger": ["always", "leader", "final"] }
717
+ },
718
+ { name: "clear", summary: "Disable global review." }
719
+ ]
720
+ }
721
+ ]
722
+ },
395
723
  {
396
724
  name: "operator",
397
- summary: "Use the persistent Operator Role.",
398
- sections: [{ id: "workflow", title: "Commands", entries: ["enter", "submit"] }],
725
+ summary: "Use the persistent Operator Actor.",
726
+ sections: [{
727
+ id: "workflow",
728
+ title: "Commands",
729
+ entries: ["enter", "new", "list", "resume", "submit"]
730
+ }],
399
731
  children: [
400
732
  { name: "enter", summary: "Enter the Operator's native session." },
733
+ {
734
+ name: "new",
735
+ summary: "Start a new Operator session.",
736
+ usage: "yui operator new [--agent <id>]",
737
+ options: ["--agent"]
738
+ },
739
+ { name: "list", summary: "List Operator session history." },
740
+ {
741
+ name: "resume",
742
+ summary: "Resume a previous Operator session.",
743
+ usage: "yui operator resume [<ref> | --last]",
744
+ options: ["--last"]
745
+ },
401
746
  {
402
747
  name: "submit",
403
748
  summary: "Submit work through the Operator.",
404
- usage: "yui operator submit <body> [--task <id>]",
405
- options: ["--task"]
749
+ usage: "yui operator submit (<body>|--body-file <path|->) [--task <id>]",
750
+ options: ["--task", "--body-file"],
751
+ fileOptions: ["--body-file"]
406
752
  }
407
753
  ]
408
754
  },
409
755
  {
410
- name: "repository",
411
- summary: "Manage Git repositories available to Tasks.",
412
- sections: [{ id: "manage", title: "Commands", entries: ["add", "list"] }],
756
+ name: "project",
757
+ summary: "Manage Projects, stable checkouts, branches, and Yui knowledge.",
758
+ sections: [{ id: "manage", title: "Commands", entries: ["add", "clone", "refresh", "update", "discover", "list", "show", "knowledge"] }],
413
759
  children: [
414
760
  {
415
761
  name: "add",
416
- summary: "Register a Git repository.",
417
- usage: "yui repository add <name> <path> [--base <ref>]",
418
- options: ["--base"],
762
+ summary: "Bind a Project to a stable Git checkout.",
763
+ usage: "yui project add <name> <path> [--alias <name> ...] [--remote <url>] [--stable <ref>] [--development <ref>]",
764
+ options: ["--alias", "--remote", "--stable", "--development"],
419
765
  fileArguments: [1]
420
766
  },
421
- { name: "list", summary: "List registered repositories." }
767
+ {
768
+ name: "clone",
769
+ summary: "Clone and bind a Project after user confirmation.",
770
+ usage: "yui project clone <name> <remote> [--alias <name> ...] [--stable <ref>] [--development <ref>]",
771
+ options: ["--alias", "--stable", "--development"]
772
+ },
773
+ {
774
+ name: "refresh",
775
+ summary: "Fast-forward a clean stable checkout from its configured remote.",
776
+ usage: "yui project refresh <project>"
777
+ },
778
+ {
779
+ name: "update",
780
+ summary: "Update a bound Project's aliases, remote, or branch refs.",
781
+ usage: "yui project update <project> [--alias <name> ...|--clear-aliases] [--remote <url>|--clear-remote] [--stable <ref>] [--development <ref>]",
782
+ options: [
783
+ "--alias", "--clear-aliases", "--remote", "--clear-remote",
784
+ "--stable", "--development"
785
+ ]
786
+ },
787
+ {
788
+ name: "discover",
789
+ summary: "Find Git projects directly under the configured workspace.",
790
+ usage: "yui project discover [name]"
791
+ },
792
+ { name: "list", summary: "List bound Projects." },
793
+ { name: "show", summary: "Show one Project.", usage: "yui project show <project>" },
794
+ {
795
+ name: "knowledge",
796
+ summary: "Manage durable Project knowledge stored by Yui.",
797
+ sections: [{ id: "manage", title: "Commands", entries: ["add", "update", "retire", "list", "show"] }],
798
+ children: [
799
+ {
800
+ name: "add",
801
+ summary: "Add Project knowledge.",
802
+ usage: "yui project knowledge add <project> <title> --body <text>",
803
+ options: ["--body"]
804
+ },
805
+ {
806
+ name: "update",
807
+ summary: "Update active Project knowledge.",
808
+ usage: "yui project knowledge update <project> <knowledge> [--title <text>] [--body <text>]",
809
+ options: ["--title", "--body"]
810
+ },
811
+ {
812
+ name: "retire",
813
+ summary: "Retire Project knowledge without deleting its record.",
814
+ usage: "yui project knowledge retire <project> <knowledge>"
815
+ },
816
+ {
817
+ name: "list",
818
+ summary: "List Project knowledge.",
819
+ usage: "yui project knowledge list <project> [--all]",
820
+ options: ["--all"]
821
+ },
822
+ {
823
+ name: "show",
824
+ summary: "Read one Project knowledge entry.",
825
+ usage: "yui project knowledge show <project> <knowledge>"
826
+ }
827
+ ]
828
+ }
422
829
  ]
423
830
  },
424
831
  {
425
832
  name: "agent",
426
833
  summary: "Manage configured native Agent CLIs.",
427
834
  sections: [
428
- { id: "inspect", title: "Inspect", entries: ["list", "show"] },
835
+ { id: "inspect", title: "Inspect", entries: ["list", "show", "capabilities"] },
429
836
  { id: "manage", title: "Manage", entries: ["add", "update", "remove"] }
430
837
  ],
431
838
  children: agentChildren
432
839
  },
840
+ {
841
+ name: "profile",
842
+ summary: "Manage reusable Agent Profiles.",
843
+ sections: [
844
+ { id: "inspect", title: "Inspect", entries: ["list", "show"] },
845
+ { id: "manage", title: "Manage", entries: ["add", "update", "remove", "reset"] }
846
+ ],
847
+ children: profileChildren
848
+ },
433
849
  {
434
850
  name: "role",
435
851
  summary: "Manage reusable global Roles and their native sessions.",
436
852
  sections: [
437
853
  { id: "inspect", title: "Inspect", entries: ["list", "show"] },
438
- { id: "manage", title: "Manage", entries: ["add", "update", "remove", "bind"] },
854
+ { id: "manage", title: "Manage", entries: ["add", "update", "remove", "bind", "unbind"] },
439
855
  { id: "sessions", title: "Sessions", entries: ["enter", "session"] }
440
856
  ],
441
857
  children: roleChildren
442
858
  },
443
859
  {
444
860
  name: "task",
445
- summary: "Manage Tasks, Roles, work items, and Runs.",
861
+ summary: "Manage Tasks, WorkItems, Agent Runs, and integration.",
446
862
  sections: [
447
- { id: "lifecycle", title: "Lifecycle", entries: ["create", "update", "activate", "complete", "reopen", "list", "show", "context", "archive", "reconcile"] },
448
- { id: "collaboration", title: "Collaboration", entries: ["message", "input", "role", "work", "run", "enter"] },
863
+ { id: "lifecycle", title: "Lifecycle", entries: ["create", "project", "update", "activate", "complete", "reopen", "retire", "list", "show", "context", "archive", "reconcile"] },
864
+ { id: "collaboration", title: "Collaboration", entries: ["message", "input", "work", "run", "review", "integration", "role", "enter"] },
449
865
  { id: "knowledge", title: "Task Knowledge", entries: ["brief", "decision", "milestone", "event"] }
450
866
  ],
451
867
  children: taskChildren
@@ -463,12 +879,24 @@ export const ROOT_COMMAND = buildNode({
463
879
  name: "internal",
464
880
  summary: "Internal Yui callbacks.",
465
881
  hidden: true,
466
- sections: [{ id: "callbacks", title: "Callbacks", entries: ["session-notify"] }],
467
- children: [{
882
+ sections: [{ id: "callbacks", title: "Callbacks", entries: ["session-notify", "claude-hook", "codex-hook"] }],
883
+ children: [
884
+ {
468
885
  name: "session-notify",
469
886
  summary: "Record a structured native session notification.",
470
887
  usage: "yui internal session-notify <payload>"
471
- }]
888
+ },
889
+ {
890
+ name: "claude-hook",
891
+ summary: "Record a managed Claude StopFailure event from stdin.",
892
+ usage: "yui internal claude-hook"
893
+ },
894
+ {
895
+ name: "codex-hook",
896
+ summary: "Record managed Codex provider lifecycle evidence from stdin.",
897
+ usage: "yui internal codex-hook"
898
+ }
899
+ ]
472
900
  }
473
901
  ]
474
902
  });