@pellux/goodvibes-agent 1.4.2 → 1.4.4

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.
@@ -12,7 +12,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
12
12
  detail: 'Use this as the primary Agent workspace: start with the user task, then open only the lane that matches the work.',
13
13
  actions: [
14
14
  { 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' },
15
- { 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' },
16
15
  { id: 'assistant-setup-lane', label: 'Get the assistant working', detail: 'Open setup posture for first-run blockers, GoodVibes settings import, account, model, tools, channels, voice, local context, and finish.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
17
16
  { id: 'assistant-model-lane', label: 'Talk and choose models', detail: 'Open model routing for provider choice, local model cookbook, helper/tool routes, reasoning, cache, and provider failure hints; model inspection uses models action:"status|local|providers".', targetCategoryId: 'account-model', kind: 'workspace', safety: 'safe' },
18
17
  { id: 'assistant-browser-cockpit', label: 'Open browser cockpit', detail: 'Open the connected GoodVibes browser cockpit/PWA when the web route is configured, or inspect web setup posture when it is not.', kind: 'guidance', safety: 'safe' },
@@ -21,17 +20,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
21
20
  { id: 'assistant-research-docs-lane', label: 'Research and write', detail: 'Open the writing surface for document drafts, source-backed reports, artifacts, exports, and blind model comparison.', targetCategoryId: 'documents', kind: 'workspace', safety: 'safe' },
22
21
  { id: 'assistant-background-lane', label: 'Supervise background work', detail: 'Open work supervision for plans, visible queues, approvals, automation, schedules, log tails, and cancel/recovery routes.', targetCategoryId: 'work', kind: 'workspace', safety: 'read-only' },
23
22
  { id: 'assistant-safety-lane', label: 'Stay safe and recover', detail: 'Open tool and MCP trust review; support bundles, execution history, and file recovery stay reachable from diagnostics.', targetCategoryId: 'tools', kind: 'workspace', safety: 'read-only' },
24
- { id: 'model', label: 'Choose model', detail: 'Open the model/provider workspace for the Agent chat route.', command: '/model', kind: 'command', safety: 'safe' },
25
- { id: 'model-refresh', label: 'Refresh model catalog', detail: 'Refresh locally cached provider model lists without changing the selected route.', command: '/refresh-models', kind: 'command', safety: 'safe' },
26
- { id: 'mode-show', label: 'Interaction mode', detail: 'Review Agent interaction noise level and per-domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
27
23
  { 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' },
28
24
  { 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' },
29
- { 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' },
30
- { 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' },
31
- { id: 'compat', label: 'Host compatibility', detail: 'Inspect connected-host compatibility and isolated Agent Knowledge route readiness from the TUI.', command: '/compat', kind: 'command', safety: 'read-only' },
32
- { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
33
- { id: 'welcome', label: 'Welcome and setup guide', detail: 'Open the Agent setup guide from the workspace.', command: '/welcome', kind: 'command', safety: 'safe' },
34
- { id: 'quit', label: 'Quit Agent', detail: 'Exit the TUI and restore terminal state.', command: '/quit', kind: 'command', safety: 'safe' },
35
25
  ],
36
26
  },
37
27
  {
@@ -41,48 +31,47 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
41
31
  summary: 'Import preferences, sign in, and choose the main model.',
42
32
  detail: 'Start here on a fresh install. Every row either saves state, opens the shared model picker, or opens a confirmed in-modal form.',
43
33
  actions: [
44
- { id: 'import-goodvibes-tui-settings', label: 'Import GoodVibes settings', detail: 'Import compatible shared GoodVibes display, provider, subscription, behavior, permission, TTS, channel, helper, tool, release, and automation values into Agent-owned state.', kind: 'settings-import', safety: 'safe' },
45
- { id: 'setup-checkpoint-show', label: 'Show setup checkpoint', detail: 'Inspect the saved setup wizard resume point without writing setup state.', setupCheckpointOperation: 'show', kind: 'setup-checkpoint', safety: 'read-only' },
46
- { id: 'setup-checkpoint-mark-current', label: 'Save setup checkpoint', detail: 'Save the current setup wizard step as the Agent-owned resume point for the next launch.', setupCheckpointOperation: 'mark-current', kind: 'setup-checkpoint', safety: 'safe' },
47
- { id: 'setup-checkpoint-clear', label: 'Clear setup checkpoint', detail: 'Clear the saved setup wizard resume point after setup is complete or no longer useful.', setupCheckpointOperation: 'clear', kind: 'setup-checkpoint', safety: 'safe' },
48
- { id: 'subscription-login-start', label: 'Start subscription login', detail: 'Start one provider sign-in flow, save pending state, and return here.', editorKind: 'subscription-login-start', kind: 'editor', safety: 'safe' },
49
- { id: 'subscription-login-finish', label: 'Finish subscription login', detail: 'Exchange a code or redirect URL and save the provider subscription session.', editorKind: 'subscription-login-finish', kind: 'editor', safety: 'safe' },
34
+ // Essentials first a first-time user signs in, picks a model, optionally imports prior settings.
35
+ { id: 'subscription-login-start', label: 'Sign in to a provider', detail: 'Start one provider sign-in flow, save pending state, and return here.', editorKind: 'subscription-login-start', kind: 'editor', safety: 'safe' },
36
+ { id: 'subscription-login-finish', label: 'Finish provider sign-in', detail: 'Exchange a code or redirect URL and save the provider subscription session.', editorKind: 'subscription-login-finish', kind: 'editor', safety: 'safe' },
50
37
  { id: 'setup-provider-model', label: 'Choose main model', detail: 'Open the shared provider/model picker for normal assistant turns.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
38
+ { id: 'import-goodvibes-tui-settings', label: 'Import GoodVibes settings', detail: 'Import compatible shared GoodVibes display, provider, subscription, behavior, permission, TTS, channel, helper, tool, release, and automation values into Agent-owned state.', kind: 'settings-import', safety: 'safe' },
51
39
  settingAction({ id: 'setup-reasoning-effort', label: 'Reasoning effort', detail: 'Cycle reasoning level when the selected model supports it.', key: 'provider.reasoningEffort' }),
52
- { id: 'subscription-logout', label: 'Logout subscription', detail: 'Remove one stored or pending provider subscription session after confirmation.', editorKind: 'subscription-logout', kind: 'editor', safety: 'safe' },
53
- { id: 'provider-add', label: 'Add custom provider', detail: 'Add one OpenAI-compatible provider for Agent model routing.', editorKind: 'provider-add', kind: 'editor', safety: 'safe' },
54
- { id: 'secret-set-provider', label: 'Store secret', detail: 'Store a provider or channel credential through the Agent secret manager.', editorKind: 'secret-set', kind: 'editor', safety: 'safe' },
55
- settingAction({ id: 'setup-secret-policy', label: 'Secret storage', detail: 'Choose how strongly Agent prefers secure secret storage.', key: 'storage.secretPolicy' }),
56
40
  settingAction({ id: 'setup-save-history', label: 'Save history', detail: 'Toggle local conversation history persistence.', key: 'behavior.saveHistory' }),
41
+ // Less common controls
42
+ { id: 'subscription-logout', label: 'Sign out of a provider', detail: 'Remove one stored or pending provider subscription session after confirmation.', editorKind: 'subscription-logout', kind: 'editor', safety: 'safe' },
43
+ { id: 'provider-add', label: 'Add a custom provider', detail: 'Add one OpenAI-compatible provider for Agent model routing.', editorKind: 'provider-add', kind: 'editor', safety: 'safe' },
44
+ { id: 'secret-set-provider', label: 'Store a credential', detail: 'Store a provider or channel credential through the Agent secret manager.', editorKind: 'secret-set', kind: 'editor', safety: 'safe' },
45
+ settingAction({ id: 'setup-secret-policy', label: 'Secret storage policy', detail: 'Choose how strongly Agent prefers secure secret storage.', key: 'storage.secretPolicy' }),
46
+ // Resume-point controls (rare; only matters when onboarding is split across sessions)
47
+ { id: 'setup-checkpoint-show', label: 'Show saved resume point', detail: 'Inspect the saved setup wizard resume point without writing setup state.', setupCheckpointOperation: 'show', kind: 'setup-checkpoint', safety: 'read-only' },
48
+ { id: 'setup-checkpoint-mark-current', label: 'Save resume point', detail: 'Save the current setup wizard step as the Agent-owned resume point for the next launch.', setupCheckpointOperation: 'mark-current', kind: 'setup-checkpoint', safety: 'safe' },
49
+ { id: 'setup-checkpoint-clear', label: 'Clear saved resume point', detail: 'Clear the saved setup wizard resume point after setup is complete or no longer useful.', setupCheckpointOperation: 'clear', kind: 'setup-checkpoint', safety: 'safe' },
57
50
  ],
58
51
  },
59
52
  {
60
53
  id: 'account-model',
61
54
  group: 'ONBOARDING',
62
55
  label: 'Model Routing',
63
- summary: 'Set chat, embedding, helper, tool, and spoken-turn routes.',
64
- detail: 'Use this after sign-in. Routes are saved settings, so selections persist across launches.',
56
+ summary: 'Pick the chat model. Helper, tool, and spoken-turn routes are optional.',
57
+ detail: 'Use this after sign-in. Most users only need the top row; the rest are advanced.',
65
58
  actions: [
59
+ // Essentials — chat route + reasoning
66
60
  { id: 'provider-use', label: 'Choose provider and model', detail: 'Open the shared provider/model picker for the main chat route.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
67
- { id: 'provider-remove', label: 'Remove custom provider', detail: 'Remove one custom provider config after confirmation.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
68
- { id: 'account-main-model', label: 'Choose main model', detail: 'Open the shared model picker for normal assistant turns.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'main', safety: 'safe' },
69
- { id: 'account-route-readiness', label: 'Inspect route readiness', detail: 'Review chat, helper, tool, and spoken-turn routes with models action:"status" for readiness scores, missing signals, pinned state, and safe setting keys without changing selection.', kind: 'guidance', safety: 'read-only' },
70
- { id: 'account-local-model-cookbook', label: 'Local model cookbook', detail: 'Review local model recommendations, setup/download guidance, benchmark action routes, and local endpoint candidates with models action:"local".', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'main', safety: 'safe' },
71
- { id: 'account-local-server-health', label: 'Check local servers', detail: 'Run a confirmed read-only model-list smoke check with models action:"smoke" for detected or default local endpoints before refresh, benchmark, provider add, or route change.', kind: 'guidance', safety: 'read-only' },
72
- { id: 'account-run-local-model-benchmark', label: 'Run local benchmark', detail: 'Run the confirmed local-route benchmark through blind comparison, save latency/task-fit evidence, and keep model changes separate.', editorKind: 'local-model-benchmark', kind: 'editor', safety: 'safe' },
73
- { id: 'account-local-benchmark-evidence', label: 'Review benchmark evidence', detail: 'Inspect saved local model comparisons, revealed judgments, analytics routes, and next actions through models action:"local" before any default-route change.', kind: 'guidance', safety: 'read-only' },
74
61
  settingAction({ id: 'account-reasoning', label: 'Reasoning effort', detail: 'Cycle the reasoning effort used when supported.', key: 'provider.reasoningEffort' }),
75
62
  settingAction({ id: 'account-embedding', label: 'Embedding provider', detail: 'Set the embedding provider for memory and retrieval.', key: 'provider.embeddingProvider' }),
76
- settingAction({ id: 'account-system-prompt', label: 'System prompt file', detail: 'Set an optional local system prompt file path.', key: 'provider.systemPromptFile' }),
77
- settingAction({ id: 'account-helper-enabled', label: 'Enable helper model', detail: 'Toggle dedicated helper routing for background utility work.', key: 'helper.enabled' }),
78
- { id: 'account-helper-provider', label: 'Choose helper provider/model', detail: 'Open the shared provider/model picker for helper routing.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'helper', visibleWhenSettingKey: 'helper.enabled', visibleWhenSettingValue: true, safety: 'safe' },
79
- { id: 'account-helper-model', label: 'Choose helper model', detail: 'Open the shared model picker for helper routing.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'helper', visibleWhenSettingKey: 'helper.enabled', visibleWhenSettingValue: true, safety: 'safe' },
80
- settingAction({ id: 'account-tool-llm-enabled', label: 'Enable tool LLM', detail: 'Toggle a dedicated tool LLM for internal operations.', key: 'tools.llmEnabled' }),
81
- { id: 'account-tool-provider', label: 'Choose tool provider/model', detail: 'Open the shared provider/model picker for dedicated tool LLM calls.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'tool', visibleWhenSettingKey: 'tools.llmEnabled', visibleWhenSettingValue: true, safety: 'safe' },
82
- { id: 'account-tool-model', label: 'Choose tool model', detail: 'Open the shared model picker for dedicated tool LLM calls.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'tool', visibleWhenSettingKey: 'tools.llmEnabled', visibleWhenSettingValue: true, safety: 'safe' },
83
- { id: 'account-tts-llm-provider', label: 'Choose spoken-turn provider/model', detail: 'Open the shared provider/model picker for spoken-response turns.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'tts', safety: 'safe' },
84
- { id: 'account-tts-llm-model', label: 'Choose spoken-turn model', detail: 'Open the shared model picker for spoken-response turns.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'tts', safety: 'safe' },
85
63
  settingAction({ id: 'account-provider-fallback-hint', label: 'Provider failure hints', detail: 'Toggle alternative model suggestions when the current provider fails non-transiently.', key: 'behavior.suggestAlternativeOnProviderFail' }),
64
+ // Helper / tool / spoken-turn routes (advanced — only matters when you want dedicated routing)
65
+ settingAction({ id: 'account-helper-enabled', label: 'Use a dedicated helper model', detail: 'Toggle a separate route for background utility work like summaries and titling.', key: 'helper.enabled' }),
66
+ { id: 'account-helper-provider', label: 'Choose helper model', detail: 'Pick the provider and model for helper routing.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'helper', visibleWhenSettingKey: 'helper.enabled', visibleWhenSettingValue: true, safety: 'safe' },
67
+ settingAction({ id: 'account-tool-llm-enabled', label: 'Use a dedicated tool model', detail: 'Toggle a separate route for internal tool calls.', key: 'tools.llmEnabled' }),
68
+ { id: 'account-tool-provider', label: 'Choose tool model', detail: 'Pick the provider and model for dedicated tool calls.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'tool', visibleWhenSettingKey: 'tools.llmEnabled', visibleWhenSettingValue: true, safety: 'safe' },
69
+ { id: 'account-tts-llm-provider', label: 'Choose spoken-turn model', detail: 'Pick the provider and model for spoken-response turns.', kind: 'model-picker', modelPickerFlow: 'providerModel', modelPickerTarget: 'tts', safety: 'safe' },
70
+ // System prompt + custom provider plumbing
71
+ settingAction({ id: 'account-system-prompt', label: 'Custom system prompt file', detail: 'Optional local file used as the system prompt for every assistant turn.', key: 'provider.systemPromptFile' }),
72
+ { id: 'provider-remove', label: 'Remove a custom provider', detail: 'Remove one custom provider config after confirmation.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
73
+ { id: 'account-run-local-model-benchmark', label: 'Run a local model benchmark', detail: 'Run the confirmed local-route benchmark through blind comparison, save latency/task-fit evidence, and keep model changes separate.', editorKind: 'local-model-benchmark', kind: 'editor', safety: 'safe' },
74
+ // Prompt cache controls (advanced — most users leave defaults)
86
75
  settingAction({ id: 'account-cache-enabled', label: 'Prompt cache', detail: 'Toggle prompt caching for eligible providers.', key: 'cache.enabled' }),
87
76
  settingAction({ id: 'account-cache-ttl', label: 'Cache TTL', detail: 'Cycle ephemeral or persistent cache TTL for stable content.', key: 'cache.stableTtl', visibleWhenKey: 'cache.enabled', visibleWhenValue: true }),
88
77
  settingAction({ id: 'account-cache-monitor', label: 'Cache hit-rate monitor', detail: 'Toggle cache hit-rate monitoring.', key: 'cache.monitorHitRate', visibleWhenKey: 'cache.enabled', visibleWhenValue: true }),
@@ -110,31 +99,25 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
110
99
  id: 'tools-permissions',
111
100
  group: 'ONBOARDING',
112
101
  label: 'Tools & Permissions',
113
- summary: 'Set approval policy, MCP entry points, and secret references.',
114
- detail: 'Use this before enabling tool-heavy work. Permission rows write policy; MCP and secret rows open setup forms.',
102
+ summary: 'Set approval policy and core file/shell/network permissions.',
103
+ detail: 'Most users only need Permission mode and Auto-approve. The rest stay at safe defaults unless you change them.',
115
104
  actions: [
105
+ // Top-level approval policy
116
106
  settingAction({ id: 'permissions-mode', label: 'Permission mode', detail: 'Cycle prompt, allow-all, or custom permission mode.', key: 'permissions.mode' }),
117
107
  settingAction({ id: 'permissions-auto-approve', label: 'Auto-approve tools', detail: 'Toggle automatic approval for all tool permission requests.', key: 'behavior.autoApprove' }),
108
+ // Common per-tool overrides for file and shell work
118
109
  settingAction({ id: 'permissions-read', label: 'File reads', detail: 'Cycle allow, prompt, or deny for file read operations.', key: 'permissions.tools.read' }),
119
- settingAction({ id: 'permissions-find', label: 'File search', detail: 'Cycle allow, prompt, or deny for file and directory search operations.', key: 'permissions.tools.find' }),
120
110
  settingAction({ id: 'permissions-write', label: 'File writes', detail: 'Cycle allow, prompt, or deny for file write operations.', key: 'permissions.tools.write' }),
121
111
  settingAction({ id: 'permissions-edit', label: 'File edits', detail: 'Cycle allow, prompt, or deny for edit and patch operations.', key: 'permissions.tools.edit' }),
122
112
  settingAction({ id: 'permissions-exec', label: 'Shell commands', detail: 'Cycle allow, prompt, or deny for shell execution.', key: 'permissions.tools.exec' }),
123
113
  settingAction({ id: 'permissions-fetch', label: 'Network fetches', detail: 'Cycle allow, prompt, or deny for outbound fetch requests.', key: 'permissions.tools.fetch' }),
124
- settingAction({ id: 'permissions-analyze', label: 'Code analysis', detail: 'Cycle allow, prompt, or deny for code and project analysis operations.', key: 'permissions.tools.analyze' }),
125
- settingAction({ id: 'permissions-inspect', label: 'Runtime inspect', detail: 'Cycle allow, prompt, or deny for runtime state inspection.', key: 'permissions.tools.inspect' }),
126
- settingAction({ id: 'permissions-state', label: 'State reads', detail: 'Cycle allow, prompt, or deny for reading runtime and session state.', key: 'permissions.tools.state' }),
127
- settingAction({ id: 'permissions-registry', label: 'Registry reads', detail: 'Cycle allow, prompt, or deny for tool and skill registry queries.', key: 'permissions.tools.registry' }),
128
- settingAction({ id: 'permissions-mcp', label: 'MCP tools', detail: 'Cycle allow, prompt, or deny for external MCP tool calls.', key: 'permissions.tools.mcp' }),
129
- settingAction({ id: 'permissions-agent', label: 'Agent delegation', detail: 'Cycle allow, prompt, or deny for subagent and delegation operations.', key: 'permissions.tools.agent' }),
130
- settingAction({ id: 'permissions-workflow', label: 'Workflow automation', detail: 'Cycle allow, prompt, or deny for multi-step workflow automation.', key: 'permissions.tools.workflow' }),
131
- settingAction({ id: 'permissions-delegate', label: 'Unknown tools', detail: 'Cycle allow, prompt, or deny for unknown or unregistered tools.', key: 'permissions.tools.delegate' }),
132
- { id: 'onboarding-mcp-server', label: 'Add MCP server', detail: 'Add or update one MCP server with command, args, role, trust, env refs, paths, and hosts.', editorKind: 'mcp-server', kind: 'editor', safety: 'safe' },
133
- { id: 'onboarding-secret-link', label: 'Link secret reference', detail: 'Link one config key to a goodvibes secret reference.', editorKind: 'secret-link', kind: 'editor', safety: 'safe' },
134
- { id: 'onboarding-secret-test', label: 'Test secret reference', detail: 'Check one stored secret reference without printing the value.', editorKind: 'secret-test', kind: 'editor', safety: 'safe' },
114
+ // MCP servers + secrets (forms that open inside the modal)
115
+ { id: 'onboarding-mcp-server', label: 'Add an MCP server', detail: 'Add or update one MCP server with command, args, role, trust, env refs, paths, and hosts.', editorKind: 'mcp-server', kind: 'editor', safety: 'safe' },
116
+ { id: 'onboarding-secret-link', label: 'Link a secret reference', detail: 'Link one config key to a goodvibes secret reference.', editorKind: 'secret-link', kind: 'editor', safety: 'safe' },
117
+ { id: 'onboarding-secret-test', label: 'Test a secret reference', detail: 'Check one stored secret reference without printing the value.', editorKind: 'secret-test', kind: 'editor', safety: 'safe' },
118
+ // Advanced tool runtime limits and debugging
135
119
  settingAction({ id: 'tools-auto-heal', label: 'Tool auto-heal', detail: 'Toggle automatic syntax repair for precision write and edit operations.', key: 'tools.autoHeal' }),
136
120
  settingAction({ id: 'tools-token-budget', label: 'Tool token budget', detail: 'Set the default token budget for precision read operations.', key: 'tools.defaultTokenBudget' }),
137
- settingAction({ id: 'tools-hooks-file', label: 'Hooks file', detail: 'Set the hook configuration file name relative to host data.', key: 'tools.hooksFile' }),
138
121
  settingAction({ id: 'storage-artifact-limit', label: 'Artifact storage limit', detail: 'Set the maximum artifact size for file, URL, multipart, and raw upload ingest.', key: 'storage.artifacts.maxBytes' }),
139
122
  settingAction({ id: 'telemetry-raw-prompts', label: 'Raw prompt telemetry', detail: 'Toggle raw prompt and response telemetry; leave off unless debugging locally.', key: 'telemetry.includeRawPrompts' }),
140
123
  ],
@@ -174,7 +157,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
174
157
  { id: 'personal-ops-calendar', label: 'Calendar workflows', detail: 'Calendar agenda and conflict checks use workflow cards with reviewed connector routes; reminders stay on confirmed schedules.', kind: 'guidance', safety: 'safe' },
175
158
  { id: 'personal-ops-notes', label: 'Scratchpad notes', detail: 'Open Agent-local notes for source triage, decisions, and handoff context.', targetCategoryId: 'notes', kind: 'workspace', safety: 'safe' },
176
159
  { id: 'personal-ops-note-create', label: 'Create note', detail: 'Capture temporary context as an Agent-local scratchpad note.', editorKind: 'note', kind: 'editor', safety: 'safe' },
177
- { id: 'personal-ops-host-tasks', label: 'Host tasks', detail: 'Inspect connected-host task state without creating, retrying, or mutating tasks.', command: '/tasks list', kind: 'command', safety: 'read-only' },
178
160
  { id: 'personal-ops-reminder', label: 'Create reminder', detail: 'Create one connected reminder schedule with real timing, optional delivery target, and explicit confirmation.', editorKind: 'reminder-schedule', kind: 'editor', safety: 'safe' },
179
161
  { id: 'personal-ops-routines', label: 'Routine library', detail: 'Open repeatable workflows and schedule-promotion readiness.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
180
162
  { id: 'personal-ops-schedules', label: 'Schedules', detail: 'Inspect connected schedules and promotion receipts from the automation area.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
@@ -242,18 +224,15 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
242
224
  { id: 'document-export-artifact-package', label: 'Export artifact package', detail: 'Open a confirmed form that copies selected saved artifacts into a workspace package directory or ZIP archive with a redacted manifest.', editorKind: 'artifact-export-package', kind: 'editor', safety: 'safe' },
243
225
  { id: 'document-draft-chat', label: 'Draft in conversation', detail: 'Draft or revise a document in the main conversation, then export or save the resulting artifact through the visible export routes.', kind: 'guidance', safety: 'safe' },
244
226
  { id: 'document-attach-image', label: 'Attach image', detail: 'Open an in-workspace image attachment form for a local image path and optional document prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
245
- { id: 'document-paste', label: 'Paste clipboard', detail: 'Insert clipboard text or image into the current prompt through the TUI paste route.', command: '/paste', kind: 'command', safety: 'safe' },
246
227
  { id: 'document-ingest-file', label: 'Ingest file source', detail: 'Open a confirmed form that imports one reviewed local file into isolated Agent Knowledge for document work.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
247
228
  { id: 'document-ingest-url-list', label: 'Import URL list', detail: 'Open a confirmed form that imports a reviewed URL list into isolated Agent Knowledge.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
248
229
  { id: 'document-export-conversation', label: 'Export current conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
249
230
  { id: 'document-export-session', label: 'Export saved session', detail: 'Open a form that exports one saved Agent session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
250
- { id: 'document-sources', label: 'Agent Knowledge sources', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
251
231
  { id: 'document-show-source', label: 'Show source or node', 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' },
252
232
  { id: 'document-artifacts', label: 'Artifact workspace', detail: 'Open the existing artifact workspace for attachments, source ingest, generated media, and artifact safety policy.', targetCategoryId: 'artifacts', kind: 'workspace', safety: 'safe' },
253
233
  { id: 'document-browse-artifacts', label: 'Browse artifacts', detail: 'Search saved uploads, exports, generated media, source artifacts, and comparison artifacts from one read-only browser.', editorKind: 'artifact-browser', kind: 'editor', safety: 'read-only' },
254
234
  { id: 'document-show-artifact', label: 'Show artifact', detail: 'Inspect one saved artifact by id with redacted metadata and bounded text preview when possible.', editorKind: 'artifact-show', kind: 'editor', safety: 'read-only' },
255
235
  { id: 'document-promote-artifact', label: 'Promote artifact to Knowledge', detail: 'Open a confirmed form that ingests one saved artifact into isolated Agent Knowledge.', editorKind: 'artifact-promote-knowledge', kind: 'editor', safety: 'safe' },
256
- { id: 'document-media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
257
236
  { id: 'document-generate-media', label: 'Generate media artifact', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
258
237
  { id: 'document-model-routing', label: 'Model routing', detail: 'Open provider/model route controls before any manual model comparison or route change.', targetCategoryId: 'account-model', kind: 'workspace', safety: 'safe' },
259
238
  { id: 'document-run-compare', label: 'Run blind compare', detail: 'Open a confirmed form that runs the same prompt or saved text artifact across two to four selectable models, hides candidate identities, and saves a review artifact.', editorKind: 'model-compare', kind: 'editor', safety: 'safe' },
@@ -282,16 +261,13 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
282
261
  { id: 'artifact-insert-document', label: 'Insert in document draft', detail: 'Open a confirmed form that inserts a saved artifact into an Agent-owned markdown draft as a new version.', editorKind: 'document-insert-artifact', kind: 'editor', safety: 'safe' },
283
262
  { id: 'artifact-attach-document', label: 'Attach to document draft', detail: 'Open a confirmed form that links a saved artifact to a document draft without rewriting the body.', editorKind: 'document-attach-artifact', kind: 'editor', safety: 'safe' },
284
263
  { id: 'artifact-attach-image', label: 'Attach image to prompt', detail: 'Open an in-workspace image attachment form for a local image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
285
- { id: 'artifact-paste', label: 'Paste clipboard', detail: 'Insert clipboard text or image into the current prompt through the TUI paste route.', command: '/paste', kind: 'command', safety: 'safe' },
286
264
  { id: 'artifact-export-conversation', label: 'Export current conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
287
265
  { id: 'artifact-session-export', label: 'Export saved session', detail: 'Open a form that exports one saved Agent session transcript as markdown or text.', editorKind: 'session-export-saved', kind: 'editor', safety: 'read-only' },
288
266
  { id: 'artifact-ingest-file', label: 'Ingest file into Agent Knowledge', detail: 'Open a confirmed form that imports one local file into the isolated Agent Knowledge segment.', editorKind: 'knowledge-file', kind: 'editor', safety: 'safe' },
289
267
  { id: 'artifact-ingest-url-list', label: 'Import URL list', detail: 'Open a confirmed form that imports a local URL list into Agent Knowledge.', editorKind: 'knowledge-urls', kind: 'editor', safety: 'safe' },
290
268
  { id: 'artifact-import-bookmarks', label: 'Import bookmarks', detail: 'Open a confirmed form that imports a browser bookmark export into Agent Knowledge.', editorKind: 'knowledge-bookmarks', kind: 'editor', safety: 'safe' },
291
269
  { id: 'artifact-browser-history', label: 'Import browser history', detail: 'Open a confirmed form that imports local browser history/bookmarks into Agent Knowledge.', editorKind: 'knowledge-browser-history', kind: 'editor', safety: 'safe' },
292
- { id: 'artifact-source-library', label: 'Agent Knowledge sources', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
293
270
  { id: 'artifact-show-source', label: 'Show source or node', 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' },
294
- { id: 'artifact-media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
295
271
  { id: 'artifact-generate-media', label: 'Generate image or video', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
296
272
  { id: 'artifact-review-compare', label: 'Review blind compare', detail: 'Open a read-only saved comparison review, side-by-side evidence view, or reviewer handoff diff for model comparison artifacts.', editorKind: 'model-compare-review', kind: 'editor', safety: 'read-only' },
297
273
  { id: 'artifact-diff-handoffs', label: 'Diff reviewer handoffs', detail: 'Open a read-only split-pane form that compares two saved reviewer handoff artifacts with section jump focus.', editorKind: 'model-compare-handoff-diff', kind: 'editor', safety: 'read-only' },
@@ -310,41 +286,17 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
310
286
  detail: 'Use this workspace for the main TUI conversation: context review, compaction, prompt helpers, transcript navigation, session continuity, title, export, undo, redo, and retry.',
311
287
  actions: [
312
288
  { id: 'conversation-return', label: 'Return to composer', detail: 'Close the workspace and keep working in the main Agent conversation.', kind: 'guidance', safety: 'safe' },
313
- { id: 'conversation-context', label: 'Context usage', detail: 'Inspect context-window usage, token pressure, and message breakdown.', command: '/context', kind: 'command', safety: 'read-only' },
314
289
  { id: 'conversation-context-refs', label: 'Context references', detail: 'Type @file, @folder, or @https://... in the composer to add bounded context to the main Agent turn. Use !@file only when you want raw file injection.', kind: 'guidance', safety: 'safe' },
315
- { id: 'conversation-compact', label: 'Compact conversation', detail: 'Summarize the current conversation to free context while preserving useful working state.', command: '/compact', kind: 'command', safety: 'safe' },
316
- { id: 'conversation-title', label: 'Show conversation title', detail: 'Show the current conversation title. Use title-edit actions from saved session forms for naming workflows.', command: '/title', kind: 'command', safety: 'read-only' },
317
290
  { id: 'conversation-save', label: 'Save current session', detail: 'Open a confirmed form that saves the current Agent session under a local name.', editorKind: 'session-save', kind: 'editor', safety: 'safe' },
318
- { id: 'conversation-save-command', label: 'Save session command', detail: 'Save the current Agent session through the direct slash command.', command: '/save', kind: 'command', safety: 'safe' },
319
291
  { id: 'conversation-load', label: 'Load saved session', detail: 'Open a confirmed form that loads one saved Agent session into the current conversation.', editorKind: 'session-load', kind: 'editor', safety: 'safe' },
320
- { id: 'conversation-sessions', label: 'Browse saved sessions', detail: 'Browse saved Agent sessions without leaving the TUI.', command: '/sessions', kind: 'command', safety: 'read-only' },
321
292
  { id: 'conversation-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' },
322
293
  { id: 'conversation-session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
323
294
  { id: 'conversation-session-export', 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' },
324
295
  { id: 'conversation-session-delete', label: 'Delete saved session', detail: 'Open a confirmed form before deleting one saved Agent session.', editorKind: 'session-delete', kind: 'editor', safety: 'safe' },
325
296
  { id: 'conversation-export-current', label: 'Export current conversation', detail: 'Open a confirmed form that exports the current Agent conversation to a workspace file.', editorKind: 'conversation-export', kind: 'editor', safety: 'safe' },
326
- { id: 'conversation-controls-review', label: 'Review transcript', detail: 'Inspect current transcript structure without changing the conversation.', command: '/conversation review', kind: 'command', safety: 'read-only' },
327
297
  { id: 'conversation-controls-find', label: 'Find transcript text', detail: 'Open a search form for the current Agent transcript.', editorKind: 'conversation-find', kind: 'editor', safety: 'read-only' },
328
- { id: 'conversation-controls-next-event', label: 'Next transcript event', detail: 'Jump to the next indexed transcript event.', command: '/conversation next', kind: 'command', safety: 'read-only' },
329
- { id: 'conversation-controls-prev-event', label: 'Previous transcript event', detail: 'Jump to the previous indexed transcript event.', command: '/conversation prev', kind: 'command', safety: 'read-only' },
330
- { id: 'conversation-bookmarks', label: 'Bookmarks', detail: 'List bookmarked transcript blocks.', command: '/bookmarks', kind: 'command', safety: 'read-only' },
331
- { id: 'conversation-paste', label: 'Paste clipboard', detail: 'Insert clipboard text or image into the prompt through the TUI paste route.', command: '/paste', kind: 'command', safety: 'safe' },
332
298
  { id: 'conversation-image', label: 'Attach image', detail: 'Open an in-workspace image form for attaching a real image path and optional prompt.', editorKind: 'image-input', kind: 'editor', safety: 'safe' },
333
- { id: 'conversation-image-command', label: 'Attach image command', detail: 'Attach an image file to the next Agent message using the slash command.', command: '/image', kind: 'command', safety: 'safe' },
334
299
  { id: 'conversation-tts', 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' },
335
- { id: 'conversation-tts-command', label: 'TTS command', detail: 'Submit or stop a spoken-response prompt using the direct slash command.', command: '/tts', kind: 'command', safety: 'safe' },
336
- { id: 'conversation-undo', label: 'Undo last turn', detail: 'Remove the last conversation turn from the current transcript.', command: '/undo', kind: 'command', safety: 'safe' },
337
- { id: 'conversation-redo', label: 'Redo turn', detail: 'Restore the last undone conversation turn.', command: '/redo', kind: 'command', safety: 'safe' },
338
- { id: 'conversation-retry', label: 'Retry last message', detail: 'Re-send the last user message in the main Agent conversation.', command: '/retry', kind: 'command', safety: 'safe' },
339
- { id: 'conversation-clear', label: 'Clear display', detail: 'Clear the visible transcript display while keeping model context.', command: '/clear', kind: 'command', safety: 'safe' },
340
- { id: 'conversation-reset', label: 'Reset conversation', detail: 'Clear display and model context for a fresh conversation.', command: '/reset', kind: 'command', safety: 'safe' },
341
- { id: 'conversation-expand', label: 'Expand transcript blocks', detail: 'Expand collapsed thinking, tool, code, or all transcript blocks.', command: '/expand', kind: 'command', safety: 'safe' },
342
- { id: 'conversation-collapse', label: 'Collapse transcript blocks', detail: 'Collapse thinking, tool, code, or all transcript blocks to reduce visual noise.', command: '/collapse', kind: 'command', safety: 'safe' },
343
- { id: 'conversation-next-error', label: 'Next error', detail: 'Jump to the next error-like transcript message.', command: '/next-error', kind: 'command', safety: 'read-only' },
344
- { id: 'conversation-prev-error', label: 'Previous error', detail: 'Jump to the previous error-like transcript message.', command: '/prev-error', kind: 'command', safety: 'read-only' },
345
- { id: 'conversation-shortcuts', label: 'Keyboard shortcuts', detail: 'Open the keyboard shortcuts reference.', command: '/shortcuts', kind: 'command', safety: 'read-only' },
346
- { id: 'conversation-keybindings', label: 'Keybindings', detail: 'List current keyboard bindings and their config path.', command: '/keybindings', kind: 'command', safety: 'read-only' },
347
- { id: 'conversation-command-browser', label: 'Command browser', detail: 'Open registry-driven command browsing inside the TUI.', command: '/commands', kind: 'command', safety: 'read-only' },
348
300
  ],
349
301
  },
350
302
  {
@@ -355,26 +307,15 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
355
307
  detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
356
308
  actions: [
357
309
  { id: 'channel-setup-path', label: 'Setup path', detail: 'Use this workspace as the channel setup guide: pair companion, inspect readiness, check accounts/policies/status, review one channel, then add delivery targets only through confirmed forms.', kind: 'guidance', safety: 'safe' },
358
- { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing view for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
359
- { id: 'channel-guide', label: 'Channel setup guide', detail: 'Show the ordered per-channel setup guide with setup schema, policy, live status, and explicit test-send steps.', command: '/channels guide', kind: 'command', safety: 'read-only' },
360
- { id: 'channel-readiness', label: 'Channel readiness', detail: 'Show the read-only readiness matrix.', command: '/channels', kind: 'command', safety: 'read-only' },
361
- { 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' },
362
- { id: 'channel-triage', label: 'Channel triage', detail: 'Inspect setup blockers, delivery retry candidates, visible surface messages, route bindings, and redacted Agent receipts without sending messages.', command: '/channels triage', kind: 'command', safety: 'read-only' },
363
- { 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' },
364
- { id: 'channel-policies', label: 'Channel policies', detail: 'Inspect channel delivery policy posture without changing routing.', command: '/channels policies', kind: 'command', safety: 'read-only' },
365
- { 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' },
366
- { id: 'channel-deliveries', label: 'Delivery receipts', detail: 'Inspect recent confirmed channel sends with message bodies and secret-bearing target values redacted.', command: '/channels deliveries', kind: 'command', safety: 'read-only' },
367
310
  { 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' },
368
311
  { 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' },
369
312
  { 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' },
370
- { 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' },
371
313
  { id: 'notification-send', label: 'Send notification', detail: 'Open a confirmed form that sends one plain-text message to configured Agent notification webhook targets.', editorKind: 'notify-send', kind: 'editor', safety: 'safe' },
372
314
  { id: 'channel-send', label: 'Send channel message', detail: 'Open a confirmed form that sends one message through a configured delivery target.', editorKind: 'channel-send', kind: 'editor', safety: 'safe' },
373
315
  { 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' },
374
316
  { 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' },
375
317
  { 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' },
376
318
  { 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' },
377
- { 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' },
378
319
  { 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' },
379
320
  ],
380
321
  },
@@ -385,27 +326,15 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
385
326
  summary: 'MCP server setup, trust review, and tool inventory.',
386
327
  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.',
387
328
  actions: [
388
- { 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' },
389
- { id: 'mcp-review', label: 'MCP review', detail: 'Inspect MCP server connection, trust, role, and quarantine posture.', command: '/mcp review', kind: 'command', safety: 'read-only' },
390
- { id: 'mcp-tools', label: 'Tool inventory', detail: 'List available MCP tools grouped by server.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
391
329
  { 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' },
392
- { 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' },
393
330
  { 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' },
394
- { 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' },
395
331
  { 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' },
396
- { 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' },
397
- { 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' },
398
332
  { 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' },
399
333
  { 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' },
400
334
  { 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' },
401
335
  { id: 'secret-delete', label: 'Delete secret', detail: 'Open a confirmed form that deletes one stored secret key from the selected scope and storage mode.', editorKind: 'secret-delete', kind: 'editor', safety: 'safe' },
402
- { 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' },
403
336
  { 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' },
404
337
  { 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' },
405
- { id: 'security-review', label: 'Security review', detail: 'Inspect token posture, MCP attack paths, policy lint, and plugin risk without mutating security state.', command: '/security review', kind: 'command', safety: 'read-only' },
406
- { 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' },
407
- { 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' },
408
- { 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' },
409
338
  { 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' },
410
339
  ],
411
340
  },
@@ -416,28 +345,18 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
416
345
  summary: 'Agent Knowledge and source-backed lookup.',
417
346
  detail: 'Agent knowledge calls use the isolated Agent Knowledge route family only. Default knowledge and non-Agent knowledge segments are not the Agent knowledge environment.',
418
347
  actions: [
419
- { id: 'knowledge-status', label: 'Knowledge status', detail: 'Inspect Agent knowledge readiness and counts.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
420
348
  { 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' },
421
349
  { 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' },
422
350
  { 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' },
423
351
  { 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' },
424
352
  { 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' },
425
353
  { 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' },
426
- { id: 'knowledge-connectors', label: 'Connector inventory', detail: 'List Agent Knowledge connectors and readiness without ingesting anything.', command: '/knowledge connectors', kind: 'command', safety: 'read-only' },
427
354
  { 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' },
428
355
  { 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' },
429
356
  { 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' },
430
- { 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' },
431
- { 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' },
432
- { id: 'knowledge-nodes', label: 'Node library', detail: 'List indexed Agent Knowledge nodes without querying default knowledge.', command: '/knowledge list --kind nodes', kind: 'command', safety: 'read-only' },
433
- { 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' },
434
357
  { 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' },
435
358
  { 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' },
436
359
  { 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' },
437
- { 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' },
438
- { id: 'knowledge-lint', label: 'Knowledge lint', detail: 'Inspect Agent Knowledge lint findings.', command: '/knowledge lint', kind: 'command', safety: 'read-only' },
439
- { id: 'knowledge-reports', label: 'Knowledge reports', detail: 'Inspect recent Agent Knowledge reports without mutating knowledge.', command: '/knowledge reports', kind: 'command', safety: 'read-only' },
440
- { id: 'knowledge-schedules', label: 'Knowledge schedules', detail: 'Inspect Agent Knowledge report schedules without changing schedules.', command: '/knowledge schedules', kind: 'command', safety: 'read-only' },
441
360
  { 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' },
442
361
  { 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' },
443
362
  { id: 'knowledge-consolidate', label: 'Consolidate knowledge', detail: 'Open a confirmed form that runs isolated Agent Knowledge consolidation.', editorKind: 'knowledge-consolidate', kind: 'editor', safety: 'safe' },
@@ -455,20 +374,12 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
455
374
  { id: 'voice-workflow-posture', label: 'Voice workflows', detail: 'Inspect push-to-talk, voice memo transcription, spoken responses, and wake-word readiness with device action:"voice".', kind: 'guidance', safety: 'read-only' },
456
375
  { id: 'device-capability-map', label: 'Device capability map', detail: 'Inspect pairing, mobile command routing, browser/PWA, notifications, browser/desktop control, and certified camera/location readiness with device action:"status" without claiming uncertified contracts.', kind: 'guidance', safety: 'read-only' },
457
376
  { id: 'browser-cockpit-readiness', label: 'Browser/PWA readiness', detail: 'Inspect the connected browser cockpit/PWA route, certified workspace category coverage, mobile controls, and first-run receipt evidence with computer action:"browser" before opening a browser.', kind: 'guidance', safety: 'read-only' },
458
- { id: 'tts-config', label: 'Configure live TTS', detail: 'Open the settings workspace at the TTS group.', command: '/config tts', kind: 'command', safety: 'safe' },
459
- { 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' },
460
- { id: 'voice-review', label: 'Voice review', detail: 'Inspect local voice posture before enabling spoken interaction.', command: '/voice review', kind: 'command', safety: 'read-only' },
461
377
  { id: 'voice-enable', label: 'Enable voice', detail: 'Open a confirmed form that enables local voice interaction.', editorKind: 'voice-enable', kind: 'editor', safety: 'safe' },
462
378
  { id: 'voice-disable', label: 'Disable voice', detail: 'Open a confirmed form that disables local voice interaction.', editorKind: 'voice-disable', kind: 'editor', safety: 'safe' },
463
379
  { 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' },
464
380
  { 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' },
465
381
  { 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' },
466
- { id: 'tts-command', label: 'TTS command', detail: 'Submit a prompt for spoken playback or stop current playback from the TUI.', command: '/tts', kind: 'command', safety: 'safe' },
467
382
  { 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' },
468
- { id: 'image-command', label: 'Attach image command', detail: 'Attach an image file to the next message from the TUI command router.', command: '/image', kind: 'command', safety: 'safe' },
469
- { id: 'media-providers', label: 'Media providers', detail: 'Inspect configured media provider readiness without generating artifacts.', command: '/media providers', kind: 'command', safety: 'read-only' },
470
- { 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' },
471
- { id: 'voice-media-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' },
472
383
  { id: 'media-generate', label: 'Generate media', detail: 'Open a confirmed prompt form that generates image or video artifacts through configured media providers.', editorKind: 'media-generate', kind: 'editor', safety: 'safe' },
473
384
  { id: 'browser-research', label: 'Research the web', detail: 'Submit a read-only web research request to the main Agent conversation.', editorKind: 'web-research', kind: 'editor', safety: 'read-only' },
474
385
  { id: 'browser-url', label: 'Inspect URL', detail: 'Submit one URL inspection request to the main Agent conversation without ingesting it.', editorKind: 'web-fetch', kind: 'editor', safety: 'read-only' },
@@ -481,9 +392,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
481
392
  summary: 'Isolated Agent homes, starter templates, and setup bundles.',
482
393
  detail: 'Agent profiles isolate Agent state. Named homes and starter templates let one install behave like separate assistants for household, research, travel, operations, or personal workflows.',
483
394
  actions: [
484
- { 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' },
485
- { id: 'runtime-profile-templates', label: 'Browse starter templates', detail: 'List built-in and Agent-local starter templates with persona, skill, routine, and source details.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
486
- { 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' },
487
395
  { 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' },
488
396
  { 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' },
489
397
  { 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' },
@@ -504,11 +412,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
504
412
  summary: 'Local assistant memory, notes, routines, skills, and reusable behavior.',
505
413
  detail: 'Memory, notes, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory or notes.',
506
414
  actions: [
507
- { id: 'memory-list', label: 'List memory', detail: 'Print the full Agent-owned memory list.', command: '/memory list', kind: 'command', safety: 'read-only' },
508
415
  { id: 'memory-posture', label: 'Memory posture', detail: 'Inspect Agent-local memory, prompt-active recall, vector health, embedding providers, and external-memory provider gaps with memory action:"status".', kind: 'guidance', safety: 'read-only' },
509
416
  { id: 'memory-search', label: 'Search memory', detail: 'Open an in-workspace Agent-local memory search form. This never queries default knowledge or other product routes.', editorKind: 'memory-search', kind: 'editor', safety: 'read-only' },
510
417
  { 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' },
511
- { id: 'memory-queue', label: 'Review queue', detail: 'Print the Agent-local memory review queue.', command: '/memory queue', kind: 'command', safety: 'read-only' },
512
418
  { id: 'memory-learning-curator', label: 'Learning curator', detail: 'Inspect ranked local memory, note, persona, skill, bundle, routine, duplicate-consolidation, completed-work, completed-research, and saved-session candidates with review, setup, stale, proposal, capture, diff, and rollback routes.', kind: 'guidance', safety: 'read-only' },
513
419
  { id: 'memory-prompt-plan', label: 'Prompt plan', detail: 'Explain which reviewed memories and setup-ready behaviors can guide the assistant now, what is suppressed, and which scored review routes should run before prompt context expands.', kind: 'guidance', safety: 'read-only' },
514
420
  { 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' },
@@ -529,8 +435,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
529
435
  { 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' },
530
436
  { 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' },
531
437
  { 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' },
532
- { 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' },
533
- { id: 'memory-vector-doctor', label: 'Vector doctor', detail: 'Inspect Agent-local memory vector index health.', command: '/memory vector doctor', kind: 'command', safety: 'read-only' },
534
438
  { 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' },
535
439
  { id: 'personas', label: 'Persona library', detail: 'Open the local persona workspace for active role selection and review.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
536
440
  { id: 'skills', label: 'Local skill library', detail: 'Open the local skill workspace for reusable procedures and review.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
@@ -567,15 +471,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
567
471
  summary: 'VIBE.md personality and local behavior profiles for the main assistant.',
568
472
  detail: 'VIBE.md is the friendly personality file for the serial Agent. Personas remain local behavior profiles, not separate Agent identities.',
569
473
  actions: [
570
- { id: 'vibe-status', label: 'VIBE.md status', detail: 'Show project/global VIBE.md files that will shape later main-conversation turns, including blocked files.', command: '/vibe status', kind: 'command', safety: 'read-only' },
571
- { id: 'vibe-init-project', label: 'Create project VIBE.md', detail: 'Preview creation of a project VIBE.md personality file in the current workspace.', command: '/vibe init', kind: 'command', safety: 'read-only' },
572
- { id: 'vibe-init-global', label: 'Create global VIBE.md', detail: 'Preview creation of a global Agent VIBE.md personality file under the Agent home.', command: '/vibe init --global', kind: 'command', safety: 'read-only' },
573
- { id: 'vibe-import-persona', label: 'Import VIBE as persona', detail: 'Preview importing VIBE.md into the reviewed local persona library for explicit activation/review workflows.', command: '/vibe import-persona project', kind: 'command', safety: 'read-only' },
574
- { id: 'personas-list', label: 'List personas', detail: 'Print the full local persona library.', command: '/personas list', kind: 'command', safety: 'read-only' },
575
- { 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' },
576
474
  { id: 'personas-search', label: 'Search personas', detail: 'Open a search form for the local persona library.', editorKind: 'persona-search', kind: 'editor', safety: 'read-only' },
577
475
  { 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' },
578
- { 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' },
579
476
  { 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' },
580
477
  { 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' },
581
478
  { id: 'personas-next', label: 'Next persona', detail: 'Move the local persona selection down without changing active state.', localKind: 'persona', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
@@ -594,15 +491,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
594
491
  summary: 'Reusable local procedures with setup readiness.',
595
492
  detail: 'Skills are local, reviewable procedures with optional env/command requirements. Enabled skills inform the main conversation; secret-looking content is rejected.',
596
493
  actions: [
597
- { id: 'skills-list', label: 'List skills', detail: 'Print the full Agent-local skill library.', command: '/skills list', kind: 'command', safety: 'read-only' },
598
- { id: 'skills-enabled', label: 'Enabled skills', detail: 'Show only skills currently injected into Agent guidance.', command: '/skills enabled', kind: 'command', safety: 'read-only' },
599
- { id: 'skills-attention', label: 'Needs setup', detail: 'Show local skills whose env or command requirements are not ready.', command: '/skills attention', kind: 'command', safety: 'read-only' },
600
494
  { id: 'skills-search', label: 'Search skills', detail: 'Open a search form for Agent-local skills.', editorKind: 'skill-search', kind: 'editor', safety: 'read-only' },
601
495
  { 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' },
602
- { 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: '/skills discover', kind: 'command', safety: 'read-only' },
603
496
  { 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' },
604
- { id: 'skills-bundles', label: 'Skill bundles', detail: 'List reviewable groups of local skills that can be enabled together.', command: '/skills bundle list', kind: 'command', safety: 'read-only' },
605
- { id: 'skills-bundle-attention', label: 'Bundle setup gaps', detail: 'Show skill bundles whose member skills have missing env or command requirements.', command: '/skills bundle attention', kind: 'command', safety: 'read-only' },
606
497
  { 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' },
607
498
  { id: 'skills-search-bundle', label: 'Search bundles', detail: 'Open an in-workspace form that searches Agent-local skill bundles.', editorKind: 'skill-bundle-search', kind: 'editor', safety: 'read-only' },
608
499
  { id: 'skills-show-bundle', label: 'Show bundle', detail: 'Open an in-workspace form that shows one Agent-local skill bundle by id.', editorKind: 'skill-bundle-show', kind: 'editor', safety: 'read-only' },
@@ -631,12 +522,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
631
522
  actions: [
632
523
  { id: 'routines-setup-path', label: 'Routine setup path', detail: 'Create or import a routine, resolve setup gaps, review it, then start it in the main conversation or promote it explicitly to a connected schedule.', kind: 'guidance', safety: 'safe' },
633
524
  { id: 'routines-next-action', label: 'Next routine action', detail: 'Use the detail pane to choose the next useful routine step from local readiness, review state, and promotion receipts.', kind: 'guidance', safety: 'safe' },
634
- { id: 'routines-list', label: 'List routines', detail: 'Print the full Agent-local routine library.', command: '/routines list', kind: 'command', safety: 'read-only' },
635
- { id: 'routines-enabled', label: 'Enabled routines', detail: 'Show routines available for direct use.', command: '/routines enabled', kind: 'command', safety: 'read-only' },
636
- { 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' },
637
525
  { id: 'routines-search', label: 'Search routines', detail: 'Open a search form for Agent-local routines.', editorKind: 'routine-search', kind: 'editor', safety: 'read-only' },
638
526
  { 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' },
639
- { 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' },
640
527
  { 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' },
641
528
  { 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' },
642
529
  { id: 'routines-next', label: 'Next routine', detail: 'Move the local routine selection down without changing enabled state.', localKind: 'routine', selectionDelta: 1, kind: 'local-selection', safety: 'safe' },
@@ -648,7 +535,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
648
535
  { id: 'routines-review', label: 'Review selected', detail: 'Mark the selected local routine reviewed after inspecting it.', localKind: 'routine', localOperation: 'routine-review', kind: 'local-operation', safety: 'safe' },
649
536
  { id: 'routines-delete', label: 'Delete selected', detail: 'Open a confirmation form before deleting the selected Agent-local routine.', localKind: 'routine', localOperation: 'routine-delete', kind: 'local-operation', safety: 'safe' },
650
537
  { 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' },
651
- { id: 'routines-receipts', label: 'Promotion receipts', detail: 'Inspect local redacted routine schedule promotion receipts.', command: '/routines receipts', kind: 'command', safety: 'read-only' },
652
538
  { 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' },
653
539
  ],
654
540
  },
@@ -663,12 +549,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
663
549
  { id: 'work-background-processes', label: 'Background processes', detail: 'Inspect tracked local background processes, bounded output tails, visible monitor routes, and lifecycle controls with execution action:"processes".', kind: 'guidance', safety: 'read-only' },
664
550
  { id: 'work-process-capabilities', label: 'Process capabilities', detail: 'Inspect process parity for start/list/poll/wait/log/kill/write, PTY, and sudo before choosing a local execution route.', kind: 'guidance', safety: 'read-only' },
665
551
  { 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' },
666
- { id: 'conversation-review', label: 'Review transcript', detail: 'Inspect current transcript structure without changing the conversation.', command: '/conversation review', kind: 'command', safety: 'read-only' },
667
- { 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' },
668
- { id: 'conversation-hotspots', label: 'Transcript hotspots', detail: 'Show transcript event hotspots from the Agent workspace.', command: '/conversation hotspots', kind: 'command', safety: 'read-only' },
669
- { 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' },
670
- { 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' },
671
- { 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' },
672
552
  { 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' },
673
553
  { 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' },
674
554
  { 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' },
@@ -682,12 +562,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
682
562
  { 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' },
683
563
  { id: 'session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
684
564
  { 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' },
685
- { id: 'tasks-list', label: 'Host tasks', detail: 'Inspect connected-host task state without creating, retrying, or mutating tasks.', command: '/tasks list', kind: 'command', safety: 'read-only' },
686
565
  { id: 'tasks-filter', label: 'Filter host tasks', detail: 'Open a status/kind form for read-only connected-host task filtering.', editorKind: 'task-list-filter', kind: 'editor', safety: 'read-only' },
687
566
  { id: 'task-show', label: 'Inspect host task', detail: 'Open a task-id form for read-only connected-host task metadata.', editorKind: 'task-show', kind: 'editor', safety: 'read-only' },
688
567
  { 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' },
689
- { id: 'sessions-list', label: 'Saved sessions', detail: 'Browse saved Agent sessions without leaving the TUI.', command: '/sessions', kind: 'command', safety: 'read-only' },
690
- { id: 'approvals', label: 'Review approvals', detail: 'Print the approval matrix without approving or denying requests.', command: '/approval matrix', kind: 'command', safety: 'read-only' },
691
568
  { 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' },
692
569
  { id: 'approval-approve', label: 'Approve request', detail: 'Open a confirmed form for approving one pending connected-host approval request by id.', editorKind: 'approval-approve', kind: 'editor', safety: 'safe' },
693
570
  { id: 'approval-deny', label: 'Deny request', detail: 'Open a confirmed form for denying one pending connected-host approval request by id.', editorKind: 'approval-deny', kind: 'editor', safety: 'safe' },
@@ -706,7 +583,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
706
583
  { id: 'schedule-autonomy-queue', label: 'Autonomy queue', detail: 'Inspect visible reminder, routine promotion, connected schedule, automation run, and cancellation routes.', kind: 'guidance', safety: 'read-only' },
707
584
  { id: 'schedule-next-action', label: 'Next schedule action', detail: 'Use the detail pane to choose whether to create a reminder, prepare a routine, promote a routine, or reconcile existing receipts.', kind: 'guidance', safety: 'safe' },
708
585
  { id: 'schedule-reminder', label: 'Create reminder', detail: 'Open an in-workspace form that creates one connected reminder schedule with real timing, optional delivery target, and explicit confirmation.', editorKind: 'reminder-schedule', kind: 'editor', safety: 'safe' },
709
- { 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' },
710
586
  { id: 'schedule-edit', label: 'Edit schedule', detail: 'Open a confirmed form that edits one connected schedule name, cadence, or prompt by id.', editorKind: 'schedule-edit', kind: 'editor', safety: 'safe' },
711
587
  { id: 'automation-job-run', label: 'Run job now', detail: 'Open a confirmed form that runs one connected-host automation job by id.', editorKind: 'automation-job-run', kind: 'editor', safety: 'safe' },
712
588
  { id: 'automation-job-pause', label: 'Pause job', detail: 'Open a confirmed form that pauses one connected-host automation job by id.', editorKind: 'automation-job-pause', kind: 'editor', safety: 'safe' },
@@ -715,12 +591,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
715
591
  { id: 'automation-run-retry', label: 'Retry run', detail: 'Open a confirmed form that retries one connected-host automation run by id.', editorKind: 'automation-run-retry', kind: 'editor', safety: 'safe' },
716
592
  { id: 'schedule-run', label: 'Run schedule now', detail: 'Open a confirmed form that triggers one connected-host schedule by id.', editorKind: 'schedule-run', kind: 'editor', safety: 'safe' },
717
593
  { id: 'schedule-promote-routine', label: 'Promote routine', detail: 'Open an in-workspace form that creates one connected schedule from an Agent-local routine with real timing, optional delivery target, and explicit confirmation.', editorKind: 'routine-schedule', kind: 'editor', safety: 'safe' },
718
- { 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' },
719
594
  { 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' },
720
- { 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' },
721
595
  { id: 'schedule-delivery-targets', label: 'Delivery targets', detail: 'Open Channels to pair companion surfaces, inspect route readiness, and add explicit notification targets before reminder delivery.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
722
596
  { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule creation remains blocked. Connected edit, run, enable, disable, and delete actions use explicit confirmed forms only.', kind: 'guidance', safety: 'blocked' },
723
- { 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' },
724
597
  { 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' },
725
598
  ],
726
599
  },
@@ -734,7 +607,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
734
607
  { id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate only when isolation, remote execution, parallelism, separate worktrees, a TUI workflow, or explicit review improves the user outcome.', kind: 'guidance', safety: 'delegates' },
735
608
  { id: 'delegate-task', label: 'Delegate build task', detail: 'Open a confirmed form that sends one explicit build/fix/review task and handoff brief to GoodVibes TUI/shared-session routes.', editorKind: 'delegate-task', kind: 'editor', safety: 'delegates' },
736
609
  { id: 'review-command', label: 'Review delegation command', detail: 'Use the confirmed delegation form only when the user explicitly asks for code review/build execution. Include the actual task text, preserve the full original ask, and request delegated review only when asked.', kind: 'guidance', safety: 'delegates' },
737
- { 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' },
738
610
  ],
739
611
  },
740
612
  {