@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.
Files changed (285) hide show
  1. package/CHANGELOG.md +48 -661
  2. package/README.md +64 -57
  3. package/bin/goodvibes-agent.ts +16 -2
  4. package/dist/package/main.js +199180 -192185
  5. package/docs/README.md +15 -8
  6. package/docs/channels-remote-and-api.md +50 -0
  7. package/docs/connected-host.md +59 -0
  8. package/docs/getting-started.md +61 -50
  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 +48 -11
  13. package/docs/tools-and-commands.md +123 -0
  14. package/docs/voice-and-live-tts.md +51 -0
  15. package/package.json +3 -6
  16. package/src/agent/behavior-discovery-summary.ts +1 -3
  17. package/src/agent/channel-delivery.ts +201 -0
  18. package/src/agent/media-generation.ts +159 -0
  19. package/src/agent/memory-prompt.ts +0 -1
  20. package/src/agent/note-registry.ts +329 -0
  21. package/src/agent/operator-actions.ts +343 -0
  22. package/src/agent/persona-discovery.ts +1 -3
  23. package/src/agent/persona-registry.ts +19 -16
  24. package/src/agent/record-labels.ts +107 -0
  25. package/src/agent/reminder-schedule-format.ts +33 -24
  26. package/src/agent/reminder-schedule.ts +27 -26
  27. package/src/agent/routine-registry.ts +54 -14
  28. package/src/agent/routine-schedule-args.ts +2 -1
  29. package/src/agent/routine-schedule-format.ts +77 -53
  30. package/src/agent/routine-schedule-promotion.ts +35 -33
  31. package/src/agent/routine-schedule-receipts.ts +29 -27
  32. package/src/agent/runtime-profile-starters.ts +5 -5
  33. package/src/agent/runtime-profile.ts +91 -12
  34. package/src/agent/skill-registry.ts +210 -32
  35. package/src/cli/agent-knowledge-args.ts +5 -1
  36. package/src/cli/agent-knowledge-command.ts +40 -34
  37. package/src/cli/agent-knowledge-format.ts +80 -67
  38. package/src/cli/agent-knowledge-methods.ts +1 -1
  39. package/src/cli/agent-knowledge-runtime.ts +32 -26
  40. package/src/cli/bundle-command.ts +14 -9
  41. package/src/cli/config-overrides.ts +37 -36
  42. package/src/cli/entrypoint.ts +16 -7
  43. package/src/cli/external-runtime.ts +10 -4
  44. package/src/cli/help.ts +54 -29
  45. package/src/cli/local-library-command.ts +203 -83
  46. package/src/cli/management-commands.ts +105 -68
  47. package/src/cli/management.ts +55 -74
  48. package/src/cli/memory-command.ts +66 -32
  49. package/src/cli/parser.ts +37 -3
  50. package/src/cli/profiles-command.ts +166 -31
  51. package/src/cli/provider-auth-routes.ts +2 -1
  52. package/src/cli/routines-command.ts +176 -40
  53. package/src/cli/service-posture.ts +16 -16
  54. package/src/cli/status.ts +56 -135
  55. package/src/core/conversation-message-snapshot.ts +131 -0
  56. package/src/input/agent-workspace-access-command-editor-submission.ts +149 -0
  57. package/src/input/agent-workspace-access-command-editors.ts +170 -0
  58. package/src/input/agent-workspace-activation.ts +35 -8
  59. package/src/input/agent-workspace-basic-command-editor-submission.ts +351 -94
  60. package/src/input/agent-workspace-basic-command-editors.ts +502 -9
  61. package/src/input/agent-workspace-categories.ts +423 -51
  62. package/src/input/agent-workspace-channel-command-editor-submission.ts +83 -0
  63. package/src/input/agent-workspace-channel-command-editors.ts +65 -0
  64. package/src/input/agent-workspace-channels.ts +35 -2
  65. package/src/input/agent-workspace-command-editor.ts +41 -3
  66. package/src/input/agent-workspace-config-reader.ts +16 -0
  67. package/src/input/agent-workspace-delegation-editor-submission.ts +55 -0
  68. package/src/input/agent-workspace-editors.ts +166 -1
  69. package/src/input/agent-workspace-knowledge-command-editor-submission.ts +132 -0
  70. package/src/input/agent-workspace-knowledge-command-editors.ts +110 -0
  71. package/src/input/agent-workspace-knowledge-query-editor.ts +1 -1
  72. package/src/input/agent-workspace-learned-behavior.ts +67 -0
  73. package/src/input/agent-workspace-library-command-editor-submission.ts +50 -0
  74. package/src/input/agent-workspace-library-command-editors.ts +35 -0
  75. package/src/input/agent-workspace-local-operations.ts +218 -0
  76. package/src/input/agent-workspace-local-selection.ts +75 -0
  77. package/src/input/agent-workspace-mcp-command-editor-submission.ts +95 -0
  78. package/src/input/agent-workspace-media-command-editor-submission.ts +62 -0
  79. package/src/input/agent-workspace-media-command-editors.ts +27 -0
  80. package/src/input/agent-workspace-memory-command-editor-submission.ts +232 -0
  81. package/src/input/agent-workspace-memory-command-editors.ts +180 -0
  82. package/src/input/agent-workspace-memory-editor.ts +2 -2
  83. package/src/input/agent-workspace-navigation.ts +81 -0
  84. package/src/input/agent-workspace-notify-editor-submission.ts +121 -0
  85. package/src/input/agent-workspace-operations-command-editor-submission.ts +208 -0
  86. package/src/input/agent-workspace-operations-command-editors.ts +196 -0
  87. package/src/input/agent-workspace-panel-route.ts +43 -0
  88. package/src/input/agent-workspace-provider-command-editor-submission.ts +155 -0
  89. package/src/input/agent-workspace-provider-command-editors.ts +93 -0
  90. package/src/input/agent-workspace-reminder-schedule-editor.ts +1 -1
  91. package/src/input/agent-workspace-requirements.ts +11 -0
  92. package/src/input/agent-workspace-routine-schedule-editor.ts +2 -2
  93. package/src/input/agent-workspace-search.ts +169 -0
  94. package/src/input/agent-workspace-secret-editor-submission.ts +153 -0
  95. package/src/input/agent-workspace-session-command-editor-submission.ts +199 -0
  96. package/src/input/agent-workspace-session-command-editors.ts +249 -0
  97. package/src/input/agent-workspace-setup.ts +37 -16
  98. package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +101 -0
  99. package/src/input/agent-workspace-skill-bundle-command-editors.ts +110 -0
  100. package/src/input/agent-workspace-snapshot.ts +162 -21
  101. package/src/input/agent-workspace-task-command-editor-submission.ts +61 -0
  102. package/src/input/agent-workspace-task-command-editors.ts +47 -0
  103. package/src/input/agent-workspace-token.ts +18 -2
  104. package/src/input/agent-workspace-types.ts +212 -4
  105. package/src/input/agent-workspace-voice-media.ts +4 -7
  106. package/src/input/agent-workspace-web-research-editor.ts +104 -0
  107. package/src/input/agent-workspace-workplan-editor-submission.ts +153 -0
  108. package/src/input/agent-workspace.ts +178 -240
  109. package/src/input/command-registry.ts +5 -2
  110. package/src/input/commands/agent-runtime-profile-runtime.ts +126 -37
  111. package/src/input/commands/agent-skills-runtime.ts +149 -72
  112. package/src/input/commands/agent-workspace-runtime.ts +23 -6
  113. package/src/input/commands/brief-runtime.ts +55 -25
  114. package/src/input/commands/channels-runtime.ts +147 -33
  115. package/src/input/commands/compat-runtime.ts +32 -0
  116. package/src/input/commands/delegation-runtime.ts +29 -23
  117. package/src/input/commands/experience-runtime.ts +6 -4
  118. package/src/input/commands/guidance-runtime.ts +4 -4
  119. package/src/input/commands/health-runtime.ts +149 -126
  120. package/src/input/commands/knowledge.ts +82 -60
  121. package/src/input/commands/local-provider-runtime.ts +43 -21
  122. package/src/input/commands/local-runtime.ts +138 -16
  123. package/src/input/commands/local-setup-review.ts +10 -20
  124. package/src/input/commands/mcp-runtime.ts +63 -46
  125. package/src/input/commands/notify-runtime.ts +38 -9
  126. package/src/input/commands/operator-actions-runtime.ts +138 -0
  127. package/src/input/commands/operator-runtime.ts +6 -76
  128. package/src/input/commands/personas-runtime.ts +46 -31
  129. package/src/input/commands/planning-runtime.ts +1 -1
  130. package/src/input/commands/platform-access-runtime.ts +35 -98
  131. package/src/input/commands/product-runtime.ts +2 -2
  132. package/src/input/commands/provider-accounts-runtime.ts +60 -39
  133. package/src/input/commands/qrcode-runtime.ts +50 -9
  134. package/src/input/commands/recall-bundle.ts +11 -11
  135. package/src/input/commands/recall-capture.ts +13 -11
  136. package/src/input/commands/recall-query.ts +29 -21
  137. package/src/input/commands/recall-review.ts +2 -1
  138. package/src/input/commands/routines-runtime.ts +99 -45
  139. package/src/input/commands/runtime-services.ts +1 -14
  140. package/src/input/commands/schedule-runtime.ts +33 -20
  141. package/src/input/commands/security-runtime.ts +6 -11
  142. package/src/input/commands/session-content.ts +80 -78
  143. package/src/input/commands/session-workflow.ts +134 -104
  144. package/src/input/commands/session.ts +3 -174
  145. package/src/input/commands/shell-core.ts +38 -17
  146. package/src/input/commands/subscription-runtime.ts +54 -185
  147. package/src/input/commands/support-bundle-runtime.ts +53 -0
  148. package/src/input/commands/tasks-runtime.ts +21 -21
  149. package/src/input/commands/work-plan-runtime.ts +33 -8
  150. package/src/input/commands.ts +6 -2
  151. package/src/input/feed-context-factory.ts +2 -2
  152. package/src/input/file-picker.ts +3 -2
  153. package/src/input/handler-command-route.ts +4 -7
  154. package/src/input/handler-content-actions.ts +89 -26
  155. package/src/input/handler-feed-routes.ts +19 -12
  156. package/src/input/handler-feed.ts +6 -5
  157. package/src/input/handler-interactions.ts +9 -36
  158. package/src/input/handler-modal-stack.ts +3 -3
  159. package/src/input/handler-onboarding.ts +52 -91
  160. package/src/input/handler-shortcuts.ts +16 -7
  161. package/src/input/handler.ts +50 -23
  162. package/src/input/input-history.ts +5 -6
  163. package/src/input/keybindings.ts +27 -16
  164. package/src/input/mcp-workspace.ts +90 -26
  165. package/src/input/onboarding/handler-onboarding-routes.ts +3 -1
  166. package/src/input/onboarding/onboarding-wizard-apply.ts +62 -0
  167. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -0
  168. package/src/input/onboarding/onboarding-wizard-helpers.ts +1 -1
  169. package/src/input/onboarding/onboarding-wizard-operator-steps.ts +223 -55
  170. package/src/input/onboarding/onboarding-wizard-steps.ts +59 -35
  171. package/src/input/onboarding/onboarding-wizard-types.ts +4 -1
  172. package/src/input/onboarding/onboarding-wizard.ts +87 -2
  173. package/src/input/profile-picker-modal.ts +31 -12
  174. package/src/input/session-picker-modal.ts +21 -4
  175. package/src/input/settings-modal-agent-policy.ts +6 -6
  176. package/src/input/settings-modal-behavior.ts +0 -3
  177. package/src/input/settings-modal-subscriptions.ts +3 -3
  178. package/src/input/settings-modal-types.ts +2 -13
  179. package/src/input/settings-modal.ts +20 -66
  180. package/src/input/submission-intent.ts +0 -1
  181. package/src/input/submission-router.ts +3 -3
  182. package/src/main.ts +18 -10
  183. package/src/panels/approval-panel.ts +8 -8
  184. package/src/panels/automation-control-panel.ts +4 -4
  185. package/src/panels/base-panel.ts +1 -1
  186. package/src/panels/builtin/agent.ts +1 -1
  187. package/src/panels/builtin/operations.ts +3 -12
  188. package/src/panels/builtin/session.ts +32 -24
  189. package/src/panels/builtin/shared.ts +7 -7
  190. package/src/panels/cost-tracker-panel.ts +1 -1
  191. package/src/panels/docs-panel.ts +5 -3
  192. package/src/panels/index.ts +0 -1
  193. package/src/panels/knowledge-panel.ts +6 -5
  194. package/src/panels/memory-panel.ts +7 -6
  195. package/src/panels/panel-list-panel.ts +36 -80
  196. package/src/panels/project-planning-panel.ts +19 -12
  197. package/src/panels/provider-account-snapshot.ts +51 -25
  198. package/src/panels/provider-accounts-panel.ts +33 -18
  199. package/src/panels/provider-health-domains.ts +48 -7
  200. package/src/panels/provider-health-panel.ts +5 -4
  201. package/src/panels/qr-panel.ts +44 -20
  202. package/src/panels/schedule-panel.ts +9 -17
  203. package/src/panels/security-panel.ts +8 -8
  204. package/src/panels/session-browser-panel.ts +10 -10
  205. package/src/panels/subscription-panel.ts +6 -6
  206. package/src/panels/system-messages-panel.ts +3 -3
  207. package/src/panels/tasks-panel.ts +21 -14
  208. package/src/panels/tool-inspector-panel.ts +19 -12
  209. package/src/panels/work-plan-panel.ts +5 -5
  210. package/src/planning/project-planning-coordinator.ts +3 -3
  211. package/src/provider-auth-route-display.ts +9 -0
  212. package/src/renderer/agent-workspace-style.ts +34 -0
  213. package/src/renderer/agent-workspace.ts +254 -57
  214. package/src/renderer/autocomplete-overlay.ts +25 -6
  215. package/src/renderer/block-actions.ts +1 -3
  216. package/src/renderer/bookmark-modal.ts +19 -4
  217. package/src/renderer/buffer.ts +4 -2
  218. package/src/renderer/context-inspector.ts +50 -13
  219. package/src/renderer/diff.ts +1 -1
  220. package/src/renderer/file-picker-overlay.ts +19 -6
  221. package/src/renderer/help-overlay.ts +112 -34
  222. package/src/renderer/history-search-overlay.ts +19 -4
  223. package/src/renderer/live-tail-modal.ts +27 -5
  224. package/src/renderer/mcp-workspace.ts +176 -43
  225. package/src/renderer/model-picker-overlay.ts +58 -3
  226. package/src/renderer/model-workspace.ts +104 -22
  227. package/src/renderer/onboarding/onboarding-wizard.ts +20 -4
  228. package/src/renderer/process-modal.ts +27 -6
  229. package/src/renderer/profile-picker-modal.ts +21 -5
  230. package/src/renderer/search-overlay.ts +25 -5
  231. package/src/renderer/selection-modal-overlay.ts +46 -14
  232. package/src/renderer/session-picker-modal.ts +18 -1
  233. package/src/renderer/settings-modal-helpers.ts +2 -40
  234. package/src/renderer/settings-modal.ts +88 -55
  235. package/src/renderer/system-message.ts +1 -1
  236. package/src/renderer/tool-call.ts +20 -11
  237. package/src/runtime/agent-runtime-events.ts +129 -0
  238. package/src/runtime/bootstrap-command-context.ts +7 -1
  239. package/src/runtime/bootstrap-command-parts.ts +11 -8
  240. package/src/runtime/bootstrap-core.ts +23 -65
  241. package/src/runtime/bootstrap-hook-bridge.ts +7 -18
  242. package/src/runtime/bootstrap-shell.ts +46 -8
  243. package/src/runtime/bootstrap.ts +36 -46
  244. package/src/runtime/connected-host-auth.ts +47 -0
  245. package/src/runtime/diagnostics/panels/index.ts +2 -2
  246. package/src/runtime/diagnostics/panels/panel-resources.ts +1 -1
  247. package/src/runtime/diagnostics/panels/policy.ts +7 -7
  248. package/src/runtime/index.ts +2 -5
  249. package/src/runtime/onboarding/apply-file-helpers.ts +66 -0
  250. package/src/runtime/onboarding/apply.ts +288 -74
  251. package/src/runtime/onboarding/derivation.ts +10 -13
  252. package/src/runtime/onboarding/snapshot.ts +2 -17
  253. package/src/runtime/onboarding/types.ts +34 -20
  254. package/src/runtime/onboarding/verify.ts +105 -4
  255. package/src/runtime/operator-token-cleanup.ts +3 -3
  256. package/src/runtime/services.ts +95 -11
  257. package/src/runtime/store/selectors/index.ts +3 -3
  258. package/src/runtime/store/state.ts +1 -4
  259. package/src/runtime/surface-feature-flags.ts +41 -6
  260. package/src/runtime/ui-read-models.ts +3 -4
  261. package/src/runtime/ui-services.ts +6 -6
  262. package/src/shell/blocking-input.ts +2 -1
  263. package/src/shell/service-settings-sync.ts +7 -7
  264. package/src/shell/ui-openers.ts +17 -38
  265. package/src/tools/agent-analysis-registry-policy.ts +0 -1
  266. package/src/tools/agent-channel-send-tool.ts +133 -0
  267. package/src/tools/agent-context-policy.ts +1 -1
  268. package/src/tools/agent-knowledge-ingest-tool.ts +405 -0
  269. package/src/tools/agent-knowledge-tool.ts +170 -0
  270. package/src/tools/agent-local-registry-tool.ts +279 -73
  271. package/src/tools/agent-media-generate-tool.ts +133 -0
  272. package/src/tools/agent-notify-tool.ts +143 -0
  273. package/src/tools/agent-operator-action-tool.ts +137 -0
  274. package/src/tools/agent-operator-briefing-tool.ts +217 -0
  275. package/src/tools/agent-reminder-schedule-tool.ts +237 -0
  276. package/src/tools/agent-tool-policy-guard.ts +13 -15
  277. package/src/tools/agent-work-plan-tool.ts +256 -0
  278. package/src/version.ts +1 -1
  279. package/docs/connected-services.md +0 -51
  280. package/src/cli/package-verification.ts +0 -274
  281. package/src/input/commands/policy-dispatch.ts +0 -339
  282. package/src/input/commands/policy.ts +0 -17
  283. package/src/panels/panel-picker.ts +0 -105
  284. package/src/panels/policy-panel.ts +0 -308
  285. package/src/renderer/panel-picker-overlay.ts +0 -202
@@ -2,13 +2,12 @@
2
2
  * /session command handler — Multi-session Orchestration.
3
3
  *
4
4
  * Implements read-only session graph inspection plus session continuity commands.
5
- * Copied local task graph mutation commands are blocked in Agent; explicit
6
- * build/fix/review handoff must use `/delegate` so GoodVibes TUI owns execution.
5
+ * Local task graph mutation commands are blocked in Agent; explicit build/fix/review
6
+ * handoff must use `/delegate` so GoodVibes TUI owns execution.
7
7
  */
8
8
 
9
9
  import type { SlashCommand, CommandContext } from '../command-registry.ts';
10
- import type { CancellationScope, CrossSessionTaskRef } from '@pellux/goodvibes-sdk/platform/sessions';
11
- import { VALID_SCOPES } from '@pellux/goodvibes-sdk/platform/sessions';
10
+ import type { CrossSessionTaskRef } from '@pellux/goodvibes-sdk/platform/sessions';
12
11
  import { handleSessionWorkflowCommand } from './session-workflow.ts';
13
12
  import { requireSessionOrchestration } from './runtime-services.ts';
14
13
 
@@ -24,21 +23,6 @@ function flagValue(args: string[], flag: string): string | undefined {
24
23
  return args[idx + 1];
25
24
  }
26
25
 
27
- /**
28
- * Parse a cross-session task ref from a string of the form
29
- * `<sessionId>:<taskId>` or just `<taskId>` (uses currentSessionId as owner).
30
- */
31
- function parseRef(
32
- raw: string,
33
- currentSessionId: string,
34
- ): { sessionId: string; taskId: string } {
35
- const parts = raw.split(':', 2);
36
- if (parts.length === 2) {
37
- return { sessionId: parts[0]!, taskId: parts[1]! };
38
- }
39
- return { sessionId: currentSessionId, taskId: raw };
40
- }
41
-
42
26
  // ── Formatting helpers ────────────────────────────────────────────────────────
43
27
 
44
28
  /** Status badge for display. */
@@ -69,101 +53,6 @@ function printSessionGraphMutationBlocked(context: CommandContext): void {
69
53
  ].join('\n'));
70
54
  }
71
55
 
72
- // ── /session link-task ────────────────────────────────────────────────────────
73
-
74
- function handleLinkTask(args: string[], context: CommandContext): void {
75
- const taskId = args[0];
76
- if (!taskId) {
77
- context.print(
78
- '[session] Usage: /session link-task <taskId> [--session <sessionId>] ' +
79
- '[--depends-on <sessionId:taskId>] [--label <label>]',
80
- );
81
- return;
82
- }
83
-
84
- // Defense-in-depth: parser splits on whitespace but guard against future changes
85
- if (!taskId.trim()) {
86
- context.print('Error: taskId cannot be empty or whitespace.');
87
- return;
88
- }
89
-
90
- if (taskId.includes(':')) {
91
- context.print('Error: taskId cannot contain ":" — it conflicts with the composite key format.');
92
- return;
93
- }
94
-
95
- const sessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
96
- const dependsOnRaw = flagValue(args, '--depends-on');
97
- const label = flagValue(args, '--label');
98
-
99
- const orchestration = requireSessionOrchestration(context);
100
-
101
- const ref: CrossSessionTaskRef = {
102
- sessionId,
103
- taskId,
104
- title: label ?? taskId,
105
- status: 'queued',
106
- createdAt: Date.now(),
107
- updatedAt: Date.now(),
108
- label,
109
- };
110
-
111
- const dependsOn = dependsOnRaw ? parseRef(dependsOnRaw, sessionId) : undefined;
112
-
113
- const result = orchestration.linkTask(ref, dependsOn);
114
-
115
- if (!result.ok) {
116
- context.print(`[session] link-task failed: ${result.error}`);
117
- return;
118
- }
119
-
120
- context.print(
121
- `[session] Task linked: ${sessionId.slice(0, 8)}...:${taskId}` +
122
- (label ? ` [${label}]` : '') +
123
- (dependsOn ? ` → depends on ${dependsOnRaw}` : ''),
124
- );
125
- }
126
-
127
- // ── /session handoff ──────────────────────────────────────────────────────────
128
-
129
- function handleHandoff(args: string[], context: CommandContext): void {
130
- const taskId = args[0];
131
- const toSessionId = flagValue(args, '--to');
132
- const fromSessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
133
- const reason = flagValue(args, '--reason');
134
-
135
- if (!taskId || !toSessionId) {
136
- context.print(
137
- '[session] Usage: /session handoff <taskId> --to <sessionId> ' +
138
- '[--session <fromSessionId>] [--reason <reason>]',
139
- );
140
- return;
141
- }
142
-
143
- const orchestration = requireSessionOrchestration(context);
144
-
145
- const result = orchestration.initiateHandoff(
146
- { sessionId: fromSessionId, taskId },
147
- fromSessionId,
148
- toSessionId,
149
- reason,
150
- );
151
-
152
- if (!result.ok) {
153
- context.print(`[session] handoff failed: ${result.error}`);
154
- return;
155
- }
156
-
157
- context.print(
158
- `[session] Handoff initiated: ${taskId} (${fromSessionId.slice(0, 8)}...) → (${toSessionId.slice(0, 8)}...)` +
159
- (reason ? ` reason: ${reason}` : '') +
160
- `\n[session] handoffId: ${result.handoffId}`,
161
- );
162
- context.print(
163
- '[session] The task is now blocked pending acknowledgement from the destination session.',
164
- );
165
- }
166
-
167
56
  // ── /session graph ────────────────────────────────────────────────────────────
168
57
 
169
58
  function handleGraph(args: string[], context: CommandContext): void {
@@ -251,66 +140,6 @@ function handleGraph(args: string[], context: CommandContext): void {
251
140
  context.print(lines.join('\n'));
252
141
  }
253
142
 
254
- // ── /session cancel ───────────────────────────────────────────────────────────
255
-
256
- function handleCancel(args: string[], context: CommandContext): void {
257
- const scopeRaw = flagValue(args, '--scope');
258
- if (scopeRaw && !VALID_SCOPES.includes(scopeRaw as CancellationScope)) {
259
- context.print(`Invalid --scope: "${scopeRaw}". Valid: ${VALID_SCOPES.join(', ')}`);
260
- return;
261
- }
262
- const scope: CancellationScope = (scopeRaw as CancellationScope) ?? 'task';
263
- const sessionId = flagValue(args, '--session') ?? context.session.runtime.sessionId;
264
- const reason = flagValue(args, '--reason');
265
-
266
- // For session scope, taskId is not required
267
- const taskId = scope === 'session' ? undefined : args[0];
268
-
269
- if (scope !== 'session' && !taskId) {
270
- context.print(
271
- '[session] Usage: /session cancel <taskId> [--scope task|subtree|session] ' +
272
- '[--session <sessionId>] [--reason <reason>]\n' +
273
- ' --scope task Cancel only this task (default)\n' +
274
- ' --scope subtree Cancel this task and all tasks that transitively depend on it\n' +
275
- ' --scope session Cancel all tasks in the session',
276
- );
277
- return;
278
- }
279
-
280
- const orchestration = requireSessionOrchestration(context);
281
-
282
- const result = orchestration.cancel({
283
- sessionId,
284
- taskId,
285
- scope,
286
- reason,
287
- requestedAt: Date.now(),
288
- });
289
-
290
- if (!result.ok) {
291
- context.print(`[session] cancel failed: ${result.error}`);
292
- return;
293
- }
294
-
295
- const lines: string[] = [
296
- `[session] Cancelled ${result.cancelled.length} task${result.cancelled.length !== 1 ? 's' : ''} ` +
297
- `(scope=${scope}):`,
298
- ];
299
-
300
- for (const t of result.cancelled) {
301
- lines.push(` [x] ${t.sessionId.slice(0, 8)}...:${t.taskId.slice(0, 8)}... "${t.title}"`);
302
- }
303
-
304
- if (result.skipped.length > 0) {
305
- lines.push(` Skipped ${result.skipped.length} (already terminal):`);
306
- for (const s of result.skipped) {
307
- lines.push(` [-] ${s.sessionId.slice(0, 8)}...:${s.taskId.slice(0, 8)}... "${s.title}" (${s.reason})`);
308
- }
309
- }
310
-
311
- context.print(lines.join('\n'));
312
- }
313
-
314
143
  // ── Top-level command definition ───────────────────────────────────────────────
315
144
 
316
145
  /**
@@ -32,10 +32,17 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
32
32
  ctx.session.runtime.model = selected.registryKey;
33
33
  ctx.session.runtime.provider = selected.providerId;
34
34
  ctx.platform.configManager.set('provider.model', selected.registryKey);
35
- ctx.print(`Switched to model: ${selected.displayName} (${selected.providerId})`);
35
+ ctx.print([
36
+ 'Switched model',
37
+ ` model ${selected.displayName}`,
38
+ ` provider ${selected.providerId}`,
39
+ ].join('\n'));
36
40
  void providerApi.recordModelUsage(selected.registryKey).catch((err) => { logger.debug('model usage record failed', { err }); });
37
41
  } catch (e) {
38
- ctx.print(`Error: ${summarizeError(e)}`);
42
+ ctx.print([
43
+ 'Error',
44
+ ` message ${summarizeError(e)}`,
45
+ ].join('\n'));
39
46
  }
40
47
  }
41
48
  },
@@ -114,17 +121,23 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
114
121
  handler(_args, ctx) {
115
122
  if (ctx.openSelection) {
116
123
  const items: SelectionItem[] = [
117
- { id: '/agent', label: '/agent', detail: 'Open the Agent operator workspace', category: 'Agent Operator' },
124
+ { id: '/agent', label: '/agent', detail: 'Open the Agent operator workspace; press / inside it to search every action', category: 'Agent Operator' },
125
+ { id: '/agent setup', label: '/agent setup', detail: 'Open the Agent setup workspace; workspace search can find every setup action', category: 'Agent Operator' },
126
+ { id: '/agent channels', label: '/agent channels', detail: 'Open channel readiness and delivery safety', category: 'Agent Operator' },
127
+ { id: '/agent knowledge', label: '/agent knowledge', detail: 'Open isolated Agent Knowledge workflows', category: 'Agent Operator' },
128
+ { id: '/agent voice-media', label: '/agent voice-media', detail: 'Open voice, TTS, image, browser, and media setup', category: 'Agent Operator' },
118
129
  { id: '/home', label: '/home', detail: 'Alias for the Agent operator workspace', category: 'Agent Operator' },
119
130
  { id: '/brief', label: '/brief', detail: 'Show a concise Agent operator briefing and next actions', category: 'Agent Operator' },
120
131
  { id: '/knowledge', label: '/knowledge', detail: 'Inspect isolated Agent Knowledge status, ask/search, and ingest flows', category: 'Agent Operator' },
121
- { id: '/memory', label: '/memory', detail: 'Review local Agent memory records', category: 'Agent Operator' },
122
- { id: '/personas', label: '/personas', detail: 'Create, review, and activate local Agent personas', category: 'Agent Operator' },
123
- { id: '/agent-skills', label: '/agent-skills', detail: 'Create, review, and enable reusable Agent skills', category: 'Agent Operator' },
132
+ { id: '/memory', label: '/memory', detail: 'Review Agent-local memory records', category: 'Agent Operator' },
133
+ { id: '/notes', label: '/notes', detail: 'Open Agent-local scratchpad notes for source triage and temporary context', category: 'Agent Operator' },
134
+ { id: '/personas', label: '/personas', detail: 'Create, review, and activate Agent-local personas', category: 'Agent Operator' },
135
+ { id: '/skills', label: '/skills', detail: 'Create, review, and enable reusable Agent skills', category: 'Agent Operator' },
124
136
  { id: '/routines', label: '/routines', detail: 'Create, review, start, and promote Agent routines explicitly', category: 'Agent Operator' },
137
+ { id: '/automation', label: '/automation', detail: 'Run confirmed connected-host automation actions', category: 'Agent Operator' },
125
138
  { id: '/delegate', label: '/delegate [task]', detail: 'Explicit build/fix/review handoff to GoodVibes TUI', category: 'Agent Operator' },
126
139
  { id: '/channels', label: '/channels', detail: 'Inspect messaging-channel readiness without sending messages', category: 'Agent Operator' },
127
- { id: '/pair', label: '/pair', detail: 'Pair companion clients through connected GoodVibes services', category: 'Agent Operator' },
140
+ { id: '/pair', label: '/pair', detail: 'Pair companion clients through connected GoodVibes host', category: 'Agent Operator' },
128
141
  { id: '/model', label: '/model [id]', detail: 'Select LLM model', category: 'Model & Provider' },
129
142
  { id: '/provider', label: '/provider [name]', detail: 'Switch provider', category: 'Model & Provider' },
130
143
  { id: '/effort', label: '/effort [level]', detail: 'Reasoning effort (instant/low/medium/high)', category: 'Model & Provider' },
@@ -156,7 +169,9 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
156
169
  { id: '/paste', label: '/paste', detail: 'Insert clipboard text or image into the prompt', category: 'Tools & System' },
157
170
  { id: '/shortcuts', label: '/shortcuts', detail: 'View keyboard shortcuts reference', category: 'Tools & System' },
158
171
  { id: '/commands', label: '/commands', detail: 'Browse all commands in a scrollable list', category: 'Tools & System' },
172
+ { id: '/compat', label: '/compat', detail: 'Inspect connected-host and Agent Knowledge compatibility', category: 'Tools & System' },
159
173
  { id: '/secrets', label: '/secrets set|link|get|test|list|delete', detail: 'Manage encrypted and provider-backed secrets', category: 'Tools & System' },
174
+ { id: '/bundle', label: '/bundle export|inspect|import', detail: 'Manage redacted Agent support bundles', category: 'Tools & System' },
160
175
  { id: '/help', label: '/help', detail: 'This help', category: 'Tools & System' },
161
176
  { id: '/quit', label: '/quit', detail: 'Exit', category: 'Tools & System' },
162
177
  ];
@@ -172,7 +187,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
172
187
  });
173
188
  return;
174
189
  }
175
- ctx.print('Use /help to open the help modal. Commands: /agent, /brief, /knowledge, /memory, /personas, /agent-skills, /routines, /channels, /delegate, /model, /provider, /config, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /quit');
190
+ ctx.print('Open the Agent workspace first, then press / inside it to search every product action. Slash commands remain available: /agent, /brief, /knowledge, /memory, /notes, /personas, /skills, /routines, /channels, /approval, /automation, /schedule, /delegate, /model, /provider, /config, /compat, /bundle, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /quit');
176
191
  },
177
192
  });
178
193
 
@@ -253,20 +268,23 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
253
268
  const level = result.item.id as 'instant' | 'low' | 'medium' | 'high';
254
269
  ctx.session.runtime.reasoningEffort = level;
255
270
  ctx.platform.configManager.set('provider.reasoningEffort', level);
256
- ctx.print(`Reasoning effort set to: ${level}`);
271
+ ctx.print([
272
+ 'Reasoning effort set',
273
+ ` level ${level}`,
274
+ ].join('\n'));
257
275
  ctx.renderRequest();
258
276
  });
259
277
  return;
260
278
  }
261
279
  const budget = REASONING_BUDGET_MAP[current];
262
280
  const lines = [
263
- `Reasoning effort: ${current}`,
264
- ` Mercury-2: reasoning_effort = '${current}'`,
265
- ` Claude: thinking.budget_tokens = ${budget}`,
266
- ` Gemini: thinking_config.thinking_budget = ${budget}`,
267
- ` GPT-5: (no-op)`,
281
+ `Reasoning effort ${current}`,
282
+ ` Mercury-2 reasoning_effort = '${current}'`,
283
+ ` Claude thinking.budget_tokens = ${budget}`,
284
+ ` Gemini thinking_config.thinking_budget = ${budget}`,
285
+ ` GPT-5 (no-op)`,
268
286
  '',
269
- `Levels: ${validLevels.join(', ')}`,
287
+ `Levels ${validLevels.join(', ')}`,
270
288
  ];
271
289
  ctx.print(lines.join('\n'));
272
290
  return;
@@ -274,13 +292,16 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
274
292
 
275
293
  const level = args[0] as 'instant' | 'low' | 'medium' | 'high';
276
294
  if (!validLevels.includes(level)) {
277
- ctx.print(`Invalid effort level: ${level}\nValid levels: ${validLevels.join(', ')}`);
295
+ ctx.print(`Invalid effort level ${level}\nValid levels ${validLevels.join(', ')}`);
278
296
  return;
279
297
  }
280
298
 
281
299
  ctx.session.runtime.reasoningEffort = level;
282
300
  ctx.platform.configManager.set('provider.reasoningEffort', level);
283
- ctx.print(`Reasoning effort set to: ${level}`);
301
+ ctx.print([
302
+ 'Reasoning effort set',
303
+ ` level ${level}`,
304
+ ].join('\n'));
284
305
  },
285
306
  });
286
307