@pellux/goodvibes-agent 1.0.43 → 1.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "1.0.43",
3
+ "version": "1.1.0",
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",
@@ -110,8 +110,6 @@ export function applyInitialTuiCliState(options: {
110
110
  }
111
111
  } else if (!globalOnboardingMarker.exists) {
112
112
  input.openAgentWorkspace(commandContext);
113
- } else if (cli.command === 'tui' && seededPrompt === undefined) {
114
- input.openAgentWorkspace(commandContext);
115
113
  }
116
114
 
117
115
  if (seededPrompt) {
@@ -36,6 +36,7 @@ interface AgentWorkspaceActivationHost {
36
36
  moveLocalLibraryItemSelection(kind: AgentWorkspaceLocalEditorKind, delta: number): void;
37
37
  selectedLocalLibraryItem(kind: AgentWorkspaceLocalEditorKind): AgentWorkspaceLocalLibraryItem | null;
38
38
  applyLocalLibraryOperation(operation: AgentWorkspaceLocalOperation): void;
39
+ completeOnboarding(): void;
39
40
  hasCommandDispatch(): boolean;
40
41
  dispatchWorkspaceCommand: AgentWorkspaceCommandDispatcher;
41
42
  commitActionSearchSelection(): boolean;
@@ -89,6 +90,10 @@ export function activateAgentWorkspaceSelection(
89
90
  workspace.applyLocalLibraryOperation(action.localOperation);
90
91
  return;
91
92
  }
93
+ if (action.kind === 'onboarding-complete') {
94
+ workspace.completeOnboarding();
95
+ return;
96
+ }
92
97
  if (action.kind === 'guidance' || !action.command) {
93
98
  handleGuidanceOrWorkspaceAction(workspace, action);
94
99
  return;
@@ -609,6 +609,17 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
609
609
  { id: 'delegation-status', label: 'Delegation status', detail: 'Inspect build-delegation receipts and shared-session status without starting coding work.', command: '/delegate status', kind: 'command', safety: 'read-only' },
610
610
  ],
611
611
  },
612
+ {
613
+ id: 'finish',
614
+ group: 'FINISH',
615
+ label: 'Finish',
616
+ summary: 'Acknowledge setup and close onboarding.',
617
+ detail: 'Use this final step after reviewing setup. Apply & close writes the user onboarding completion marker so normal future launches start in the main conversation.',
618
+ actions: [
619
+ { id: 'onboarding-apply-close', label: 'Apply & close', detail: 'Acknowledge onboarding as finished, persist the user completion marker, and close the fullscreen Agent workspace.', kind: 'onboarding-complete', safety: 'safe' },
620
+ { id: 'finish-review-setup', label: 'Review setup first', detail: 'Jump back to setup before acknowledging onboarding as finished.', targetCategoryId: 'setup', kind: 'workspace', safety: 'safe' },
621
+ ],
622
+ },
612
623
  ];
613
624
 
614
625
  export function renderAgentWorkspacePackageText(): string {
@@ -27,11 +27,12 @@ export const AGENT_WORKSPACE_CATEGORY_IDS = [
27
27
  'host',
28
28
  'automation',
29
29
  'delegate',
30
+ 'finish',
30
31
  ] as const;
31
32
 
32
33
  export type AgentWorkspaceCategoryId = (typeof AGENT_WORKSPACE_CATEGORY_IDS)[number];
33
34
 
34
- export type AgentWorkspaceActionKind = 'command' | 'guidance' | 'workspace' | 'editor' | 'local-selection' | 'local-operation';
35
+ export type AgentWorkspaceActionKind = 'command' | 'guidance' | 'workspace' | 'editor' | 'local-selection' | 'local-operation' | 'onboarding-complete';
35
36
 
36
37
  export type AgentWorkspaceLocalEditorKind = 'memory' | 'note' | 'persona' | 'skill' | 'routine' | 'profile';
37
38
 
@@ -20,6 +20,7 @@ import { buildAgentWorkspaceRequirements } from './agent-workspace-requirements.
20
20
  import { appendAgentWorkspaceActionSearchText, backspaceAgentWorkspaceActionSearch, beginAgentWorkspaceActionSearch, clearAgentWorkspaceActionSearch, commitAgentWorkspaceActionSearchSelection, searchAgentWorkspaceActions } from './agent-workspace-search.ts';
21
21
  import { buildAgentWorkspaceRuntimeSnapshot } from './agent-workspace-snapshot.ts';
22
22
  import type { AgentWorkspaceAction, AgentWorkspaceActionResult, AgentWorkspaceActionSearchResult, AgentWorkspaceCategory, AgentWorkspaceCommandDispatcher, AgentWorkspaceEditorField, AgentWorkspaceFocusPane, AgentWorkspaceLocalEditor, AgentWorkspaceLocalEditorKind, AgentWorkspaceLocalLibraryItem, AgentWorkspaceLocalOperation, AgentWorkspacePromptDispatcher, AgentWorkspaceRuntimeSnapshot } from './agent-workspace-types.ts';
23
+ import { writeOnboardingCheckMarker } from '../runtime/onboarding/index.ts';
23
24
 
24
25
  export type { AgentWorkspaceChannelRisk, AgentWorkspaceChannelStatus } from './agent-workspace-channels.ts';
25
26
  export type { AgentWorkspaceAction, AgentWorkspaceActionResult, AgentWorkspaceActionSearchResult, AgentWorkspaceCategory, AgentWorkspaceCategoryId, AgentWorkspaceCommandDispatcher, AgentWorkspaceEditorField, AgentWorkspaceFocusPane, AgentWorkspaceLocalEditor, AgentWorkspaceLocalEditorKind, AgentWorkspaceLocalLibraryItem, AgentWorkspaceLocalOperation, AgentWorkspacePromptDispatcher, AgentWorkspaceRuntimeSnapshot } from './agent-workspace-types.ts';
@@ -306,6 +307,46 @@ export class AgentWorkspace {
306
307
  });
307
308
  }
308
309
 
310
+ completeOnboarding(): void {
311
+ const shellPaths = this.context?.workspace?.shellPaths;
312
+ if (!shellPaths) {
313
+ this.status = 'Cannot complete onboarding without Agent shell paths.';
314
+ this.lastActionResult = {
315
+ kind: 'error',
316
+ title: 'Onboarding completion unavailable',
317
+ detail: 'The Agent workspace cannot locate the user onboarding completion marker path for this runtime.',
318
+ safety: 'safe',
319
+ };
320
+ return;
321
+ }
322
+
323
+ try {
324
+ writeOnboardingCheckMarker(shellPaths, {
325
+ scope: 'user',
326
+ source: 'wizard',
327
+ mode: 'new',
328
+ workspaceRoot: shellPaths.workingDirectory,
329
+ });
330
+ this.status = 'Onboarding applied and closed.';
331
+ this.lastActionResult = {
332
+ kind: 'refreshed',
333
+ title: 'Onboarding complete',
334
+ detail: 'Saved the user onboarding completion marker. Future normal launches start in the main conversation.',
335
+ safety: 'safe',
336
+ };
337
+ if (!this.context?.dismissAgentWorkspace?.()) this.close();
338
+ } catch (error) {
339
+ const detail = error instanceof Error ? error.message : String(error);
340
+ this.status = 'Onboarding completion failed.';
341
+ this.lastActionResult = {
342
+ kind: 'error',
343
+ title: 'Onboarding completion failed',
344
+ detail,
345
+ safety: 'safe',
346
+ };
347
+ }
348
+ }
349
+
309
350
  private selectedItemForOperation(operation: AgentWorkspaceLocalOperation): AgentWorkspaceLocalLibraryItem | null {
310
351
  if (operation.startsWith('memory-')) return this.selectedLocalLibraryItem('memory');
311
352
  if (operation.startsWith('note-')) return this.selectedLocalLibraryItem('note');