@pellux/goodvibes-agent 0.1.72 → 0.1.73

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to GoodVibes Agent will be recorded here.
4
4
 
5
+ ## 0.1.73 - 2026-05-31
6
+
7
+ - Replaced copied first-run capability language with Agent-specific setup: operator TUI, provider access, isolated Agent Knowledge, local memory/skills, channels, automation review, and explicit TUI delegation.
8
+ - Reworked the fullscreen settings workspace grouping and descriptions around Agent experience, models, local Agent state, tools/automation, and external runtime connection.
9
+ - Added package-facing guards and regressions so copied browser/network/listener setup wording does not return to shipped Agent docs.
10
+
5
11
  ## 0.1.72 - 2026-05-31
6
12
 
7
13
  - Removed copied runtime lifecycle and transport words from the Agent CLI parser, command handler, detailed help, and package exports.
package/README.md CHANGED
@@ -50,7 +50,7 @@ bun run package:install-check
50
50
  bun run publish:check
51
51
  ```
52
52
 
53
- Inside the Agent TUI, use `/agent`, `/home`, or `/operator` to open the operator workspace. It is the Agent-first fullscreen surface for setup, status, knowledge, local memory/skills, work-plan/approval review, automation observability, and explicit build delegation to GoodVibes TUI.
53
+ Inside the Agent TUI, use `/agent`, `/home`, or `/operator` to open the operator workspace. It is the Agent-first fullscreen workspace for setup, status, knowledge, local memory/skills, work-plan/approval review, automation observability, and explicit build delegation to GoodVibes TUI.
54
54
 
55
55
  Inside the workspace, use `/agent-profile guide` to author custom profile starters without leaving the Agent TUI. The guided flow lists starters, exports starter JSON, imports edited local starters, and creates isolated Agent profiles from them.
56
56
 
@@ -91,11 +91,11 @@ Agent reports unavailable, unauthenticated, or incompatible runtime state throug
91
91
 
92
92
  ## Product Boundary
93
93
 
94
- GoodVibes Agent owns the operator assistant surface: serial assistant flow, proactive safe actions, local memory/routines/skills/personas, Agent knowledge routes, companion chat, approvals/automation observability, and explicit build delegation.
94
+ GoodVibes Agent owns the operator assistant TUI: serial assistant flow, proactive safe actions, local memory/routines/skills/personas, Agent knowledge routes, companion chat, approvals/automation observability, and explicit build delegation.
95
95
 
96
96
  Agent Knowledge/Wiki is its own product segment. Agent uses `/api/goodvibes-agent/knowledge/*` and must not fall back to default Knowledge/Wiki or other product-specific knowledge routes.
97
97
 
98
- GoodVibes TUI owns coding execution: file edits, git/worktree workflows, coding panels, runtime-isolation UX, and WRFC execution. Agent may delegate explicit build/fix/review work to TUI through public runtime/session contracts; normal assistant chat must not use shared coding sessions.
98
+ GoodVibes TUI owns coding execution: file edits, git/worktree workflows, coding panels, execution isolation UX, and WRFC execution. Agent may delegate explicit build/fix/review work to TUI through public runtime/session contracts; normal assistant chat must not use shared coding sessions.
99
99
 
100
100
  ## Package Docs
101
101
 
package/docs/README.md CHANGED
@@ -18,7 +18,7 @@ Important baseline constraints:
18
18
  - Agent Knowledge/Wiki uses only `/api/goodvibes-agent/knowledge/*`; there is no default Knowledge/Wiki or non-Agent product fallback.
19
19
  - Agent supports isolated runtime homes with `GOODVIBES_AGENT_HOME=<path>` and named profile homes with `goodvibes-agent profiles create <name> --template <starter> --yes` plus `--agent-profile <name>`.
20
20
  - Agent ships starter profile templates for household, research, travel, operations, and personal productivity local state; `profiles templates export/import` and `/agent-profile guide` support local custom starters.
21
- - Local personas, routines, and Agent skills are stored under the Agent surface root and are injected only into the serial Agent conversation.
21
+ - Local personas, routines, and Agent skills are stored under the Agent home and are injected only into the serial Agent conversation.
22
22
  - Normal assistant chat is not coding-session delegation.
23
23
  - Build/fix/review delegation to GoodVibes TUI must be explicit; WRFC is not the default Agent behavior.
24
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "0.1.72",
3
+ "version": "0.1.73",
4
4
  "private": false,
5
5
  "description": "GoodVibes personal operator assistant TUI with a proactive Agent product brain, isolated Agent Knowledge, local profiles, routines, skills, personas, and explicit build delegation.",
6
6
  "type": "module",
@@ -407,7 +407,7 @@ function buildDelegationBody(task: string, wrfcRequested: boolean): string {
407
407
  'Agent policy:',
408
408
  '- GoodVibes Agent is not the coding TUI.',
409
409
  '- Preserve the full original ask.',
410
- '- GoodVibes TUI owns file edits, git/worktree flows, runtime-isolation UX, and any WRFC owner chain.',
410
+ '- GoodVibes TUI owns file edits, git/worktree flows, execution isolation UX, and any WRFC owner chain.',
411
411
  wrfcRequested
412
412
  ? '- WRFC was explicitly requested by the Agent user for this build/fix/review delegation.'
413
413
  : '- WRFC was not explicitly requested; do not turn this into WRFC solely because it came from Agent.',
@@ -74,6 +74,12 @@ const PACKAGE_FACING_FORBIDDEN_TEXT = [
74
74
  ['capabilities', ' audit'].join(''),
75
75
  ['capabilities', ' command'].join(''),
76
76
  ['near', '-fork'].join(''),
77
+ ['Optional ', 'Browser Access'].join(''),
78
+ ['Optional ', 'Other-Device Access'].join(''),
79
+ ['Optional ', 'Incoming Events'].join(''),
80
+ ['Service ', '& Network'].join(''),
81
+ ['Surfaces ', '& Integrations'].join(''),
82
+ ['runtime', '-isolation'].join(''),
77
83
  ['goodvibes-agent', 'serve'].join(' '),
78
84
  ['goodvibes-agent', 'service'].join(' '),
79
85
  ['goodvibes-agent', 'services'].join(' '),
@@ -5,7 +5,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
5
5
  id: 'home',
6
6
  group: 'OPERATE',
7
7
  label: 'Home',
8
- summary: 'Main operator surface for normal assistant work.',
8
+ summary: 'Main operator workspace for normal assistant work.',
9
9
  detail: 'Use this as the Agent front door: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
10
10
  actions: [
11
11
  { id: 'chat', label: 'Continue assistant chat', detail: 'Close this workspace and type a normal message. Agent work stays serial in the main conversation.', kind: 'guidance', safety: 'safe' },
@@ -16,14 +16,14 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
16
16
  { id: 'channels-home', label: 'Channels', detail: 'Jump to companion pairing and channel readiness without changing runtime connectivity.', targetCategoryId: 'channels', kind: 'workspace', safety: 'read-only' },
17
17
  { id: 'voice-home', label: 'Voice and media', detail: 'Jump to voice, TTS, image input, browser-tool, and media setup.', targetCategoryId: 'voice-media', kind: 'workspace', safety: 'safe' },
18
18
  { id: 'help', label: 'Browse commands', detail: 'Open registry-driven command help.', command: '/help', kind: 'command', safety: 'safe' },
19
- { id: 'health', label: 'Review health', detail: 'Show the local health review surface without starting or mutating runtime services.', command: '/health review', kind: 'command', safety: 'read-only' },
19
+ { id: 'health', label: 'Review health', detail: 'Show local health and runtime connection status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
20
20
  ],
21
21
  },
22
22
  {
23
23
  id: 'setup',
24
24
  group: 'SETUP',
25
25
  label: 'Setup',
26
- summary: 'Configuration, auth, provider, and onboarding surfaces.',
26
+ summary: 'Configuration, auth, provider, and onboarding workspaces.',
27
27
  detail: 'Agent connects to an existing GoodVibes runtime and owns local assistant configuration only. Runtime lifecycle and connectivity posture remain external.',
28
28
  actions: [
29
29
  { id: 'config', label: 'Open settings', detail: 'Open the fullscreen Agent settings workspace.', command: '/config', kind: 'command', safety: 'safe' },
@@ -46,9 +46,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
46
46
  group: 'SETUP',
47
47
  label: 'Channels',
48
48
  summary: 'Companion pairing, channel posture, and delivery safety.',
49
- detail: 'Agent uses externally managed channel surfaces. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
49
+ detail: 'Agent uses externally managed channels. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
50
50
  actions: [
51
- { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing surface for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
51
+ { id: 'pair', label: 'Pair companion', detail: 'Open the QR pairing view for companion app setup.', command: '/pair', kind: 'command', safety: 'safe' },
52
52
  { id: 'communication', label: 'Communication routes', detail: 'Inspect structured communication routes and recent activity.', command: '/communication', kind: 'command', safety: 'read-only' },
53
53
  { id: 'setup-review', label: 'Channel setup review', detail: 'Review setup posture without starting inbound endpoints or mutating channel state.', command: '/setup review', kind: 'command', safety: 'read-only' },
54
54
  { id: 'channel-safety', label: 'Delivery safety', detail: 'External messages, channel DMs, and public delivery targets require explicit user action and runtime policy. Agent will not silently send or expose channels from this workspace.', kind: 'guidance', safety: 'blocked' },
@@ -75,13 +75,13 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
75
75
  group: 'SETUP',
76
76
  label: 'Voice & Media',
77
77
  summary: 'Voice, TTS, image input, browser tools, and media providers.',
78
- detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent surfaces. Runtime ownership stays external and side effects stay explicit.',
78
+ detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Runtime ownership stays external and side effects stay explicit.',
79
79
  actions: [
80
80
  { id: 'tts-config', label: 'Configure live TTS', detail: 'Open the settings workspace at the TTS group.', command: '/config tts', kind: 'command', safety: 'safe' },
81
81
  { id: 'tts-provider', label: 'Choose TTS provider', detail: 'Open provider/model routing for spoken responses through the settings flow.', command: '/config tts.provider', kind: 'command', safety: 'safe' },
82
82
  { id: 'tts-speak', label: 'Speak a prompt', detail: 'Submit a normal assistant turn and play the reply through configured live TTS. Close this workspace and provide real prompt text.', command: '/tts <prompt>', kind: 'command', safety: 'safe' },
83
83
  { id: 'image-attach', label: 'Attach image input', detail: 'Attach an image to the next assistant turn. Close this workspace and provide a real path and prompt.', command: '/image <path> <prompt>', kind: 'command', safety: 'safe' },
84
- { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool readiness without starting inbound endpoints or runtime services.', command: '/setup services', kind: 'command', safety: 'read-only' },
84
+ { id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool readiness without starting inbound endpoints or mutating runtime state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
85
85
  { id: 'mcp-browser', label: 'Browser MCP tools', detail: 'Inspect MCP servers and tools, including browser/automation roles, without mutating server setup.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
86
86
  ],
87
87
  },
@@ -93,7 +93,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
93
93
  detail: 'Profiles isolate Agent state. GoodVibes Agent exposes named homes, config profile pickers, profile-sync bundles, setup transfer bundles, and support bundles while keeping the shared runtime external.',
94
94
  actions: [
95
95
  { id: 'profiles-open', label: 'Open config profiles', detail: 'Open the config profile picker for display/provider/behavior profile files.', command: '/profiles', kind: 'command', safety: 'safe' },
96
- { id: 'runtime-profile-guide', label: 'Starter authoring guide', detail: 'Open the Agent-local starter authoring flow inside the TUI command surface.', command: '/agent-profile guide', kind: 'command', safety: 'safe' },
96
+ { id: 'runtime-profile-guide', label: 'Starter authoring guide', detail: 'Open the Agent-local starter authoring flow inside the Agent TUI.', command: '/agent-profile guide', kind: 'command', safety: 'safe' },
97
97
  { id: 'runtime-profile-templates', label: 'Browse starter templates', detail: 'List built-in and local Agent starter templates with persona, skill, routine, and source details.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
98
98
  { id: 'profile-sync-list', label: 'Profile sync list', detail: 'Inspect saved config profiles available for export/import.', command: '/profilesync list', kind: 'command', safety: 'read-only' },
99
99
  { id: 'profile-sync-export', label: 'Export profile sync', detail: 'Export config profiles to a portable bundle. Requires a real path and explicit --yes.', command: '/profilesync export <path> --yes', kind: 'command', safety: 'safe' },
@@ -110,7 +110,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
110
110
  summary: 'Local assistant memory, routines, skills, and reusable behavior.',
111
111
  detail: 'Memory, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory.',
112
112
  actions: [
113
- { id: 'memory', label: 'Open memory', detail: 'Inspect local/session memory commands and surfaces.', command: '/memory', kind: 'command', safety: 'read-only' },
113
+ { id: 'memory', label: 'Open memory', detail: 'Inspect local/session memory records and commands.', command: '/memory', kind: 'command', safety: 'read-only' },
114
114
  { id: 'personas', label: 'Persona library', detail: 'Open the local persona workspace for active role selection and review.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
115
115
  { id: 'skills', label: 'Local skill library', detail: 'Open the local skill workspace for reusable procedures and review.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
116
116
  { id: 'routines', label: 'Routine library', detail: 'Open the local routine workspace for repeatable workflows and schedule promotion review.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
@@ -181,7 +181,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
181
181
  group: 'TRACK',
182
182
  label: 'Work & Approvals',
183
183
  summary: 'Visible task state, work plan, and approval posture.',
184
- detail: 'Use these surfaces to inspect active operator state. Side-effecting approval decisions require explicit commands and confirmation outside this workspace.',
184
+ detail: 'Use this workspace to inspect active operator state. Side-effecting approval decisions require explicit commands and confirmation outside this workspace.',
185
185
  actions: [
186
186
  { id: 'workplan', label: 'Open work plan', detail: 'Open the workspace-scoped work plan panel.', command: '/workplan panel', kind: 'command', safety: 'read-only' },
187
187
  { id: 'workplan-list', label: 'List work plan', detail: 'Print a concise work plan summary.', command: '/workplan list', kind: 'command', safety: 'read-only' },
@@ -200,7 +200,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
200
200
  { id: 'schedule-receipts', label: 'Promotion receipts', detail: 'Review local redacted receipt history for routine-to-schedule promotion attempts.', command: '/schedule receipts', kind: 'command', safety: 'read-only' },
201
201
  { id: 'schedule-reconcile', label: 'Reconcile schedules', detail: 'Compare local promotion receipts with live external schedules using schedules.list.', command: '/schedule reconcile', kind: 'command', safety: 'read-only' },
202
202
  { id: 'schedule-policy', label: 'Local scheduler blocked', detail: 'Local schedule add/run/remove/enable/disable remain blocked; only explicit external schedule promotion is allowed here.', kind: 'guidance', safety: 'blocked' },
203
- { id: 'health-services', label: 'Runtime health', detail: 'Inspect runtime readiness without starting, stopping, or restarting services.', command: '/health services', kind: 'command', safety: 'read-only' },
203
+ { id: 'health-services', label: 'Runtime status', detail: 'Inspect runtime readiness without starting, stopping, or restarting anything.', command: '/health review', kind: 'command', safety: 'read-only' },
204
204
  ],
205
205
  },
206
206
  {
@@ -29,7 +29,7 @@ function buildDelegationBody(task: string, wrfcRequested: boolean): string {
29
29
  'Agent policy:',
30
30
  '- GoodVibes Agent is not the coding TUI.',
31
31
  '- Preserve the full original ask.',
32
- '- GoodVibes TUI owns file edits, git/worktree flows, runtime-isolation UX, and any WRFC owner chain.',
32
+ '- GoodVibes TUI owns file edits, git/worktree flows, execution isolation UX, and any WRFC owner chain.',
33
33
  wrfcRequested
34
34
  ? '- WRFC was explicitly requested by the Agent user for this build/fix/review delegation.'
35
35
  : '- WRFC was not explicitly requested; do not turn this into WRFC solely because it came from Agent.',
@@ -47,7 +47,7 @@ export function buildCommunicationStep(): OnboardingWizardStepDefinition {
47
47
  id: 'agent-communication',
48
48
  title: 'Channels and notifications',
49
49
  shortLabel: 'Channels',
50
- description: 'Prepare the Agent for companion pairing, messaging-channel awareness, notification delivery, and safe outbound communication without changing runtime connectivity.',
50
+ description: 'Prepare the Agent for companion pairing, messaging-channel awareness, notification delivery, and safe outbound communication while leaving runtime hosting external.',
51
51
  summaryTitle: 'Communication posture',
52
52
  summaryLines: [
53
53
  'Companion chat: paired through the GoodVibes runtime',
@@ -60,13 +60,13 @@ export function buildCommunicationStep(): OnboardingWizardStepDefinition {
60
60
  id: 'agent-communication.companion',
61
61
  label: 'Companion pairing',
62
62
  hint: 'Use /pair from the Agent workspace to pair companion clients through the already-running GoodVibes runtime.',
63
- defaultValue: 'External service route',
63
+ defaultValue: 'External runtime route',
64
64
  },
65
65
  {
66
66
  kind: 'status',
67
67
  id: 'agent-communication.channels',
68
68
  label: 'Messaging channels',
69
- hint: 'Use the Channels workspace to inspect account readiness, delivery posture, and recent communication without changing runtime connectivity.',
69
+ hint: 'Use the Channels workspace to inspect account readiness, delivery posture, and recent communication without changing runtime hosting.',
70
70
  defaultValue: 'Inspectable',
71
71
  },
72
72
  {
@@ -97,7 +97,7 @@ export function buildToolsStep(): OnboardingWizardStepDefinition {
97
97
  summaryLines: [
98
98
  'MCP and tools: inspect before use',
99
99
  'Read/search/summarize: safe by default',
100
- 'Writes, installs, external sends, and service changes: require explicit user action',
100
+ 'Writes, installs, external sends, and account changes: require explicit user action',
101
101
  ],
102
102
  fields: [
103
103
  {
@@ -111,14 +111,14 @@ export function buildToolsStep(): OnboardingWizardStepDefinition {
111
111
  kind: 'status',
112
112
  id: 'agent-tools.browser-media',
113
113
  label: 'Browser and media helpers',
114
- hint: 'Browser, image, audio, and file helpers are capability surfaces. Agent uses them only when the current task needs them and policy allows it.',
114
+ hint: 'Browser, image, audio, and file helpers are task-scoped tools. Agent uses them only when the current task needs them and policy allows it.',
115
115
  defaultValue: 'Task scoped',
116
116
  },
117
117
  {
118
118
  kind: 'status',
119
119
  id: 'agent-tools.approval-boundary',
120
120
  label: 'Power action boundary',
121
- hint: 'Workspace writes, package installs, external sends, account changes, and service changes require an explicit command or confirmation.',
121
+ hint: 'Workspace writes, package installs, external sends, and account changes require an explicit command or confirmation.',
122
122
  defaultValue: 'Approval required',
123
123
  },
124
124
  {
@@ -468,10 +468,10 @@ export function buildVoiceMediaStep(): OnboardingWizardStepDefinition {
468
468
  id: 'agent-voice-media',
469
469
  title: 'Voice and media',
470
470
  shortLabel: 'Voice',
471
- description: 'Prepare voice, speech, image input, and media understanding as Agent operator surfaces rather than runtime lifecycle features.',
471
+ description: 'Prepare voice, speech, image input, and media understanding as Agent operator tools rather than runtime lifecycle features.',
472
472
  summaryTitle: 'Voice and media posture',
473
473
  summaryLines: [
474
- 'Voice and speech: optional operator surfaces',
474
+ 'Voice and speech: optional operator tools',
475
475
  'Image/audio inputs: explicit attachment workflows',
476
476
  'Media generation and playback: provider-backed and policy-gated',
477
477
  ],
@@ -55,12 +55,12 @@ export const SETTINGS_CATEGORY_GROUPS: ReadonlyArray<{
55
55
  readonly label: string;
56
56
  readonly categories: readonly SettingsCategory[];
57
57
  }> = [
58
- { label: 'Interface', categories: ['display', 'ui', 'behavior', 'permissions'] },
59
- { label: 'AI Routing', categories: ['provider', 'subscriptions', 'helper', 'tools', 'tts'] },
60
- { label: 'Service & Network', categories: ['service', 'network', 'controlPlane', 'httpListener', 'web'] },
61
- { label: 'Surfaces & Integrations', categories: ['surfaces', 'mcp'] },
62
- { label: 'Automation', categories: ['batch', 'automation', 'watchers', 'orchestration', 'wrfc'] },
63
- { label: 'Runtime & Data', categories: ['storage', 'runtime', 'cache', 'telemetry'] },
58
+ { label: 'Agent Experience', categories: ['display', 'ui', 'behavior', 'permissions'] },
59
+ { label: 'Models and Providers', categories: ['provider', 'subscriptions', 'helper', 'tools', 'tts'] },
60
+ { label: 'Local Agent State', categories: ['storage', 'runtime', 'cache', 'telemetry'] },
61
+ { label: 'Tools and Automation', categories: ['mcp', 'batch', 'automation', 'watchers'] },
62
+ { label: 'External Runtime Connection', categories: ['network', 'controlPlane', 'httpListener', 'web', 'service', 'surfaces'] },
63
+ { label: 'Delegation Compatibility', categories: ['orchestration', 'wrfc'] },
64
64
  { label: 'Advanced', categories: ['flags', 'release', 'danger'] },
65
65
  ];
66
66
 
@@ -86,10 +86,10 @@ export const CATEGORY_LABELS: Record<(typeof SETTINGS_CATEGORIES)[number], strin
86
86
  wrfc: 'WRFC Delegation',
87
87
  helper: 'Helper',
88
88
  tts: 'TTS',
89
- service: 'Service',
89
+ service: 'Runtime Install',
90
90
  controlPlane: 'Runtime API',
91
- httpListener: 'HTTP Listener',
92
- web: 'Web',
91
+ httpListener: 'Inbound Events',
92
+ web: 'Browser Companion',
93
93
  batch: 'Batch',
94
94
  automation: 'Automation',
95
95
  watchers: 'Watchers',
@@ -97,7 +97,7 @@ export const CATEGORY_LABELS: Record<(typeof SETTINGS_CATEGORIES)[number], strin
97
97
  telemetry: 'Telemetry',
98
98
  cache: 'Cache',
99
99
  mcp: 'MCP',
100
- surfaces: 'Surfaces',
100
+ surfaces: 'Channels',
101
101
  release: 'Release',
102
102
  danger: 'Danger',
103
103
  tools: 'Tools',
@@ -109,7 +109,7 @@ export const SETTING_LABELS: Partial<Record<string, string>> = {
109
109
  'ui.systemMessages': 'System Message Target',
110
110
  'ui.operationalMessages': 'Operational Message Target',
111
111
  'ui.wrfcMessages': 'Delegated WRFC Message Target',
112
- 'ui.voiceEnabled': 'Voice Surface',
112
+ 'ui.voiceEnabled': 'Voice Interaction',
113
113
  'behavior.autoCompactThreshold': 'Auto-Compact %',
114
114
  'behavior.staleContextWarnings': 'Context Warnings',
115
115
  'behavior.returnContextMode': 'Return Context',
@@ -135,14 +135,14 @@ export const SETTING_LABELS: Partial<Record<string, string>> = {
135
135
  'controlPlane.tls.mode': 'Runtime API TLS Mode',
136
136
  'controlPlane.tls.certFile': 'Runtime API TLS Cert',
137
137
  'controlPlane.tls.keyFile': 'Runtime API TLS Key',
138
- // HTTP Listener
138
+ // Inbound event endpoint
139
139
  'httpListener.hostMode': 'HTTP Host Mode',
140
140
  'httpListener.host': 'HTTP Host',
141
141
  'httpListener.port': 'HTTP Port',
142
142
  'httpListener.trustProxy': 'HTTP Trust Proxy',
143
143
  'httpListener.tls.mode': 'HTTP TLS Mode',
144
144
  'httpListener.tls.certFile': 'HTTP TLS Cert',
145
- // Web Server
145
+ // Browser companion
146
146
  'web.enabled': 'Web Enabled',
147
147
  'web.hostMode': 'Web Host Mode',
148
148
  'web.host': 'Web Host',
@@ -24,7 +24,7 @@ import {
24
24
 
25
25
  const CATEGORY_INFO: Record<SettingsCategory, string> = {
26
26
  display: 'Presentation settings for the terminal transcript: streaming, line numbers, thinking visibility, reasoning summaries, token speed, and tool previews.',
27
- ui: 'Controls where operational messages render and whether voice surfaces are enabled. These settings change visibility, not provider behavior.',
27
+ ui: 'Controls where operational messages render and whether voice interaction is enabled. These settings change visibility, not provider behavior.',
28
28
  provider: 'Default model routing for normal chat turns, embeddings, reasoning effort, and persistent system prompt file.',
29
29
  subscriptions: 'Provider subscription login state and routing posture. Active sessions can be reviewed or signed out here; API keys remain managed through secrets.',
30
30
  behavior: 'Day-to-day shell behavior: approval posture, compaction, history, guidance, notifications, stale-context warnings, return context, and Human-in-the-Loop mode.',
@@ -34,10 +34,10 @@ const CATEGORY_INFO: Record<SettingsCategory, string> = {
34
34
  wrfc: 'WRFC is external to normal Agent operation. Review these copied compatibility values only for explicit GoodVibes TUI build delegation.',
35
35
  helper: 'Helper model defaults used by helper subsystems when they do not use the main chat route.',
36
36
  tts: 'Text-to-speech provider, voice, and optional spoken-turn LLM overrides.',
37
- service: 'External GoodVibes runtime service posture. Agent shows these compatibility keys for inspection only and does not install, start, stop, restart, or autostart services.',
38
- controlPlane: 'External GoodVibes runtime API settings for local admin/API access. Agent connects to that runtime and does not mutate its bind posture.',
39
- httpListener: 'External HTTP listener settings for webhook and integration ingress. Agent does not start or expose the listener.',
40
- web: 'External browser surface settings. Agent does not own the web listener or network bind lifecycle.',
37
+ service: 'External runtime installation posture. Agent shows these compatibility keys for inspection only and does not install, start, stop, restart, or autostart anything.',
38
+ controlPlane: 'External runtime API connection settings. Agent connects to that runtime and does not mutate its bind posture.',
39
+ httpListener: 'Inbound event endpoint settings owned by the external runtime. Agent inspects readiness and does not expose endpoints.',
40
+ web: 'External browser companion settings. Agent does not own browser hosting or network bind lifecycle.',
41
41
  batch: 'Batch execution settings reported from the external GoodVibes runtime. Agent does not own remote queue provisioning.',
42
42
  automation: 'Scheduled and automated run settings, concurrency, timeout, catch-up, cooldown, and retention behavior.',
43
43
  watchers: 'File/process watcher heartbeat, polling, and recovery-window behavior.',
@@ -45,12 +45,12 @@ const CATEGORY_INFO: Record<SettingsCategory, string> = {
45
45
  telemetry: 'Telemetry payload policy.',
46
46
  cache: 'Provider and model cache behavior, TTL, and hit-rate monitoring.',
47
47
  mcp: 'MCP server trust and scope review. Trust changes can expose local files, tools, databases, browsers, or remote automation depending on the server.',
48
- surfaces: 'External app surfaces such as Slack, Discord, ntfy, Telegram, webhooks, chat bridges, and messaging providers.',
48
+ surfaces: 'Messaging and notification channel accounts such as Slack, Discord, ntfy, Telegram, chat bridges, and delivery providers.',
49
49
  release: 'Release-channel preference.',
50
- danger: 'High-impact runtime and listener switches. Agent renders host-owned switches read-only; use GoodVibes TUI or the owning host to change them.',
50
+ danger: 'High-impact runtime switches. Agent renders host-owned switches read-only; use the owning GoodVibes runtime host to change them.',
51
51
  tools: 'Tool LLM and helper model routing. Empty provider/model values inherit the active chat route unless a specific helper/tool route is set.',
52
52
  flags: 'Feature flags are SDK runtime gates. They are separate from normal config keys because they enable or disable staged runtime behavior.',
53
- network: 'Read-only view of external GoodVibes runtime API, HTTP listener, and browser web bind posture plus editable Agent network settings.',
53
+ network: 'Read-only view of external runtime API, inbound-event, and browser companion bind posture plus editable Agent network settings.',
54
54
  };
55
55
 
56
56
  const ENUM_VALUE_DESCRIPTIONS: Record<string, Record<string, string>> = {
@@ -86,7 +86,7 @@ const ENUM_VALUE_DESCRIPTIONS: Record<string, Record<string, string>> = {
86
86
  },
87
87
  'httpListener.hostMode': {
88
88
  localhost: 'Bind only to this computer.',
89
- network: 'Bind for LAN/webhook access using the default network host.',
89
+ network: 'Bind for LAN event delivery using the default network host.',
90
90
  custom: 'Use the explicit host value in the related host setting.',
91
91
  },
92
92
  'web.hostMode': {
@@ -110,12 +110,12 @@ const ENUM_VALUE_DESCRIPTIONS: Record<string, Record<string, string>> = {
110
110
  both: 'Show explicit delegated-build WRFC messages in both panels and the transcript.',
111
111
  },
112
112
  'surfaces.telegram.mode': {
113
- webhook: 'Receive Telegram updates through webhook delivery.',
114
- polling: 'Poll Telegram for updates from the service.',
113
+ webhook: 'Receive Telegram updates through externally hosted delivery.',
114
+ polling: 'Poll Telegram for updates from the configured account.',
115
115
  },
116
116
  'surfaces.whatsapp.provider': {
117
117
  'meta-cloud': 'Use Meta Cloud API credentials and identifiers.',
118
- bridge: 'Use a bridge service URL/token flow instead of direct Meta Cloud API delivery.',
118
+ bridge: 'Use a bridge endpoint URL/token flow instead of direct Meta Cloud API delivery.',
119
119
  },
120
120
  };
121
121
 
@@ -52,7 +52,7 @@ const GOODVIBES_AGENT_OPERATOR_POLICY = [
52
52
  '- WRFC is never the default Agent reasoning path. Do not create local WRFC chains for planning, research, operations, knowledge, memory, configuration, approvals, automation observability, or ordinary assistant work.',
53
53
  '- GoodVibes Agent is not the coding TUI. Do not use the `agent` tool to spawn local Engineer, Reviewer, Tester, Verifier, or batch-spawn roots from Agent.',
54
54
  '- When the user explicitly asks to build, implement, fix, patch, or review code, preserve the full original user ask and delegate one build request to GoodVibes TUI through the public shared-session/build-delegation contract. Include clear executionIntent and request WRFC only for explicit build/fix/review work or when the user explicitly asks for WRFC/agent review.',
55
- '- Do not narrow explicit build/fix/review requests into design-only, read-only, or no-write work unless the user explicitly requested that limitation. TUI owns file edits, git/worktree work, runtime-isolation UX, and the WRFC owner chain.',
55
+ '- Do not narrow explicit build/fix/review requests into design-only, read-only, or no-write work unless the user explicitly requested that limitation. TUI owns file edits, git/worktree work, execution isolation UX, and the WRFC owner chain.',
56
56
  '- If a stable public delegation route is unavailable, say that the task needs GoodVibes TUI delegation and report the missing route instead of pretending to implement it locally or spawning sibling local agents.',
57
57
  ].join('\n');
58
58
 
@@ -6,6 +6,7 @@ import type {
6
6
  OnboardingNetworkMode,
7
7
  OnboardingReopenEditAcknowledgementState,
8
8
  OnboardingSnapshotState,
9
+ OnboardingStep1CapabilityFlags,
9
10
  OnboardingStep1CapabilityItem,
10
11
  OnboardingStepDerivationState,
11
12
  } from './types.ts';
@@ -185,10 +186,6 @@ function hasAnyServerEnabled(snapshot: OnboardingSnapshotState): boolean {
185
186
  || snapshot.bindSettings.web.enabled;
186
187
  }
187
188
 
188
- function hasBrowserAccess(snapshot: OnboardingSnapshotState): boolean {
189
- return snapshot.bindSettings.web.enabled;
190
- }
191
-
192
189
  function isLoopbackHost(host: string | null | undefined): boolean {
193
190
  const normalized = (host ?? '').trim().toLowerCase();
194
191
  if (normalized.length === 0) return false;
@@ -251,43 +248,72 @@ function hasExternalIntegrations(snapshot: OnboardingSnapshotState): boolean {
251
248
  || countConfiguredSurfaceKinds(snapshot) > 0;
252
249
  }
253
250
 
254
- function describeLocalTuiOnly(snapshot: OnboardingSnapshotState): string {
251
+ function hasLocalBehaviorCustomization(snapshot: OnboardingSnapshotState): boolean {
252
+ return hasCustomizedWorkspaceDefaults(snapshot)
253
+ || countPermissionToolOverrides(snapshot) > 0
254
+ || snapshot.runtimeDefaults.secretStoragePolicy !== DEFAULT_CONFIG.storage.secretPolicy;
255
+ }
256
+
257
+ function hasCommunicationChannelSignals(snapshot: OnboardingSnapshotState): boolean {
258
+ return hasExternalIntegrations(snapshot);
259
+ }
260
+
261
+ function hasAutomationReviewSignals(snapshot: OnboardingSnapshotState): boolean {
262
+ return hasWebhookOrEventIngress(snapshot);
263
+ }
264
+
265
+ function describeOperatorTerminal(snapshot: OnboardingSnapshotState): string {
255
266
  if (!hasAnyServerEnabled(snapshot)) {
256
- return 'Use GoodVibes Agent in this terminal while connecting to the existing GoodVibes runtime. Agent setup does not enable network services or extra entrypoints.';
267
+ return 'Use GoodVibes Agent as the terminal operator while connecting to the existing GoodVibes runtime. Agent setup does not create new entrypoints.';
257
268
  }
258
269
 
259
- return 'Keep Agent local-first by reviewing runtime connectivity separately from Agent-owned assistant setup.';
270
+ return 'Use GoodVibes Agent as the terminal operator; runtime host settings are shown only so the connection is understandable.';
260
271
  }
261
272
 
262
- function describeBrowserAccess(snapshot: OnboardingSnapshotState): string {
263
- return snapshot.bindSettings.web.enabled
264
- ? 'Review browser access already exposed by the runtime owner. Agent records visibility but does not change network posture.'
265
- : 'Browser access is optional. Agent can stay terminal-first while the runtime owner controls any browser entrypoint.';
273
+ function describeProviderAccess(snapshot: OnboardingSnapshotState): string {
274
+ const configuredCount = getConfiguredProviderSignalIds(snapshot).length;
275
+ if (configuredCount === 0 && !hasCustomizedProviderRouting(snapshot)) {
276
+ return 'Choose the model route the Agent should use for normal assistant turns, tool reasoning, and embeddings.';
277
+ }
278
+
279
+ return `Review ${Math.max(configuredCount, 1)} provider auth or routing signal(s) already available to Agent.`;
266
280
  }
267
281
 
268
- function describeRemoteDeviceAccess(snapshot: OnboardingSnapshotState): string {
269
- return hasRemoteDeviceAccess(snapshot)
270
- ? 'Review runtime access reachable from other devices on your LAN. Local authentication is required.'
271
- : 'Other-device access is optional and remains controlled by the runtime owner.';
282
+ function describeAgentKnowledge(): string {
283
+ return 'Agent Knowledge uses the isolated /api/goodvibes-agent/knowledge segment only; it never falls back to another knowledge segment.';
272
284
  }
273
285
 
274
- function describeWebhookIngress(snapshot: OnboardingSnapshotState): string {
275
- return hasWebhookOrEventIngress(snapshot)
276
- ? 'Review incoming webhook, callback, and automation-event routes exposed by the runtime owner.'
277
- : 'Incoming webhook and callback routes are optional; Agent onboarding does not create them.';
286
+ function describeLocalBehavior(snapshot: OnboardingSnapshotState): string {
287
+ if (!hasLocalBehaviorCustomization(snapshot)) {
288
+ return 'Configure local memory, routines, skills, personas, permissions, and secret handling before the Agent starts doing useful work.';
289
+ }
290
+
291
+ return 'Review existing local behavior, permission, display, or secret-handling choices before applying Agent setup.';
278
292
  }
279
293
 
280
- function describeExternalIntegrations(snapshot: OnboardingSnapshotState): string {
294
+ function describeCommunicationChannels(snapshot: OnboardingSnapshotState): string {
281
295
  const integrationCount = new Set<string>([
282
296
  ...getExternalIntegrationServiceIds(snapshot),
283
297
  ...getConfiguredSurfaceKinds(snapshot),
284
298
  ]).size;
285
299
 
286
300
  if (integrationCount === 0) {
287
- return 'Connect only the channels you want the assistant to use, then review delivery safety before sending externally.';
301
+ return 'Connect only the channels the Agent should use, and keep outbound delivery explicit until a user action allows it.';
302
+ }
303
+
304
+ return `Review ${integrationCount} configured channel or integration signal(s) before the Agent uses them for delivery.`;
305
+ }
306
+
307
+ function describeAutomationReview(snapshot: OnboardingSnapshotState): string {
308
+ if (!hasAutomationReviewSignals(snapshot)) {
309
+ return 'Review schedules, routine promotion, approvals, and automation visibility without starting hidden background work.';
288
310
  }
289
311
 
290
- return `Review ${integrationCount} detected channel or integration signal(s) before allowing external delivery.`;
312
+ return 'Review existing event, schedule, or automation signals and keep all side effects behind explicit commands or confirmations.';
313
+ }
314
+
315
+ function describeTuiDelegation(): string {
316
+ return 'Delegate explicit build, fix, implementation, and review work to GoodVibes TUI; WRFC is requested only when the user explicitly asks for it.';
291
317
  }
292
318
 
293
319
  function getAcknowledgementAccepted(
@@ -329,61 +355,64 @@ export function deriveStep1Capabilities(
329
355
  ): readonly OnboardingStep1CapabilityItem[] {
330
356
  return [
331
357
  {
332
- id: 'local-tui-only',
333
- label: 'Agent Terminal First',
334
- selected: !hasAnyServerEnabled(snapshot),
335
- detail: describeLocalTuiOnly(snapshot),
358
+ id: 'operator-terminal',
359
+ label: 'Agent Operator TUI',
360
+ selected: true,
361
+ detail: describeOperatorTerminal(snapshot),
362
+ },
363
+ {
364
+ id: 'provider-access',
365
+ label: 'Provider and Model Access',
366
+ selected: hasConfiguredProviderState(snapshot) || hasCustomizedProviderRouting(snapshot),
367
+ detail: describeProviderAccess(snapshot),
368
+ },
369
+ {
370
+ id: 'agent-knowledge',
371
+ label: 'Isolated Agent Knowledge',
372
+ selected: true,
373
+ detail: describeAgentKnowledge(),
336
374
  },
337
375
  {
338
- id: 'browser-access',
339
- label: 'Optional Browser Access',
340
- selected: hasBrowserAccess(snapshot),
341
- detail: describeBrowserAccess(snapshot),
376
+ id: 'local-behavior',
377
+ label: 'Local Memory and Skills',
378
+ selected: hasLocalBehaviorCustomization(snapshot),
379
+ detail: describeLocalBehavior(snapshot),
342
380
  },
343
381
  {
344
- id: 'network-access',
345
- label: 'Optional Other-Device Access',
346
- selected: hasRemoteDeviceAccess(snapshot),
347
- detail: describeRemoteDeviceAccess(snapshot),
382
+ id: 'communication-channels',
383
+ label: 'Channels and Notifications',
384
+ selected: hasCommunicationChannelSignals(snapshot),
385
+ detail: describeCommunicationChannels(snapshot),
348
386
  },
349
387
  {
350
- id: 'webhook-events',
351
- label: 'Optional Incoming Events',
352
- selected: hasWebhookOrEventIngress(snapshot),
353
- detail: describeWebhookIngress(snapshot),
388
+ id: 'automation-review',
389
+ label: 'Routines and Automation Review',
390
+ selected: hasAutomationReviewSignals(snapshot),
391
+ detail: describeAutomationReview(snapshot),
354
392
  },
355
393
  {
356
- id: 'external-integrations',
357
- label: 'Channels and Integrations',
358
- selected: hasExternalIntegrations(snapshot),
359
- detail: describeExternalIntegrations(snapshot),
394
+ id: 'tui-delegation',
395
+ label: 'Explicit Build Delegation',
396
+ selected: true,
397
+ detail: describeTuiDelegation(),
360
398
  },
361
399
  ];
362
400
  }
363
401
 
364
402
  export function deriveStep1CapabilityFlags(
365
403
  snapshot: OnboardingSnapshotState,
366
- ): {
367
- readonly providers: boolean;
368
- readonly services: boolean;
369
- readonly subscriptions: boolean;
370
- readonly auth: boolean;
371
- readonly controlPlane: boolean;
372
- readonly httpListener: boolean;
373
- readonly web: boolean;
374
- readonly surfaces: boolean;
375
- } {
404
+ ): OnboardingStep1CapabilityFlags {
376
405
  return {
377
- providers: hasConfiguredProviderState(snapshot) || hasCustomizedProviderRouting(snapshot),
378
- services: snapshot.services.total > 0,
406
+ providerAccess: hasConfiguredProviderState(snapshot) || hasCustomizedProviderRouting(snapshot),
379
407
  subscriptions: snapshot.subscriptions.active.length > 0 || snapshot.subscriptions.pending.length > 0,
380
408
  auth: snapshot.auth.snapshot.userCount > 0
381
409
  || snapshot.auth.snapshot.sessionCount > 0
382
410
  || snapshot.auth.snapshot.bootstrapCredentialPresent,
383
- controlPlane: snapshot.bindSettings.daemonEnabled || snapshot.bindSettings.controlPlane.enabled,
384
- httpListener: snapshot.bindSettings.httpListenerEnabled,
385
- web: snapshot.bindSettings.web.enabled,
386
- surfaces: countConfiguredSurfaceKinds(snapshot) > 0,
411
+ agentKnowledge: true,
412
+ localBehavior: hasLocalBehaviorCustomization(snapshot),
413
+ communicationChannels: hasCommunicationChannelSignals(snapshot),
414
+ automationReview: hasAutomationReviewSignals(snapshot),
415
+ tuiDelegation: true,
387
416
  };
388
417
  }
389
418
 
@@ -193,11 +193,13 @@ export interface OnboardingSnapshotState {
193
193
  }
194
194
 
195
195
  export type OnboardingStep1CapabilityId =
196
- | 'local-tui-only'
197
- | 'browser-access'
198
- | 'network-access'
199
- | 'webhook-events'
200
- | 'external-integrations';
196
+ | 'operator-terminal'
197
+ | 'provider-access'
198
+ | 'agent-knowledge'
199
+ | 'local-behavior'
200
+ | 'communication-channels'
201
+ | 'automation-review'
202
+ | 'tui-delegation';
201
203
 
202
204
  export interface OnboardingStep1CapabilityItem {
203
205
  readonly id: OnboardingStep1CapabilityId;
@@ -207,14 +209,14 @@ export interface OnboardingStep1CapabilityItem {
207
209
  }
208
210
 
209
211
  export interface OnboardingStep1CapabilityFlags {
210
- readonly providers: boolean;
211
- readonly services: boolean;
212
+ readonly providerAccess: boolean;
212
213
  readonly subscriptions: boolean;
213
214
  readonly auth: boolean;
214
- readonly controlPlane: boolean;
215
- readonly httpListener: boolean;
216
- readonly web: boolean;
217
- readonly surfaces: boolean;
215
+ readonly agentKnowledge: boolean;
216
+ readonly localBehavior: boolean;
217
+ readonly communicationChannels: boolean;
218
+ readonly automationReview: boolean;
219
+ readonly tuiDelegation: boolean;
218
220
  }
219
221
 
220
222
  export interface OnboardingAcknowledgementState {
@@ -130,7 +130,7 @@ const LOCAL_AGENT_DENIAL = [
130
130
  ].join(' ');
131
131
 
132
132
  const LOCAL_CODING_TOOL_DENIAL = [
133
- 'GoodVibes Agent does not perform direct local file mutation, local WRFC workflow execution, or local runtime-isolation execution from the main conversation.',
133
+ 'GoodVibes Agent does not perform direct local file mutation, local WRFC workflow execution, or local execution-isolation work from the main conversation.',
134
134
  'For explicit build/fix/review/code execution work, delegate one request to GoodVibes TUI through the public shared-session/build-delegation contract with the full original user ask.',
135
135
  'For durable Agent memory, skills, personas, routines, and knowledge, use the Agent-owned commands and isolated Agent Knowledge routes.',
136
136
  ].join(' ');
package/src/version.ts CHANGED
@@ -6,7 +6,7 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '0.1.72';
9
+ let _version = '0.1.73';
10
10
  let _sdkVersion = '0.33.35';
11
11
  try {
12
12
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {