@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.
Files changed (253) hide show
  1. package/CHANGELOG.md +13 -4
  2. package/README.md +35 -14
  3. package/bin/goodvibes-agent.ts +16 -2
  4. package/dist/package/main.js +176073 -170980
  5. package/docs/README.md +11 -5
  6. package/docs/channels-remote-and-api.md +50 -0
  7. package/docs/connected-host.md +3 -3
  8. package/docs/getting-started.md +29 -15
  9. package/docs/knowledge-artifacts-and-multimodal.md +91 -0
  10. package/docs/project-planning.md +79 -0
  11. package/docs/providers-and-routing.md +46 -0
  12. package/docs/release-and-publishing.md +44 -9
  13. package/docs/tools-and-commands.md +123 -0
  14. package/docs/voice-and-live-tts.md +51 -0
  15. package/package.json +2 -5
  16. package/src/agent/channel-delivery.ts +201 -0
  17. package/src/agent/media-generation.ts +159 -0
  18. package/src/agent/memory-prompt.ts +0 -1
  19. package/src/agent/note-registry.ts +329 -0
  20. package/src/agent/operator-actions.ts +343 -0
  21. package/src/agent/persona-registry.ts +15 -14
  22. package/src/agent/record-labels.ts +107 -0
  23. package/src/agent/reminder-schedule-format.ts +33 -24
  24. package/src/agent/reminder-schedule.ts +26 -25
  25. package/src/agent/routine-registry.ts +13 -12
  26. package/src/agent/routine-schedule-args.ts +2 -1
  27. package/src/agent/routine-schedule-format.ts +77 -53
  28. package/src/agent/routine-schedule-promotion.ts +34 -32
  29. package/src/agent/routine-schedule-receipts.ts +28 -26
  30. package/src/agent/runtime-profile-starters.ts +2 -2
  31. package/src/agent/runtime-profile.ts +18 -17
  32. package/src/agent/skill-registry.ts +25 -24
  33. package/src/cli/agent-knowledge-args.ts +5 -1
  34. package/src/cli/agent-knowledge-command.ts +39 -33
  35. package/src/cli/agent-knowledge-format.ts +80 -67
  36. package/src/cli/agent-knowledge-methods.ts +1 -1
  37. package/src/cli/agent-knowledge-runtime.ts +32 -26
  38. package/src/cli/bundle-command.ts +13 -8
  39. package/src/cli/config-overrides.ts +37 -36
  40. package/src/cli/external-runtime.ts +10 -4
  41. package/src/cli/help.ts +29 -11
  42. package/src/cli/local-library-command.ts +134 -68
  43. package/src/cli/management-commands.ts +98 -62
  44. package/src/cli/management.ts +52 -26
  45. package/src/cli/memory-command.ts +66 -32
  46. package/src/cli/parser.ts +37 -24
  47. package/src/cli/profiles-command.ts +52 -35
  48. package/src/cli/provider-auth-routes.ts +2 -1
  49. package/src/cli/routines-command.ts +44 -36
  50. package/src/cli/service-posture.ts +6 -6
  51. package/src/cli/status.ts +46 -121
  52. package/src/core/conversation-message-snapshot.ts +131 -0
  53. package/src/input/agent-workspace-activation.ts +33 -7
  54. package/src/input/agent-workspace-basic-command-editor-submission.ts +7 -3
  55. package/src/input/agent-workspace-basic-command-editors.ts +30 -10
  56. package/src/input/agent-workspace-categories.ts +276 -64
  57. package/src/input/agent-workspace-channel-command-editor-submission.ts +34 -0
  58. package/src/input/agent-workspace-channel-command-editors.ts +23 -5
  59. package/src/input/agent-workspace-channels.ts +35 -2
  60. package/src/input/agent-workspace-command-editor.ts +18 -2
  61. package/src/input/agent-workspace-config-reader.ts +16 -0
  62. package/src/input/agent-workspace-delegation-editor-submission.ts +1 -1
  63. package/src/input/agent-workspace-editors.ts +140 -2
  64. package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
  65. package/src/input/agent-workspace-learned-behavior.ts +2 -2
  66. package/src/input/agent-workspace-library-command-editor-submission.ts +1 -1
  67. package/src/input/agent-workspace-library-command-editors.ts +2 -2
  68. package/src/input/agent-workspace-local-operations.ts +218 -0
  69. package/src/input/agent-workspace-local-selection.ts +75 -0
  70. package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
  71. package/src/input/agent-workspace-media-command-editors.ts +27 -0
  72. package/src/input/agent-workspace-memory-command-editors.ts +1 -1
  73. package/src/input/agent-workspace-memory-editor.ts +2 -2
  74. package/src/input/agent-workspace-navigation.ts +38 -2
  75. package/src/input/agent-workspace-notify-editor-submission.ts +16 -2
  76. package/src/input/agent-workspace-operations-command-editor-submission.ts +63 -1
  77. package/src/input/agent-workspace-operations-command-editors.ts +80 -3
  78. package/src/input/agent-workspace-panel-route.ts +43 -0
  79. package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
  80. package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
  81. package/src/input/agent-workspace-search.ts +169 -0
  82. package/src/input/agent-workspace-setup.ts +22 -11
  83. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +6 -6
  84. package/src/input/agent-workspace-skill-bundle-command-editors.ts +10 -10
  85. package/src/input/agent-workspace-snapshot.ts +112 -13
  86. package/src/input/agent-workspace-task-command-editors.ts +4 -4
  87. package/src/input/agent-workspace-token.ts +18 -2
  88. package/src/input/agent-workspace-types.ts +92 -4
  89. package/src/input/agent-workspace-voice-media.ts +3 -6
  90. package/src/input/agent-workspace-web-research-editor.ts +104 -0
  91. package/src/input/agent-workspace.ts +136 -208
  92. package/src/input/command-registry.ts +4 -1
  93. package/src/input/commands/agent-runtime-profile-runtime.ts +45 -41
  94. package/src/input/commands/agent-skills-runtime.ts +83 -70
  95. package/src/input/commands/agent-workspace-runtime.ts +23 -7
  96. package/src/input/commands/brief-runtime.ts +25 -24
  97. package/src/input/commands/channels-runtime.ts +145 -31
  98. package/src/input/commands/delegation-runtime.ts +29 -23
  99. package/src/input/commands/experience-runtime.ts +6 -4
  100. package/src/input/commands/guidance-runtime.ts +4 -4
  101. package/src/input/commands/health-runtime.ts +140 -115
  102. package/src/input/commands/knowledge.ts +57 -56
  103. package/src/input/commands/local-provider-runtime.ts +36 -18
  104. package/src/input/commands/local-runtime.ts +138 -16
  105. package/src/input/commands/local-setup-review.ts +7 -7
  106. package/src/input/commands/mcp-runtime.ts +56 -35
  107. package/src/input/commands/notify-runtime.ts +38 -9
  108. package/src/input/commands/operator-actions-runtime.ts +138 -0
  109. package/src/input/commands/operator-runtime.ts +6 -17
  110. package/src/input/commands/personas-runtime.ts +45 -30
  111. package/src/input/commands/planning-runtime.ts +1 -1
  112. package/src/input/commands/platform-access-runtime.ts +29 -29
  113. package/src/input/commands/provider-accounts-runtime.ts +60 -39
  114. package/src/input/commands/qrcode-runtime.ts +45 -6
  115. package/src/input/commands/recall-bundle.ts +11 -11
  116. package/src/input/commands/recall-capture.ts +13 -11
  117. package/src/input/commands/recall-query.ts +29 -21
  118. package/src/input/commands/recall-review.ts +2 -1
  119. package/src/input/commands/routines-runtime.ts +59 -43
  120. package/src/input/commands/schedule-runtime.ts +33 -20
  121. package/src/input/commands/security-runtime.ts +4 -4
  122. package/src/input/commands/session-content.ts +80 -78
  123. package/src/input/commands/session-workflow.ts +132 -93
  124. package/src/input/commands/session.ts +3 -174
  125. package/src/input/commands/shell-core.ts +32 -17
  126. package/src/input/commands/subscription-runtime.ts +53 -179
  127. package/src/input/commands/tasks-runtime.ts +20 -20
  128. package/src/input/commands/work-plan-runtime.ts +33 -8
  129. package/src/input/commands.ts +2 -2
  130. package/src/input/feed-context-factory.ts +2 -1
  131. package/src/input/file-picker.ts +3 -2
  132. package/src/input/handler-command-route.ts +4 -7
  133. package/src/input/handler-content-actions.ts +89 -1
  134. package/src/input/handler-feed-routes.ts +19 -12
  135. package/src/input/handler-feed.ts +6 -3
  136. package/src/input/handler-interactions.ts +7 -5
  137. package/src/input/handler-modal-stack.ts +3 -3
  138. package/src/input/handler-onboarding.ts +24 -80
  139. package/src/input/handler-shortcuts.ts +15 -4
  140. package/src/input/handler.ts +47 -17
  141. package/src/input/input-history.ts +5 -6
  142. package/src/input/keybindings.ts +22 -11
  143. package/src/input/onboarding/onboarding-wizard-apply.ts +13 -0
  144. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
  145. package/src/input/onboarding/onboarding-wizard-operator-steps.ts +147 -57
  146. package/src/input/onboarding/onboarding-wizard-steps.ts +46 -29
  147. package/src/input/onboarding/onboarding-wizard-types.ts +3 -1
  148. package/src/input/onboarding/onboarding-wizard.ts +68 -0
  149. package/src/input/profile-picker-modal.ts +31 -12
  150. package/src/input/session-picker-modal.ts +21 -4
  151. package/src/input/settings-modal-behavior.ts +0 -3
  152. package/src/input/settings-modal-subscriptions.ts +3 -3
  153. package/src/input/settings-modal-types.ts +2 -13
  154. package/src/input/settings-modal.ts +6 -52
  155. package/src/input/submission-intent.ts +0 -1
  156. package/src/input/submission-router.ts +3 -3
  157. package/src/main.ts +18 -8
  158. package/src/panels/approval-panel.ts +8 -8
  159. package/src/panels/automation-control-panel.ts +2 -2
  160. package/src/panels/base-panel.ts +1 -1
  161. package/src/panels/builtin/agent.ts +1 -1
  162. package/src/panels/builtin/operations.ts +1 -10
  163. package/src/panels/builtin/session.ts +9 -9
  164. package/src/panels/builtin/shared.ts +2 -2
  165. package/src/panels/cost-tracker-panel.ts +1 -1
  166. package/src/panels/docs-panel.ts +5 -3
  167. package/src/panels/index.ts +0 -1
  168. package/src/panels/knowledge-panel.ts +6 -5
  169. package/src/panels/memory-panel.ts +7 -6
  170. package/src/panels/panel-list-panel.ts +36 -80
  171. package/src/panels/project-planning-panel.ts +18 -11
  172. package/src/panels/provider-account-snapshot.ts +51 -25
  173. package/src/panels/provider-accounts-panel.ts +33 -18
  174. package/src/panels/provider-health-domains.ts +45 -4
  175. package/src/panels/provider-health-panel.ts +5 -4
  176. package/src/panels/qr-panel.ts +1 -1
  177. package/src/panels/schedule-panel.ts +9 -17
  178. package/src/panels/security-panel.ts +8 -8
  179. package/src/panels/session-browser-panel.ts +10 -10
  180. package/src/panels/subscription-panel.ts +3 -3
  181. package/src/panels/system-messages-panel.ts +1 -1
  182. package/src/panels/tasks-panel.ts +20 -13
  183. package/src/panels/tool-inspector-panel.ts +19 -12
  184. package/src/panels/work-plan-panel.ts +5 -5
  185. package/src/planning/project-planning-coordinator.ts +1 -1
  186. package/src/provider-auth-route-display.ts +9 -0
  187. package/src/renderer/agent-workspace-style.ts +34 -0
  188. package/src/renderer/agent-workspace.ts +228 -52
  189. package/src/renderer/autocomplete-overlay.ts +25 -6
  190. package/src/renderer/bookmark-modal.ts +19 -4
  191. package/src/renderer/buffer.ts +4 -2
  192. package/src/renderer/context-inspector.ts +50 -13
  193. package/src/renderer/diff.ts +1 -1
  194. package/src/renderer/file-picker-overlay.ts +19 -6
  195. package/src/renderer/help-overlay.ts +106 -33
  196. package/src/renderer/history-search-overlay.ts +19 -4
  197. package/src/renderer/live-tail-modal.ts +27 -5
  198. package/src/renderer/mcp-workspace.ts +164 -50
  199. package/src/renderer/model-picker-overlay.ts +58 -2
  200. package/src/renderer/model-workspace.ts +104 -20
  201. package/src/renderer/process-modal.ts +27 -6
  202. package/src/renderer/profile-picker-modal.ts +20 -4
  203. package/src/renderer/search-overlay.ts +25 -5
  204. package/src/renderer/selection-modal-overlay.ts +46 -14
  205. package/src/renderer/session-picker-modal.ts +18 -1
  206. package/src/renderer/settings-modal-helpers.ts +2 -40
  207. package/src/renderer/settings-modal.ts +83 -50
  208. package/src/renderer/tool-call.ts +20 -11
  209. package/src/runtime/agent-runtime-events.ts +6 -6
  210. package/src/runtime/bootstrap-command-context.ts +7 -1
  211. package/src/runtime/bootstrap-command-parts.ts +9 -7
  212. package/src/runtime/bootstrap-core.ts +19 -1
  213. package/src/runtime/bootstrap-hook-bridge.ts +7 -18
  214. package/src/runtime/bootstrap-shell.ts +4 -4
  215. package/src/runtime/bootstrap.ts +31 -22
  216. package/src/runtime/connected-host-auth.ts +7 -2
  217. package/src/runtime/diagnostics/panels/index.ts +2 -2
  218. package/src/runtime/diagnostics/panels/policy.ts +7 -7
  219. package/src/runtime/index.ts +2 -1
  220. package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
  221. package/src/runtime/onboarding/apply.ts +80 -79
  222. package/src/runtime/onboarding/derivation.ts +5 -8
  223. package/src/runtime/onboarding/snapshot.ts +0 -15
  224. package/src/runtime/onboarding/types.ts +8 -19
  225. package/src/runtime/onboarding/verify.ts +32 -10
  226. package/src/runtime/operator-token-cleanup.ts +1 -1
  227. package/src/runtime/services.ts +91 -22
  228. package/src/runtime/store/selectors/index.ts +3 -3
  229. package/src/runtime/store/state.ts +1 -4
  230. package/src/runtime/surface-feature-flags.ts +41 -6
  231. package/src/runtime/ui-read-models.ts +3 -4
  232. package/src/runtime/ui-services.ts +6 -6
  233. package/src/shell/blocking-input.ts +2 -1
  234. package/src/shell/ui-openers.ts +3 -13
  235. package/src/tools/agent-analysis-registry-policy.ts +0 -1
  236. package/src/tools/agent-channel-send-tool.ts +133 -0
  237. package/src/tools/agent-context-policy.ts +1 -1
  238. package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
  239. package/src/tools/agent-knowledge-tool.ts +170 -0
  240. package/src/tools/agent-local-registry-tool.ts +269 -69
  241. package/src/tools/agent-media-generate-tool.ts +133 -0
  242. package/src/tools/agent-notify-tool.ts +143 -0
  243. package/src/tools/agent-operator-action-tool.ts +137 -0
  244. package/src/tools/agent-operator-briefing-tool.ts +217 -0
  245. package/src/tools/agent-reminder-schedule-tool.ts +237 -0
  246. package/src/tools/agent-tool-policy-guard.ts +8 -8
  247. package/src/tools/agent-work-plan-tool.ts +256 -0
  248. package/src/version.ts +1 -1
  249. package/src/input/commands/policy-dispatch.ts +0 -339
  250. package/src/input/commands/policy.ts +0 -13
  251. package/src/panels/panel-picker.ts +0 -105
  252. package/src/panels/policy-panel.ts +0 -308
  253. package/src/renderer/panel-picker-overlay.ts +0 -202
@@ -1,4 +1,4 @@
1
- import type { ConfigKey, ConfigManager, ConfigSetting, GoodVibesConfig, PersistedFlagState } from '../config/index.ts';
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}: expected boolean.`);
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}: expected number.`);
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}: expected string.`);
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}: "${String(value)}". Allowed: ${setting.enumValues.join(', ')}`);
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}: ${String(value)}`);
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
- setNestedConfigValue(getRuntimeConfig(configManager), key, value);
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}: ${error.message}` : `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 config = getRuntimeConfig(configManager);
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
- config.featureFlags = flags;
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}: ${error.message}`
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}: ${error.message}`
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' | 'daemon_unavailable' | 'version_mismatch' | 'route_unavailable' | 'runtime_error';
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' : 'daemon_unavailable',
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 ? 'ok' : knowledge.status === 401 ? 'auth_required' : knowledge.status === 404 ? 'route_unavailable' : 'runtime_error',
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: 'daemon_unavailable',
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
- ' /personas, /skills Tune local Agent behavior',
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/Wiki routes',
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 --wrfc "fix the failing tests in ~/work/project"`,
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 spawn worker agents.',
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 Knowledge/Wiki or non-Agent knowledge segments.',
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/Wiki routes under /api/goodvibes-agent/knowledge. No default wiki or non-Agent fallback.',
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 Knowledge/Wiki or non-Agent knowledge.',
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 Knowledge/Wiki or non-Agent knowledge.',
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 [--wrfc] <build/fix/review task>'],
335
- summary: 'Create one shared-session task request for GoodVibes TUI. WRFC is requested only with --wrfc.',
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 --wrfc "implement the settings screen and review it"',
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];