@zq-silk/yui 1.1.2 → 2.1.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.
Files changed (115) hide show
  1. package/ARCHITECTURE.md +2 -1
  2. package/ARCHITECTURE.zh-CN.md +2 -1
  3. package/README.md +2 -0
  4. package/dist/cli/commandCatalog.js +344 -324
  5. package/dist/cli/commandDiscovery.js +69 -0
  6. package/dist/cli/completion.js +22 -227
  7. package/dist/cli/dynamicCompletion.js +12 -6
  8. package/dist/cli/invocationAuthority.js +2 -2
  9. package/dist/cli/invocationRouter.js +18 -7
  10. package/dist/cli/managedDiagnostics.js +2 -1
  11. package/dist/cli/updatePorts.js +0 -5
  12. package/dist/cli.js +184 -130
  13. package/dist/commands/capabilityCommands.js +5 -5
  14. package/dist/commands/controllerCommands.js +2 -1
  15. package/dist/commands/globalRoleCommands.js +86 -44
  16. package/dist/commands/grantCommands.js +48 -8
  17. package/dist/commands/taskCommands.js +157 -196
  18. package/dist/commands/taskContextCommand.js +29 -6
  19. package/dist/commands/taskFactCommands.js +10 -69
  20. package/dist/commands/taskInputCommands.js +26 -35
  21. package/dist/commands/taskPublicationCommands.js +2 -35
  22. package/dist/commands/taskPublicationVerifyCommand.js +1 -2
  23. package/dist/commands/taskUpstreamCommands.js +2 -1
  24. package/dist/context/runContextPack.js +8 -29
  25. package/dist/context/sessionBootstrapManifest.js +5 -101
  26. package/dist/context/taskContext.js +104 -41
  27. package/dist/controller/clientRuntime.js +16 -8
  28. package/dist/controller/fileSchedulerStoreAdapter.js +24 -0
  29. package/dist/controller/runtime.js +6 -0
  30. package/dist/core/controllerClient.js +46 -21
  31. package/dist/core/protocol.js +12 -7
  32. package/dist/doctor/doctor.js +4 -3
  33. package/dist/errors/cliError.js +4 -4
  34. package/dist/errors/cliFailure.js +213 -0
  35. package/dist/executor/fileRoleLaunchPlanner.js +1 -4
  36. package/dist/grant/capabilityGrant.js +13 -0
  37. package/dist/grant/taskAuthorization.js +127 -0
  38. package/dist/kernel/accessAssessment.js +1 -0
  39. package/dist/kernel/builtinCapabilities.js +88 -9
  40. package/dist/kernel/capabilityRegistry.js +64 -19
  41. package/dist/kernel/kernelPorts.js +2 -2
  42. package/dist/nativeAgent/agent.js +173 -0
  43. package/dist/nativeAgent/contracts.js +1 -0
  44. package/dist/nativeAgent/demo.js +29 -0
  45. package/dist/nativeAgent/index.js +3 -0
  46. package/dist/nativeAgent/mockProvider.js +43 -0
  47. package/dist/nativeAgent/textTools.js +156 -0
  48. package/dist/nativeAgent/validation.js +95 -0
  49. package/dist/output/boundedRead.js +118 -0
  50. package/dist/plugins/pluginService.js +98 -8
  51. package/dist/release/releaseWorkflowEngine.js +8 -1
  52. package/dist/resources/projectResourceService.js +23 -1
  53. package/dist/runtime/managedCaller.js +2 -2
  54. package/dist/runtime/managedIdentity.js +6 -0
  55. package/dist/runtime/runtimeCoherence.js +10 -8
  56. package/dist/storage/sqliteSchema.js +10 -0
  57. package/dist/storage/storageVersions.js +1 -1
  58. package/dist/storage/taskStore.js +3 -0
  59. package/dist/surface/surfaceContributions.js +3 -0
  60. package/dist/task/leaderArchive.js +111 -0
  61. package/dist/task/leaderArchiveAuthority.js +24 -0
  62. package/dist/task/taskAuthority.js +5 -10
  63. package/dist/tmux/commandExecutor.js +7 -5
  64. package/dist/web/assets/assetManifest.js +38 -22
  65. package/dist/web/assets/client/api.js +115 -0
  66. package/dist/web/assets/client/app.js +555 -863
  67. package/dist/web/assets/client/components.js +323 -897
  68. package/dist/web/assets/client/detail.js +333 -0
  69. package/dist/web/assets/client/dock.js +225 -0
  70. package/dist/web/assets/client/dom.js +55 -3
  71. package/dist/web/assets/client/evidence.js +172 -0
  72. package/dist/web/assets/client/format.js +25 -14
  73. package/dist/web/assets/client/forms.js +230 -0
  74. package/dist/web/assets/client/i18n.js +1020 -791
  75. package/dist/web/assets/client/overview.js +115 -0
  76. package/dist/web/assets/client/records.js +63 -0
  77. package/dist/web/assets/client/sections.js +313 -0
  78. package/dist/web/assets/client/sidebar.js +117 -0
  79. package/dist/web/assets/client/theme.js +61 -22
  80. package/dist/web/assets/icons.js +39 -0
  81. package/dist/web/assets/shell.js +124 -118
  82. package/dist/web/assets/styles/base.js +41 -0
  83. package/dist/web/assets/styles/components.js +167 -0
  84. package/dist/web/assets/styles/layout.js +49 -77
  85. package/dist/web/assets/styles/markdown.js +16 -24
  86. package/dist/web/assets/styles/responsive.js +33 -44
  87. package/dist/web/assets/styles/tokens.js +65 -89
  88. package/dist/web/assets/styles/views.js +289 -0
  89. package/dist/web/webServer.js +2 -1
  90. package/docs/architecture/README.md +1 -0
  91. package/docs/architecture/README.zh-CN.md +1 -0
  92. package/docs/cli-information-contract.md +107 -0
  93. package/docs/cli-information-contract.zh-CN.md +81 -0
  94. package/docs/managed-turn-and-session-runtime.md +9 -0
  95. package/docs/managed-turn-and-session-runtime.zh-CN.md +6 -0
  96. package/docs/plugin-sdk.md +7 -3
  97. package/docs/plugin-sdk.zh-CN.md +5 -2
  98. package/docs/release-workflow.md +42 -9
  99. package/docs/release-workflow.zh-CN.md +30 -7
  100. package/docs/storage-baseline.md +5 -0
  101. package/docs/testing/verification-levels.md +2 -2
  102. package/i18n/README.zh-CN.md +2 -0
  103. package/package.json +1 -1
  104. package/skills/yui-leader/SKILL.md +8 -1
  105. package/skills/yui-leader/references/authorization.md +64 -0
  106. package/skills/yui-leader/references/execution.md +18 -4
  107. package/skills/yui-leader/references/task-plugins.md +4 -2
  108. package/skills/yui-operator/SKILL.md +9 -2
  109. package/skills/yui-runtime/SKILL.md +77 -9
  110. package/skills/yui-runtime/references/publication.md +3 -1
  111. package/dist/web/assets/client/taskSummary.js +0 -350
  112. package/dist/web/assets/client/taskSurface.js +0 -616
  113. package/dist/web/assets/client/view.js +0 -608
  114. package/dist/web/assets/styles/cards.js +0 -247
  115. package/dist/web/assets/styles/widgets.js +0 -168
@@ -24,6 +24,7 @@ function buildNode(input, parentPath = []) {
24
24
  }))),
25
25
  children: Object.freeze(children),
26
26
  hidden: input.hidden ?? false,
27
+ ...(input.discovery === undefined ? {} : { discovery: input.discovery }),
27
28
  options: Object.freeze([...(input.options ?? [])]),
28
29
  hiddenOptions: Object.freeze([...(input.hiddenOptions ?? [])]),
29
30
  values: Object.freeze((input.values ?? []).map((value) => Object.freeze(typeof value === "string" ? { name: value, summary: value } : { ...value }))),
@@ -66,7 +67,7 @@ function durableConfigDomainNode(domain) {
66
67
  ? ["--quiet-after-seconds", "--diagnostic-after-seconds", "--stall-after-seconds"]
67
68
  : [];
68
69
  return {
69
- name: domain,
70
+ name: domain, discovery: { surface: "public", audiences: ["public", "operator"] },
70
71
  summary: CONFIG_DOMAIN_SUMMARIES[domain],
71
72
  examples: [
72
73
  `yui config ${domain} show`,
@@ -75,9 +76,9 @@ function durableConfigDomainNode(domain) {
75
76
  ],
76
77
  sections: [{ id: "manage", title: "Commands", entries: ["show", "set", "clear"] }],
77
78
  children: [
78
- { name: "show", summary: `Show effective ${domain} configuration.` },
79
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: `Show effective ${domain} configuration.` },
79
80
  {
80
- name: "set",
81
+ name: "set", discovery: { surface: "public", audiences: ["public", "operator"] },
81
82
  summary: `Set one ${domain} configuration key.`,
82
83
  usage: `yui config ${domain} set <key> <value...>`,
83
84
  sections: [{ id: "keys", title: "Configuration keys", entries: keys }],
@@ -90,7 +91,7 @@ function durableConfigDomainNode(domain) {
90
91
  : {}
91
92
  },
92
93
  {
93
- name: "clear",
94
+ name: "clear", discovery: { surface: "public", audiences: ["public", "operator"] },
94
95
  summary: `Reset one ${domain} configuration key to its default.`,
95
96
  usage: `yui config ${domain} clear <key>`,
96
97
  sections: [{ id: "keys", title: "Configuration keys", entries: keys }],
@@ -101,7 +102,7 @@ function durableConfigDomainNode(domain) {
101
102
  }
102
103
  const agentChildren = [
103
104
  {
104
- name: "add",
105
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator"] },
105
106
  summary: "Add a configured Agent execution component.",
106
107
  usage: "yui config agent add <id> [--component <component>] [--adapter <adapter>] --command <command> [--arg <arg> ...] [--env TARGET=PROCESS_NAME ...]",
107
108
  options: ["--component", "--adapter", "--command", "--arg", "--env"],
@@ -111,16 +112,16 @@ const agentChildren = [
111
112
  },
112
113
  executableOptions: ["--command"]
113
114
  },
114
- { name: "list", summary: "List configured Agents." },
115
- { name: "show", summary: "Show one configured Agent.", usage: "yui config agent show <id>" },
115
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "List configured Agents." },
116
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "Show one configured Agent.", usage: "yui config agent show <id>" },
116
117
  {
117
- name: "capabilities",
118
+ name: "capabilities", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] },
118
119
  summary: "Probe one Agent CLI for runtime configuration options.",
119
120
  usage: "yui config agent capabilities <id> [--refresh]",
120
121
  options: ["--refresh"]
121
122
  },
122
123
  {
123
- name: "update",
124
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator"] },
124
125
  summary: "Update a configured Agent.",
125
126
  usage: "yui config agent update <id> [--component <component>] [--adapter <adapter>] [--command <command>] [--arg <arg> ... | --clear-args] [--env TARGET=PROCESS_NAME ... | --clear-env]",
126
127
  options: ["--component", "--adapter", "--command", "--arg", "--clear-args", "--env", "--clear-env", "--yes"],
@@ -130,7 +131,7 @@ const agentChildren = [
130
131
  },
131
132
  executableOptions: ["--command"]
132
133
  },
133
- { name: "remove", summary: "Remove a configured Agent.", usage: "yui config agent remove <id>" }
134
+ { name: "remove", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Remove a configured Agent.", usage: "yui config agent remove <id>" }
134
135
  ];
135
136
  const roleProfileOptions = [
136
137
  "--description", "--responsibility", "--constraint",
@@ -164,17 +165,17 @@ const roleAgentOptionValues = {
164
165
  };
165
166
  const roleChildren = [
166
167
  {
167
- name: "add",
168
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator"] },
168
169
  summary: "Add a reusable global Role.",
169
170
  usage: "yui config role add <name> --agent <id> [Role and Agent settings]",
170
171
  options: ["--agent", "--workspace", ...roleProfileOptions, ...roleAgentOptions],
171
172
  optionValues: roleAgentOptionValues,
172
173
  fileOptions: ["--workspace"]
173
174
  },
174
- { name: "list", summary: "List global Roles." },
175
- { name: "show", summary: "Show one global Role.", usage: "yui config role show <name>" },
175
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "List global Roles." },
176
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "Show one global Role.", usage: "yui config role show <name>" },
176
177
  {
177
- name: "update",
178
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator"] },
178
179
  summary: "Update a global Role.",
179
180
  usage: "yui config role update <name> [profile options] [clear options]",
180
181
  options: ["--agent", "--workspace", ...roleProfileOptions, ...roleAgentOptions,
@@ -182,73 +183,74 @@ const roleChildren = [
182
183
  optionValues: roleAgentOptionValues,
183
184
  fileOptions: ["--workspace"]
184
185
  },
185
- { name: "remove", summary: "Remove a global Role.", usage: "yui config role remove <name>" },
186
- { name: "bind", summary: "Bind and activate an Agent for a global Role.", usage: "yui config role bind <role> <agent-id>" },
187
- { name: "unbind", summary: "Unbind a dormant Agent from a global Role.", usage: "yui config role unbind <role> <agent-id>" }
186
+ { name: "remove", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Remove a global Role.", usage: "yui config role remove <name>" },
187
+ { name: "bind", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Bind and activate an Agent for a global Role.", usage: "yui config role bind <role> <agent-id>" },
188
+ { name: "unbind", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Unbind a dormant Agent from a global Role.", usage: "yui config role unbind <role> <agent-id>" }
188
189
  ];
189
190
  const globalSessionChildren = [
190
- { name: "enter", summary: "Enter a global Role's native session.", usage: "yui session enter <role>" },
191
+ { name: "enter", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Enter a global Role's native session.", usage: "yui session enter <role>" },
191
192
  {
192
- name: "context",
193
+ name: "context", discovery: { surface: "managed", audiences: ["operator", "global", "unbound"] },
193
194
  summary: "Load the exact authorized global Role context.",
194
- usage: "yui session context <role>"
195
+ usage: "yui session context <role> [--cursor <cursor>]",
196
+ options: ["--cursor"]
195
197
  },
196
198
  {
197
- name: "record",
199
+ name: "record", discovery: { surface: "public", audiences: ["public", "operator"] },
198
200
  summary: "Record the active Agent's native session ID.",
199
201
  usage: "yui session record <role> --native-id <id>",
200
202
  options: ["--native-id"]
201
203
  },
202
204
  {
203
- name: "replace",
205
+ name: "replace", discovery: { surface: "public", audiences: ["public", "operator"] },
204
206
  summary: "Explicitly replace the active Agent's native session ID.",
205
207
  usage: "yui session replace <role> --native-id <id> --reason <text>",
206
208
  options: ["--native-id", "--reason"]
207
209
  },
208
210
  {
209
- name: "stop",
211
+ name: "stop", discovery: { surface: "public", audiences: ["public", "operator"] },
210
212
  summary: "Stop all idle managed Sessions and the Controller before an offline update.",
211
213
  usage: "yui session stop --all",
212
214
  options: ["--all"]
213
215
  },
214
216
  {
215
- name: "reconcile",
217
+ name: "reconcile", discovery: { surface: "public", audiences: ["public", "operator"] },
216
218
  summary: "Reconcile durable Session owners with native sessions.",
217
219
  usage: "yui session reconcile [--report] [--cleanup]",
218
220
  options: ["--report", "--cleanup"]
219
221
  },
220
222
  {
221
- name: "retry",
223
+ name: "retry", discovery: { surface: "public", audiences: ["public", "operator"] },
222
224
  summary: "Inspect or control bounded Provider recovery for this Global Session.",
223
225
  usage: "yui session retry <role> [show|cancel|disable|enable]"
224
226
  }
225
227
  ];
226
228
  const profileChildren = [
227
229
  {
228
- name: "add",
230
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator"] },
229
231
  summary: "Add a reusable Agent Profile that inherits Worker runtime or selects one explicit Agent.",
230
232
  usage: "yui config profile add <id> [--access <read|write>] [--inherit-worker | --agent <id> [--model <model>] [--effort <effort>]] [Profile settings]",
231
233
  options: ["--access", ...agentProfileOptions],
232
234
  optionValues: { "--access": ["read", "write"] }
233
235
  },
234
- { name: "list", summary: "List Agent Profiles." },
235
- { name: "show", summary: "Show one Agent Profile.", usage: "yui config profile show <id>" },
236
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "List Agent Profiles." },
237
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] }, summary: "Show one Agent Profile.", usage: "yui config profile show <id>" },
236
238
  {
237
- name: "update",
239
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator"] },
238
240
  summary: "Update an Agent Profile's behavior or runtime source.",
239
241
  usage: "yui config profile update <id> [--access <read|write>] [--inherit-worker | [--agent <id>] [--model <model>|--clear-model] [--effort <effort>|--clear-effort]] [Profile settings]",
240
242
  options: ["--access", ...agentProfileOptions, ...agentProfileClearOptions],
241
243
  optionValues: { "--access": ["read", "write"] }
242
244
  },
243
- { name: "remove", summary: "Remove a custom Agent Profile.", usage: "yui config profile remove <id>" },
244
- { name: "reset", summary: "Reset all built-in Agent Profiles." }
245
+ { name: "remove", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Remove a custom Agent Profile.", usage: "yui config profile remove <id>" },
246
+ { name: "reset", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Reset all built-in Agent Profiles." }
245
247
  ];
246
248
  const completionChildren = [
247
- { name: "bash", summary: "Interactively configure Bash completion." },
248
- { name: "zsh", summary: "Interactively configure Zsh completion." },
249
- { name: "fish", summary: "Interactively configure Fish completion." },
249
+ { name: "bash", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Interactively configure Bash completion." },
250
+ { name: "zsh", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Interactively configure Zsh completion." },
251
+ { name: "fish", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Interactively configure Fish completion." },
250
252
  {
251
- name: "candidates",
253
+ name: "candidates", discovery: { surface: "runtime", audiences: [] },
252
254
  summary: "Resolve internal dynamic completion candidates.",
253
255
  usage: "yui config completion candidates <prefix> -- <words...>",
254
256
  hidden: true
@@ -256,24 +258,24 @@ const completionChildren = [
256
258
  ];
257
259
  const taskChildren = [
258
260
  {
259
- name: "create",
261
+ name: "create", discovery: { surface: "public", audiences: ["public", "operator"] },
260
262
  summary: "Create a Draft Task.",
261
263
  usage: "yui task create <title> [--type <project-defined-type>] [--project <project> ...] [--base <project>=<ref> ...]",
262
264
  options: ["--type", "--project", "--base"],
263
265
  optionValues: { "--type": ["feature", "bugfix"] }
264
266
  },
265
267
  {
266
- name: "project",
268
+ name: "project", discovery: { surface: "managed", audiences: ["operator", "leader"] },
267
269
  summary: "Manage Projects bound to a Task.",
268
270
  sections: [{ id: "manage", title: "Commands", entries: ["list", "add"] }],
269
271
  children: [
270
272
  {
271
- name: "list",
273
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
272
274
  summary: "List the Projects bound to a Task.",
273
275
  usage: "yui task project list <task>"
274
276
  },
275
277
  {
276
- name: "add",
278
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
277
279
  summary: "Add a Project to a Task.",
278
280
  usage: "yui task project add <task> <project> [--base <ref>] [--directory <name>]",
279
281
  options: ["--base", "--directory"]
@@ -281,7 +283,7 @@ const taskChildren = [
281
283
  ]
282
284
  },
283
285
  {
284
- name: "update",
286
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
285
287
  summary: "Update Task metadata.",
286
288
  usage: "yui task update <id> [--title <text>] [--type <project-defined-type>|--clear-type] [--description <text>|--clear-description] [--priority <low|medium|high|urgent>|--clear-priority] [--tags <comma-separated>|--clear-tags] [--due-at <RFC3339>|--clear-due-at]",
287
289
  options: [
@@ -294,14 +296,14 @@ const taskChildren = [
294
296
  "--type": ["feature", "bugfix"]
295
297
  }
296
298
  },
297
- { name: "activate", summary: "Adopt an existing Activation request for a Draft Task.", usage: "yui task activate <id>" },
299
+ { name: "activate", discovery: { surface: "public", audiences: ["public", "operator", "leader"] }, summary: "Adopt an existing Activation request for a Draft Task.", usage: "yui task activate <id>" },
298
300
  {
299
- name: "activation",
301
+ name: "activation", discovery: { surface: "managed", audiences: ["operator", "leader"] },
300
302
  summary: "Request, cancel or inspect explicit Task Activation.",
301
303
  sections: [{ id: "manage", title: "Commands", entries: ["request", "cancel", "show"] }],
302
304
  children: [
303
305
  {
304
- name: "request",
306
+ name: "request", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
305
307
  summary: "Record an Activation request. Every active Task gets a managed main workspace. empty adds no execution environment; scratch adopts a separate scratch environment; local requires a registered Resource and grant, not a Project ID.",
306
308
  usage: "yui task activation request <task> --request-id <id> "
307
309
  + "--environment <empty|scratch|local:<resource>:<read|write>>",
@@ -312,126 +314,126 @@ const taskChildren = [
312
314
  ]
313
315
  },
314
316
  {
315
- name: "cancel",
317
+ name: "cancel", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
316
318
  summary: "Cancel a pending Activation request so it is never adopted.",
317
319
  usage: "yui task activation cancel <task> --request-id <id> --reason <text>",
318
320
  options: ["--request-id", "--reason"]
319
321
  },
320
322
  {
321
- name: "show",
323
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
322
324
  summary: "Show the Task's Activation request and its disposition.",
323
325
  usage: "yui task activation show <task>"
324
326
  }
325
327
  ]
326
328
  },
327
329
  {
328
- name: "execution",
330
+ name: "execution", discovery: { surface: "managed", audiences: ["operator", "leader"] },
329
331
  summary: "Fence or resume all execution for a Task.",
330
332
  sections: [{ id: "manage", title: "Commands", entries: ["stop", "start"] }],
331
333
  children: [
332
334
  {
333
- name: "stop",
335
+ name: "stop", discovery: { surface: "public", audiences: ["public", "operator"] },
334
336
  summary: "Stop all Task execution while preserving durable progress.",
335
337
  usage: "yui task execution stop <task> --force --reason <text>",
336
338
  options: ["--force", "--reason"]
337
339
  },
338
340
  {
339
- name: "start",
341
+ name: "start", discovery: { surface: "public", audiences: ["public", "operator"] },
340
342
  summary: "Resume the Leader from durable Task progress.",
341
343
  usage: "yui task execution start <task>"
342
344
  }
343
345
  ]
344
346
  },
345
347
  {
346
- name: "complete",
348
+ name: "complete", discovery: { surface: "managed", audiences: ["operator", "leader"] },
347
349
  summary: "Complete locally, or prepare/dispatch the configured final Review and remain active. --refresh-remote only fetches freshness observations; it never rebases, changes HEAD or starts Integration checks.",
348
350
  usage: "yui task complete <id> (--summary <text>|--summary-file <path|->) [--artifact-ref <artifact-id|turn:id|url> ...] [--refresh-remote] [--accept-published-tree <publication-id>]",
349
351
  options: ["--summary", "--summary-file", "--artifact-ref", "--refresh-remote", "--accept-published-tree"],
350
352
  fileOptions: ["--summary-file"]
351
353
  },
352
354
  {
353
- name: "base",
355
+ name: "base", discovery: { surface: "managed", audiences: ["operator", "leader"] },
354
356
  summary: "Inspect Task Project baseline freshness.",
355
357
  sections: [{ id: "manage", title: "Commands", entries: ["status"] }],
356
358
  children: [
357
359
  {
358
- name: "status",
360
+ name: "status", discovery: { surface: "managed", audiences: ["operator", "leader"] },
359
361
  summary: "Observe Task Project bases against local refs; --refresh fetches remote objects without changing HEAD, starting checks or creating Integration/Review.",
360
362
  usage: "yui task base status <task> [--refresh]",
361
363
  options: ["--refresh"]
362
364
  }
363
365
  ]
364
366
  },
365
- { name: "reopen", summary: "Explicitly reopen completed or cancelled intent without replaying historical inputs.", usage: "yui task reopen <id>" },
367
+ { name: "reopen", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Explicitly reopen completed or cancelled intent without replaying historical inputs.", usage: "yui task reopen <id>" },
366
368
  {
367
- name: "cancel",
369
+ name: "cancel", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
368
370
  summary: "Stop pursuing a Task without claiming its processes stopped.",
369
371
  usage: "yui task cancel <task> (--summary <text>|--summary-file <path|->)",
370
372
  options: ["--summary", "--summary-file"],
371
373
  fileOptions: ["--summary-file"]
372
374
  },
373
375
  {
374
- name: "retire",
376
+ name: "retire", discovery: { surface: "public", audiences: ["public", "operator"] },
375
377
  summary: "Retire a stale Task while preserving its historical evidence.",
376
378
  usage: "yui task retire <task> (--summary <text>|--summary-file <path|->) [--replacement <task>]",
377
379
  options: ["--summary", "--summary-file", "--replacement"],
378
380
  fileOptions: ["--summary-file"]
379
381
  },
380
382
  {
381
- name: "list",
383
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
382
384
  summary: "Discover Tasks through a bounded, filterable catalog.",
383
385
  usage: "yui task list [--all] [--status <status>] [--project <id>] [--search <text>] [--attention <category>] [--limit <1..100>] [--cursor <cursor>]",
384
386
  options: ["--all", "--status", "--project", "--search", "--attention", "--limit", "--cursor"]
385
387
  },
386
- { name: "show", summary: "Show a Task.", usage: "yui task show <id>" },
388
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "Show Task metadata and counts; long details use contentPage.", usage: "yui task show <id> [--cursor <cursor>]", options: ["--cursor"] },
387
389
  {
388
- name: "artifact",
390
+ name: "artifact", discovery: { surface: "managed", audiences: ["operator", "leader"] },
389
391
  summary: "Save Task files in local Git and read current or commit-pinned content.",
390
392
  sections: [{ id: "manage", title: "Commands", entries: ["list", "read", "save"] }],
391
393
  children: [
392
- { name: "list", summary: "List saved Task artifacts.", usage: "yui task artifact list <task>" },
393
- { name: "read", summary: "Read a file at HEAD or an exact commit.", usage: "yui task artifact read <task> <relative-path> [<commit>]" },
394
- { name: "save", summary: "Save and locally commit one file.", usage: "yui task artifact save <task> <relative-path> <content> [--message <text>] [--expected-head <commit>]", options: ["--message", "--expected-head"] }
394
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "List saved Task artifacts.", usage: "yui task artifact list <task>" },
395
+ { name: "read", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "Read a file at HEAD or an exact commit.", usage: "yui task artifact read <task> <relative-path> [<commit>]" },
396
+ { name: "save", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Save and locally commit one file.", usage: "yui task artifact save <task> <relative-path> <content> [--message <text>] [--expected-head <commit>]", options: ["--message", "--expected-head"] }
395
397
  ]
396
398
  },
397
399
  {
398
- name: "context",
400
+ name: "context", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "unbound"] },
399
401
  summary: "Read compact authorized facts, fixed-bound delta, or inspect a Context reference.",
400
- usage: "yui task context [read|delta|inspect] <task> [--after <cursor>] [--continuation <cursor>] [--limit <n>] [--store <store> --ref <id>] [--digest <digest>]",
401
- options: ["--after", "--continuation", "--limit", "--store", "--ref", "--digest"]
402
+ usage: "yui task context [read|list|delta|inspect] <task> [--after <cursor>] [--continuation <cursor>] [--cursor <cursor>] [--limit <n>] [--store <store> --ref <id>] [--digest <digest>]",
403
+ options: ["--after", "--continuation", "--cursor", "--limit", "--store", "--ref", "--digest", "--status", "--work-item"]
402
404
  },
403
405
  {
404
- name: "next-action",
406
+ name: "next-action", discovery: { surface: "managed", audiences: ["operator", "leader"] },
405
407
  summary: "Read Task facts, mechanical prerequisites and legal alternatives; semantic choices remain with the Leader.",
406
- usage: "yui task next-action <task> [--json]",
407
- options: ["--json"]
408
+ usage: "yui task next-action <task> [--cursor <cursor>] [--json]",
409
+ options: ["--cursor", "--json"]
408
410
  },
409
411
  {
410
- name: "remote-delivery",
412
+ name: "remote-delivery", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
411
413
  summary: "Project exact Task heads and current PR/MR evidence into merge coverage.",
412
- usage: "yui task remote-delivery <task> [--json]",
413
- options: ["--json"]
414
+ usage: "yui task remote-delivery <task> [--cursor <cursor>] [--json]",
415
+ options: ["--cursor", "--json"]
414
416
  },
415
417
  {
416
- name: "archive-preflight",
418
+ name: "archive-preflight", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
417
419
  summary: "Inspect current archive and exact-owner cleanup blockers without changing state or authorizing removal.",
418
420
  usage: "yui task archive-preflight <id> (--integrated|--abandon) [--force] [--json]",
419
421
  options: ["--integrated", "--abandon", "--force", "--json"]
420
422
  },
421
423
  {
422
- name: "archive",
424
+ name: "archive", discovery: { surface: "public", audiences: ["public", "operator", "leader"], optionAudiences: { "--force": ["public", "operator"] } },
423
425
  summary: "Archive a terminal Task; explicit --force commits despite delivery/cleanup warnings, retaining unsafe resources.",
424
- usage: "yui task archive <id> (--integrated|--abandon) [--force]",
425
- options: ["--integrated", "--abandon", "--force"]
426
+ usage: "yui task archive <id> (--integrated|--abandon) [--force] [--source-message <id> --purpose <verbatim-authorization> --request-id <id>]",
427
+ options: ["--integrated", "--abandon", "--force", "--source-message", "--purpose", "--request-id"]
426
428
  },
427
- { name: "reconcile", summary: "Run one immediate Controller reconciliation.", usage: "yui task reconcile <id>" },
429
+ { name: "reconcile", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Run one immediate Controller reconciliation.", usage: "yui task reconcile <id>" },
428
430
  {
429
- name: "upstream",
431
+ name: "upstream", discovery: { surface: "managed", audiences: ["operator", "leader"] },
430
432
  summary: "Integrate upstream changes into an Active Task workspace.",
431
433
  sections: [{ id: "manage", title: "Commands", entries: ["integrate"] }],
432
434
  children: [
433
435
  {
434
- name: "integrate",
436
+ name: "integrate", discovery: { surface: "managed", audiences: ["operator", "leader"] },
435
437
  summary: "Explicitly rebase Task changes onto the remote development head, run configured/additional checks (possibly as Jobs), then advance HEAD through Integration CAS. Returns exact attempts and partial results; does not request Review or complete the Task.",
436
438
  usage: "yui task upstream integrate <task> (--latest|--project <project>) [--check <command> ...] [--rerun-checks]",
437
439
  options: ["--latest", "--project", "--check", "--rerun-checks"]
@@ -439,25 +441,25 @@ const taskChildren = [
439
441
  ]
440
442
  },
441
443
  {
442
- name: "replace",
444
+ name: "replace", discovery: { surface: "public", audiences: ["public", "operator"] },
443
445
  summary: "Create a draft successor for a terminal Task.",
444
446
  usage: "yui task replace <task> [--title <text>]",
445
447
  options: ["--title"]
446
448
  },
447
449
  {
448
- name: "message",
450
+ name: "message", discovery: { surface: "managed", audiences: ["operator", "leader"] },
449
451
  summary: "Manage durable Task messages.",
450
452
  sections: [{ id: "manage", title: "Commands", entries: ["send", "queue", "steer", "handoff", "list", "show", "update", "retire"] }],
451
453
  children: [
452
454
  {
453
- name: "handoff",
455
+ name: "handoff", discovery: { surface: "managed", audiences: ["operator", "leader"] },
454
456
  summary: "Explicitly hand an unassigned Message to the current dispatched owner of the same work.",
455
457
  usage: "yui task message handoff <task/message> --to <role>",
456
458
  options: ["--to"]
457
459
  },
458
460
  {
459
- name: "send",
460
- summary: "Send a Task message. An unaddressed user/operator message carries a submission intent (record|discuss|develop) and an optional idempotency key.",
461
+ name: "send", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"], optionAudiences: { "--intent": ["public", "operator"] } },
462
+ summary: "Send durable Task input within the current caller's routing and Assignment boundary.",
461
463
  usage: "yui task message send <id> (<body>|--body-file <path|->) [--intent record|discuss|develop] [--request-id <key>] [--to <role> --work-item <id>|--review-round <id>]",
462
464
  options: ["--body-file", "--intent", "--request-id", "--to", "--work-item", "--review-round"],
463
465
  optionValues: {
@@ -466,39 +468,40 @@ const taskChildren = [
466
468
  fileOptions: ["--body-file"]
467
469
  },
468
470
  {
469
- name: "queue",
471
+ name: "queue", discovery: { surface: "managed", audiences: ["operator", "leader"] },
470
472
  summary: "Queue ordinary Leader input without --to; an explicit Role requires an existing WorkItem/ReviewRound Assignment. Idempotent by request id.",
471
473
  usage: "yui task message queue <id> (<body>|--body-file <path|->) --request-id <id> [--to <role> (--work-item <id>|--review-round <id>)]",
472
474
  options: ["--body-file", "--request-id", "--to", "--work-item", "--review-round"],
473
475
  fileOptions: ["--body-file"]
474
476
  },
475
477
  {
476
- name: "steer",
478
+ name: "steer", discovery: { surface: "managed", audiences: ["operator", "leader"] },
477
479
  summary: "Steer only a Role's exact current native Turn; saved and reported without fallback when unsupported.",
478
480
  usage: "yui task message steer <id> (<body>|--body-file <path|->) --request-id <id> --expected-target <turn> --to <role> [--work-item <id>|--review-round <id>]",
479
481
  options: ["--body-file", "--request-id", "--expected-target", "--to", "--work-item", "--review-round"],
480
482
  fileOptions: ["--body-file"]
481
483
  },
482
484
  {
483
- name: "list",
485
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
484
486
  summary: "List Task messages.",
485
- usage: "yui task message list <id> [--after <timestamp>] [--limit <n>]",
486
- options: ["--after", "--limit"]
487
+ usage: "yui task message list <id> [--after <timestamp>] [--limit <1..100>] [--cursor <cursor>]",
488
+ options: ["--after", "--limit", "--cursor"]
487
489
  },
488
490
  {
489
- name: "show",
491
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
490
492
  summary: "Read a scoped Message and expand its single execution result.",
491
- usage: "yui task message show <task>/<message>"
493
+ usage: "yui task message show <task>/<message> [--cursor <cursor>]",
494
+ options: ["--cursor"]
492
495
  },
493
496
  {
494
- name: "update",
497
+ name: "update", discovery: { surface: "managed", audiences: ["operator", "leader"] },
495
498
  summary: "Edit unkeyed Draft context without changing intent; inputs with request identities require a new Message.",
496
499
  usage: "yui task message update <task>/<message> (<body>|--body-file <path|->)",
497
500
  options: ["--body-file"],
498
501
  fileOptions: ["--body-file"]
499
502
  },
500
503
  {
501
- name: "retire",
504
+ name: "retire", discovery: { surface: "managed", audiences: ["operator", "leader"] },
502
505
  summary: "Retire an incorrect historical Task Message without deleting its audit record.",
503
506
  usage: "yui task message retire <task>/<message> --reason <text>",
504
507
  options: ["--reason"]
@@ -506,36 +509,36 @@ const taskChildren = [
506
509
  ]
507
510
  },
508
511
  {
509
- name: "input",
512
+ name: "input", discovery: { surface: "managed", audiences: ["operator", "leader"] },
510
513
  summary: "Manage durable Task-owned input requests.",
511
514
  sections: [{ id: "manage", title: "Commands", entries: ["request", "list", "show", "answer", "cancel"] }],
512
515
  children: [
513
516
  {
514
- name: "request",
517
+ name: "request", discovery: { surface: "managed", audiences: ["leader"] },
515
518
  summary: "Pause the active Leader AgentRun and request user input.",
516
519
  usage: "yui task input request <task> --question <text> [--choice <key=label> ...] [--blocks <work-item:id|turn:id> ...] [--recommend <key> --timeout-seconds <seconds>]",
517
520
  options: ["--question", "--choice", "--blocks", "--recommend", "--timeout-seconds"]
518
521
  },
519
522
  {
520
- name: "list",
523
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
521
524
  summary: "List the global Inbox or one Task's input requests.",
522
- usage: "yui task input list [task] [--all]",
523
- options: ["--all"]
525
+ usage: "yui task input list [task] [--all] [--limit <1..100>] [--cursor <cursor>]",
526
+ options: ["--all", "--limit", "--cursor"]
524
527
  },
525
528
  {
526
- name: "show",
529
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
527
530
  summary: "Show one input request.",
528
- usage: "yui task input show (<task>/<input> | <input> --task <task>)",
529
- options: ["--task"]
531
+ usage: "yui task input show (<task>/<input> | <input> --task <task>) [--cursor <cursor>]",
532
+ options: ["--task", "--cursor"]
530
533
  },
531
534
  {
532
- name: "answer",
535
+ name: "answer", discovery: { surface: "public", audiences: ["public", "operator"] },
533
536
  summary: "Answer one open input request.",
534
537
  usage: "yui task input answer (<task>/<input> | <input> --task <task>) (--choice <key> | --text <text>)",
535
538
  options: ["--task", "--choice", "--text"]
536
539
  },
537
540
  {
538
- name: "cancel",
541
+ name: "cancel", discovery: { surface: "managed", audiences: ["leader"] },
539
542
  summary: "Cancel an open request from its originating Leader.",
540
543
  usage: "yui task input cancel <task> <input> --reason <text>",
541
544
  options: ["--reason"]
@@ -543,116 +546,117 @@ const taskChildren = [
543
546
  ]
544
547
  },
545
548
  {
546
- name: "grant",
547
- summary: "Manage capability grants for a Task. Issue and revoke require the authenticated global Operator session.",
549
+ name: "grant", discovery: { surface: "managed", audiences: ["operator", "leader"] },
550
+ summary: "Manage Task grants as Operator, or bounded source-authorized grants as the current delivery Leader.",
548
551
  sections: [{ id: "manage", title: "Commands", entries: ["issue", "show", "list", "revoke"] }],
549
552
  children: [
550
553
  {
551
- name: "issue",
552
- summary: "Issue a capability grant to a Task. Requires the authenticated global Operator session; the granter is bound to it.",
554
+ name: "issue", discovery: { surface: "managed", audiences: ["operator", "leader"] },
555
+ summary: "Issue as Operator, or as current delivery Leader with --source-message, --purpose, --request-id, exact scope, expiry and finite uses.",
553
556
  usage: "yui task grant issue <task> --action <name> (repeatable) [--scope-project <id>...] [--scope-repo <owner/name>...] [--scope-package <name>...] [--scope-home <path>] [--param <name=v1,v2>...] [--expires-at <iso-8601>] [--max-uses <int>] [--irreversibility-ceiling <none|reversible|irreversible>]",
554
- options: ["--action", "--scope-project", "--scope-repo", "--scope-package", "--scope-home", "--param", "--expires-at", "--max-uses", "--irreversibility-ceiling"]
557
+ options: ["--action", "--scope-project", "--scope-repo", "--scope-package", "--scope-home", "--param", "--expires-at", "--max-uses", "--irreversibility-ceiling", "--source-message", "--purpose", "--request-id"]
555
558
  },
556
559
  {
557
- name: "show",
560
+ name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] },
558
561
  summary: "Show one capability grant.",
559
562
  usage: "yui task grant show <task> <grant-id>"
560
563
  },
561
564
  {
562
- name: "list",
565
+ name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] },
563
566
  summary: "List capability grants for a Task.",
564
567
  usage: "yui task grant list <task>"
565
568
  },
566
569
  {
567
- name: "revoke",
568
- summary: "Revoke a capability grant. Requires the authenticated global Operator session; the revoker is bound to it.",
570
+ name: "revoke", discovery: { surface: "managed", audiences: ["operator", "leader"] },
571
+ summary: "Revoke as Operator, or this Task's current delivery Leader for a Leader-issued grant.",
569
572
  usage: "yui task grant revoke <task> <grant-id>",
570
573
  options: []
571
574
  }
572
575
  ]
573
576
  },
574
577
  {
575
- name: "workflow",
578
+ name: "workflow", discovery: { surface: "managed", audiences: ["operator", "leader"] },
576
579
  summary: "Manage release workflows for a Task.",
577
580
  sections: [{ id: "manage", title: "Commands", entries: ["create", "show", "list", "run", "resume", "status"] }],
578
581
  children: [
579
582
  {
580
- name: "create",
583
+ name: "create", discovery: { surface: "managed", audiences: ["operator", "leader"] },
581
584
  summary: "Create a release workflow for a Task.",
582
585
  usage: "yui task workflow create <task> --grant <grant-id> --source-repo <owner/name> --source-commit <sha> [--source-artifact <name@integrity>] --step <id>:<kind> (repeatable) [--step-irreversibility <id>=<level> (repeatable)] [--step-param <id>:<key>=<value> (repeatable)]",
583
586
  options: ["--grant", "--source-repo", "--source-commit", "--source-artifact", "--step", "--step-irreversibility", "--step-param"]
584
587
  },
585
588
  {
586
- name: "show",
589
+ name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] },
587
590
  summary: "Show one release workflow.",
588
591
  usage: "yui task workflow show <task> <workflow-id>"
589
592
  },
590
593
  {
591
- name: "list",
594
+ name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] },
592
595
  summary: "List release workflows for a Task.",
593
596
  usage: "yui task workflow list <task>"
594
597
  },
595
598
  {
596
- name: "run",
599
+ name: "run", discovery: { surface: "managed", audiences: ["operator", "leader"] },
597
600
  summary: "Run a release workflow from its resume cursor.",
598
601
  usage: "yui task workflow run <task> <workflow-id> [--grant <grant-id>] [--max-steps <int>]",
599
602
  options: ["--grant", "--max-steps"]
600
603
  },
601
604
  {
602
- name: "resume",
605
+ name: "resume", discovery: { surface: "managed", audiences: ["operator", "leader"] },
603
606
  summary: "Resume a release workflow from its first unconfirmed step.",
604
607
  usage: "yui task workflow resume <task> <workflow-id> [--grant <grant-id>] [--max-steps <int>]",
605
608
  options: ["--grant", "--max-steps"]
606
609
  },
607
610
  {
608
- name: "status",
611
+ name: "status", discovery: { surface: "managed", audiences: ["operator", "leader"] },
609
612
  summary: "Show a release workflow and its step states.",
610
613
  usage: "yui task workflow status <task> <workflow-id>"
611
614
  }
612
615
  ]
613
616
  },
614
617
  {
615
- name: "publication",
618
+ name: "publication", discovery: { surface: "managed", audiences: ["operator", "leader"] },
616
619
  summary: "Create or update external PR/MR publication evidence for a Task.",
617
620
  sections: [{ id: "manage", title: "Commands", entries: ["upsert", "diff", "adopt", "verify", "list", "show"] }],
618
621
  children: [
619
622
  {
620
- name: "upsert",
623
+ name: "upsert", discovery: { surface: "managed", audiences: ["operator", "leader"] },
621
624
  summary: "Create or immutably update an external PR/MR and its publication state.",
622
625
  usage: "yui task publication upsert <task> --project <project> --provider <github|gitlab> --repository <owner/name> --kind <pull-request|merge-request> --id <external-id> [--url <url>] [--title <text>] [--source-branch <branch>] [--target-branch <branch>] [--local-commit <sha>] [--head-commit <sha>] [--remote-commit <sha>] [--state <open|merged|closed>] [--reported|--verified] [--evidence <text>] [--merged-at <iso-timestamp>]",
623
626
  options: ["--project", "--provider", "--repository", "--kind", "--id", "--url", "--title", "--source-branch", "--target-branch", "--local-commit", "--head-commit", "--remote-commit", "--state", "--reported", "--verified", "--evidence", "--merged-at"]
624
627
  },
625
628
  {
626
- name: "diff",
629
+ name: "diff", discovery: { surface: "managed", audiences: ["operator", "leader"] },
627
630
  summary: "Read a completed Task's fixed acceptance-to-publication candidate diff using local Git only.",
628
631
  usage: "yui task publication diff <task>/<publication> [--integration <id>]",
629
632
  options: ["--integration"]
630
633
  },
631
634
  {
632
- name: "adopt",
635
+ name: "adopt", discovery: { surface: "managed", audiences: ["operator", "leader"] },
633
636
  summary: "Explicitly accept the reviewed publication candidate as covering the original completion.",
634
637
  usage: "yui task publication adopt <task>/<publication> --reviewed-diff <sha256> --acceptance <text> [--integration <id>]",
635
638
  options: ["--reviewed-diff", "--acceptance", "--integration"]
636
639
  },
637
640
  {
638
- name: "verify",
641
+ name: "verify", discovery: { surface: "managed", audiences: ["operator", "leader"] },
639
642
  summary: "Observe the current PR/MR head and merge through its provider; record verification separately from Task coverage.",
640
643
  usage: "yui task publication verify (<task>/<publication-id> | <task> <publication-id>)"
641
644
  },
642
645
  {
643
- name: "list",
646
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
644
647
  summary: "List external publication evidence for a Task.",
645
- usage: "yui task publication list <task>"
648
+ usage: "yui task publication list <task> [--limit <1..100>] [--cursor <cursor>]",
649
+ options: ["--limit", "--cursor"]
646
650
  },
647
651
  {
648
- name: "show",
652
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
649
653
  summary: "Show one external publication reference.",
650
654
  usage: "yui task publication show (<task>/<publication-id> | <task> <publication-id>)"
651
655
  }
652
656
  ]
653
657
  },
654
658
  {
655
- name: "role",
659
+ name: "role", discovery: { surface: "managed", audiences: ["operator", "leader"] },
656
660
  summary: "Manage Roles within a Task.",
657
661
  sections: [{ id: "manage", title: "Commands", entries: [
658
662
  "add", "list", "status", "show", "update", "remove", "bind", "unbind",
@@ -660,57 +664,59 @@ const taskChildren = [
660
664
  ] }],
661
665
  children: [
662
666
  {
663
- name: "add",
667
+ name: "add", discovery: { surface: "managed", audiences: ["operator", "leader"] },
664
668
  summary: "Add a Task Role from a frozen Profile/Worker runtime or one explicit Agent.",
665
669
  usage: "yui task role add <task> <name> [--profile <id>] [--agent <id> [Agent settings]] [Role settings]",
666
670
  options: ["--profile", "--agent", ...roleProfileOptions, ...roleAgentOptions],
667
671
  optionValues: roleAgentOptionValues
668
672
  },
669
- { name: "list", summary: "List Task Roles.", usage: "yui task role list <task>" },
673
+ { name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Discover recorded Role health; Host is unchecked until role status.", usage: "yui task role list <task> [--limit <1..100>] [--cursor <cursor>]", options: ["--limit", "--cursor"] },
670
674
  {
671
- name: "status",
675
+ name: "status", discovery: { surface: "managed", audiences: ["operator", "leader"] },
672
676
  summary: "Show persisted and live runtime state for one Task Role.",
673
- usage: "yui task role status <task> <role>"
677
+ usage: "yui task role status <task> <role> [--cursor <cursor>]",
678
+ options: ["--cursor"]
674
679
  },
675
- { name: "show", summary: "Show one Task Role.", usage: "yui task role show <task> <role>" },
676
- { name: "capabilities", summary: "Read native options using this Role's desired or exact failed launch configuration.",
680
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Show one Task Role.", usage: "yui task role show <task> <role> [--cursor <cursor>]", options: ["--cursor"] },
681
+ { name: "capabilities", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Read native options using this Role's desired or exact failed launch configuration.",
677
682
  usage: "yui task role capabilities <task> <role> [--error <event-id>] [--refresh]",
678
683
  options: ["--error", "--refresh"] },
679
684
  {
680
- name: "update",
685
+ name: "update", discovery: { surface: "managed", audiences: ["operator", "leader"] },
681
686
  summary: "Update a Task Role; Agent settings target the named or active binding without switching it.",
682
687
  usage: "yui task role update <task> <role> [--profile <id>] [--agent <id>] [--environment <preparation-id> | --managed-environment] [Role and Agent settings]",
683
688
  options: ["--profile", "--agent", "--environment", "--managed-environment", ...roleProfileOptions, ...roleAgentOptions,
684
689
  ...roleProfileClearOptions, ...roleAgentClearOptions, "--yes"],
685
690
  optionValues: roleAgentOptionValues
686
691
  },
687
- { name: "remove", summary: "Remove a Task Role.", usage: "yui task role remove <task> <role>" },
688
- { name: "bind", summary: "Bind and activate an Agent for a Task Role.", usage: "yui task role bind <task> <role> <agent-id>" },
689
- { name: "unbind", summary: "Unbind a dormant Agent from a Task Role.", usage: "yui task role unbind <task> <role> <agent-id>" },
692
+ { name: "remove", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Remove a Task Role.", usage: "yui task role remove <task> <role>" },
693
+ { name: "bind", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Bind and activate an Agent for a Task Role.", usage: "yui task role bind <task> <role> <agent-id>" },
694
+ { name: "unbind", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Unbind a dormant Agent from a Task Role.", usage: "yui task role unbind <task> <role> <agent-id>" },
690
695
  {
691
- name: "session",
696
+ name: "session", discovery: { surface: "managed", audiences: ["operator", "leader"] },
692
697
  summary: "Inspect, stop or explicitly select a new Task Role Session.",
693
698
  executable: true,
694
699
  sections: [{ id: "manage", title: "Commands", entries: ["inspect", "retry", "stop", "new"] }],
695
700
  children: [
696
701
  {
697
- name: "retry",
702
+ name: "retry", discovery: { surface: "managed", audiences: ["operator", "leader"] },
698
703
  summary: "Inspect or control Provider recovery without stopping an admitted Turn.",
699
704
  usage: "yui task role session retry <task> <role> [show|cancel|disable|enable]"
700
705
  },
701
706
  {
702
- name: "inspect",
707
+ name: "inspect", discovery: { surface: "managed", audiences: ["operator", "leader"] },
703
708
  summary: "Read the current Session, Host process, and AgentRun facts.",
704
- usage: "yui task role session inspect <task> <role>"
709
+ usage: "yui task role session inspect <task> <role> [--cursor <cursor>]",
710
+ options: ["--cursor"]
705
711
  },
706
712
  {
707
- name: "stop",
713
+ name: "stop", discovery: { surface: "managed", audiences: ["operator", "leader"] },
708
714
  summary: "Stop the exact Session execution and retain its conversation for possible reuse; preserve Task progress.",
709
715
  usage: "yui task role session stop <task> <role> --reason <text>",
710
716
  options: ["--reason"]
711
717
  },
712
718
  {
713
- name: "new",
719
+ name: "new", discovery: { surface: "managed", audiences: ["operator", "leader"] },
714
720
  summary: "Request replacement even for active or ended Sessions; stop exact execution and preserve Task context, results and workspaces.",
715
721
  usage: "yui task role session new <task> <role> --reason <text>",
716
722
  options: ["--reason"]
@@ -718,30 +724,30 @@ const taskChildren = [
718
724
  ]
719
725
  },
720
726
  {
721
- name: "view",
727
+ name: "view", discovery: { surface: "managed", audiences: ["operator", "leader"] },
722
728
  summary: "Attach read-only to an independent Provider presentation surface.",
723
729
  usage: "yui task role view <task> <role>"
724
730
  },
725
731
  {
726
- name: "interrupt",
732
+ name: "interrupt", discovery: { surface: "managed", audiences: ["operator", "leader"] },
727
733
  summary: "Interrupt a Role's exact current native Turn via native cancel; optionally deliver a saved Message once after a proven terminal.",
728
734
  usage: "yui task role interrupt <task> <role> --expected-target <turn> [--then-message <task/message>] [--request-id <id>]",
729
735
  options: ["--expected-target", "--then-message", "--request-id"]
730
736
  },
731
737
  {
732
- name: "takeover",
738
+ name: "takeover", discovery: { surface: "managed", audiences: ["operator", "leader"] },
733
739
  summary: "Enter the PTY input gateway for an independent Provider process.",
734
740
  usage: "yui task role takeover <task> <role>"
735
741
  },
736
742
  {
737
- name: "release",
743
+ name: "release", discovery: { surface: "managed", audiences: ["operator", "leader"] },
738
744
  summary: "Release an independent Provider PTY input gateway.",
739
745
  usage: "yui task role release <task> <role>"
740
746
  }
741
747
  ]
742
748
  },
743
749
  {
744
- name: "work",
750
+ name: "work", discovery: { surface: "managed", audiences: ["operator", "leader"] },
745
751
  summary: "Manage finite Task work items.",
746
752
  sections: [{
747
753
  id: "manage",
@@ -753,15 +759,15 @@ const taskChildren = [
753
759
  }],
754
760
  children: [
755
761
  {
756
- name: "create",
762
+ name: "create", discovery: { surface: "managed", audiences: ["operator", "leader"] },
757
763
  summary: "Create a separately managed result; a coherent Task may use zero WorkItems. Omit --role for Leader-direct execution; --role (including leader) selects a managed AgentRun executor. Isolate writable direct work before editing, then submit, integrate and accept its Candidate.",
758
764
  usage: "yui task work create <task> <title> [--project <project> ...] [--base-ref <project>=<ref> ...] [--objective <text>] [--accept <criterion> ...] [--after <work> ...] [--role <name>]",
759
765
  options: ["--project", "--base-ref", "--objective", "--accept", "--after", "--role"]
760
766
  },
761
- { name: "list", summary: "List work items for a Task.", usage: "yui task work list <task>" },
762
- { name: "show", summary: "Show one Work Item.", usage: "yui task work show <work>" },
767
+ { name: "list", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Discover work items by summary and exact reference.", usage: "yui task work list <task> [--limit <1..100>] [--cursor <cursor>]", options: ["--limit", "--cursor"] },
768
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Show one Work Item.", usage: "yui task work show <work> [--cursor <cursor>]", options: ["--cursor"] },
763
769
  {
764
- name: "edit",
770
+ name: "edit", discovery: { surface: "managed", audiences: ["operator", "leader"] },
765
771
  summary: "Edit current requirements without changing frozen Assignments or acceptance.",
766
772
  usage: "yui task work edit <task>/<work> [--title <text>] [--objective <text>] [--accept <criterion> ...|--clear-acceptance] [--after <work> ...|--clear-dependencies] [--project <project> ...|--clear-projects] [--base-ref <project>=<ref> ...|--clear-base-refs] [--role <name>|--clear-role]",
767
773
  options: [
@@ -771,7 +777,7 @@ const taskChildren = [
771
777
  ]
772
778
  },
773
779
  {
774
- name: "update",
780
+ name: "update", discovery: { surface: "managed", audiences: ["operator", "leader"] },
775
781
  summary: "Record progress or submit a Candidate; acceptance remains explicit.",
776
782
  usage: "yui task work update <task>/<work> <todo|running|done|failed> [--summary <text>] [--artifact-ref <artifact-id> ...]",
777
783
  options: ["--summary", "--artifact-ref"],
@@ -780,41 +786,41 @@ const taskChildren = [
780
786
  }
781
787
  },
782
788
  {
783
- name: "scope",
789
+ name: "scope", discovery: { surface: "managed", audiences: ["operator", "leader"] },
784
790
  summary: "Expand the Projects a WorkItem may modify.",
785
791
  usage: "yui task work scope <task>/<work> [--project <project> ...]",
786
792
  options: ["--project"]
787
793
  },
788
794
  {
789
- name: "dispatch",
795
+ name: "dispatch", discovery: { surface: "managed", audiences: ["operator", "leader"] },
790
796
  summary: "Dispatch a work item to its Role.",
791
797
  usage: "yui task work dispatch <task>/<work> [--input <text>] [--lane-role <role> ...]",
792
798
  options: ["--input", "--lane-role"]
793
799
  },
794
800
  {
795
- name: "synthesize",
801
+ name: "synthesize", discovery: { surface: "managed", audiences: ["operator", "leader"] },
796
802
  summary: "Dispatch synthesis over explicitly selected original Producer AgentRuns.",
797
803
  usage: "yui task work synthesize <task>/<work> --source-run <task>/<run> ...",
798
804
  options: ["--source-run"]
799
805
  },
800
806
  {
801
- name: "isolate",
807
+ name: "isolate", discovery: { surface: "managed", audiences: ["operator", "leader"] },
802
808
  summary: "Create a WorkItem-owned isolated worktree.",
803
809
  usage: "yui task work isolate <task>/<work>"
804
810
  },
805
811
  {
806
- name: "capture",
812
+ name: "capture", discovery: { surface: "managed", audiences: ["operator", "leader"] },
807
813
  summary: "Capture a terminal isolated WorkItem result as a ChangeSet.",
808
814
  usage: "yui task work capture <task>/<work>"
809
815
  },
810
816
  {
811
- name: "cleanup",
817
+ name: "cleanup", discovery: { surface: "managed", audiences: ["operator", "leader"] },
812
818
  summary: "Release an idle WorkItem runtime or remove its final clean worktree.",
813
819
  usage: "yui task work cleanup <task>/<work> (--runtime-only|--integrated|--abandon)",
814
820
  options: ["--runtime-only", "--integrated", "--abandon"]
815
821
  },
816
822
  {
817
- name: "review",
823
+ name: "review", discovery: { surface: "managed", audiences: ["operator", "leader"] },
818
824
  summary: "Ask the configured reviewer to inspect a WorkItem candidate directly or with replicated Producers.",
819
825
  usage: "yui task work review <task>/<work> [--lane-role <producer-role> --lane-role <producer-role> ...]",
820
826
  options: ["--lane-role"],
@@ -825,36 +831,36 @@ const taskChildren = [
825
831
  ],
826
832
  children: [
827
833
  {
828
- name: "retry",
834
+ name: "retry", discovery: { surface: "managed", audiences: ["operator", "leader"] },
829
835
  summary: "Retry a failed Task-final ReviewRound that has no Reviewer AgentRun.",
830
836
  usage: "yui task work review retry <task>/<review-round>"
831
837
  },
832
838
  {
833
- name: "cleanup",
839
+ name: "cleanup", discovery: { surface: "managed", audiences: ["operator", "leader"] },
834
840
  summary: "Remove only a clean terminal ReviewRound worktree.",
835
841
  usage: "yui task work review cleanup <task>/<review-round>"
836
842
  },
837
843
  {
838
- name: "preserve",
844
+ name: "preserve", discovery: { surface: "managed", audiences: ["operator", "leader"] },
839
845
  summary: "Record that a terminal ReviewRound worktree is retained for diagnosis.",
840
846
  usage: "yui task work review preserve <task>/<review-round>"
841
847
  }
842
848
  ]
843
849
  },
844
850
  {
845
- name: "accept",
851
+ name: "accept", discovery: { surface: "managed", audiences: ["operator", "leader"] },
846
852
  summary: "Accept a successful, validated, integrated Work Item.",
847
853
  usage: "yui task work accept <task>/<work> --summary <text> [--candidate <id>]",
848
854
  options: ["--summary", "--candidate"]
849
855
  },
850
856
  {
851
- name: "reject",
857
+ name: "reject", discovery: { surface: "managed", audiences: ["operator", "leader"] },
852
858
  summary: "Decline a result or withdraw acceptance while preserving its history.",
853
859
  usage: "yui task work reject <task>/<work> --summary <text>",
854
860
  options: ["--summary"]
855
861
  },
856
862
  {
857
- name: "retire",
863
+ name: "retire", discovery: { surface: "managed", audiences: ["operator", "leader"] },
858
864
  summary: "Retire a WorkItem and settle its exact AgentRuns.",
859
865
  usage: "yui task work retire <work> --summary <text> [--replacement <work>]",
860
866
  options: ["--summary", "--replacement"]
@@ -862,50 +868,52 @@ const taskChildren = [
862
868
  ]
863
869
  },
864
870
  {
865
- name: "run",
871
+ name: "run", discovery: { surface: "managed", audiences: ["operator", "leader"] },
866
872
  summary: "Inspect and control Task Role AgentRuns.",
867
873
  sections: [{ id: "manage", title: "Commands", entries: ["list", "show", "retry", "settle", "context", "checkpoint", "retire"] }],
868
874
  children: [
869
- { name: "list", summary: "List all AgentRuns for a Task or one WorkItem.", usage: "yui task run list <task|task/work>" },
875
+ { name: "list", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Discover AgentRuns for a Task or one WorkItem.", usage: "yui task run list <task|task/work> [--limit <1..100>] [--cursor <cursor>]", options: ["--limit", "--cursor"] },
870
876
  {
871
- name: "show",
877
+ name: "show", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
872
878
  summary: "Show one AgentRun and its retained audit evidence.",
873
- usage: "yui task run show <task>/<run> [--json]"
879
+ usage: "yui task run show <task>/<run> [--cursor <cursor>] [--json]",
880
+ options: ["--cursor", "--json"]
874
881
  },
875
882
  {
876
- name: "retry",
883
+ name: "retry", discovery: { surface: "managed", audiences: ["operator", "leader"] },
877
884
  summary: "Retry an exact failed execution or review AgentRun while preserving its semantic unit.",
878
885
  usage: "yui task run retry <task>/<run>"
879
886
  },
880
887
  {
881
- name: "settle",
888
+ name: "settle", discovery: { surface: "managed", audiences: ["operator", "leader"] },
882
889
  summary: "Explicitly settle a failed WorkItem Lane or an obsolete stranded final Review AgentRun.",
883
890
  usage: "yui task run settle <task>/<run>"
884
891
  },
885
892
  {
886
- name: "context",
893
+ name: "context", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
887
894
  summary: "Load the exact authorized AgentRun context.",
888
- usage: "yui task run context <task>/<run> [--json]",
895
+ usage: "yui task run context <task>/<run> [--cursor <cursor>] [--json]",
896
+ options: ["--cursor", "--json"],
889
897
  executable: true,
890
898
  hidden: true,
891
899
  sections: [{ id: "load", title: "Commands", entries: ["expand", "delta"] }],
892
900
  children: [
893
901
  {
894
- name: "expand",
902
+ name: "expand", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
895
903
  summary: "Expand one authorized AgentRun context reference.",
896
- usage: "yui task run context expand <task>/<run> <ref-id> --store <store> [--mode full]",
897
- options: ["--store", "--mode"]
904
+ usage: "yui task run context expand <task>/<run> <ref-id> --store <store> [--mode full] [--cursor <cursor>]",
905
+ options: ["--store", "--mode", "--cursor"]
898
906
  },
899
907
  {
900
- name: "delta",
908
+ name: "delta", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
901
909
  summary: "Load authorized AgentRun context changes after a cursor.",
902
- usage: "yui task run context delta <task>/<run> --after <cursor>",
903
- options: ["--after"]
910
+ usage: "yui task run context delta <task>/<run> --after <digest> [--cursor <cursor>]",
911
+ options: ["--after", "--cursor"]
904
912
  }
905
913
  ]
906
914
  },
907
915
  {
908
- name: "checkpoint",
916
+ name: "checkpoint", discovery: { surface: "runtime", audiences: [] },
909
917
  summary: "Record durable progress for a long-running AgentRun.",
910
918
  usage: "yui task run checkpoint <run> (--note <text>|--note-file <path|->)",
911
919
  options: ["--note", "--note-file"],
@@ -913,7 +921,7 @@ const taskChildren = [
913
921
  hidden: true
914
922
  },
915
923
  {
916
- name: "retire",
924
+ name: "retire", discovery: { surface: "managed", audiences: ["operator", "leader"] },
917
925
  summary: "Retire an incorrect historical AgentRun without deleting its audit record.",
918
926
  usage: "yui task run retire <task>/<run> --reason <text> [--expected-progress-at <timestamp>] [--agent-id <id>] [--adapter-id <id>] [--native-session-id <id>]",
919
927
  options: ["--reason", "--expected-progress-at", "--agent-id", "--adapter-id", "--native-session-id"]
@@ -921,78 +929,78 @@ const taskChildren = [
921
929
  ]
922
930
  },
923
931
  {
924
- name: "review",
932
+ name: "review", discovery: { surface: "managed", audiences: ["operator", "leader"] },
925
933
  summary: "Control Task-final ReviewRounds.",
926
934
  sections: [{ id: "manage", title: "Commands", entries: ["request", "synthesize", "retry"] }],
927
935
  children: [
928
936
  {
929
- name: "synthesize",
937
+ name: "synthesize", discovery: { surface: "managed", audiences: ["operator", "leader"] },
930
938
  summary: "Dispatch main Review over selected Producer AgentRuns and the frozen candidate.",
931
939
  usage: "yui task review synthesize <task>/<review-round> --source-run <task>/<run> ...",
932
940
  options: ["--source-run"]
933
941
  },
934
942
  {
935
- name: "request",
943
+ name: "request", discovery: { surface: "managed", audiences: ["operator", "leader"] },
936
944
  summary: "Request a direct or replicated Task-local final ReviewRound.",
937
945
  usage: "yui task review request <task> --role <main-role> [--lane-role <producer-role> --lane-role <producer-role> ...] [--delta-recheck]",
938
946
  options: ["--role", "--lane-role", "--delta-recheck"]
939
947
  },
940
948
  {
941
- name: "retry",
949
+ name: "retry", discovery: { surface: "managed", audiences: ["operator", "leader"] },
942
950
  summary: "Retry a failed Task-final ReviewRound without a Reviewer AgentRun.",
943
951
  usage: "yui task review retry <task>/<review-round>"
944
952
  }
945
953
  ]
946
954
  },
947
955
  {
948
- name: "integration",
956
+ name: "integration", discovery: { surface: "managed", audiences: ["operator", "leader"] },
949
957
  summary: "Integrate WorkItem results and upstream commits with Leader-owned decisions.",
950
958
  sections: [{ id: "manage", title: "Commands", entries: ["start", "continue", "resolve", "abort", "supersede", "list", "show", "cleanup"] }],
951
959
  children: [
952
960
  {
953
- name: "start",
961
+ name: "start", discovery: { surface: "managed", audiences: ["operator", "leader"] },
954
962
  summary: "Build, validate, and CAS-commit an integration candidate.",
955
963
  usage: "yui task integration start <task> --work-item <id> --strategy <ff|cherry-pick|merge|manual> [--project <project>] [--target <ref>] [--check <command> ...] [--rerun-checks]",
956
964
  options: ["--work-item", "--strategy", "--project", "--target", "--check", "--rerun-checks"],
957
965
  optionValues: { "--strategy": ["ff", "cherry-pick", "merge", "manual"] }
958
966
  },
959
967
  {
960
- name: "continue",
968
+ name: "continue", discovery: { surface: "managed", audiences: ["operator", "leader"] },
961
969
  summary: "Consume a finished check Job and finalize this exact Integration, or continue an approved manual resolution.",
962
970
  usage: "yui task integration continue <task>/<integration>"
963
971
  },
964
972
  {
965
- name: "resolve",
973
+ name: "resolve", discovery: { surface: "managed", audiences: ["operator", "leader"] },
966
974
  summary: "Record the Leader's semantic conflict decision.",
967
975
  usage: "yui task integration resolve <task>/<integration> --option <manual-resolution|reject> --rationale <text>",
968
976
  options: ["--option", "--rationale"],
969
977
  optionValues: { "--option": ["manual-resolution", "reject"] }
970
978
  },
971
979
  {
972
- name: "abort",
980
+ name: "abort", discovery: { surface: "managed", audiences: ["operator", "leader"] },
973
981
  summary: "Abandon an unadvanced Integration while preserving evidence; reconcile an already-applied target.",
974
982
  usage: "yui task integration abort <task>/<integration> --reason <text>",
975
983
  options: ["--reason"]
976
984
  },
977
985
  {
978
- name: "supersede",
986
+ name: "supersede", discovery: { surface: "managed", audiences: ["operator", "leader"] },
979
987
  summary: "Mark a committed Integration as obsolete, retaining its evidence.",
980
988
  usage: "yui task integration supersede <task>/<integration> --reason <text>",
981
989
  options: ["--reason"]
982
990
  },
983
- { name: "list", summary: "List Integration Attempts.", usage: "yui task integration list <task>" },
984
- { name: "show", summary: "Show one Integration Attempt.", usage: "yui task integration show <task>/<integration>" },
985
- { name: "cleanup", summary: "Remove a terminal Integration worktree and branch.", usage: "yui task integration cleanup <task>/<integration>" }
991
+ { name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "List Integration Attempts.", usage: "yui task integration list <task>" },
992
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Show one Integration Attempt.", usage: "yui task integration show <task>/<integration>" },
993
+ { name: "cleanup", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Remove a terminal Integration worktree and branch.", usage: "yui task integration cleanup <task>/<integration>" }
986
994
  ]
987
995
  },
988
996
  {
989
- name: "brief",
997
+ name: "brief", discovery: { surface: "managed", audiences: ["operator", "leader"] },
990
998
  summary: "Manage the Task Brief, the authoritative summary of current task state.",
991
999
  sections: [{ id: "manage", title: "Commands", entries: ["show", "update"] }],
992
1000
  children: [
993
- { name: "show", summary: "Show the Task Brief.", usage: "yui task brief show <task>" },
1001
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Show the Task Brief.", usage: "yui task brief show <task> [--cursor <cursor>]", options: ["--cursor"] },
994
1002
  {
995
- name: "update",
1003
+ name: "update", discovery: { surface: "managed", audiences: ["operator", "leader"] },
996
1004
  summary: "Create or update the Task Brief.",
997
1005
  usage: "yui task brief update <task> [--objective <text>] [--boundary <text> ...] [--approach <text>] [--focus <text>] [--leader-summary <text>]",
998
1006
  options: ["--objective", "--boundary", "--approach", "--focus", "--leader-summary"]
@@ -1000,26 +1008,26 @@ const taskChildren = [
1000
1008
  ]
1001
1009
  },
1002
1010
  {
1003
- name: "decision",
1011
+ name: "decision", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1004
1012
  summary: "Record and supersede durable Task decisions.",
1005
1013
  sections: [{ id: "manage", title: "Commands", entries: ["record", "list", "show", "supersede"] }],
1006
1014
  children: [
1007
1015
  {
1008
- name: "record",
1016
+ name: "record", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1009
1017
  summary: "Record a new active Decision.",
1010
1018
  usage: "yui task decision record <task> --title <text> --rationale <text>",
1011
1019
  options: ["--title", "--rationale"]
1012
1020
  },
1013
1021
  {
1014
- name: "list",
1022
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
1015
1023
  summary: "List Decisions for a Task.",
1016
- usage: "yui task decision list <task> [--status active|superseded]",
1017
- options: ["--status"],
1024
+ usage: "yui task decision list <task> [--status active|superseded] [--limit <1..100>] [--cursor <cursor>]",
1025
+ options: ["--status", "--limit", "--cursor"],
1018
1026
  optionValues: { "--status": ["active", "superseded"] }
1019
1027
  },
1020
- { name: "show", summary: "Show one Decision.", usage: "yui task decision show <task> <decision>" },
1028
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "Show one Decision.", usage: "yui task decision show <task> <decision> [--cursor <cursor>]", options: ["--cursor"] },
1021
1029
  {
1022
- name: "supersede",
1030
+ name: "supersede", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1023
1031
  summary: "Mark a Decision as superseded.",
1024
1032
  usage: "yui task decision supersede <task> <decision> --reason <text>",
1025
1033
  options: ["--reason"]
@@ -1027,41 +1035,41 @@ const taskChildren = [
1027
1035
  ]
1028
1036
  },
1029
1037
  {
1030
- name: "milestone",
1038
+ name: "milestone", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1031
1039
  summary: "Append immutable Milestone records for completed progress.",
1032
1040
  sections: [{ id: "manage", title: "Commands", entries: ["add", "list", "show"] }],
1033
1041
  children: [
1034
1042
  {
1035
- name: "add",
1043
+ name: "add", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1036
1044
  summary: "Append a Milestone to a Task.",
1037
1045
  usage: "yui task milestone add <task> --title <text> --summary <text>",
1038
1046
  options: ["--title", "--summary"]
1039
1047
  },
1040
- { name: "list", summary: "List Milestones for a Task.", usage: "yui task milestone list <task>" },
1041
- { name: "show", summary: "Show one Milestone.", usage: "yui task milestone show <task> <milestone>" }
1048
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "List Milestones for a Task.", usage: "yui task milestone list <task> [--limit <1..100>] [--cursor <cursor>]", options: ["--limit", "--cursor"] },
1049
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "Show one Milestone.", usage: "yui task milestone show <task> <milestone> [--cursor <cursor>]", options: ["--cursor"] }
1042
1050
  ]
1043
1051
  },
1044
1052
  {
1045
- name: "event",
1053
+ name: "event", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1046
1054
  summary: "Inspect the durable Task event history.",
1047
1055
  sections: [{ id: "manage", title: "Commands", entries: ["list", "show"] }],
1048
1056
  children: [
1049
1057
  {
1050
- name: "list",
1058
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] },
1051
1059
  summary: "List Task events.",
1052
- usage: "yui task event list <task> [--after <timestamp>] [--limit <n>]",
1053
- options: ["--after", "--limit"]
1060
+ usage: "yui task event list <task> [--after <timestamp>] [--limit <1..100>] [--cursor <cursor>]",
1061
+ options: ["--after", "--limit", "--cursor"]
1054
1062
  },
1055
- { name: "show", summary: "Show one Task event.", usage: "yui task event show <task> <event>" }
1063
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment"] }, summary: "Show one Task event.", usage: "yui task event show <task> <event> [--cursor <cursor>]", options: ["--cursor"] }
1056
1064
  ]
1057
1065
  },
1058
1066
  {
1059
- name: "continuation",
1067
+ name: "continuation", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1060
1068
  summary: "Inspect native Provider child continuations and their durability mode.",
1061
1069
  sections: [{ id: "manage", title: "Commands", entries: ["list"] }],
1062
1070
  children: [
1063
1071
  {
1064
- name: "list",
1072
+ name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1065
1073
  summary: "List native child continuations for a Task.",
1066
1074
  usage: "yui task continuation list <task> [--json]",
1067
1075
  options: ["--json"]
@@ -1069,35 +1077,35 @@ const taskChildren = [
1069
1077
  ]
1070
1078
  },
1071
1079
  {
1072
- name: "wake",
1080
+ name: "wake", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1073
1081
  summary: "Inspect the durable Leader wake ledger and its delta content.",
1074
1082
  sections: [{ id: "manage", title: "Commands", entries: ["list", "show", "retry", "resolve"] }],
1075
1083
  children: [
1076
- { name: "list", summary: "List recorded Leader wakes.", usage: "yui task wake list <task>" },
1077
- { name: "show", summary: "Show one wake and its delta content.", usage: "yui task wake show <task> <wake>" },
1078
- { name: "retry", summary: "Retry a rejected notification after correcting its cause; preserve original input.",
1084
+ { name: "list", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "List recorded Leader wakes.", usage: "yui task wake list <task> [--limit <1..100>] [--cursor <cursor>]", options: ["--limit", "--cursor"] },
1085
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Show a fixed wake window and exact detail reads.", usage: "yui task wake show <task> <wake> [--cursor <cursor>]", options: ["--cursor"] },
1086
+ { name: "retry", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Retry a rejected notification after correcting its cause; preserve original input.",
1079
1087
  usage: "yui task wake retry <task> <wake> --reason <correction>", options: ["--reason"] },
1080
- { name: "resolve", summary: "Release an unknown notification claim after explicit quiescence evidence, without replay.",
1088
+ { name: "resolve", discovery: { surface: "managed", audiences: ["operator", "leader"] }, summary: "Release an unknown notification claim after explicit quiescence evidence, without replay.",
1081
1089
  usage: "yui task wake resolve <task> <wake> --reason <quiescence-evidence>", options: ["--reason"] }
1082
1090
  ]
1083
1091
  },
1084
1092
  {
1085
- name: "overlap",
1093
+ name: "overlap", discovery: { surface: "public", audiences: ["public", "operator"] },
1086
1094
  summary: "Show read-only cross-Task overlap diagnostics.",
1087
1095
  usage: "yui task overlap [--project <project>] [--base <sha>] [--task <task> ...]",
1088
1096
  options: ["--project", "--base", "--task"]
1089
1097
  },
1090
1098
  {
1091
- name: "change-set",
1099
+ name: "change-set", discovery: { surface: "managed", audiences: ["operator", "leader"] },
1092
1100
  summary: "Inspect ChangeSets captured from WorkItem Candidates.",
1093
1101
  sections: [{ id: "inspect", title: "Commands", entries: ["show"] }],
1094
1102
  children: [
1095
- { name: "show", summary: "Show one ChangeSet.", usage: "yui task change-set show <task>/<change-set>" }
1103
+ { name: "show", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Show one ChangeSet.", usage: "yui task change-set show <task>/<change-set> [--cursor <cursor>]", options: ["--cursor"] }
1096
1104
  ]
1097
1105
  },
1098
1106
  ];
1099
1107
  export const ROOT_COMMAND = buildNode({
1100
- name: "yui",
1108
+ name: "yui", discovery: { surface: "public", audiences: ["public", "operator"] },
1101
1109
  summary: "Coordinate durable, isolated Agent work.",
1102
1110
  usage: "yui [--json] <command>",
1103
1111
  examples: ["yui setup", "yui start", "yui operator enter", "yui task list"],
@@ -1113,62 +1121,72 @@ export const ROOT_COMMAND = buildNode({
1113
1121
  ],
1114
1122
  children: [
1115
1123
  {
1116
- name: "role",
1124
+ name: "role", discovery: { surface: "public", audiences: ["public", "operator"] },
1117
1125
  summary: "Queue input or control an exact current Global Role Turn.",
1118
1126
  sections: [{ id: "input", title: "Input control", entries: ["message", "interrupt"] }],
1119
1127
  children: [
1120
1128
  {
1121
- name: "message", summary: "Send durable input to a Global Role.",
1122
- sections: [{ id: "input", title: "Input control", entries: ["queue", "steer"] }],
1129
+ name: "message", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Send durable input to a Global Role.",
1130
+ sections: [{ id: "input", title: "Input control", entries: ["queue", "steer", "list", "show"] }],
1123
1131
  children: [
1124
1132
  {
1125
- name: "queue", summary: "Queue input for the next legal delivery opportunity.",
1133
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Discover Global Messages without consuming input.",
1134
+ usage: "yui role message list <role> [--pending] [--limit <1..100>] [--cursor <cursor>]",
1135
+ options: ["--pending", "--limit", "--cursor"]
1136
+ },
1137
+ {
1138
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Read one exact Global Message; follow contentPage.nextCursor for long content.",
1139
+ usage: "yui role message show <role> <message-id> [--cursor <cursor>]",
1140
+ options: ["--cursor"]
1141
+ },
1142
+ {
1143
+ name: "queue", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Queue input for the next legal delivery opportunity.",
1126
1144
  usage: "yui role message queue <role> (<text>|--body-file <path|->) --request-id <id>",
1127
1145
  options: ["--request-id", "--body-file"], fileOptions: ["--body-file"]
1128
1146
  },
1129
1147
  {
1130
- name: "steer", summary: "Steer the exact current native Turn.",
1148
+ name: "steer", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Steer the exact current native Turn.",
1131
1149
  usage: "yui role message steer <role> (<text>|--body-file <path|->) --request-id <id> --expected-target <turn>",
1132
1150
  options: ["--request-id", "--expected-target", "--body-file"], fileOptions: ["--body-file"]
1133
1151
  }
1134
1152
  ]
1135
1153
  },
1136
1154
  {
1137
- name: "interrupt", summary: "Request cancellation of the exact current native Turn.",
1155
+ name: "interrupt", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Request cancellation of the exact current native Turn.",
1138
1156
  usage: "yui role interrupt <role> --expected-target <turn> [--request-id <id>] [--then-message <message>]",
1139
1157
  options: ["--request-id", "--expected-target", "--then-message"]
1140
1158
  }
1141
1159
  ]
1142
1160
  },
1143
- { name: "help", summary: "Show root or scoped command help.", usage: "yui help [command ...]", commandPathArguments: true },
1144
- { name: "version", summary: "Print the installed Yui version." },
1161
+ { name: "help", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global", "unbound"] }, summary: "Show root or scoped command help.", usage: "yui help [command ...]", commandPathArguments: true },
1162
+ { name: "version", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global", "unbound"] }, summary: "Print the installed Yui version." },
1145
1163
  {
1146
- name: "update",
1164
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator"] },
1147
1165
  summary: "Install the latest or an exact published Yui version after storage preflight.",
1148
1166
  usage: "yui update [--version <exact-version>]",
1149
1167
  options: ["--version"]
1150
1168
  },
1151
1169
  {
1152
- name: "upgrade",
1170
+ name: "upgrade", discovery: { surface: "public", audiences: ["public", "operator"] },
1153
1171
  summary: "Plan or apply supported storage migrations for this Home.",
1154
1172
  usage: "yui upgrade [--dry-run]",
1155
1173
  options: ["--dry-run"]
1156
1174
  },
1157
1175
  {
1158
- name: "setup",
1176
+ name: "setup", discovery: { surface: "public", audiences: ["public", "operator"] },
1159
1177
  summary: "Initialize the minimum Operator and Leader configuration required to execute Tasks.",
1160
1178
  examples: "yui setup"
1161
1179
  },
1162
- { name: "start", summary: "Start the Controller and Codex shared runtime needed by active Roles." },
1163
- { name: "doctor", summary: "Check Yui dependencies and file state." },
1180
+ { name: "start", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Start the Controller and Codex shared runtime needed by active Roles." },
1181
+ { name: "doctor", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global", "unbound"] }, summary: "Check Yui dependencies and file state." },
1164
1182
  {
1165
- name: "web",
1183
+ name: "web", discovery: { surface: "public", audiences: ["public", "operator"] },
1166
1184
  summary: "Serve the control room using the running Controller's capability Host.",
1167
1185
  usage: "yui web [--host <loopback>] [--port <port>] | --status | --stop",
1168
1186
  options: ["--host", "--port", "--status", "--stop"]
1169
1187
  },
1170
1188
  {
1171
- name: "controller",
1189
+ name: "controller", discovery: { surface: "public", audiences: ["public", "operator"] },
1172
1190
  summary: "Inspect and recover local Controller runtime resources.",
1173
1191
  sections: [{
1174
1192
  id: "lifecycle",
@@ -1177,34 +1195,34 @@ export const ROOT_COMMAND = buildNode({
1177
1195
  }],
1178
1196
  children: [
1179
1197
  {
1180
- name: "status",
1198
+ name: "status", discovery: { surface: "public", audiences: ["public", "operator"] },
1181
1199
  summary: "Show Controller and AgentRuntime resources.",
1182
1200
  usage: "yui controller status [--all] [--verbose]",
1183
1201
  options: ["--all", "--verbose"]
1184
1202
  },
1185
1203
  {
1186
- name: "cleanup",
1204
+ name: "cleanup", discovery: { surface: "public", audiences: ["public", "operator"] },
1187
1205
  summary: "Interactively clean confirmed unused runtime resources.",
1188
1206
  usage: "yui controller cleanup [--all]",
1189
1207
  options: ["--all"]
1190
1208
  },
1191
1209
  {
1192
- name: "identity",
1210
+ name: "identity", discovery: { surface: "runtime", audiences: [] },
1193
1211
  summary: "Read the stable runtime identity receipt (build, backend, worker).",
1194
1212
  hidden: true
1195
1213
  },
1196
1214
  {
1197
- name: "live-identity",
1215
+ name: "live-identity", discovery: { surface: "runtime", audiences: [] },
1198
1216
  summary: "Read the authenticated live Controller runtime identity.",
1199
1217
  hidden: true
1200
1218
  },
1201
- { name: "start", summary: "Start the Controller for this Home without preparing Agent runtimes." },
1202
- { name: "stop", summary: "Stop the Controller." },
1203
- { name: "restart", summary: "Restart internal services without stopping tmux sessions." }
1219
+ { name: "start", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Start the Controller for this Home without preparing Agent runtimes." },
1220
+ { name: "stop", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Stop the Controller." },
1221
+ { name: "restart", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Restart internal services without stopping tmux sessions." }
1204
1222
  ]
1205
1223
  },
1206
1224
  {
1207
- name: "execution",
1225
+ name: "execution", discovery: { surface: "public", audiences: ["public", "operator"] },
1208
1226
  summary: "Read-only execution history audit.",
1209
1227
  sections: [{
1210
1228
  id: "reports",
@@ -1213,7 +1231,7 @@ export const ROOT_COMMAND = buildNode({
1213
1231
  }],
1214
1232
  children: [
1215
1233
  {
1216
- name: "audit",
1234
+ name: "audit", discovery: { surface: "public", audiences: ["public", "operator"] },
1217
1235
  summary: "Report AgentRuns, wakes, Sessions, Reviews, Integrations, and telemetry volume.",
1218
1236
  usage: "yui execution audit [--task <id>] [--since <iso>] [--until <iso>]",
1219
1237
  options: ["--task", "--since", "--until"]
@@ -1221,7 +1239,7 @@ export const ROOT_COMMAND = buildNode({
1221
1239
  ]
1222
1240
  },
1223
1241
  {
1224
- name: "release",
1242
+ name: "release", discovery: { surface: "public", audiences: ["public", "operator"] },
1225
1243
  summary: "Install and activate immutable local runtime releases.",
1226
1244
  sections: [{
1227
1245
  id: "commands",
@@ -1230,25 +1248,25 @@ export const ROOT_COMMAND = buildNode({
1230
1248
  }],
1231
1249
  children: [
1232
1250
  {
1233
- name: "install",
1251
+ name: "install", discovery: { surface: "public", audiences: ["public", "operator"] },
1234
1252
  summary: "Install a runtime package as an immutable release.",
1235
1253
  usage: "yui release install <source-dir>"
1236
1254
  },
1237
- { name: "list", summary: "List installed releases and the active pointer." },
1255
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "List installed releases and the active pointer." },
1238
1256
  {
1239
- name: "activate",
1257
+ name: "activate", discovery: { surface: "public", audiences: ["public", "operator"] },
1240
1258
  summary: "Activate a release via atomic Controller handover.",
1241
1259
  usage: "yui release activate [release-id]"
1242
1260
  }
1243
1261
  ]
1244
1262
  },
1245
1263
  {
1246
- name: "resources",
1264
+ name: "resources", discovery: { surface: "public", audiences: ["public", "operator"] },
1247
1265
  summary: "Inspect and garbage-collect managed worktrees, deployments, and runtime artifacts.",
1248
1266
  sections: [{ id: "gc", title: "Commands", entries: ["gc"] }],
1249
1267
  children: [
1250
1268
  {
1251
- name: "gc",
1269
+ name: "gc", discovery: { surface: "public", audiences: ["public", "operator"] },
1252
1270
  summary: "Plan or apply resource garbage collection.",
1253
1271
  usage: "yui resources gc [--dry-run|--apply|--purge|--restore] [--quarantine-ttl-hours <hours>]",
1254
1272
  options: ["--dry-run", "--apply", "--purge", "--restore", "--quarantine-ttl-hours"]
@@ -1256,7 +1274,7 @@ export const ROOT_COMMAND = buildNode({
1256
1274
  ]
1257
1275
  },
1258
1276
  {
1259
- name: "config",
1277
+ name: "config", discovery: { surface: "public", audiences: ["public", "operator"] },
1260
1278
  summary: "Inspect, understand, and update all persistent Yui configuration.",
1261
1279
  examples: [
1262
1280
  "yui config show",
@@ -1275,12 +1293,12 @@ export const ROOT_COMMAND = buildNode({
1275
1293
  ],
1276
1294
  children: [
1277
1295
  {
1278
- name: "show",
1296
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] },
1279
1297
  summary: "Show the complete effective Yui configuration.",
1280
1298
  examples: ["yui config show", "yui --json config show"]
1281
1299
  },
1282
1300
  {
1283
- name: "describe",
1301
+ name: "describe", discovery: { surface: "public", audiences: ["public", "operator", "leader", "assignment", "global"] },
1284
1302
  summary: "Explain configuration effects, defaults, choices, and activation behavior.",
1285
1303
  usage: `yui config describe [${[...CONFIG_DOMAINS, "agent", "role", "profile", "completion"].join("|")}]`,
1286
1304
  examples: ["yui config describe", "yui --json config describe role"],
@@ -1288,7 +1306,7 @@ export const ROOT_COMMAND = buildNode({
1288
1306
  },
1289
1307
  ...CONFIG_DOMAINS.map(durableConfigDomainNode),
1290
1308
  {
1291
- name: "agent",
1309
+ name: "agent", discovery: { surface: "public", audiences: ["public", "operator"] },
1292
1310
  summary: "Manage configured native Agent CLIs; launch-setting changes apply to the next Session activation.",
1293
1311
  examples: ["yui config agent list", "yui config agent capabilities codex"],
1294
1312
  sections: [
@@ -1298,7 +1316,7 @@ export const ROOT_COMMAND = buildNode({
1298
1316
  children: agentChildren
1299
1317
  },
1300
1318
  {
1301
- name: "profile",
1319
+ name: "profile", discovery: { surface: "public", audiences: ["public", "operator"] },
1302
1320
  summary: "Manage reusable Agent Profiles; updates affect future copies and do not rewrite existing Task Roles.",
1303
1321
  examples: ["yui config profile list", "yui config profile show implementer"],
1304
1322
  sections: [
@@ -1308,7 +1326,7 @@ export const ROOT_COMMAND = buildNode({
1308
1326
  children: profileChildren
1309
1327
  },
1310
1328
  {
1311
- name: "role",
1329
+ name: "role", discovery: { surface: "public", audiences: ["public", "operator"] },
1312
1330
  summary: "Manage reusable global Roles and desired Agent launch configuration for the next Host process.",
1313
1331
  examples: ["yui config role list", "yui config role show operator"],
1314
1332
  sections: [
@@ -1318,7 +1336,7 @@ export const ROOT_COMMAND = buildNode({
1318
1336
  children: roleChildren
1319
1337
  },
1320
1338
  {
1321
- name: "completion",
1339
+ name: "completion", discovery: { surface: "public", audiences: ["public", "operator"] },
1322
1340
  summary: "Interactively configure shell completion after confirming generated files and startup-file changes.",
1323
1341
  executable: true,
1324
1342
  acceptsArguments: false,
@@ -1333,7 +1351,7 @@ export const ROOT_COMMAND = buildNode({
1333
1351
  ]
1334
1352
  },
1335
1353
  {
1336
- name: "operator",
1354
+ name: "operator", discovery: { surface: "public", audiences: ["public", "operator"] },
1337
1355
  summary: "Use the persistent Operator Actor.",
1338
1356
  sections: [{
1339
1357
  id: "workflow",
@@ -1341,23 +1359,23 @@ export const ROOT_COMMAND = buildNode({
1341
1359
  entries: ["enter", "status", "new", "list", "resume", "submit"]
1342
1360
  }],
1343
1361
  children: [
1344
- { name: "enter", summary: "Enter the Operator's native session." },
1345
- { name: "status", summary: "Show the unique active writer and retained conversation history." },
1362
+ { name: "enter", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Enter the Operator's native session." },
1363
+ { name: "status", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Show the unique active writer and retained conversation history." },
1346
1364
  {
1347
- name: "new",
1365
+ name: "new", discovery: { surface: "public", audiences: ["public", "operator"] },
1348
1366
  summary: "Start a new Operator session.",
1349
1367
  usage: "yui operator new [--agent <id>]",
1350
1368
  options: ["--agent"]
1351
1369
  },
1352
- { name: "list", summary: "List Operator session history." },
1370
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "List Operator session history." },
1353
1371
  {
1354
- name: "resume",
1372
+ name: "resume", discovery: { surface: "public", audiences: ["public", "operator"] },
1355
1373
  summary: "Resume a previous Operator session.",
1356
1374
  usage: "yui operator resume [<ref> | --last]",
1357
1375
  options: ["--last"]
1358
1376
  },
1359
1377
  {
1360
- name: "submit",
1378
+ name: "submit", discovery: { surface: "public", audiences: ["public", "operator"] },
1361
1379
  summary: "Submit work through the Operator with a submission intent (record|discuss|develop); a task-less submit opens a Draft. An optional idempotency key makes a retry safe.",
1362
1380
  usage: "yui operator submit (<body>|--body-file <path|->) [--task <id>] [--intent record|discuss|develop] [--request-id <key>]",
1363
1381
  options: ["--task", "--body-file", "--intent", "--request-id"],
@@ -1369,7 +1387,7 @@ export const ROOT_COMMAND = buildNode({
1369
1387
  ]
1370
1388
  },
1371
1389
  {
1372
- name: "project",
1390
+ name: "project", discovery: { surface: "public", audiences: ["public", "operator"] },
1373
1391
  summary: "Manage Projects, stable checkouts, branches, and Yui knowledge.",
1374
1392
  sections: [
1375
1393
  { id: "manage", title: "Commands", entries: ["add", "clone", "refresh", "diagnose", "migrate", "update", "discover", "list", "show", "knowledge"] },
@@ -1377,60 +1395,60 @@ export const ROOT_COMMAND = buildNode({
1377
1395
  ],
1378
1396
  children: [
1379
1397
  {
1380
- name: "add",
1398
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator"] },
1381
1399
  summary: "Bind a Project to a stable Git checkout.",
1382
1400
  usage: "yui project add <name> <path> [--alias <name> ...] [--remote <url>] [--stable <ref>] [--development <ref>]",
1383
1401
  options: ["--alias", "--remote", "--stable", "--development"],
1384
1402
  fileArguments: [1]
1385
1403
  },
1386
1404
  {
1387
- name: "clone",
1405
+ name: "clone", discovery: { surface: "public", audiences: ["public", "operator"] },
1388
1406
  summary: "Clone and bind a Project after user confirmation.",
1389
1407
  usage: "yui project clone <name> <remote> [--alias <name> ...] [--stable <ref>] [--development <ref>] [--external]",
1390
1408
  options: ["--alias", "--stable", "--development", "--external"]
1391
1409
  },
1392
1410
  {
1393
- name: "refresh",
1411
+ name: "refresh", discovery: { surface: "public", audiences: ["public", "operator"] },
1394
1412
  summary: "Fast-forward a clean stable checkout from its configured remote.",
1395
1413
  usage: "yui project refresh <project>"
1396
1414
  },
1397
1415
  {
1398
- name: "diagnose",
1416
+ name: "diagnose", discovery: { surface: "public", audiences: ["public", "operator"] },
1399
1417
  summary: "Show canonical HEAD vs remote head without mutating the checkout.",
1400
1418
  usage: "yui project diagnose <project>"
1401
1419
  },
1402
1420
  {
1403
- name: "migrate",
1421
+ name: "migrate", discovery: { surface: "public", audiences: ["public", "operator"] },
1404
1422
  summary: "Move an external Project into a Home-managed repository.",
1405
1423
  usage: "yui project migrate <project> [--preflight]",
1406
1424
  options: ["--preflight"]
1407
1425
  },
1408
1426
  {
1409
- name: "reset",
1427
+ name: "reset", discovery: { surface: "public", audiences: ["public", "operator"] },
1410
1428
  summary: "Hard-reset a canonical checkout to its verified remote baseline (Operator authority).",
1411
1429
  usage: "yui project reset <project> [--discard-local]",
1412
1430
  options: ["--discard-local"]
1413
1431
  },
1414
1432
  {
1415
- name: "replace",
1433
+ name: "replace", discovery: { surface: "public", audiences: ["public", "operator"] },
1416
1434
  summary: "Re-clone a Home-managed checkout from its remote, preserving Yui refs (Operator authority).",
1417
1435
  usage: "yui project replace <project> --discard-local",
1418
1436
  options: ["--discard-local"]
1419
1437
  },
1420
1438
  {
1421
- name: "retire",
1439
+ name: "retire", discovery: { surface: "public", audiences: ["public", "operator"] },
1422
1440
  summary: "Soft-deprecate a Project; record and evidence are retained (Operator authority).",
1423
1441
  usage: "yui project retire <project> --reason <text>",
1424
1442
  options: ["--reason"]
1425
1443
  },
1426
1444
  {
1427
- name: "delete",
1445
+ name: "delete", discovery: { surface: "public", audiences: ["public", "operator"] },
1428
1446
  summary: "Remove a retired Project's catalog record and optionally its checkout (Operator authority).",
1429
1447
  usage: "yui project delete <project> [--checkout] --confirm <project-id>",
1430
1448
  options: ["--checkout", "--confirm"]
1431
1449
  },
1432
1450
  {
1433
- name: "update",
1451
+ name: "update", discovery: { surface: "public", audiences: ["public", "operator"] },
1434
1452
  summary: "Update a bound Project's aliases, remote, or branch refs.",
1435
1453
  usage: "yui project update <project> [--alias <name> ...|--clear-aliases] [--remote <url>|--clear-remote] [--stable <ref>] [--development <ref>]",
1436
1454
  options: [
@@ -1439,14 +1457,14 @@ export const ROOT_COMMAND = buildNode({
1439
1457
  ]
1440
1458
  },
1441
1459
  {
1442
- name: "discover",
1460
+ name: "discover", discovery: { surface: "public", audiences: ["public", "operator"] },
1443
1461
  summary: "Find Git projects directly under the configured workspace.",
1444
1462
  usage: "yui project discover [name]"
1445
1463
  },
1446
- { name: "list", summary: "List bound Projects." },
1447
- { name: "show", summary: "Show one Project.", usage: "yui project show <project>" },
1464
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "List bound Projects." },
1465
+ { name: "show", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Show one Project.", usage: "yui project show <project>" },
1448
1466
  {
1449
- name: "knowledge",
1467
+ name: "knowledge", discovery: { surface: "public", audiences: ["public", "operator"] },
1450
1468
  summary: "Manage durable Project knowledge stored by Yui.",
1451
1469
  sections: [
1452
1470
  {
@@ -1457,29 +1475,29 @@ export const ROOT_COMMAND = buildNode({
1457
1475
  ],
1458
1476
  children: [
1459
1477
  {
1460
- name: "add",
1478
+ name: "add", discovery: { surface: "public", audiences: ["public", "operator"] },
1461
1479
  summary: "Add Project knowledge (Operator authority).",
1462
1480
  usage: "yui project knowledge add <project> <title> --body <text>",
1463
1481
  options: ["--body"]
1464
1482
  },
1465
1483
  {
1466
- name: "retire",
1484
+ name: "retire", discovery: { surface: "public", audiences: ["public", "operator"] },
1467
1485
  summary: "Retire Project knowledge without deleting its record (Operator authority).",
1468
1486
  usage: "yui project knowledge retire <project> <knowledge>"
1469
1487
  },
1470
1488
  {
1471
- name: "list",
1489
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
1472
1490
  summary: "List Project knowledge.",
1473
1491
  usage: "yui project knowledge list <project> [--all]",
1474
1492
  options: ["--all"]
1475
1493
  },
1476
1494
  {
1477
- name: "show",
1495
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
1478
1496
  summary: "Read one Project knowledge entry.",
1479
1497
  usage: "yui project knowledge show <project> <knowledge>"
1480
1498
  },
1481
1499
  {
1482
- name: "propose",
1500
+ name: "propose", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
1483
1501
  summary: "Propose a Task conclusion for promotion into Project knowledge.",
1484
1502
  usage: "yui project knowledge propose <project> --title <text> --body <text> --task <task>"
1485
1503
  + " [--decision <id>] [--milestone <id>] [--commit <sha>] [--scope <text>]"
@@ -1487,31 +1505,31 @@ export const ROOT_COMMAND = buildNode({
1487
1505
  options: ["--title", "--body", "--task", "--decision", "--milestone", "--commit", "--scope", "--expires-when", "--supersedes"]
1488
1506
  },
1489
1507
  {
1490
- name: "proposals",
1508
+ name: "proposals", discovery: { surface: "public", audiences: ["public", "operator"] },
1491
1509
  summary: "List or show Knowledge promotion proposals.",
1492
1510
  sections: [{ id: "manage", title: "Commands", entries: ["list", "show"] }],
1493
1511
  children: [
1494
1512
  {
1495
- name: "list",
1513
+ name: "list", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
1496
1514
  summary: "List Knowledge promotion proposals (pending by default).",
1497
1515
  usage: "yui project knowledge proposals list <project> [--status pending|accepted|rejected] [--all]",
1498
1516
  options: ["--status", "--all"]
1499
1517
  },
1500
1518
  {
1501
- name: "show",
1519
+ name: "show", discovery: { surface: "public", audiences: ["public", "operator", "leader"] },
1502
1520
  summary: "Show one Knowledge promotion proposal.",
1503
1521
  usage: "yui project knowledge proposals show <project> <proposal>"
1504
1522
  }
1505
1523
  ]
1506
1524
  },
1507
1525
  {
1508
- name: "accept",
1526
+ name: "accept", discovery: { surface: "public", audiences: ["public", "operator"] },
1509
1527
  summary: "Accept a Knowledge promotion proposal (Operator authority).",
1510
1528
  usage: "yui project knowledge accept <project> <proposal> [--update <knowledge-id>]",
1511
1529
  options: ["--update"]
1512
1530
  },
1513
1531
  {
1514
- name: "reject",
1532
+ name: "reject", discovery: { surface: "public", audiences: ["public", "operator"] },
1515
1533
  summary: "Reject a Knowledge promotion proposal (Operator authority).",
1516
1534
  usage: "yui project knowledge reject <project> <proposal> --reason <text>",
1517
1535
  options: ["--reason"]
@@ -1521,7 +1539,7 @@ export const ROOT_COMMAND = buildNode({
1521
1539
  ]
1522
1540
  },
1523
1541
  {
1524
- name: "session",
1542
+ name: "session", discovery: { surface: "public", audiences: ["public", "operator"] },
1525
1543
  summary: "Enter, stop, and reconcile managed Role sessions.",
1526
1544
  examples: [
1527
1545
  "yui session context operator --json",
@@ -1537,7 +1555,7 @@ export const ROOT_COMMAND = buildNode({
1537
1555
  children: globalSessionChildren
1538
1556
  },
1539
1557
  {
1540
- name: "task",
1558
+ name: "task", discovery: { surface: "public", audiences: ["public", "operator"] },
1541
1559
  summary: "Manage Tasks, WorkItems, AgentRuns, and integration.",
1542
1560
  sections: [
1543
1561
  { id: "lifecycle", title: "Lifecycle", entries: ["create", "project", "base", "update", "activate", "activation", "execution", "complete", "cancel", "reopen", "retire", "list", "show", "context", "next-action", "remote-delivery", "archive-preflight", "archive", "replace", "reconcile", "upstream", "artifact"] },
@@ -1547,76 +1565,71 @@ export const ROOT_COMMAND = buildNode({
1547
1565
  children: taskChildren
1548
1566
  },
1549
1567
  {
1550
- name: "capability",
1568
+ name: "capability", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
1551
1569
  summary: "Discover and call authorized capabilities through the Controller.",
1552
1570
  sections: [{ id: "entry", title: "Commands", entries: ["search", "commands", "panels", "describe", "call"] }],
1553
1571
  children: [
1554
- { name: "search", summary: "Search the current authorized directory.", usage: "yui capability search [query] --task <id>" },
1555
- { name: "commands", summary: "List current command names, help and capability mappings; invoke via capability call.", usage: "yui capability commands --task <id>" },
1556
- { name: "panels", summary: "List authorized text/link or query-only JSON panel descriptors.", usage: "yui capability panels --task <id>" },
1557
- { name: "describe", summary: "Describe one contract or report Provider ambiguity.", usage: "yui capability describe <name> --task <id> [--provider <id>] [--version <version>]" },
1558
- { name: "call", summary: "Invoke one implementation under the current managed identity.", usage: "yui capability call <name> --task <id> --input <json> [--provider <id>] [--version <version>] [--request-id <id>]" }
1572
+ { name: "search", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Search the current authorized directory.", usage: "yui capability search [query] --task <id>" },
1573
+ { name: "commands", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "List current command names, help and capability mappings; invoke via capability call.", usage: "yui capability commands --task <id>" },
1574
+ { name: "panels", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "List authorized text/link or query-only JSON panel descriptors.", usage: "yui capability panels --task <id>" },
1575
+ { name: "describe", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Describe a template or assess exact authorization without executing it.", usage: "yui capability describe <name> --task <id> [--input <json>] [--provider <id>] [--version <version>]", options: ["--task", "--input", "--provider", "--version"] },
1576
+ { name: "call", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Invoke one implementation under the current managed identity.", usage: "yui capability call <name> --task <id> --input <json> [--provider <id>] [--version <version>] [--request-id <id>]", options: ["--task", "--input", "--provider", "--version", "--request-id"] }
1559
1577
  ]
1560
1578
  },
1561
1579
  {
1562
- name: "job",
1580
+ name: "job", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] },
1563
1581
  summary: "Start, inspect, cancel, or acknowledge a Controller-managed DurableJob.",
1564
1582
  sections: [{ id: "manage", title: "Commands", entries: ["start", "get", "cancel", "acknowledge"] }],
1565
1583
  children: [
1566
- { name: "start", summary: "Start a DurableJob under an explicit request identity.", usage: "yui job start --request-id <id> --task <id> --project <project> --head <sha> --workspace <dir> --step <name>=<command> [--step ...] [--owner task|work-item:<id>|integration-attempt:<id>] [--env <k=v>...]" },
1567
- { name: "get", summary: "Show a DurableJob record and its terminal result.", usage: "yui job get --task <id> --job <job-id>" },
1568
- { name: "cancel", summary: "Request cancellation of a running or queued DurableJob.", usage: "yui job cancel --task <id> --job <job-id>" },
1569
- { name: "acknowledge", summary: "Acknowledge an unknown-needs-attention DurableJob so Task lifecycle gates can proceed.", usage: "yui job acknowledge --task <id> --job <job-id>" }
1584
+ { name: "start", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Start a DurableJob under an explicit request identity.", usage: "yui job start --request-id <id> --task <id> --project <project> --head <sha> --workspace <dir> --step <name>=<command> [--step ...] [--owner task|work-item:<id>|integration-attempt:<id>] [--env <k=v>...]" },
1585
+ { name: "get", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Show a DurableJob record and its terminal result.", usage: "yui job get --task <id> --job <job-id>" },
1586
+ { name: "cancel", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Request cancellation of a running or queued DurableJob.", usage: "yui job cancel --task <id> --job <job-id>" },
1587
+ { name: "acknowledge", discovery: { surface: "managed", audiences: ["operator", "leader", "assignment"] }, summary: "Acknowledge an unknown-needs-attention DurableJob so Task lifecycle gates can proceed.", usage: "yui job acknowledge --task <id> --job <job-id>" }
1570
1588
  ]
1571
1589
  },
1572
1590
  {
1573
- name: "jobs",
1591
+ name: "jobs", discovery: { surface: "public", audiences: ["public", "operator"] },
1574
1592
  summary: "Inspect scheduler wake and recovery records.",
1575
1593
  sections: [{ id: "manage", title: "Commands", entries: ["list", "retry"] }],
1576
1594
  children: [
1577
- { name: "list", summary: "List scheduler wake and recovery records." },
1578
- { name: "retry", summary: "Retry a failed Leader recovery.", usage: "yui jobs retry <id>" }
1595
+ { name: "list", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "List scheduler wake and recovery records." },
1596
+ { name: "retry", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Retry a failed Leader recovery.", usage: "yui jobs retry <id>" }
1579
1597
  ]
1580
1598
  },
1581
1599
  {
1582
- name: "telemetry",
1600
+ name: "telemetry", discovery: { surface: "public", audiences: ["public", "operator"] },
1583
1601
  summary: "Inspect and compact the bounded provider-progress sidecar.",
1584
1602
  sections: [{ id: "manage", title: "Commands", entries: ["status", "prune", "read"] }],
1585
1603
  children: [
1586
- { name: "status", summary: "Show sidecar health, row counts, and retention settings.", usage: "yui telemetry status" },
1587
- { name: "prune", summary: "Apply terminal retention and active-AgentRun caps.", usage: "yui telemetry prune [--task <id>] [--keep <n>] [--dry-run]" },
1588
- { name: "read", summary: "Page through retained progress rows or read a AgentRun aggregate.", usage: "yui telemetry read --task <id> [--run <id>] [--aggregate] [--limit <n>] [--offset <n>]" }
1604
+ { name: "status", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Show sidecar health, row counts, and retention settings.", usage: "yui telemetry status" },
1605
+ { name: "prune", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Apply terminal retention and active-AgentRun caps.", usage: "yui telemetry prune [--task <id>] [--keep <n>] [--dry-run]" },
1606
+ { name: "read", discovery: { surface: "public", audiences: ["public", "operator"] }, summary: "Page through retained progress rows or read a AgentRun aggregate.", usage: "yui telemetry read --task <id> [--run <id>] [--aggregate] [--limit <n>] [--offset <n>]" }
1589
1607
  ]
1590
1608
  },
1591
1609
  {
1592
- name: "internal",
1610
+ name: "internal", discovery: { surface: "runtime", audiences: [] },
1593
1611
  summary: "Internal Yui callbacks.",
1594
1612
  hidden: true,
1595
1613
  sections: [{
1596
1614
  id: "callbacks",
1597
1615
  title: "Callbacks",
1598
- entries: ["session-notify", "runtime-hook", "agent-host", "session-cli-refresh"]
1616
+ entries: ["session-notify", "runtime-hook", "agent-host"]
1599
1617
  }],
1600
1618
  children: [
1601
1619
  {
1602
- name: "agent-host",
1620
+ name: "agent-host", discovery: { surface: "runtime", audiences: [] },
1603
1621
  summary: "Run the persistent structured Provider host.",
1604
1622
  usage: "yui internal agent-host <ticket>"
1605
1623
  },
1606
1624
  {
1607
- name: "session-notify",
1625
+ name: "session-notify", discovery: { surface: "runtime", audiences: [] },
1608
1626
  summary: "Record a structured native session notification.",
1609
1627
  usage: "yui internal session-notify <payload>"
1610
1628
  },
1611
1629
  {
1612
- name: "runtime-hook",
1630
+ name: "runtime-hook", discovery: { surface: "runtime", audiences: [] },
1613
1631
  summary: "Record a managed Agent Driver observation from stdin.",
1614
1632
  usage: "yui internal runtime-hook"
1615
- },
1616
- {
1617
- name: "session-cli-refresh",
1618
- summary: "Refresh existing managed Session CLI wrappers after an update.",
1619
- usage: "yui internal session-cli-refresh"
1620
1633
  }
1621
1634
  ]
1622
1635
  }
@@ -1649,8 +1662,8 @@ export function orderedImmediateTokens(node) {
1649
1662
  export function findChild(node, name) {
1650
1663
  return node.children.find((child) => child.name === name);
1651
1664
  }
1652
- export function findCommandNode(path) {
1653
- let node = ROOT_COMMAND;
1665
+ export function findCommandNode(path, root = ROOT_COMMAND) {
1666
+ let node = root;
1654
1667
  for (const segment of path[0] === ROOT_COMMAND.name ? path.slice(1) : path) {
1655
1668
  const child = findChild(node, segment);
1656
1669
  if (child === undefined)
@@ -1686,6 +1699,13 @@ export function validateCommandCatalog(root) {
1686
1699
  throw new Error(`Command examples are required: ${node.path.join(" ")}`);
1687
1700
  }
1688
1701
  const canonicalPath = node.path.join(" ");
1702
+ if (node.kind !== "group" && node.discovery === undefined) {
1703
+ throw new Error(`Executable command discovery must be explicit: ${canonicalPath}`);
1704
+ }
1705
+ for (const option of Object.keys(node.discovery?.optionAudiences ?? {})) {
1706
+ if (!node.options.includes(option))
1707
+ throw new Error(`Discovery references unknown option: ${canonicalPath} ${option}`);
1708
+ }
1689
1709
  for (const example of node.examples) {
1690
1710
  const normalized = example.replace(/^yui --json(?=\s|$)/, "yui");
1691
1711
  if (normalized !== canonicalPath && !normalized.startsWith(`${canonicalPath} `)) {