@pellux/goodvibes-agent 1.5.5 → 1.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/dist/package/main.js +94130 -79335
- package/docs/tools-and-commands.md +2 -1
- package/package.json +6 -3
- package/src/agent/autonomy-schedule-format.ts +1 -1
- package/src/agent/autonomy-schedule.ts +3 -3
- package/src/agent/calendar/calendar-oauth-service.ts +324 -0
- package/src/agent/calendar-subscription-registry.ts +497 -0
- package/src/agent/email/email-service.ts +57 -0
- package/src/agent/email/smtp-client.ts +30 -10
- package/src/agent/memory-prompt.ts +143 -12
- package/src/agent/operator-actions.ts +26 -22
- package/src/agent/prompt-context-receipts.ts +45 -18
- package/src/agent/reminder-schedule-format.ts +1 -1
- package/src/agent/reminder-schedule.ts +3 -3
- package/src/agent/routine-schedule-format.ts +2 -2
- package/src/agent/routine-schedule-promotion.ts +5 -5
- package/src/agent/routine-schedule-receipts.ts +2 -2
- package/src/agent/schedule-edit-format.ts +1 -1
- package/src/agent/schedule-edit.ts +5 -5
- package/src/agent/session-registration.ts +281 -0
- package/src/agent/vibe-file.ts +50 -0
- package/src/cli/local-library-command-shared.ts +146 -0
- package/src/cli/management.ts +2 -1
- package/src/cli/personas-command.ts +252 -0
- package/src/cli/resume-relaunch-notice.ts +151 -0
- package/src/cli/routines-command.ts +25 -2
- package/src/cli/service-posture.ts +3 -2
- package/src/cli/skill-bundle-command.ts +175 -0
- package/src/cli/skills-command.ts +309 -0
- package/src/cli/status.ts +43 -7
- package/src/cli/tui-startup.ts +24 -1
- package/src/config/agent-settings-policy.ts +0 -1
- package/src/config/secret-config.ts +4 -0
- package/src/core/conversation-rendering.ts +20 -11
- package/src/core/focus-tracker.ts +41 -0
- package/src/core/system-message-noise.ts +108 -0
- package/src/core/system-message-router.ts +54 -1
- package/src/core/thinking-overlay.ts +83 -0
- package/src/input/agent-workspace-access-command-editor-submission.ts +75 -108
- package/src/input/agent-workspace-access-command-editors.ts +108 -128
- package/src/input/agent-workspace-activation.ts +15 -0
- package/src/input/agent-workspace-basic-command-editor-submission.ts +292 -513
- package/src/input/agent-workspace-basic-command-editors.ts +433 -564
- package/src/input/agent-workspace-calendar-connect-editor.ts +116 -0
- package/src/input/agent-workspace-calendar-oauth-editor.ts +152 -0
- package/src/input/agent-workspace-calendar-subscribe-editor.ts +128 -0
- package/src/input/agent-workspace-categories.ts +7 -2
- package/src/input/agent-workspace-channel-command-editor-submission.ts +38 -52
- package/src/input/agent-workspace-channel-command-editors.ts +42 -46
- package/src/input/agent-workspace-command-editor-engine.ts +133 -0
- package/src/input/agent-workspace-command-editor.ts +4 -0
- package/src/input/agent-workspace-direct-editor-submission.ts +59 -0
- package/src/input/agent-workspace-email-connect-editor.ts +162 -0
- package/src/input/agent-workspace-knowledge-command-editor-submission.ts +52 -81
- package/src/input/agent-workspace-knowledge-command-editors.ts +71 -71
- package/src/input/agent-workspace-library-command-editor-submission.ts +10 -28
- package/src/input/agent-workspace-library-command-editors.ts +16 -2
- package/src/input/agent-workspace-live-counters.ts +55 -0
- package/src/input/agent-workspace-mcp-command-editor-submission.ts +60 -82
- package/src/input/agent-workspace-mcp-command-editors.ts +52 -0
- package/src/input/agent-workspace-media-command-editor-submission.ts +12 -39
- package/src/input/agent-workspace-media-command-editors.ts +10 -8
- package/src/input/agent-workspace-memory-command-editor-submission.ts +76 -151
- package/src/input/agent-workspace-memory-command-editors.ts +116 -141
- package/src/input/agent-workspace-operations-command-editor-submission.ts +131 -184
- package/src/input/agent-workspace-operations-command-editors.ts +150 -162
- package/src/input/agent-workspace-provider-command-editor-submission.ts +60 -106
- package/src/input/agent-workspace-provider-command-editors.ts +58 -68
- package/src/input/agent-workspace-search.ts +8 -1
- package/src/input/agent-workspace-session-command-editor-submission.ts +104 -132
- package/src/input/agent-workspace-session-command-editors.ts +160 -195
- package/src/input/agent-workspace-settings.ts +40 -1
- package/src/input/agent-workspace-skill-bundle-command-editor-submission.ts +55 -71
- package/src/input/agent-workspace-skill-bundle-command-editors.ts +65 -69
- package/src/input/agent-workspace-snapshot-builders.ts +431 -0
- package/src/input/agent-workspace-snapshot-config.ts +43 -0
- package/src/input/agent-workspace-snapshot.ts +198 -432
- package/src/input/agent-workspace-task-command-editor-submission.ts +34 -44
- package/src/input/agent-workspace-task-command-editors.ts +27 -28
- package/src/input/agent-workspace-types.ts +35 -1
- package/src/input/agent-workspace.ts +5 -14
- package/src/input/command-registry.ts +23 -1
- package/src/input/commands/calendar-connect-runtime.ts +226 -0
- package/src/input/commands/calendar-runtime.ts +110 -7
- package/src/input/commands/calendar-subscription-runtime.ts +225 -0
- package/src/input/commands/email-runtime.ts +100 -40
- package/src/input/commands/knowledge.ts +1 -1
- package/src/input/commands/network-scan-runtime.ts +75 -0
- package/src/input/commands/operator-actions-runtime.ts +9 -6
- package/src/input/commands/personas-runtime.ts +1 -1
- package/src/input/commands/schedule-runtime.ts +4 -4
- package/src/input/commands/session-content.ts +13 -1
- package/src/input/commands/session-workflow.ts +15 -20
- package/src/input/commands/session.ts +3 -1
- package/src/input/commands/shell-core.ts +20 -6
- package/src/input/commands.ts +2 -2
- package/src/input/delete-key-policy.ts +46 -0
- package/src/input/feed-context-factory.ts +10 -0
- package/src/input/handler-feed.ts +87 -0
- package/src/input/handler-modal-routes.ts +6 -1
- package/src/input/handler.ts +5 -0
- package/src/input/panel-paste-flood-guard.ts +94 -0
- package/src/input/settings-modal-types.ts +5 -3
- package/src/input/settings-modal.ts +21 -0
- package/src/main.ts +36 -36
- package/src/permissions/approval-posture.ts +141 -0
- package/src/renderer/agent-workspace-context-lines.ts +10 -2
- package/src/renderer/compositor.ts +27 -4
- package/src/renderer/diff.ts +61 -18
- package/src/renderer/fullscreen-primitives.ts +37 -18
- package/src/renderer/markdown.ts +20 -10
- package/src/renderer/modal-factory.ts +25 -15
- package/src/renderer/overlay-box.ts +23 -12
- package/src/renderer/process-indicator.ts +8 -3
- package/src/renderer/prompt-content-width.ts +16 -0
- package/src/renderer/settings-modal-helpers.ts +2 -0
- package/src/renderer/settings-modal.ts +2 -0
- package/src/renderer/startup-theme-probe.ts +35 -0
- package/src/renderer/status-glyphs.ts +11 -15
- package/src/renderer/system-message.ts +17 -2
- package/src/renderer/term-caps.ts +318 -0
- package/src/renderer/terminal-bg-probe.ts +373 -0
- package/src/renderer/terminal-escapes.ts +24 -0
- package/src/renderer/theme-mode-config.ts +87 -0
- package/src/renderer/theme.ts +241 -0
- package/src/renderer/thinking.ts +12 -3
- package/src/renderer/tool-call.ts +7 -3
- package/src/renderer/ui-factory.ts +92 -36
- package/src/renderer/ui-primitives.ts +33 -93
- package/src/runtime/bootstrap-core.ts +15 -0
- package/src/runtime/bootstrap-hook-bridge.ts +6 -0
- package/src/runtime/bootstrap-shell.ts +2 -0
- package/src/runtime/bootstrap.ts +68 -5
- package/src/runtime/calendar-boot-refresh.ts +105 -0
- package/src/runtime/lan-scan-consent.ts +253 -0
- package/src/runtime/services.ts +127 -2
- package/src/runtime/session-spine-rest-transport.ts +160 -0
- package/src/runtime/terminal-output-guard.ts +6 -1
- package/src/runtime/ui-services.ts +3 -0
- package/src/shell/agent-workspace-fullscreen.ts +5 -0
- package/src/shell/terminal-focus-mode.ts +120 -0
- package/src/shell/ui-openers.ts +13 -4
- package/src/tools/agent-harness-autonomy-intake.ts +5 -5
- package/src/tools/agent-harness-autonomy-queue.ts +1 -1
- package/src/tools/agent-harness-background-processes.ts +2 -1
- package/src/tools/agent-harness-metadata.ts +16 -8
- package/src/tools/agent-harness-operator-methods.ts +44 -8
- package/src/tools/agent-harness-personal-ops-discovery.ts +57 -10
- package/src/tools/agent-harness-personal-ops-lanes.ts +17 -5
- package/src/tools/agent-harness-personal-ops-operations.ts +7 -7
- package/src/tools/agent-harness-personal-ops-types.ts +6 -0
- package/src/tools/agent-harness-prompt-context.ts +26 -12
- package/src/tools/agent-harness-workspace-actions.ts +4 -0
- package/src/tools/agent-local-registry-args.ts +117 -0
- package/src/tools/agent-local-registry-memory.ts +227 -0
- package/src/tools/agent-local-registry-tool.ts +19 -237
- package/src/tools/agent-operator-briefing-tool.ts +2 -2
- package/src/tools/agent-operator-method-tool.ts +13 -0
- package/src/tools/agent-policy-explanation.ts +39 -4
- package/src/tools/agent-schedule-tool.ts +5 -5
- package/src/utils/terminal-width.ts +98 -1
- package/src/version.ts +1 -1
- package/src/cli/local-library-command.ts +0 -825
|
@@ -7,6 +7,8 @@ import type { AgentWorkspaceKnowledgeCommandEditorKind } from './agent-workspace
|
|
|
7
7
|
import { createAgentWorkspaceKnowledgeCommandEditor, isAgentWorkspaceKnowledgeCommandEditorKind } from './agent-workspace-knowledge-command-editors.ts';
|
|
8
8
|
import type { AgentWorkspaceLibraryCommandEditorKind } from './agent-workspace-library-command-editors.ts';
|
|
9
9
|
import { createAgentWorkspaceLibraryCommandEditor, isAgentWorkspaceLibraryCommandEditorKind } from './agent-workspace-library-command-editors.ts';
|
|
10
|
+
import type { AgentWorkspaceMcpCommandEditorKind } from './agent-workspace-mcp-command-editors.ts';
|
|
11
|
+
import { createAgentWorkspaceMcpCommandEditor, isAgentWorkspaceMcpCommandEditorKind } from './agent-workspace-mcp-command-editors.ts';
|
|
10
12
|
import type { AgentWorkspaceMemoryCommandEditorKind } from './agent-workspace-memory-command-editors.ts';
|
|
11
13
|
import { createAgentWorkspaceMemoryCommandEditor, isAgentWorkspaceMemoryCommandEditorKind } from './agent-workspace-memory-command-editors.ts';
|
|
12
14
|
import type { AgentWorkspaceMediaCommandEditorKind } from './agent-workspace-media-command-editors.ts';
|
|
@@ -23,10 +25,13 @@ import type { AgentWorkspaceTaskCommandEditorKind } from './agent-workspace-task
|
|
|
23
25
|
import { createAgentWorkspaceTaskCommandEditor, isAgentWorkspaceTaskCommandEditorKind } from './agent-workspace-task-command-editors.ts';
|
|
24
26
|
import type { AgentWorkspaceProfileEditorKind } from './agent-workspace-profile-editors.ts';
|
|
25
27
|
import { createAgentWorkspaceProfileEditor, isAgentWorkspaceProfileEditorKind } from './agent-workspace-profile-editors.ts';
|
|
28
|
+
import type { AgentWorkspaceEditorSpec, AgentWorkspaceEditorSpecEntry } from './agent-workspace-command-editor-engine.ts';
|
|
29
|
+
import { createAgentWorkspaceEditorFromTable } from './agent-workspace-command-editor-engine.ts';
|
|
26
30
|
export type { AgentWorkspaceBasicCommandEditorSubmission } from './agent-workspace-basic-command-editor-submission.ts';
|
|
27
31
|
export { buildAgentWorkspaceBasicCommandEditorSubmission } from './agent-workspace-basic-command-editor-submission.ts';
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
/** The kinds `createAgentWorkspaceBasicCommandEditor` builds itself, rather than delegating to a sibling domain module. */
|
|
34
|
+
type AgentWorkspaceBasicOwnCommandEditorKind = Extract<
|
|
30
35
|
AgentWorkspaceEditorKind,
|
|
31
36
|
'knowledge-file' | 'knowledge-urls' | 'knowledge-bookmarks' | 'knowledge-browser-history' | 'knowledge-connector-ingest' | 'knowledge-reindex' | 'tts-prompt' | 'image-input' | 'skill-bundle' | 'skill-discovery-import'
|
|
32
37
|
| 'support-bundle-export' | 'support-bundle-inspect' | 'support-bundle-import'
|
|
@@ -38,15 +43,18 @@ export type AgentWorkspaceBasicCommandEditorKind = AgentWorkspaceAccessCommandEd
|
|
|
38
43
|
| 'routine-discovery-import'
|
|
39
44
|
| 'skill-standard-import'
|
|
40
45
|
| 'skill-standard-export'
|
|
41
|
-
| '
|
|
46
|
+
| 'notify-webhook' | 'notify-webhook-remove' | 'notify-webhook-clear' | 'notify-webhook-test' | 'notify-send'
|
|
42
47
|
| 'secret-set' | 'secret-link' | 'secret-test' | 'secret-delete'
|
|
43
48
|
>;
|
|
44
49
|
|
|
50
|
+
export type AgentWorkspaceBasicCommandEditorKind = AgentWorkspaceAccessCommandEditorKind | AgentWorkspaceChannelCommandEditorKind | AgentWorkspaceKnowledgeCommandEditorKind | AgentWorkspaceLibraryCommandEditorKind | AgentWorkspaceMcpCommandEditorKind | AgentWorkspaceMemoryCommandEditorKind | AgentWorkspaceMediaCommandEditorKind | AgentWorkspaceOperationsCommandEditorKind | AgentWorkspaceProviderCommandEditorKind | AgentWorkspaceSessionCommandEditorKind | AgentWorkspaceSkillBundleCommandEditorKind | AgentWorkspaceTaskCommandEditorKind | AgentWorkspaceProfileEditorKind | AgentWorkspaceBasicOwnCommandEditorKind;
|
|
51
|
+
|
|
45
52
|
export function isAgentWorkspaceBasicCommandEditorKind(kind: AgentWorkspaceEditorKind): kind is AgentWorkspaceBasicCommandEditorKind {
|
|
46
53
|
return isAgentWorkspaceAccessCommandEditorKind(kind)
|
|
47
54
|
|| isAgentWorkspaceChannelCommandEditorKind(kind)
|
|
48
55
|
|| isAgentWorkspaceKnowledgeCommandEditorKind(kind)
|
|
49
56
|
|| isAgentWorkspaceLibraryCommandEditorKind(kind)
|
|
57
|
+
|| isAgentWorkspaceMcpCommandEditorKind(kind)
|
|
50
58
|
|| isAgentWorkspaceMemoryCommandEditorKind(kind)
|
|
51
59
|
|| isAgentWorkspaceMediaCommandEditorKind(kind)
|
|
52
60
|
|| isAgentWorkspaceOperationsCommandEditorKind(kind)
|
|
@@ -84,9 +92,6 @@ export function isAgentWorkspaceBasicCommandEditorKind(kind: AgentWorkspaceEdito
|
|
|
84
92
|
|| kind === 'workplan-status'
|
|
85
93
|
|| kind === 'workplan-delete'
|
|
86
94
|
|| kind === 'workplan-clear-completed'
|
|
87
|
-
|| kind === 'mcp-server'
|
|
88
|
-
|| kind === 'mcp-tools-server'
|
|
89
|
-
|| kind === 'mcp-repair'
|
|
90
95
|
|| kind === 'notify-webhook'
|
|
91
96
|
|| kind === 'notify-webhook-remove'
|
|
92
97
|
|| kind === 'notify-webhook-clear'
|
|
@@ -98,6 +103,425 @@ export function isAgentWorkspaceBasicCommandEditorKind(kind: AgentWorkspaceEdito
|
|
|
98
103
|
|| kind === 'secret-delete';
|
|
99
104
|
}
|
|
100
105
|
|
|
106
|
+
function modelPinUnpinSpec(kind: AgentWorkspaceBasicOwnCommandEditorKind): AgentWorkspaceEditorSpec {
|
|
107
|
+
const pinning = kind === 'model-pin';
|
|
108
|
+
return {
|
|
109
|
+
mode: 'create',
|
|
110
|
+
title: pinning ? 'Pin Model' : 'Unpin Model',
|
|
111
|
+
selectedFieldIndex: 0,
|
|
112
|
+
message: pinning
|
|
113
|
+
? 'Pin one model registry key so it is easy to reuse from the Agent TUI.'
|
|
114
|
+
: 'Remove one pinned model registry key from the Agent model favorites.',
|
|
115
|
+
fields: [
|
|
116
|
+
{
|
|
117
|
+
id: 'model',
|
|
118
|
+
label: 'Model registry key',
|
|
119
|
+
value: '',
|
|
120
|
+
required: true,
|
|
121
|
+
multiline: false,
|
|
122
|
+
hint: 'Use a registry key shown by the model picker, such as openai:gpt-5.5.',
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The field-spec data table for the kinds this module builds itself (the rest are
|
|
130
|
+
* delegated to sibling domain modules above). W4-H2: split out of the single
|
|
131
|
+
* ~600-line `createAgentWorkspaceBasicCommandEditor` if-chain into a data table, the
|
|
132
|
+
* same shape used by every other agent-workspace command-editor domain.
|
|
133
|
+
*/
|
|
134
|
+
const BASIC_OWN_COMMAND_EDITOR_SPECS: Readonly<Record<AgentWorkspaceBasicOwnCommandEditorKind, AgentWorkspaceEditorSpecEntry<AgentWorkspaceBasicOwnCommandEditorKind>>> = {
|
|
135
|
+
'knowledge-bookmarks': {
|
|
136
|
+
mode: 'create',
|
|
137
|
+
title: 'Import Bookmarks into Agent Knowledge',
|
|
138
|
+
selectedFieldIndex: 0,
|
|
139
|
+
message: 'Import a browser bookmark export into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
140
|
+
fields: [
|
|
141
|
+
{ id: 'path', label: 'Bookmark export path', value: '', required: true, multiline: false, hint: 'Path to an HTML or JSON browser bookmark export.' },
|
|
142
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-bookmarks with --yes.' },
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
'knowledge-file': {
|
|
146
|
+
mode: 'create',
|
|
147
|
+
title: 'Ingest File into Agent Knowledge',
|
|
148
|
+
selectedFieldIndex: 0,
|
|
149
|
+
message: 'Import a local source-backed file into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
150
|
+
fields: [
|
|
151
|
+
{ id: 'path', label: 'File path', value: '', required: true, multiline: false, hint: 'Path to a local document or text file to ingest.' },
|
|
152
|
+
{ id: 'title', label: 'Title', value: '', required: false, multiline: false, hint: 'Optional source title.' },
|
|
153
|
+
{ id: 'tags', label: 'Tags', value: '', required: false, multiline: false, hint: 'Comma-separated optional tags.' },
|
|
154
|
+
{ id: 'folder', label: 'Folder', value: '', required: false, multiline: false, hint: 'Optional Agent Knowledge folder path.' },
|
|
155
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge ingest-file with --yes.' },
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
'knowledge-urls': {
|
|
159
|
+
mode: 'create',
|
|
160
|
+
title: 'Import URL List into Agent Knowledge',
|
|
161
|
+
selectedFieldIndex: 0,
|
|
162
|
+
message: 'Import a local newline-delimited URL list into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
163
|
+
fields: [
|
|
164
|
+
{ id: 'path', label: 'URL list path', value: '', required: true, multiline: false, hint: 'Path to a local file containing one URL per line.' },
|
|
165
|
+
{ id: 'allowPrivateHosts', label: 'Allow private hosts', value: '', required: false, multiline: false, hint: 'yes/no. Blank defaults to no.' },
|
|
166
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-urls with --yes.' },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
'knowledge-browser-history': {
|
|
170
|
+
mode: 'create',
|
|
171
|
+
title: 'Import Browser History into Agent Knowledge',
|
|
172
|
+
selectedFieldIndex: 0,
|
|
173
|
+
message: 'Import local browser history/bookmarks into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
174
|
+
fields: [
|
|
175
|
+
{ id: 'browsers', label: 'Browsers', value: '', required: false, multiline: false, hint: 'Optional comma list: chrome, brave, edge, firefox, safari, etc.' },
|
|
176
|
+
{ id: 'sources', label: 'Sources', value: 'history,bookmark', required: false, multiline: false, hint: 'history, bookmark, or both.' },
|
|
177
|
+
{ id: 'limit', label: 'Limit', value: '250', required: false, multiline: false, hint: 'Maximum browser entries to import.' },
|
|
178
|
+
{ id: 'sinceDays', label: 'Since days', value: '', required: false, multiline: false, hint: 'Optional age window, such as 30.' },
|
|
179
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-browser-history with --yes.' },
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
'knowledge-connector-ingest': {
|
|
183
|
+
mode: 'create',
|
|
184
|
+
title: 'Ingest Connector Input',
|
|
185
|
+
selectedFieldIndex: 0,
|
|
186
|
+
message: 'Send explicit connector input into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
187
|
+
fields: [
|
|
188
|
+
{ id: 'connectorId', label: 'Connector id', value: '', required: true, multiline: false, hint: 'Connector id from /knowledge connectors.' },
|
|
189
|
+
{ id: 'input', label: 'Input', value: '', required: false, multiline: true, hint: 'Optional JSON or text input. Ctrl-J inserts a new line.' },
|
|
190
|
+
{ id: 'path', label: 'Path', value: '', required: false, multiline: false, hint: 'Optional local path for connectors that read files.' },
|
|
191
|
+
{ id: 'content', label: 'Content', value: '', required: false, multiline: true, hint: 'Optional raw content for connectors that accept text.' },
|
|
192
|
+
{ id: 'allowPrivateHosts', label: 'Allow private hosts', value: 'no', required: false, multiline: false, hint: 'yes/no. Defaults to no.' },
|
|
193
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge ingest-connector with --yes.' },
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
'knowledge-reindex': {
|
|
197
|
+
mode: 'update',
|
|
198
|
+
title: 'Reindex Agent Knowledge',
|
|
199
|
+
selectedFieldIndex: 0,
|
|
200
|
+
message: 'Rebuild the isolated Agent Knowledge index. Type yes on the final field to confirm.',
|
|
201
|
+
fields: [
|
|
202
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge reindex with --yes.' },
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
'notify-webhook': {
|
|
206
|
+
mode: 'create',
|
|
207
|
+
title: 'Add Notification Webhook',
|
|
208
|
+
selectedFieldIndex: 0,
|
|
209
|
+
message: 'Add one webhook notification target for explicit reminder/routine delivery. Type yes on the final field to confirm.',
|
|
210
|
+
fields: [
|
|
211
|
+
{ id: 'url', label: 'Webhook URL', value: '', required: true, multiline: false, hint: 'HTTP(S) target, for example https://ntfy.sh/my-topic.' },
|
|
212
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify add with --yes.' },
|
|
213
|
+
],
|
|
214
|
+
},
|
|
215
|
+
'notify-webhook-remove': {
|
|
216
|
+
mode: 'delete',
|
|
217
|
+
title: 'Remove Notification Webhook',
|
|
218
|
+
selectedFieldIndex: 0,
|
|
219
|
+
message: 'Remove one configured webhook notification target. Type yes on the final field to confirm.',
|
|
220
|
+
fields: [
|
|
221
|
+
{ id: 'url', label: 'Webhook URL', value: '', required: true, multiline: false, hint: 'Exact HTTP(S) webhook URL to remove from configured notification targets.' },
|
|
222
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify remove with --yes.' },
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
'notify-webhook-clear': {
|
|
226
|
+
mode: 'delete',
|
|
227
|
+
title: 'Clear Notification Webhooks',
|
|
228
|
+
selectedFieldIndex: 0,
|
|
229
|
+
message: 'Remove every configured webhook notification target. Type yes on the final field to confirm.',
|
|
230
|
+
fields: [
|
|
231
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify clear with --yes.' },
|
|
232
|
+
],
|
|
233
|
+
},
|
|
234
|
+
'notify-webhook-test': {
|
|
235
|
+
mode: 'create',
|
|
236
|
+
title: 'Test Notification Webhooks',
|
|
237
|
+
selectedFieldIndex: 0,
|
|
238
|
+
message: 'Send one test notification to configured webhook targets. Type yes on the final field to confirm.',
|
|
239
|
+
fields: [
|
|
240
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify test with --yes.' },
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
'notify-send': {
|
|
244
|
+
mode: 'create',
|
|
245
|
+
title: 'Send Notification',
|
|
246
|
+
selectedFieldIndex: 0,
|
|
247
|
+
message: 'Send one message to configured Agent notification webhook targets. Type yes on the final field to confirm.',
|
|
248
|
+
fields: [
|
|
249
|
+
{ id: 'message', label: 'Message', value: '', required: true, multiline: true, hint: 'Plain-text message to send. Ctrl-J inserts a new line.' },
|
|
250
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify send with --yes.' },
|
|
251
|
+
],
|
|
252
|
+
},
|
|
253
|
+
'secret-set': {
|
|
254
|
+
mode: 'create',
|
|
255
|
+
title: 'Store Secret Value',
|
|
256
|
+
selectedFieldIndex: 0,
|
|
257
|
+
message: 'Store one secret value through the Agent secret manager. The value is masked in this workspace. Type yes on the final field to confirm.',
|
|
258
|
+
fields: [
|
|
259
|
+
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Environment-style key, such as OPENAI_API_KEY.' },
|
|
260
|
+
{ id: 'value', label: 'Secret value', value: '', required: true, multiline: false, hint: 'Raw value to store. It is masked here and never rendered in action results.', redact: true },
|
|
261
|
+
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'project or user. Blank defaults to project.' },
|
|
262
|
+
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'secure or plaintext. Blank defaults to secure.' },
|
|
263
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to store the secret value.' },
|
|
264
|
+
],
|
|
265
|
+
},
|
|
266
|
+
'secret-link': {
|
|
267
|
+
mode: 'create',
|
|
268
|
+
title: 'Link Secret Reference',
|
|
269
|
+
selectedFieldIndex: 0,
|
|
270
|
+
message: 'Link one key to an external goodvibes://secrets/... reference. Type yes on the final field to confirm.',
|
|
271
|
+
fields: [
|
|
272
|
+
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Environment-style key, such as SLACK_BOT_TOKEN.' },
|
|
273
|
+
{ id: 'ref', label: 'Secret ref', value: '', required: true, multiline: false, hint: 'goodvibes://secrets/... reference from a supported provider.' },
|
|
274
|
+
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'project or user. Blank defaults to project.' },
|
|
275
|
+
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'secure or plaintext. Blank defaults to secure.' },
|
|
276
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to link the secret reference.' },
|
|
277
|
+
],
|
|
278
|
+
},
|
|
279
|
+
'secret-test': {
|
|
280
|
+
mode: 'create',
|
|
281
|
+
title: 'Test Secret Reference',
|
|
282
|
+
selectedFieldIndex: 0,
|
|
283
|
+
message: 'Resolve one goodvibes://secrets/... reference and show only resolved/missing status. Type yes on the final field to confirm.',
|
|
284
|
+
fields: [
|
|
285
|
+
{ id: 'ref', label: 'Secret ref', value: '', required: true, multiline: false, hint: 'goodvibes://secrets/... reference to test without printing its value.' },
|
|
286
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to test the secret reference.' },
|
|
287
|
+
],
|
|
288
|
+
},
|
|
289
|
+
'secret-delete': {
|
|
290
|
+
mode: 'delete',
|
|
291
|
+
title: 'Delete Stored Secret',
|
|
292
|
+
selectedFieldIndex: 0,
|
|
293
|
+
message: 'Delete one stored secret key from the selected scope and storage mode. Type yes on the final field to confirm.',
|
|
294
|
+
fields: [
|
|
295
|
+
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Stored key to delete.' },
|
|
296
|
+
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'Optional project or user. Blank lets the command choose the matching stored key.' },
|
|
297
|
+
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'Optional secure or plaintext.' },
|
|
298
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to delete the stored secret key.' },
|
|
299
|
+
],
|
|
300
|
+
},
|
|
301
|
+
'tts-prompt': {
|
|
302
|
+
mode: 'create',
|
|
303
|
+
title: 'Speak Assistant Reply',
|
|
304
|
+
selectedFieldIndex: 0,
|
|
305
|
+
message: 'Submit a normal assistant prompt and play the reply through configured live TTS.',
|
|
306
|
+
fields: [
|
|
307
|
+
{ id: 'prompt', label: 'Prompt', value: '', required: true, multiline: true, hint: 'Assistant prompt to speak. Ctrl-J inserts a new line.' },
|
|
308
|
+
],
|
|
309
|
+
},
|
|
310
|
+
'image-input': {
|
|
311
|
+
mode: 'create',
|
|
312
|
+
title: 'Attach Image Input',
|
|
313
|
+
selectedFieldIndex: 0,
|
|
314
|
+
message: 'Attach an image to the next assistant turn. The existing image command validates file type and model support.',
|
|
315
|
+
fields: [
|
|
316
|
+
{ id: 'path', label: 'Image path', value: '', required: true, multiline: false, hint: 'PNG, JPEG, WebP, or GIF path under the current workspace.' },
|
|
317
|
+
{ id: 'prompt', label: 'Prompt', value: '', required: false, multiline: true, hint: 'Optional prompt. Ctrl-J inserts a new line.' },
|
|
318
|
+
],
|
|
319
|
+
},
|
|
320
|
+
'model-pin': modelPinUnpinSpec,
|
|
321
|
+
'model-unpin': modelPinUnpinSpec,
|
|
322
|
+
'support-bundle-export': {
|
|
323
|
+
mode: 'create',
|
|
324
|
+
title: 'Export Agent Support Bundle',
|
|
325
|
+
selectedFieldIndex: 0,
|
|
326
|
+
message: 'Export a redacted Agent support bundle from this workspace. Type yes on the final field to confirm.',
|
|
327
|
+
fields: [
|
|
328
|
+
{ id: 'path', label: 'Output path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
|
|
329
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /bundle export with --yes.' },
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
'support-bundle-inspect': {
|
|
333
|
+
mode: 'create',
|
|
334
|
+
title: 'Inspect Agent Support Bundle',
|
|
335
|
+
selectedFieldIndex: 0,
|
|
336
|
+
message: 'Inspect a redacted Agent support bundle before import or sharing.',
|
|
337
|
+
fields: [
|
|
338
|
+
{ id: 'path', label: 'Bundle path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative bundle JSON path.' },
|
|
339
|
+
],
|
|
340
|
+
},
|
|
341
|
+
'support-bundle-import': {
|
|
342
|
+
mode: 'update',
|
|
343
|
+
title: 'Import Agent Support Bundle',
|
|
344
|
+
selectedFieldIndex: 0,
|
|
345
|
+
message: 'Import non-redacted config values from a reviewed Agent support bundle. Type yes on the final field to confirm.',
|
|
346
|
+
fields: [
|
|
347
|
+
{ id: 'path', label: 'Bundle path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative bundle JSON path to import.' },
|
|
348
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /bundle import with --yes.' },
|
|
349
|
+
],
|
|
350
|
+
},
|
|
351
|
+
'subscription-inspect': {
|
|
352
|
+
mode: 'create',
|
|
353
|
+
title: 'Inspect Provider Subscription',
|
|
354
|
+
selectedFieldIndex: 0,
|
|
355
|
+
message: 'Inspect one provider subscription route without starting login or printing token values.',
|
|
356
|
+
fields: [
|
|
357
|
+
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Subscription provider id, such as openai.' },
|
|
358
|
+
],
|
|
359
|
+
},
|
|
360
|
+
'subscription-login-start': {
|
|
361
|
+
mode: 'create',
|
|
362
|
+
title: 'Start Provider Subscription Login',
|
|
363
|
+
selectedFieldIndex: 0,
|
|
364
|
+
message: 'Begin one provider subscription OAuth login, save the pending session, and return here for completion.',
|
|
365
|
+
fields: [
|
|
366
|
+
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Subscription provider id, such as openai.' },
|
|
367
|
+
{ id: 'openBrowser', label: 'Open browser', value: 'yes', required: false, multiline: false, hint: 'yes/no. Use no to print the authorization URL only.' },
|
|
368
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to save pending login state and open or show the authorization URL.' },
|
|
369
|
+
],
|
|
370
|
+
},
|
|
371
|
+
'subscription-login-finish': {
|
|
372
|
+
mode: 'update',
|
|
373
|
+
title: 'Finish Provider Subscription Login',
|
|
374
|
+
selectedFieldIndex: 0,
|
|
375
|
+
message: 'Finish a pending provider subscription OAuth login from a code or redirected URL and save the subscription session.',
|
|
376
|
+
fields: [
|
|
377
|
+
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id used when starting login.' },
|
|
378
|
+
{ id: 'code', label: 'Code or redirect URL', value: '', required: true, multiline: false, hint: 'OAuth code or full redirect URL containing code=...' },
|
|
379
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to exchange the code and save the provider subscription session.' },
|
|
380
|
+
],
|
|
381
|
+
},
|
|
382
|
+
'subscription-logout': {
|
|
383
|
+
mode: 'delete',
|
|
384
|
+
title: 'Logout Provider Subscription',
|
|
385
|
+
selectedFieldIndex: 0,
|
|
386
|
+
message: 'Remove one active or pending provider subscription session. Ambient API key resolution applies again if configured.',
|
|
387
|
+
fields: [
|
|
388
|
+
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Stored subscription provider id.' },
|
|
389
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to remove active or pending subscription state.' },
|
|
390
|
+
],
|
|
391
|
+
},
|
|
392
|
+
'delegate-task': {
|
|
393
|
+
mode: 'create',
|
|
394
|
+
title: 'Delegate Build Work to GoodVibes TUI',
|
|
395
|
+
selectedFieldIndex: 0,
|
|
396
|
+
message: 'Send one explicit build/fix/review task to GoodVibes TUI/shared-session routes with a visible handoff brief. Type yes on the final field to confirm.',
|
|
397
|
+
fields: [
|
|
398
|
+
{ id: 'task', label: 'Original task', value: '', required: true, multiline: true, hint: 'Paste the full original user ask. Ctrl-J inserts a new line.' },
|
|
399
|
+
{ id: 'reason', label: 'Why delegate', value: '', required: false, multiline: true, hint: 'Isolation, remote host, separate worktree, parallelism, TUI workflow, or review need. Ctrl-J inserts a new line.' },
|
|
400
|
+
{ id: 'success', label: 'Success criteria', value: '', required: false, multiline: true, hint: 'Expected evidence: diff, tests, artifact, findings, or completion signal. Ctrl-J inserts a new line.' },
|
|
401
|
+
{ id: 'workspace', label: 'Workspace hint', value: '', required: false, multiline: false, hint: 'Optional target workspace, branch, worktree, machine, or package.' },
|
|
402
|
+
{ id: 'priority', label: 'Priority', value: '', required: false, multiline: false, hint: 'Optional priority, deadline, or sequencing note.' },
|
|
403
|
+
{ id: 'review', label: 'Request delegated review', value: '', required: false, multiline: false, hint: 'yes/no. Blank means no delegated review request.' },
|
|
404
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /delegate for this task.' },
|
|
405
|
+
],
|
|
406
|
+
},
|
|
407
|
+
'workplan-add': {
|
|
408
|
+
mode: 'create',
|
|
409
|
+
title: 'Add Work Plan Item',
|
|
410
|
+
selectedFieldIndex: 0,
|
|
411
|
+
message: 'Create one visible work plan item from the Agent workspace.',
|
|
412
|
+
fields: [
|
|
413
|
+
{ id: 'title', label: 'Title', value: '', required: true, multiline: true, hint: 'Task title. Ctrl-J inserts a new line.' },
|
|
414
|
+
{ id: 'owner', label: 'Owner', value: '', required: false, multiline: false, hint: 'Optional owner label.' },
|
|
415
|
+
{ id: 'source', label: 'Source', value: '', required: false, multiline: false, hint: 'Optional source label. Blank defaults to manual.' },
|
|
416
|
+
{ id: 'notes', label: 'Notes', value: '', required: false, multiline: true, hint: 'Optional notes. Ctrl-J inserts a new line.' },
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
'workplan-show': {
|
|
420
|
+
mode: 'create',
|
|
421
|
+
title: 'Show Work Plan Detail',
|
|
422
|
+
selectedFieldIndex: 0,
|
|
423
|
+
message: 'Print the detailed work plan from the Agent workspace without mutating work state.',
|
|
424
|
+
fields: [
|
|
425
|
+
{ id: 'format', label: 'Format', value: '', required: false, multiline: false, hint: 'Optional. Blank uses the default detail view; markdown also works.' },
|
|
426
|
+
],
|
|
427
|
+
},
|
|
428
|
+
'workplan-status': {
|
|
429
|
+
mode: 'update',
|
|
430
|
+
title: 'Update Work Plan Status',
|
|
431
|
+
selectedFieldIndex: 0,
|
|
432
|
+
message: 'Update one visible work plan item status from the Agent workspace.',
|
|
433
|
+
fields: [
|
|
434
|
+
{ id: 'id', label: 'Work item id', value: '', required: true, multiline: false, hint: 'Existing work plan item id.' },
|
|
435
|
+
{ id: 'status', label: 'Status', value: '', required: true, multiline: false, hint: 'pending, start, blocked, done, failed, or cancelled.' },
|
|
436
|
+
],
|
|
437
|
+
},
|
|
438
|
+
'workplan-delete': {
|
|
439
|
+
mode: 'delete',
|
|
440
|
+
title: 'Remove Work Plan Item',
|
|
441
|
+
selectedFieldIndex: 0,
|
|
442
|
+
message: 'Remove one work plan item. Type yes on the final field to confirm.',
|
|
443
|
+
fields: [
|
|
444
|
+
{ id: 'id', label: 'Work item id', value: '', required: true, multiline: false, hint: 'Existing work plan item id.' },
|
|
445
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /workplan remove with --yes.' },
|
|
446
|
+
],
|
|
447
|
+
},
|
|
448
|
+
'workplan-clear-completed': {
|
|
449
|
+
mode: 'delete',
|
|
450
|
+
title: 'Clear Completed Work Plan Items',
|
|
451
|
+
selectedFieldIndex: 0,
|
|
452
|
+
message: 'Clear completed and cancelled work plan items. Type yes to confirm.',
|
|
453
|
+
fields: [
|
|
454
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /workplan clear-completed with --yes.' },
|
|
455
|
+
],
|
|
456
|
+
},
|
|
457
|
+
'skill-discovery-import': {
|
|
458
|
+
mode: 'create',
|
|
459
|
+
title: 'Import Discovered Skill',
|
|
460
|
+
selectedFieldIndex: 0,
|
|
461
|
+
message: 'Import one discovered SKILL.md or .md skill file into the Agent-local skill registry. Type yes on the final field to confirm.',
|
|
462
|
+
fields: [
|
|
463
|
+
{ id: 'name', label: 'Discovered skill', value: '', required: true, multiline: false, hint: 'Name shown by /skills discover.' },
|
|
464
|
+
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
465
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /skills import-discovered with --yes.' },
|
|
466
|
+
],
|
|
467
|
+
},
|
|
468
|
+
'persona-discovery-import': {
|
|
469
|
+
mode: 'create',
|
|
470
|
+
title: 'Import Discovered Persona',
|
|
471
|
+
selectedFieldIndex: 0,
|
|
472
|
+
message: 'Import one discovered persona markdown file into the Agent-local persona registry. Type yes on the final field to confirm.',
|
|
473
|
+
fields: [
|
|
474
|
+
{ id: 'name', label: 'Discovered persona', value: '', required: true, multiline: false, hint: 'Name shown by /personas discover.' },
|
|
475
|
+
{ id: 'use', label: 'Use now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
476
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /personas import-discovered with --yes.' },
|
|
477
|
+
],
|
|
478
|
+
},
|
|
479
|
+
'routine-discovery-import': {
|
|
480
|
+
mode: 'create',
|
|
481
|
+
title: 'Import Discovered Routine',
|
|
482
|
+
selectedFieldIndex: 0,
|
|
483
|
+
message: 'Import one discovered routine markdown file into the Agent-local routine registry. Type yes on the final field to confirm.',
|
|
484
|
+
fields: [
|
|
485
|
+
{ id: 'name', label: 'Discovered routine', value: '', required: true, multiline: false, hint: 'Name shown by /routines discover.' },
|
|
486
|
+
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
487
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /routines import-discovered with --yes.' },
|
|
488
|
+
],
|
|
489
|
+
},
|
|
490
|
+
'skill-standard-import': {
|
|
491
|
+
mode: 'create',
|
|
492
|
+
title: 'Import Shared Skill',
|
|
493
|
+
selectedFieldIndex: 0,
|
|
494
|
+
message: 'Import one SKILL.md file in the open skill format into the Agent-local skill library. The skill will wait for your review before it can be enabled.',
|
|
495
|
+
fields: [
|
|
496
|
+
{ id: 'path', label: 'Path to SKILL.md', value: '', required: true, multiline: false, hint: 'Full path to a SKILL.md file.' },
|
|
497
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to import with --yes.' },
|
|
498
|
+
],
|
|
499
|
+
},
|
|
500
|
+
'skill-standard-export': {
|
|
501
|
+
mode: 'create',
|
|
502
|
+
title: 'Export Skill to Share',
|
|
503
|
+
selectedFieldIndex: 0,
|
|
504
|
+
message: 'Export one Agent-local skill as a SKILL.md folder you can publish or hand to another assistant.',
|
|
505
|
+
fields: [
|
|
506
|
+
{ id: 'id', label: 'Skill id or name', value: '', required: true, multiline: false, hint: 'Local skill id or name.' },
|
|
507
|
+
{ id: 'dest', label: 'Destination folder', value: '', required: true, multiline: false, hint: 'Directory to write <slug>/SKILL.md into.' },
|
|
508
|
+
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to export with --yes.' },
|
|
509
|
+
],
|
|
510
|
+
},
|
|
511
|
+
'skill-bundle': {
|
|
512
|
+
mode: 'create',
|
|
513
|
+
title: 'Create Skill Bundle',
|
|
514
|
+
selectedFieldIndex: 0,
|
|
515
|
+
message: 'Group existing local skills into a reviewable bundle that can be enabled together.',
|
|
516
|
+
fields: [
|
|
517
|
+
{ id: 'name', label: 'Bundle name', value: '', required: true, multiline: false, hint: 'Short bundle name.' },
|
|
518
|
+
{ id: 'description', label: 'Description', value: '', required: true, multiline: false, hint: 'One-line bundle summary.' },
|
|
519
|
+
{ id: 'skills', label: 'Skill ids', value: '', required: true, multiline: false, hint: 'Comma-separated existing local skill ids.' },
|
|
520
|
+
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
521
|
+
],
|
|
522
|
+
},
|
|
523
|
+
};
|
|
524
|
+
|
|
101
525
|
export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasicCommandEditorKind): AgentWorkspaceLocalEditor {
|
|
102
526
|
if (isAgentWorkspaceAccessCommandEditorKind(kind)) {
|
|
103
527
|
return createAgentWorkspaceAccessCommandEditor(kind);
|
|
@@ -111,6 +535,9 @@ export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasic
|
|
|
111
535
|
if (isAgentWorkspaceLibraryCommandEditorKind(kind)) {
|
|
112
536
|
return createAgentWorkspaceLibraryCommandEditor(kind);
|
|
113
537
|
}
|
|
538
|
+
if (isAgentWorkspaceMcpCommandEditorKind(kind)) {
|
|
539
|
+
return createAgentWorkspaceMcpCommandEditor(kind);
|
|
540
|
+
}
|
|
114
541
|
if (isAgentWorkspaceMemoryCommandEditorKind(kind)) {
|
|
115
542
|
return createAgentWorkspaceMemoryCommandEditor(kind);
|
|
116
543
|
}
|
|
@@ -135,563 +562,5 @@ export function createAgentWorkspaceBasicCommandEditor(kind: AgentWorkspaceBasic
|
|
|
135
562
|
if (isAgentWorkspaceProfileEditorKind(kind)) {
|
|
136
563
|
return createAgentWorkspaceProfileEditor(kind);
|
|
137
564
|
}
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
kind,
|
|
141
|
-
mode: 'create',
|
|
142
|
-
title: 'Import Bookmarks into Agent Knowledge',
|
|
143
|
-
selectedFieldIndex: 0,
|
|
144
|
-
message: 'Import a browser bookmark export into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
145
|
-
fields: [
|
|
146
|
-
{ id: 'path', label: 'Bookmark export path', value: '', required: true, multiline: false, hint: 'Path to an HTML or JSON browser bookmark export.' },
|
|
147
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-bookmarks with --yes.' },
|
|
148
|
-
],
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
if (kind === 'knowledge-file') {
|
|
152
|
-
return {
|
|
153
|
-
kind,
|
|
154
|
-
mode: 'create',
|
|
155
|
-
title: 'Ingest File into Agent Knowledge',
|
|
156
|
-
selectedFieldIndex: 0,
|
|
157
|
-
message: 'Import a local source-backed file into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
158
|
-
fields: [
|
|
159
|
-
{ id: 'path', label: 'File path', value: '', required: true, multiline: false, hint: 'Path to a local document or text file to ingest.' },
|
|
160
|
-
{ id: 'title', label: 'Title', value: '', required: false, multiline: false, hint: 'Optional source title.' },
|
|
161
|
-
{ id: 'tags', label: 'Tags', value: '', required: false, multiline: false, hint: 'Comma-separated optional tags.' },
|
|
162
|
-
{ id: 'folder', label: 'Folder', value: '', required: false, multiline: false, hint: 'Optional Agent Knowledge folder path.' },
|
|
163
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge ingest-file with --yes.' },
|
|
164
|
-
],
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
if (kind === 'knowledge-urls') {
|
|
168
|
-
return {
|
|
169
|
-
kind,
|
|
170
|
-
mode: 'create',
|
|
171
|
-
title: 'Import URL List into Agent Knowledge',
|
|
172
|
-
selectedFieldIndex: 0,
|
|
173
|
-
message: 'Import a local newline-delimited URL list into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
174
|
-
fields: [
|
|
175
|
-
{ id: 'path', label: 'URL list path', value: '', required: true, multiline: false, hint: 'Path to a local file containing one URL per line.' },
|
|
176
|
-
{ id: 'allowPrivateHosts', label: 'Allow private hosts', value: '', required: false, multiline: false, hint: 'yes/no. Blank defaults to no.' },
|
|
177
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-urls with --yes.' },
|
|
178
|
-
],
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
if (kind === 'knowledge-browser-history') {
|
|
182
|
-
return {
|
|
183
|
-
kind,
|
|
184
|
-
mode: 'create',
|
|
185
|
-
title: 'Import Browser History into Agent Knowledge',
|
|
186
|
-
selectedFieldIndex: 0,
|
|
187
|
-
message: 'Import local browser history/bookmarks into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
188
|
-
fields: [
|
|
189
|
-
{ id: 'browsers', label: 'Browsers', value: '', required: false, multiline: false, hint: 'Optional comma list: chrome, brave, edge, firefox, safari, etc.' },
|
|
190
|
-
{ id: 'sources', label: 'Sources', value: 'history,bookmark', required: false, multiline: false, hint: 'history, bookmark, or both.' },
|
|
191
|
-
{ id: 'limit', label: 'Limit', value: '250', required: false, multiline: false, hint: 'Maximum browser entries to import.' },
|
|
192
|
-
{ id: 'sinceDays', label: 'Since days', value: '', required: false, multiline: false, hint: 'Optional age window, such as 30.' },
|
|
193
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge import-browser-history with --yes.' },
|
|
194
|
-
],
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
if (kind === 'knowledge-connector-ingest') {
|
|
198
|
-
return {
|
|
199
|
-
kind,
|
|
200
|
-
mode: 'create',
|
|
201
|
-
title: 'Ingest Connector Input',
|
|
202
|
-
selectedFieldIndex: 0,
|
|
203
|
-
message: 'Send explicit connector input into the isolated Agent Knowledge segment. Type yes on the final field to confirm.',
|
|
204
|
-
fields: [
|
|
205
|
-
{ id: 'connectorId', label: 'Connector id', value: '', required: true, multiline: false, hint: 'Connector id from /knowledge connectors.' },
|
|
206
|
-
{ id: 'input', label: 'Input', value: '', required: false, multiline: true, hint: 'Optional JSON or text input. Ctrl-J inserts a new line.' },
|
|
207
|
-
{ id: 'path', label: 'Path', value: '', required: false, multiline: false, hint: 'Optional local path for connectors that read files.' },
|
|
208
|
-
{ id: 'content', label: 'Content', value: '', required: false, multiline: true, hint: 'Optional raw content for connectors that accept text.' },
|
|
209
|
-
{ id: 'allowPrivateHosts', label: 'Allow private hosts', value: 'no', required: false, multiline: false, hint: 'yes/no. Defaults to no.' },
|
|
210
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge ingest-connector with --yes.' },
|
|
211
|
-
],
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
if (kind === 'knowledge-reindex') {
|
|
215
|
-
return {
|
|
216
|
-
kind,
|
|
217
|
-
mode: 'update',
|
|
218
|
-
title: 'Reindex Agent Knowledge',
|
|
219
|
-
selectedFieldIndex: 0,
|
|
220
|
-
message: 'Rebuild the isolated Agent Knowledge index. Type yes on the final field to confirm.',
|
|
221
|
-
fields: [
|
|
222
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /knowledge reindex with --yes.' },
|
|
223
|
-
],
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
if (kind === 'mcp-server') {
|
|
227
|
-
return {
|
|
228
|
-
kind,
|
|
229
|
-
mode: 'create',
|
|
230
|
-
title: 'Add MCP Server',
|
|
231
|
-
selectedFieldIndex: 0,
|
|
232
|
-
message: 'Add or update one MCP server from the Agent workspace. Type yes on the final field to confirm.',
|
|
233
|
-
fields: [
|
|
234
|
-
{ id: 'name', label: 'Server name', value: '', required: true, multiline: false, hint: 'Letters, numbers, dot, underscore, and dash only.' },
|
|
235
|
-
{ id: 'command', label: 'Command', value: '', required: true, multiline: false, hint: 'Executable command, such as bunx, npx, uvx, or a full local binary path.' },
|
|
236
|
-
{ id: 'args', label: 'Arguments', value: '', required: false, multiline: false, hint: 'Optional command arguments. Quotes are supported.' },
|
|
237
|
-
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'Optional. Defaults to project. Use project or global.' },
|
|
238
|
-
{ id: 'role', label: 'Role', value: '', required: false, multiline: false, hint: 'Optional. general, docs, filesystem, git, database, browser, automation, ops, or remote.' },
|
|
239
|
-
{ id: 'trust', label: 'Trust mode', value: '', required: false, multiline: false, hint: 'Optional. Defaults to constrained. Use constrained, ask-on-risk, or blocked. Use settings for allow-all.' },
|
|
240
|
-
{ id: 'env', label: 'Env refs', value: '', required: false, multiline: false, hint: 'Comma-separated KEY=VALUE entries. Prefer secret refs, not raw secrets.' },
|
|
241
|
-
{ id: 'paths', label: 'Allowed paths', value: '', required: false, multiline: false, hint: 'Comma-separated path allowlist entries.' },
|
|
242
|
-
{ id: 'hosts', label: 'Allowed hosts', value: '', required: false, multiline: false, hint: 'Comma-separated host allowlist entries.' },
|
|
243
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to save the MCP server through the TUI command router.' },
|
|
244
|
-
],
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
if (kind === 'mcp-tools-server') {
|
|
248
|
-
return {
|
|
249
|
-
kind,
|
|
250
|
-
mode: 'create',
|
|
251
|
-
title: 'Show MCP Server Tools',
|
|
252
|
-
selectedFieldIndex: 0,
|
|
253
|
-
message: 'List tools exposed by one MCP server without changing server trust, role, or config.',
|
|
254
|
-
fields: [
|
|
255
|
-
{ id: 'server', label: 'Server name', value: '', required: true, multiline: false, hint: 'MCP server name from MCP Review or the fullscreen MCP workspace.' },
|
|
256
|
-
],
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
if (kind === 'mcp-repair') {
|
|
260
|
-
return {
|
|
261
|
-
kind,
|
|
262
|
-
mode: 'create',
|
|
263
|
-
title: 'Show MCP Repair Guidance',
|
|
264
|
-
selectedFieldIndex: 0,
|
|
265
|
-
message: 'Show read-only repair guidance for one MCP server. This does not approve quarantine, change trust, or reload the runtime.',
|
|
266
|
-
fields: [
|
|
267
|
-
{ id: 'server', label: 'Server name', value: '', required: true, multiline: false, hint: 'MCP server name from MCP Review or Auth review.' },
|
|
268
|
-
],
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
if (kind === 'notify-webhook') {
|
|
272
|
-
return {
|
|
273
|
-
kind,
|
|
274
|
-
mode: 'create',
|
|
275
|
-
title: 'Add Notification Webhook',
|
|
276
|
-
selectedFieldIndex: 0,
|
|
277
|
-
message: 'Add one webhook notification target for explicit reminder/routine delivery. Type yes on the final field to confirm.',
|
|
278
|
-
fields: [
|
|
279
|
-
{ id: 'url', label: 'Webhook URL', value: '', required: true, multiline: false, hint: 'HTTP(S) target, for example https://ntfy.sh/my-topic.' },
|
|
280
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify add with --yes.' },
|
|
281
|
-
],
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
if (kind === 'notify-webhook-remove') {
|
|
285
|
-
return {
|
|
286
|
-
kind,
|
|
287
|
-
mode: 'delete',
|
|
288
|
-
title: 'Remove Notification Webhook',
|
|
289
|
-
selectedFieldIndex: 0,
|
|
290
|
-
message: 'Remove one configured webhook notification target. Type yes on the final field to confirm.',
|
|
291
|
-
fields: [
|
|
292
|
-
{ id: 'url', label: 'Webhook URL', value: '', required: true, multiline: false, hint: 'Exact HTTP(S) webhook URL to remove from configured notification targets.' },
|
|
293
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify remove with --yes.' },
|
|
294
|
-
],
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
if (kind === 'notify-webhook-clear') {
|
|
298
|
-
return {
|
|
299
|
-
kind,
|
|
300
|
-
mode: 'delete',
|
|
301
|
-
title: 'Clear Notification Webhooks',
|
|
302
|
-
selectedFieldIndex: 0,
|
|
303
|
-
message: 'Remove every configured webhook notification target. Type yes on the final field to confirm.',
|
|
304
|
-
fields: [
|
|
305
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify clear with --yes.' },
|
|
306
|
-
],
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
if (kind === 'notify-webhook-test') {
|
|
310
|
-
return {
|
|
311
|
-
kind,
|
|
312
|
-
mode: 'create',
|
|
313
|
-
title: 'Test Notification Webhooks',
|
|
314
|
-
selectedFieldIndex: 0,
|
|
315
|
-
message: 'Send one test notification to configured webhook targets. Type yes on the final field to confirm.',
|
|
316
|
-
fields: [
|
|
317
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify test with --yes.' },
|
|
318
|
-
],
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
if (kind === 'notify-send') {
|
|
322
|
-
return {
|
|
323
|
-
kind,
|
|
324
|
-
mode: 'create',
|
|
325
|
-
title: 'Send Notification',
|
|
326
|
-
selectedFieldIndex: 0,
|
|
327
|
-
message: 'Send one message to configured Agent notification webhook targets. Type yes on the final field to confirm.',
|
|
328
|
-
fields: [
|
|
329
|
-
{ id: 'message', label: 'Message', value: '', required: true, multiline: true, hint: 'Plain-text message to send. Ctrl-J inserts a new line.' },
|
|
330
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /notify send with --yes.' },
|
|
331
|
-
],
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
if (kind === 'secret-set') {
|
|
335
|
-
return {
|
|
336
|
-
kind,
|
|
337
|
-
mode: 'create',
|
|
338
|
-
title: 'Store Secret Value',
|
|
339
|
-
selectedFieldIndex: 0,
|
|
340
|
-
message: 'Store one secret value through the Agent secret manager. The value is masked in this workspace. Type yes on the final field to confirm.',
|
|
341
|
-
fields: [
|
|
342
|
-
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Environment-style key, such as OPENAI_API_KEY.' },
|
|
343
|
-
{ id: 'value', label: 'Secret value', value: '', required: true, multiline: false, hint: 'Raw value to store. It is masked here and never rendered in action results.', redact: true },
|
|
344
|
-
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'project or user. Blank defaults to project.' },
|
|
345
|
-
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'secure or plaintext. Blank defaults to secure.' },
|
|
346
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to store the secret value.' },
|
|
347
|
-
],
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
if (kind === 'secret-link') {
|
|
351
|
-
return {
|
|
352
|
-
kind,
|
|
353
|
-
mode: 'create',
|
|
354
|
-
title: 'Link Secret Reference',
|
|
355
|
-
selectedFieldIndex: 0,
|
|
356
|
-
message: 'Link one key to an external goodvibes://secrets/... reference. Type yes on the final field to confirm.',
|
|
357
|
-
fields: [
|
|
358
|
-
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Environment-style key, such as SLACK_BOT_TOKEN.' },
|
|
359
|
-
{ id: 'ref', label: 'Secret ref', value: '', required: true, multiline: false, hint: 'goodvibes://secrets/... reference from a supported provider.' },
|
|
360
|
-
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'project or user. Blank defaults to project.' },
|
|
361
|
-
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'secure or plaintext. Blank defaults to secure.' },
|
|
362
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to link the secret reference.' },
|
|
363
|
-
],
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
if (kind === 'secret-test') {
|
|
367
|
-
return {
|
|
368
|
-
kind,
|
|
369
|
-
mode: 'create',
|
|
370
|
-
title: 'Test Secret Reference',
|
|
371
|
-
selectedFieldIndex: 0,
|
|
372
|
-
message: 'Resolve one goodvibes://secrets/... reference and show only resolved/missing status. Type yes on the final field to confirm.',
|
|
373
|
-
fields: [
|
|
374
|
-
{ id: 'ref', label: 'Secret ref', value: '', required: true, multiline: false, hint: 'goodvibes://secrets/... reference to test without printing its value.' },
|
|
375
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to test the secret reference.' },
|
|
376
|
-
],
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
if (kind === 'secret-delete') {
|
|
380
|
-
return {
|
|
381
|
-
kind,
|
|
382
|
-
mode: 'delete',
|
|
383
|
-
title: 'Delete Stored Secret',
|
|
384
|
-
selectedFieldIndex: 0,
|
|
385
|
-
message: 'Delete one stored secret key from the selected scope and storage mode. Type yes on the final field to confirm.',
|
|
386
|
-
fields: [
|
|
387
|
-
{ id: 'key', label: 'Secret key', value: '', required: true, multiline: false, hint: 'Stored key to delete.' },
|
|
388
|
-
{ id: 'scope', label: 'Scope', value: '', required: false, multiline: false, hint: 'Optional project or user. Blank lets the command choose the matching stored key.' },
|
|
389
|
-
{ id: 'storage', label: 'Storage', value: '', required: false, multiline: false, hint: 'Optional secure or plaintext.' },
|
|
390
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to delete the stored secret key.' },
|
|
391
|
-
],
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
if (kind === 'tts-prompt') {
|
|
395
|
-
return {
|
|
396
|
-
kind,
|
|
397
|
-
mode: 'create',
|
|
398
|
-
title: 'Speak Assistant Reply',
|
|
399
|
-
selectedFieldIndex: 0,
|
|
400
|
-
message: 'Submit a normal assistant prompt and play the reply through configured live TTS.',
|
|
401
|
-
fields: [
|
|
402
|
-
{ id: 'prompt', label: 'Prompt', value: '', required: true, multiline: true, hint: 'Assistant prompt to speak. Ctrl-J inserts a new line.' },
|
|
403
|
-
],
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
if (kind === 'image-input') {
|
|
407
|
-
return {
|
|
408
|
-
kind,
|
|
409
|
-
mode: 'create',
|
|
410
|
-
title: 'Attach Image Input',
|
|
411
|
-
selectedFieldIndex: 0,
|
|
412
|
-
message: 'Attach an image to the next assistant turn. The existing image command validates file type and model support.',
|
|
413
|
-
fields: [
|
|
414
|
-
{ id: 'path', label: 'Image path', value: '', required: true, multiline: false, hint: 'PNG, JPEG, WebP, or GIF path under the current workspace.' },
|
|
415
|
-
{ id: 'prompt', label: 'Prompt', value: '', required: false, multiline: true, hint: 'Optional prompt. Ctrl-J inserts a new line.' },
|
|
416
|
-
],
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
if (kind === 'model-pin' || kind === 'model-unpin') {
|
|
420
|
-
const pinning = kind === 'model-pin';
|
|
421
|
-
return {
|
|
422
|
-
kind,
|
|
423
|
-
mode: 'create',
|
|
424
|
-
title: pinning ? 'Pin Model' : 'Unpin Model',
|
|
425
|
-
selectedFieldIndex: 0,
|
|
426
|
-
message: pinning
|
|
427
|
-
? 'Pin one model registry key so it is easy to reuse from the Agent TUI.'
|
|
428
|
-
: 'Remove one pinned model registry key from the Agent model favorites.',
|
|
429
|
-
fields: [
|
|
430
|
-
{
|
|
431
|
-
id: 'model',
|
|
432
|
-
label: 'Model registry key',
|
|
433
|
-
value: '',
|
|
434
|
-
required: true,
|
|
435
|
-
multiline: false,
|
|
436
|
-
hint: 'Use a registry key shown by the model picker, such as openai:gpt-5.5.',
|
|
437
|
-
},
|
|
438
|
-
],
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
if (kind === 'support-bundle-export') {
|
|
442
|
-
return {
|
|
443
|
-
kind,
|
|
444
|
-
mode: 'create',
|
|
445
|
-
title: 'Export Agent Support Bundle',
|
|
446
|
-
selectedFieldIndex: 0,
|
|
447
|
-
message: 'Export a redacted Agent support bundle from this workspace. Type yes on the final field to confirm.',
|
|
448
|
-
fields: [
|
|
449
|
-
{ id: 'path', label: 'Output path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative JSON path to write.' },
|
|
450
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /bundle export with --yes.' },
|
|
451
|
-
],
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
if (kind === 'support-bundle-inspect') {
|
|
455
|
-
return {
|
|
456
|
-
kind,
|
|
457
|
-
mode: 'create',
|
|
458
|
-
title: 'Inspect Agent Support Bundle',
|
|
459
|
-
selectedFieldIndex: 0,
|
|
460
|
-
message: 'Inspect a redacted Agent support bundle before import or sharing.',
|
|
461
|
-
fields: [
|
|
462
|
-
{ id: 'path', label: 'Bundle path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative bundle JSON path.' },
|
|
463
|
-
],
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
if (kind === 'support-bundle-import') {
|
|
467
|
-
return {
|
|
468
|
-
kind,
|
|
469
|
-
mode: 'update',
|
|
470
|
-
title: 'Import Agent Support Bundle',
|
|
471
|
-
selectedFieldIndex: 0,
|
|
472
|
-
message: 'Import non-redacted config values from a reviewed Agent support bundle. Type yes on the final field to confirm.',
|
|
473
|
-
fields: [
|
|
474
|
-
{ id: 'path', label: 'Bundle path', value: 'goodvibes-agent-bundle.json', required: true, multiline: false, hint: 'Workspace-relative bundle JSON path to import.' },
|
|
475
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /bundle import with --yes.' },
|
|
476
|
-
],
|
|
477
|
-
};
|
|
478
|
-
}
|
|
479
|
-
if (kind === 'subscription-inspect') {
|
|
480
|
-
return {
|
|
481
|
-
kind,
|
|
482
|
-
mode: 'create',
|
|
483
|
-
title: 'Inspect Provider Subscription',
|
|
484
|
-
selectedFieldIndex: 0,
|
|
485
|
-
message: 'Inspect one provider subscription route without starting login or printing token values.',
|
|
486
|
-
fields: [
|
|
487
|
-
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Subscription provider id, such as openai.' },
|
|
488
|
-
],
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
if (kind === 'subscription-login-start') {
|
|
492
|
-
return {
|
|
493
|
-
kind,
|
|
494
|
-
mode: 'create',
|
|
495
|
-
title: 'Start Provider Subscription Login',
|
|
496
|
-
selectedFieldIndex: 0,
|
|
497
|
-
message: 'Begin one provider subscription OAuth login, save the pending session, and return here for completion.',
|
|
498
|
-
fields: [
|
|
499
|
-
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Subscription provider id, such as openai.' },
|
|
500
|
-
{ id: 'openBrowser', label: 'Open browser', value: 'yes', required: false, multiline: false, hint: 'yes/no. Use no to print the authorization URL only.' },
|
|
501
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to save pending login state and open or show the authorization URL.' },
|
|
502
|
-
],
|
|
503
|
-
};
|
|
504
|
-
}
|
|
505
|
-
if (kind === 'subscription-login-finish') {
|
|
506
|
-
return {
|
|
507
|
-
kind,
|
|
508
|
-
mode: 'update',
|
|
509
|
-
title: 'Finish Provider Subscription Login',
|
|
510
|
-
selectedFieldIndex: 0,
|
|
511
|
-
message: 'Finish a pending provider subscription OAuth login from a code or redirected URL and save the subscription session.',
|
|
512
|
-
fields: [
|
|
513
|
-
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Provider id used when starting login.' },
|
|
514
|
-
{ id: 'code', label: 'Code or redirect URL', value: '', required: true, multiline: false, hint: 'OAuth code or full redirect URL containing code=...' },
|
|
515
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to exchange the code and save the provider subscription session.' },
|
|
516
|
-
],
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
if (kind === 'subscription-logout') {
|
|
520
|
-
return {
|
|
521
|
-
kind,
|
|
522
|
-
mode: 'delete',
|
|
523
|
-
title: 'Logout Provider Subscription',
|
|
524
|
-
selectedFieldIndex: 0,
|
|
525
|
-
message: 'Remove one active or pending provider subscription session. Ambient API key resolution applies again if configured.',
|
|
526
|
-
fields: [
|
|
527
|
-
{ id: 'provider', label: 'Provider', value: 'openai', required: true, multiline: false, hint: 'Stored subscription provider id.' },
|
|
528
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to remove active or pending subscription state.' },
|
|
529
|
-
],
|
|
530
|
-
};
|
|
531
|
-
}
|
|
532
|
-
if (kind === 'delegate-task') {
|
|
533
|
-
return {
|
|
534
|
-
kind,
|
|
535
|
-
mode: 'create',
|
|
536
|
-
title: 'Delegate Build Work to GoodVibes TUI',
|
|
537
|
-
selectedFieldIndex: 0,
|
|
538
|
-
message: 'Send one explicit build/fix/review task to GoodVibes TUI/shared-session routes with a visible handoff brief. Type yes on the final field to confirm.',
|
|
539
|
-
fields: [
|
|
540
|
-
{ id: 'task', label: 'Original task', value: '', required: true, multiline: true, hint: 'Paste the full original user ask. Ctrl-J inserts a new line.' },
|
|
541
|
-
{ id: 'reason', label: 'Why delegate', value: '', required: false, multiline: true, hint: 'Isolation, remote host, separate worktree, parallelism, TUI workflow, or review need. Ctrl-J inserts a new line.' },
|
|
542
|
-
{ id: 'success', label: 'Success criteria', value: '', required: false, multiline: true, hint: 'Expected evidence: diff, tests, artifact, findings, or completion signal. Ctrl-J inserts a new line.' },
|
|
543
|
-
{ id: 'workspace', label: 'Workspace hint', value: '', required: false, multiline: false, hint: 'Optional target workspace, branch, worktree, machine, or package.' },
|
|
544
|
-
{ id: 'priority', label: 'Priority', value: '', required: false, multiline: false, hint: 'Optional priority, deadline, or sequencing note.' },
|
|
545
|
-
{ id: 'review', label: 'Request delegated review', value: '', required: false, multiline: false, hint: 'yes/no. Blank means no delegated review request.' },
|
|
546
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /delegate for this task.' },
|
|
547
|
-
],
|
|
548
|
-
};
|
|
549
|
-
}
|
|
550
|
-
if (kind === 'workplan-add') {
|
|
551
|
-
return {
|
|
552
|
-
kind,
|
|
553
|
-
mode: 'create',
|
|
554
|
-
title: 'Add Work Plan Item',
|
|
555
|
-
selectedFieldIndex: 0,
|
|
556
|
-
message: 'Create one visible work plan item from the Agent workspace.',
|
|
557
|
-
fields: [
|
|
558
|
-
{ id: 'title', label: 'Title', value: '', required: true, multiline: true, hint: 'Task title. Ctrl-J inserts a new line.' },
|
|
559
|
-
{ id: 'owner', label: 'Owner', value: '', required: false, multiline: false, hint: 'Optional owner label.' },
|
|
560
|
-
{ id: 'source', label: 'Source', value: '', required: false, multiline: false, hint: 'Optional source label. Blank defaults to manual.' },
|
|
561
|
-
{ id: 'notes', label: 'Notes', value: '', required: false, multiline: true, hint: 'Optional notes. Ctrl-J inserts a new line.' },
|
|
562
|
-
],
|
|
563
|
-
};
|
|
564
|
-
}
|
|
565
|
-
if (kind === 'workplan-show') {
|
|
566
|
-
return {
|
|
567
|
-
kind,
|
|
568
|
-
mode: 'create',
|
|
569
|
-
title: 'Show Work Plan Detail',
|
|
570
|
-
selectedFieldIndex: 0,
|
|
571
|
-
message: 'Print the detailed work plan from the Agent workspace without mutating work state.',
|
|
572
|
-
fields: [
|
|
573
|
-
{ id: 'format', label: 'Format', value: '', required: false, multiline: false, hint: 'Optional. Blank uses the default detail view; markdown also works.' },
|
|
574
|
-
],
|
|
575
|
-
};
|
|
576
|
-
}
|
|
577
|
-
if (kind === 'workplan-status') {
|
|
578
|
-
return {
|
|
579
|
-
kind,
|
|
580
|
-
mode: 'update',
|
|
581
|
-
title: 'Update Work Plan Status',
|
|
582
|
-
selectedFieldIndex: 0,
|
|
583
|
-
message: 'Update one visible work plan item status from the Agent workspace.',
|
|
584
|
-
fields: [
|
|
585
|
-
{ id: 'id', label: 'Work item id', value: '', required: true, multiline: false, hint: 'Existing work plan item id.' },
|
|
586
|
-
{ id: 'status', label: 'Status', value: '', required: true, multiline: false, hint: 'pending, start, blocked, done, failed, or cancelled.' },
|
|
587
|
-
],
|
|
588
|
-
};
|
|
589
|
-
}
|
|
590
|
-
if (kind === 'workplan-delete') {
|
|
591
|
-
return {
|
|
592
|
-
kind,
|
|
593
|
-
mode: 'delete',
|
|
594
|
-
title: 'Remove Work Plan Item',
|
|
595
|
-
selectedFieldIndex: 0,
|
|
596
|
-
message: 'Remove one work plan item. Type yes on the final field to confirm.',
|
|
597
|
-
fields: [
|
|
598
|
-
{ id: 'id', label: 'Work item id', value: '', required: true, multiline: false, hint: 'Existing work plan item id.' },
|
|
599
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /workplan remove with --yes.' },
|
|
600
|
-
],
|
|
601
|
-
};
|
|
602
|
-
}
|
|
603
|
-
if (kind === 'workplan-clear-completed') {
|
|
604
|
-
return {
|
|
605
|
-
kind,
|
|
606
|
-
mode: 'delete',
|
|
607
|
-
title: 'Clear Completed Work Plan Items',
|
|
608
|
-
selectedFieldIndex: 0,
|
|
609
|
-
message: 'Clear completed and cancelled work plan items. Type yes to confirm.',
|
|
610
|
-
fields: [
|
|
611
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /workplan clear-completed with --yes.' },
|
|
612
|
-
],
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
if (kind === 'skill-discovery-import') {
|
|
616
|
-
return {
|
|
617
|
-
kind,
|
|
618
|
-
mode: 'create',
|
|
619
|
-
title: 'Import Discovered Skill',
|
|
620
|
-
selectedFieldIndex: 0,
|
|
621
|
-
message: 'Import one discovered SKILL.md or .md skill file into the Agent-local skill registry. Type yes on the final field to confirm.',
|
|
622
|
-
fields: [
|
|
623
|
-
{ id: 'name', label: 'Discovered skill', value: '', required: true, multiline: false, hint: 'Name shown by /skills discover.' },
|
|
624
|
-
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
625
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /skills import-discovered with --yes.' },
|
|
626
|
-
],
|
|
627
|
-
};
|
|
628
|
-
}
|
|
629
|
-
if (kind === 'persona-discovery-import') {
|
|
630
|
-
return {
|
|
631
|
-
kind,
|
|
632
|
-
mode: 'create',
|
|
633
|
-
title: 'Import Discovered Persona',
|
|
634
|
-
selectedFieldIndex: 0,
|
|
635
|
-
message: 'Import one discovered persona markdown file into the Agent-local persona registry. Type yes on the final field to confirm.',
|
|
636
|
-
fields: [
|
|
637
|
-
{ id: 'name', label: 'Discovered persona', value: '', required: true, multiline: false, hint: 'Name shown by /personas discover.' },
|
|
638
|
-
{ id: 'use', label: 'Use now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
639
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /personas import-discovered with --yes.' },
|
|
640
|
-
],
|
|
641
|
-
};
|
|
642
|
-
}
|
|
643
|
-
if (kind === 'routine-discovery-import') {
|
|
644
|
-
return {
|
|
645
|
-
kind,
|
|
646
|
-
mode: 'create',
|
|
647
|
-
title: 'Import Discovered Routine',
|
|
648
|
-
selectedFieldIndex: 0,
|
|
649
|
-
message: 'Import one discovered routine markdown file into the Agent-local routine registry. Type yes on the final field to confirm.',
|
|
650
|
-
fields: [
|
|
651
|
-
{ id: 'name', label: 'Discovered routine', value: '', required: true, multiline: false, hint: 'Name shown by /routines discover.' },
|
|
652
|
-
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
653
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /routines import-discovered with --yes.' },
|
|
654
|
-
],
|
|
655
|
-
};
|
|
656
|
-
}
|
|
657
|
-
if (kind === 'skill-standard-import') {
|
|
658
|
-
return {
|
|
659
|
-
kind,
|
|
660
|
-
mode: 'create',
|
|
661
|
-
title: 'Import Shared Skill',
|
|
662
|
-
selectedFieldIndex: 0,
|
|
663
|
-
message: 'Import one SKILL.md file in the open skill format into the Agent-local skill library. The skill will wait for your review before it can be enabled.',
|
|
664
|
-
fields: [
|
|
665
|
-
{ id: 'path', label: 'Path to SKILL.md', value: '', required: true, multiline: false, hint: 'Full path to a SKILL.md file.' },
|
|
666
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to import with --yes.' },
|
|
667
|
-
],
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
if (kind === 'skill-standard-export') {
|
|
671
|
-
return {
|
|
672
|
-
kind,
|
|
673
|
-
mode: 'create',
|
|
674
|
-
title: 'Export Skill to Share',
|
|
675
|
-
selectedFieldIndex: 0,
|
|
676
|
-
message: 'Export one Agent-local skill as a SKILL.md folder you can publish or hand to another assistant.',
|
|
677
|
-
fields: [
|
|
678
|
-
{ id: 'id', label: 'Skill id or name', value: '', required: true, multiline: false, hint: 'Local skill id or name.' },
|
|
679
|
-
{ id: 'dest', label: 'Destination folder', value: '', required: true, multiline: false, hint: 'Directory to write <slug>/SKILL.md into.' },
|
|
680
|
-
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to export with --yes.' },
|
|
681
|
-
],
|
|
682
|
-
};
|
|
683
|
-
}
|
|
684
|
-
return {
|
|
685
|
-
kind,
|
|
686
|
-
mode: 'create',
|
|
687
|
-
title: 'Create Skill Bundle',
|
|
688
|
-
selectedFieldIndex: 0,
|
|
689
|
-
message: 'Group existing local skills into a reviewable bundle that can be enabled together.',
|
|
690
|
-
fields: [
|
|
691
|
-
{ id: 'name', label: 'Bundle name', value: '', required: true, multiline: false, hint: 'Short bundle name.' },
|
|
692
|
-
{ id: 'description', label: 'Description', value: '', required: true, multiline: false, hint: 'One-line bundle summary.' },
|
|
693
|
-
{ id: 'skills', label: 'Skill ids', value: '', required: true, multiline: false, hint: 'Comma-separated existing local skill ids.' },
|
|
694
|
-
{ id: 'enabled', label: 'Enable now', value: 'yes', required: false, multiline: false, hint: 'yes/no.' },
|
|
695
|
-
],
|
|
696
|
-
};
|
|
565
|
+
return createAgentWorkspaceEditorFromTable(kind as AgentWorkspaceBasicOwnCommandEditorKind, BASIC_OWN_COMMAND_EDITOR_SPECS);
|
|
697
566
|
}
|