@pellux/goodvibes-agent 1.0.36 → 1.0.38

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "1.0.36",
3
+ "version": "1.0.38",
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",
@@ -3,7 +3,7 @@ import type { AgentWorkspaceCategory } from './agent-workspace-types.ts';
3
3
  export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
4
4
  {
5
5
  id: 'home',
6
- group: 'HOME',
6
+ group: 'START',
7
7
  label: 'Home',
8
8
  summary: 'Main operator workspace for normal assistant work.',
9
9
  detail: 'Use this as the primary Agent workspace: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
@@ -35,7 +35,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
35
35
  },
36
36
  {
37
37
  id: 'setup',
38
- group: 'CONFIGURE',
38
+ group: 'START',
39
39
  label: 'Setup',
40
40
  summary: 'Configuration, auth, provider, and onboarding workspaces.',
41
41
  detail: 'Use this to configure the assistant: provider/model, setup checklist, Agent Knowledge, local behavior, channels, and voice/media. Changes here stay Agent-owned.',
@@ -94,7 +94,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
94
94
  },
95
95
  {
96
96
  id: 'research',
97
- group: 'RESEARCH',
97
+ group: 'DAY-TO-DAY',
98
98
  label: 'Research',
99
99
  summary: 'Read-only web research and source triage in the main conversation.',
100
100
  detail: 'Use this workspace to ask Agent to search, inspect URLs, compare sources, and decide what belongs in isolated Agent Knowledge. Research requests run in the normal conversation; source ingestion is explicit.',
@@ -113,7 +113,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
113
113
  },
114
114
  {
115
115
  id: 'artifacts',
116
- group: 'ARTIFACTS',
116
+ group: 'DAY-TO-DAY',
117
117
  label: 'Artifacts',
118
118
  summary: 'Files, attachments, exports, source ingest, and generated media.',
119
119
  detail: 'Use this workspace to handle concrete user-visible artifacts: attach images, export conversations, ingest source files into Agent Knowledge, inspect source libraries, and generate media with explicit confirmation.',
@@ -136,7 +136,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
136
136
  },
137
137
  {
138
138
  id: 'conversation',
139
- group: 'CONVERSATION',
139
+ group: 'DAY-TO-DAY',
140
140
  label: 'Conversation',
141
141
  summary: 'Transcript, prompt, context, and session controls.',
142
142
  detail: 'Use this workspace for the main TUI conversation: context review, compaction, prompt helpers, transcript navigation, session continuity, title, export, undo, redo, and retry.',
@@ -181,7 +181,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
181
181
  },
182
182
  {
183
183
  id: 'channels',
184
- group: 'CHANNELS',
184
+ group: 'CAPABILITIES',
185
185
  label: 'Channels',
186
186
  summary: 'Companion pairing, channel posture, and delivery safety.',
187
187
  detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
@@ -209,7 +209,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
209
209
  },
210
210
  {
211
211
  id: 'tools',
212
- group: 'TOOLS',
212
+ group: 'CAPABILITIES',
213
213
  label: 'Tools & MCP',
214
214
  summary: 'MCP server setup, trust review, and tool inventory.',
215
215
  detail: 'Configure and inspect task tools from the Agent TUI. Adding or changing tools requires typed confirmation; normal chat still chooses tools serially in the main conversation.',
@@ -240,7 +240,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
240
240
  },
241
241
  {
242
242
  id: 'knowledge',
243
- group: 'KNOWLEDGE',
243
+ group: 'CAPABILITIES',
244
244
  label: 'Knowledge',
245
245
  summary: 'Agent Knowledge and source-backed lookup.',
246
246
  detail: 'Agent knowledge calls use the isolated Agent Knowledge route family only. Default knowledge and non-Agent knowledge segments are not the Agent knowledge environment.',
@@ -276,7 +276,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
276
276
  },
277
277
  {
278
278
  id: 'voice-media',
279
- group: 'VOICE & MEDIA',
279
+ group: 'CAPABILITIES',
280
280
  label: 'Voice & Media',
281
281
  summary: 'Voice, TTS, image input, browser tools, and media providers.',
282
282
  detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Connected-host administration stays outside Agent and side effects stay explicit.',
@@ -302,7 +302,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
302
302
  },
303
303
  {
304
304
  id: 'profiles',
305
- group: 'PROFILES',
305
+ group: 'LOCAL BEHAVIOR',
306
306
  label: 'Profiles',
307
307
  summary: 'Isolated Agent homes, starter templates, and setup bundles.',
308
308
  detail: 'Agent profiles isolate Agent state. Named homes and starter templates let one install behave like separate assistants for household, research, travel, operations, or personal workflows.',
@@ -325,7 +325,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
325
325
  },
326
326
  {
327
327
  id: 'memory',
328
- group: 'MEMORY',
328
+ group: 'LOCAL BEHAVIOR',
329
329
  label: 'Memory & Skills',
330
330
  summary: 'Local assistant memory, notes, routines, skills, and reusable behavior.',
331
331
  detail: 'Memory, notes, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory or notes.',
@@ -362,7 +362,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
362
362
  },
363
363
  {
364
364
  id: 'notes',
365
- group: 'NOTES',
365
+ group: 'LOCAL BEHAVIOR',
366
366
  label: 'Notes',
367
367
  summary: 'Agent-local scratchpad for source triage and temporary context.',
368
368
  detail: 'Notes are local working context. They are useful for research notes, decisions in progress, and handoff notes, but they are not memory and are not Agent Knowledge.',
@@ -385,7 +385,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
385
385
  },
386
386
  {
387
387
  id: 'personas',
388
- group: 'PERSONAS',
388
+ group: 'LOCAL BEHAVIOR',
389
389
  label: 'Personas',
390
390
  summary: 'Local behavior profiles for the main assistant.',
391
391
  detail: 'Personas shape the serial Agent in the main conversation. They are local behavior profiles, not separate Agent identities.',
@@ -408,7 +408,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
408
408
  },
409
409
  {
410
410
  id: 'skills',
411
- group: 'SKILLS',
411
+ group: 'LOCAL BEHAVIOR',
412
412
  label: 'Skills',
413
413
  summary: 'Reusable local procedures with setup readiness.',
414
414
  detail: 'Skills are local, reviewable procedures with optional env/command requirements. Enabled skills inform the main conversation; secret-looking content is rejected.',
@@ -443,7 +443,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
443
443
  },
444
444
  {
445
445
  id: 'routines',
446
- group: 'ROUTINES',
446
+ group: 'LOCAL BEHAVIOR',
447
447
  label: 'Routines',
448
448
  summary: 'Repeatable workflows with setup readiness.',
449
449
  detail: 'Routines run in the main conversation by default and can declare env/command requirements. Promotion to a connected schedule requires a real schedule command and --yes.',
@@ -473,7 +473,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
473
473
  },
474
474
  {
475
475
  id: 'work',
476
- group: 'WORK',
476
+ group: 'OPERATIONS',
477
477
  label: 'Work & Approvals',
478
478
  summary: 'Visible task state, work plan, and approval posture.',
479
479
  detail: 'Use this workspace to inspect active operator state and update visible work-plan items from confirmed TUI forms.',
@@ -527,7 +527,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
527
527
  },
528
528
  {
529
529
  id: 'host',
530
- group: 'HOST',
530
+ group: 'OPERATIONS',
531
531
  label: 'Connected Host',
532
532
  summary: 'Connected-host health, tasks, sessions, channels, and automation.',
533
533
  detail: 'Use this workspace to inspect the GoodVibes host surfaces that Agent can see: system health, remote routes, host tasks, sessions, channels, schedules, knowledge, media, MCP, provider auth, support bundles, and telemetry/config posture.',
@@ -571,7 +571,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
571
571
  },
572
572
  {
573
573
  id: 'automation',
574
- group: 'AUTOMATION',
574
+ group: 'OPERATIONS',
575
575
  label: 'Automation',
576
576
  summary: 'Reminders, schedule observability, and explicit routine promotion.',
577
577
  detail: 'Agent does not create hidden local automation jobs. Confirmed reminders, reviewed routine promotion, and explicit run/pause/resume controls go through the connected host with confirmation.',
@@ -598,7 +598,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
598
598
  },
599
599
  {
600
600
  id: 'delegate',
601
- group: 'DELEGATE',
601
+ group: 'OPERATIONS',
602
602
  label: 'Build Delegation',
603
603
  summary: 'Explicit handoff to GoodVibes TUI for code work.',
604
604
  detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and delegated review only when explicitly requested.',
package/src/main.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  import { homedir } from 'node:os';
3
3
  import { Compositor } from './renderer/compositor.ts';
4
- import { type Line } from './types/grid.ts';
5
4
  import { UIFactory } from './renderer/ui-factory.ts';
6
5
  import { Orchestrator } from './core/orchestrator';
7
6
  import { conversationMessagesAsSessionRecords } from './core/conversation-message-snapshot.ts';
@@ -41,6 +40,7 @@ import {
41
40
  } from '@/runtime/index.ts';
42
41
  import type { SessionSnapshot } from '@/runtime/index.ts';
43
42
  import { handleBlockingShellInput, type PendingPermissionState } from './shell/blocking-input.ts';
43
+ import { createOnboardingFullscreenComposite } from './shell/onboarding-fullscreen.ts';
44
44
  import { wireShellUiOpeners } from './shell/ui-openers.ts';
45
45
  import { deriveComposerState } from './core/composer-state.ts';
46
46
  import { buildPersistedSessionContext, formatReturnContextForDisplay, getReturnContextMode, maybeAssistReturnContextSummary } from '@/runtime/index.ts';
@@ -472,6 +472,14 @@ async function main() {
472
472
  const width = stdout.columns || 80;
473
473
  const height = stdout.rows || 24;
474
474
 
475
+ if (input.onboardingWizard.active) {
476
+ input.setPanelMouseLayout(null);
477
+ activeConversationWidth = width;
478
+ conversation.setSplashSuppressed(true);
479
+ compositor.composite(createOnboardingFullscreenComposite(input, width, height));
480
+ return;
481
+ }
482
+
475
483
  // Cache the current model for consistent values across the entire render frame
476
484
  const currentModel = providerRegistry.getCurrentModel();
477
485
  const sessionSnapshot = uiServices.readModels.session.getSnapshot();
@@ -1,6 +1,6 @@
1
1
  import { TerminalBuffer } from './buffer.ts';
2
2
  import { DiffEngine } from './diff.ts';
3
- import { type Line, createEmptyCell, createStyledCell } from '../types/grid.ts';
3
+ import { type Line, createEmptyCell, createEmptyLine, createStyledCell } from '../types/grid.ts';
4
4
  import { getDisplayWidth } from '../utils/terminal-width.ts';
5
5
  import type { SearchManager } from '../input/search.ts';
6
6
  import { allowTerminalWrite } from '../runtime/terminal-output-guard.ts';
@@ -250,6 +250,12 @@ export class Compositor {
250
250
  }
251
251
  });
252
252
 
253
+ for (let i = viewport.length; i < vHeight; i += 1) {
254
+ const screenY = viewportStartY + i;
255
+ if (screenY >= height) break;
256
+ newBuffer.blitLine(screenY, createEmptyLine(width));
257
+ }
258
+
253
259
  // Draw separator on remaining viewport rows past content (when panel is active)
254
260
  if (hasPanel && panel!.separator) {
255
261
  for (let i = viewport.length; i < vHeight; i++) {