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