@pellux/goodvibes-agent 0.1.117 → 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 +13 -4
- package/README.md +35 -14
- package/bin/goodvibes-agent.ts +16 -2
- package/dist/package/main.js +176073 -170980
- package/docs/README.md +11 -5
- package/docs/channels-remote-and-api.md +50 -0
- package/docs/connected-host.md +3 -3
- package/docs/getting-started.md +29 -15
- 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 +44 -9
- package/docs/tools-and-commands.md +123 -0
- package/docs/voice-and-live-tts.md +51 -0
- package/package.json +2 -5
- 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-registry.ts +15 -14
- package/src/agent/record-labels.ts +107 -0
- package/src/agent/reminder-schedule-format.ts +33 -24
- package/src/agent/reminder-schedule.ts +26 -25
- package/src/agent/routine-registry.ts +13 -12
- 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 +34 -32
- package/src/agent/routine-schedule-receipts.ts +28 -26
- package/src/agent/runtime-profile-starters.ts +2 -2
- package/src/agent/runtime-profile.ts +18 -17
- package/src/agent/skill-registry.ts +25 -24
- package/src/cli/agent-knowledge-args.ts +5 -1
- package/src/cli/agent-knowledge-command.ts +39 -33
- 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 +13 -8
- package/src/cli/config-overrides.ts +37 -36
- package/src/cli/external-runtime.ts +10 -4
- package/src/cli/help.ts +29 -11
- package/src/cli/local-library-command.ts +134 -68
- package/src/cli/management-commands.ts +98 -62
- package/src/cli/management.ts +52 -26
- package/src/cli/memory-command.ts +66 -32
- package/src/cli/parser.ts +37 -24
- package/src/cli/profiles-command.ts +52 -35
- package/src/cli/provider-auth-routes.ts +2 -1
- package/src/cli/routines-command.ts +44 -36
- package/src/cli/service-posture.ts +6 -6
- package/src/cli/status.ts +46 -121
- package/src/core/conversation-message-snapshot.ts +131 -0
- package/src/input/agent-workspace-activation.ts +33 -7
- package/src/input/agent-workspace-basic-command-editor-submission.ts +7 -3
- package/src/input/agent-workspace-basic-command-editors.ts +30 -10
- package/src/input/agent-workspace-categories.ts +276 -64
- package/src/input/agent-workspace-channel-command-editor-submission.ts +34 -0
- package/src/input/agent-workspace-channel-command-editors.ts +23 -5
- package/src/input/agent-workspace-channels.ts +35 -2
- package/src/input/agent-workspace-command-editor.ts +18 -2
- package/src/input/agent-workspace-config-reader.ts +16 -0
- package/src/input/agent-workspace-delegation-editor-submission.ts +1 -1
- package/src/input/agent-workspace-editors.ts +140 -2
- package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
- package/src/input/agent-workspace-learned-behavior.ts +2 -2
- package/src/input/agent-workspace-library-command-editor-submission.ts +1 -1
- package/src/input/agent-workspace-library-command-editors.ts +2 -2
- 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-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-editors.ts +1 -1
- package/src/input/agent-workspace-memory-editor.ts +2 -2
- package/src/input/agent-workspace-navigation.ts +38 -2
- package/src/input/agent-workspace-notify-editor-submission.ts +16 -2
- package/src/input/agent-workspace-operations-command-editor-submission.ts +63 -1
- package/src/input/agent-workspace-operations-command-editors.ts +80 -3
- package/src/input/agent-workspace-panel-route.ts +43 -0
- package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
- 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-setup.ts +22 -11
- package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +6 -6
- package/src/input/agent-workspace-skill-bundle-command-editors.ts +10 -10
- package/src/input/agent-workspace-snapshot.ts +112 -13
- package/src/input/agent-workspace-task-command-editors.ts +4 -4
- package/src/input/agent-workspace-token.ts +18 -2
- package/src/input/agent-workspace-types.ts +92 -4
- package/src/input/agent-workspace-voice-media.ts +3 -6
- package/src/input/agent-workspace-web-research-editor.ts +104 -0
- package/src/input/agent-workspace.ts +136 -208
- package/src/input/command-registry.ts +4 -1
- package/src/input/commands/agent-runtime-profile-runtime.ts +45 -41
- package/src/input/commands/agent-skills-runtime.ts +83 -70
- package/src/input/commands/agent-workspace-runtime.ts +23 -7
- package/src/input/commands/brief-runtime.ts +25 -24
- package/src/input/commands/channels-runtime.ts +145 -31
- 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 +140 -115
- package/src/input/commands/knowledge.ts +57 -56
- package/src/input/commands/local-provider-runtime.ts +36 -18
- package/src/input/commands/local-runtime.ts +138 -16
- package/src/input/commands/local-setup-review.ts +7 -7
- package/src/input/commands/mcp-runtime.ts +56 -35
- 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 -17
- package/src/input/commands/personas-runtime.ts +45 -30
- package/src/input/commands/planning-runtime.ts +1 -1
- package/src/input/commands/platform-access-runtime.ts +29 -29
- package/src/input/commands/provider-accounts-runtime.ts +60 -39
- package/src/input/commands/qrcode-runtime.ts +45 -6
- 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 +59 -43
- package/src/input/commands/schedule-runtime.ts +33 -20
- package/src/input/commands/security-runtime.ts +4 -4
- package/src/input/commands/session-content.ts +80 -78
- package/src/input/commands/session-workflow.ts +132 -93
- package/src/input/commands/session.ts +3 -174
- package/src/input/commands/shell-core.ts +32 -17
- package/src/input/commands/subscription-runtime.ts +53 -179
- package/src/input/commands/tasks-runtime.ts +20 -20
- package/src/input/commands/work-plan-runtime.ts +33 -8
- package/src/input/commands.ts +2 -2
- package/src/input/feed-context-factory.ts +2 -1
- 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 -1
- package/src/input/handler-feed-routes.ts +19 -12
- package/src/input/handler-feed.ts +6 -3
- package/src/input/handler-interactions.ts +7 -5
- package/src/input/handler-modal-stack.ts +3 -3
- package/src/input/handler-onboarding.ts +24 -80
- package/src/input/handler-shortcuts.ts +15 -4
- package/src/input/handler.ts +47 -17
- package/src/input/input-history.ts +5 -6
- package/src/input/keybindings.ts +22 -11
- package/src/input/onboarding/onboarding-wizard-apply.ts +13 -0
- package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
- package/src/input/onboarding/onboarding-wizard-operator-steps.ts +147 -57
- package/src/input/onboarding/onboarding-wizard-steps.ts +46 -29
- package/src/input/onboarding/onboarding-wizard-types.ts +3 -1
- package/src/input/onboarding/onboarding-wizard.ts +68 -0
- package/src/input/profile-picker-modal.ts +31 -12
- package/src/input/session-picker-modal.ts +21 -4
- 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 +6 -52
- package/src/input/submission-intent.ts +0 -1
- package/src/input/submission-router.ts +3 -3
- package/src/main.ts +18 -8
- package/src/panels/approval-panel.ts +8 -8
- package/src/panels/automation-control-panel.ts +2 -2
- package/src/panels/base-panel.ts +1 -1
- package/src/panels/builtin/agent.ts +1 -1
- package/src/panels/builtin/operations.ts +1 -10
- package/src/panels/builtin/session.ts +9 -9
- package/src/panels/builtin/shared.ts +2 -2
- 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 +18 -11
- 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 +45 -4
- package/src/panels/provider-health-panel.ts +5 -4
- package/src/panels/qr-panel.ts +1 -1
- 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 +3 -3
- package/src/panels/system-messages-panel.ts +1 -1
- package/src/panels/tasks-panel.ts +20 -13
- 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 +1 -1
- package/src/provider-auth-route-display.ts +9 -0
- package/src/renderer/agent-workspace-style.ts +34 -0
- package/src/renderer/agent-workspace.ts +228 -52
- package/src/renderer/autocomplete-overlay.ts +25 -6
- 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 +106 -33
- package/src/renderer/history-search-overlay.ts +19 -4
- package/src/renderer/live-tail-modal.ts +27 -5
- package/src/renderer/mcp-workspace.ts +164 -50
- package/src/renderer/model-picker-overlay.ts +58 -2
- package/src/renderer/model-workspace.ts +104 -20
- package/src/renderer/process-modal.ts +27 -6
- package/src/renderer/profile-picker-modal.ts +20 -4
- 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 +83 -50
- package/src/renderer/tool-call.ts +20 -11
- package/src/runtime/agent-runtime-events.ts +6 -6
- package/src/runtime/bootstrap-command-context.ts +7 -1
- package/src/runtime/bootstrap-command-parts.ts +9 -7
- package/src/runtime/bootstrap-core.ts +19 -1
- package/src/runtime/bootstrap-hook-bridge.ts +7 -18
- package/src/runtime/bootstrap-shell.ts +4 -4
- package/src/runtime/bootstrap.ts +31 -22
- package/src/runtime/connected-host-auth.ts +7 -2
- package/src/runtime/diagnostics/panels/index.ts +2 -2
- package/src/runtime/diagnostics/panels/policy.ts +7 -7
- package/src/runtime/index.ts +2 -1
- package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
- package/src/runtime/onboarding/apply.ts +80 -79
- package/src/runtime/onboarding/derivation.ts +5 -8
- package/src/runtime/onboarding/snapshot.ts +0 -15
- package/src/runtime/onboarding/types.ts +8 -19
- package/src/runtime/onboarding/verify.ts +32 -10
- package/src/runtime/operator-token-cleanup.ts +1 -1
- package/src/runtime/services.ts +91 -22
- 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/ui-openers.ts +3 -13
- 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 +269 -69
- 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 +8 -8
- package/src/tools/agent-work-plan-tool.ts +256 -0
- package/src/version.ts +1 -1
- package/src/input/commands/policy-dispatch.ts +0 -339
- package/src/input/commands/policy.ts +0 -13
- 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
|
}
|
|
@@ -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,7 +37,8 @@ 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
|
-
' /
|
|
40
|
+
' /notes Open Agent-local scratchpad notes',
|
|
41
|
+
' /personas, /skills Tune Agent-local behavior',
|
|
41
42
|
' /routines Run local routines in the main conversation',
|
|
42
43
|
' /schedule remind Create confirmed reminders or inspect schedules',
|
|
43
44
|
' /delegate Explicitly hand build/fix/review work to GoodVibes TUI',
|
|
@@ -56,7 +57,7 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
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
59
|
' compat Inspect Agent SDK pin, connected host version, and Agent Knowledge route readiness',
|
|
59
|
-
' knowledge Use isolated Agent Knowledge
|
|
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',
|
|
@@ -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`,
|
|
@@ -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',
|
|
@@ -236,7 +237,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
236
237
|
'memory handoff-inspect <path>',
|
|
237
238
|
'memory vector [status|doctor|rebuild]',
|
|
238
239
|
],
|
|
239
|
-
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.',
|
|
240
241
|
examples: [
|
|
241
242
|
'memory list',
|
|
242
243
|
'memory add fact "Prefers concise morning briefings" --scope project --tags preference',
|
|
@@ -305,7 +306,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
305
306
|
'knowledge import-browser-history [--browsers chrome,firefox] [--sources history,bookmark] --yes',
|
|
306
307
|
'knowledge reindex --yes',
|
|
307
308
|
],
|
|
308
|
-
summary: 'Call isolated Agent Knowledge
|
|
309
|
+
summary: 'Call isolated Agent Knowledge routes under /api/goodvibes-agent/knowledge. No default knowledge or non-Agent fallback.',
|
|
309
310
|
examples: [
|
|
310
311
|
'knowledge status',
|
|
311
312
|
'knowledge ask "What is GoodVibes Agent?"',
|
|
@@ -322,20 +323,20 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
322
323
|
},
|
|
323
324
|
ask: {
|
|
324
325
|
usage: ['ask <question> [--limit <n>] [--mode concise|standard|detailed]'],
|
|
325
|
-
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.',
|
|
326
327
|
examples: ['ask "What is GoodVibes Agent?"', 'ask "release checklist" --mode concise'],
|
|
327
328
|
},
|
|
328
329
|
search: {
|
|
329
330
|
usage: ['search <query> [--limit <n>]'],
|
|
330
|
-
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.',
|
|
331
332
|
examples: ['search "release checklist"', 'search "operator workspace" --limit 5'],
|
|
332
333
|
},
|
|
333
334
|
delegate: {
|
|
334
|
-
usage: ['delegate [--
|
|
335
|
-
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.',
|
|
336
337
|
examples: [
|
|
337
338
|
'delegate "fix the failing tests in this repo"',
|
|
338
|
-
'delegate --
|
|
339
|
+
'delegate --review "implement the settings screen and review it"',
|
|
339
340
|
],
|
|
340
341
|
},
|
|
341
342
|
subscription: {
|
|
@@ -377,7 +378,9 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
377
378
|
|
|
378
379
|
const HELP_ALIASES: Record<string, string> = {
|
|
379
380
|
exec: 'run',
|
|
381
|
+
e: 'run',
|
|
380
382
|
onboarding: 'setup',
|
|
383
|
+
compatibility: 'compat',
|
|
381
384
|
provider: 'providers',
|
|
382
385
|
model: 'models',
|
|
383
386
|
profile: 'profiles',
|
|
@@ -385,19 +388,34 @@ const HELP_ALIASES: Record<string, string> = {
|
|
|
385
388
|
skill: 'skills',
|
|
386
389
|
'agent-skills': 'skills',
|
|
387
390
|
memories: 'memory',
|
|
391
|
+
routine: 'routines',
|
|
392
|
+
know: 'knowledge',
|
|
393
|
+
kb: 'knowledge',
|
|
394
|
+
find: 'search',
|
|
395
|
+
build: 'delegate',
|
|
388
396
|
subscriptions: 'subscription',
|
|
389
397
|
secret: 'secrets',
|
|
390
398
|
session: 'sessions',
|
|
391
399
|
task: 'tasks',
|
|
400
|
+
bundles: 'bundle',
|
|
392
401
|
qrcode: 'pair',
|
|
393
402
|
qr: 'pair',
|
|
403
|
+
completions: 'completion',
|
|
394
404
|
};
|
|
395
405
|
|
|
406
|
+
export function listGoodVibesHelpTopics(): readonly string[] {
|
|
407
|
+
return Object.keys(COMMAND_HELP).sort();
|
|
408
|
+
}
|
|
409
|
+
|
|
396
410
|
function normalizeHelpTopic(topic: string): string {
|
|
397
411
|
const normalized = topic.trim().toLowerCase();
|
|
398
412
|
return HELP_ALIASES[normalized] ?? normalized;
|
|
399
413
|
}
|
|
400
414
|
|
|
415
|
+
export function hasGoodVibesCommandHelp(topic: string): boolean {
|
|
416
|
+
return COMMAND_HELP[normalizeHelpTopic(topic)] !== undefined;
|
|
417
|
+
}
|
|
418
|
+
|
|
401
419
|
export function renderGoodVibesCommandHelp(topic: string, binary = 'goodvibes-agent'): string {
|
|
402
420
|
const normalized = normalizeHelpTopic(topic);
|
|
403
421
|
const help = COMMAND_HELP[normalized];
|