@pellux/goodvibes-agent 0.1.69 → 0.1.71
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 +12 -0
- package/package.json +42 -1
- package/src/agent/skill-discovery.ts +119 -0
- package/src/input/commands/delegation-runtime.ts +0 -8
- package/src/input/commands/experience-runtime.ts +0 -177
- package/src/input/commands/guidance-runtime.ts +9 -77
- package/src/input/commands/local-runtime.ts +1 -57
- package/src/input/commands/local-setup-review.ts +1 -1
- package/src/input/commands/operator-runtime.ts +1 -145
- package/src/input/commands/platform-access-runtime.ts +2 -195
- package/src/input/commands/product-runtime.ts +0 -116
- package/src/input/commands/security-runtime.ts +88 -0
- package/src/input/commands/session-content.ts +0 -97
- package/src/input/commands/shell-core.ts +1 -22
- package/src/input/commands.ts +2 -43
- package/src/panels/builtin/operations.ts +3 -184
- package/src/panels/index.ts +0 -11
- package/src/version.ts +1 -1
- package/src/input/commands/branch-runtime.ts +0 -72
- package/src/input/commands/control-room-runtime.ts +0 -234
- package/src/input/commands/discovery-runtime.ts +0 -61
- package/src/input/commands/hooks-runtime.ts +0 -207
- package/src/input/commands/incident-runtime.ts +0 -106
- package/src/input/commands/integration-runtime.ts +0 -437
- package/src/input/commands/local-setup.ts +0 -288
- package/src/input/commands/managed-runtime.ts +0 -240
- package/src/input/commands/marketplace-runtime.ts +0 -305
- package/src/input/commands/memory-product-runtime.ts +0 -148
- package/src/input/commands/operator-panel-runtime.ts +0 -146
- package/src/input/commands/platform-services-runtime.ts +0 -271
- package/src/input/commands/profile-sync-runtime.ts +0 -110
- package/src/input/commands/provider.ts +0 -363
- package/src/input/commands/remote-runtime-pool.ts +0 -89
- package/src/input/commands/remote-runtime-setup.ts +0 -226
- package/src/input/commands/remote-runtime.ts +0 -432
- package/src/input/commands/replay-runtime.ts +0 -25
- package/src/input/commands/services-runtime.ts +0 -220
- package/src/input/commands/settings-sync-runtime.ts +0 -197
- package/src/input/commands/share-runtime.ts +0 -127
- package/src/input/commands/skills-runtime.ts +0 -226
- package/src/input/commands/teleport-runtime.ts +0 -68
- package/src/panels/cockpit-panel.ts +0 -183
- package/src/panels/communication-panel.ts +0 -153
- package/src/panels/control-plane-panel.ts +0 -211
- package/src/panels/forensics-panel.ts +0 -364
- package/src/panels/hooks-panel.ts +0 -239
- package/src/panels/incident-review-panel.ts +0 -197
- package/src/panels/marketplace-panel.ts +0 -212
- package/src/panels/ops-control-panel.ts +0 -150
- package/src/panels/ops-strategy-panel.ts +0 -235
- package/src/panels/orchestration-panel.ts +0 -272
- package/src/panels/plugins-panel.ts +0 -178
- package/src/panels/remote-panel.ts +0 -449
- package/src/panels/routes-panel.ts +0 -178
- package/src/panels/services-panel.ts +0 -231
- package/src/panels/settings-sync-panel.ts +0 -120
- package/src/panels/skills-panel.ts +0 -431
- package/src/panels/watchers-panel.ts +0 -193
- package/src/verification/live-verifier.ts +0 -588
- package/src/verification/verification-ledger.ts +0 -239
|
@@ -4,7 +4,6 @@ import { writeFile } from 'node:fs/promises';
|
|
|
4
4
|
import type { CommandRegistry } from '../command-registry.ts';
|
|
5
5
|
import type { SelectionItem } from '../selection-modal.ts';
|
|
6
6
|
import { exportToMarkdown } from '@pellux/goodvibes-sdk/platform/export';
|
|
7
|
-
import { TemplateManager, parseTemplateArgs } from '@pellux/goodvibes-sdk/platform/templates';
|
|
8
7
|
import { requireSessionManager, requireSessionMemoryStore, requireShellPaths } from './runtime-services.ts';
|
|
9
8
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
|
|
10
9
|
import { requireYesFlag, stripYesFlag } from './confirmation.ts';
|
|
@@ -260,102 +259,6 @@ export function registerSessionContentCommands(registry: CommandRegistry): void
|
|
|
260
259
|
},
|
|
261
260
|
});
|
|
262
261
|
|
|
263
|
-
registry.register({
|
|
264
|
-
name: 'template',
|
|
265
|
-
aliases: ['tmpl'],
|
|
266
|
-
description: 'Manage and use prompt templates',
|
|
267
|
-
usage: 'save <name> --yes | use <name> [args] | list | edit <name> | delete <name> --yes',
|
|
268
|
-
argsHint: '<save|use|list|edit|delete> [name]',
|
|
269
|
-
handler(args, ctx) {
|
|
270
|
-
const shellPaths = requireShellPaths(ctx);
|
|
271
|
-
const templateManager = new TemplateManager({
|
|
272
|
-
projectRoot: shellPaths.workingDirectory,
|
|
273
|
-
homeDirectory: shellPaths.homeDirectory,
|
|
274
|
-
});
|
|
275
|
-
const parsed = stripYesFlag(args);
|
|
276
|
-
const sub = parsed.rest[0];
|
|
277
|
-
const rest = parsed.rest.slice(1);
|
|
278
|
-
if (!sub || sub === 'list') {
|
|
279
|
-
const templates = templateManager.list();
|
|
280
|
-
if (ctx.openSelection) {
|
|
281
|
-
const actions = new Map([['e', 'edit' as const]]);
|
|
282
|
-
const items: SelectionItem[] = templates.length === 0
|
|
283
|
-
? [{ id: '_empty', label: 'No templates saved', detail: 'Use /template save <name> --yes' }]
|
|
284
|
-
: templates.map(t => ({ id: t.name, label: t.name, detail: t.preview, category: t.scope === 'project' ? 'project' : 'global', actions: '[e] edit' }));
|
|
285
|
-
ctx.openSelection('Templates', items, { allowSearch: true, customActions: actions }, (result) => {
|
|
286
|
-
if (!result) return;
|
|
287
|
-
const content = templateManager.load(result.item.id);
|
|
288
|
-
if (content !== null) {
|
|
289
|
-
if (result.action === 'edit') ctx.print(`Template: ${result.item.id}\n\n${content}`);
|
|
290
|
-
else ctx.submitInput?.(content);
|
|
291
|
-
} else {
|
|
292
|
-
ctx.print(`Template not found: ${result.item.id}`);
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
ctx.print(['Templates:', '', ...templates.map(t => ` ${t.scope === 'project' ? '[project]' : '[global] '} ${t.name.padEnd(28)} ${t.preview}`)].join('\n'));
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
if (sub === 'save') {
|
|
301
|
-
const name = rest[0];
|
|
302
|
-
if (!name) {
|
|
303
|
-
ctx.print('Usage: /template save <name> --yes');
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
if (!parsed.yes) {
|
|
307
|
-
requireYesFlag(ctx, `save prompt template ${name}`, '/template save <name> --yes');
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
try {
|
|
311
|
-
templateManager.save(name, ctx.session.conversationManager.getLastUserMessage() || '# Template\n\nReplace this with your template content.\n');
|
|
312
|
-
ctx.print(`Template saved: ${name}`);
|
|
313
|
-
} catch (e) {
|
|
314
|
-
ctx.print(`Failed to save template: ${summarizeError(e)}`);
|
|
315
|
-
}
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (sub === 'use') {
|
|
319
|
-
const name = rest[0];
|
|
320
|
-
if (!name) {
|
|
321
|
-
ctx.print('Usage: /template use <name> [args...]');
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
const templateContent = templateManager.load(name);
|
|
325
|
-
if (templateContent === null) {
|
|
326
|
-
ctx.print(`Template not found: ${name}\nRun /template list to see available templates.`);
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
ctx.submitInput?.(templateManager.expand(templateContent, parseTemplateArgs(rest.slice(1))));
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
if (sub === 'edit') {
|
|
333
|
-
const name = rest[0];
|
|
334
|
-
if (!name) {
|
|
335
|
-
ctx.print('Usage: /template edit <name>');
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
const content = templateManager.load(name);
|
|
339
|
-
ctx.print(content === null ? `Template not found: ${name}` : `Template: ${name}\n\n${content}`);
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
if (sub === 'delete') {
|
|
343
|
-
const name = rest[0];
|
|
344
|
-
if (!name) {
|
|
345
|
-
ctx.print('Usage: /template delete <name> --yes');
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
if (!parsed.yes) {
|
|
349
|
-
requireYesFlag(ctx, `delete prompt template ${name}`, '/template delete <name> --yes');
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
ctx.print(templateManager.delete(name) ? `Template deleted: ${name}` : `Template not found: ${name}`);
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
ctx.print(`Unknown subcommand: ${sub}\nUsage: /template save <name> --yes | use <name> | list | edit <name> | delete <name> --yes`);
|
|
356
|
-
},
|
|
357
|
-
});
|
|
358
|
-
|
|
359
262
|
registry.register({
|
|
360
263
|
name: 'memory',
|
|
361
264
|
description: 'Manage session memories (pinned across context compaction)',
|
|
@@ -151,20 +151,12 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
151
151
|
{ id: '/undo', label: '/undo', detail: 'Remove last turn', category: 'Conversation' },
|
|
152
152
|
{ id: '/redo', label: '/redo', detail: 'Restore undone turn', category: 'Conversation' },
|
|
153
153
|
{ id: '/retry', label: '/retry [text]', detail: 'Re-send last message', category: 'Conversation' },
|
|
154
|
-
{ id: '/fork', label: '/fork [name]', detail: 'Snapshot conversation as a named branch', category: 'Conversation' },
|
|
155
|
-
{ id: '/branch', label: '/branch [name]', detail: 'List branches or switch to one', category: 'Conversation' },
|
|
156
|
-
{ id: '/merge', label: '/merge <name>', detail: 'Append messages from a branch', category: 'Conversation' },
|
|
157
|
-
{ id: '/template', label: '/template', detail: 'Browse templates', category: 'Templates' },
|
|
158
|
-
{ id: '/template save', label: '/template save <name> --yes', detail: 'Save prompt as template', category: 'Templates' },
|
|
159
|
-
{ id: '/template use', label: '/template use <name>', detail: 'Execute template', category: 'Templates' },
|
|
160
|
-
{ id: '/tools', label: '/tools', detail: 'List available tools', category: 'Tools & System' },
|
|
161
154
|
{ id: '/paste', label: '/paste', detail: 'Insert clipboard text or image into the prompt', category: 'Tools & System' },
|
|
162
155
|
{ id: '/shortcuts', label: '/shortcuts', detail: 'View keyboard shortcuts reference', category: 'Tools & System' },
|
|
163
156
|
{ id: '/commands', label: '/commands', detail: 'Browse all commands in a scrollable list', category: 'Tools & System' },
|
|
164
157
|
{ id: '/secrets', label: '/secrets set|link|get|test|list|delete', detail: 'Manage encrypted and provider-backed secrets', category: 'Tools & System' },
|
|
165
158
|
{ id: '/help', label: '/help', detail: 'This help', category: 'Tools & System' },
|
|
166
159
|
{ id: '/quit', label: '/quit', detail: 'Exit', category: 'Tools & System' },
|
|
167
|
-
{ id: '/wq', label: '/wq', detail: 'Blocked in Agent; git commit/exit belongs to GoodVibes TUI', category: 'Tools & System' },
|
|
168
160
|
];
|
|
169
161
|
ctx.openSelection('Help — Commands', items, { allowSearch: true }, (result) => {
|
|
170
162
|
if (!result) return;
|
|
@@ -178,7 +170,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
178
170
|
});
|
|
179
171
|
return;
|
|
180
172
|
}
|
|
181
|
-
ctx.print('Use /help to open the help modal. Commands: /agent, /
|
|
173
|
+
ctx.print('Use /help to open the help modal. Commands: /agent, /knowledge, /memory, /personas, /agent-skills, /routines, /delegate, /model, /provider, /config, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /quit');
|
|
182
174
|
},
|
|
183
175
|
});
|
|
184
176
|
|
|
@@ -227,19 +219,6 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
227
219
|
},
|
|
228
220
|
});
|
|
229
221
|
|
|
230
|
-
registry.register({
|
|
231
|
-
name: 'wq',
|
|
232
|
-
aliases: [':wq'],
|
|
233
|
-
description: 'Blocked in Agent; git commit/exit is owned by GoodVibes TUI',
|
|
234
|
-
handler(_args, ctx) {
|
|
235
|
-
ctx.print([
|
|
236
|
-
'Blocked: /wq is not available in GoodVibes Agent.',
|
|
237
|
-
'Git commit, worktree, and coding-session exit flows belong to GoodVibes TUI.',
|
|
238
|
-
'No files, commits, or repository state were changed.',
|
|
239
|
-
].join('\n'));
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
|
|
243
222
|
registry.register({
|
|
244
223
|
name: 'effort',
|
|
245
224
|
aliases: ['e'],
|
package/src/input/commands.ts
CHANGED
|
@@ -1,46 +1,27 @@
|
|
|
1
1
|
import type { CommandRegistry } from './command-registry.ts';
|
|
2
2
|
import { policyCommand } from './commands/policy.ts';
|
|
3
|
-
import { providerCommand } from './commands/provider.ts';
|
|
4
3
|
import { sessionCommand } from './commands/session.ts';
|
|
5
4
|
import { recallCommand } from './commands/memory.ts';
|
|
6
5
|
import { knowledgeCommand } from './commands/knowledge.ts';
|
|
7
6
|
import { registerShellCoreCommands } from './commands/shell-core.ts';
|
|
8
7
|
import { registerConfigCommand } from './commands/config.ts';
|
|
9
8
|
import { registerSessionWorkflowCommands } from './commands/session-workflow.ts';
|
|
10
|
-
import { registerDiscoveryRuntimeCommands } from './commands/discovery-runtime.ts';
|
|
11
9
|
import { registerPlanningRuntimeCommands } from './commands/planning-runtime.ts';
|
|
12
10
|
import { registerScheduleRuntimeCommands } from './commands/schedule-runtime.ts';
|
|
13
|
-
import { registerBranchRuntimeCommands } from './commands/branch-runtime.ts';
|
|
14
11
|
import { registerOperatorRuntimeCommands } from './commands/operator-runtime.ts';
|
|
15
|
-
import { registerIntegrationRuntimeCommands } from './commands/integration-runtime.ts';
|
|
16
12
|
import { registerNotifyRuntimeCommands } from './commands/notify-runtime.ts';
|
|
17
|
-
import { registerReplayRuntimeCommands } from './commands/replay-runtime.ts';
|
|
18
|
-
import { registerShareRuntimeCommands } from './commands/share-runtime.ts';
|
|
19
|
-
import { registerLocalSetupCommands } from './commands/local-setup.ts';
|
|
20
13
|
import { registerProductRuntimeCommands } from './commands/product-runtime.ts';
|
|
21
|
-
import { registerProfileSyncRuntimeCommands } from './commands/profile-sync-runtime.ts';
|
|
22
|
-
import { registerManagedRuntimeCommands } from './commands/managed-runtime.ts';
|
|
23
14
|
import { registerPlatformAccessRuntimeCommands } from './commands/platform-access-runtime.ts';
|
|
24
|
-
import { registerPlatformServicesRuntimeCommands } from './commands/platform-services-runtime.ts';
|
|
25
|
-
import { registerMarketplaceRuntimeCommands } from './commands/marketplace-runtime.ts';
|
|
26
15
|
import { registerGuidanceRuntimeCommands } from './commands/guidance-runtime.ts';
|
|
27
|
-
import { registerRemoteRuntimeCommands } from './commands/remote-runtime.ts';
|
|
28
|
-
import { registerTeleportRuntimeCommands } from './commands/teleport-runtime.ts';
|
|
29
16
|
import { registerSubscriptionRuntimeCommands } from './commands/subscription-runtime.ts';
|
|
30
|
-
import {
|
|
31
|
-
import { registerControlRoomRuntimeCommands } from './commands/control-room-runtime.ts';
|
|
17
|
+
import { registerSecurityRuntimeCommands } from './commands/security-runtime.ts';
|
|
32
18
|
import { registerMcpRuntimeCommands } from './commands/mcp-runtime.ts';
|
|
33
19
|
import { registerSessionContentCommands } from './commands/session-content.ts';
|
|
34
20
|
import { registerLocalRuntimeCommands } from './commands/local-runtime.ts';
|
|
35
21
|
import { registerExperienceRuntimeCommands } from './commands/experience-runtime.ts';
|
|
36
|
-
import { registerIncidentRuntimeCommands } from './commands/incident-runtime.ts';
|
|
37
|
-
import { registerMemoryProductRuntimeCommands } from './commands/memory-product-runtime.ts';
|
|
38
|
-
import { registerSkillsRuntimeCommands } from './commands/skills-runtime.ts';
|
|
39
|
-
import { registerServicesRuntimeCommands } from './commands/services-runtime.ts';
|
|
40
22
|
import { registerTasksRuntimeCommands } from './commands/tasks-runtime.ts';
|
|
41
23
|
import { registerLocalProviderRuntimeCommands } from './commands/local-provider-runtime.ts';
|
|
42
24
|
import { registerHealthRuntimeCommands } from './commands/health-runtime.ts';
|
|
43
|
-
import { registerSettingsSyncRuntimeCommands } from './commands/settings-sync-runtime.ts';
|
|
44
25
|
import { registerProviderAccountsRuntimeCommands } from './commands/provider-accounts-runtime.ts';
|
|
45
26
|
import { registerLocalAuthRuntimeCommands } from './commands/local-auth-runtime.ts';
|
|
46
27
|
import { registerConversationRuntimeCommands } from './commands/conversation-runtime.ts';
|
|
@@ -69,33 +50,17 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
69
50
|
registerDelegationRuntimeCommands(registry);
|
|
70
51
|
registerConfigCommand(registry);
|
|
71
52
|
registerOperatorRuntimeCommands(registry);
|
|
72
|
-
registerIntegrationRuntimeCommands(registry);
|
|
73
53
|
registerNotifyRuntimeCommands(registry);
|
|
74
|
-
registerReplayRuntimeCommands(registry);
|
|
75
|
-
registerShareRuntimeCommands(registry);
|
|
76
|
-
registerLocalSetupCommands(registry);
|
|
77
54
|
registerProductRuntimeCommands(registry);
|
|
78
|
-
registerProfileSyncRuntimeCommands(registry);
|
|
79
|
-
registerManagedRuntimeCommands(registry);
|
|
80
55
|
registerPlatformAccessRuntimeCommands(registry);
|
|
81
|
-
registerPlatformServicesRuntimeCommands(registry);
|
|
82
|
-
registerMarketplaceRuntimeCommands(registry);
|
|
83
56
|
registerGuidanceRuntimeCommands(registry);
|
|
84
|
-
registerRemoteRuntimeCommands(registry);
|
|
85
|
-
registerTeleportRuntimeCommands(registry);
|
|
86
57
|
registerSubscriptionRuntimeCommands(registry);
|
|
87
|
-
|
|
88
|
-
registerControlRoomRuntimeCommands(registry);
|
|
58
|
+
registerSecurityRuntimeCommands(registry);
|
|
89
59
|
registerMcpRuntimeCommands(registry);
|
|
90
|
-
registerIncidentRuntimeCommands(registry);
|
|
91
|
-
registerMemoryProductRuntimeCommands(registry);
|
|
92
|
-
registerSkillsRuntimeCommands(registry);
|
|
93
60
|
registerExperienceRuntimeCommands(registry);
|
|
94
|
-
registerServicesRuntimeCommands(registry);
|
|
95
61
|
registerTasksRuntimeCommands(registry);
|
|
96
62
|
registerLocalProviderRuntimeCommands(registry);
|
|
97
63
|
registerHealthRuntimeCommands(registry);
|
|
98
|
-
registerSettingsSyncRuntimeCommands(registry);
|
|
99
64
|
registerProviderAccountsRuntimeCommands(registry);
|
|
100
65
|
registerLocalAuthRuntimeCommands(registry);
|
|
101
66
|
registerConversationRuntimeCommands(registry);
|
|
@@ -105,18 +70,13 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
105
70
|
registerWorkPlanRuntimeCommands(registry);
|
|
106
71
|
registerLocalRuntimeCommands(registry);
|
|
107
72
|
registerSessionWorkflowCommands(registry);
|
|
108
|
-
registerDiscoveryRuntimeCommands(registry);
|
|
109
73
|
registerPlanningRuntimeCommands(registry);
|
|
110
74
|
registerScheduleRuntimeCommands(registry);
|
|
111
|
-
registerBranchRuntimeCommands(registry);
|
|
112
75
|
registerSessionContentCommands(registry);
|
|
113
76
|
|
|
114
77
|
// ── /policy ───────────────────────────────────────────────────────────────
|
|
115
78
|
registry.register(policyCommand);
|
|
116
79
|
|
|
117
|
-
// ── /provider ─────────────────────────────────────────────────────────────
|
|
118
|
-
registry.register(providerCommand);
|
|
119
|
-
|
|
120
80
|
// ── /session ─────────────────────────────────────────────────────────────
|
|
121
81
|
registry.register(sessionCommand);
|
|
122
82
|
|
|
@@ -125,5 +85,4 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
125
85
|
|
|
126
86
|
// ── /knowledge ───────────────────────────────────────────────────────────
|
|
127
87
|
registry.register(knowledgeCommand);
|
|
128
|
-
|
|
129
88
|
}
|
|
@@ -1,30 +1,13 @@
|
|
|
1
1
|
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
-
import { CockpitPanel } from '../cockpit-panel.ts';
|
|
3
2
|
import { ApprovalPanel } from '../approval-panel.ts';
|
|
4
|
-
import { PluginsPanel } from '../plugins-panel.ts';
|
|
5
|
-
import { SkillsPanel } from '../skills-panel.ts';
|
|
6
|
-
import { ServicesPanel } from '../services-panel.ts';
|
|
7
3
|
import { AutomationControlPanel } from '../automation-control-panel.ts';
|
|
8
|
-
import { RoutesPanel } from '../routes-panel.ts';
|
|
9
|
-
import { WatchersPanel } from '../watchers-panel.ts';
|
|
10
|
-
import { ControlPlanePanel } from '../control-plane-panel.ts';
|
|
11
4
|
import { SubscriptionPanel } from '../subscription-panel.ts';
|
|
12
5
|
import { LocalAuthPanel } from '../local-auth-panel.ts';
|
|
13
6
|
import { ProviderAccountsPanel } from '../provider-accounts-panel.ts';
|
|
14
|
-
import { SettingsSyncPanel } from '../settings-sync-panel.ts';
|
|
15
|
-
import { HooksPanel } from '../hooks-panel.ts';
|
|
16
7
|
import { SecurityPanel } from '../security-panel.ts';
|
|
17
|
-
import { MarketplacePanel } from '../marketplace-panel.ts';
|
|
18
8
|
import { TasksPanel } from '../tasks-panel.ts';
|
|
19
|
-
import { OrchestrationPanel } from '../orchestration-panel.ts';
|
|
20
|
-
import { OpsStrategyPanel } from '../ops-strategy-panel.ts';
|
|
21
|
-
import { CommunicationPanel } from '../communication-panel.ts';
|
|
22
|
-
import { RemotePanel } from '../remote-panel.ts';
|
|
23
9
|
import { ProviderStatsPanel } from '../provider-stats-panel.ts';
|
|
24
10
|
import { ProviderHealthPanel } from '../provider-health-panel.ts';
|
|
25
|
-
import { GOODVIBES_AGENT_SURFACE_ROOT } from '../../config/surface.ts';
|
|
26
|
-
import { IncidentReviewPanel } from '../incident-review-panel.ts';
|
|
27
|
-
import { ForensicsPanel } from '../forensics-panel.ts';
|
|
28
11
|
import { PolicyPanel } from '../policy-panel.ts';
|
|
29
12
|
import { createProviderAccountSnapshotQuery } from '../provider-account-snapshot.ts';
|
|
30
13
|
import {
|
|
@@ -33,7 +16,7 @@ import {
|
|
|
33
16
|
} from '../../runtime/ui-service-queries.ts';
|
|
34
17
|
import { createRuntimeProviderApi } from '@/runtime/index.ts';
|
|
35
18
|
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
36
|
-
import {
|
|
19
|
+
import { requireUiServices } from './shared.ts';
|
|
37
20
|
|
|
38
21
|
export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
39
22
|
const ui = requireUiServices(deps);
|
|
@@ -49,15 +32,6 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
49
32
|
environment: createEnvironmentVariableQuery(process.env),
|
|
50
33
|
});
|
|
51
34
|
|
|
52
|
-
manager.registerType({
|
|
53
|
-
id: 'cockpit',
|
|
54
|
-
name: 'Cockpit',
|
|
55
|
-
icon: 'O',
|
|
56
|
-
category: 'monitoring',
|
|
57
|
-
description: 'Unified operator summary for orchestration, permissions, communication, MCP, plugins, and integrations',
|
|
58
|
-
factory: () => new CockpitPanel(ui.readModels.cockpit),
|
|
59
|
-
});
|
|
60
|
-
|
|
61
35
|
manager.registerType({
|
|
62
36
|
id: 'approval',
|
|
63
37
|
name: 'Approval',
|
|
@@ -67,75 +41,15 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
67
41
|
factory: () => new ApprovalPanel(deps.policyRuntimeState),
|
|
68
42
|
});
|
|
69
43
|
|
|
70
|
-
manager.registerType({
|
|
71
|
-
id: 'plugins',
|
|
72
|
-
name: 'Plugins',
|
|
73
|
-
icon: 'P',
|
|
74
|
-
category: 'monitoring',
|
|
75
|
-
description: 'Plugin trust, quarantine, capability, and activation status',
|
|
76
|
-
factory: () => new PluginsPanel(requirePluginManager(deps)),
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
manager.registerType({
|
|
80
|
-
id: 'skills',
|
|
81
|
-
name: 'Skills',
|
|
82
|
-
icon: 'K',
|
|
83
|
-
category: 'monitoring',
|
|
84
|
-
description: 'Project-local and global skill discovery with origin and dependency details',
|
|
85
|
-
factory: () => new SkillsPanel({
|
|
86
|
-
componentHealthMonitor: deps.componentHealthMonitor,
|
|
87
|
-
shellPaths: ui.environment.shellPaths,
|
|
88
|
-
}),
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
manager.registerType({
|
|
92
|
-
id: 'services',
|
|
93
|
-
name: 'Services',
|
|
94
|
-
icon: 'V',
|
|
95
|
-
category: 'monitoring',
|
|
96
|
-
description: 'Configured external services, credential presence, and connection health tests',
|
|
97
|
-
factory: () => new ServicesPanel(deps.serviceRegistry, deps.subscriptionManager),
|
|
98
|
-
});
|
|
99
|
-
|
|
100
44
|
manager.registerType({
|
|
101
45
|
id: 'automation',
|
|
102
46
|
name: 'Automation',
|
|
103
47
|
icon: 'M',
|
|
104
48
|
category: 'monitoring',
|
|
105
|
-
description: '
|
|
49
|
+
description: 'Read-only automation jobs, runs, deliveries, and failure posture from the external runtime',
|
|
106
50
|
factory: () => new AutomationControlPanel(ui.readModels.automation),
|
|
107
51
|
});
|
|
108
52
|
|
|
109
|
-
manager.registerType({
|
|
110
|
-
id: 'routes',
|
|
111
|
-
name: 'Routes',
|
|
112
|
-
icon: 'R',
|
|
113
|
-
category: 'monitoring',
|
|
114
|
-
description: 'Cross-surface route bindings and shared session attachment state',
|
|
115
|
-
factory: () => new RoutesPanel(ui.readModels.routes),
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
manager.registerType({
|
|
119
|
-
id: 'watchers',
|
|
120
|
-
name: 'Watchers',
|
|
121
|
-
icon: 'W',
|
|
122
|
-
category: 'monitoring',
|
|
123
|
-
description: 'Watcher health, lag, and degraded source state for automation inputs',
|
|
124
|
-
factory: () => new WatchersPanel(ui.readModels.watchers),
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
manager.registerType({
|
|
128
|
-
id: 'control-plane',
|
|
129
|
-
name: 'Runtime Status',
|
|
130
|
-
icon: 'C',
|
|
131
|
-
category: 'monitoring',
|
|
132
|
-
description: 'Runtime state, clients, approvals, and recent operator activity',
|
|
133
|
-
factory: () => {
|
|
134
|
-
requireControlPlanePanelDeps(deps);
|
|
135
|
-
return new ControlPlanePanel(ui.readModels.controlPlane);
|
|
136
|
-
},
|
|
137
|
-
});
|
|
138
|
-
|
|
139
53
|
manager.registerType({
|
|
140
54
|
id: 'subscription',
|
|
141
55
|
name: 'Subscriptions',
|
|
@@ -163,27 +77,6 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
163
77
|
factory: () => new ProviderAccountsPanel({ providerAccounts }),
|
|
164
78
|
});
|
|
165
79
|
|
|
166
|
-
manager.registerType({
|
|
167
|
-
id: 'settings-sync',
|
|
168
|
-
name: 'Settings Sync',
|
|
169
|
-
icon: 'Y',
|
|
170
|
-
category: 'monitoring',
|
|
171
|
-
description: 'Local, synced, and managed settings posture with recent sync events and active locks',
|
|
172
|
-
factory: () => new SettingsSyncPanel(deps.configManager),
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
manager.registerType({
|
|
176
|
-
id: 'hooks',
|
|
177
|
-
name: 'Hooks',
|
|
178
|
-
icon: 'H',
|
|
179
|
-
category: 'monitoring',
|
|
180
|
-
description: 'Registered hooks, chains, contracts, and execution policy details',
|
|
181
|
-
factory: () => {
|
|
182
|
-
const hookDeps = requireHookPanelDeps(deps);
|
|
183
|
-
return new HooksPanel(hookDeps.hookDispatcher, hookDeps.hookWorkbench, hookDeps.hookActivityTracker);
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
|
-
|
|
187
80
|
manager.registerType({
|
|
188
81
|
id: 'security',
|
|
189
82
|
name: 'Security',
|
|
@@ -193,68 +86,15 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
193
86
|
factory: () => new SecurityPanel(ui.readModels.security),
|
|
194
87
|
});
|
|
195
88
|
|
|
196
|
-
manager.registerType({
|
|
197
|
-
id: 'marketplace',
|
|
198
|
-
name: 'Marketplace',
|
|
199
|
-
icon: 'M',
|
|
200
|
-
category: 'monitoring',
|
|
201
|
-
description: 'Curated plugin and skill marketplace with provenance, compatibility, and install posture',
|
|
202
|
-
factory: () => {
|
|
203
|
-
return new MarketplacePanel(ui.readModels.marketplace, {
|
|
204
|
-
cwd: ui.environment.shellPaths.workingDirectory,
|
|
205
|
-
homeDir: ui.environment.shellPaths.homeDirectory,
|
|
206
|
-
projectCatalogRoot: ui.environment.shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'ecosystem'),
|
|
207
|
-
userCatalogRoot: ui.environment.shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'ecosystem'),
|
|
208
|
-
});
|
|
209
|
-
},
|
|
210
|
-
});
|
|
211
|
-
|
|
212
89
|
manager.registerType({
|
|
213
90
|
id: 'tasks',
|
|
214
91
|
name: 'Tasks',
|
|
215
92
|
icon: 'J',
|
|
216
93
|
category: 'monitoring',
|
|
217
|
-
description: 'Queued, running, blocked, failed, and completed task summaries from the runtime
|
|
94
|
+
description: 'Queued, running, blocked, failed, and completed task summaries from the external runtime',
|
|
218
95
|
factory: () => new TasksPanel(ui.readModels.tasks),
|
|
219
96
|
});
|
|
220
97
|
|
|
221
|
-
manager.registerType({
|
|
222
|
-
id: 'orchestration',
|
|
223
|
-
name: 'Orchestration',
|
|
224
|
-
icon: 'Q',
|
|
225
|
-
category: 'monitoring',
|
|
226
|
-
description: 'Task-graph status, node roles, and bounded recursion guard activity',
|
|
227
|
-
factory: () => new OrchestrationPanel(ui.readModels.orchestration),
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
manager.registerType({
|
|
231
|
-
id: 'ops',
|
|
232
|
-
name: 'Ops',
|
|
233
|
-
icon: 'O',
|
|
234
|
-
category: 'monitoring',
|
|
235
|
-
description: 'Adaptive planner strategy timeline, override posture, and recent execution-mode decisions',
|
|
236
|
-
factory: () => new OpsStrategyPanel(ui.events.planner, deps.adaptivePlanner),
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
manager.registerType({
|
|
240
|
-
id: 'communication',
|
|
241
|
-
name: 'Communication',
|
|
242
|
-
icon: 'Y',
|
|
243
|
-
category: 'monitoring',
|
|
244
|
-
description: 'Structured agent communication, blocked routes, and delivery status',
|
|
245
|
-
preload: true,
|
|
246
|
-
factory: () => new CommunicationPanel(ui.readModels.communication),
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
manager.registerType({
|
|
250
|
-
id: 'remote',
|
|
251
|
-
name: 'Remote',
|
|
252
|
-
icon: 'R',
|
|
253
|
-
category: 'monitoring',
|
|
254
|
-
description: 'Runtime transport state with active remote connections',
|
|
255
|
-
factory: () => new RemotePanel(ui.readModels.remote),
|
|
256
|
-
});
|
|
257
|
-
|
|
258
98
|
manager.registerType({
|
|
259
99
|
id: 'providers',
|
|
260
100
|
name: 'Providers',
|
|
@@ -289,26 +129,6 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
289
129
|
),
|
|
290
130
|
});
|
|
291
131
|
|
|
292
|
-
if (deps.forensicsRegistry) {
|
|
293
|
-
const { forensicsRegistry } = deps;
|
|
294
|
-
manager.registerType({
|
|
295
|
-
id: 'incident',
|
|
296
|
-
name: 'Incident',
|
|
297
|
-
icon: 'N',
|
|
298
|
-
category: 'monitoring',
|
|
299
|
-
description: 'Incident workspace with root cause, permission, budget, and replay evidence',
|
|
300
|
-
factory: () => new IncidentReviewPanel(forensicsRegistry),
|
|
301
|
-
});
|
|
302
|
-
manager.registerType({
|
|
303
|
-
id: 'forensics',
|
|
304
|
-
name: 'Forensics',
|
|
305
|
-
icon: 'F',
|
|
306
|
-
category: 'monitoring',
|
|
307
|
-
description: 'Failure Forensics: auto-classified failure reports with causal chains, phase timings, and jump links',
|
|
308
|
-
factory: () => new ForensicsPanel(forensicsRegistry),
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
|
|
312
132
|
manager.registerType({
|
|
313
133
|
id: 'policy',
|
|
314
134
|
name: 'Policy',
|
|
@@ -317,5 +137,4 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
317
137
|
description: 'Policy governance: active/candidate bundles, divergence gate, rollout history, and simulation evidence',
|
|
318
138
|
factory: () => new PolicyPanel(deps.policyRuntimeState),
|
|
319
139
|
});
|
|
320
|
-
|
|
321
140
|
}
|
package/src/panels/index.ts
CHANGED
|
@@ -17,21 +17,10 @@ export { ToolInspectorPanel } from './tool-inspector-panel.ts';
|
|
|
17
17
|
export { ContextVisualizerPanel } from './context-visualizer-panel.ts';
|
|
18
18
|
export { registerBuiltinPanels } from './builtin-panels.ts';
|
|
19
19
|
export type { BuiltinPanelDeps } from './builtin-panels.ts';
|
|
20
|
-
export { ForensicsPanel } from './forensics-panel.ts';
|
|
21
|
-
export { IncidentReviewPanel } from './incident-review-panel.ts';
|
|
22
20
|
export { PolicyPanel } from './policy-panel.ts';
|
|
23
|
-
export { PluginsPanel } from './plugins-panel.ts';
|
|
24
|
-
export { SkillsPanel } from './skills-panel.ts';
|
|
25
21
|
export { TasksPanel } from './tasks-panel.ts';
|
|
26
|
-
export { OrchestrationPanel } from './orchestration-panel.ts';
|
|
27
|
-
export { CommunicationPanel } from './communication-panel.ts';
|
|
28
|
-
export { CockpitPanel } from './cockpit-panel.ts';
|
|
29
|
-
export { RemotePanel } from './remote-panel.ts';
|
|
30
|
-
export { ServicesPanel } from './services-panel.ts';
|
|
31
22
|
export { SubscriptionPanel } from './subscription-panel.ts';
|
|
32
|
-
export { HooksPanel } from './hooks-panel.ts';
|
|
33
23
|
export { SecurityPanel } from './security-panel.ts';
|
|
34
|
-
export { MarketplacePanel } from './marketplace-panel.ts';
|
|
35
24
|
export { ApprovalPanel } from './approval-panel.ts';
|
|
36
25
|
export { KnowledgePanel } from './knowledge-panel.ts';
|
|
37
26
|
export { SystemMessagesPanel } from './system-messages-panel.ts';
|
package/src/version.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { join } from 'node:path';
|
|
|
6
6
|
// The prebuild script updates the fallback value before compilation.
|
|
7
7
|
// Uses import.meta.dir (Bun) to locate package.json relative to this file,
|
|
8
8
|
// which is correct regardless of the process working directory.
|
|
9
|
-
let _version = '0.1.
|
|
9
|
+
let _version = '0.1.71';
|
|
10
10
|
let _sdkVersion = '0.33.35';
|
|
11
11
|
try {
|
|
12
12
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { CommandRegistry } from '../command-registry.ts';
|
|
2
|
-
|
|
3
|
-
export function registerBranchRuntimeCommands(registry: CommandRegistry): void {
|
|
4
|
-
registry.register({
|
|
5
|
-
name: 'fork',
|
|
6
|
-
aliases: ['branch-save'],
|
|
7
|
-
description: 'Save a named snapshot of the current conversation',
|
|
8
|
-
usage: '[name]',
|
|
9
|
-
argsHint: '[name]',
|
|
10
|
-
handler(args, ctx) {
|
|
11
|
-
const name = args[0];
|
|
12
|
-
const branchName = ctx.session.conversationManager.forkBranch(name);
|
|
13
|
-
const msgCount = ctx.session.conversationManager.getMessageCount();
|
|
14
|
-
ctx.print(`Forked conversation as "${branchName}" (${msgCount} message${msgCount === 1 ? '' : 's'}).`);
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
registry.register({
|
|
19
|
-
name: 'branch',
|
|
20
|
-
aliases: ['br'],
|
|
21
|
-
description: 'List conversation branches or switch to one',
|
|
22
|
-
usage: '[name]',
|
|
23
|
-
argsHint: '[name]',
|
|
24
|
-
handler(args, ctx) {
|
|
25
|
-
if (args.length === 0) {
|
|
26
|
-
const branches = ctx.session.conversationManager.listBranches();
|
|
27
|
-
if (branches.length === 0) {
|
|
28
|
-
ctx.print('No branches. Use /fork [name] to create one.');
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const current = ctx.session.conversationManager.getCurrentBranch();
|
|
32
|
-
const lines = [`Branches (current: ${current}):`];
|
|
33
|
-
for (const branch of branches) {
|
|
34
|
-
const marker = branch.isCurrent ? '▶' : ' ';
|
|
35
|
-
lines.push(` ${marker} ${branch.name} (${branch.messageCount} message${branch.messageCount === 1 ? '' : 's'})`);
|
|
36
|
-
}
|
|
37
|
-
ctx.print(lines.join('\n'));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const name = args[0];
|
|
41
|
-
const ok = ctx.session.conversationManager.switchBranch(name);
|
|
42
|
-
if (!ok) {
|
|
43
|
-
ctx.print(`Branch "${name}" not found. Use /fork [name] to create one, or /branch to list.`);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
ctx.print(`Switched to branch "${name}".`);
|
|
47
|
-
ctx.renderRequest();
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
registry.register({
|
|
52
|
-
name: 'merge',
|
|
53
|
-
aliases: [],
|
|
54
|
-
description: 'Append messages from a branch after the fork point',
|
|
55
|
-
usage: '<name>',
|
|
56
|
-
argsHint: '<name>',
|
|
57
|
-
handler(args, ctx) {
|
|
58
|
-
const name = args[0];
|
|
59
|
-
if (!name) {
|
|
60
|
-
ctx.print('Usage: /merge <branch-name>\nSee /branch for available branches.');
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const ok = ctx.session.conversationManager.mergeBranch(name);
|
|
64
|
-
if (!ok) {
|
|
65
|
-
ctx.print(`Branch "${name}" not found. Use /branch to list available branches.`);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
ctx.print(`Merged branch "${name}" into current conversation.`);
|
|
69
|
-
ctx.renderRequest();
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|