@pellux/goodvibes-agent 0.1.116 → 1.0.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 (285) hide show
  1. package/CHANGELOG.md +48 -661
  2. package/README.md +64 -57
  3. package/bin/goodvibes-agent.ts +16 -2
  4. package/dist/package/main.js +199180 -192185
  5. package/docs/README.md +15 -8
  6. package/docs/channels-remote-and-api.md +50 -0
  7. package/docs/connected-host.md +59 -0
  8. package/docs/getting-started.md +61 -50
  9. package/docs/knowledge-artifacts-and-multimodal.md +91 -0
  10. package/docs/project-planning.md +79 -0
  11. package/docs/providers-and-routing.md +46 -0
  12. package/docs/release-and-publishing.md +48 -11
  13. package/docs/tools-and-commands.md +123 -0
  14. package/docs/voice-and-live-tts.md +51 -0
  15. package/package.json +3 -6
  16. package/src/agent/behavior-discovery-summary.ts +1 -3
  17. package/src/agent/channel-delivery.ts +201 -0
  18. package/src/agent/media-generation.ts +159 -0
  19. package/src/agent/memory-prompt.ts +0 -1
  20. package/src/agent/note-registry.ts +329 -0
  21. package/src/agent/operator-actions.ts +343 -0
  22. package/src/agent/persona-discovery.ts +1 -3
  23. package/src/agent/persona-registry.ts +19 -16
  24. package/src/agent/record-labels.ts +107 -0
  25. package/src/agent/reminder-schedule-format.ts +33 -24
  26. package/src/agent/reminder-schedule.ts +27 -26
  27. package/src/agent/routine-registry.ts +54 -14
  28. package/src/agent/routine-schedule-args.ts +2 -1
  29. package/src/agent/routine-schedule-format.ts +77 -53
  30. package/src/agent/routine-schedule-promotion.ts +35 -33
  31. package/src/agent/routine-schedule-receipts.ts +29 -27
  32. package/src/agent/runtime-profile-starters.ts +5 -5
  33. package/src/agent/runtime-profile.ts +91 -12
  34. package/src/agent/skill-registry.ts +210 -32
  35. package/src/cli/agent-knowledge-args.ts +5 -1
  36. package/src/cli/agent-knowledge-command.ts +40 -34
  37. package/src/cli/agent-knowledge-format.ts +80 -67
  38. package/src/cli/agent-knowledge-methods.ts +1 -1
  39. package/src/cli/agent-knowledge-runtime.ts +32 -26
  40. package/src/cli/bundle-command.ts +14 -9
  41. package/src/cli/config-overrides.ts +37 -36
  42. package/src/cli/entrypoint.ts +16 -7
  43. package/src/cli/external-runtime.ts +10 -4
  44. package/src/cli/help.ts +54 -29
  45. package/src/cli/local-library-command.ts +203 -83
  46. package/src/cli/management-commands.ts +105 -68
  47. package/src/cli/management.ts +55 -74
  48. package/src/cli/memory-command.ts +66 -32
  49. package/src/cli/parser.ts +37 -3
  50. package/src/cli/profiles-command.ts +166 -31
  51. package/src/cli/provider-auth-routes.ts +2 -1
  52. package/src/cli/routines-command.ts +176 -40
  53. package/src/cli/service-posture.ts +16 -16
  54. package/src/cli/status.ts +56 -135
  55. package/src/core/conversation-message-snapshot.ts +131 -0
  56. package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
  57. package/src/input/agent-workspace-access-command-editors.ts +170 -0
  58. package/src/input/agent-workspace-activation.ts +35 -8
  59. package/src/input/agent-workspace-basic-command-editor-submission.ts +351 -94
  60. package/src/input/agent-workspace-basic-command-editors.ts +502 -9
  61. package/src/input/agent-workspace-categories.ts +423 -51
  62. package/src/input/agent-workspace-channel-command-editor-submission.ts +83 -0
  63. package/src/input/agent-workspace-channel-command-editors.ts +65 -0
  64. package/src/input/agent-workspace-channels.ts +35 -2
  65. package/src/input/agent-workspace-command-editor.ts +41 -3
  66. package/src/input/agent-workspace-config-reader.ts +16 -0
  67. package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
  68. package/src/input/agent-workspace-editors.ts +166 -1
  69. package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
  70. package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
  71. package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
  72. package/src/input/agent-workspace-learned-behavior.ts +67 -0
  73. package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
  74. package/src/input/agent-workspace-library-command-editors.ts +35 -0
  75. package/src/input/agent-workspace-local-operations.ts +218 -0
  76. package/src/input/agent-workspace-local-selection.ts +75 -0
  77. package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
  78. package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
  79. package/src/input/agent-workspace-media-command-editors.ts +27 -0
  80. package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
  81. package/src/input/agent-workspace-memory-command-editors.ts +180 -0
  82. package/src/input/agent-workspace-memory-editor.ts +2 -2
  83. package/src/input/agent-workspace-navigation.ts +81 -0
  84. package/src/input/agent-workspace-notify-editor-submission.ts +121 -0
  85. package/src/input/agent-workspace-operations-command-editor-submission.ts +208 -0
  86. package/src/input/agent-workspace-operations-command-editors.ts +196 -0
  87. package/src/input/agent-workspace-panel-route.ts +43 -0
  88. package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
  89. package/src/input/agent-workspace-provider-command-editors.ts +93 -0
  90. package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
  91. package/src/input/agent-workspace-requirements.ts +11 -0
  92. package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
  93. package/src/input/agent-workspace-search.ts +169 -0
  94. package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
  95. package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
  96. package/src/input/agent-workspace-session-command-editors.ts +249 -0
  97. package/src/input/agent-workspace-setup.ts +37 -16
  98. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
  99. package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
  100. package/src/input/agent-workspace-snapshot.ts +162 -21
  101. package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
  102. package/src/input/agent-workspace-task-command-editors.ts +47 -0
  103. package/src/input/agent-workspace-token.ts +18 -2
  104. package/src/input/agent-workspace-types.ts +212 -4
  105. package/src/input/agent-workspace-voice-media.ts +4 -7
  106. package/src/input/agent-workspace-web-research-editor.ts +104 -0
  107. package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
  108. package/src/input/agent-workspace.ts +178 -240
  109. package/src/input/command-registry.ts +5 -2
  110. package/src/input/commands/agent-runtime-profile-runtime.ts +126 -37
  111. package/src/input/commands/agent-skills-runtime.ts +149 -72
  112. package/src/input/commands/agent-workspace-runtime.ts +23 -6
  113. package/src/input/commands/brief-runtime.ts +55 -25
  114. package/src/input/commands/channels-runtime.ts +147 -33
  115. package/src/input/commands/compat-runtime.ts +32 -0
  116. package/src/input/commands/delegation-runtime.ts +29 -23
  117. package/src/input/commands/experience-runtime.ts +6 -4
  118. package/src/input/commands/guidance-runtime.ts +4 -4
  119. package/src/input/commands/health-runtime.ts +149 -126
  120. package/src/input/commands/knowledge.ts +82 -60
  121. package/src/input/commands/local-provider-runtime.ts +43 -21
  122. package/src/input/commands/local-runtime.ts +138 -16
  123. package/src/input/commands/local-setup-review.ts +10 -20
  124. package/src/input/commands/mcp-runtime.ts +63 -46
  125. package/src/input/commands/notify-runtime.ts +38 -9
  126. package/src/input/commands/operator-actions-runtime.ts +138 -0
  127. package/src/input/commands/operator-runtime.ts +6 -76
  128. package/src/input/commands/personas-runtime.ts +46 -31
  129. package/src/input/commands/planning-runtime.ts +1 -1
  130. package/src/input/commands/platform-access-runtime.ts +35 -98
  131. package/src/input/commands/product-runtime.ts +2 -2
  132. package/src/input/commands/provider-accounts-runtime.ts +60 -39
  133. package/src/input/commands/qrcode-runtime.ts +50 -9
  134. package/src/input/commands/recall-bundle.ts +11 -11
  135. package/src/input/commands/recall-capture.ts +13 -11
  136. package/src/input/commands/recall-query.ts +29 -21
  137. package/src/input/commands/recall-review.ts +2 -1
  138. package/src/input/commands/routines-runtime.ts +99 -45
  139. package/src/input/commands/runtime-services.ts +1 -14
  140. package/src/input/commands/schedule-runtime.ts +33 -20
  141. package/src/input/commands/security-runtime.ts +6 -11
  142. package/src/input/commands/session-content.ts +80 -78
  143. package/src/input/commands/session-workflow.ts +134 -104
  144. package/src/input/commands/session.ts +3 -174
  145. package/src/input/commands/shell-core.ts +38 -17
  146. package/src/input/commands/subscription-runtime.ts +54 -185
  147. package/src/input/commands/support-bundle-runtime.ts +53 -0
  148. package/src/input/commands/tasks-runtime.ts +21 -21
  149. package/src/input/commands/work-plan-runtime.ts +33 -8
  150. package/src/input/commands.ts +6 -2
  151. package/src/input/feed-context-factory.ts +2 -2
  152. package/src/input/file-picker.ts +3 -2
  153. package/src/input/handler-command-route.ts +4 -7
  154. package/src/input/handler-content-actions.ts +89 -26
  155. package/src/input/handler-feed-routes.ts +19 -12
  156. package/src/input/handler-feed.ts +6 -5
  157. package/src/input/handler-interactions.ts +9 -36
  158. package/src/input/handler-modal-stack.ts +3 -3
  159. package/src/input/handler-onboarding.ts +52 -91
  160. package/src/input/handler-shortcuts.ts +16 -7
  161. package/src/input/handler.ts +50 -23
  162. package/src/input/input-history.ts +5 -6
  163. package/src/input/keybindings.ts +27 -16
  164. package/src/input/mcp-workspace.ts +90 -26
  165. package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
  166. package/src/input/onboarding/onboarding-wizard-apply.ts +62 -0
  167. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
  168. package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
  169. package/src/input/onboarding/onboarding-wizard-operator-steps.ts +223 -55
  170. package/src/input/onboarding/onboarding-wizard-steps.ts +59 -35
  171. package/src/input/onboarding/onboarding-wizard-types.ts +4 -1
  172. package/src/input/onboarding/onboarding-wizard.ts +87 -2
  173. package/src/input/profile-picker-modal.ts +31 -12
  174. package/src/input/session-picker-modal.ts +21 -4
  175. package/src/input/settings-modal-agent-policy.ts +6 -6
  176. package/src/input/settings-modal-behavior.ts +0 -3
  177. package/src/input/settings-modal-subscriptions.ts +3 -3
  178. package/src/input/settings-modal-types.ts +2 -13
  179. package/src/input/settings-modal.ts +20 -66
  180. package/src/input/submission-intent.ts +0 -1
  181. package/src/input/submission-router.ts +3 -3
  182. package/src/main.ts +18 -10
  183. package/src/panels/approval-panel.ts +8 -8
  184. package/src/panels/automation-control-panel.ts +4 -4
  185. package/src/panels/base-panel.ts +1 -1
  186. package/src/panels/builtin/agent.ts +1 -1
  187. package/src/panels/builtin/operations.ts +3 -12
  188. package/src/panels/builtin/session.ts +32 -24
  189. package/src/panels/builtin/shared.ts +7 -7
  190. package/src/panels/cost-tracker-panel.ts +1 -1
  191. package/src/panels/docs-panel.ts +5 -3
  192. package/src/panels/index.ts +0 -1
  193. package/src/panels/knowledge-panel.ts +6 -5
  194. package/src/panels/memory-panel.ts +7 -6
  195. package/src/panels/panel-list-panel.ts +36 -80
  196. package/src/panels/project-planning-panel.ts +19 -12
  197. package/src/panels/provider-account-snapshot.ts +51 -25
  198. package/src/panels/provider-accounts-panel.ts +33 -18
  199. package/src/panels/provider-health-domains.ts +48 -7
  200. package/src/panels/provider-health-panel.ts +5 -4
  201. package/src/panels/qr-panel.ts +44 -20
  202. package/src/panels/schedule-panel.ts +9 -17
  203. package/src/panels/security-panel.ts +8 -8
  204. package/src/panels/session-browser-panel.ts +10 -10
  205. package/src/panels/subscription-panel.ts +6 -6
  206. package/src/panels/system-messages-panel.ts +3 -3
  207. package/src/panels/tasks-panel.ts +21 -14
  208. package/src/panels/tool-inspector-panel.ts +19 -12
  209. package/src/panels/work-plan-panel.ts +5 -5
  210. package/src/planning/project-planning-coordinator.ts +3 -3
  211. package/src/provider-auth-route-display.ts +9 -0
  212. package/src/renderer/agent-workspace-style.ts +34 -0
  213. package/src/renderer/agent-workspace.ts +254 -57
  214. package/src/renderer/autocomplete-overlay.ts +25 -6
  215. package/src/renderer/block-actions.ts +1 -3
  216. package/src/renderer/bookmark-modal.ts +19 -4
  217. package/src/renderer/buffer.ts +4 -2
  218. package/src/renderer/context-inspector.ts +50 -13
  219. package/src/renderer/diff.ts +1 -1
  220. package/src/renderer/file-picker-overlay.ts +19 -6
  221. package/src/renderer/help-overlay.ts +112 -34
  222. package/src/renderer/history-search-overlay.ts +19 -4
  223. package/src/renderer/live-tail-modal.ts +27 -5
  224. package/src/renderer/mcp-workspace.ts +176 -43
  225. package/src/renderer/model-picker-overlay.ts +58 -3
  226. package/src/renderer/model-workspace.ts +104 -22
  227. package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
  228. package/src/renderer/process-modal.ts +27 -6
  229. package/src/renderer/profile-picker-modal.ts +21 -5
  230. package/src/renderer/search-overlay.ts +25 -5
  231. package/src/renderer/selection-modal-overlay.ts +46 -14
  232. package/src/renderer/session-picker-modal.ts +18 -1
  233. package/src/renderer/settings-modal-helpers.ts +2 -40
  234. package/src/renderer/settings-modal.ts +88 -55
  235. package/src/renderer/system-message.ts +1 -1
  236. package/src/renderer/tool-call.ts +20 -11
  237. package/src/runtime/agent-runtime-events.ts +129 -0
  238. package/src/runtime/bootstrap-command-context.ts +7 -1
  239. package/src/runtime/bootstrap-command-parts.ts +11 -8
  240. package/src/runtime/bootstrap-core.ts +23 -65
  241. package/src/runtime/bootstrap-hook-bridge.ts +7 -18
  242. package/src/runtime/bootstrap-shell.ts +46 -8
  243. package/src/runtime/bootstrap.ts +36 -46
  244. package/src/runtime/connected-host-auth.ts +47 -0
  245. package/src/runtime/diagnostics/panels/index.ts +2 -2
  246. package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
  247. package/src/runtime/diagnostics/panels/policy.ts +7 -7
  248. package/src/runtime/index.ts +2 -5
  249. package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
  250. package/src/runtime/onboarding/apply.ts +288 -74
  251. package/src/runtime/onboarding/derivation.ts +10 -13
  252. package/src/runtime/onboarding/snapshot.ts +2 -17
  253. package/src/runtime/onboarding/types.ts +34 -20
  254. package/src/runtime/onboarding/verify.ts +105 -4
  255. package/src/runtime/operator-token-cleanup.ts +3 -3
  256. package/src/runtime/services.ts +95 -11
  257. package/src/runtime/store/selectors/index.ts +3 -3
  258. package/src/runtime/store/state.ts +1 -4
  259. package/src/runtime/surface-feature-flags.ts +41 -6
  260. package/src/runtime/ui-read-models.ts +3 -4
  261. package/src/runtime/ui-services.ts +6 -6
  262. package/src/shell/blocking-input.ts +2 -1
  263. package/src/shell/service-settings-sync.ts +7 -7
  264. package/src/shell/ui-openers.ts +17 -38
  265. package/src/tools/agent-analysis-registry-policy.ts +0 -1
  266. package/src/tools/agent-channel-send-tool.ts +133 -0
  267. package/src/tools/agent-context-policy.ts +1 -1
  268. package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
  269. package/src/tools/agent-knowledge-tool.ts +170 -0
  270. package/src/tools/agent-local-registry-tool.ts +279 -73
  271. package/src/tools/agent-media-generate-tool.ts +133 -0
  272. package/src/tools/agent-notify-tool.ts +143 -0
  273. package/src/tools/agent-operator-action-tool.ts +137 -0
  274. package/src/tools/agent-operator-briefing-tool.ts +217 -0
  275. package/src/tools/agent-reminder-schedule-tool.ts +237 -0
  276. package/src/tools/agent-tool-policy-guard.ts +13 -15
  277. package/src/tools/agent-work-plan-tool.ts +256 -0
  278. package/src/version.ts +1 -1
  279. package/docs/connected-services.md +0 -51
  280. package/src/cli/package-verification.ts +0 -274
  281. package/src/input/commands/policy-dispatch.ts +0 -339
  282. package/src/input/commands/policy.ts +0 -17
  283. package/src/panels/panel-picker.ts +0 -105
  284. package/src/panels/policy-panel.ts +0 -308
  285. package/src/renderer/panel-picker-overlay.ts +0 -202
@@ -22,7 +22,7 @@ function discoverySample(discovery: AgentBehaviorDiscoverySnapshot | undefined):
22
22
  ...discovery.skills.names,
23
23
  ...discovery.routines.names,
24
24
  ].slice(0, 4);
25
- if (names.length === 0) return 'Use /personas discover, /agent-skills discover, and /routines discover after setup to rescan.';
25
+ if (names.length === 0) return 'Open the Memory & Skills workspace after setup to rescan and import local behavior files.';
26
26
  const remaining = discoveryCount(discovery) > names.length ? `, +${discoveryCount(discovery) - names.length} more` : '';
27
27
  return `Import candidates: ${names.join(', ')}${remaining}.`;
28
28
  }
@@ -35,17 +35,18 @@ export function buildCommunicationStep(): OnboardingWizardStepDefinition {
35
35
  description: 'Prepare companion pairing, messaging-channel readiness, notification delivery, and safe outbound communication for day-one Agent use.',
36
36
  summaryTitle: 'Communication posture',
37
37
  summaryLines: [
38
- 'Companion chat: paired through connected GoodVibes services',
38
+ 'Companion chat: paired through the connected GoodVibes host',
39
39
  'Channel accounts: inspect readiness before using them',
40
40
  'Outbound messages: explicit user action only',
41
41
  ],
42
42
  fields: [
43
43
  {
44
- kind: 'status',
44
+ kind: 'action',
45
45
  id: 'agent-communication.companion',
46
+ action: 'open-agent-workspace:channels',
46
47
  label: 'Companion pairing',
47
- hint: 'Use /pair from the Agent workspace to pair companion clients through connected GoodVibes services.',
48
- defaultValue: 'Pair when ready',
48
+ hint: 'Open the Channels workspace to pair companion clients and review channel readiness and delivery safety.',
49
+ defaultValue: 'Open Channels',
49
50
  },
50
51
  {
51
52
  kind: 'status',
@@ -86,11 +87,12 @@ export function buildToolsStep(): OnboardingWizardStepDefinition {
86
87
  ],
87
88
  fields: [
88
89
  {
89
- kind: 'status',
90
+ kind: 'action',
90
91
  id: 'agent-tools.mcp',
92
+ action: 'open-agent-workspace:tools',
91
93
  label: 'MCP connections and tools',
92
- hint: 'Use /mcp servers and the Agent workspace Tools area to inspect connected MCP servers, roles, and tool readiness.',
93
- defaultValue: 'Inspectable',
94
+ hint: 'Open the Tools & MCP workspace to inspect connected MCP servers, roles, trust, and tool readiness.',
95
+ defaultValue: 'Open Tools',
94
96
  },
95
97
  {
96
98
  kind: 'status',
@@ -122,26 +124,27 @@ export function buildAgentKnowledgeStep(): OnboardingWizardStepDefinition {
122
124
  id: 'agent-knowledge',
123
125
  title: 'Agent Knowledge',
124
126
  shortLabel: 'Knowledge',
125
- description: 'Agent Knowledge is isolated to the GoodVibes Agent product segment. It never falls back to default Knowledge/Wiki or any non-Agent product segment.',
127
+ description: 'Agent Knowledge is isolated to the GoodVibes Agent product segment. It never falls back to default knowledge or any non-Agent product segment.',
126
128
  summaryTitle: 'Knowledge isolation',
127
129
  summaryLines: [
128
- 'Route segment: /api/goodvibes-agent/knowledge/*',
129
- 'Default wiki fallback: disabled',
130
- 'Non-Agent route fallback: disabled',
130
+ 'Route segment /api/goodvibes-agent/knowledge/*',
131
+ 'Default knowledge fallback disabled',
132
+ 'Non-Agent route fallback disabled',
131
133
  ],
132
134
  fields: [
133
135
  {
134
- kind: 'status',
136
+ kind: 'action',
135
137
  id: 'agent-knowledge.route',
138
+ action: 'open-agent-workspace:knowledge',
136
139
  label: 'Isolated Agent Knowledge route',
137
- hint: 'Ask, search, status, and ingest use /api/goodvibes-agent/knowledge/* only.',
138
- defaultValue: 'Isolated',
140
+ hint: 'Open the Knowledge workspace for isolated Agent ask, search, status, ingest, and review actions.',
141
+ defaultValue: 'Open Knowledge',
139
142
  },
140
143
  {
141
144
  kind: 'status',
142
- id: 'agent-knowledge.no-default-wiki',
143
- label: 'Default Knowledge/Wiki fallback',
144
- hint: 'Agent setup and Agent ask/search must not query the default wiki when Agent Knowledge has no answer.',
145
+ id: 'agent-knowledge.no-default-knowledge',
146
+ label: 'Default knowledge fallback',
147
+ hint: 'Agent setup and Agent ask/search must not query the default knowledge when Agent Knowledge has no answer.',
145
148
  defaultValue: 'Blocked',
146
149
  },
147
150
  {
@@ -155,6 +158,52 @@ export function buildAgentKnowledgeStep(): OnboardingWizardStepDefinition {
155
158
  };
156
159
  }
157
160
 
161
+ export function buildResearchStep(): OnboardingWizardStepDefinition {
162
+ return {
163
+ id: 'agent-research',
164
+ title: 'Research and source triage',
165
+ shortLabel: 'Research',
166
+ description: 'Prepare read-only web research and source triage. Research runs in the main Agent conversation; durable source storage uses explicit Agent Knowledge ingest.',
167
+ summaryTitle: 'Research posture',
168
+ summaryLines: [
169
+ 'Web research: read-only main-conversation requests',
170
+ 'URL inspection: user-directed and visible',
171
+ 'Durable sources: explicit Agent Knowledge ingest only',
172
+ ],
173
+ fields: [
174
+ {
175
+ kind: 'action',
176
+ id: 'agent-research.workspace',
177
+ action: 'open-agent-workspace:research',
178
+ label: 'Research workspace',
179
+ hint: 'Open the Research workspace to submit web research, inspect URLs, and decide what belongs in Agent Knowledge.',
180
+ defaultValue: 'Open Research',
181
+ },
182
+ {
183
+ kind: 'status',
184
+ id: 'agent-research.read-only',
185
+ label: 'Read-only web use',
186
+ hint: 'Search and URL inspection are normal Agent conversation turns. They should not send messages, mutate connected-host state, or perform browser side effects.',
187
+ defaultValue: 'Serial',
188
+ },
189
+ {
190
+ kind: 'status',
191
+ id: 'agent-research.knowledge-boundary',
192
+ label: 'Source-to-knowledge boundary',
193
+ hint: 'Reviewed sources become durable only through confirmed Agent Knowledge ingest actions. Default knowledge and non-Agent segments are not fallback stores.',
194
+ defaultValue: 'Explicit ingest',
195
+ },
196
+ {
197
+ kind: 'status',
198
+ id: 'agent-research.context-references',
199
+ label: 'Inline URL context',
200
+ hint: 'Use @https://... in the composer to reference a URL for one turn without ingesting it into Agent Knowledge.',
201
+ defaultValue: 'Available',
202
+ },
203
+ ],
204
+ };
205
+ }
206
+
158
207
  export function buildLocalStateStep(discovery?: AgentBehaviorDiscoverySnapshot): OnboardingWizardStepDefinition {
159
208
  const discoveredCount = discoveryCount(discovery);
160
209
  return {
@@ -163,48 +212,163 @@ export function buildLocalStateStep(discovery?: AgentBehaviorDiscoverySnapshot):
163
212
  shortLabel: 'Behavior',
164
213
  description: discoveredCount > 0
165
214
  ? 'Review importable Agent-local behavior files, then create an isolated profile from them or import individual records.'
166
- : 'Review the Agent-local behavior model. Memory, personas, skills, routines, and Agent profiles stay local until a stable shared registry exists.',
167
- summaryTitle: 'Local Agent state',
215
+ : 'Review the Agent-local behavior model. Memory, notes, personas, skills, routines, and Agent profiles stay local until a stable shared registry exists.',
216
+ summaryTitle: 'Agent-local state',
168
217
  summaryLines: [
169
- 'Memory/personas/skills/routines: local Agent registries',
170
- `Discovered behavior files: ${discoverySummary(discovery)}`,
171
- 'Secrets: rejected or stored by secret reference',
172
- 'Profiles: isolated Agent homes',
218
+ 'Memory/notes/personas/skills/routines use Agent-local registries',
219
+ `Discovered behavior files ${discoverySummary(discovery)}`,
220
+ 'Secrets are rejected or stored by secret reference',
221
+ 'Profiles use isolated Agent homes',
173
222
  ],
174
223
  fields: [
175
224
  {
176
- kind: 'status',
225
+ kind: 'action',
177
226
  id: 'agent-local-state.memory',
227
+ action: 'open-agent-workspace:memory',
178
228
  label: 'Local memory',
179
- hint: 'Use /memory to create, review, stale, search, and delete Agent-local memory records.',
180
- defaultValue: 'Local registry',
229
+ hint: 'Open the Memory & Skills workspace to create, review, stale, search, and delete Agent-local memory records.',
230
+ defaultValue: 'Open Memory',
181
231
  },
182
232
  {
183
- kind: 'status',
233
+ kind: 'action',
234
+ id: 'agent-local-state.notes',
235
+ action: 'open-agent-workspace:notes',
236
+ label: 'Scratchpad notes',
237
+ hint: 'Open the Notes workspace to capture source triage, temporary decisions, and operator handoff without writing memory or Agent Knowledge.',
238
+ defaultValue: 'Open Notes',
239
+ },
240
+ {
241
+ kind: 'text',
242
+ id: 'agent-local-state.note-title',
243
+ label: 'Initial note title',
244
+ hint: 'Optional scratchpad note created during setup. Notes are temporary working context, not durable memory or Agent Knowledge.',
245
+ placeholder: 'First things to remember',
246
+ defaultValue: '',
247
+ },
248
+ {
249
+ kind: 'text',
250
+ id: 'agent-local-state.note-body',
251
+ label: 'Initial note body',
252
+ hint: 'Capture temporary setup context, source-triage notes, or user preferences that should be reviewed before promotion.',
253
+ placeholder: 'Review calendar connection later; user prefers concise daily planning; do not store secrets here.',
254
+ defaultValue: '',
255
+ multiline: true,
256
+ },
257
+ {
258
+ kind: 'text',
259
+ id: 'agent-local-state.note-tags',
260
+ label: 'Initial note tags',
261
+ hint: 'Optional comma-separated tags for the setup note.',
262
+ placeholder: 'setup, preference',
263
+ defaultValue: '',
264
+ },
265
+ {
266
+ kind: 'action',
184
267
  id: 'agent-local-state.personas',
268
+ action: 'open-agent-workspace:personas',
185
269
  label: 'Personas',
186
270
  hint: discovery?.personas.count && discovery.personas.count > 0
187
- ? `${discovery.personas.count} persona file(s) are available. Use the Profiles workspace to create a profile from discovered behavior, or preview individual files with /personas discover.`
188
- : 'Use /personas to create and activate serial operating modes for the main conversation.',
189
- defaultValue: discovery?.personas.count && discovery.personas.count > 0 ? `${discovery.personas.count} discovered` : 'Local registry',
271
+ ? `${discovery.personas.count} persona file(s) are available. Open the Personas workspace to review, import, activate, or create a profile from discovered behavior.`
272
+ : 'Open the Personas workspace to create and activate serial operating modes for the main conversation.',
273
+ defaultValue: discovery?.personas.count && discovery.personas.count > 0 ? `${discovery.personas.count} discovered` : 'Open Personas',
190
274
  },
191
275
  {
192
- kind: 'status',
276
+ kind: 'action',
193
277
  id: 'agent-local-state.skills',
278
+ action: 'open-agent-workspace:skills',
194
279
  label: 'Skills',
195
280
  hint: discovery?.skills.count && discovery.skills.count > 0
196
- ? `${discovery.skills.count} skill file(s) are available. Use the Profiles workspace to create a profile from discovered behavior, or preview individual files with /agent-skills discover.`
197
- : 'Use /agent-skills and /skills local to manage reusable Agent procedures.',
198
- defaultValue: discovery?.skills.count && discovery.skills.count > 0 ? `${discovery.skills.count} discovered` : 'Local registry',
281
+ ? `${discovery.skills.count} skill file(s) are available. Open the Skills workspace to review, import, bundle, enable reusable procedures, or create a profile from discovered behavior.`
282
+ : 'Open the Skills workspace to manage reusable Agent procedures.',
283
+ defaultValue: discovery?.skills.count && discovery.skills.count > 0 ? `${discovery.skills.count} discovered` : 'Open Skills',
199
284
  },
200
285
  {
201
- kind: 'status',
286
+ kind: 'action',
202
287
  id: 'agent-local-state.routines',
288
+ action: 'open-agent-workspace:routines',
203
289
  label: 'Routines',
204
290
  hint: discovery?.routines.count && discovery.routines.count > 0
205
- ? `${discovery.routines.count} routine file(s) are available. Use the Profiles workspace to create a profile from discovered behavior, or preview individual files with /routines discover. ${discoverySample(discovery)}`
206
- : 'Use /routines for reusable local procedures. Starting a routine prints steps in the main conversation and does not spawn hidden work.',
207
- defaultValue: discovery?.routines.count && discovery.routines.count > 0 ? `${discovery.routines.count} discovered` : 'Local registry',
291
+ ? `${discovery.routines.count} routine file(s) are available. Open the Routines workspace to review, import, start, promote reviewed routines, or create a profile from discovered behavior. ${discoverySample(discovery)}`
292
+ : 'Open the Routines workspace for reusable local procedures. Starting a routine prints steps in the main conversation; schedule promotion remains explicit.',
293
+ defaultValue: discovery?.routines.count && discovery.routines.count > 0 ? `${discovery.routines.count} discovered` : 'Open Routines',
294
+ },
295
+ {
296
+ kind: 'text',
297
+ id: 'agent-local-state.persona-name',
298
+ label: 'Initial persona name',
299
+ hint: 'Optional serial Agent persona created and activated during setup. Leave persona fields blank to skip.',
300
+ placeholder: 'Household Operator',
301
+ defaultValue: '',
302
+ spacerBeforeRows: 1,
303
+ },
304
+ {
305
+ kind: 'text',
306
+ id: 'agent-local-state.persona-description',
307
+ label: 'Initial persona description',
308
+ hint: 'Describe when this persona should shape the main conversation.',
309
+ placeholder: 'Handles day-to-day planning, reminders, device checks, and household coordination.',
310
+ defaultValue: '',
311
+ },
312
+ {
313
+ kind: 'text',
314
+ id: 'agent-local-state.persona-body',
315
+ label: 'Initial persona instructions',
316
+ hint: 'Tell Agent how to behave when this persona is active.',
317
+ placeholder: 'Be concise, proactive, and use safe local actions before asking for follow-up details.',
318
+ defaultValue: '',
319
+ multiline: true,
320
+ },
321
+ {
322
+ kind: 'text',
323
+ id: 'agent-local-state.skill-name',
324
+ label: 'Initial skill name',
325
+ hint: 'Optional reusable local procedure created and enabled during setup.',
326
+ placeholder: 'Daily Briefing',
327
+ defaultValue: '',
328
+ spacerBeforeRows: 1,
329
+ },
330
+ {
331
+ kind: 'text',
332
+ id: 'agent-local-state.skill-description',
333
+ label: 'Initial skill description',
334
+ hint: 'Describe when Agent should use this skill.',
335
+ placeholder: 'Prepares a concise morning briefing from calendar, tasks, and current priorities.',
336
+ defaultValue: '',
337
+ },
338
+ {
339
+ kind: 'text',
340
+ id: 'agent-local-state.skill-procedure',
341
+ label: 'Initial skill procedure',
342
+ hint: 'Write the procedure Agent should reuse in the main conversation.',
343
+ placeholder: 'Check tasks, summarize important events, identify blockers, and ask only for missing critical inputs.',
344
+ defaultValue: '',
345
+ multiline: true,
346
+ },
347
+ {
348
+ kind: 'text',
349
+ id: 'agent-local-state.routine-name',
350
+ label: 'Initial routine name',
351
+ hint: 'Optional local routine created and enabled during setup. Routines print steps in the main conversation and do not launch hidden jobs.',
352
+ placeholder: 'Evening Reset',
353
+ defaultValue: '',
354
+ spacerBeforeRows: 1,
355
+ },
356
+ {
357
+ kind: 'text',
358
+ id: 'agent-local-state.routine-description',
359
+ label: 'Initial routine description',
360
+ hint: 'Describe when the routine should be suggested or started.',
361
+ placeholder: 'Reviews open tasks, tomorrow priorities, and pending approvals before the day ends.',
362
+ defaultValue: '',
363
+ },
364
+ {
365
+ kind: 'text',
366
+ id: 'agent-local-state.routine-steps',
367
+ label: 'Initial routine steps',
368
+ hint: 'Write the local routine steps. This stays in Agent-local state only.',
369
+ placeholder: 'Review open tasks; summarize unresolved approvals; list tomorrow priorities; ask what to defer.',
370
+ defaultValue: '',
371
+ multiline: true,
208
372
  },
209
373
  ],
210
374
  };
@@ -224,18 +388,20 @@ export function buildAutomationStep(): OnboardingWizardStepDefinition {
224
388
  ],
225
389
  fields: [
226
390
  {
227
- kind: 'status',
391
+ kind: 'action',
228
392
  id: 'agent-automation.local-routines',
393
+ action: 'open-agent-workspace:routines',
229
394
  label: 'Local routine library',
230
- hint: 'Use /routines or the Agent workspace to create, review, enable, and start local routines without spawning hidden jobs.',
231
- defaultValue: 'Local registry',
395
+ hint: 'Open the Routines workspace to create, review, enable, and start local routines without hidden jobs.',
396
+ defaultValue: 'Open Routines',
232
397
  },
233
398
  {
234
- kind: 'status',
399
+ kind: 'action',
235
400
  id: 'agent-automation.schedule-observability',
401
+ action: 'open-agent-workspace:automation',
236
402
  label: 'Schedule observability',
237
- hint: 'Use /schedule list, /schedule reconcile, and automation views to inspect externally owned jobs and runs.',
238
- defaultValue: 'Read first',
403
+ hint: 'Open the Automation workspace to inspect schedules, receipts, reconciliation, externally owned jobs, and runs.',
404
+ defaultValue: 'Open Automation',
239
405
  },
240
406
  {
241
407
  kind: 'status',
@@ -269,11 +435,12 @@ export function buildVoiceMediaStep(): OnboardingWizardStepDefinition {
269
435
  ],
270
436
  fields: [
271
437
  {
272
- kind: 'status',
438
+ kind: 'action',
273
439
  id: 'agent-voice-media.voice',
440
+ action: 'open-agent-workspace:voice-media',
274
441
  label: 'Voice interaction',
275
- hint: 'Use the voice/media workspace and TTS settings to configure spoken responses for the Agent conversation.',
276
- defaultValue: 'Optional',
442
+ hint: 'Open the Voice & Media workspace and TTS settings to configure spoken responses for the Agent conversation.',
443
+ defaultValue: 'Open Voice',
277
444
  },
278
445
  {
279
446
  kind: 'status',
@@ -303,7 +470,7 @@ export function buildDelegationPolicyStep(): OnboardingWizardStepDefinition {
303
470
  summaryLines: [
304
471
  'Normal chat: main Agent conversation',
305
472
  'Build/fix/review: explicit GoodVibes TUI delegation',
306
- 'WRFC: only when explicitly requested for build/fix/review',
473
+ 'Delegated review: only when explicitly requested for build/fix/review',
307
474
  ],
308
475
  fields: [
309
476
  {
@@ -314,17 +481,18 @@ export function buildDelegationPolicyStep(): OnboardingWizardStepDefinition {
314
481
  defaultValue: 'Serial',
315
482
  },
316
483
  {
317
- kind: 'status',
484
+ kind: 'action',
318
485
  id: 'agent-delegation.build-work',
486
+ action: 'open-agent-workspace:delegate',
319
487
  label: 'Build/fix/review work',
320
- hint: 'Use /delegate with the full original task. GoodVibes TUI owns coding execution and WRFC chains.',
321
- defaultValue: 'Explicit delegation',
488
+ hint: 'Open the Delegation workspace for explicit build/fix/review handoff. GoodVibes TUI owns coding execution and delegated review chains.',
489
+ defaultValue: 'Open Delegation',
322
490
  },
323
491
  {
324
492
  kind: 'status',
325
- id: 'agent-delegation.wrfc',
326
- label: 'WRFC policy',
327
- hint: 'Agent never uses WRFC by default; request it only for explicit build, fix, review, or implementation work.',
493
+ id: 'agent-delegation.review',
494
+ label: 'Review policy',
495
+ hint: 'Agent never requests delegated review by default; request it only for explicit build, fix, review, or implementation work.',
328
496
  defaultValue: 'Explicit only',
329
497
  },
330
498
  ],
@@ -1,11 +1,19 @@
1
1
  import { REASONING_OPTIONS, HITL_MODE_OPTIONS, GUIDANCE_MODE_OPTIONS, PERMISSION_MODE_OPTIONS, SECRET_POLICY_OPTIONS } from './onboarding-wizard-constants.ts';
2
2
  import { modelSelectionLabel, normalizeText } from './onboarding-wizard-helpers.ts';
3
- import { buildAgentKnowledgeStep, buildAutomationStep, buildCommunicationStep, buildDelegationPolicyStep, buildLocalStateStep, buildToolsStep, buildVoiceMediaStep } from './onboarding-wizard-operator-steps.ts';
3
+ import { buildAgentKnowledgeStep, buildAutomationStep, buildCommunicationStep, buildDelegationPolicyStep, buildLocalStateStep, buildResearchStep, buildToolsStep, buildVoiceMediaStep } from './onboarding-wizard-operator-steps.ts';
4
4
  import { listAgentRuntimeProfileTemplates } from '../../agent/runtime-profile.ts';
5
5
  import type { OnboardingWizardController } from './onboarding-wizard.ts';
6
6
  import type { OnboardingWizardActionFieldDefinition, OnboardingWizardFieldDefinition, OnboardingWizardModelPickerFieldDefinition, OnboardingWizardRadioFieldDefinition, OnboardingWizardRadioOption, OnboardingWizardStepDefinition } from './onboarding-wizard-types.ts';
7
7
  import type { OnboardingProviderAccountRecord, OnboardingStep1CapabilityId, OnboardingStep1CapabilityItem } from '../../runtime/onboarding/index.ts';
8
8
 
9
+ const DEFAULT_STARTER_TEMPLATE_ID = 'personal-productivity';
10
+
11
+ function defaultStarterTemplateId(): string {
12
+ const templates = listAgentRuntimeProfileTemplates();
13
+ if (templates.some((template) => template.id === DEFAULT_STARTER_TEMPLATE_ID)) return DEFAULT_STARTER_TEMPLATE_ID;
14
+ return templates[0]?.id ?? 'none';
15
+ }
16
+
9
17
  function buildStarterTemplateOptions(): readonly OnboardingWizardRadioOption[] {
10
18
  return [
11
19
  {
@@ -30,6 +38,7 @@ export function buildOnboardingWizardSteps(controller: OnboardingWizardControlle
30
38
  buildDefaultModelStep(controller),
31
39
  buildCommunicationStep(),
32
40
  buildToolsStep(),
41
+ buildResearchStep(),
33
42
  buildAgentKnowledgeStep(),
34
43
  buildLocalStateStep(controller.runtimeSnapshot?.localBehaviorDiscovery),
35
44
  buildAutomationStep(),
@@ -114,10 +123,10 @@ function buildReviewReadinessFields(controller: OnboardingWizardController): rea
114
123
  {
115
124
  kind: 'status',
116
125
  id: 'review.readiness.connection',
117
- label: 'Connected services snapshot',
126
+ label: 'Connected host snapshot',
118
127
  hint: collectionIssues > 0
119
128
  ? `${collectionIssues} setup snapshot issue(s) need attention before this Agent is day-one ready.`
120
- : 'The setup snapshot loaded cleanly from connected GoodVibes services.',
129
+ : 'The setup snapshot loaded cleanly from the connected GoodVibes host.',
121
130
  defaultValue: collectionIssues > 0 ? 'Needs attention' : 'Ready',
122
131
  spacerBeforeRows: 1,
123
132
  },
@@ -139,14 +148,21 @@ function buildReviewReadinessFields(controller: OnboardingWizardController): rea
139
148
  kind: 'status',
140
149
  id: 'review.readiness.knowledge',
141
150
  label: 'Agent Knowledge segment',
142
- hint: 'Ask, search, status, and ingest stay on /api/goodvibes-agent/knowledge/* with no default wiki or non-Agent fallback.',
151
+ hint: 'Ask, search, status, and ingest stay on /api/goodvibes-agent/knowledge/* with no default knowledge or non-Agent fallback.',
143
152
  defaultValue: 'Isolated',
144
153
  },
154
+ {
155
+ kind: 'status',
156
+ id: 'review.readiness.research',
157
+ label: 'Research and source triage',
158
+ hint: 'Web research and URL inspection stay in the main conversation; durable source storage requires explicit Agent Knowledge ingest.',
159
+ defaultValue: 'Read-only',
160
+ },
145
161
  {
146
162
  kind: 'status',
147
163
  id: 'review.readiness.local-behavior',
148
164
  label: 'Local behavior library',
149
- hint: localBehavior?.detail ?? 'Agent-local memory, routines, skills, and personas remain local until a stable shared registry exists.',
165
+ hint: localBehavior?.detail ?? 'Agent-local memory, notes, routines, skills, and personas remain local until a stable shared registry exists.',
150
166
  defaultValue: localBehavior?.selected ? 'Customized' : 'Starter ready',
151
167
  },
152
168
  {
@@ -206,13 +222,13 @@ export function buildAgentSetupStep(controller: OnboardingWizardController): Onb
206
222
  id: 'agent-setup',
207
223
  title: 'Agent setup',
208
224
  shortLabel: 'Agent',
209
- description: 'Set up the Agent operator workspace: local identity, provider access, isolated Agent Knowledge, reusable local behavior, and explicit build delegation.',
225
+ description: 'Set up the Agent operator workspace with local identity, provider access, isolated Agent Knowledge, reusable local behavior, and explicit build delegation.',
210
226
  summaryTitle: 'Agent setup posture',
211
227
  summaryLines: [
212
228
  'Agent owns the operator TUI and local behavior registry.',
213
229
  'Optional starter profile: create an isolated Agent home from setup.',
214
230
  'Setup here changes only Agent-owned settings and local state.',
215
- `Secret policy: ${controller.getStringFieldValue('agent-setup.secret-policy', secretPolicy)}`,
231
+ `Secret policy ${controller.getStringFieldValue('agent-setup.secret-policy', secretPolicy)}`,
216
232
  collectionIssues > 0 ? `${collectionIssues} setup snapshot issue(s)` : 'Setup snapshot collected cleanly',
217
233
  ],
218
234
  fields: [
@@ -226,10 +242,10 @@ export function buildAgentSetupStep(controller: OnboardingWizardController): Onb
226
242
  {
227
243
  kind: 'status',
228
244
  id: 'agent-setup.connection',
229
- label: 'Connected GoodVibes services',
245
+ label: 'Connected GoodVibes host',
230
246
  hint: collectionIssues > 0
231
247
  ? `${collectionIssues} setup snapshot issue(s) were reported. Status and doctor commands show connection details.`
232
- : 'Agent uses connected GoodVibes services for companion chat, work plans, approvals, automation, and Agent Knowledge.',
248
+ : 'Agent uses the connected GoodVibes host for companion chat, work plans, approvals, automation, and Agent Knowledge.',
233
249
  defaultValue: collectionIssues > 0 ? `${collectionIssues} issue(s)` : 'Connected',
234
250
  },
235
251
  {
@@ -244,7 +260,7 @@ export function buildAgentSetupStep(controller: OnboardingWizardController): Onb
244
260
  kind: 'text',
245
261
  id: 'agent-setup.profile-name',
246
262
  label: 'Create starter profile',
247
- hint: 'Optional: enter a new Agent profile name to create an isolated home during setup. Leave blank to keep the current home.',
263
+ hint: 'Optional Agent profile name creates an isolated home during setup. Leave blank to keep the current home.',
248
264
  placeholder: 'research-desk',
249
265
  defaultValue: '',
250
266
  },
@@ -252,16 +268,24 @@ export function buildAgentSetupStep(controller: OnboardingWizardController): Onb
252
268
  kind: 'radio',
253
269
  id: 'agent-setup.profile-template',
254
270
  label: 'Starter profile template',
255
- hint: 'Choose the persona, skills, and routine bundle to seed into the optional new Agent profile.',
271
+ hint: 'Choose the persona, skills, and routine bundle to seed into the optional new Agent profile. Select No profile only when you intentionally want an empty Agent home.',
256
272
  options: buildStarterTemplateOptions(),
257
- defaultValue: 'none',
273
+ defaultValue: defaultStarterTemplateId(),
258
274
  },
259
275
  {
260
- kind: 'status',
276
+ kind: 'checklist',
277
+ id: 'agent-setup.profile-default',
278
+ label: 'Use created profile by default',
279
+ hint: 'When a starter profile name is provided, make that isolated Agent profile the default for later plain goodvibes-agent runs.',
280
+ defaultValue: true,
281
+ },
282
+ {
283
+ kind: 'action',
261
284
  id: 'agent-setup.profile-guide',
285
+ action: 'open-agent-workspace:profiles',
262
286
  label: 'Profile guidance',
263
- hint: 'Use /agent-profile guide after setup to export, customize, import, and launch Agent profiles.',
264
- defaultValue: 'Available',
287
+ hint: 'Open the Profiles workspace to browse starters, export, customize, import, create, and select isolated Agent profiles.',
288
+ defaultValue: 'Open Profiles',
265
289
  },
266
290
  ],
267
291
  };
@@ -306,8 +330,8 @@ export function buildProviderAccessStep(controller: OnboardingWizardController):
306
330
  id: 'providers.subscription-sessions',
307
331
  label: 'Subscription sessions',
308
332
  hint: [
309
- `active: ${formatBoundedList(activeSubscriptionProviders, 'none')}`,
310
- `pending: ${formatBoundedList(pendingSubscriptionProviders, 'none')}`,
333
+ `active ${formatBoundedList(activeSubscriptionProviders, 'none')}`,
334
+ `pending ${formatBoundedList(pendingSubscriptionProviders, 'none')}`,
311
335
  ].join(' '),
312
336
  defaultValue: `${activeSubscriptions.length} active / ${pendingSubscriptions.length} pending`,
313
337
  },
@@ -323,8 +347,8 @@ export function buildProviderAccessStep(controller: OnboardingWizardController):
323
347
  id: 'providers.openai-api-key',
324
348
  label: 'OpenAI API key quick start',
325
349
  hint: openAiApiKeyConfigured
326
- ? 'Optional quick start: an OpenAI API key is already stored. Leave blank to keep it; enter a new key to replace it through the secret manager.'
327
- : 'Optional quick start: enter an OpenAI API key now. Other providers can be configured from /secrets, /provider, and the model picker.',
350
+ ? 'Optional quick start already has an OpenAI API key stored. Leave blank to keep it; enter a new key to replace it through the secret manager.'
351
+ : 'Optional quick start can store an OpenAI API key now. Other providers can be configured from the Setup workspace, Tools & MCP workspace, and model picker.',
328
352
  placeholder: openAiApiKeyConfigured ? 'already configured' : 'sk-...',
329
353
  defaultValue: '',
330
354
  },
@@ -373,10 +397,10 @@ export function buildProviderAccessStep(controller: OnboardingWizardController):
373
397
  description: 'Review provider and model access for the Agent conversation. Credentials stay masked and provider-specific setup remains configurable.',
374
398
  summaryTitle: 'Provider access summary',
375
399
  summaryLines: [
376
- `Default route: ${providerRouteLabel}`,
377
- `Provider account routes: ${configuredAccounts.length}`,
378
- `Subscription sessions: ${activeSubscriptions.length} active / ${pendingSubscriptions.length} pending`,
379
- `Provider credential references: ${providerSecretCount}`,
400
+ `Default route ${providerRouteLabel}`,
401
+ `Provider account routes ${configuredAccounts.length}`,
402
+ `Subscription sessions ${activeSubscriptions.length} active / ${pendingSubscriptions.length} pending`,
403
+ `Provider credential references ${providerSecretCount}`,
380
404
  ],
381
405
  fields,
382
406
  };
@@ -412,8 +436,8 @@ export function buildDefaultModelStep(controller: OnboardingWizardController): O
412
436
  description: 'Choose the default provider, model, and reasoning posture for normal Agent conversation.',
413
437
  summaryTitle: 'Default model summary',
414
438
  summaryLines: [
415
- `Main: ${modelSelectionLabel(controller.modelSelectionState.get('main') ?? primarySelectionField.defaultSelection)}`,
416
- `Reasoning: ${controller.getFieldValueLabel(reasoningField)}`,
439
+ `Main ${modelSelectionLabel(controller.modelSelectionState.get('main') ?? primarySelectionField.defaultSelection)}`,
440
+ `Reasoning ${controller.getFieldValueLabel(reasoningField)}`,
417
441
  ],
418
442
  fields: [primarySelectionField, reasoningField],
419
443
  };
@@ -427,9 +451,9 @@ export function buildExperienceStep(controller: OnboardingWizardController): Onb
427
451
  description: 'Tune the Agent conversation style and approval posture for day-to-day operator use.',
428
452
  summaryTitle: 'Experience posture',
429
453
  summaryLines: [
430
- `Human-in-the-Loop (HITL): ${controller.getStringFieldValue('experience.hitl', controller.runtimeSnapshot?.runtimeDefaults.behavior.hitlMode ?? 'balanced')}`,
431
- `Guidance: ${controller.getStringFieldValue('experience.guidance', controller.runtimeSnapshot?.runtimeDefaults.behavior.guidanceMode ?? 'minimal')}`,
432
- `Permissions: ${controller.getStringFieldValue('experience.permissions', controller.runtimeSnapshot?.runtimeDefaults.permissionsMode ?? 'prompt')}`,
454
+ `Human-in-the-Loop (HITL) ${controller.getStringFieldValue('experience.hitl', controller.runtimeSnapshot?.runtimeDefaults.behavior.hitlMode ?? 'balanced')}`,
455
+ `Guidance ${controller.getStringFieldValue('experience.guidance', controller.runtimeSnapshot?.runtimeDefaults.behavior.guidanceMode ?? 'minimal')}`,
456
+ `Permissions ${controller.getStringFieldValue('experience.permissions', controller.runtimeSnapshot?.runtimeDefaults.permissionsMode ?? 'prompt')}`,
433
457
  ],
434
458
  fields: [
435
459
  {
@@ -493,11 +517,11 @@ export function buildReviewStep(controller: OnboardingWizardController): Onboard
493
517
  description: 'Review the Agent day-one checklist and apply setup directly from the wizard.',
494
518
  summaryTitle: 'Agent day-one readiness',
495
519
  summaryLines: [
496
- `Day-one readiness: ${dayOneReadiness}`,
520
+ `Day-one readiness ${dayOneReadiness}`,
497
521
  unsavedLabel,
498
522
  `${controller.buildApplyRequest().operations.length} Agent setting change(s) ready to apply`,
499
- feedback ? `Last apply: ${feedback.title}` : 'No apply errors reported',
500
- controller.isEditingTextField() ? `Editing: ${controller.editingFieldId}` : 'Ready to apply',
523
+ feedback ? `Last apply ${feedback.title}` : 'No apply errors reported',
524
+ controller.isEditingTextField() ? `Editing ${controller.editingFieldId}` : 'Ready to apply',
501
525
  ],
502
526
  fields: [
503
527
  ...feedbackFields,
@@ -505,16 +529,16 @@ export function buildReviewStep(controller: OnboardingWizardController): Onboard
505
529
  {
506
530
  kind: 'status',
507
531
  id: 'review.global-marker',
508
- label: 'Agent setup check',
509
- hint: 'Opening this wizard marks Agent setup as shown for this user account, so it does not reopen automatically.',
510
- defaultValue: 'Already marked as shown',
532
+ label: 'Agent setup completion',
533
+ hint: 'Successful apply marks Agent setup complete for this user account, so a bare launch opens the operator workspace next time.',
534
+ defaultValue: 'Marked after apply',
511
535
  },
512
536
  {
513
537
  kind: 'action',
514
538
  id: 'review.apply',
515
539
  action: 'apply',
516
540
  label: 'Apply Agent settings and verify',
517
- hint: 'Persist Agent-owned settings and verify that setup did not request non-Agent entrypoints, default wiki access, or non-Agent knowledge setup.',
541
+ hint: 'Persist Agent-owned settings and verify that setup did not request non-Agent entrypoints, default knowledge access, or non-Agent knowledge setup.',
518
542
  defaultValue: 'Ready',
519
543
  },
520
544
  ],