@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
@@ -2,7 +2,24 @@ import type { AgentWorkspaceEditorKind, AgentWorkspaceLocalEditor } from './agen
2
2
 
3
3
  export type AgentWorkspaceOperationsCommandEditorKind = Extract<
4
4
  AgentWorkspaceEditorKind,
5
- 'plan-seed' | 'plan-show' | 'plan-approve' | 'plan-override' | 'plan-clear' | 'health-repair' | 'approval-review' | 'routine-receipt' | 'schedule-receipt'
5
+ | 'plan-seed'
6
+ | 'plan-show'
7
+ | 'plan-approve'
8
+ | 'plan-override'
9
+ | 'plan-clear'
10
+ | 'health-repair'
11
+ | 'approval-review'
12
+ | 'approval-approve'
13
+ | 'approval-deny'
14
+ | 'approval-cancel'
15
+ | 'automation-job-run'
16
+ | 'automation-job-pause'
17
+ | 'automation-job-resume'
18
+ | 'automation-run-cancel'
19
+ | 'automation-run-retry'
20
+ | 'schedule-run'
21
+ | 'routine-receipt'
22
+ | 'schedule-receipt'
6
23
  >;
7
24
 
8
25
  export function isAgentWorkspaceOperationsCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceOperationsCommandEditorKind {
@@ -13,6 +30,15 @@ export function isAgentWorkspaceOperationsCommandEditorKind(kind: AgentWorkspace
13
30
  || kind === 'plan-clear'
14
31
  || kind === 'health-repair'
15
32
  || kind === 'approval-review'
33
+ || kind === 'approval-approve'
34
+ || kind === 'approval-deny'
35
+ || kind === 'approval-cancel'
36
+ || kind === 'automation-job-run'
37
+ || kind === 'automation-job-pause'
38
+ || kind === 'automation-job-resume'
39
+ || kind === 'automation-run-cancel'
40
+ || kind === 'automation-run-retry'
41
+ || kind === 'schedule-run'
16
42
  || kind === 'routine-receipt'
17
43
  || kind === 'schedule-receipt';
18
44
  }
@@ -24,7 +50,7 @@ export function createAgentWorkspaceOperationsCommandEditor(kind: AgentWorkspace
24
50
  mode: 'create',
25
51
  title: 'Seed Planning Goal',
26
52
  selectedFieldIndex: 0,
27
- message: 'Seed Agent planning state from a concrete goal. This stays in the main Agent planning flow and does not spawn coding agents.',
53
+ message: 'Seed Agent planning state from a concrete goal. This stays in the main Agent planning flow and does not create coding-role Agent jobs.',
28
54
  fields: [
29
55
  { id: 'goal', label: 'Planning goal', value: '', required: true, multiline: true, hint: 'Describe the goal or operating plan to evaluate. Ctrl-J inserts a new line.' },
30
56
  ],
@@ -36,7 +62,7 @@ export function createAgentWorkspaceOperationsCommandEditor(kind: AgentWorkspace
36
62
  mode: 'create',
37
63
  title: 'Show Health Repair Guidance',
38
64
  selectedFieldIndex: 0,
39
- message: 'Show health repair guidance for one domain. Agent does not start services or mutate connected-host lifecycle.',
65
+ message: 'Show health repair guidance for one domain. Agent does not manage connected-host hosting or mutate connected-host lifecycle.',
40
66
  fields: [
41
67
  { id: 'domain', label: 'Domain', value: 'settings', required: true, multiline: false, hint: 'settings, auth, accounts, host, remote, mcp, continuity, or maintenance.' },
42
68
  ],
@@ -54,6 +80,57 @@ export function createAgentWorkspaceOperationsCommandEditor(kind: AgentWorkspace
54
80
  ],
55
81
  };
56
82
  }
83
+ if (kind === 'approval-approve' || kind === 'approval-deny' || kind === 'approval-cancel') {
84
+ const verb = kind === 'approval-approve' ? 'Approve' : kind === 'approval-deny' ? 'Deny' : 'Cancel';
85
+ return {
86
+ kind,
87
+ mode: 'update',
88
+ title: `${verb} Approval`,
89
+ selectedFieldIndex: 0,
90
+ message: `${verb} one pending connected-host approval request. This is an explicit operator action and requires typed confirmation.`,
91
+ fields: [
92
+ { id: 'approvalId', label: 'Approval id', value: '', required: true, multiline: false, hint: 'Approval request id from the approval list.' },
93
+ { id: 'note', label: 'Note', value: '', required: false, multiline: true, hint: 'Optional approval note. Ctrl-J inserts a new line.' },
94
+ { id: 'remember', label: 'Remember', value: '', required: false, multiline: false, hint: 'yes/no when you explicitly want to set the connected-host remember flag; blank leaves it unset.' },
95
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: `Type yes to run /approval ${kind.replace('approval-', '')} with --yes.` },
96
+ ],
97
+ };
98
+ }
99
+ if (
100
+ kind === 'automation-job-run'
101
+ || kind === 'automation-job-pause'
102
+ || kind === 'automation-job-resume'
103
+ || kind === 'automation-run-cancel'
104
+ || kind === 'automation-run-retry'
105
+ || kind === 'schedule-run'
106
+ ) {
107
+ const job = kind.startsWith('automation-job-');
108
+ const run = kind.startsWith('automation-run-');
109
+ const label = job ? 'Job id' : run ? 'Run id' : 'Schedule id';
110
+ const field = job ? 'jobId' : run ? 'runId' : 'scheduleId';
111
+ const action = kind === 'automation-job-run'
112
+ ? 'Run Automation Job'
113
+ : kind === 'automation-job-pause'
114
+ ? 'Pause Automation Job'
115
+ : kind === 'automation-job-resume'
116
+ ? 'Resume Automation Job'
117
+ : kind === 'automation-run-cancel'
118
+ ? 'Cancel Automation Run'
119
+ : kind === 'automation-run-retry'
120
+ ? 'Retry Automation Run'
121
+ : 'Run Schedule';
122
+ return {
123
+ kind,
124
+ mode: 'update',
125
+ title: action,
126
+ selectedFieldIndex: 0,
127
+ message: `${action} through the connected host. This is never automatic and requires typed confirmation.`,
128
+ fields: [
129
+ { id: field, label, value: '', required: true, multiline: false, hint: `${label} from the Automation workspace list.` },
130
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run the confirmed connected-host action with --yes.' },
131
+ ],
132
+ };
133
+ }
57
134
  if (kind === 'plan-approve') {
58
135
  return {
59
136
  kind,
@@ -0,0 +1,43 @@
1
+ import type { AgentWorkspaceCategoryId } from './agent-workspace-types.ts';
2
+
3
+ const PANEL_CATEGORY_ROUTES = {
4
+ knowledge: 'knowledge',
5
+ memory: 'memory',
6
+ 'work-plan': 'work',
7
+ 'project-planning': 'work',
8
+ plan: 'work',
9
+ approval: 'work',
10
+ tasks: 'work',
11
+ 'provider-health': 'setup',
12
+ automation: 'automation',
13
+ schedule: 'automation',
14
+ providers: 'setup',
15
+ accounts: 'setup',
16
+ subscription: 'setup',
17
+ cost: 'setup',
18
+ tokens: 'setup',
19
+ security: 'tools',
20
+ policy: 'tools',
21
+ tools: 'tools',
22
+ 'qr-code': 'channels',
23
+ sessions: 'conversation',
24
+ context: 'conversation',
25
+ thinking: 'conversation',
26
+ 'system-messages': 'conversation',
27
+ docs: 'home',
28
+ 'panel-list': 'home',
29
+ } as const satisfies Readonly<Record<string, AgentWorkspaceCategoryId>>;
30
+
31
+ type AgentWorkspacePanelRouteId = keyof typeof PANEL_CATEGORY_ROUTES;
32
+
33
+ function hasPanelCategoryRoute(panelId: string): panelId is AgentWorkspacePanelRouteId {
34
+ return Object.prototype.hasOwnProperty.call(PANEL_CATEGORY_ROUTES, panelId);
35
+ }
36
+
37
+ export function agentWorkspaceCategoryForPanel(panelId: string): AgentWorkspaceCategoryId {
38
+ return hasPanelCategoryRoute(panelId) ? PANEL_CATEGORY_ROUTES[panelId] : 'home';
39
+ }
40
+
41
+ export function agentWorkspaceCommandForPanel(panelId: string): string {
42
+ return `/agent ${agentWorkspaceCategoryForPanel(panelId)}`;
43
+ }
@@ -32,7 +32,7 @@ export function createReminderScheduleEditor(): AgentWorkspaceLocalEditor {
32
32
  { id: 'scheduleValue', label: 'Schedule value', value: '', required: true, multiline: false, hint: 'Examples: 2026-06-01T09:00:00-05:00, 7d, or 0 9 * * *.' },
33
33
  { id: 'timezone', label: 'Timezone', value: '', required: false, multiline: false, hint: 'Optional IANA timezone for cron schedules, for example America/Chicago.' },
34
34
  { id: 'scheduleName', label: 'Schedule name', value: '', required: false, multiline: false, hint: 'Optional display name for the connected reminder.' },
35
- { id: 'deliveryChannel', label: 'Delivery channel', value: '', required: false, multiline: false, hint: 'Optional channel target, for example slack or slack:ops-alerts:Ops.' },
35
+ { id: 'deliveryChannel', label: 'Delivery channel', value: '', required: false, multiline: false, hint: 'Optional channel target, for example slack, slack:ops-alerts:Ops, or telephony:+15551234567.' },
36
36
  { id: 'disabled', label: 'Create disabled', value: 'no', required: false, multiline: false, hint: 'yes/no. Default no.' },
37
37
  { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /schedule remind with --yes.' },
38
38
  ],
@@ -30,12 +30,12 @@ export function createRoutineScheduleEditor(
30
30
  selectedFieldIndex: 0,
31
31
  message: `Create one connected schedule from a reviewed local routine. Selected: ${selected}. Type yes on the final field to confirm.`,
32
32
  fields: [
33
- { id: 'routineId', label: 'Routine id', value: selectedRoutine?.id ?? '', required: true, multiline: false, hint: 'Local Agent routine id to promote.' },
33
+ { id: 'routineId', label: 'Routine id', value: selectedRoutine?.id ?? '', required: true, multiline: false, hint: 'Agent-local routine id to promote.' },
34
34
  { id: 'scheduleKind', label: 'Schedule type', value: 'cron', required: true, multiline: false, hint: 'cron, every, or at.' },
35
35
  { id: 'scheduleValue', label: 'Schedule value', value: '', required: true, multiline: false, hint: 'Examples: 0 9 * * *, 7d, or 2026-06-01T09:00:00-05:00.' },
36
36
  { id: 'timezone', label: 'Timezone', value: '', required: false, multiline: false, hint: 'Optional IANA timezone, for example America/Chicago.' },
37
37
  { id: 'scheduleName', label: 'Schedule name', value: selectedRoutine?.name ?? '', required: false, multiline: false, hint: 'Optional display name for the connected schedule.' },
38
- { id: 'deliveryChannel', label: 'Delivery channel', value: '', required: false, multiline: false, hint: 'Optional channel target, for example slack or slack:ops-alerts:Ops.' },
38
+ { id: 'deliveryChannel', label: 'Delivery channel', value: '', required: false, multiline: false, hint: 'Optional channel target, for example slack, slack:ops-alerts:Ops, or telephony:+15551234567.' },
39
39
  { id: 'disabled', label: 'Create disabled', value: 'no', required: false, multiline: false, hint: 'yes/no. Default no.' },
40
40
  { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /schedule promote-routine with --yes.' },
41
41
  ],
@@ -0,0 +1,169 @@
1
+ import type {
2
+ AgentWorkspaceActionResult,
3
+ AgentWorkspaceActionSearchResult,
4
+ AgentWorkspaceCategory,
5
+ AgentWorkspaceFocusPane,
6
+ } from './agent-workspace-types.ts';
7
+
8
+ export interface AgentWorkspaceSearchHost {
9
+ readonly categories: readonly AgentWorkspaceCategory[];
10
+ readonly selectedCategory: AgentWorkspaceCategory;
11
+ actionSearchActive: boolean;
12
+ actionSearchQuery: string;
13
+ focusPane: AgentWorkspaceFocusPane;
14
+ selectedCategoryIndex: number;
15
+ selectedActionIndex: number;
16
+ status: string;
17
+ lastActionResult: AgentWorkspaceActionResult | null;
18
+ focusActions(): void;
19
+ clampSelection(): void;
20
+ }
21
+
22
+ export function searchAgentWorkspaceActions(
23
+ categories: readonly AgentWorkspaceCategory[],
24
+ query: string,
25
+ ): readonly AgentWorkspaceActionSearchResult[] {
26
+ const normalized = query.trim().toLowerCase();
27
+ if (!normalized) return [];
28
+ const terms = normalized.split(/\s+/).filter(Boolean);
29
+ const results: Array<{ readonly result: AgentWorkspaceActionSearchResult; readonly score: number }> = [];
30
+ categories.forEach((category, categoryIndex) => {
31
+ category.actions.forEach((action, actionIndex) => {
32
+ const haystack = [
33
+ category.id,
34
+ category.label,
35
+ category.summary,
36
+ category.detail,
37
+ action.id,
38
+ action.label,
39
+ action.detail,
40
+ action.command ?? '',
41
+ action.editorKind ?? '',
42
+ action.targetCategoryId ?? '',
43
+ action.localOperation ?? '',
44
+ action.safety,
45
+ ].join(' ').toLowerCase();
46
+ if (terms.every((term) => haystack.includes(term))) {
47
+ const result = { category, categoryIndex, action, actionIndex };
48
+ results.push({ result, score: scoreActionSearchResult(result, normalized, terms) });
49
+ }
50
+ });
51
+ });
52
+ return results
53
+ .sort((left, right) => right.score - left.score || left.result.categoryIndex - right.result.categoryIndex || left.result.actionIndex - right.result.actionIndex)
54
+ .map((entry) => entry.result);
55
+ }
56
+
57
+ function scoreField(value: string | undefined, terms: readonly string[], exactQuery: string, exactWeight: number, termWeight: number): number {
58
+ const normalized = (value ?? '').toLowerCase();
59
+ if (!normalized) return 0;
60
+ const bareNormalized = normalized.replace(/^\//, '');
61
+ let score = bareNormalized === exactQuery || normalized === exactQuery
62
+ ? exactWeight
63
+ : exactQuery.includes(' ') && normalized.includes(exactQuery)
64
+ ? exactWeight
65
+ : 0;
66
+ for (const term of terms) {
67
+ if (normalized.includes(term)) score += termWeight;
68
+ }
69
+ return score;
70
+ }
71
+
72
+ function scoreActionSearchResult(
73
+ result: AgentWorkspaceActionSearchResult,
74
+ exactQuery: string,
75
+ terms: readonly string[],
76
+ ): number {
77
+ const { category, action } = result;
78
+ let score = 0;
79
+ score += scoreField(action.id, terms, exactQuery, 90, 28);
80
+ score += scoreField(action.editorKind, terms, exactQuery, 85, 26);
81
+ score += scoreField(action.command, terms, exactQuery, 75, 22);
82
+ score += scoreField(action.label, terms, exactQuery, 65, 18);
83
+ score += scoreField(action.localOperation, terms, exactQuery, 50, 16);
84
+ score += scoreField(action.targetCategoryId, terms, exactQuery, 40, 12);
85
+ score += scoreField(action.detail, terms, exactQuery, 24, 6);
86
+ score += scoreField(category.id, terms, exactQuery, 30, 8);
87
+ score += scoreField(category.label, terms, exactQuery, 25, 7);
88
+ score += scoreField(category.summary, terms, exactQuery, 12, 3);
89
+ score += scoreField(category.detail, terms, exactQuery, 8, 2);
90
+
91
+ if (category.id === 'setup' && !terms.includes('setup')) score -= 14;
92
+ if (action.id.startsWith('setup-') && !terms.includes('setup')) score -= 18;
93
+ if (action.kind === 'workspace' && !terms.includes('open')) score -= 4;
94
+ return score;
95
+ }
96
+
97
+ export function beginAgentWorkspaceActionSearch(host: AgentWorkspaceSearchHost): void {
98
+ host.actionSearchActive = true;
99
+ host.actionSearchQuery = '';
100
+ host.focusPane = 'actions';
101
+ host.selectedActionIndex = 0;
102
+ host.status = 'Search Agent workspace actions.';
103
+ host.lastActionResult = {
104
+ kind: 'guidance',
105
+ title: 'Action search',
106
+ detail: 'Type to filter every Agent workspace action. Enter opens the selected result; Esc clears search.',
107
+ safety: 'safe',
108
+ };
109
+ }
110
+
111
+ export function appendAgentWorkspaceActionSearchText(host: AgentWorkspaceSearchHost, text: string): void {
112
+ if (!host.actionSearchActive || text.length === 0) return;
113
+ host.actionSearchQuery += text.replace(/[\r\n]+/g, ' ');
114
+ host.selectedActionIndex = 0;
115
+ host.status = actionSearchStatus(host);
116
+ host.clampSelection();
117
+ }
118
+
119
+ export function backspaceAgentWorkspaceActionSearch(host: AgentWorkspaceSearchHost): void {
120
+ if (!host.actionSearchActive || host.actionSearchQuery.length === 0) return;
121
+ const chars = Array.from(host.actionSearchQuery);
122
+ chars.pop();
123
+ host.actionSearchQuery = chars.join('');
124
+ host.selectedActionIndex = 0;
125
+ host.status = host.actionSearchQuery.length === 0 ? 'Search Agent workspace actions.' : actionSearchStatus(host);
126
+ host.clampSelection();
127
+ }
128
+
129
+ export function clearAgentWorkspaceActionSearch(host: AgentWorkspaceSearchHost): void {
130
+ if (!host.actionSearchActive) return;
131
+ host.actionSearchActive = false;
132
+ host.actionSearchQuery = '';
133
+ host.selectedActionIndex = Math.max(0, Math.min(host.selectedActionIndex, host.selectedCategory.actions.length - 1));
134
+ host.status = 'Action search cleared.';
135
+ host.clampSelection();
136
+ }
137
+
138
+ export function commitAgentWorkspaceActionSearchSelection(
139
+ host: AgentWorkspaceSearchHost,
140
+ result: AgentWorkspaceActionSearchResult | null,
141
+ ): boolean {
142
+ if (!host.actionSearchActive) return true;
143
+ if (!result) {
144
+ host.status = host.actionSearchQuery.trim().length === 0
145
+ ? 'Type a search query before opening an action.'
146
+ : `No Agent workspace actions match "${host.actionSearchQuery}".`;
147
+ host.lastActionResult = {
148
+ kind: 'guidance',
149
+ title: 'No action selected',
150
+ detail: 'Type a different search query or press Esc to return to normal workspace navigation.',
151
+ safety: 'safe',
152
+ };
153
+ return false;
154
+ }
155
+ host.selectedCategoryIndex = result.categoryIndex;
156
+ host.selectedActionIndex = result.actionIndex;
157
+ host.actionSearchActive = false;
158
+ host.actionSearchQuery = '';
159
+ host.focusActions();
160
+ host.clampSelection();
161
+ return true;
162
+ }
163
+
164
+ function actionSearchStatus(host: AgentWorkspaceSearchHost): string {
165
+ const count = searchAgentWorkspaceActions(host.categories, host.actionSearchQuery).length;
166
+ return count === 0
167
+ ? `No Agent workspace actions match "${host.actionSearchQuery}".`
168
+ : `Found ${count} Agent workspace action(s) for "${host.actionSearchQuery}".`;
169
+ }
@@ -17,6 +17,8 @@ export interface AgentWorkspaceSetupChecklistInput {
17
17
  readonly sessionMemoryCount: number;
18
18
  readonly localMemoryCount: number;
19
19
  readonly localMemoryReviewQueueCount: number;
20
+ readonly localNoteCount: number;
21
+ readonly localNoteReviewQueueCount: number;
20
22
  readonly routineCount: number;
21
23
  readonly enabledRoutineCount: number;
22
24
  readonly missingRoutineRequirementCount: number;
@@ -55,8 +57,8 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
55
57
  id: 'runtime',
56
58
  label: 'Connected host',
57
59
  status: 'ready',
58
- detail: `Agent will connect to ${input.runtimeBaseUrl}; service ownership stays outside this product.`,
59
- command: '/health',
60
+ detail: `Agent will connect to ${input.runtimeBaseUrl}; connected-host ownership stays outside this product.`,
61
+ command: 'Home -> Review health',
60
62
  },
61
63
  {
62
64
  id: 'provider-model',
@@ -65,14 +67,14 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
65
67
  detail: providerReady
66
68
  ? `Current chat route is ${input.provider} / ${input.model}.`
67
69
  : 'Choose a provider and model before relying on assistant turns.',
68
- command: '/agent setup',
70
+ command: 'Setup -> Provider and model',
69
71
  },
70
72
  {
71
73
  id: 'agent-knowledge',
72
74
  label: 'Agent Knowledge',
73
75
  status: 'recommended',
74
76
  detail: 'Check isolated Agent Knowledge status, then ingest source-backed material into the Agent segment only.',
75
- command: '/agent knowledge',
77
+ command: 'Knowledge',
76
78
  },
77
79
  {
78
80
  id: 'profile',
@@ -83,7 +85,7 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
83
85
  : discoveredBehaviorCount > 0
84
86
  ? `${discoveredBehaviorCount} discovered behavior file(s) can seed an isolated Agent profile from the Profiles workspace.`
85
87
  : `${input.runtimeStarterTemplateCount} starter template(s) are available if this machine needs separate operator identities.`,
86
- command: '/agent profiles',
88
+ command: 'Profiles',
87
89
  },
88
90
  {
89
91
  id: 'persona',
@@ -94,7 +96,7 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
94
96
  : input.discoveredPersonas.count > 0
95
97
  ? `${input.discoveredPersonas.count} discovered persona file(s) can be imported into the Agent-local registry.${sampleNames(input.discoveredPersonas)}`
96
98
  : 'Create or choose a persona to make the assistant voice and policy explicit.',
97
- command: '/agent personas',
99
+ command: 'Personas',
98
100
  },
99
101
  {
100
102
  id: 'skills',
@@ -111,7 +113,7 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
111
113
  : input.discoveredSkills.count > 0
112
114
  ? `${input.discoveredSkills.count} discovered skill file(s) can be imported as local reusable procedures.${sampleNames(input.discoveredSkills)}`
113
115
  : 'Create reusable local skills and bundles for repeated workflows.',
114
- command: '/agent skills',
116
+ command: 'Skills',
115
117
  },
116
118
  {
117
119
  id: 'routines',
@@ -124,7 +126,7 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
124
126
  : input.discoveredRoutines.count > 0
125
127
  ? `${input.discoveredRoutines.count} discovered routine file(s) can be imported as main-conversation workflows.${sampleNames(input.discoveredRoutines)}`
126
128
  : 'Create local routines first; promote schedules only with explicit confirmation.',
127
- command: '/agent routines',
129
+ command: 'Routines',
128
130
  },
129
131
  {
130
132
  id: 'memory',
@@ -133,7 +135,16 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
133
135
  detail: input.localMemoryCount > 0
134
136
  ? `${input.localMemoryCount} Agent memory record(s) are available; ${input.localMemoryReviewQueueCount} need review.`
135
137
  : 'Memory starts empty; durable facts should be stored deliberately and never include secrets.',
136
- command: '/agent memory',
138
+ command: 'Memory',
139
+ },
140
+ {
141
+ id: 'notes',
142
+ label: 'Scratchpad notes',
143
+ status: setupStatusForCount(input.localNoteCount, 'ready', 'optional'),
144
+ detail: input.localNoteCount > 0
145
+ ? `${input.localNoteCount} Agent scratchpad note(s) are available; ${input.localNoteReviewQueueCount} need review.`
146
+ : 'Notes start empty; use them for source triage, temporary decisions, and handoff before promoting anything durable.',
147
+ command: 'Notes',
137
148
  },
138
149
  {
139
150
  id: 'channels',
@@ -142,14 +153,14 @@ export function buildAgentWorkspaceSetupChecklist(input: AgentWorkspaceSetupChec
142
153
  detail: input.readyChannelCount > 0
143
154
  ? `${input.readyChannelCount} external channel(s) are ready.`
144
155
  : 'Pair or review channels only when you want the assistant reachable outside this terminal.',
145
- command: '/agent channels',
156
+ command: 'Channels',
146
157
  },
147
158
  {
148
159
  id: 'voice-media',
149
160
  label: 'Voice and media',
150
161
  status: input.voiceProviderCount > 0 || input.mediaProviderCount > 0 ? 'ready' : 'optional',
151
162
  detail: `${input.voiceProviderCount} voice provider(s), ${input.mediaProviderCount} media provider(s). Configure these only when useful.`,
152
- command: '/agent voice-media',
163
+ command: 'Voice & Media',
153
164
  },
154
165
  ];
155
166
  }
@@ -50,12 +50,12 @@ export function buildAgentWorkspaceSkillBundleCommandEditorSubmission(
50
50
  ): AgentWorkspaceSkillBundleCommandEditorSubmission {
51
51
  if (editor.kind === 'skill-bundle-search') {
52
52
  const query = readField('query').trim();
53
- const command = query.length > 0 ? `/agent-skills bundle search ${quoteSlashCommandArg(query)}` : '/agent-skills bundle search';
53
+ const command = query.length > 0 ? `/skills bundle search ${quoteSlashCommandArg(query)}` : '/skills bundle search';
54
54
  return dispatch(command, 'Opening skill bundle search', 'The workspace handed a read-only skill bundle search command to the shell-owned command router.', 'read-only');
55
55
  }
56
56
  if (editor.kind === 'skill-bundle-show') {
57
57
  return dispatch(
58
- `/agent-skills bundle show ${quoteSlashCommandArg(readField('id'))}`,
58
+ `/skills bundle show ${quoteSlashCommandArg(readField('id'))}`,
59
59
  'Opening skill bundle detail',
60
60
  'The workspace handed a read-only skill bundle detail command to the shell-owned command router.',
61
61
  'read-only',
@@ -63,7 +63,7 @@ export function buildAgentWorkspaceSkillBundleCommandEditorSubmission(
63
63
  }
64
64
  if (editor.kind === 'skill-bundle-update') {
65
65
  if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Skill bundle update not confirmed. Type yes, then press Enter.');
66
- const parts = ['/agent-skills', 'bundle', 'update', quoteSlashCommandArg(readField('id'))];
66
+ const parts = ['/skills', 'bundle', 'update', quoteSlashCommandArg(readField('id'))];
67
67
  const name = readField('name');
68
68
  const description = readField('description');
69
69
  const skills = readField('skills');
@@ -76,7 +76,7 @@ export function buildAgentWorkspaceSkillBundleCommandEditorSubmission(
76
76
  if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Skill bundle action not confirmed. Type yes, then press Enter.');
77
77
  const verb = editor.kind.replace('skill-bundle-', '');
78
78
  return dispatch(
79
- `/agent-skills bundle ${verb} ${quoteSlashCommandArg(readField('id'))}`,
79
+ `/skills bundle ${verb} ${quoteSlashCommandArg(readField('id'))}`,
80
80
  `Opening skill bundle ${verb}`,
81
81
  `The workspace handed a confirmed skill bundle ${verb} command to the shell-owned command router.`,
82
82
  'safe',
@@ -85,7 +85,7 @@ export function buildAgentWorkspaceSkillBundleCommandEditorSubmission(
85
85
  if (editor.kind === 'skill-bundle-stale') {
86
86
  if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Skill bundle stale action not confirmed. Type yes, then press Enter.');
87
87
  return dispatch(
88
- `/agent-skills bundle stale ${quoteSlashCommandArg(readField('id'))} ${quoteSlashCommandArg(readField('reason'))}`,
88
+ `/skills bundle stale ${quoteSlashCommandArg(readField('id'))} ${quoteSlashCommandArg(readField('reason'))}`,
89
89
  'Opening skill bundle stale review',
90
90
  'The workspace handed a confirmed skill bundle stale command to the shell-owned command router.',
91
91
  'safe',
@@ -93,7 +93,7 @@ export function buildAgentWorkspaceSkillBundleCommandEditorSubmission(
93
93
  }
94
94
  if (!isAffirmative(readField('confirm'))) return unconfirmed(editor, 'Skill bundle delete not confirmed. Type yes, then press Enter.');
95
95
  return dispatch(
96
- `/agent-skills bundle delete ${quoteSlashCommandArg(readField('id'))} --yes`,
96
+ `/skills bundle delete ${quoteSlashCommandArg(readField('id'))} --yes`,
97
97
  'Opening skill bundle delete',
98
98
  'The workspace handed a confirmed skill bundle delete command to the shell-owned command router.',
99
99
  'safe',
@@ -30,7 +30,7 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
30
30
  mode: 'create',
31
31
  title: 'Search Skill Bundles',
32
32
  selectedFieldIndex: 0,
33
- message: 'Search local Agent skill bundles by name, description, or member skill.',
33
+ message: 'Search Agent-local skill bundles by name, description, or member skill.',
34
34
  fields: [
35
35
  { id: 'query', label: 'Search query', value: '', required: false, multiline: false, hint: 'Optional text query. Blank lists every bundle.' },
36
36
  ],
@@ -42,7 +42,7 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
42
42
  mode: 'create',
43
43
  title: 'Show Skill Bundle',
44
44
  selectedFieldIndex: 0,
45
- message: 'Show one local Agent skill bundle with readiness and member skills.',
45
+ message: 'Show one Agent-local skill bundle with readiness and member skills.',
46
46
  fields: [
47
47
  { id: 'id', label: 'Bundle id', value: '', required: true, multiline: false, hint: 'Existing local skill bundle id.' },
48
48
  ],
@@ -54,13 +54,13 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
54
54
  mode: 'update',
55
55
  title: 'Update Skill Bundle',
56
56
  selectedFieldIndex: 0,
57
- message: 'Update one local Agent skill bundle. Type yes on the final field to confirm.',
57
+ message: 'Update one Agent-local skill bundle. Type yes on the final field to confirm.',
58
58
  fields: [
59
59
  { id: 'id', label: 'Bundle id', value: '', required: true, multiline: false, hint: 'Existing local skill bundle id.' },
60
60
  { id: 'name', label: 'Name', value: '', required: false, multiline: false, hint: 'Optional replacement name.' },
61
61
  { id: 'description', label: 'Description', value: '', required: false, multiline: false, hint: 'Optional replacement one-line description.' },
62
62
  { id: 'skills', label: 'Skill ids', value: '', required: false, multiline: false, hint: 'Optional replacement comma-separated local skill ids.' },
63
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-skills bundle update.' },
63
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /skills bundle update.' },
64
64
  ],
65
65
  };
66
66
  }
@@ -70,11 +70,11 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
70
70
  mode: 'update',
71
71
  title: 'Mark Skill Bundle Stale',
72
72
  selectedFieldIndex: 0,
73
- message: 'Mark one local Agent skill bundle stale with a review reason. Type yes on the final field to confirm.',
73
+ message: 'Mark one Agent-local skill bundle stale with a review reason. Type yes on the final field to confirm.',
74
74
  fields: [
75
75
  { id: 'id', label: 'Bundle id', value: '', required: true, multiline: false, hint: 'Existing local skill bundle id.' },
76
76
  { id: 'reason', label: 'Reason', value: '', required: true, multiline: true, hint: 'Why this bundle needs review. Ctrl-J inserts a new line.' },
77
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-skills bundle stale.' },
77
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /skills bundle stale.' },
78
78
  ],
79
79
  };
80
80
  }
@@ -84,10 +84,10 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
84
84
  mode: 'delete',
85
85
  title: 'Delete Skill Bundle',
86
86
  selectedFieldIndex: 0,
87
- message: 'Delete one local Agent skill bundle. This does not delete member skills. Type yes to confirm.',
87
+ message: 'Delete one Agent-local skill bundle. This does not delete member skills. Type yes to confirm.',
88
88
  fields: [
89
89
  { id: 'id', label: 'Bundle id', value: '', required: true, multiline: false, hint: 'Existing local skill bundle id.' },
90
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /agent-skills bundle delete with --yes.' },
90
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /skills bundle delete with --yes.' },
91
91
  ],
92
92
  };
93
93
  }
@@ -101,10 +101,10 @@ export function createAgentWorkspaceSkillBundleCommandEditor(kind: AgentWorkspac
101
101
  mode: 'update',
102
102
  title: `${verb} Skill Bundle`,
103
103
  selectedFieldIndex: 0,
104
- message: `${verb} one local Agent skill bundle. Type yes on the final field to confirm.`,
104
+ message: `${verb} one Agent-local skill bundle. Type yes on the final field to confirm.`,
105
105
  fields: [
106
106
  { id: 'id', label: 'Bundle id', value: '', required: true, multiline: false, hint: 'Existing local skill bundle id.' },
107
- { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: `Type yes to run /agent-skills bundle ${verb.toLowerCase()}.` },
107
+ { id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: `Type yes to run /skills bundle ${verb.toLowerCase()}.` },
108
108
  ],
109
109
  };
110
110
  }