@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.
- package/CHANGELOG.md +48 -661
- package/README.md +64 -57
- package/bin/goodvibes-agent.ts +16 -2
- package/dist/package/main.js +199180 -192185
- package/docs/README.md +15 -8
- package/docs/channels-remote-and-api.md +50 -0
- package/docs/connected-host.md +59 -0
- package/docs/getting-started.md +61 -50
- package/docs/knowledge-artifacts-and-multimodal.md +91 -0
- package/docs/project-planning.md +79 -0
- package/docs/providers-and-routing.md +46 -0
- package/docs/release-and-publishing.md +48 -11
- package/docs/tools-and-commands.md +123 -0
- package/docs/voice-and-live-tts.md +51 -0
- package/package.json +3 -6
- package/src/agent/behavior-discovery-summary.ts +1 -3
- package/src/agent/channel-delivery.ts +201 -0
- package/src/agent/media-generation.ts +159 -0
- package/src/agent/memory-prompt.ts +0 -1
- package/src/agent/note-registry.ts +329 -0
- package/src/agent/operator-actions.ts +343 -0
- package/src/agent/persona-discovery.ts +1 -3
- package/src/agent/persona-registry.ts +19 -16
- package/src/agent/record-labels.ts +107 -0
- package/src/agent/reminder-schedule-format.ts +33 -24
- package/src/agent/reminder-schedule.ts +27 -26
- package/src/agent/routine-registry.ts +54 -14
- package/src/agent/routine-schedule-args.ts +2 -1
- package/src/agent/routine-schedule-format.ts +77 -53
- package/src/agent/routine-schedule-promotion.ts +35 -33
- package/src/agent/routine-schedule-receipts.ts +29 -27
- package/src/agent/runtime-profile-starters.ts +5 -5
- package/src/agent/runtime-profile.ts +91 -12
- package/src/agent/skill-registry.ts +210 -32
- package/src/cli/agent-knowledge-args.ts +5 -1
- package/src/cli/agent-knowledge-command.ts +40 -34
- package/src/cli/agent-knowledge-format.ts +80 -67
- package/src/cli/agent-knowledge-methods.ts +1 -1
- package/src/cli/agent-knowledge-runtime.ts +32 -26
- package/src/cli/bundle-command.ts +14 -9
- package/src/cli/config-overrides.ts +37 -36
- package/src/cli/entrypoint.ts +16 -7
- package/src/cli/external-runtime.ts +10 -4
- package/src/cli/help.ts +54 -29
- package/src/cli/local-library-command.ts +203 -83
- package/src/cli/management-commands.ts +105 -68
- package/src/cli/management.ts +55 -74
- package/src/cli/memory-command.ts +66 -32
- package/src/cli/parser.ts +37 -3
- package/src/cli/profiles-command.ts +166 -31
- package/src/cli/provider-auth-routes.ts +2 -1
- package/src/cli/routines-command.ts +176 -40
- package/src/cli/service-posture.ts +16 -16
- package/src/cli/status.ts +56 -135
- package/src/core/conversation-message-snapshot.ts +131 -0
- package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
- package/src/input/agent-workspace-access-command-editors.ts +170 -0
- package/src/input/agent-workspace-activation.ts +35 -8
- package/src/input/agent-workspace-basic-command-editor-submission.ts +351 -94
- package/src/input/agent-workspace-basic-command-editors.ts +502 -9
- package/src/input/agent-workspace-categories.ts +423 -51
- package/src/input/agent-workspace-channel-command-editor-submission.ts +83 -0
- package/src/input/agent-workspace-channel-command-editors.ts +65 -0
- package/src/input/agent-workspace-channels.ts +35 -2
- package/src/input/agent-workspace-command-editor.ts +41 -3
- package/src/input/agent-workspace-config-reader.ts +16 -0
- package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
- package/src/input/agent-workspace-editors.ts +166 -1
- package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
- package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
- package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
- package/src/input/agent-workspace-learned-behavior.ts +67 -0
- package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
- package/src/input/agent-workspace-library-command-editors.ts +35 -0
- package/src/input/agent-workspace-local-operations.ts +218 -0
- package/src/input/agent-workspace-local-selection.ts +75 -0
- package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
- package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
- package/src/input/agent-workspace-media-command-editors.ts +27 -0
- package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
- package/src/input/agent-workspace-memory-command-editors.ts +180 -0
- package/src/input/agent-workspace-memory-editor.ts +2 -2
- package/src/input/agent-workspace-navigation.ts +81 -0
- package/src/input/agent-workspace-notify-editor-submission.ts +121 -0
- package/src/input/agent-workspace-operations-command-editor-submission.ts +208 -0
- package/src/input/agent-workspace-operations-command-editors.ts +196 -0
- package/src/input/agent-workspace-panel-route.ts +43 -0
- package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
- package/src/input/agent-workspace-provider-command-editors.ts +93 -0
- package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
- package/src/input/agent-workspace-requirements.ts +11 -0
- package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
- package/src/input/agent-workspace-search.ts +169 -0
- package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
- package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
- package/src/input/agent-workspace-session-command-editors.ts +249 -0
- package/src/input/agent-workspace-setup.ts +37 -16
- package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
- package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
- package/src/input/agent-workspace-snapshot.ts +162 -21
- package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
- package/src/input/agent-workspace-task-command-editors.ts +47 -0
- package/src/input/agent-workspace-token.ts +18 -2
- package/src/input/agent-workspace-types.ts +212 -4
- package/src/input/agent-workspace-voice-media.ts +4 -7
- package/src/input/agent-workspace-web-research-editor.ts +104 -0
- package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
- package/src/input/agent-workspace.ts +178 -240
- package/src/input/command-registry.ts +5 -2
- package/src/input/commands/agent-runtime-profile-runtime.ts +126 -37
- package/src/input/commands/agent-skills-runtime.ts +149 -72
- package/src/input/commands/agent-workspace-runtime.ts +23 -6
- package/src/input/commands/brief-runtime.ts +55 -25
- package/src/input/commands/channels-runtime.ts +147 -33
- package/src/input/commands/compat-runtime.ts +32 -0
- package/src/input/commands/delegation-runtime.ts +29 -23
- package/src/input/commands/experience-runtime.ts +6 -4
- package/src/input/commands/guidance-runtime.ts +4 -4
- package/src/input/commands/health-runtime.ts +149 -126
- package/src/input/commands/knowledge.ts +82 -60
- package/src/input/commands/local-provider-runtime.ts +43 -21
- package/src/input/commands/local-runtime.ts +138 -16
- package/src/input/commands/local-setup-review.ts +10 -20
- package/src/input/commands/mcp-runtime.ts +63 -46
- package/src/input/commands/notify-runtime.ts +38 -9
- package/src/input/commands/operator-actions-runtime.ts +138 -0
- package/src/input/commands/operator-runtime.ts +6 -76
- package/src/input/commands/personas-runtime.ts +46 -31
- package/src/input/commands/planning-runtime.ts +1 -1
- package/src/input/commands/platform-access-runtime.ts +35 -98
- package/src/input/commands/product-runtime.ts +2 -2
- package/src/input/commands/provider-accounts-runtime.ts +60 -39
- package/src/input/commands/qrcode-runtime.ts +50 -9
- package/src/input/commands/recall-bundle.ts +11 -11
- package/src/input/commands/recall-capture.ts +13 -11
- package/src/input/commands/recall-query.ts +29 -21
- package/src/input/commands/recall-review.ts +2 -1
- package/src/input/commands/routines-runtime.ts +99 -45
- package/src/input/commands/runtime-services.ts +1 -14
- package/src/input/commands/schedule-runtime.ts +33 -20
- package/src/input/commands/security-runtime.ts +6 -11
- package/src/input/commands/session-content.ts +80 -78
- package/src/input/commands/session-workflow.ts +134 -104
- package/src/input/commands/session.ts +3 -174
- package/src/input/commands/shell-core.ts +38 -17
- package/src/input/commands/subscription-runtime.ts +54 -185
- package/src/input/commands/support-bundle-runtime.ts +53 -0
- package/src/input/commands/tasks-runtime.ts +21 -21
- package/src/input/commands/work-plan-runtime.ts +33 -8
- package/src/input/commands.ts +6 -2
- package/src/input/feed-context-factory.ts +2 -2
- package/src/input/file-picker.ts +3 -2
- package/src/input/handler-command-route.ts +4 -7
- package/src/input/handler-content-actions.ts +89 -26
- package/src/input/handler-feed-routes.ts +19 -12
- package/src/input/handler-feed.ts +6 -5
- package/src/input/handler-interactions.ts +9 -36
- package/src/input/handler-modal-stack.ts +3 -3
- package/src/input/handler-onboarding.ts +52 -91
- package/src/input/handler-shortcuts.ts +16 -7
- package/src/input/handler.ts +50 -23
- package/src/input/input-history.ts +5 -6
- package/src/input/keybindings.ts +27 -16
- package/src/input/mcp-workspace.ts +90 -26
- package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
- package/src/input/onboarding/onboarding-wizard-apply.ts +62 -0
- package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
- package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-operator-steps.ts +223 -55
- package/src/input/onboarding/onboarding-wizard-steps.ts +59 -35
- package/src/input/onboarding/onboarding-wizard-types.ts +4 -1
- package/src/input/onboarding/onboarding-wizard.ts +87 -2
- package/src/input/profile-picker-modal.ts +31 -12
- package/src/input/session-picker-modal.ts +21 -4
- package/src/input/settings-modal-agent-policy.ts +6 -6
- package/src/input/settings-modal-behavior.ts +0 -3
- package/src/input/settings-modal-subscriptions.ts +3 -3
- package/src/input/settings-modal-types.ts +2 -13
- package/src/input/settings-modal.ts +20 -66
- package/src/input/submission-intent.ts +0 -1
- package/src/input/submission-router.ts +3 -3
- package/src/main.ts +18 -10
- package/src/panels/approval-panel.ts +8 -8
- package/src/panels/automation-control-panel.ts +4 -4
- package/src/panels/base-panel.ts +1 -1
- package/src/panels/builtin/agent.ts +1 -1
- package/src/panels/builtin/operations.ts +3 -12
- package/src/panels/builtin/session.ts +32 -24
- package/src/panels/builtin/shared.ts +7 -7
- package/src/panels/cost-tracker-panel.ts +1 -1
- package/src/panels/docs-panel.ts +5 -3
- package/src/panels/index.ts +0 -1
- package/src/panels/knowledge-panel.ts +6 -5
- package/src/panels/memory-panel.ts +7 -6
- package/src/panels/panel-list-panel.ts +36 -80
- package/src/panels/project-planning-panel.ts +19 -12
- package/src/panels/provider-account-snapshot.ts +51 -25
- package/src/panels/provider-accounts-panel.ts +33 -18
- package/src/panels/provider-health-domains.ts +48 -7
- package/src/panels/provider-health-panel.ts +5 -4
- package/src/panels/qr-panel.ts +44 -20
- package/src/panels/schedule-panel.ts +9 -17
- package/src/panels/security-panel.ts +8 -8
- package/src/panels/session-browser-panel.ts +10 -10
- package/src/panels/subscription-panel.ts +6 -6
- package/src/panels/system-messages-panel.ts +3 -3
- package/src/panels/tasks-panel.ts +21 -14
- package/src/panels/tool-inspector-panel.ts +19 -12
- package/src/panels/work-plan-panel.ts +5 -5
- package/src/planning/project-planning-coordinator.ts +3 -3
- package/src/provider-auth-route-display.ts +9 -0
- package/src/renderer/agent-workspace-style.ts +34 -0
- package/src/renderer/agent-workspace.ts +254 -57
- package/src/renderer/autocomplete-overlay.ts +25 -6
- package/src/renderer/block-actions.ts +1 -3
- package/src/renderer/bookmark-modal.ts +19 -4
- package/src/renderer/buffer.ts +4 -2
- package/src/renderer/context-inspector.ts +50 -13
- package/src/renderer/diff.ts +1 -1
- package/src/renderer/file-picker-overlay.ts +19 -6
- package/src/renderer/help-overlay.ts +112 -34
- package/src/renderer/history-search-overlay.ts +19 -4
- package/src/renderer/live-tail-modal.ts +27 -5
- package/src/renderer/mcp-workspace.ts +176 -43
- package/src/renderer/model-picker-overlay.ts +58 -3
- package/src/renderer/model-workspace.ts +104 -22
- package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
- package/src/renderer/process-modal.ts +27 -6
- package/src/renderer/profile-picker-modal.ts +21 -5
- package/src/renderer/search-overlay.ts +25 -5
- package/src/renderer/selection-modal-overlay.ts +46 -14
- package/src/renderer/session-picker-modal.ts +18 -1
- package/src/renderer/settings-modal-helpers.ts +2 -40
- package/src/renderer/settings-modal.ts +88 -55
- package/src/renderer/system-message.ts +1 -1
- package/src/renderer/tool-call.ts +20 -11
- package/src/runtime/agent-runtime-events.ts +129 -0
- package/src/runtime/bootstrap-command-context.ts +7 -1
- package/src/runtime/bootstrap-command-parts.ts +11 -8
- package/src/runtime/bootstrap-core.ts +23 -65
- package/src/runtime/bootstrap-hook-bridge.ts +7 -18
- package/src/runtime/bootstrap-shell.ts +46 -8
- package/src/runtime/bootstrap.ts +36 -46
- package/src/runtime/connected-host-auth.ts +47 -0
- package/src/runtime/diagnostics/panels/index.ts +2 -2
- package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
- package/src/runtime/diagnostics/panels/policy.ts +7 -7
- package/src/runtime/index.ts +2 -5
- package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
- package/src/runtime/onboarding/apply.ts +288 -74
- package/src/runtime/onboarding/derivation.ts +10 -13
- package/src/runtime/onboarding/snapshot.ts +2 -17
- package/src/runtime/onboarding/types.ts +34 -20
- package/src/runtime/onboarding/verify.ts +105 -4
- package/src/runtime/operator-token-cleanup.ts +3 -3
- package/src/runtime/services.ts +95 -11
- package/src/runtime/store/selectors/index.ts +3 -3
- package/src/runtime/store/state.ts +1 -4
- package/src/runtime/surface-feature-flags.ts +41 -6
- package/src/runtime/ui-read-models.ts +3 -4
- package/src/runtime/ui-services.ts +6 -6
- package/src/shell/blocking-input.ts +2 -1
- package/src/shell/service-settings-sync.ts +7 -7
- package/src/shell/ui-openers.ts +17 -38
- package/src/tools/agent-analysis-registry-policy.ts +0 -1
- package/src/tools/agent-channel-send-tool.ts +133 -0
- package/src/tools/agent-context-policy.ts +1 -1
- package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
- package/src/tools/agent-knowledge-tool.ts +170 -0
- package/src/tools/agent-local-registry-tool.ts +279 -73
- package/src/tools/agent-media-generate-tool.ts +133 -0
- package/src/tools/agent-notify-tool.ts +143 -0
- package/src/tools/agent-operator-action-tool.ts +137 -0
- package/src/tools/agent-operator-briefing-tool.ts +217 -0
- package/src/tools/agent-reminder-schedule-tool.ts +237 -0
- package/src/tools/agent-tool-policy-guard.ts +13 -15
- package/src/tools/agent-work-plan-tool.ts +256 -0
- package/src/version.ts +1 -1
- package/docs/connected-services.md +0 -51
- package/src/cli/package-verification.ts +0 -274
- package/src/input/commands/policy-dispatch.ts +0 -339
- package/src/input/commands/policy.ts +0 -17
- package/src/panels/panel-picker.ts +0 -105
- package/src/panels/policy-panel.ts +0 -308
- package/src/renderer/panel-picker-overlay.ts +0 -202
|
@@ -21,6 +21,8 @@ import type { PeerClient } from '@/runtime/index.ts';
|
|
|
21
21
|
import type { DirectTransport } from '@/runtime/index.ts';
|
|
22
22
|
import type { VoiceProviderRegistry, VoiceService } from '@pellux/goodvibes-sdk/platform/voice';
|
|
23
23
|
import type { MediaProviderRegistry } from '@pellux/goodvibes-sdk/platform/media';
|
|
24
|
+
import type { ArtifactStore } from '@pellux/goodvibes-sdk/platform/artifacts';
|
|
25
|
+
import type { ChannelDeliveryRouter } from '@pellux/goodvibes-sdk/platform/channels';
|
|
24
26
|
import type {
|
|
25
27
|
CommandWorkspaceShellServices,
|
|
26
28
|
} from '@/runtime/index.ts';
|
|
@@ -108,9 +110,8 @@ export interface CommandShellUiOpeners {
|
|
|
108
110
|
showPanel?: (panelId: string, pane?: 'top' | 'bottom') => void;
|
|
109
111
|
focusPanels?: () => void;
|
|
110
112
|
focusPrompt?: () => void;
|
|
111
|
-
openPolicyPanel?: () => void;
|
|
112
113
|
openMcpWorkspace?: () => void;
|
|
113
|
-
openAgentWorkspace?: () => void;
|
|
114
|
+
openAgentWorkspace?: (categoryId?: string) => void;
|
|
114
115
|
openSecurityPanel?: () => void;
|
|
115
116
|
openKnowledgePanel?: () => void;
|
|
116
117
|
openSubscriptionPanel?: () => void;
|
|
@@ -157,6 +158,8 @@ export interface CommandPlatformConfigServices {
|
|
|
157
158
|
readonly voiceProviderRegistry?: VoiceProviderRegistry;
|
|
158
159
|
readonly voiceService?: VoiceService;
|
|
159
160
|
readonly mediaProviderRegistry?: MediaProviderRegistry;
|
|
161
|
+
readonly artifactStore?: Pick<ArtifactStore, 'create'>;
|
|
162
|
+
readonly channelDeliveryRouter?: Pick<ChannelDeliveryRouter, 'deliver' | 'listStrategies'>;
|
|
160
163
|
}
|
|
161
164
|
|
|
162
165
|
export interface CommandPlatformServices
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mkdirSync } from 'node:fs';
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
import {
|
|
4
|
+
clearAgentRuntimeProfileSelection,
|
|
4
5
|
createAgentRuntimeProfileFromDiscovered,
|
|
5
6
|
createAgentRuntimeProfileTemplateFromDiscovered,
|
|
6
7
|
createAgentRuntimeProfile,
|
|
@@ -10,9 +11,13 @@ import {
|
|
|
10
11
|
importAgentRuntimeProfileTemplate,
|
|
11
12
|
listAgentRuntimeProfiles,
|
|
12
13
|
listAgentRuntimeProfileTemplates,
|
|
14
|
+
readAgentRuntimeProfileSelection,
|
|
15
|
+
resolveAgentRuntimeProfileHome,
|
|
16
|
+
setAgentRuntimeProfileSelection,
|
|
13
17
|
type AgentRuntimeProfileInfo,
|
|
14
18
|
type AgentRuntimeProfileTemplateSummary,
|
|
15
19
|
} from '../../agent/runtime-profile.ts';
|
|
20
|
+
import { formatAgentRecordSource } from '../../agent/record-labels.ts';
|
|
16
21
|
import type { CommandContext, CommandRegistry } from '../command-registry.ts';
|
|
17
22
|
import { requireYesFlag, stripYesFlag } from './confirmation.ts';
|
|
18
23
|
import { requireShellPaths } from './runtime-services.ts';
|
|
@@ -31,32 +36,47 @@ function parseCsvFlag(args: readonly string[], name: string): readonly string[]
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
function profileLine(profile: AgentRuntimeProfileInfo): string {
|
|
34
|
-
const created = profile.createdAt ? `
|
|
35
|
-
const starter = profile.starterTemplateId ? `
|
|
36
|
-
return ` ${profile.id} home
|
|
39
|
+
const created = profile.createdAt ? ` created ${profile.createdAt}` : '';
|
|
40
|
+
const starter = profile.starterTemplateId ? ` starter=${profile.starterTemplateId}` : '';
|
|
41
|
+
return ` ${profile.id} home ${profile.homeDirectory}${created}${starter}`;
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
function templateLine(template: AgentRuntimeProfileTemplateSummary): string {
|
|
40
|
-
const
|
|
45
|
+
const origin = template.source === 'local' ? `local ${template.path ?? ''}`.trim() : formatAgentRecordSource(template.source).toLowerCase();
|
|
41
46
|
return [
|
|
42
|
-
` ${template.id} [${
|
|
43
|
-
` ${template.name}
|
|
44
|
-
` persona
|
|
45
|
-
` skills
|
|
46
|
-
` routines
|
|
47
|
+
` ${template.id} [${origin}]`,
|
|
48
|
+
` ${template.name} - ${template.description}`,
|
|
49
|
+
` persona ${template.personaName}`,
|
|
50
|
+
` skills ${template.skillNames.join(', ')}`,
|
|
51
|
+
` routines ${template.routineNames.join(', ')}`,
|
|
47
52
|
].join('\n');
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
function renderProfiles(homeDirectory: string): string {
|
|
51
56
|
const profiles = listAgentRuntimeProfiles(homeDirectory);
|
|
57
|
+
const selected = readAgentRuntimeProfileSelection(homeDirectory);
|
|
58
|
+
const defaultLine = selected ? ` default: ${selected.id}${selected.exists ? '' : ' (missing)'}` : ' default: (base Agent home)';
|
|
52
59
|
if (profiles.length === 0) {
|
|
53
60
|
return [
|
|
54
61
|
'Agent Profiles',
|
|
62
|
+
defaultLine,
|
|
55
63
|
' No isolated Agent profiles yet.',
|
|
56
64
|
' Create one with /agent-profile create <name> --template <id> --yes.',
|
|
57
65
|
].join('\n');
|
|
58
66
|
}
|
|
59
|
-
return ['Agent Profiles', ...profiles.map(profileLine)].join('\n');
|
|
67
|
+
return ['Agent Profiles', defaultLine, ...profiles.map(profileLine)].join('\n');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function renderProfileDetail(homeDirectory: string, name: string): string {
|
|
71
|
+
const profile = resolveAgentRuntimeProfileHome(homeDirectory, name);
|
|
72
|
+
const info = listAgentRuntimeProfiles(homeDirectory).find((entry) => entry.id === profile.id) ?? { ...profile, createdAt: null };
|
|
73
|
+
const starter = info.starterTemplateId ? [` starter: ${info.starterTemplateId} (${info.starterTemplateName ?? info.starterTemplateId})`] : [];
|
|
74
|
+
return [
|
|
75
|
+
`Agent profile: ${profile.id}`,
|
|
76
|
+
` home ${profile.homeDirectory}`,
|
|
77
|
+
...starter,
|
|
78
|
+
` use goodvibes-agent --agent-profile ${profile.id}`,
|
|
79
|
+
].join('\n');
|
|
60
80
|
}
|
|
61
81
|
|
|
62
82
|
function renderTemplates(homeDirectory: string): string {
|
|
@@ -79,8 +99,8 @@ function renderGuide(homeDirectory: string): string {
|
|
|
79
99
|
const localCount = templates.filter((template) => template.source === 'local').length;
|
|
80
100
|
return [
|
|
81
101
|
'Agent Starter Authoring Guide',
|
|
82
|
-
` built-in starters
|
|
83
|
-
` local starters
|
|
102
|
+
` built-in starters ${templates.length - localCount}`,
|
|
103
|
+
` local starters ${localCount}`,
|
|
84
104
|
'',
|
|
85
105
|
'1. Pick a base starter:',
|
|
86
106
|
' /agent-profile templates',
|
|
@@ -92,20 +112,20 @@ function renderGuide(homeDirectory: string): string {
|
|
|
92
112
|
'5. Create an Agent profile from the imported starter:',
|
|
93
113
|
' /agent-profile create <name> --template <imported-id> --yes',
|
|
94
114
|
'',
|
|
95
|
-
'This writes only Agent-local starter/profile state. It does not mutate connected GoodVibes
|
|
115
|
+
'This writes only Agent-local starter/profile state. It does not mutate connected GoodVibes host, default knowledge, or non-Agent knowledge segments.',
|
|
96
116
|
].join('\n');
|
|
97
117
|
}
|
|
98
118
|
|
|
99
119
|
function renderTemplatePreview(homeDirectory: string, templateId: string): string {
|
|
100
120
|
const file = getAgentRuntimeProfileTemplateFile(templateId, homeDirectory);
|
|
101
121
|
return [
|
|
102
|
-
`Agent Starter Template
|
|
103
|
-
` name
|
|
104
|
-
`
|
|
105
|
-
` description
|
|
106
|
-
` persona
|
|
107
|
-
` skills
|
|
108
|
-
` routines
|
|
122
|
+
`Agent Starter Template ${file.template.id}`,
|
|
123
|
+
` name ${file.template.name}`,
|
|
124
|
+
` origin ${formatAgentRecordSource(file.template.source)}`,
|
|
125
|
+
` description ${file.template.description}`,
|
|
126
|
+
` persona ${file.template.persona.name}`,
|
|
127
|
+
` skills ${file.template.skills.map((skill) => skill.name).join(', ')}`,
|
|
128
|
+
` routines ${file.template.routines.map((routine) => routine.name).join(', ')}`,
|
|
109
129
|
'',
|
|
110
130
|
'Export/edit/import to customize this starter:',
|
|
111
131
|
` /agent-profile template export ${file.template.id} ./agent-starter.json --yes`,
|
|
@@ -117,7 +137,7 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
117
137
|
name: 'agent-profile',
|
|
118
138
|
aliases: ['runtime-profile', 'agent-profiles'],
|
|
119
139
|
description: 'Manage isolated Agent profiles and starter templates',
|
|
120
|
-
usage: '[list|templates|guide|template show|template export|template import|template from-discovered|create|create-from-discovered|delete]',
|
|
140
|
+
usage: '[list|show|default|use|templates|guide|template show|template export|template import|template from-discovered|create|create-from-discovered|delete]',
|
|
121
141
|
async handler(args, ctx) {
|
|
122
142
|
const shellPaths = requireShellPaths(ctx);
|
|
123
143
|
const homeDirectory = shellPaths.homeDirectory;
|
|
@@ -136,6 +156,72 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
136
156
|
return;
|
|
137
157
|
}
|
|
138
158
|
|
|
159
|
+
if (sub === 'show' || sub === 'path' || sub === 'home') {
|
|
160
|
+
const name = commandArgs[1];
|
|
161
|
+
if (!name) {
|
|
162
|
+
ctx.print('Usage: /agent-profile show <name>');
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
ctx.print(renderProfileDetail(homeDirectory, name));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (sub === 'default') {
|
|
170
|
+
const target = commandArgs[1];
|
|
171
|
+
if (target === 'clear' || target === 'none' || target === 'base') {
|
|
172
|
+
if (!parsed.yes) {
|
|
173
|
+
requireYesFlag(ctx, 'clear the default Agent profile', '/agent-profile default clear --yes');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
clearAgentRuntimeProfileSelection(homeDirectory);
|
|
177
|
+
ctx.print('Default Agent profile cleared. Next launch uses the base Agent home unless --agent-profile is provided.');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (target) {
|
|
181
|
+
if (!parsed.yes) {
|
|
182
|
+
requireYesFlag(ctx, `set default Agent profile ${target}`, '/agent-profile default <name> --yes');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const selected = setAgentRuntimeProfileSelection(homeDirectory, target);
|
|
186
|
+
ctx.print([
|
|
187
|
+
`Default Agent profile selected: ${selected.id}`,
|
|
188
|
+
` home ${selected.homeDirectory}`,
|
|
189
|
+
' next launch: goodvibes-agent',
|
|
190
|
+
' explicit override goodvibes-agent --agent-profile <name>',
|
|
191
|
+
].join('\n'));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const selected = readAgentRuntimeProfileSelection(homeDirectory);
|
|
195
|
+
ctx.print(selected
|
|
196
|
+
? [
|
|
197
|
+
`Default Agent profile: ${selected.id}${selected.exists ? '' : ' (missing)'}`,
|
|
198
|
+
` home ${selected.homeDirectory}`,
|
|
199
|
+
' next launch: goodvibes-agent',
|
|
200
|
+
].join('\n')
|
|
201
|
+
: 'No default Agent profile selected. Next launch uses the base Agent home.');
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (sub === 'use' || sub === 'select' || sub === 'switch') {
|
|
206
|
+
const name = commandArgs[1];
|
|
207
|
+
if (!name) {
|
|
208
|
+
ctx.print('Usage: /agent-profile use <name> --yes');
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (!parsed.yes) {
|
|
212
|
+
requireYesFlag(ctx, `set default Agent profile ${name}`, '/agent-profile use <name> --yes');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const selected = setAgentRuntimeProfileSelection(homeDirectory, name);
|
|
216
|
+
ctx.print([
|
|
217
|
+
`Default Agent profile selected: ${selected.id}`,
|
|
218
|
+
` home ${selected.homeDirectory}`,
|
|
219
|
+
' next launch: goodvibes-agent',
|
|
220
|
+
' explicit override goodvibes-agent --agent-profile <name>',
|
|
221
|
+
].join('\n'));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
139
225
|
if (sub === 'guide' || sub === 'author') {
|
|
140
226
|
ctx.print(renderGuide(homeDirectory));
|
|
141
227
|
return;
|
|
@@ -166,7 +252,7 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
166
252
|
const targetPath = shellPaths.resolveWorkspacePath(pathArg);
|
|
167
253
|
mkdirSync(dirname(targetPath), { recursive: true });
|
|
168
254
|
const template = exportAgentRuntimeProfileTemplate(homeDirectory, templateId, targetPath);
|
|
169
|
-
ctx.print(`Agent starter template exported: ${template.id}\n path
|
|
255
|
+
ctx.print(`Agent starter template exported: ${template.id}\n path ${template.path ?? targetPath}\n edit it, then import it with /agent-profile template import <path> --yes`);
|
|
170
256
|
return;
|
|
171
257
|
}
|
|
172
258
|
if (mode === 'import') {
|
|
@@ -181,7 +267,7 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
181
267
|
}
|
|
182
268
|
const sourcePath = shellPaths.resolveWorkspacePath(pathArg);
|
|
183
269
|
const template = importAgentRuntimeProfileTemplate(homeDirectory, sourcePath);
|
|
184
|
-
ctx.print(`Agent starter template imported: ${template.id}\n
|
|
270
|
+
ctx.print(`Agent starter template imported: ${template.id}\n origin ${formatAgentRecordSource(template.source).toLowerCase()}\n use /agent-profile create <name> --template ${template.id} --yes`);
|
|
185
271
|
return;
|
|
186
272
|
}
|
|
187
273
|
if (mode === 'from-discovered' || mode === 'import-discovered') {
|
|
@@ -205,10 +291,10 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
205
291
|
});
|
|
206
292
|
ctx.print([
|
|
207
293
|
`Agent starter template created from discovered behavior: ${template.id}`,
|
|
208
|
-
` persona
|
|
209
|
-
` skills
|
|
210
|
-
` routines
|
|
211
|
-
` use
|
|
294
|
+
` persona ${template.personaName}`,
|
|
295
|
+
` skills ${template.skillNames.join(', ')}`,
|
|
296
|
+
` routines ${template.routineNames.join(', ')}`,
|
|
297
|
+
` use /agent-profile create <name> --template ${template.id} --yes`,
|
|
212
298
|
].join('\n'));
|
|
213
299
|
return;
|
|
214
300
|
}
|
|
@@ -230,9 +316,9 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
230
316
|
const profile = createAgentRuntimeProfile(homeDirectory, name, { templateId });
|
|
231
317
|
ctx.print([
|
|
232
318
|
`Agent profile created: ${profile.id}`,
|
|
233
|
-
` home
|
|
319
|
+
` home ${profile.homeDirectory}`,
|
|
234
320
|
profile.starterTemplateId ? ` starter: ${profile.starterTemplateId}` : '',
|
|
235
|
-
` launch
|
|
321
|
+
` launch goodvibes-agent --agent-profile ${profile.id}`,
|
|
236
322
|
].filter(Boolean).join('\n'));
|
|
237
323
|
return;
|
|
238
324
|
}
|
|
@@ -259,12 +345,12 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
259
345
|
});
|
|
260
346
|
ctx.print([
|
|
261
347
|
`Agent profile created from discovered behavior: ${created.profile.id}`,
|
|
262
|
-
` home
|
|
348
|
+
` home ${created.profile.homeDirectory}`,
|
|
263
349
|
` starter: ${created.template.id}`,
|
|
264
|
-
` persona
|
|
265
|
-
` skills
|
|
266
|
-
` routines
|
|
267
|
-
` launch
|
|
350
|
+
` persona ${created.template.personaName}`,
|
|
351
|
+
` skills ${created.template.skillNames.join(', ')}`,
|
|
352
|
+
` routines ${created.template.routineNames.join(', ')}`,
|
|
353
|
+
` launch goodvibes-agent --agent-profile ${created.profile.id}`,
|
|
268
354
|
].join('\n'));
|
|
269
355
|
return;
|
|
270
356
|
}
|
|
@@ -279,13 +365,16 @@ export function registerAgentRuntimeProfileRuntimeCommands(registry: CommandRegi
|
|
|
279
365
|
requireYesFlag(ctx, `delete Agent profile ${name}`, '/agent-profile delete <name> --yes');
|
|
280
366
|
return;
|
|
281
367
|
}
|
|
282
|
-
ctx.print(deleteAgentRuntimeProfile(homeDirectory, name) ? `Agent profile deleted: ${name}` : `Agent profile not found
|
|
368
|
+
ctx.print(deleteAgentRuntimeProfile(homeDirectory, name) ? `Agent profile deleted: ${name}` : `Agent profile not found ${name}`);
|
|
283
369
|
return;
|
|
284
370
|
}
|
|
285
371
|
|
|
286
|
-
ctx.print('Usage: /agent-profile [list|templates|guide|template show <id>|template export <id> <path> --yes|template import <path> --yes|create <name> [--template <id>] --yes|create-from-discovered <name> --yes|delete <name> --yes]');
|
|
372
|
+
ctx.print('Usage: /agent-profile [list|show <name>|default [<name>|clear] --yes|use <name> --yes|templates|guide|template show <id>|template export <id> <path> --yes|template import <path> --yes|create <name> [--template <id>] --yes|create-from-discovered <name> --yes|delete <name> --yes]');
|
|
287
373
|
} catch (error) {
|
|
288
|
-
ctx.print(
|
|
374
|
+
ctx.print([
|
|
375
|
+
'Error',
|
|
376
|
+
` message ${error instanceof Error ? error.message : String(error)}`,
|
|
377
|
+
].join('\n'));
|
|
289
378
|
}
|
|
290
379
|
},
|
|
291
380
|
});
|