@pellux/goodvibes-agent 0.1.114 → 0.1.117

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 (168) hide show
  1. package/CHANGELOG.md +41 -650
  2. package/README.md +40 -50
  3. package/dist/package/main.js +38224 -35673
  4. package/docs/README.md +5 -4
  5. package/docs/{connected-services.md → connected-host.md} +18 -10
  6. package/docs/getting-started.md +43 -42
  7. package/docs/release-and-publishing.md +6 -4
  8. package/package.json +3 -3
  9. package/src/agent/behavior-discovery-summary.ts +165 -0
  10. package/src/agent/persona-discovery.ts +1 -3
  11. package/src/agent/persona-registry.ts +5 -3
  12. package/src/agent/reminder-schedule-format.ts +6 -6
  13. package/src/agent/reminder-schedule.ts +1 -1
  14. package/src/agent/routine-registry.ts +43 -4
  15. package/src/agent/routine-schedule-format.ts +6 -6
  16. package/src/agent/routine-schedule-promotion.ts +1 -1
  17. package/src/agent/routine-schedule-receipts.ts +1 -1
  18. package/src/agent/runtime-profile-starters.ts +331 -0
  19. package/src/agent/runtime-profile.ts +228 -330
  20. package/src/agent/skill-registry.ts +190 -13
  21. package/src/cli/agent-knowledge-command.ts +2 -2
  22. package/src/cli/agent-knowledge-format.ts +2 -2
  23. package/src/cli/agent-knowledge-runtime.ts +1 -1
  24. package/src/cli/bundle-command.ts +1 -1
  25. package/src/cli/entrypoint.ts +16 -7
  26. package/src/cli/help.ts +26 -19
  27. package/src/cli/local-library-command.ts +75 -21
  28. package/src/cli/management-commands.ts +7 -6
  29. package/src/cli/management.ts +6 -51
  30. package/src/cli/parser.ts +23 -2
  31. package/src/cli/profiles-command.ts +247 -1
  32. package/src/cli/routines-command.ts +139 -11
  33. package/src/cli/service-posture.ts +11 -11
  34. package/src/cli/status.ts +21 -25
  35. package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
  36. package/src/input/agent-workspace-access-command-editors.ts +170 -0
  37. package/src/input/agent-workspace-activation.ts +2 -1
  38. package/src/input/agent-workspace-basic-command-editor-submission.ts +787 -0
  39. package/src/input/agent-workspace-basic-command-editors.ts +524 -459
  40. package/src/input/agent-workspace-categories.ts +177 -14
  41. package/src/input/agent-workspace-channel-command-editor-submission.ts +49 -0
  42. package/src/input/agent-workspace-channel-command-editors.ts +47 -0
  43. package/src/input/agent-workspace-command-editor.ts +25 -1
  44. package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
  45. package/src/input/agent-workspace-editors.ts +27 -0
  46. package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
  47. package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
  48. package/src/input/agent-workspace-learned-behavior.ts +67 -0
  49. package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
  50. package/src/input/agent-workspace-library-command-editors.ts +35 -0
  51. package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
  52. package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
  53. package/src/input/agent-workspace-memory-command-editors.ts +180 -0
  54. package/src/input/agent-workspace-navigation.ts +45 -0
  55. package/src/input/agent-workspace-notify-editor-submission.ts +107 -0
  56. package/src/input/agent-workspace-operations-command-editor-submission.ts +146 -0
  57. package/src/input/agent-workspace-operations-command-editors.ts +119 -0
  58. package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
  59. package/src/input/agent-workspace-provider-command-editors.ts +93 -0
  60. package/src/input/agent-workspace-requirements.ts +11 -0
  61. package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
  62. package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
  63. package/src/input/agent-workspace-session-command-editors.ts +249 -0
  64. package/src/input/agent-workspace-setup.ts +49 -19
  65. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
  66. package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
  67. package/src/input/agent-workspace-snapshot.ts +56 -8
  68. package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
  69. package/src/input/agent-workspace-task-command-editors.ts +47 -0
  70. package/src/input/agent-workspace-types.ts +124 -0
  71. package/src/input/agent-workspace-voice-media.ts +1 -1
  72. package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
  73. package/src/input/agent-workspace.ts +47 -37
  74. package/src/input/command-registry.ts +1 -1
  75. package/src/input/commands/agent-runtime-profile-runtime.ts +160 -6
  76. package/src/input/commands/agent-skills-runtime.ts +76 -12
  77. package/src/input/commands/agent-workspace-runtime.ts +4 -3
  78. package/src/input/commands/brief-runtime.ts +38 -9
  79. package/src/input/commands/channels-runtime.ts +3 -3
  80. package/src/input/commands/compat-runtime.ts +32 -0
  81. package/src/input/commands/health-runtime.ts +22 -24
  82. package/src/input/commands/knowledge.ts +26 -5
  83. package/src/input/commands/local-provider-runtime.ts +7 -3
  84. package/src/input/commands/local-setup-review.ts +4 -14
  85. package/src/input/commands/mcp-runtime.ts +8 -12
  86. package/src/input/commands/operator-runtime.ts +8 -67
  87. package/src/input/commands/personas-runtime.ts +1 -1
  88. package/src/input/commands/platform-access-runtime.ts +7 -70
  89. package/src/input/commands/policy-dispatch.ts +1 -1
  90. package/src/input/commands/policy.ts +1 -5
  91. package/src/input/commands/product-runtime.ts +2 -2
  92. package/src/input/commands/qrcode-runtime.ts +6 -4
  93. package/src/input/commands/routines-runtime.ts +44 -6
  94. package/src/input/commands/runtime-services.ts +1 -14
  95. package/src/input/commands/security-runtime.ts +3 -8
  96. package/src/input/commands/session-content.ts +1 -1
  97. package/src/input/commands/session-workflow.ts +5 -14
  98. package/src/input/commands/shell-core.ts +8 -2
  99. package/src/input/commands/subscription-runtime.ts +1 -6
  100. package/src/input/commands/support-bundle-runtime.ts +53 -0
  101. package/src/input/commands/tasks-runtime.ts +2 -2
  102. package/src/input/commands.ts +4 -0
  103. package/src/input/feed-context-factory.ts +0 -1
  104. package/src/input/handler-content-actions.ts +0 -25
  105. package/src/input/handler-feed.ts +0 -2
  106. package/src/input/handler-interactions.ts +2 -31
  107. package/src/input/handler-onboarding.ts +29 -12
  108. package/src/input/handler-shortcuts.ts +1 -3
  109. package/src/input/handler.ts +4 -7
  110. package/src/input/keybindings.ts +9 -9
  111. package/src/input/mcp-workspace.ts +90 -26
  112. package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
  113. package/src/input/onboarding/onboarding-wizard-apply.ts +49 -0
  114. package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
  115. package/src/input/onboarding/onboarding-wizard-operator-steps.ts +126 -11
  116. package/src/input/onboarding/onboarding-wizard-steps.ts +15 -8
  117. package/src/input/onboarding/onboarding-wizard-types.ts +1 -0
  118. package/src/input/onboarding/onboarding-wizard.ts +19 -2
  119. package/src/input/profile-picker-modal.ts +2 -2
  120. package/src/input/settings-modal-agent-policy.ts +6 -6
  121. package/src/input/settings-modal-subscriptions.ts +3 -3
  122. package/src/input/settings-modal.ts +14 -14
  123. package/src/main.ts +0 -2
  124. package/src/panels/automation-control-panel.ts +3 -3
  125. package/src/panels/builtin/agent.ts +1 -1
  126. package/src/panels/builtin/operations.ts +2 -2
  127. package/src/panels/builtin/session.ts +26 -18
  128. package/src/panels/builtin/shared.ts +6 -6
  129. package/src/panels/project-planning-panel.ts +1 -1
  130. package/src/panels/provider-health-domains.ts +3 -3
  131. package/src/panels/qr-panel.ts +44 -20
  132. package/src/panels/subscription-panel.ts +3 -3
  133. package/src/panels/system-messages-panel.ts +2 -2
  134. package/src/panels/tasks-panel.ts +4 -4
  135. package/src/planning/project-planning-coordinator.ts +2 -2
  136. package/src/renderer/agent-workspace.ts +52 -5
  137. package/src/renderer/block-actions.ts +1 -3
  138. package/src/renderer/help-overlay.ts +13 -8
  139. package/src/renderer/mcp-workspace.ts +32 -13
  140. package/src/renderer/model-picker-overlay.ts +0 -1
  141. package/src/renderer/model-workspace.ts +0 -2
  142. package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
  143. package/src/renderer/panel-picker-overlay.ts +1 -1
  144. package/src/renderer/profile-picker-modal.ts +2 -2
  145. package/src/renderer/settings-modal-helpers.ts +23 -23
  146. package/src/renderer/settings-modal.ts +18 -18
  147. package/src/renderer/system-message.ts +1 -1
  148. package/src/runtime/agent-runtime-events.ts +129 -0
  149. package/src/runtime/bootstrap-command-parts.ts +3 -2
  150. package/src/runtime/bootstrap-core.ts +4 -64
  151. package/src/runtime/bootstrap-shell.ts +42 -4
  152. package/src/runtime/bootstrap.ts +8 -27
  153. package/src/runtime/connected-host-auth.ts +42 -0
  154. package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
  155. package/src/runtime/index.ts +1 -5
  156. package/src/runtime/onboarding/apply.ts +213 -0
  157. package/src/runtime/onboarding/derivation.ts +25 -6
  158. package/src/runtime/onboarding/snapshot.ts +4 -2
  159. package/src/runtime/onboarding/types.ts +28 -1
  160. package/src/runtime/onboarding/verify.ts +81 -2
  161. package/src/runtime/operator-token-cleanup.ts +2 -2
  162. package/src/runtime/services.ts +27 -12
  163. package/src/shell/service-settings-sync.ts +7 -7
  164. package/src/shell/ui-openers.ts +27 -38
  165. package/src/tools/agent-local-registry-tool.ts +10 -4
  166. package/src/tools/agent-tool-policy-guard.ts +5 -7
  167. package/src/version.ts +1 -1
  168. package/src/cli/package-verification.ts +0 -274
@@ -9,16 +9,21 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
9
9
  detail: 'Use this as the Agent front door: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
10
10
  actions: [
11
11
  { id: 'chat', label: 'Continue assistant chat', detail: 'Return to the main composer and type a normal message. Agent work stays serial in the main conversation.', kind: 'guidance', safety: 'safe' },
12
- { id: 'brief', label: 'Operator briefing', detail: 'Show a concise Agent status and next-actions briefing without mutating connected services.', command: '/brief', kind: 'command', safety: 'read-only' },
12
+ { id: 'brief', label: 'Operator briefing', detail: 'Show a concise Agent status and next-actions briefing without mutating the connected host.', command: '/brief', kind: 'command', safety: 'read-only' },
13
13
  { id: 'model', label: 'Choose model', detail: 'Open the model/provider workspace for the Agent chat route.', command: '/model', kind: 'command', safety: 'safe' },
14
+ { id: 'mode-show', label: 'Interaction mode', detail: 'Review Agent interaction noise level and per-domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
15
+ { id: 'mode-preset', label: 'Set interaction mode', detail: 'Open a confirmed form for quiet, balanced, or operator interaction mode.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
14
16
  { id: 'setup-home', label: 'Setup checklist', detail: 'Jump to the first-run checklist for provider, knowledge, personas, skills, routines, memory, channels, and voice/media.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
15
17
  { id: 'knowledge-home', label: 'Agent Knowledge', detail: 'Jump to isolated Agent Knowledge status, ingest, search, and review flows.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'read-only' },
16
18
  { id: 'memory-home', label: 'Memory, skills, routines', detail: 'Jump to local memory, persona, skill, and routine setup. These are core Agent product features.', targetCategoryId: 'memory', kind: 'workspace', safety: 'safe' },
17
- { id: 'channels-home', label: 'Channels', detail: 'Jump to companion pairing and channel readiness without changing connected-service routing.', targetCategoryId: 'channels', kind: 'workspace', safety: 'read-only' },
19
+ { id: 'learned-behavior-home', label: 'Capture learned behavior', detail: 'Save a reviewed lesson, workflow, or operating style as a local skill, routine, or persona.', editorKind: 'learned-behavior', kind: 'editor', safety: 'safe' },
20
+ { id: 'channels-home', label: 'Channels', detail: 'Jump to companion pairing and channel readiness without changing connected-host routing.', targetCategoryId: 'channels', kind: 'workspace', safety: 'read-only' },
18
21
  { id: 'tools-home', label: 'Tools and MCP', detail: 'Jump to MCP server setup, tool inventory, and trust review for day-one operator tool use.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
19
22
  { id: 'voice-home', label: 'Voice and media', detail: 'Jump to voice, TTS, image input, browser-tool, and media setup.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
20
23
  { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
21
- { id: 'health', label: 'Review health', detail: 'Show local health and connected-service status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
24
+ { id: 'health', label: 'Review health', detail: 'Show local health and connected-host status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
25
+ { id: 'doctor', label: 'Doctor diagnostics', detail: 'Run the same Agent doctor diagnostics from the TUI home workspace instead of relying on the CLI.', command: '/doctor', kind: 'command', safety: 'read-only' },
26
+ { id: 'compat', label: 'Host compatibility', detail: 'Inspect Agent SDK pin, connected-host version, and isolated Agent Knowledge route readiness from the TUI.', command: '/compat', kind: 'command', safety: 'read-only' },
22
27
  ],
23
28
  },
24
29
  {
@@ -31,8 +36,21 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
31
36
  { id: 'config', label: 'Open settings', detail: 'Open the fullscreen Agent settings workspace.', command: '/config', kind: 'command', safety: 'safe' },
32
37
  { id: 'setup', label: 'Run setup', detail: 'Review Agent settings in the fullscreen setup flow.', command: '/setup', kind: 'command', safety: 'safe' },
33
38
  { id: 'setup-provider-model', label: 'Provider and model', detail: 'Choose the provider/model route for normal assistant chat.', command: '/model', kind: 'command', safety: 'safe' },
39
+ { id: 'setup-model-pinned', label: 'Pinned models', detail: 'Inspect model favorites from the Agent TUI before changing model selection.', command: '/pin', kind: 'command', safety: 'read-only' },
40
+ { id: 'setup-model-refresh', label: 'Refresh model catalog', detail: 'Refresh model catalog, benchmark, and token-limit metadata from the Agent TUI.', command: '/refresh-models', kind: 'command', safety: 'safe' },
41
+ { id: 'setup-model-pin', label: 'Pin model', detail: 'Open a form that pins one model registry key for quick reuse.', editorKind: 'model-pin', kind: 'editor', safety: 'safe' },
42
+ { id: 'setup-model-unpin', label: 'Unpin model', detail: 'Open a form that removes one pinned model registry key.', editorKind: 'model-unpin', kind: 'editor', safety: 'safe' },
43
+ { id: 'setup-effort', label: 'Reasoning effort', detail: 'Open a form that sets reasoning effort for normal Agent chat turns when supported by the selected model.', editorKind: 'effort-level', kind: 'editor', safety: 'safe' },
44
+ { id: 'setup-mode-show', label: 'Interaction mode', detail: 'Review current Agent interaction mode and domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
45
+ { id: 'setup-mode-preset', label: 'Set interaction mode', detail: 'Open a confirmed form for quiet, balanced, or operator interaction mode.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
46
+ { id: 'setup-mode-domain', label: 'Set domain verbosity', detail: 'Open a confirmed form for one interaction-domain verbosity override.', editorKind: 'mode-domain', kind: 'editor', safety: 'safe' },
47
+ { id: 'setup-compat', label: 'Compatibility', detail: 'Inspect Agent SDK pin, connected host version, and isolated Agent Knowledge route readiness.', command: '/compat', kind: 'command', safety: 'read-only' },
34
48
  { id: 'setup-agent-knowledge', label: 'Agent Knowledge', detail: 'Inspect the isolated Agent Knowledge store before ingesting source-backed material.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
35
49
  { id: 'setup-runtime-profiles', label: 'Agent profiles', detail: 'Browse starter templates for isolated Agent homes and operator identities.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
50
+ { id: 'setup-profile-from-discovered', label: 'Profile from discovered behavior', detail: 'Create an isolated Agent profile directly from reviewed local persona, skill, and routine files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
51
+ { id: 'support-bundle-export', label: 'Export support bundle', detail: 'Open a confirmed form that exports a redacted Agent support bundle from the TUI workspace.', editorKind: 'support-bundle-export', kind: 'editor', safety: 'safe' },
52
+ { id: 'support-bundle-inspect', label: 'Inspect support bundle', detail: 'Open a form that inspects a redacted Agent support bundle before import or sharing.', editorKind: 'support-bundle-inspect', kind: 'editor', safety: 'read-only' },
53
+ { id: 'support-bundle-import', label: 'Import support bundle', detail: 'Open a confirmed form that imports reviewed, non-redacted config values from an Agent support bundle.', editorKind: 'support-bundle-import', kind: 'editor', safety: 'safe' },
36
54
  { id: 'setup-personas', label: 'Personas', detail: 'Create or select the active local Agent persona.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
37
55
  { id: 'setup-skills', label: 'Skills', detail: 'Create, review, and enable reusable local Agent skills.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
38
56
  { id: 'setup-routines', label: 'Routines', detail: 'Create, review, and enable local Agent routines before any explicit schedule promotion.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
@@ -41,7 +59,26 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
41
59
  { id: 'setup-tools', label: 'Tools and MCP', detail: 'Open MCP setup, trust review, and tool inventory.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
42
60
  { id: 'setup-voice-media', label: 'Voice and media', detail: 'Open TTS/media settings for voice and image-capable Agent flows.', command: '/config tts', kind: 'command', safety: 'safe' },
43
61
  { id: 'provider', label: 'Provider status', detail: 'Review provider/model posture.', command: '/provider', kind: 'command', safety: 'read-only' },
62
+ { id: 'provider-use', label: 'Use provider', detail: 'Open a provider-id form that switches the Agent chat provider from the workspace.', editorKind: 'provider-use', kind: 'editor', safety: 'safe' },
63
+ { id: 'provider-inspect', label: 'Inspect provider', detail: 'Open a provider-id form for read-only provider auth/setup inspection.', editorKind: 'provider-inspect', kind: 'editor', safety: 'read-only' },
64
+ { id: 'provider-routes', label: 'Inspect provider routes', detail: 'Open a provider-id form for read-only route and fallback inspection.', editorKind: 'provider-routes', kind: 'editor', safety: 'read-only' },
65
+ { id: 'provider-account-repair', label: 'Provider account repair', detail: 'Open a provider-id form for read-only account repair guidance.', editorKind: 'provider-account-repair', kind: 'editor', safety: 'read-only' },
66
+ { id: 'provider-add', label: 'Add custom provider', detail: 'Open a confirmed form that adds one OpenAI-compatible custom provider for Agent model routing.', editorKind: 'provider-add', kind: 'editor', safety: 'safe' },
67
+ { id: 'provider-remove', label: 'Remove custom provider', detail: 'Open a confirmed form that removes one Agent custom provider config.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
68
+ { id: 'provider-accounts', label: 'Provider accounts', detail: 'Review provider account routes, subscription windows, and billing-path safety without starting login or repair flows.', command: '/accounts review', kind: 'command', safety: 'read-only' },
69
+ { id: 'subscription-providers', label: 'Subscription providers', detail: 'Review provider subscription login routes without starting a login.', command: '/subscription providers', kind: 'command', safety: 'read-only' },
70
+ { id: 'subscription-review', label: 'Subscription review', detail: 'Inspect active and pending provider subscription sessions without printing token values.', command: '/subscription review', kind: 'command', safety: 'read-only' },
71
+ { id: 'subscription-inspect', label: 'Inspect subscription provider', detail: 'Open a provider-id form for read-only OAuth/subscription route inspection.', editorKind: 'subscription-inspect', kind: 'editor', safety: 'read-only' },
72
+ { id: 'subscription-login-start', label: 'Start subscription login', detail: 'Open a confirmed form for one provider OAuth login start, with browser/manual callback controls.', editorKind: 'subscription-login-start', kind: 'editor', safety: 'safe' },
73
+ { id: 'subscription-login-finish', label: 'Finish subscription login', detail: 'Open a confirmed form that stores one completed provider subscription session from a code or redirect URL.', editorKind: 'subscription-login-finish', kind: 'editor', safety: 'safe' },
74
+ { id: 'subscription-logout', label: 'Logout subscription', detail: 'Open a confirmed form that removes one stored provider subscription session.', editorKind: 'subscription-logout', kind: 'editor', safety: 'safe' },
75
+ { id: 'subscription-bundle-export', label: 'Export subscription bundle', detail: 'Open a confirmed form that exports a redacted provider subscription bundle for setup review.', editorKind: 'subscription-bundle-export', kind: 'editor', safety: 'safe' },
76
+ { id: 'subscription-bundle-inspect', label: 'Inspect subscription bundle', detail: 'Open a form that inspects a provider subscription bundle before setup review.', editorKind: 'subscription-bundle-inspect', kind: 'editor', safety: 'read-only' },
44
77
  { id: 'auth', label: 'Auth review', detail: 'Review authentication posture without printing token values.', command: '/auth review', kind: 'command', safety: 'read-only' },
78
+ { id: 'auth-show', label: 'Inspect provider auth', detail: 'Open a provider-id form for read-only provider auth inspection.', editorKind: 'auth-show', kind: 'editor', safety: 'read-only' },
79
+ { id: 'auth-repair', label: 'Auth repair guidance', detail: 'Open a provider-id form that shows auth repair guidance without storing tokens or starting login.', editorKind: 'auth-repair', kind: 'editor', safety: 'read-only' },
80
+ { id: 'auth-bundle-export', label: 'Export auth bundle', detail: 'Open a confirmed form that exports a redacted auth review bundle.', editorKind: 'auth-bundle-export', kind: 'editor', safety: 'safe' },
81
+ { id: 'auth-bundle-inspect', label: 'Inspect auth bundle', detail: 'Open a form that inspects an auth review bundle before setup review.', editorKind: 'auth-bundle-inspect', kind: 'editor', safety: 'read-only' },
45
82
  ],
46
83
  },
47
84
  {
@@ -52,10 +89,18 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
52
89
  detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
53
90
  actions: [
54
91
  { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing view for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
55
- { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix, then use /channels attention or /channels show <id> for setup detail.', command: '/channels', kind: 'command', safety: 'read-only' },
92
+ { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix.', command: '/channels', kind: 'command', safety: 'read-only' },
93
+ { id: 'channel-attention', label: 'Needs attention', detail: 'Show enabled channels that still need setup or a delivery target.', command: '/channels attention', kind: 'command', safety: 'read-only' },
94
+ { id: 'channel-accounts', label: 'Channel accounts', detail: 'Inspect connected channel accounts without printing secret values or sending messages.', command: '/channels accounts', kind: 'command', safety: 'read-only' },
95
+ { id: 'channel-policies', label: 'Channel policies', detail: 'Inspect channel delivery policy posture without changing routing.', command: '/channels policies', kind: 'command', safety: 'read-only' },
96
+ { id: 'channel-status', label: 'Live channel status', detail: 'Inspect channel runtime status from the connected host without mutating state.', command: '/channels status', kind: 'command', safety: 'read-only' },
97
+ { id: 'channel-show', label: 'Show channel detail', detail: 'Open a channel-id form for read-only readiness details.', editorKind: 'channel-show', kind: 'editor', safety: 'read-only' },
98
+ { id: 'channel-doctor', label: 'Run channel doctor', detail: 'Open a channel-id form for read-only route diagnostics.', editorKind: 'channel-doctor', kind: 'editor', safety: 'read-only' },
99
+ { id: 'channel-setup', label: 'Setup guidance', detail: 'Open a channel-id form for read-only setup guidance.', editorKind: 'channel-setup', kind: 'editor', safety: 'read-only' },
56
100
  { id: 'notification-routes', label: 'Notification routes', detail: 'Inspect configured webhook notification URLs without sending a test message.', command: '/notify list', kind: 'command', safety: 'read-only' },
57
101
  { id: 'notification-add-webhook', label: 'Add webhook target', detail: 'Open a confirmed form that adds one webhook notification target for explicit reminder and routine delivery.', editorKind: 'notify-webhook', kind: 'editor', safety: 'safe' },
58
102
  { id: 'notification-remove-webhook', label: 'Remove webhook target', detail: 'Open a confirmed form that removes one exact webhook notification target from Agent delivery.', editorKind: 'notify-webhook-remove', kind: 'editor', safety: 'safe' },
103
+ { id: 'notification-clear-webhooks', label: 'Clear webhook targets', detail: 'Open a confirmed form before removing every configured webhook notification target.', editorKind: 'notify-webhook-clear', kind: 'editor', safety: 'safe' },
59
104
  { id: 'notification-test-webhooks', label: 'Test webhook targets', detail: 'Open a confirmed form that sends one notification test to configured webhook targets only after typed confirmation.', editorKind: 'notify-webhook-test', kind: 'editor', safety: 'safe' },
60
105
  { id: 'setup-review', label: 'Health review', detail: 'Review setup posture without changing inbound delivery or mutating channel state.', command: '/health review', kind: 'command', safety: 'read-only' },
61
106
  { id: 'channel-safety', label: 'Delivery safety', detail: 'External messages, channel DMs, and public delivery targets require explicit user action and Agent policy. Agent will not silently send or expose channels from this workspace.', kind: 'guidance', safety: 'blocked' },
@@ -68,12 +113,26 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
68
113
  summary: 'MCP server setup, trust review, and tool inventory.',
69
114
  detail: 'Configure and inspect task tools from the Agent TUI. Adding or changing tools requires typed confirmation; normal chat still chooses tools serially in the main conversation.',
70
115
  actions: [
71
- { id: 'mcp-workspace', label: 'Open MCP workspace', detail: 'Open the fullscreen MCP server and tool workspace with live server status, tool list, config paths, and command previews.', command: '/mcp', kind: 'command', safety: 'safe' },
116
+ { id: 'mcp-workspace', label: 'Open MCP workspace', detail: 'Open the fullscreen MCP server and tool workspace with live server status, tool list, config paths, and confirmed add/remove/reload actions.', command: '/mcp', kind: 'command', safety: 'safe' },
72
117
  { id: 'mcp-review', label: 'MCP review', detail: 'Inspect MCP server connection, trust, role, and quarantine posture.', command: '/mcp review', kind: 'command', safety: 'read-only' },
73
118
  { id: 'mcp-tools', label: 'Tool inventory', detail: 'List available MCP tools grouped by server.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
119
+ { id: 'mcp-tools-server', label: 'Server tool inventory', detail: 'Open a server-name form for read-only MCP tool inventory from one server.', editorKind: 'mcp-tools-server', kind: 'editor', safety: 'read-only' },
74
120
  { id: 'mcp-config', label: 'Config locations', detail: 'Show effective MCP config locations and source scopes without mutating them.', command: '/mcp config', kind: 'command', safety: 'read-only' },
75
121
  { id: 'mcp-add-server', label: 'Add MCP server', detail: 'Open a confirmed form that adds or updates one MCP server config with scope, role, trust, env refs, paths, and hosts.', editorKind: 'mcp-server', kind: 'editor', safety: 'safe' },
76
122
  { id: 'mcp-auth-review', label: 'Auth review', detail: 'Show MCP auth and quarantine attention without approving or changing trust.', command: '/mcp auth-review', kind: 'command', safety: 'read-only' },
123
+ { id: 'mcp-repair', label: 'Repair guidance', detail: 'Open a server-name form for read-only MCP repair guidance and next steps.', editorKind: 'mcp-repair', kind: 'editor', safety: 'read-only' },
124
+ { id: 'secret-providers', label: 'Secret providers', detail: 'List supported external secret reference providers without printing secret values.', command: '/secrets providers', kind: 'command', safety: 'read-only' },
125
+ { id: 'secret-list', label: 'Stored secrets', detail: 'List stored secret keys and refs without printing secret values.', command: '/secrets list', kind: 'command', safety: 'read-only' },
126
+ { id: 'secret-set', label: 'Store secret value', detail: 'Open a masked, confirmed form that stores one secret value through the Agent secret manager.', editorKind: 'secret-set', kind: 'editor', safety: 'safe' },
127
+ { id: 'secret-link', label: 'Link secret ref', detail: 'Open a confirmed form that links one key to a goodvibes://secrets/... external reference.', editorKind: 'secret-link', kind: 'editor', safety: 'safe' },
128
+ { id: 'secret-test', label: 'Test secret ref', detail: 'Open a confirmed form that tests one secret reference while printing only redacted status.', editorKind: 'secret-test', kind: 'editor', safety: 'safe' },
129
+ { id: 'secret-delete', label: 'Delete secret', detail: 'Open a confirmed form that deletes one stored secret key from the selected scope/storage.', editorKind: 'secret-delete', kind: 'editor', safety: 'safe' },
130
+ { id: 'trust-review', label: 'Trust review', detail: 'Review permission, secret, plugin, and MCP trust posture without exporting bundles or changing trust.', command: '/trust review', kind: 'command', safety: 'read-only' },
131
+ { id: 'trust-bundle-export', label: 'Export trust bundle', detail: 'Open a confirmed form that exports a redacted trust review bundle.', editorKind: 'trust-bundle-export', kind: 'editor', safety: 'safe' },
132
+ { id: 'trust-bundle-inspect', label: 'Inspect trust bundle', detail: 'Open a form that inspects a trust review bundle before setup review.', editorKind: 'trust-bundle-inspect', kind: 'editor', safety: 'read-only' },
133
+ { id: 'security-review', label: 'Security review', detail: 'Inspect token audit, MCP attack paths, policy lint, and plugin risk without mutating security state.', command: '/security review', kind: 'command', safety: 'read-only' },
134
+ { id: 'security-attack-paths', label: 'MCP attack paths', detail: 'Inspect MCP attack-path findings without changing trust or quarantine state.', command: '/security attack-paths', kind: 'command', safety: 'read-only' },
135
+ { id: 'security-tokens', label: 'Token audit', detail: 'Inspect registered API token scope and rotation posture without printing token values.', command: '/security tokens', kind: 'command', safety: 'read-only' },
77
136
  { id: 'mcp-settings', label: 'Settings workspace', detail: 'Open settings at the MCP section for deeper review, including allow-all decisions.', command: '/settings mcp', kind: 'command', safety: 'safe' },
78
137
  { id: 'mcp-safety', label: 'Tool safety', detail: 'Agent may inspect and add reviewed MCP servers by explicit command, but will not silently install packages, change trust, or expose tools from ordinary chat.', kind: 'guidance', safety: 'blocked' },
79
138
  ],
@@ -88,12 +147,29 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
88
147
  { id: 'knowledge-status', label: 'Knowledge status', detail: 'Inspect Agent knowledge readiness and counts.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
89
148
  { id: 'knowledge-search', label: 'Search Agent knowledge', detail: 'Open an in-workspace search form for the isolated Agent Knowledge index.', editorKind: 'knowledge-search', kind: 'editor', safety: 'read-only' },
90
149
  { id: 'knowledge-ingest-url', label: 'Ingest URL', detail: 'Open an in-workspace form that ingests a real URL into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-url', kind: 'editor', safety: 'safe' },
150
+ { id: 'knowledge-import-urls', label: 'Import URL list', detail: 'Open an in-workspace form that imports a local URL list into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
91
151
  { id: 'knowledge-ingest-file', label: 'Ingest file', detail: 'Open an in-workspace form that imports a local file into Agent Knowledge only after typed confirmation.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
92
152
  { id: 'knowledge-import-bookmarks', label: 'Import bookmarks', detail: 'Open an in-workspace form that imports a browser bookmark export into Agent Knowledge after typed confirmation.', editorKind: 'knowledge-bookmarks', kind: 'editor', safety: 'safe' },
93
153
  { id: 'knowledge-import-browser-history', label: 'Import browser history', detail: 'Open an in-workspace form that imports local browser history/bookmarks into Agent Knowledge after typed confirmation.', editorKind: 'knowledge-browser-history', kind: 'editor', safety: 'safe' },
154
+ { id: 'knowledge-connectors', label: 'Connector inventory', detail: 'List Agent Knowledge connectors and readiness without ingesting anything.', command: '/knowledge connectors', kind: 'command', safety: 'read-only' },
155
+ { id: 'knowledge-connector-show', label: 'Connector detail', detail: 'Open an in-workspace form that shows one Agent Knowledge connector by id.', editorKind: 'knowledge-connector-show', kind: 'editor', safety: 'read-only' },
156
+ { id: 'knowledge-connector-doctor', label: 'Connector doctor', detail: 'Open an in-workspace form that runs a read-only readiness doctor for one Agent Knowledge connector.', editorKind: 'knowledge-connector-doctor', kind: 'editor', safety: 'read-only' },
94
157
  { id: 'knowledge-ingest-connector', label: 'Ingest connector input', detail: 'Open an in-workspace form for explicit connector input after checking connector readiness.', editorKind: 'knowledge-connector-ingest', kind: 'editor', safety: 'safe' },
95
158
  { id: 'knowledge-review-queue', label: 'Review queue', detail: 'Inspect source, item, and issue review work before accepting, rejecting, or resolving anything.', command: '/knowledge queue', kind: 'command', safety: 'read-only' },
96
159
  { id: 'knowledge-sources', label: 'Source library', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
160
+ { id: 'knowledge-nodes', label: 'Node library', detail: 'List indexed Agent Knowledge nodes without querying default Knowledge/Wiki.', command: '/knowledge list --kind nodes', kind: 'command', safety: 'read-only' },
161
+ { id: 'knowledge-issues', label: 'Issue library', detail: 'List Agent Knowledge issues from the isolated Agent segment without changing review state.', command: '/knowledge list --kind issues', kind: 'command', safety: 'read-only' },
162
+ { id: 'knowledge-get', label: 'Show item', detail: 'Open an in-workspace form that shows one Agent Knowledge source, node, or issue by id.', editorKind: 'knowledge-get', kind: 'editor', safety: 'read-only' },
163
+ { id: 'knowledge-map', label: 'Knowledge map', detail: 'Open an in-workspace form that summarizes the isolated Agent Knowledge graph map.', editorKind: 'knowledge-map', kind: 'editor', safety: 'read-only' },
164
+ { id: 'knowledge-review-issue', label: 'Review issue', detail: 'Open a confirmed form that accepts, rejects, resolves, reopens, edits, or forgets one Agent Knowledge issue.', editorKind: 'knowledge-review-issue', kind: 'editor', safety: 'safe' },
165
+ { id: 'knowledge-candidates', label: 'Consolidation candidates', detail: 'Inspect Agent Knowledge consolidation candidates without running a consolidation job.', command: '/knowledge candidates', kind: 'command', safety: 'read-only' },
166
+ { id: 'knowledge-lint', label: 'Knowledge lint', detail: 'Inspect Agent Knowledge lint findings.', command: '/knowledge lint', kind: 'command', safety: 'read-only' },
167
+ { id: 'knowledge-reports', label: 'Knowledge reports', detail: 'Inspect recent Agent Knowledge reports without mutating knowledge.', command: '/knowledge reports', kind: 'command', safety: 'read-only' },
168
+ { id: 'knowledge-schedules', label: 'Knowledge schedules', detail: 'Inspect Agent Knowledge report schedules without changing schedules.', command: '/knowledge schedules', kind: 'command', safety: 'read-only' },
169
+ { id: 'knowledge-packet', label: 'Build prompt packet', detail: 'Open an in-workspace form that builds a compact Agent Knowledge prompt packet for a task.', editorKind: 'knowledge-packet', kind: 'editor', safety: 'read-only' },
170
+ { id: 'knowledge-explain', label: 'Explain selection', detail: 'Open an in-workspace form that explains which Agent Knowledge context would be selected.', editorKind: 'knowledge-explain', kind: 'editor', safety: 'read-only' },
171
+ { id: 'knowledge-consolidate', label: 'Consolidate knowledge', detail: 'Open a confirmed form that runs isolated Agent Knowledge consolidation.', editorKind: 'knowledge-consolidate', kind: 'editor', safety: 'safe' },
172
+ { id: 'knowledge-reindex', label: 'Reindex Agent Knowledge', detail: 'Open a confirmed form that rebuilds the isolated Agent Knowledge index without touching default Knowledge/Wiki.', editorKind: 'knowledge-reindex', kind: 'editor', safety: 'safe' },
97
173
  { id: 'knowledge-ask', label: 'Ask Agent knowledge', detail: 'Open an in-workspace question form for isolated Agent Knowledge. Normal chat still uses the main conversation.', editorKind: 'knowledge-ask', kind: 'editor', safety: 'read-only' },
98
174
  ],
99
175
  },
@@ -106,9 +182,14 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
106
182
  actions: [
107
183
  { id: 'tts-config', label: 'Configure live TTS', detail: 'Open the settings workspace at the TTS group.', command: '/config tts', kind: 'command', safety: 'safe' },
108
184
  { id: 'tts-provider', label: 'Choose TTS provider', detail: 'Open provider/model routing for spoken responses through the settings flow.', command: '/config tts.provider', kind: 'command', safety: 'safe' },
185
+ { id: 'voice-review', label: 'Voice review', detail: 'Inspect local voice posture before enabling spoken interaction.', command: '/voice review', kind: 'command', safety: 'read-only' },
186
+ { id: 'voice-enable', label: 'Enable voice', detail: 'Open a confirmed form that enables local voice interaction.', editorKind: 'voice-enable', kind: 'editor', safety: 'safe' },
187
+ { id: 'voice-disable', label: 'Disable voice', detail: 'Open a confirmed form that disables local voice interaction.', editorKind: 'voice-disable', kind: 'editor', safety: 'safe' },
188
+ { id: 'voice-bundle-export', label: 'Export voice bundle', detail: 'Open a confirmed form that exports voice setup state for review.', editorKind: 'voice-bundle-export', kind: 'editor', safety: 'safe' },
189
+ { id: 'voice-bundle-inspect', label: 'Inspect voice bundle', detail: 'Open a form that inspects voice setup state before review.', editorKind: 'voice-bundle-inspect', kind: 'editor', safety: 'read-only' },
109
190
  { id: 'tts-speak', label: 'Speak a prompt', detail: 'Open an in-workspace prompt form for spoken assistant replies through configured live TTS.', editorKind: 'tts-prompt', kind: 'editor', safety: 'safe' },
110
191
  { id: 'image-attach', label: 'Attach image input', detail: 'Open an in-workspace image form for attaching a real image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
111
- { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool server readiness without starting inbound endpoints or mutating connected-service state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
192
+ { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool server readiness without starting inbound endpoints or mutating connected-host state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
112
193
  { id: 'mcp-tools', label: 'MCP tool inventory', detail: 'List available MCP tools, including browser and automation roles, without changing server trust or setup.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
113
194
  ],
114
195
  },
@@ -122,11 +203,17 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
122
203
  { id: 'runtime-profile-guide', label: 'Starter authoring guide', detail: 'Open the Agent-local starter authoring flow inside the Agent TUI.', command: '/agent-profile guide', kind: 'command', safety: 'safe' },
123
204
  { id: 'runtime-profile-templates', label: 'Browse starter templates', detail: 'List built-in and local Agent starter templates with persona, skill, routine, and source details.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
124
205
  { id: 'runtime-profile-list', label: 'List Agent profiles', detail: 'List isolated Agent profile homes under this Agent home.', command: '/agent-profile list', kind: 'command', safety: 'read-only' },
206
+ { id: 'runtime-profile-show', label: 'Show Agent profile', detail: 'Open a profile-name form that shows one isolated Agent profile home and starter metadata.', editorKind: 'profile-show', kind: 'editor', safety: 'read-only' },
207
+ { id: 'runtime-profile-template-show', label: 'Preview starter', detail: 'Open an in-workspace form that previews one built-in or local starter template by id.', editorKind: 'profile-template-show', kind: 'editor', safety: 'read-only' },
125
208
  { id: 'runtime-profile-template-export', label: 'Export starter template', detail: 'Open an in-workspace form that exports a starter template JSON file for review and customization.', editorKind: 'profile-template-export', kind: 'editor', safety: 'safe' },
126
209
  { id: 'runtime-profile-template-import', label: 'Import starter template', detail: 'Open an in-workspace form that imports a reviewed starter template JSON file into this Agent home.', editorKind: 'profile-template-import', kind: 'editor', safety: 'safe' },
127
210
  { id: 'runtime-profile-create', label: 'Create Agent profile', detail: 'Open an in-workspace form that creates an isolated Agent home from a built-in or local starter.', editorKind: 'profile', kind: 'editor', safety: 'safe' },
211
+ { id: 'runtime-profile-default', label: 'Use as default profile', detail: 'Select an isolated Agent profile for the next normal goodvibes-agent launch. The current session keeps using its existing Agent home.', editorKind: 'profile-default', kind: 'editor', safety: 'safe' },
212
+ { id: 'runtime-profile-clear-default', label: 'Clear default profile', detail: 'Return the next normal goodvibes-agent launch to the base Agent home. The current session keeps using its existing Agent home.', editorKind: 'profile-default-clear', kind: 'editor', safety: 'safe' },
213
+ { id: 'runtime-profile-delete', label: 'Delete Agent profile', detail: 'Open a confirmation form before deleting one isolated Agent profile home.', editorKind: 'profile-delete', kind: 'editor', safety: 'safe' },
214
+ { id: 'runtime-profile-template-from-discovered', label: 'Starter from discovered behavior', detail: 'Open an in-workspace form that creates one local starter template from reviewed discovered persona, skill, and routine files.', editorKind: 'profile-template-from-discovered', kind: 'editor', safety: 'safe' },
215
+ { id: 'runtime-profile-from-discovered', label: 'Profile from discovered behavior', detail: 'Open an in-workspace form that creates a local starter and isolated Agent profile from reviewed discovered behavior files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
128
216
  { id: 'runtime-profile-template-edit', label: 'Customize starter', detail: 'Open the starter export form, edit the JSON file, then import it as a local starter.', editorKind: 'profile-template-export', kind: 'editor', safety: 'safe' },
129
- { id: 'runtime-profile-switch', label: 'Switch Agent profile', detail: 'Launch goodvibes-agent --agent-profile NAME to use that isolated Agent home. This workspace cannot switch the current process home after startup.', kind: 'guidance', safety: 'safe' },
130
217
  ],
131
218
  },
132
219
  {
@@ -137,13 +224,28 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
137
224
  detail: 'Memory, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory.',
138
225
  actions: [
139
226
  { id: 'memory-list', label: 'List memory', detail: 'Print the full Agent-owned memory list.', command: '/memory list', kind: 'command', safety: 'read-only' },
227
+ { id: 'memory-search', label: 'Search memory', detail: 'Open an in-workspace Agent-local memory search form. This never queries default Knowledge/Wiki or other product routes.', editorKind: 'memory-search', kind: 'editor', safety: 'read-only' },
228
+ { id: 'memory-get', label: 'Show memory by id', detail: 'Open an in-workspace form that prints one Agent-local memory record with provenance and links.', editorKind: 'memory-get', kind: 'editor', safety: 'read-only' },
229
+ { id: 'memory-queue', label: 'Review queue', detail: 'Print the Agent-local memory review queue.', command: '/memory queue', kind: 'command', safety: 'read-only' },
230
+ { id: 'memory-explain', label: 'Explain selection', detail: 'Preview which reviewed Agent-local memories would be selected for a task.', editorKind: 'memory-explain', kind: 'editor', safety: 'read-only' },
140
231
  { id: 'memory-prev', label: 'Previous memory', detail: 'Move the local memory selection up without changing review state.', localKind: 'memory', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
141
232
  { id: 'memory-next', label: 'Next memory', detail: 'Move the local memory selection down without changing review state.', localKind: 'memory', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
142
233
  { id: 'memory-create', label: 'Create memory', detail: 'Open an in-workspace form for a durable, non-secret Agent memory. No default wiki fallback is used.', editorKind: 'memory', kind: 'editor', safety: 'safe' },
234
+ { id: 'learned-behavior', label: 'Capture learned behavior', detail: 'Turn a reviewed workflow, lesson, or operating style into one local skill, routine, or persona.', editorKind: 'learned-behavior', kind: 'editor', safety: 'safe' },
143
235
  { id: 'memory-edit', label: 'Edit selected memory', detail: 'Open the selected Agent memory in an in-workspace editor.', localKind: 'memory', localOperation: 'memory-edit', kind: 'local-operation', safety: 'safe' },
144
236
  { id: 'memory-review', label: 'Review selected', detail: 'Mark the selected Agent memory reviewed after inspecting it.', localKind: 'memory', localOperation: 'memory-review', kind: 'local-operation', safety: 'safe' },
145
237
  { id: 'memory-stale', label: 'Mark selected stale', detail: 'Mark the selected Agent memory stale so it stops being trusted until reviewed.', localKind: 'memory', localOperation: 'memory-stale', kind: 'local-operation', safety: 'safe' },
146
238
  { id: 'memory-delete', label: 'Delete selected memory', detail: 'Open a confirmation form before deleting the selected Agent memory.', localKind: 'memory', localOperation: 'memory-delete', kind: 'local-operation', safety: 'safe' },
239
+ { id: 'memory-promote', label: 'Promote memory', detail: 'Open a confirmed form that promotes one Agent-local memory record to session, project, or team scope.', editorKind: 'memory-promote', kind: 'editor', safety: 'safe' },
240
+ { id: 'memory-link', label: 'Link memories', detail: 'Open a confirmed form that links two Agent-local memory records with a directed relation.', editorKind: 'memory-link', kind: 'editor', safety: 'safe' },
241
+ { id: 'memory-export', label: 'Export memory bundle', detail: 'Open a confirmed form that exports Agent-local memory records and links to a reviewable JSON bundle.', editorKind: 'memory-export', kind: 'editor', safety: 'safe' },
242
+ { id: 'memory-import', label: 'Import memory bundle', detail: 'Open a confirmed form that imports a reviewed Agent-local memory bundle.', editorKind: 'memory-import', kind: 'editor', safety: 'safe' },
243
+ { id: 'memory-handoff-export', label: 'Export handoff bundle', detail: 'Open a confirmed form that exports a scoped Agent-local memory handoff bundle.', editorKind: 'memory-handoff-export', kind: 'editor', safety: 'safe' },
244
+ { id: 'memory-handoff-inspect', label: 'Inspect handoff bundle', detail: 'Open a form that inspects a memory handoff bundle before import.', editorKind: 'memory-handoff-inspect', kind: 'editor', safety: 'read-only' },
245
+ { id: 'memory-handoff-import', label: 'Import handoff bundle', detail: 'Open a confirmed form that imports a reviewed handoff bundle into Agent-local memory.', editorKind: 'memory-handoff-import', kind: 'editor', safety: 'safe' },
246
+ { id: 'memory-vector-status', label: 'Vector status', detail: 'Inspect the Agent-local memory vector index status.', command: '/memory vector status', kind: 'command', safety: 'read-only' },
247
+ { id: 'memory-vector-doctor', label: 'Vector doctor', detail: 'Inspect Agent-local memory vector index health.', command: '/memory vector doctor', kind: 'command', safety: 'read-only' },
248
+ { id: 'memory-vector-rebuild', label: 'Rebuild vector index', detail: 'Open a confirmed form that rebuilds the Agent-local memory vector index.', editorKind: 'memory-vector-rebuild', kind: 'editor', safety: 'safe' },
147
249
  { id: 'personas', label: 'Persona library', detail: 'Open the local persona workspace for active role selection and review.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
148
250
  { id: 'skills', label: 'Local skill library', detail: 'Open the local skill workspace for reusable procedures and review.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
149
251
  { id: 'routines', label: 'Routine library', detail: 'Open the local routine workspace for repeatable workflows and schedule promotion review.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
@@ -154,10 +256,12 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
154
256
  group: 'LEARN',
155
257
  label: 'Personas',
156
258
  summary: 'Local behavior profiles for the main assistant.',
157
- detail: 'Personas shape the serial Agent in the main conversation. They are not background agents and they never spawn specialist roots.',
259
+ detail: 'Personas shape the serial Agent in the main conversation. They are local profiles and never spawn specialist roots.',
158
260
  actions: [
159
261
  { id: 'personas-list', label: 'List personas', detail: 'Print the full local persona library.', command: '/personas list', kind: 'command', safety: 'read-only' },
160
262
  { id: 'personas-active', label: 'Show active persona', detail: 'Inspect the active local persona applied to new turns.', command: '/personas active', kind: 'command', safety: 'read-only' },
263
+ { id: 'personas-search', label: 'Search personas', detail: 'Open a search form for the local persona library.', editorKind: 'persona-search', kind: 'editor', safety: 'read-only' },
264
+ { id: 'personas-show', label: 'Show persona', detail: 'Open a persona-id form for read-only local persona detail.', editorKind: 'persona-show', kind: 'editor', safety: 'read-only' },
161
265
  { id: 'personas-discover', label: 'Discover persona files', detail: 'Scan project and global Agent persona folders for persona markdown without importing it.', command: '/personas discover', kind: 'command', safety: 'read-only' },
162
266
  { id: 'personas-import-discovered', label: 'Import discovered persona', detail: 'Open an in-workspace form that imports one reviewed persona markdown file into the Agent-local persona registry after typed confirmation.', editorKind: 'persona-discovery-import', kind: 'editor', safety: 'safe' },
163
267
  { id: 'personas-prev', label: 'Previous persona', detail: 'Move the local persona selection up without changing active state.', localKind: 'persona', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
@@ -174,15 +278,27 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
174
278
  id: 'skills',
175
279
  group: 'LEARN',
176
280
  label: 'Skills',
177
- summary: 'Reusable local procedures the assistant can apply on demand.',
178
- detail: 'Skills are local, reviewable procedures. Enabled skills inform the main conversation; secret-looking content is rejected.',
281
+ summary: 'Reusable local procedures with setup readiness.',
282
+ detail: 'Skills are local, reviewable procedures with optional env/command requirements. Enabled skills inform the main conversation; secret-looking content is rejected.',
179
283
  actions: [
180
284
  { id: 'skills-list', label: 'List skills', detail: 'Print the full local Agent skill library.', command: '/agent-skills list', kind: 'command', safety: 'read-only' },
181
285
  { id: 'skills-enabled', label: 'Enabled skills', detail: 'Show only skills currently injected into Agent guidance.', command: '/agent-skills enabled', kind: 'command', safety: 'read-only' },
286
+ { id: 'skills-attention', label: 'Needs setup', detail: 'Show local skills whose env or command requirements are not ready.', command: '/agent-skills attention', kind: 'command', safety: 'read-only' },
287
+ { id: 'skills-search', label: 'Search skills', detail: 'Open a search form for local Agent skills.', editorKind: 'skill-search', kind: 'editor', safety: 'read-only' },
288
+ { id: 'skills-show', label: 'Show skill', detail: 'Open a skill-id form for read-only local skill detail.', editorKind: 'skill-show', kind: 'editor', safety: 'read-only' },
182
289
  { id: 'skills-discover', label: 'Discover skill files', detail: 'Scan project and global Agent skill folders for SKILL.md or .md skills without importing them.', command: '/agent-skills discover', kind: 'command', safety: 'read-only' },
183
290
  { id: 'skills-import-discovered', label: 'Import discovered skill', detail: 'Open an in-workspace form that imports one reviewed discovered skill file into the Agent-local skill registry after typed confirmation.', editorKind: 'skill-discovery-import', kind: 'editor', safety: 'safe' },
184
291
  { id: 'skills-bundles', label: 'Skill bundles', detail: 'List reviewable groups of local skills that can be enabled together.', command: '/agent-skills bundle list', kind: 'command', safety: 'read-only' },
292
+ { id: 'skills-bundle-attention', label: 'Bundle setup gaps', detail: 'Show skill bundles whose member skills have missing env or command requirements.', command: '/agent-skills bundle attention', kind: 'command', safety: 'read-only' },
185
293
  { id: 'skills-create-bundle', label: 'Create bundle', detail: 'Open an in-workspace form that creates a named skill bundle from existing local skill ids.', editorKind: 'skill-bundle', kind: 'editor', safety: 'safe' },
294
+ { id: 'skills-search-bundle', label: 'Search bundles', detail: 'Open an in-workspace form that searches local Agent skill bundles.', editorKind: 'skill-bundle-search', kind: 'editor', safety: 'read-only' },
295
+ { id: 'skills-show-bundle', label: 'Show bundle', detail: 'Open an in-workspace form that shows one local Agent skill bundle by id.', editorKind: 'skill-bundle-show', kind: 'editor', safety: 'read-only' },
296
+ { id: 'skills-update-bundle', label: 'Update bundle', detail: 'Open a confirmed form that updates one local Agent skill bundle.', editorKind: 'skill-bundle-update', kind: 'editor', safety: 'safe' },
297
+ { id: 'skills-enable-bundle', label: 'Enable bundle', detail: 'Open a confirmed form that enables one local Agent skill bundle for main-conversation guidance.', editorKind: 'skill-bundle-enable', kind: 'editor', safety: 'safe' },
298
+ { id: 'skills-disable-bundle', label: 'Disable bundle', detail: 'Open a confirmed form that disables one local Agent skill bundle without deleting it.', editorKind: 'skill-bundle-disable', kind: 'editor', safety: 'safe' },
299
+ { id: 'skills-review-bundle', label: 'Review bundle', detail: 'Open a confirmed form that marks one local Agent skill bundle reviewed.', editorKind: 'skill-bundle-review', kind: 'editor', safety: 'safe' },
300
+ { id: 'skills-stale-bundle', label: 'Mark bundle stale', detail: 'Open a confirmed form that marks one local Agent skill bundle stale with a reason.', editorKind: 'skill-bundle-stale', kind: 'editor', safety: 'safe' },
301
+ { id: 'skills-delete-bundle', label: 'Delete bundle', detail: 'Open a confirmation form before deleting one local Agent skill bundle.', editorKind: 'skill-bundle-delete', kind: 'editor', safety: 'safe' },
186
302
  { id: 'skills-prev', label: 'Previous skill', detail: 'Move the local skill selection up without changing enabled state.', localKind: 'skill', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
187
303
  { id: 'skills-next', label: 'Next skill', detail: 'Move the local skill selection down without changing enabled state.', localKind: 'skill', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
188
304
  { id: 'skills-create', label: 'Create skill', detail: 'Open an in-workspace form for a reusable local procedure that writes Agent-local state only.', editorKind: 'skill', kind: 'editor', safety: 'safe' },
@@ -197,11 +313,14 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
197
313
  id: 'routines',
198
314
  group: 'LEARN',
199
315
  label: 'Routines',
200
- summary: 'Repeatable workflows for the main conversation.',
201
- detail: 'Routines run in the main conversation by default. Promotion to a connected schedule requires a real schedule command and --yes.',
316
+ summary: 'Repeatable workflows with setup readiness.',
317
+ detail: 'Routines run in the main conversation by default and can declare env/command requirements. Promotion to a connected schedule requires a real schedule command and --yes.',
202
318
  actions: [
203
319
  { id: 'routines-list', label: 'List routines', detail: 'Print the full local Agent routine library.', command: '/routines list', kind: 'command', safety: 'read-only' },
204
320
  { id: 'routines-enabled', label: 'Enabled routines', detail: 'Show routines available for direct use.', command: '/routines enabled', kind: 'command', safety: 'read-only' },
321
+ { id: 'routines-attention', label: 'Needs setup', detail: 'Show local routines whose env or command requirements are not ready.', command: '/routines attention', kind: 'command', safety: 'read-only' },
322
+ { id: 'routines-search', label: 'Search routines', detail: 'Open a search form for local Agent routines.', editorKind: 'routine-search', kind: 'editor', safety: 'read-only' },
323
+ { id: 'routines-show', label: 'Show routine', detail: 'Open a routine-id form for read-only local routine detail.', editorKind: 'routine-show', kind: 'editor', safety: 'read-only' },
205
324
  { id: 'routines-discover', label: 'Discover routine files', detail: 'Scan project and global Agent routine folders for routine markdown without importing it.', command: '/routines discover', kind: 'command', safety: 'read-only' },
206
325
  { id: 'routines-import-discovered', label: 'Import discovered routine', detail: 'Open an in-workspace form that imports one reviewed routine markdown file into the Agent-local routine registry after typed confirmation.', editorKind: 'routine-discovery-import', kind: 'editor', safety: 'safe' },
207
326
  { id: 'routines-prev', label: 'Previous routine', detail: 'Move the local routine selection up without changing enabled state.', localKind: 'routine', selectionDelta: -1, kind: 'local-selection', safety: 'safe' },
@@ -215,6 +334,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
215
334
  { id: 'routines-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected local Agent routine.', localKind: 'routine', localOperation: 'routine-delete', kind: 'local-operation', safety: 'safe' },
216
335
  { id: 'routines-promote', label: 'Promote to schedule', detail: 'Open an in-workspace form that creates one connected schedule from the selected routine with real timing and confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
217
336
  { id: 'routines-receipts', label: 'Promotion receipts', detail: 'Inspect local redacted routine schedule promotion receipts.', command: '/routines receipts', kind: 'command', safety: 'read-only' },
337
+ { id: 'routines-receipt', label: 'Show promotion receipt', detail: 'Open a receipt-id form for read-only routine promotion receipt detail.', editorKind: 'routine-receipt', kind: 'editor', safety: 'read-only' },
218
338
  ],
219
339
  },
220
340
  {
@@ -222,10 +342,50 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
222
342
  group: 'TRACK',
223
343
  label: 'Work & Approvals',
224
344
  summary: 'Visible task state, work plan, and approval posture.',
225
- detail: 'Use this workspace to inspect active operator state. Side-effecting approval decisions require explicit commands and confirmation outside this workspace.',
345
+ detail: 'Use this workspace to inspect active operator state and update visible work-plan items from confirmed TUI forms.',
226
346
  actions: [
227
347
  { id: 'workplan', label: 'Review work plan', detail: 'Print a concise work plan summary in the main Agent transcript.', command: '/workplan list', kind: 'command', safety: 'read-only' },
348
+ { id: 'workplan-show', label: 'Show work plan detail', detail: 'Open a read-only form for the detailed work plan view.', editorKind: 'workplan-show', kind: 'editor', safety: 'read-only' },
349
+ { id: 'workplan-add', label: 'Add work item', detail: 'Open a form that creates one visible work plan item from the Agent workspace.', editorKind: 'workplan-add', kind: 'editor', safety: 'safe' },
350
+ { id: 'workplan-status', label: 'Update work item status', detail: 'Open a form that updates one work plan item to pending, active, blocked, done, failed, or cancelled.', editorKind: 'workplan-status', kind: 'editor', safety: 'safe' },
351
+ { id: 'workplan-delete', label: 'Remove work item', detail: 'Open a confirmed form before removing one work plan item.', editorKind: 'workplan-delete', kind: 'editor', safety: 'safe' },
352
+ { id: 'workplan-clear-completed', label: 'Clear completed work', detail: 'Open a confirmed form before clearing completed and cancelled work plan items.', editorKind: 'workplan-clear-completed', kind: 'editor', safety: 'safe' },
353
+ { id: 'conversation-export', label: 'Export conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
354
+ { id: 'conversation-review', label: 'Review transcript', detail: 'Inspect current transcript structure without changing the conversation.', command: '/conversation review', kind: 'command', safety: 'read-only' },
355
+ { id: 'conversation-composer', label: 'Composer posture', detail: 'Inspect current composer mode, pending approval posture, and context warning state.', command: '/conversation composer', kind: 'command', safety: 'read-only' },
356
+ { id: 'conversation-hotspots', label: 'Transcript hotspots', detail: 'Show transcript event hotspots from the Agent workspace.', command: '/conversation hotspots', kind: 'command', safety: 'read-only' },
357
+ { id: 'conversation-next-event', label: 'Next event', detail: 'Jump to the next indexed transcript event from the Agent workspace.', command: '/conversation next', kind: 'command', safety: 'read-only' },
358
+ { id: 'conversation-prev-event', label: 'Previous event', detail: 'Jump to the previous indexed transcript event from the Agent workspace.', command: '/conversation prev', kind: 'command', safety: 'read-only' },
359
+ { id: 'conversation-restore', label: 'Restore review', detail: 'Inspect restore-relevant transcript events before resuming or loading sessions.', command: '/conversation restore', kind: 'command', safety: 'read-only' },
360
+ { id: 'conversation-events', label: 'Transcript events', detail: 'Open an event-kind form for read-only transcript event inspection.', editorKind: 'conversation-events', kind: 'editor', safety: 'read-only' },
361
+ { id: 'conversation-groups', label: 'Transcript groups', detail: 'Open an event-kind form for read-only transcript group inspection.', editorKind: 'conversation-groups', kind: 'editor', safety: 'read-only' },
362
+ { id: 'conversation-find', label: 'Find transcript text', detail: 'Open a search form for the current Agent transcript.', editorKind: 'conversation-find', kind: 'editor', safety: 'read-only' },
363
+ { id: 'session-save', label: 'Save session', detail: 'Open a confirmed form that saves the current Agent session under a local name.', editorKind: 'session-save', kind: 'editor', safety: 'safe' },
364
+ { id: 'session-load', label: 'Load session', detail: 'Open a confirmed form that loads one saved Agent session into the current conversation.', editorKind: 'session-load', kind: 'editor', safety: 'safe' },
365
+ { id: 'session-rename', label: 'Rename current session', detail: 'Open a form that renames the current Agent session.', editorKind: 'session-rename', kind: 'editor', safety: 'safe' },
366
+ { id: 'session-fork', label: 'Fork current session', detail: 'Open a form that forks the current Agent session into a new local session.', editorKind: 'session-fork', kind: 'editor', safety: 'safe' },
367
+ { id: 'session-resume', label: 'Resume saved session', detail: 'Open a form that resumes one saved Agent session by id, prefix, or title.', editorKind: 'session-resume', kind: 'editor', safety: 'safe' },
368
+ { id: 'session-info', label: 'Inspect saved session', detail: 'Open a read-only form that prints saved-session metadata.', editorKind: 'session-info', kind: 'editor', safety: 'read-only' },
369
+ { id: 'session-graph', label: 'Session graph', detail: 'Open a read-only form for cross-session graph inspection; graph mutation remains blocked in Agent.', editorKind: 'session-graph', kind: 'editor', safety: 'read-only' },
370
+ { id: 'session-export-saved', label: 'Export saved session', detail: 'Open a form that prints one saved-session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
371
+ { id: 'session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
372
+ { id: 'session-delete', label: 'Delete saved session', detail: 'Open a confirmed form before deleting one saved Agent session.', editorKind: 'session-delete', kind: 'editor', safety: 'safe' },
373
+ { id: 'planning-status', label: 'Planning status', detail: 'Inspect current Agent planning readiness, mode, and next question without seeding or approving planning state.', command: '/plan status', kind: 'command', safety: 'read-only' },
374
+ { id: 'planning-mode', label: 'Planning mode', detail: 'Inspect current planner mode and runtime strategy without changing it.', command: '/plan mode', kind: 'command', safety: 'read-only' },
375
+ { id: 'planning-explain', label: 'Explain planner', detail: 'Explain planner state and readiness without approving or changing it.', command: '/plan explain', kind: 'command', safety: 'read-only' },
376
+ { id: 'planning-list', label: 'Saved plans', detail: 'List local execution plans without opening copied planning panels or changing planning state.', command: '/plan list', kind: 'command', safety: 'read-only' },
377
+ { id: 'plan-seed', label: 'Seed planning goal', detail: 'Open a form that seeds current planning state from a concrete Agent operating goal.', editorKind: 'plan-seed', kind: 'editor', safety: 'safe' },
378
+ { id: 'plan-show', label: 'Show saved plan', detail: 'Open a plan-id form for read-only saved plan detail.', editorKind: 'plan-show', kind: 'editor', safety: 'read-only' },
379
+ { id: 'plan-approve', label: 'Approve planning state', detail: 'Open a confirmation form before approving current planning state for execution.', editorKind: 'plan-approve', kind: 'editor', safety: 'safe' },
380
+ { id: 'plan-override', label: 'Override planning strategy', detail: 'Open a confirmation form before changing planner strategy.', editorKind: 'plan-override', kind: 'editor', safety: 'safe' },
381
+ { id: 'plan-clear', label: 'Clear planning state', detail: 'Open a confirmation form before clearing planner state.', editorKind: 'plan-clear', kind: 'editor', safety: 'safe' },
382
+ { id: 'tasks-list', label: 'Runtime tasks', detail: 'Inspect connected-host task state without creating, retrying, or mutating tasks.', command: '/tasks list', kind: 'command', safety: 'read-only' },
383
+ { id: 'tasks-filter', label: 'Filter runtime tasks', detail: 'Open a status/kind form for read-only connected-host task filtering.', editorKind: 'task-list-filter', kind: 'editor', safety: 'read-only' },
384
+ { id: 'task-show', label: 'Inspect runtime task', detail: 'Open a task-id form for read-only connected-host task metadata.', editorKind: 'task-show', kind: 'editor', safety: 'read-only' },
385
+ { id: 'task-output', label: 'Show task output', detail: 'Open a task-id form for read-only connected-host task output.', editorKind: 'task-output', kind: 'editor', safety: 'read-only' },
386
+ { id: 'sessions-list', label: 'Saved sessions', detail: 'Browse saved Agent sessions from the TUI without using a shell-only command.', command: '/sessions', kind: 'command', safety: 'read-only' },
228
387
  { id: 'approvals', label: 'Review approvals', detail: 'Print the approval matrix without approving or denying requests.', command: '/approval matrix', kind: 'command', safety: 'read-only' },
388
+ { id: 'approval-review', label: 'Review approval class', detail: 'Open an approval-kind form for read-only review of one approval class.', editorKind: 'approval-review', kind: 'editor', safety: 'read-only' },
229
389
  ],
230
390
  },
231
391
  {
@@ -239,9 +399,11 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
239
399
  { id: 'schedule-list', label: 'List schedules', detail: 'Inspect configured jobs and history without running or mutating them.', command: '/schedule list', kind: 'command', safety: 'read-only' },
240
400
  { id: 'schedule-promote-routine', label: 'Promote routine', detail: 'Open an in-workspace form that creates one connected schedule from a local Agent routine with real timing, optional delivery target, and explicit confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
241
401
  { id: 'schedule-receipts', label: 'Promotion receipts', detail: 'Review local redacted receipt history for routine-to-schedule promotion attempts.', command: '/schedule receipts', kind: 'command', safety: 'read-only' },
402
+ { id: 'schedule-receipt', label: 'Show receipt', detail: 'Open a receipt-id form for read-only schedule receipt detail.', editorKind: 'schedule-receipt', kind: 'editor', safety: 'read-only' },
242
403
  { id: 'schedule-reconcile', label: 'Reconcile schedules', detail: 'Compare local promotion receipts with live connected schedules using schedules.list.', command: '/schedule reconcile', kind: 'command', safety: 'read-only' },
243
404
  { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule add/run/remove/enable/disable remain blocked; confirmed reminders and routine promotion use connected schedules only.', kind: 'guidance', safety: 'blocked' },
244
- { id: 'health-services', label: 'Service status', detail: 'Inspect connected-service readiness without starting, stopping, or restarting anything.', command: '/health review', kind: 'command', safety: 'read-only' },
405
+ { id: 'health-services', label: 'Host status', detail: 'Inspect connected-host readiness without starting, stopping, or restarting anything.', command: '/health review', kind: 'command', safety: 'read-only' },
406
+ { id: 'health-repair', label: 'Health repair guidance', detail: 'Open a domain form for read-only health repair guidance.', editorKind: 'health-repair', kind: 'editor', safety: 'read-only' },
245
407
  ],
246
408
  },
247
409
  {
@@ -252,6 +414,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
252
414
  detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and WRFC only when explicitly requested.',
253
415
  actions: [
254
416
  { id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate one request to GoodVibes TUI instead of spawning local Engineer/Reviewer/Tester roots.', kind: 'guidance', safety: 'delegates' },
417
+ { id: 'delegate-task', label: 'Delegate build task', detail: 'Open a confirmed form that sends one explicit build/fix/review task to GoodVibes TUI/shared-session routes.', editorKind: 'delegate-task', kind: 'editor', safety: 'delegates' },
255
418
  { id: 'review-command', label: 'Review delegation command', detail: 'Use /delegate --wrfc TASK only when the user explicitly asks for code review/build execution. Return to the composer and include the actual task text.', kind: 'guidance', safety: 'delegates' },
256
419
  { id: 'delegation-status', label: 'Delegation status', detail: 'Inspect build-delegation receipts and shared-session status without starting coding work.', command: '/delegate status', kind: 'command', safety: 'read-only' },
257
420
  ],
@@ -0,0 +1,49 @@
1
+ import type { AgentWorkspaceActionResult, AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
2
+ import type { AgentWorkspaceChannelCommandEditorKind } from './agent-workspace-channel-command-editors.ts';
3
+ import { isAgentWorkspaceChannelCommandEditorKind } from './agent-workspace-channel-command-editors.ts';
4
+ import { quoteSlashCommandArg } from './slash-command-parser.ts';
5
+
6
+ type AgentWorkspaceFieldReader = (fieldId: string) => string;
7
+
8
+ export type AgentWorkspaceChannelCommandEditorSubmission =
9
+ | {
10
+ readonly kind: 'editor';
11
+ readonly editor: AgentWorkspaceLocalEditor;
12
+ readonly status: string;
13
+ readonly actionResult?: AgentWorkspaceActionResult;
14
+ }
15
+ | {
16
+ readonly kind: 'dispatch';
17
+ readonly command: string;
18
+ readonly status: string;
19
+ readonly actionResult: AgentWorkspaceActionResult;
20
+ };
21
+
22
+ export function isAgentWorkspaceChannelCommandSubmissionKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceChannelCommandEditorKind {
23
+ return isAgentWorkspaceChannelCommandEditorKind(kind);
24
+ }
25
+
26
+ export function buildAgentWorkspaceChannelCommandEditorSubmission(
27
+ editor: AgentWorkspaceLocalEditor,
28
+ readField: AgentWorkspaceFieldReader,
29
+ ): AgentWorkspaceChannelCommandEditorSubmission {
30
+ const subcommand = editor.kind === 'channel-doctor' ? 'doctor' : editor.kind === 'channel-setup' ? 'setup' : 'show';
31
+ const command = `/channels ${subcommand} ${quoteSlashCommandArg(readField('channel'))}`;
32
+ const title = editor.kind === 'channel-doctor'
33
+ ? 'Opening channel doctor'
34
+ : editor.kind === 'channel-setup'
35
+ ? 'Opening channel setup guidance'
36
+ : 'Opening channel detail';
37
+ return {
38
+ kind: 'dispatch',
39
+ command,
40
+ status: `${title}.`,
41
+ actionResult: {
42
+ kind: 'dispatched',
43
+ title,
44
+ detail: 'The workspace handed read-only channel inspection to the shell-owned command router.',
45
+ command,
46
+ safety: 'read-only',
47
+ },
48
+ };
49
+ }
@@ -0,0 +1,47 @@
1
+ import type { AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
2
+
3
+ export type AgentWorkspaceChannelCommandEditorKind = Extract<
4
+ AgentWorkspaceEditorKind,
5
+ 'channel-show' | 'channel-doctor' | 'channel-setup'
6
+ >;
7
+
8
+ export function isAgentWorkspaceChannelCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceChannelCommandEditorKind {
9
+ return kind === 'channel-show' || kind === 'channel-doctor' || kind === 'channel-setup';
10
+ }
11
+
12
+ export function createAgentWorkspaceChannelCommandEditor(kind: AgentWorkspaceChannelCommandEditorKind): AgentWorkspaceLocalEditor {
13
+ if (kind === 'channel-doctor') {
14
+ return {
15
+ kind,
16
+ mode: 'create',
17
+ title: 'Run Channel Doctor',
18
+ selectedFieldIndex: 0,
19
+ message: 'Inspect one connected channel route without sending messages or changing delivery state.',
20
+ fields: [
21
+ { id: 'channel', label: 'Channel id', value: '', required: true, multiline: false, hint: 'Channel id, such as slack, telegram, discord, ntfy, signal, or whatsapp.' },
22
+ ],
23
+ };
24
+ }
25
+ if (kind === 'channel-setup') {
26
+ return {
27
+ kind,
28
+ mode: 'create',
29
+ title: 'Show Channel Setup',
30
+ selectedFieldIndex: 0,
31
+ message: 'Show read-only setup guidance for one channel. This does not pair, enable, or send through the channel.',
32
+ fields: [
33
+ { id: 'channel', label: 'Channel id', value: '', required: true, multiline: false, hint: 'Channel id, such as slack, telegram, discord, ntfy, signal, or whatsapp.' },
34
+ ],
35
+ };
36
+ }
37
+ return {
38
+ kind,
39
+ mode: 'create',
40
+ title: 'Show Channel Detail',
41
+ selectedFieldIndex: 0,
42
+ message: 'Show one channel readiness record from the Agent workspace without changing channel state.',
43
+ fields: [
44
+ { id: 'channel', label: 'Channel id', value: '', required: true, multiline: false, hint: 'Channel id, such as slack, telegram, discord, ntfy, signal, or whatsapp.' },
45
+ ],
46
+ };
47
+ }
@@ -1,3 +1,4 @@
1
+ import type { AgentWorkspaceBasicCommandEditorKind } from './agent-workspace-basic-command-editors.ts';
1
2
  import { buildAgentWorkspaceBasicCommandEditorSubmission, isAgentWorkspaceBasicCommandEditorKind } from './agent-workspace-basic-command-editors.ts';
2
3
  import { buildAgentKnowledgeUrlEditorSubmission } from './agent-workspace-knowledge-url-editor.ts';
3
4
  import { buildAgentKnowledgeQueryEditorSubmission } from './agent-workspace-knowledge-query-editor.ts';
@@ -6,18 +7,25 @@ import { buildAgentRoutineScheduleEditorSubmission } from './agent-workspace-rou
6
7
  import type { AgentWorkspaceActionResult, AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agent-workspace-types.ts';
7
8
 
8
9
  type AgentWorkspaceFieldReader = (fieldId: string) => string;
9
- type AgentWorkspaceCommandEditorKind = Extract<
10
+ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Extract<
10
11
  AgentWorkspaceEditorKind,
11
12
  'knowledge-url'
13
+ | 'knowledge-urls'
12
14
  | 'knowledge-file'
13
15
  | 'knowledge-browser-history'
14
16
  | 'knowledge-connector-ingest'
17
+ | 'knowledge-reindex'
15
18
  | 'knowledge-search'
16
19
  | 'knowledge-ask'
17
20
  | 'mcp-server'
18
21
  | 'notify-webhook'
19
22
  | 'notify-webhook-remove'
23
+ | 'notify-webhook-clear'
20
24
  | 'notify-webhook-test'
25
+ | 'secret-set'
26
+ | 'secret-link'
27
+ | 'secret-test'
28
+ | 'secret-delete'
21
29
  | 'routine-schedule'
22
30
  | 'reminder-schedule'
23
31
  | 'knowledge-bookmarks'
@@ -29,6 +37,22 @@ type AgentWorkspaceCommandEditorKind = Extract<
29
37
  | 'skill-discovery-import'
30
38
  | 'profile-template-export'
31
39
  | 'profile-template-import'
40
+ | 'profile-template-from-discovered'
41
+ | 'profile-from-discovered'
42
+ | 'profile-default'
43
+ | 'profile-default-clear'
44
+ | 'support-bundle-export'
45
+ | 'support-bundle-inspect'
46
+ | 'support-bundle-import'
47
+ | 'subscription-inspect'
48
+ | 'subscription-login-start'
49
+ | 'subscription-login-finish'
50
+ | 'subscription-logout'
51
+ | 'delegate-task'
52
+ | 'workplan-add'
53
+ | 'workplan-status'
54
+ | 'workplan-delete'
55
+ | 'workplan-clear-completed'
32
56
  >;
33
57
 
34
58
  type AgentWorkspaceCommandEditorSubmission =