@pellux/goodvibes-agent 1.4.3 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +7 -7
  3. package/dist/package/main.js +7450 -12285
  4. package/docs/README.md +2 -2
  5. package/docs/channels-remote-and-api.md +1 -1
  6. package/docs/getting-started.md +2 -2
  7. package/docs/release-and-publishing.md +1 -1
  8. package/docs/tools-and-commands.md +5 -5
  9. package/package.json +4 -2
  10. package/release/performance-snapshot.json +2 -2
  11. package/release/release-notes.md +11 -7
  12. package/release/release-readiness.json +6 -6
  13. package/src/agent/behavior-discovery-summary.ts +4 -18
  14. package/src/agent/calendar-registry.ts +322 -0
  15. package/src/agent/competitive-feature-inventory.ts +268 -130
  16. package/src/agent/document-registry.ts +5 -1
  17. package/src/agent/email/email-service.ts +350 -0
  18. package/src/agent/email/imap-client.ts +596 -0
  19. package/src/agent/email/smtp-client.ts +453 -0
  20. package/src/agent/ics-calendar.ts +662 -0
  21. package/src/agent/ics-timezone.ts +172 -0
  22. package/src/agent/markdown-frontmatter.ts +31 -0
  23. package/src/agent/memory-safety.ts +1 -1
  24. package/src/agent/note-registry.ts +3 -9
  25. package/src/agent/persona-discovery.ts +3 -15
  26. package/src/agent/persona-registry.ts +1 -10
  27. package/src/agent/research-source-registry.ts +5 -1
  28. package/src/agent/routine-discovery.ts +3 -15
  29. package/src/agent/runtime-profile.ts +3 -0
  30. package/src/agent/skill-discovery.ts +3 -15
  31. package/src/agent/skill-draft-proposer.ts +203 -0
  32. package/src/agent/skill-draft-runner.ts +201 -0
  33. package/src/agent/skill-registry.ts +36 -1
  34. package/src/agent/skill-standard.ts +99 -0
  35. package/src/agent/vibe-file.ts +7 -22
  36. package/src/cli/completion.ts +1 -1
  37. package/src/cli/config-overrides.ts +10 -1
  38. package/src/cli/redaction.ts +17 -5
  39. package/src/config/provider-model.ts +2 -1
  40. package/src/config/secret-config.ts +13 -6
  41. package/src/core/activity-feed.ts +97 -0
  42. package/src/core/away-digest.ts +161 -0
  43. package/src/core/conversation-rendering.ts +7 -3
  44. package/src/core/conversation.ts +22 -15
  45. package/src/core/hardware-profile.ts +362 -0
  46. package/src/core/last-seen-store.ts +78 -0
  47. package/src/core/plain-language.ts +52 -0
  48. package/src/core/setup-incomplete-hint.ts +90 -0
  49. package/src/core/system-message-router.ts +38 -87
  50. package/src/input/agent-workspace-basic-command-editor-submission.ts +60 -220
  51. package/src/input/agent-workspace-basic-command-editors.ts +39 -141
  52. package/src/input/agent-workspace-categories.ts +63 -158
  53. package/src/input/agent-workspace-command-editor.ts +4 -0
  54. package/src/input/agent-workspace-host-category.ts +0 -5
  55. package/src/input/agent-workspace-local-editor-submission.ts +3 -1
  56. package/src/input/agent-workspace-navigation.ts +10 -3
  57. package/src/input/agent-workspace-onboarding-actions.ts +132 -0
  58. package/src/input/agent-workspace-onboarding-categories.ts +29 -26
  59. package/src/input/agent-workspace-onboarding-finish.ts +11 -4
  60. package/src/input/agent-workspace-onboarding-state.ts +111 -0
  61. package/src/input/agent-workspace-profile-editor-submission.ts +260 -0
  62. package/src/input/agent-workspace-profile-editors.ts +155 -0
  63. package/src/input/agent-workspace-subscription-editor.ts +7 -0
  64. package/src/input/agent-workspace-types.ts +5 -1
  65. package/src/input/agent-workspace.ts +65 -39
  66. package/src/input/command-registry.ts +18 -5
  67. package/src/input/commands/agent-runtime-profile-runtime.ts +2 -1
  68. package/src/input/commands/agent-skills-runtime.ts +60 -3
  69. package/src/input/commands/calendar-runtime.ts +209 -0
  70. package/src/input/commands/channels-runtime.ts +1 -0
  71. package/src/input/commands/command-error.ts +9 -0
  72. package/src/input/commands/compat-runtime.ts +1 -0
  73. package/src/input/commands/config.ts +1 -0
  74. package/src/input/commands/conversation-runtime.ts +1 -1
  75. package/src/input/commands/delegation-runtime.ts +5 -6
  76. package/src/input/commands/email-runtime.ts +387 -0
  77. package/src/input/commands/experience-runtime.ts +17 -4
  78. package/src/input/commands/guidance-runtime.ts +1 -1
  79. package/src/input/commands/health-runtime.ts +6 -1
  80. package/src/input/commands/knowledge-format.ts +73 -0
  81. package/src/input/commands/knowledge.ts +9 -74
  82. package/src/input/commands/local-provider-runtime.ts +2 -1
  83. package/src/input/commands/local-runtime.ts +10 -4
  84. package/src/input/commands/mcp-runtime.ts +7 -0
  85. package/src/input/commands/notify-runtime.ts +17 -1
  86. package/src/input/commands/onboarding-runtime.ts +1 -0
  87. package/src/input/commands/operator-actions-runtime.ts +1 -0
  88. package/src/input/commands/operator-runtime.ts +3 -0
  89. package/src/input/commands/personas-runtime.ts +1 -0
  90. package/src/input/commands/platform-access-runtime.ts +40 -17
  91. package/src/input/commands/product-runtime.ts +6 -1
  92. package/src/input/commands/provider-accounts-runtime.ts +3 -2
  93. package/src/input/commands/qrcode-runtime.ts +1 -0
  94. package/src/input/commands/routines-runtime.ts +1 -0
  95. package/src/input/commands/runtime-services.ts +0 -13
  96. package/src/input/commands/security-runtime.ts +1 -0
  97. package/src/input/commands/session-content.ts +1 -0
  98. package/src/input/commands/shell-core.ts +5 -2
  99. package/src/input/commands/subscription-runtime.ts +33 -9
  100. package/src/input/commands/support-bundle-runtime.ts +8 -1
  101. package/src/input/commands/tasks-runtime.ts +1 -0
  102. package/src/input/commands/tts-runtime.ts +1 -0
  103. package/src/input/commands/vibe-runtime.ts +1 -0
  104. package/src/input/commands.ts +4 -0
  105. package/src/input/feed-context-factory.ts +3 -12
  106. package/src/input/handler-command-route.ts +7 -60
  107. package/src/input/handler-feed-routes.ts +0 -194
  108. package/src/input/handler-feed.ts +2 -54
  109. package/src/input/handler-interactions.ts +0 -2
  110. package/src/input/handler-modal-stack.ts +0 -9
  111. package/src/input/handler-picker-routes.ts +24 -1
  112. package/src/input/handler-shortcuts.ts +11 -40
  113. package/src/input/handler-ui-state.ts +13 -0
  114. package/src/input/handler.ts +8 -35
  115. package/src/input/keybindings.ts +40 -17
  116. package/src/input/model-picker-local-fit.ts +130 -0
  117. package/src/input/submission-router.ts +0 -5
  118. package/src/main.ts +111 -89
  119. package/src/renderer/activity-sidebar.ts +186 -0
  120. package/src/renderer/agent-workspace-context-lines.ts +5 -48
  121. package/src/renderer/agent-workspace-style.ts +1 -1
  122. package/src/renderer/agent-workspace.ts +14 -2
  123. package/src/renderer/compositor.ts +37 -125
  124. package/src/renderer/conversation-overlays.ts +3 -3
  125. package/src/renderer/help-overlay.ts +7 -5
  126. package/src/renderer/model-workspace.ts +101 -86
  127. package/src/{panels → renderer}/polish.ts +3 -3
  128. package/src/renderer/shell-surface.ts +4 -5
  129. package/src/renderer/status-token.ts +31 -11
  130. package/src/renderer/tab-strip.ts +1 -1
  131. package/src/renderer/tool-call.ts +7 -8
  132. package/src/renderer/tool-labels.ts +92 -0
  133. package/src/renderer/ui-factory.ts +48 -96
  134. package/src/runtime/bootstrap-command-context.ts +0 -5
  135. package/src/runtime/bootstrap-command-parts.ts +6 -15
  136. package/src/runtime/bootstrap-core.ts +34 -13
  137. package/src/runtime/bootstrap-hook-bridge.ts +3 -1
  138. package/src/runtime/bootstrap-shell.ts +3 -50
  139. package/src/runtime/bootstrap.ts +3 -4
  140. package/src/runtime/context.ts +1 -1
  141. package/src/runtime/diagnostics/panels/index.ts +0 -1
  142. package/src/runtime/diagnostics/panels/policy.ts +1 -1
  143. package/src/runtime/execution-ledger.ts +16 -1
  144. package/src/runtime/index.ts +6 -1
  145. package/src/runtime/onboarding/index.ts +1 -0
  146. package/src/runtime/onboarding/onboarding-state.ts +200 -0
  147. package/src/{panels → runtime}/provider-account-snapshot.ts +5 -2
  148. package/src/runtime/services.ts +16 -4
  149. package/src/runtime/terminal-output-guard.ts +7 -0
  150. package/src/runtime/tool-permission-safety.ts +1 -1
  151. package/src/runtime/ui/model-picker/data-provider.ts +1 -1
  152. package/src/runtime/ui/model-picker/health-enrichment.ts +2 -2
  153. package/src/runtime/ui/model-picker/types.ts +2 -2
  154. package/src/runtime/ui/provider-health/data-provider.ts +3 -3
  155. package/src/runtime/ui/provider-health/types.ts +2 -2
  156. package/src/runtime/ui-services.ts +0 -2
  157. package/src/shell/agent-workspace-fullscreen.ts +0 -1
  158. package/src/shell/autonomy-surfacing.ts +272 -0
  159. package/src/shell/session-continuity-hints.ts +0 -6
  160. package/src/shell/startup-wiring.ts +221 -0
  161. package/src/shell/ui-openers.ts +18 -29
  162. package/src/tools/agent-context-policy.ts +1 -1
  163. package/src/tools/agent-harness-background-processes.ts +4 -4
  164. package/src/tools/agent-harness-browser-cockpit-route.ts +3 -3
  165. package/src/tools/agent-harness-command-runner.ts +6 -1
  166. package/src/tools/agent-harness-document-ops.ts +26 -53
  167. package/src/tools/agent-harness-execution-history.ts +1 -13
  168. package/src/tools/agent-harness-execution-posture.ts +0 -15
  169. package/src/tools/agent-harness-keybinding-metadata.ts +28 -29
  170. package/src/tools/agent-harness-local-model-cookbook.ts +24 -1
  171. package/src/tools/agent-harness-metadata.ts +16 -0
  172. package/src/tools/agent-harness-mode-catalog.ts +2 -9
  173. package/src/tools/agent-harness-provider-account-metadata.ts +2 -2
  174. package/src/tools/agent-harness-setup-posture-utils.ts +1 -1
  175. package/src/tools/agent-harness-tool-schema.ts +13 -14
  176. package/src/tools/agent-harness-tool.ts +27 -23
  177. package/src/tools/agent-harness-ui-surface-metadata.ts +10 -20
  178. package/src/tools/agent-harness-workspace-action-runner.ts +3 -4
  179. package/src/tools/agent-workspace-tool.ts +2 -33
  180. package/src/utils/terminal-width.ts +9 -3
  181. package/src/version.ts +1 -1
  182. package/src/input/agent-workspace-panel-route.ts +0 -44
  183. package/src/input/panel-integration-actions.ts +0 -26
  184. package/src/panels/approval-panel.ts +0 -149
  185. package/src/panels/automation-control-panel.ts +0 -212
  186. package/src/panels/base-panel.ts +0 -254
  187. package/src/panels/builtin/agent.ts +0 -58
  188. package/src/panels/builtin/knowledge.ts +0 -26
  189. package/src/panels/builtin/operations.ts +0 -121
  190. package/src/panels/builtin/session.ts +0 -138
  191. package/src/panels/builtin/shared.ts +0 -275
  192. package/src/panels/builtin/usage.ts +0 -21
  193. package/src/panels/builtin-panels.ts +0 -23
  194. package/src/panels/confirm-state.ts +0 -61
  195. package/src/panels/context-visualizer-panel.ts +0 -204
  196. package/src/panels/cost-tracker-panel.ts +0 -444
  197. package/src/panels/docs-panel.ts +0 -285
  198. package/src/panels/index.ts +0 -25
  199. package/src/panels/knowledge-panel.ts +0 -417
  200. package/src/panels/memory-panel.ts +0 -226
  201. package/src/panels/panel-list-panel.ts +0 -464
  202. package/src/panels/panel-manager.ts +0 -570
  203. package/src/panels/provider-accounts-panel.ts +0 -233
  204. package/src/panels/provider-health-domains.ts +0 -208
  205. package/src/panels/provider-health-panel.ts +0 -720
  206. package/src/panels/provider-health-tracker.ts +0 -115
  207. package/src/panels/provider-stats-panel.ts +0 -366
  208. package/src/panels/qr-panel.ts +0 -207
  209. package/src/panels/schedule-panel.ts +0 -321
  210. package/src/panels/scrollable-list-panel.ts +0 -491
  211. package/src/panels/search-focus.ts +0 -32
  212. package/src/panels/security-panel.ts +0 -295
  213. package/src/panels/session-browser-panel.ts +0 -395
  214. package/src/panels/session-maintenance.ts +0 -125
  215. package/src/panels/subscription-panel.ts +0 -263
  216. package/src/panels/system-messages-panel.ts +0 -230
  217. package/src/panels/tasks-panel.ts +0 -344
  218. package/src/panels/thinking-panel.ts +0 -304
  219. package/src/panels/token-budget-panel.ts +0 -475
  220. package/src/panels/tool-inspector-panel.ts +0 -436
  221. package/src/panels/types.ts +0 -54
  222. package/src/renderer/panel-composite.ts +0 -158
  223. package/src/renderer/panel-tab-bar.ts +0 -69
  224. package/src/renderer/panel-workspace-bar.ts +0 -42
  225. package/src/runtime/diagnostics/panels/panel-resources.ts +0 -118
  226. package/src/tools/agent-harness-panel-metadata.ts +0 -211
  227. /package/src/runtime/perf/{panel-health-monitor.ts → component-health.ts} +0 -0
@@ -8,30 +8,30 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
8
8
  id: 'home',
9
9
  group: 'START',
10
10
  label: 'Home',
11
- summary: 'Main operator workspace for normal assistant work.',
12
- detail: 'Use this as the primary Agent workspace: start with the user task, then open only the lane that matches the work.',
11
+ summary: 'Everything the assistant can do, one lane per kind of work.',
12
+ detail: 'Pick the lane that matches what you want, or just close this and type. Every page here is also reachable later.',
13
13
  actions: [
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: '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' },
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' },
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' },
18
- { id: 'assistant-work-lane', label: 'Work in this project', detail: 'Open project work controls for plans, host tasks, approvals, local execution posture, and recovery before delegation.', targetCategoryId: 'work', kind: 'workspace', safety: 'safe' },
19
- { id: 'assistant-personal-ops-lane', label: 'Handle personal operations', detail: 'Open Personal Ops for inbox, agenda, notes, tasks, reminders, routines, and delivery readiness from one daily area.', targetCategoryId: 'personal-ops', kind: 'workspace', safety: 'safe' },
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' },
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' },
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' },
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' },
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' },
14
+ { id: 'chat', label: 'Just start typing', detail: 'Close this workspace and ask for anything research, reminders, email, documents, or scheduling.', kind: 'guidance', safety: 'safe' },
15
+ { id: 'assistant-setup-lane', label: 'Finish setting up', detail: 'Sign in, pick a model, and connect the basics.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
16
+ { id: 'assistant-personal-ops-lane', label: 'Inbox, calendar & reminders', detail: 'Daily personal operations in one place.', targetCategoryId: 'personal-ops', kind: 'workspace', safety: 'safe' },
17
+ { id: 'assistant-research-docs-lane', label: 'Research something', detail: 'Web research with visible runs, sources, and saved reports.', targetCategoryId: 'research', kind: 'workspace', safety: 'safe' },
18
+ { id: 'assistant-documents-lane', label: 'Documents & files', detail: 'Drafts, exports, saved files, and model comparisons.', targetCategoryId: 'documents', kind: 'workspace', safety: 'safe' },
19
+ { id: 'assistant-automation-lane', label: 'Schedules & automation', detail: 'Reminders, routines, and scheduled work.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
20
+ { id: 'assistant-messaging-lane', label: 'Messaging & notifications', detail: 'Connect Slack, Discord, Telegram, and more; send messages and notifications.', targetCategoryId: 'onboarding-channels', kind: 'workspace', safety: 'safe' },
21
+ { id: 'assistant-memory-lane', label: 'Memory & personality', detail: 'What the assistant remembers and how it behaves.', targetCategoryId: 'memory', kind: 'workspace', safety: 'safe' },
22
+ { id: 'assistant-work-lane', label: 'Approvals & running work', detail: 'Pending approvals, background processes, and host tasks.', targetCategoryId: 'work', kind: 'workspace', safety: 'read-only' },
23
+ { id: 'mode-preset', label: 'Set interaction mode', detail: 'Choose quiet, balanced, or operator mode for how much the assistant checks in.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
25
24
  ],
26
25
  },
27
26
  {
28
27
  id: 'setup',
29
28
  group: 'ONBOARDING',
30
29
  label: 'Start',
31
- summary: 'Import preferences, sign in, and choose the main model.',
30
+ summary: 'Pick a model to start — use a local one or sign in to a provider.',
32
31
  detail: 'Start here on a fresh install. Every row either saves state, opens the shared model picker, or opens a confirmed in-modal form.',
33
32
  actions: [
34
- // Essentials first — a first-time user signs in, picks a model, optionally imports prior settings.
33
+ // Working-path choices first — local (no sign-in needed) then provider sign-in.
34
+ { id: 'use-local-model', label: 'Use a local model (no sign-in)', detail: 'Opens the model picker, which recommends models that fit this computer. No account or subscription needed.', kind: 'model-picker', modelPickerFlow: 'model', modelPickerTarget: 'main', safety: 'safe' },
35
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
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' },
37
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' },
@@ -47,35 +47,34 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
47
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
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
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' },
50
+ { id: 'setup-skip-to-chat', label: 'Just start chatting (set up later)', detail: 'Close setup and go to the conversation. You can finish setup anytime with /agent.', kind: 'guidance', safety: 'safe' },
50
51
  ],
51
52
  },
52
53
  {
53
54
  id: 'account-model',
54
55
  group: 'ONBOARDING',
55
- label: 'Model Routing',
56
- summary: 'Set chat, embedding, helper, tool, and spoken-turn routes.',
57
- detail: 'Use this after sign-in. Routes are saved settings, so selections persist across launches.',
56
+ label: 'Models',
57
+ summary: 'Pick the chat model. Helper, tool, and spoken-turn routes are optional.',
58
+ detail: 'Use this after sign-in. Most users only need the top row; the rest are advanced.',
58
59
  actions: [
60
+ // Essentials — chat route + reasoning
59
61
  { 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' },
60
- { id: 'provider-remove', label: 'Remove custom provider', detail: 'Remove one custom provider config after confirmation.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
61
- { 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' },
62
- { 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' },
63
- { 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' },
64
- { 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' },
65
- { 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' },
66
- { 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' },
67
62
  settingAction({ id: 'account-reasoning', label: 'Reasoning effort', detail: 'Cycle the reasoning effort used when supported.', key: 'provider.reasoningEffort' }),
63
+ // Advanced routes — most people can skip these
64
+ { id: 'account-advanced-separator', label: 'Advanced routes (optional) — most people can skip these', detail: 'Helper, tool, TTS, embedding, system-prompt, and cache routing are here when you need them. Chat works without any of these.', kind: 'guidance', safety: 'read-only' },
68
65
  settingAction({ id: 'account-embedding', label: 'Embedding provider', detail: 'Set the embedding provider for memory and retrieval.', key: 'provider.embeddingProvider' }),
69
- settingAction({ id: 'account-system-prompt', label: 'System prompt file', detail: 'Set an optional local system prompt file path.', key: 'provider.systemPromptFile' }),
70
- settingAction({ id: 'account-helper-enabled', label: 'Enable helper model', detail: 'Toggle dedicated helper routing for background utility work.', key: 'helper.enabled' }),
71
- { 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' },
72
- { 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' },
73
- settingAction({ id: 'account-tool-llm-enabled', label: 'Enable tool LLM', detail: 'Toggle a dedicated tool LLM for internal operations.', key: 'tools.llmEnabled' }),
74
- { 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' },
75
- { 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' },
76
- { 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' },
77
- { 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' },
78
66
  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' }),
67
+ // Helper / tool / spoken-turn routes (advanced — only matters when you want dedicated routing)
68
+ 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' }),
69
+ { 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' },
70
+ settingAction({ id: 'account-tool-llm-enabled', label: 'Use a dedicated tool model', detail: 'Toggle a separate route for internal tool calls.', key: 'tools.llmEnabled' }),
71
+ { 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' },
72
+ { 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' },
73
+ // System prompt + custom provider plumbing
74
+ 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' }),
75
+ { id: 'provider-remove', label: 'Remove a custom provider', detail: 'Remove one custom provider config after confirmation.', editorKind: 'provider-remove', kind: 'editor', safety: 'safe' },
76
+ { 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' },
77
+ // Prompt cache controls (advanced — most users leave defaults)
79
78
  settingAction({ id: 'account-cache-enabled', label: 'Prompt cache', detail: 'Toggle prompt caching for eligible providers.', key: 'cache.enabled' }),
80
79
  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 }),
81
80
  settingAction({ id: 'account-cache-monitor', label: 'Cache hit-rate monitor', detail: 'Toggle cache hit-rate monitoring.', key: 'cache.monitorHitRate', visibleWhenKey: 'cache.enabled', visibleWhenValue: true }),
@@ -103,31 +102,25 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
103
102
  id: 'tools-permissions',
104
103
  group: 'ONBOARDING',
105
104
  label: 'Tools & Permissions',
106
- summary: 'Set approval policy, MCP entry points, and secret references.',
107
- detail: 'Use this before enabling tool-heavy work. Permission rows write policy; MCP and secret rows open setup forms.',
105
+ summary: 'Set approval policy and core file/shell/network permissions.',
106
+ detail: 'Most users only need Permission mode and Auto-approve. The rest stay at safe defaults unless you change them.',
108
107
  actions: [
108
+ // Top-level approval policy
109
109
  settingAction({ id: 'permissions-mode', label: 'Permission mode', detail: 'Cycle prompt, allow-all, or custom permission mode.', key: 'permissions.mode' }),
110
110
  settingAction({ id: 'permissions-auto-approve', label: 'Auto-approve tools', detail: 'Toggle automatic approval for all tool permission requests.', key: 'behavior.autoApprove' }),
111
+ // Common per-tool overrides for file and shell work
111
112
  settingAction({ id: 'permissions-read', label: 'File reads', detail: 'Cycle allow, prompt, or deny for file read operations.', key: 'permissions.tools.read' }),
112
- settingAction({ id: 'permissions-find', label: 'File search', detail: 'Cycle allow, prompt, or deny for file and directory search operations.', key: 'permissions.tools.find' }),
113
113
  settingAction({ id: 'permissions-write', label: 'File writes', detail: 'Cycle allow, prompt, or deny for file write operations.', key: 'permissions.tools.write' }),
114
114
  settingAction({ id: 'permissions-edit', label: 'File edits', detail: 'Cycle allow, prompt, or deny for edit and patch operations.', key: 'permissions.tools.edit' }),
115
115
  settingAction({ id: 'permissions-exec', label: 'Shell commands', detail: 'Cycle allow, prompt, or deny for shell execution.', key: 'permissions.tools.exec' }),
116
116
  settingAction({ id: 'permissions-fetch', label: 'Network fetches', detail: 'Cycle allow, prompt, or deny for outbound fetch requests.', key: 'permissions.tools.fetch' }),
117
- settingAction({ id: 'permissions-analyze', label: 'Code analysis', detail: 'Cycle allow, prompt, or deny for code and project analysis operations.', key: 'permissions.tools.analyze' }),
118
- settingAction({ id: 'permissions-inspect', label: 'Runtime inspect', detail: 'Cycle allow, prompt, or deny for runtime state inspection.', key: 'permissions.tools.inspect' }),
119
- settingAction({ id: 'permissions-state', label: 'State reads', detail: 'Cycle allow, prompt, or deny for reading runtime and session state.', key: 'permissions.tools.state' }),
120
- settingAction({ id: 'permissions-registry', label: 'Registry reads', detail: 'Cycle allow, prompt, or deny for tool and skill registry queries.', key: 'permissions.tools.registry' }),
121
- settingAction({ id: 'permissions-mcp', label: 'MCP tools', detail: 'Cycle allow, prompt, or deny for external MCP tool calls.', key: 'permissions.tools.mcp' }),
122
- settingAction({ id: 'permissions-agent', label: 'Agent delegation', detail: 'Cycle allow, prompt, or deny for subagent and delegation operations.', key: 'permissions.tools.agent' }),
123
- settingAction({ id: 'permissions-workflow', label: 'Workflow automation', detail: 'Cycle allow, prompt, or deny for multi-step workflow automation.', key: 'permissions.tools.workflow' }),
124
- settingAction({ id: 'permissions-delegate', label: 'Unknown tools', detail: 'Cycle allow, prompt, or deny for unknown or unregistered tools.', key: 'permissions.tools.delegate' }),
125
- { 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' },
126
- { 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' },
127
- { 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' },
117
+ // MCP servers + secrets (forms that open inside the modal)
118
+ { 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' },
119
+ { 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' },
120
+ { 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' },
121
+ // Advanced tool runtime limits and debugging
128
122
  settingAction({ id: 'tools-auto-heal', label: 'Tool auto-heal', detail: 'Toggle automatic syntax repair for precision write and edit operations.', key: 'tools.autoHeal' }),
129
123
  settingAction({ id: 'tools-token-budget', label: 'Tool token budget', detail: 'Set the default token budget for precision read operations.', key: 'tools.defaultTokenBudget' }),
130
- settingAction({ id: 'tools-hooks-file', label: 'Hooks file', detail: 'Set the hook configuration file name relative to host data.', key: 'tools.hooksFile' }),
131
124
  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' }),
132
125
  settingAction({ id: 'telemetry-raw-prompts', label: 'Raw prompt telemetry', detail: 'Toggle raw prompt and response telemetry; leave off unless debugging locally.', key: 'telemetry.includeRawPrompts' }),
133
126
  ],
@@ -170,8 +163,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
170
163
  { 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' },
171
164
  { id: 'personal-ops-routines', label: 'Routine library', detail: 'Open repeatable workflows and schedule-promotion readiness.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
172
165
  { id: 'personal-ops-schedules', label: 'Schedules', detail: 'Inspect connected schedules and promotion receipts from the automation area.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
173
- { id: 'personal-ops-channels', label: 'Delivery channels', detail: 'Open pairing and channel readiness before sending summaries, reminders, or follow-ups.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
174
- { id: 'personal-ops-operator-methods', label: 'Exact daemon methods', detail: 'The model can inspect the live daemon contract with host action:"methods" query:"task" or personal_ops action:"lane" for one lane.', kind: 'guidance', safety: 'read-only' },
166
+ { id: 'personal-ops-channels', label: 'Delivery channels', detail: 'Open pairing and channel readiness before sending summaries, reminders, or follow-ups.', targetCategoryId: 'onboarding-channels', kind: 'workspace', safety: 'safe' },
167
+ { id: 'personal-ops-operator-methods', label: 'Assistant service methods', detail: 'The model can inspect the live assistant service contract with host action:"methods" query:"task" or personal_ops action:"lane" for one lane.', kind: 'guidance', safety: 'read-only' },
175
168
  ],
176
169
  },
177
170
  {
@@ -206,7 +199,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
206
199
  {
207
200
  id: 'documents',
208
201
  group: 'DAY-TO-DAY',
209
- label: 'Documents & Compare',
202
+ label: 'Documents & Files',
210
203
  summary: 'Draft docs, files, artifacts, and compare readiness.',
211
204
  detail: 'Use this workspace when the user is producing or evaluating a document. Versioned drafts, review comments, AI suggestion review, artifact insertion/export, upload, source, artifact browsing, media, and blind comparison routes stay visible here.',
212
205
  actions: [
@@ -239,7 +232,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
239
232
  { 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' },
240
233
  { 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' },
241
234
  { 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' },
242
- { 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' },
243
235
  { 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' },
244
236
  { 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' },
245
237
  { 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' },
@@ -255,39 +247,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
255
247
  { id: 'document-export-compare', label: 'Export compare report', detail: 'Open a confirmed form that exports a saved comparison or judgment report, creates a reviewer handoff with related artifacts, or archives a saved handoff as one ZIP artifact.', editorKind: 'model-compare-export', kind: 'editor', safety: 'safe' },
256
248
  ],
257
249
  },
258
- {
259
- id: 'artifacts',
260
- group: 'DAY-TO-DAY',
261
- label: 'Artifacts',
262
- summary: 'Browse, attach, export, ingest, and generate artifacts.',
263
- detail: 'Use this workspace to handle concrete user-visible artifacts: browse saved artifacts, attach images, export conversations, ingest source files into Agent Knowledge, inspect source libraries, and generate media with explicit confirmation.',
264
- actions: [
265
- { id: 'artifact-flow', label: 'Artifact workflow', detail: 'Attach, export, ingest, or generate first, then use the artifact browser to inspect saved ids, redacted metadata, and bounded text previews.', kind: 'guidance', safety: 'safe' },
266
- { id: 'artifact-browse', 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' },
267
- { id: 'artifact-show', 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' },
268
- { id: 'artifact-export-file', label: 'Export saved artifact', detail: 'Open a confirmed form that copies one saved artifact to a workspace file without printing content.', editorKind: 'artifact-export-file', kind: 'editor', safety: 'safe' },
269
- { id: 'artifact-export-package', label: 'Export 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' },
270
- { id: 'artifact-promote-knowledge', label: 'Promote to Knowledge', detail: 'Open a confirmed form that ingests one saved artifact into isolated Agent Knowledge.', editorKind: 'artifact-promote-knowledge', kind: 'editor', safety: 'safe' },
271
- { 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' },
272
- { 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' },
273
- { 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' },
274
- { 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' },
275
- { 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' },
276
- { 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' },
277
- { 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' },
278
- { 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' },
279
- { 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' },
280
- { 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' },
281
- { 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' },
282
- { 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' },
283
- { 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' },
284
- { id: 'artifact-judge-compare', label: 'Save compare judgment', detail: 'Open a confirmed form that saves a comparison winner and reasons as a local artifact without route mutation.', editorKind: 'model-compare-judge', kind: 'editor', safety: 'safe' },
285
- { id: 'artifact-compare-analytics', label: 'Compare analytics', detail: 'Summarize or synthesize saved comparison judgment artifacts by winner, model, blind slot, themes, task type, document id, benchmark tag, and recent reasons.', editorKind: 'model-compare-analytics', kind: 'editor', safety: 'read-only' },
286
- { id: 'artifact-apply-compare', label: 'Apply compare winner', detail: 'Open a confirmed form that applies a revealed judgment artifact to provider.model.', editorKind: 'model-compare-apply', kind: 'editor', safety: 'safe' },
287
- { id: 'artifact-export-compare', label: 'Export compare report', detail: 'Open a confirmed form that exports a saved comparison or judgment report, creates a reviewer handoff with related artifacts, or archives a saved handoff as one ZIP artifact.', editorKind: 'model-compare-export', kind: 'editor', safety: 'safe' },
288
- { id: 'artifact-policy', label: 'Artifact safety', detail: 'Artifact creation, ingest, and media generation are explicit actions. Agent never writes to default knowledge or prints inline base64; artifact previews are bounded and redacted.', kind: 'guidance', safety: 'read-only' },
289
- ],
290
- },
291
250
  {
292
251
  id: 'conversation',
293
252
  group: 'DAY-TO-DAY',
@@ -299,6 +258,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
299
258
  { 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' },
300
259
  { 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' },
301
260
  { 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' },
261
+ { id: 'conversation-rename', label: 'Rename this conversation', detail: 'Open a form that renames the current Agent session.', editorKind: 'session-rename', kind: 'editor', safety: 'safe' },
262
+ { id: 'conversation-fork', label: 'Fork this conversation', detail: 'Open a form that branches the current conversation into a new saved session.', editorKind: 'session-fork', kind: 'editor', safety: 'safe' },
263
+ { id: 'conversation-resume', label: 'Resume a saved conversation', detail: 'Open a form that resumes one saved Agent session by id, prefix, or title.', editorKind: 'session-resume', kind: 'editor', safety: 'safe' },
302
264
  { 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' },
303
265
  { 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' },
304
266
  { 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' },
@@ -309,26 +271,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
309
271
  { 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' },
310
272
  ],
311
273
  },
312
- {
313
- id: 'channels',
314
- group: 'CAPABILITIES',
315
- label: 'Channels',
316
- summary: 'Companion pairing, channel posture, and delivery safety.',
317
- detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
318
- actions: [
319
- { 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' },
320
- { 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' },
321
- { 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' },
322
- { 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' },
323
- { 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' },
324
- { 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' },
325
- { 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' },
326
- { 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' },
327
- { 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' },
328
- { 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' },
329
- { 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' },
330
- ],
331
- },
332
274
  {
333
275
  id: 'tools',
334
276
  group: 'CAPABILITIES',
@@ -374,27 +316,6 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
374
316
  { 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' },
375
317
  ],
376
318
  },
377
- {
378
- id: 'voice-media',
379
- group: 'CAPABILITIES',
380
- label: 'Voice & Media',
381
- summary: 'Voice, TTS, image input, browser tools, and media providers.',
382
- detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Connected-host administration stays outside Agent and side effects stay explicit.',
383
- actions: [
384
- { 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' },
385
- { 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' },
386
- { 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' },
387
- { id: 'voice-enable', label: 'Enable voice', detail: 'Open a confirmed form that enables local voice interaction.', editorKind: 'voice-enable', kind: 'editor', safety: 'safe' },
388
- { id: 'voice-disable', label: 'Disable voice', detail: 'Open a confirmed form that disables local voice interaction.', editorKind: 'voice-disable', kind: 'editor', safety: 'safe' },
389
- { 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' },
390
- { 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' },
391
- { 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' },
392
- { 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' },
393
- { 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' },
394
- { 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' },
395
- { 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' },
396
- ],
397
- },
398
319
  {
399
320
  id: 'profiles',
400
321
  group: 'LOCAL BEHAVIOR',
@@ -418,11 +339,11 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
418
339
  {
419
340
  id: 'memory',
420
341
  group: 'LOCAL BEHAVIOR',
421
- label: 'Memory & Skills',
342
+ label: 'Memory',
422
343
  summary: 'Local assistant memory, notes, routines, skills, and reusable behavior.',
423
344
  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.',
424
345
  actions: [
425
- { 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' },
346
+ { id: 'memory-posture', label: 'Memory status', 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' },
426
347
  { 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' },
427
348
  { 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' },
428
349
  { 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' },
@@ -504,6 +425,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
504
425
  { id: 'skills-search', label: 'Search skills', detail: 'Open a search form for Agent-local skills.', editorKind: 'skill-search', kind: 'editor', safety: 'read-only' },
505
426
  { 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' },
506
427
  { 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' },
428
+ { id: 'skills-import-standard', label: 'Import a shared skill', detail: 'Import one SKILL.md file in the open skill format into the Agent-local skill library after review.', editorKind: 'skill-standard-import', kind: 'editor', safety: 'safe' },
429
+ { id: 'skills-export-standard', label: 'Export skill to share', detail: 'Export one Agent-local skill as a SKILL.md folder you can publish or hand to another assistant.', editorKind: 'skill-standard-export', kind: 'editor', safety: 'safe' },
507
430
  { 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' },
508
431
  { 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' },
509
432
  { 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' },
@@ -552,26 +475,12 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
552
475
  id: 'work',
553
476
  group: 'OPERATIONS',
554
477
  label: 'Work & Approvals',
555
- summary: 'Visible task state and approval posture.',
478
+ summary: 'Approvals, background work, host tasks, and delegation.',
556
479
  detail: 'Use this workspace to inspect active operator state and approval posture.',
557
480
  actions: [
558
481
  { id: 'work-autonomy-queue', label: 'Autonomy queue', detail: 'Inspect visible host-task, approval, automation, schedule, routine, and delegation queue cards.', kind: 'guidance', safety: 'read-only' },
559
482
  { 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' },
560
483
  { 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' },
561
- { 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' },
562
- { 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' },
563
- { 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' },
564
- { 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' },
565
- { 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' },
566
- { 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' },
567
- { id: 'session-rename', label: 'Rename current session', detail: 'Open a form that renames the current Agent session.', editorKind: 'session-rename', kind: 'editor', safety: 'safe' },
568
- { 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' },
569
- { 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' },
570
- { 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' },
571
- { 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' },
572
- { 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' },
573
- { id: 'session-search', label: 'Search saved sessions', detail: 'Open a form that searches saved Agent sessions.', editorKind: 'session-search', kind: 'editor', safety: 'read-only' },
574
- { 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' },
575
484
  { 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' },
576
485
  { 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' },
577
486
  { 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' },
@@ -579,6 +488,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
579
488
  { 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' },
580
489
  { 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' },
581
490
  { id: 'approval-cancel', label: 'Cancel request', detail: 'Open a confirmed form for cancelling one pending connected-host approval request by id.', editorKind: 'approval-cancel', kind: 'editor', safety: 'safe' },
491
+ { id: 'delegate-task', label: 'Delegate a build task', detail: 'Hand one explicit build, fix, or review task to GoodVibes TUI with the full original ask, reason, and success criteria.', editorKind: 'delegate-task', kind: 'editor', safety: 'delegates' },
582
492
  ],
583
493
  },
584
494
  AGENT_WORKSPACE_HOST_CATEGORY,
@@ -586,10 +496,17 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
586
496
  id: 'automation',
587
497
  group: 'OPERATIONS',
588
498
  label: 'Automation',
589
- summary: 'Reminders, schedule observability, and explicit routine promotion.',
499
+ summary: 'Automation limits, reminders, schedules, and routine promotion.',
590
500
  detail: 'Agent does not create hidden local automation jobs. Confirmed reminders, reviewed routine promotion, and explicit run/pause/resume controls go through the connected host with confirmation.',
591
501
  actions: [
592
502
  { id: 'schedule-setup-path', label: 'Schedule setup path', detail: 'Create a reminder or promote a reviewed routine, pick a real cadence, optionally choose a delivery target, confirm, then reconcile receipts with connected schedules.', kind: 'guidance', safety: 'safe' },
503
+ settingAction({ id: 'automation-enabled', label: 'Use automation', detail: 'Toggle the automation subsystem for reminders and scheduled routines.', key: 'automation.enabled' }),
504
+ settingAction({ id: 'automation-max-concurrent', label: 'Concurrent runs', detail: 'Set the maximum automation runs that can execute concurrently.', key: 'automation.maxConcurrentRuns', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
505
+ settingAction({ id: 'automation-history-limit', label: 'Run history limit', detail: 'Set the number of run history entries retained per automation job.', key: 'automation.runHistoryLimit', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
506
+ settingAction({ id: 'automation-default-timeout', label: 'Default timeout', detail: 'Set the default automation run timeout in milliseconds.', key: 'automation.defaultTimeoutMs', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
507
+ settingAction({ id: 'automation-catch-up', label: 'Catch-up window', detail: 'Set how long startup should catch up missed automation runs.', key: 'automation.catchUpWindowMinutes', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
508
+ settingAction({ id: 'automation-failure-cooldown', label: 'Failure cooldown', detail: 'Set the cooldown after a failed automation run.', key: 'automation.failureCooldownMs', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
509
+ settingAction({ id: 'automation-delete-after-run', label: 'Delete one-shot jobs', detail: 'Toggle deleting one-shot automation jobs after their first successful run.', key: 'automation.deleteAfterRun', visibleWhenKey: 'automation.enabled', visibleWhenValue: true }),
593
510
  { 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' },
594
511
  { 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' },
595
512
  { 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' },
@@ -602,23 +519,11 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
602
519
  { 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' },
603
520
  { 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' },
604
521
  { 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' },
605
- { 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' },
522
+ { 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: 'onboarding-channels', kind: 'workspace', safety: 'safe' },
606
523
  { 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' },
607
524
  { 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' },
608
525
  ],
609
526
  },
610
- {
611
- id: 'delegate',
612
- group: 'OPERATIONS',
613
- label: 'Build Delegation',
614
- summary: 'Explicit handoff to GoodVibes TUI for code work.',
615
- detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work can be handed to GoodVibes TUI with the full original ask, reason, success criteria, and delegated review only when explicitly requested.',
616
- actions: [
617
- { 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' },
618
- { 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' },
619
- { 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' },
620
- ],
621
- },
622
527
  {
623
528
  id: 'finish',
624
529
  group: 'FINISH',
@@ -31,6 +31,7 @@ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Ex
31
31
  | 'knowledge-search'
32
32
  | 'knowledge-ask'
33
33
  | 'model-compare'
34
+ | 'local-model-benchmark'
34
35
  | 'document-browse'
35
36
  | 'document-show'
36
37
  | 'document-create'
@@ -80,6 +81,8 @@ type AgentWorkspaceCommandEditorKind = AgentWorkspaceBasicCommandEditorKind | Ex
80
81
  | 'persona-discovery-import'
81
82
  | 'routine-discovery-import'
82
83
  | 'skill-discovery-import'
84
+ | 'skill-standard-import'
85
+ | 'skill-standard-export'
83
86
  | 'profile-template-export'
84
87
  | 'profile-template-import'
85
88
  | 'profile-template-from-discovered'
@@ -135,6 +138,7 @@ export function isAgentWorkspaceCommandEditorKind(kind: AgentWorkspaceEditorKind
135
138
  || kind === 'artifact-export-package'
136
139
  || kind === 'artifact-promote-knowledge'
137
140
  || kind === 'model-compare'
141
+ || kind === 'local-model-benchmark'
138
142
  || kind === 'document-browse'
139
143
  || kind === 'document-show'
140
144
  || kind === 'document-create'
@@ -11,11 +11,6 @@ export const AGENT_WORKSPACE_HOST_CATEGORY: AgentWorkspaceCategory = {
11
11
  { id: 'host-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' },
12
12
  { id: 'host-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' },
13
13
  { id: 'host-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' },
14
- { id: 'host-channels', label: 'Open Channels', detail: 'Jump to the channel setup and delivery workspace.', targetCategoryId: 'channels', kind: 'workspace', safety: 'safe' },
15
- { id: 'host-automation', label: 'Open Automation', detail: 'Jump to connected schedules, reminders, receipts, and explicit run controls.', targetCategoryId: 'automation', kind: 'workspace', safety: 'safe' },
16
- { id: 'host-knowledge-open', label: 'Open Knowledge', detail: 'Jump to Agent Knowledge source, graph, review, and ingest controls.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'safe' },
17
- { id: 'host-media-open', label: 'Open Voice and Media', detail: 'Jump to voice, TTS, image input, media provider, and browser-tool setup actions.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
18
- { id: 'host-tools-open', label: 'Open Tools and MCP', detail: 'Jump to MCP server setup, tool inventory, secrets, and security review.', targetCategoryId: 'tools', kind: 'workspace', safety: 'safe' },
19
14
  { id: 'host-provider-detail', label: 'Provider detail', detail: 'Open a provider-id form for account and provider configuration review.', editorKind: 'provider-inspect', kind: 'editor', safety: 'read-only' },
20
15
  { id: 'host-provider-routes', label: 'Provider routes', detail: 'Open a provider-id form for account, subscription, and route inspection.', editorKind: 'provider-routes', kind: 'editor', safety: 'read-only' },
21
16
  { id: 'host-provider-repair', label: 'Provider repair guidance', detail: 'Open a provider-id form for read-only provider repair guidance.', editorKind: 'provider-account-repair', kind: 'editor', safety: 'read-only' },
@@ -53,8 +53,10 @@ export function submitAgentWorkspaceLocalRegistryEditor(
53
53
  submitPersonaEditor(shellPaths, editor, field, callbacks.finishLocalEditor);
54
54
  } else if (editor.kind === 'skill') {
55
55
  submitSkillEditor(shellPaths, editor, field, callbacks.finishLocalEditor);
56
- } else {
56
+ } else if (editor.kind === 'routine') {
57
57
  submitRoutineEditor(shellPaths, editor, field, callbacks.finishLocalEditor);
58
+ } else {
59
+ throw new Error(`This form isn't wired to a save action yet (kind: ${editor.kind}).`);
58
60
  }
59
61
  }
60
62
 
@@ -15,9 +15,12 @@ const AGENT_WORKSPACE_CATEGORY_ALIASES = {
15
15
  host: 'host',
16
16
  mcp: 'tools',
17
17
  tool: 'tools',
18
- channel: 'channels',
19
- voice: 'voice-media',
20
- media: 'voice-media',
18
+ channel: 'onboarding-channels',
19
+ channels: 'onboarding-channels',
20
+ messaging: 'onboarding-channels',
21
+ voice: 'onboarding-voice-media',
22
+ media: 'onboarding-voice-media',
23
+ 'voice-media': 'onboarding-voice-media',
21
24
  profile: 'profiles',
22
25
  persona: 'personas',
23
26
  skill: 'skills',
@@ -31,6 +34,10 @@ const AGENT_WORKSPACE_CATEGORY_ALIASES = {
31
34
  note: 'notes',
32
35
  scratchpad: 'notes',
33
36
  kb: 'knowledge',
37
+ artifacts: 'documents',
38
+ artifact: 'documents',
39
+ delegate: 'work',
40
+ delegation: 'work',
34
41
  } as const satisfies Readonly<Record<string, AgentWorkspaceCategoryId>>;
35
42
 
36
43
  type AgentWorkspaceCategoryAlias = keyof typeof AGENT_WORKSPACE_CATEGORY_ALIASES;