@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/CHANGELOG.md +10 -0
- package/dist/package/main.js +296 -478
- package/package.json +1 -1
- package/src/input/agent-workspace-categories.ts +19 -19
- package/src/main.ts +9 -1
- package/src/renderer/compositor.ts +7 -1
- package/src/renderer/onboarding/onboarding-wizard.ts +237 -500
- package/src/shell/onboarding-fullscreen.ts +40 -0
- package/src/version.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "1.0.
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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++) {
|