@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConfigKey, ConfigManager, ConfigSetting,
|
|
1
|
+
import type { ConfigKey, ConfigManager, ConfigSetting, PersistedFlagState } from '../config/index.ts';
|
|
2
2
|
import { CONFIG_SCHEMA, ConfigError } from '../config/index.ts';
|
|
3
3
|
import type { GoodVibesCliCommand, GoodVibesCliFlags } from './types.ts';
|
|
4
4
|
import { RUNTIME_ENDPOINT_CONFIG_KEYS, hostModeForHostname } from './endpoints.ts';
|
|
@@ -8,6 +8,31 @@ const CONFIG_SCHEMA_BY_KEY = new Map<string, ConfigSetting>(
|
|
|
8
8
|
CONFIG_SCHEMA.map((setting) => [setting.key, setting]),
|
|
9
9
|
);
|
|
10
10
|
|
|
11
|
+
type RuntimeOnlyConfigManager = {
|
|
12
|
+
readonly config: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function mutableConfig(configManager: ConfigManager): Record<string, unknown> {
|
|
16
|
+
return (configManager as unknown as RuntimeOnlyConfigManager).config;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function setRuntimeOnlyConfigValue(configManager: ConfigManager, key: ConfigKey, value: unknown): void {
|
|
20
|
+
const parts = key.split('.');
|
|
21
|
+
let cursor = mutableConfig(configManager);
|
|
22
|
+
for (const part of parts.slice(0, -1)) {
|
|
23
|
+
const next = cursor[part];
|
|
24
|
+
if (!next || typeof next !== 'object' || Array.isArray(next)) {
|
|
25
|
+
throw new ConfigError(`Unknown config key: ${key}`);
|
|
26
|
+
}
|
|
27
|
+
cursor = next as Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
const leaf = parts.at(-1);
|
|
30
|
+
if (!leaf || !(leaf in cursor)) {
|
|
31
|
+
throw new ConfigError(`Unknown config key: ${key}`);
|
|
32
|
+
}
|
|
33
|
+
cursor[leaf] = value;
|
|
34
|
+
}
|
|
35
|
+
|
|
11
36
|
function parseConfigOverrideValue(value: string): unknown {
|
|
12
37
|
const trimmed = value.trim();
|
|
13
38
|
if (trimmed.length === 0) return '';
|
|
@@ -53,45 +78,22 @@ function parseRuntimeUrl(rawValue: string, source: string): { readonly host: str
|
|
|
53
78
|
return { host: url.hostname, port };
|
|
54
79
|
}
|
|
55
80
|
|
|
56
|
-
function getRuntimeConfig(configManager: ConfigManager): GoodVibesConfig {
|
|
57
|
-
const mutable = configManager as unknown as { config?: GoodVibesConfig };
|
|
58
|
-
if (!mutable.config || typeof mutable.config !== 'object') {
|
|
59
|
-
throw new ConfigError('ConfigManager runtime config is not available for CLI overrides.');
|
|
60
|
-
}
|
|
61
|
-
return mutable.config;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
81
|
function validateConfigValue(setting: ConfigSetting, value: unknown): void {
|
|
65
82
|
if (setting.type === 'boolean' && typeof value !== 'boolean') {
|
|
66
|
-
throw new ConfigError(`Invalid value for ${setting.key}
|
|
83
|
+
throw new ConfigError(`Invalid value for ${setting.key}. Expected boolean.`);
|
|
67
84
|
}
|
|
68
85
|
if (setting.type === 'number' && (typeof value !== 'number' || !Number.isFinite(value))) {
|
|
69
|
-
throw new ConfigError(`Invalid value for ${setting.key}
|
|
86
|
+
throw new ConfigError(`Invalid value for ${setting.key}. Expected number.`);
|
|
70
87
|
}
|
|
71
88
|
if (setting.type === 'string' && typeof value !== 'string') {
|
|
72
|
-
throw new ConfigError(`Invalid value for ${setting.key}
|
|
89
|
+
throw new ConfigError(`Invalid value for ${setting.key}. Expected string.`);
|
|
73
90
|
}
|
|
74
91
|
if (setting.type === 'enum' && setting.enumValues && !setting.enumValues.includes(String(value))) {
|
|
75
|
-
throw new ConfigError(`Invalid value for ${setting.key}
|
|
92
|
+
throw new ConfigError(`Invalid value for ${setting.key} "${String(value)}". Allowed values ${setting.enumValues.join(', ')}.`);
|
|
76
93
|
}
|
|
77
94
|
if (setting.validate && !setting.validate(value)) {
|
|
78
|
-
throw new ConfigError(`Invalid value for ${setting.key}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function setNestedConfigValue(config: GoodVibesConfig, key: ConfigKey, value: unknown): void {
|
|
83
|
-
const parts = key.split('.');
|
|
84
|
-
let cursor: unknown = config;
|
|
85
|
-
for (const part of parts.slice(0, -1)) {
|
|
86
|
-
if (cursor == null || typeof cursor !== 'object' || !(part in cursor)) {
|
|
87
|
-
throw new ConfigError(`Invalid config path: section '${part}' does not exist`);
|
|
88
|
-
}
|
|
89
|
-
cursor = (cursor as Record<string, unknown>)[part];
|
|
90
|
-
}
|
|
91
|
-
if (cursor == null || typeof cursor !== 'object') {
|
|
92
|
-
throw new ConfigError(`Invalid config path: section '${parts.slice(0, -1).join('.')}' does not exist`);
|
|
95
|
+
throw new ConfigError(`Invalid value for ${setting.key} ${String(value)}`);
|
|
93
96
|
}
|
|
94
|
-
(cursor as Record<string, unknown>)[parts[parts.length - 1]!] = value;
|
|
95
97
|
}
|
|
96
98
|
|
|
97
99
|
export function applyRuntimeConfigValue(configManager: ConfigManager, key: ConfigKey, value: unknown): void {
|
|
@@ -100,7 +102,7 @@ export function applyRuntimeConfigValue(configManager: ConfigManager, key: Confi
|
|
|
100
102
|
throw new ConfigError(`Unknown config key: ${key}`);
|
|
101
103
|
}
|
|
102
104
|
validateConfigValue(setting, value);
|
|
103
|
-
|
|
105
|
+
setRuntimeOnlyConfigValue(configManager, key, value);
|
|
104
106
|
}
|
|
105
107
|
|
|
106
108
|
export function applyRuntimeConfigOverrides(
|
|
@@ -119,7 +121,7 @@ export function applyRuntimeConfigOverrides(
|
|
|
119
121
|
try {
|
|
120
122
|
applyRuntimeConfigValue(configManager, key, parseConfigOverrideValue(rawValue));
|
|
121
123
|
} catch (error) {
|
|
122
|
-
errors.push(error instanceof Error ? `Invalid --config ${override}
|
|
124
|
+
errors.push(error instanceof Error ? `Invalid --config ${override}. ${error.message}` : `Invalid --config ${override}`);
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
127
|
return errors;
|
|
@@ -149,15 +151,14 @@ export function applyRuntimeFeatureFlagOverrides(
|
|
|
149
151
|
},
|
|
150
152
|
): void {
|
|
151
153
|
if (options.enableFeatures.length === 0 && options.disableFeatures.length === 0) return;
|
|
152
|
-
const
|
|
153
|
-
const flags = { ...config.featureFlags };
|
|
154
|
+
const flags = { ...configManager.getCategory('featureFlags') };
|
|
154
155
|
for (const feature of options.enableFeatures) {
|
|
155
156
|
flags[feature] = 'enabled' satisfies PersistedFlagState;
|
|
156
157
|
}
|
|
157
158
|
for (const feature of options.disableFeatures) {
|
|
158
159
|
flags[feature] = 'disabled' satisfies PersistedFlagState;
|
|
159
160
|
}
|
|
160
|
-
|
|
161
|
+
mutableConfig(configManager).featureFlags = flags;
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
export function applyRuntimeEndpointFlagOverrides(
|
|
@@ -174,7 +175,7 @@ export function applyRuntimeEndpointFlagOverrides(
|
|
|
174
175
|
applyRuntimeConfigValue(configManager, keys.host, flags.hostname);
|
|
175
176
|
} catch (error) {
|
|
176
177
|
errors.push(error instanceof Error
|
|
177
|
-
? `Invalid --hostname ${flags.hostname}
|
|
178
|
+
? `Invalid --hostname ${flags.hostname}. ${error.message}`
|
|
178
179
|
: `Invalid --hostname ${flags.hostname}`);
|
|
179
180
|
}
|
|
180
181
|
}
|
|
@@ -184,7 +185,7 @@ export function applyRuntimeEndpointFlagOverrides(
|
|
|
184
185
|
applyRuntimeConfigValue(configManager, keys.port, flags.port);
|
|
185
186
|
} catch (error) {
|
|
186
187
|
errors.push(error instanceof Error
|
|
187
|
-
? `Invalid --port ${flags.port}
|
|
188
|
+
? `Invalid --port ${flags.port}. ${error.message}`
|
|
188
189
|
: `Invalid --port ${flags.port}`);
|
|
189
190
|
}
|
|
190
191
|
}
|
package/src/cli/entrypoint.ts
CHANGED
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import { buildCliServicePosture } from './service-posture.ts';
|
|
26
26
|
import { inspectCliExternalRuntime } from './external-runtime.ts';
|
|
27
27
|
import { GOODVIBES_AGENT_SURFACE_ROOT } from '../config/surface.ts';
|
|
28
|
-
import { resolveAgentRuntimeProfileHome } from '../agent/runtime-profile.ts';
|
|
28
|
+
import { resolveAgentRuntimeProfileHome, resolveSelectedAgentRuntimeProfileHome } from '../agent/runtime-profile.ts';
|
|
29
29
|
|
|
30
30
|
type ShellEntrypointOwnership = {
|
|
31
31
|
readonly workingDirectory: string;
|
|
@@ -52,14 +52,20 @@ export type PreparedShellCliRuntime = {
|
|
|
52
52
|
readonly bootstrapHomeDirectory: string;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
function resolveShellEntrypointOwnership(
|
|
55
|
+
export function resolveShellEntrypointOwnership(
|
|
56
56
|
roots: ShellEntrypointRoots,
|
|
57
57
|
workingDirOverride?: string,
|
|
58
|
-
|
|
58
|
+
options: {
|
|
59
|
+
readonly agentProfile?: string;
|
|
60
|
+
readonly useSelectedProfile: boolean;
|
|
61
|
+
} = { useSelectedProfile: true },
|
|
59
62
|
): ShellEntrypointOwnership {
|
|
60
|
-
const
|
|
61
|
-
? resolveAgentRuntimeProfileHome(roots.homeDirectory, agentProfile)
|
|
62
|
-
:
|
|
63
|
+
const selectedProfile = options.agentProfile
|
|
64
|
+
? resolveAgentRuntimeProfileHome(roots.homeDirectory, options.agentProfile)
|
|
65
|
+
: options.useSelectedProfile
|
|
66
|
+
? resolveSelectedAgentRuntimeProfileHome(roots.homeDirectory)
|
|
67
|
+
: null;
|
|
68
|
+
const homeDirectory = selectedProfile?.homeDirectory ?? roots.homeDirectory;
|
|
63
69
|
return {
|
|
64
70
|
workingDirectory: workingDirOverride ?? roots.defaultWorkingDirectory,
|
|
65
71
|
homeDirectory,
|
|
@@ -103,7 +109,10 @@ export async function prepareShellCliRuntime(
|
|
|
103
109
|
ownership = resolveShellEntrypointOwnership(
|
|
104
110
|
roots,
|
|
105
111
|
cli.flags.workingDir ?? (cli.command === 'tui' ? cli.commandArgs[0] : undefined),
|
|
106
|
-
|
|
112
|
+
{
|
|
113
|
+
agentProfile: cli.command === 'profiles' ? undefined : cli.flags.agentProfile,
|
|
114
|
+
useSelectedProfile: cli.command !== 'profiles',
|
|
115
|
+
},
|
|
107
116
|
);
|
|
108
117
|
} catch (error) {
|
|
109
118
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -26,7 +26,7 @@ export interface CliExternalRuntimeSnapshot {
|
|
|
26
26
|
readonly agentKnowledge: {
|
|
27
27
|
readonly route: '/api/goodvibes-agent/knowledge/status';
|
|
28
28
|
readonly ready: boolean;
|
|
29
|
-
readonly kind: 'ok' | 'auth_required' | '
|
|
29
|
+
readonly kind: 'ok' | 'auth_required' | 'connected_host_unavailable' | 'version_mismatch' | 'connected_host_route_unavailable' | 'connected_host_error';
|
|
30
30
|
readonly statusCode: number | null;
|
|
31
31
|
};
|
|
32
32
|
readonly error: string | null;
|
|
@@ -112,7 +112,7 @@ export async function inspectCliExternalRuntime(
|
|
|
112
112
|
agentKnowledge: {
|
|
113
113
|
route,
|
|
114
114
|
ready: false,
|
|
115
|
-
kind: status.status === 401 ? 'auth_required' : '
|
|
115
|
+
kind: status.status === 401 ? 'auth_required' : 'connected_host_unavailable',
|
|
116
116
|
statusCode: status.status,
|
|
117
117
|
},
|
|
118
118
|
error: typeof status.body === 'string' ? status.body : `HTTP ${status.status}`,
|
|
@@ -169,7 +169,13 @@ export async function inspectCliExternalRuntime(
|
|
|
169
169
|
agentKnowledge: {
|
|
170
170
|
route,
|
|
171
171
|
ready: knowledge.ok,
|
|
172
|
-
kind: knowledge.ok
|
|
172
|
+
kind: knowledge.ok
|
|
173
|
+
? 'ok'
|
|
174
|
+
: knowledge.status === 401
|
|
175
|
+
? 'auth_required'
|
|
176
|
+
: knowledge.status === 404
|
|
177
|
+
? 'connected_host_route_unavailable'
|
|
178
|
+
: 'connected_host_error',
|
|
173
179
|
statusCode: knowledge.status,
|
|
174
180
|
},
|
|
175
181
|
error: knowledge.ok ? null : typeof knowledge.body === 'string' ? knowledge.body : `HTTP ${knowledge.status}`,
|
|
@@ -186,7 +192,7 @@ export async function inspectCliExternalRuntime(
|
|
|
186
192
|
agentKnowledge: {
|
|
187
193
|
route,
|
|
188
194
|
ready: false,
|
|
189
|
-
kind: '
|
|
195
|
+
kind: 'connected_host_unavailable',
|
|
190
196
|
statusCode: null,
|
|
191
197
|
},
|
|
192
198
|
error: summarizeError(error),
|
package/src/cli/help.ts
CHANGED
|
@@ -37,12 +37,13 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
37
37
|
' /setup Open setup/config flows',
|
|
38
38
|
' /model Choose provider and model',
|
|
39
39
|
' /knowledge Use isolated Agent Knowledge',
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
' /notes Open Agent-local scratchpad notes',
|
|
41
|
+
' /personas, /skills Tune Agent-local behavior',
|
|
42
|
+
' /routines Run local routines in the main conversation',
|
|
43
|
+
' /schedule remind Create confirmed reminders or inspect schedules',
|
|
44
|
+
' /delegate Explicitly hand build/fix/review work to GoodVibes TUI',
|
|
44
45
|
'',
|
|
45
|
-
'
|
|
46
|
+
'Scriptable mirrors:',
|
|
46
47
|
' run|exec [prompt] Run non-interactively with text/json/stream-json output',
|
|
47
48
|
' status Print config, provider, auth, and setup posture',
|
|
48
49
|
' doctor Print status plus setup warnings',
|
|
@@ -55,8 +56,8 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
55
56
|
' memory Manage Agent-owned durable memory records',
|
|
56
57
|
' routines Inspect local routines and explicitly promote one to a connected schedule',
|
|
57
58
|
' auth Inspect Agent auth posture and connection token state',
|
|
58
|
-
' compat Inspect Agent SDK pin, connected
|
|
59
|
-
' knowledge Use isolated Agent Knowledge
|
|
59
|
+
' compat Inspect Agent SDK pin, connected host version, and Agent Knowledge route readiness',
|
|
60
|
+
' knowledge Use isolated Agent Knowledge routes',
|
|
60
61
|
' ask|search Shortcuts for isolated Agent Knowledge ask/search',
|
|
61
62
|
' delegate Explicitly delegate build/fix/review work to GoodVibes TUI',
|
|
62
63
|
' subscription Start/finish/logout provider subscription sessions',
|
|
@@ -106,7 +107,7 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
106
107
|
` ${binary} profiles create household --template household --yes`,
|
|
107
108
|
` ${binary} --agent-profile household`,
|
|
108
109
|
` ${binary} personas create --name "Travel Planner" --description "Plan trips" --body "Compare options before booking"`,
|
|
109
|
-
` ${binary} skills create --name "Daily Brief" --description "Summarize operator state" --procedure "Review Agent Knowledge, work plans, approvals, and routines" --enabled`,
|
|
110
|
+
` ${binary} skills create --name "Daily Brief" --description "Summarize operator state" --procedure "Review Agent Knowledge, work plans, approvals, and routines" --requires-env GOODVIBES_AGENT_TOKEN --requires-command gh --enabled`,
|
|
110
111
|
` ${binary} memory add fact "Prefers concise morning briefings" --scope project --tags preference`,
|
|
111
112
|
` ${binary} memory search "morning briefings"`,
|
|
112
113
|
` ${binary} routines promote daily-operations-sweep --cron "0 9 * * *" --timezone America/Chicago --yes`,
|
|
@@ -115,7 +116,7 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
115
116
|
` ${binary} knowledge ask "What is GoodVibes Agent?"`,
|
|
116
117
|
` ${binary} ask "What is GoodVibes Agent?"`,
|
|
117
118
|
` ${binary} search "release checklist"`,
|
|
118
|
-
` ${binary} delegate --
|
|
119
|
+
` ${binary} delegate --review "fix the failing tests in ~/work/project"`,
|
|
119
120
|
` ${binary} subscription providers`,
|
|
120
121
|
` ${binary} subscription login openai start --open`,
|
|
121
122
|
` ${binary} pair`,
|
|
@@ -138,12 +139,12 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
138
139
|
},
|
|
139
140
|
setup: {
|
|
140
141
|
usage: ['setup', 'setup status', 'onboarding', 'onboarding status'],
|
|
141
|
-
summary: 'Open Agent setup, or inspect whether setup has already been
|
|
142
|
+
summary: 'Open Agent setup, or inspect whether setup has already been applied for this user.',
|
|
142
143
|
examples: ['setup', 'setup status', 'onboarding status'],
|
|
143
144
|
},
|
|
144
145
|
status: {
|
|
145
146
|
usage: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
146
|
-
summary: 'Print Agent config, provider, auth, connected-
|
|
147
|
+
summary: 'Print Agent config, provider, auth, connected-host state, and setup posture.',
|
|
147
148
|
examples: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
148
149
|
},
|
|
149
150
|
doctor: {
|
|
@@ -157,9 +158,9 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
157
158
|
examples: ['providers', 'providers inspect openai-subscriber', 'providers use openai openai:gpt-5.4'],
|
|
158
159
|
},
|
|
159
160
|
profiles: {
|
|
160
|
-
usage: ['profiles list', 'profiles templates', 'profiles templates from-discovered <id> --yes', 'profiles create-from-discovered <name> --yes', 'profiles templates export <id> <path> --yes', 'profiles templates import <path> --yes', 'profiles show <name>', 'profiles create <name> [--template <id>] --yes', 'profiles delete <name> --yes', '--agent-profile <name>'],
|
|
161
|
-
summary: 'Create and inspect isolated Agent profile homes, with starter templates for household, research, travel, operations, personal productivity, and local imported starters. A profile changes Agent-local config, sessions, memory, personas, skills, routines, and setup paths without changing connected GoodVibes
|
|
162
|
-
examples: ['profiles templates', 'profiles create-from-discovered research-desk --yes', 'profiles templates from-discovered research-desk --yes', 'profiles templates export research ./research-starter.json --yes', 'profiles templates import ./research-starter.json --yes', '
|
|
161
|
+
usage: ['profiles list', 'profiles default', 'profiles use <name> --yes', 'profiles default clear --yes', 'profiles templates', 'profiles templates from-discovered <id> --yes', 'profiles create-from-discovered <name> --yes', 'profiles templates export <id> <path> --yes', 'profiles templates import <path> --yes', 'profiles show <name>', 'profiles create <name> [--template <id>] --yes', 'profiles delete <name> --yes', '--agent-profile <name>'],
|
|
162
|
+
summary: 'Create and inspect isolated Agent profile homes, with starter templates for household, research, travel, operations, personal productivity, and local imported starters. A profile changes Agent-local config, sessions, memory, personas, skills, routines, and setup paths without changing the connected GoodVibes host.',
|
|
163
|
+
examples: ['profiles templates', 'profiles create household --template household --yes', 'profiles use household --yes', 'profiles default', 'profiles create-from-discovered research-desk --yes', 'profiles templates from-discovered research-desk --yes', 'profiles templates export research ./research-starter.json --yes', 'profiles templates import ./research-starter.json --yes', '--agent-profile household status'],
|
|
163
164
|
},
|
|
164
165
|
personas: {
|
|
165
166
|
usage: [
|
|
@@ -177,7 +178,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
177
178
|
'personas stale <id> <reason>',
|
|
178
179
|
'personas delete <id> --yes',
|
|
179
180
|
],
|
|
180
|
-
summary: 'Manage Agent-local personas for the serial main conversation. Personas do not
|
|
181
|
+
summary: 'Manage Agent-local personas for the serial main conversation. Personas do not create separate Agent jobs.',
|
|
181
182
|
examples: [
|
|
182
183
|
'personas list',
|
|
183
184
|
'personas discover',
|
|
@@ -192,25 +193,28 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
192
193
|
'skills list',
|
|
193
194
|
'skills enabled',
|
|
194
195
|
'skills active',
|
|
196
|
+
'skills attention',
|
|
195
197
|
'skills discover',
|
|
196
198
|
'skills import-discovered <name> [--enabled] --yes',
|
|
197
199
|
'skills search <query>',
|
|
198
200
|
'skills show <id>',
|
|
199
|
-
'skills create --name <name> --description <summary> --procedure <steps> [--tags a,b] [--triggers a,b] [--enabled]',
|
|
200
|
-
'skills update <id> [--name <name>] [--description <summary>] [--procedure <steps>] [--tags a,b] [--triggers a,b]',
|
|
201
|
+
'skills create --name <name> --description <summary> --procedure <steps> [--tags a,b] [--triggers a,b] [--requires-env A,B] [--requires-command gh,jq] [--enabled]',
|
|
202
|
+
'skills update <id> [--name <name>] [--description <summary>] [--procedure <steps>] [--tags a,b] [--triggers a,b] [--requires-env A,B] [--requires-command gh,jq]',
|
|
201
203
|
'skills enable <id>',
|
|
202
204
|
'skills disable <id>',
|
|
203
205
|
'skills review <id>',
|
|
204
206
|
'skills stale <id> <reason>',
|
|
205
207
|
'skills delete <id> --yes',
|
|
206
|
-
'skills bundle [list|enabled|show|create|update|enable|disable|review|stale|delete]',
|
|
208
|
+
'skills bundle [list|enabled|attention|show|create|update|enable|disable|review|stale|delete]',
|
|
207
209
|
],
|
|
208
210
|
summary: 'Manage reusable Agent-local procedures and skill bundles for the main conversation.',
|
|
209
211
|
examples: [
|
|
210
212
|
'skills list',
|
|
213
|
+
'skills attention',
|
|
214
|
+
'skills bundle attention',
|
|
211
215
|
'skills discover',
|
|
212
216
|
'skills import-discovered "Daily Brief" --enabled --yes',
|
|
213
|
-
'skills create --name "Daily Brief" --description "Summarize operator state" --procedure "Review Agent Knowledge, work plans, approvals, and routines" --enabled',
|
|
217
|
+
'skills create --name "Daily Brief" --description "Summarize operator state" --procedure "Review Agent Knowledge, work plans, approvals, and routines" --requires-env GOODVIBES_AGENT_TOKEN --requires-command gh --enabled',
|
|
214
218
|
'skills bundle create --name "Ops Pack" --description "Daily operations bundle" --skills daily-brief --enabled',
|
|
215
219
|
'skills delete daily-brief --yes',
|
|
216
220
|
],
|
|
@@ -233,7 +237,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
233
237
|
'memory handoff-inspect <path>',
|
|
234
238
|
'memory vector [status|doctor|rebuild]',
|
|
235
239
|
],
|
|
236
|
-
summary: 'Manage Agent-owned durable memory. This uses the Agent memory store only; it never falls back to default
|
|
240
|
+
summary: 'Manage Agent-owned durable memory. This uses the Agent memory store only; it never falls back to default knowledge or non-Agent knowledge segments.',
|
|
237
241
|
examples: [
|
|
238
242
|
'memory list',
|
|
239
243
|
'memory add fact "Prefers concise morning briefings" --scope project --tags preference',
|
|
@@ -247,20 +251,24 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
247
251
|
usage: [
|
|
248
252
|
'routines list',
|
|
249
253
|
'routines enabled',
|
|
254
|
+
'routines attention',
|
|
250
255
|
'routines discover',
|
|
251
256
|
'routines import-discovered <name> [--enabled] --yes',
|
|
252
257
|
'routines show <id>',
|
|
258
|
+
'routines create --name <name> --description <summary> --steps <steps> [--tags a,b] [--triggers a,b] [--requires-env A,B] [--requires-command gh,jq] [--enabled]',
|
|
253
259
|
'routines receipts',
|
|
254
260
|
'routines reconcile',
|
|
255
261
|
'routines receipt <receipt-id>',
|
|
256
262
|
'routines promote <id> (--cron <expr>|--every <interval>|--at <iso-time>) [--timezone <tz>] [--name <schedule-name>] [--provider <id>] [--model <model>] [--delivery-channel <channel[:route[:label]]>|--delivery-route <route[:label]>|--delivery-webhook <url>|--delivery-link <url>] [--disabled] --yes',
|
|
257
263
|
],
|
|
258
|
-
summary: 'Inspect and import Agent-local routines
|
|
264
|
+
summary: 'Inspect, create, and import Agent-local routines with setup readiness. The same routine workflow is available in the TUI through /routines and the Agent workspace. GoodVibes schedule promotion is explicit. Without --yes, promotion only prints the preview.',
|
|
259
265
|
examples: [
|
|
260
266
|
'routines list',
|
|
267
|
+
'routines attention',
|
|
261
268
|
'routines discover',
|
|
262
269
|
'routines import-discovered "Daily Brief" --enabled --yes',
|
|
263
270
|
'routines show daily-operations-sweep',
|
|
271
|
+
'routines create --name "Daily Sweep" --description "Review operator state" --steps "Check tasks, approvals, channels, and Agent Knowledge" --requires-env GOODVIBES_AGENT_TOKEN',
|
|
264
272
|
'routines receipts',
|
|
265
273
|
'routines reconcile',
|
|
266
274
|
'routines promote daily-operations-sweep --cron "0 9 * * *" --timezone America/Chicago --delivery-channel slack --yes',
|
|
@@ -298,7 +306,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
298
306
|
'knowledge import-browser-history [--browsers chrome,firefox] [--sources history,bookmark] --yes',
|
|
299
307
|
'knowledge reindex --yes',
|
|
300
308
|
],
|
|
301
|
-
summary: 'Call isolated Agent Knowledge
|
|
309
|
+
summary: 'Call isolated Agent Knowledge routes under /api/goodvibes-agent/knowledge. No default knowledge or non-Agent fallback.',
|
|
302
310
|
examples: [
|
|
303
311
|
'knowledge status',
|
|
304
312
|
'knowledge ask "What is GoodVibes Agent?"',
|
|
@@ -315,20 +323,20 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
315
323
|
},
|
|
316
324
|
ask: {
|
|
317
325
|
usage: ['ask <question> [--limit <n>] [--mode concise|standard|detailed]'],
|
|
318
|
-
summary: 'Shortcut for isolated Agent Knowledge ask. This never queries default
|
|
326
|
+
summary: 'Shortcut for isolated Agent Knowledge ask. This never queries default knowledge or non-Agent knowledge.',
|
|
319
327
|
examples: ['ask "What is GoodVibes Agent?"', 'ask "release checklist" --mode concise'],
|
|
320
328
|
},
|
|
321
329
|
search: {
|
|
322
330
|
usage: ['search <query> [--limit <n>]'],
|
|
323
|
-
summary: 'Shortcut for isolated Agent Knowledge search. This never queries default
|
|
331
|
+
summary: 'Shortcut for isolated Agent Knowledge search. This never queries default knowledge or non-Agent knowledge.',
|
|
324
332
|
examples: ['search "release checklist"', 'search "operator workspace" --limit 5'],
|
|
325
333
|
},
|
|
326
334
|
delegate: {
|
|
327
|
-
usage: ['delegate [--
|
|
328
|
-
summary: 'Create one shared-session task request for GoodVibes TUI.
|
|
335
|
+
usage: ['delegate [--review] <build/fix/review task>'],
|
|
336
|
+
summary: 'Create one shared-session task request for GoodVibes TUI. Delegated review is requested with --review.',
|
|
329
337
|
examples: [
|
|
330
338
|
'delegate "fix the failing tests in this repo"',
|
|
331
|
-
'delegate --
|
|
339
|
+
'delegate --review "implement the settings screen and review it"',
|
|
332
340
|
],
|
|
333
341
|
},
|
|
334
342
|
subscription: {
|
|
@@ -348,7 +356,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
348
356
|
},
|
|
349
357
|
tasks: {
|
|
350
358
|
usage: ['tasks list', 'tasks show <taskId>'],
|
|
351
|
-
summary: 'Inspect connected-
|
|
359
|
+
summary: 'Inspect connected-host task summaries. Agent blocks host-owned task submission; use run for one-shot work or delegate for explicit build/fix/review handoff.',
|
|
352
360
|
examples: ['tasks list', 'tasks show task-123', 'run "check provider readiness"', 'delegate "fix the failing tests"'],
|
|
353
361
|
},
|
|
354
362
|
bundle: {
|
|
@@ -370,7 +378,9 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
370
378
|
|
|
371
379
|
const HELP_ALIASES: Record<string, string> = {
|
|
372
380
|
exec: 'run',
|
|
381
|
+
e: 'run',
|
|
373
382
|
onboarding: 'setup',
|
|
383
|
+
compatibility: 'compat',
|
|
374
384
|
provider: 'providers',
|
|
375
385
|
model: 'models',
|
|
376
386
|
profile: 'profiles',
|
|
@@ -378,19 +388,34 @@ const HELP_ALIASES: Record<string, string> = {
|
|
|
378
388
|
skill: 'skills',
|
|
379
389
|
'agent-skills': 'skills',
|
|
380
390
|
memories: 'memory',
|
|
391
|
+
routine: 'routines',
|
|
392
|
+
know: 'knowledge',
|
|
393
|
+
kb: 'knowledge',
|
|
394
|
+
find: 'search',
|
|
395
|
+
build: 'delegate',
|
|
381
396
|
subscriptions: 'subscription',
|
|
382
397
|
secret: 'secrets',
|
|
383
398
|
session: 'sessions',
|
|
384
399
|
task: 'tasks',
|
|
400
|
+
bundles: 'bundle',
|
|
385
401
|
qrcode: 'pair',
|
|
386
402
|
qr: 'pair',
|
|
403
|
+
completions: 'completion',
|
|
387
404
|
};
|
|
388
405
|
|
|
406
|
+
export function listGoodVibesHelpTopics(): readonly string[] {
|
|
407
|
+
return Object.keys(COMMAND_HELP).sort();
|
|
408
|
+
}
|
|
409
|
+
|
|
389
410
|
function normalizeHelpTopic(topic: string): string {
|
|
390
411
|
const normalized = topic.trim().toLowerCase();
|
|
391
412
|
return HELP_ALIASES[normalized] ?? normalized;
|
|
392
413
|
}
|
|
393
414
|
|
|
415
|
+
export function hasGoodVibesCommandHelp(topic: string): boolean {
|
|
416
|
+
return COMMAND_HELP[normalizeHelpTopic(topic)] !== undefined;
|
|
417
|
+
}
|
|
418
|
+
|
|
394
419
|
export function renderGoodVibesCommandHelp(topic: string, binary = 'goodvibes-agent'): string {
|
|
395
420
|
const normalized = normalizeHelpTopic(topic);
|
|
396
421
|
const help = COMMAND_HELP[normalized];
|
|
@@ -402,7 +427,7 @@ export function renderGoodVibesCommandHelp(topic: string, binary = 'goodvibes-ag
|
|
|
402
427
|
].join('\n');
|
|
403
428
|
}
|
|
404
429
|
return [
|
|
405
|
-
`GoodVibes ${normalized}`,
|
|
430
|
+
`GoodVibes Agent ${normalized}`,
|
|
406
431
|
'',
|
|
407
432
|
help.summary,
|
|
408
433
|
'',
|