@pellux/goodvibes-agent 0.1.56 → 0.1.58
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/.goodvibes/GOODVIBES.md +1 -1
- package/CHANGELOG.md +18 -9
- package/README.md +3 -3
- package/docs/README.md +1 -1
- package/docs/getting-started.md +3 -3
- package/docs/release-and-publishing.md +2 -2
- package/package.json +1 -3
- package/src/agent/routine-schedule-args.ts +219 -0
- package/src/agent/routine-schedule-format.ts +173 -0
- package/src/agent/routine-schedule-promotion.ts +3 -811
- package/src/agent/routine-schedule-receipts.ts +502 -0
- package/src/cli/agent-knowledge-command.ts +6 -6
- package/src/cli/help.ts +3 -25
- package/src/cli/package-verification.ts +23 -16
- package/src/cli/redaction.ts +4 -1
- package/src/cli/routines-command.ts +10 -6
- package/src/cli/service-posture.ts +47 -280
- package/src/cli/status.ts +0 -1
- package/src/cli/tui-startup.ts +23 -0
- package/src/config/secret-config.ts +0 -2
- package/src/input/agent-workspace-categories.ts +219 -0
- package/src/input/agent-workspace-editors.ts +143 -0
- package/src/input/agent-workspace-snapshot.ts +265 -0
- package/src/input/agent-workspace-types.ts +142 -0
- package/src/input/agent-workspace.ts +22 -766
- package/src/input/commands/agent-runtime-profile-runtime.ts +1 -1
- package/src/input/commands/delegation-runtime.ts +1 -1
- package/src/input/commands/experience-runtime.ts +3 -4
- package/src/input/commands/guidance-runtime.ts +1 -2
- package/src/input/commands/health-runtime.ts +3 -65
- package/src/input/commands/knowledge.ts +7 -7
- package/src/input/commands/local-setup-review.ts +0 -61
- package/src/input/commands/local-setup-transfer.ts +0 -3
- package/src/input/commands/local-setup.ts +2 -15
- package/src/input/commands/planning-runtime.ts +4 -1
- package/src/input/commands/platform-access-runtime.ts +1 -10
- package/src/input/commands/platform-services-runtime.ts +0 -1
- package/src/input/commands/recall-query.ts +1 -1
- package/src/input/commands/routines-runtime.ts +10 -6
- package/src/input/commands/schedule-runtime.ts +10 -6
- package/src/input/commands/session-workflow.ts +1 -1
- package/src/input/commands/tasks-runtime.ts +1 -14
- package/src/input/commands.ts +0 -4
- package/src/input/handler-onboarding.ts +10 -120
- package/src/input/onboarding/onboarding-wizard-apply.ts +5 -196
- package/src/input/onboarding/onboarding-wizard-constants.ts +8 -119
- package/src/input/onboarding/onboarding-wizard-helpers.ts +2 -53
- package/src/input/onboarding/onboarding-wizard-rules.ts +2 -236
- package/src/input/onboarding/onboarding-wizard-state.ts +1 -69
- package/src/input/onboarding/onboarding-wizard-steps.ts +584 -737
- package/src/input/onboarding/onboarding-wizard-types.ts +8 -26
- package/src/input/onboarding/onboarding-wizard.ts +4 -109
- package/src/input/settings-modal-agent-policy.ts +10 -0
- package/src/input/settings-modal-types.ts +2 -4
- package/src/input/settings-modal.ts +3 -1
- package/src/input/submission-router.ts +0 -1
- package/src/main.ts +13 -12
- package/src/panels/approval-panel.ts +1 -2
- package/src/panels/builtin/operations.ts +1 -2
- package/src/panels/knowledge-panel.ts +2 -2
- package/src/panels/project-planning-panel.ts +4 -1
- package/src/panels/provider-health-domains.ts +0 -22
- package/src/panels/provider-health-panel.ts +1 -5
- package/src/panels/session-browser-panel.ts +0 -5
- package/src/panels/tasks-panel.ts +2 -64
- package/src/renderer/agent-workspace.ts +1 -1
- package/src/renderer/help-overlay.ts +1 -2
- package/src/renderer/semantic-diff.ts +1 -1
- package/src/renderer/settings-modal-helpers.ts +0 -16
- package/src/renderer/settings-modal.ts +3 -5
- package/src/runtime/bootstrap-hook-bridge.ts +0 -3
- package/src/runtime/bootstrap-shell.ts +2 -1
- package/src/runtime/bootstrap.ts +1 -1
- package/src/runtime/index.ts +0 -1
- package/src/runtime/onboarding/derivation.ts +1 -28
- package/src/runtime/onboarding/snapshot.ts +0 -1
- package/src/runtime/onboarding/types.ts +1 -4
- package/src/runtime/services.ts +4 -23
- package/src/runtime/ui-read-models.ts +4 -3
- package/src/shell/service-settings-sync.ts +15 -244
- package/src/tools/agent-context-policy.ts +1 -1
- package/src/tools/wrfc-agent-guard.ts +3 -3
- package/src/verification/live-verifier.ts +11 -5
- package/src/verification/verification-ledger.ts +3 -6
- package/src/version.ts +1 -1
- package/src/input/commands/agent-externalized-tui.ts +0 -73
- package/src/input/commands/cloudflare-runtime.ts +0 -385
- package/src/input/handler-onboarding-cloudflare.ts +0 -322
- package/src/input/onboarding/onboarding-runtime-status.ts +0 -87
- package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +0 -494
- package/src/input/onboarding/onboarding-wizard-cloudflare.ts +0 -199
- package/src/input/onboarding/onboarding-wizard-external-surface-extra-specs.ts +0 -130
- package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +0 -762
- package/src/runtime/cloudflare-control-plane.ts +0 -350
- package/src/runtime/sandbox-public-gaps.ts +0 -358
|
@@ -83,7 +83,7 @@ function renderGuide(homeDirectory: string): string {
|
|
|
83
83
|
'5. Create a runtime profile from the imported starter:',
|
|
84
84
|
' /agent-profile create <name> --template <imported-id> --yes',
|
|
85
85
|
'',
|
|
86
|
-
'This writes only Agent-local starter/profile state. It does not mutate the daemon, default wiki, or
|
|
86
|
+
'This writes only Agent-local starter/profile state. It does not mutate the daemon, default wiki, or non-Agent knowledge segments.',
|
|
87
87
|
].join('\n');
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -29,7 +29,7 @@ function buildDelegationBody(task: string, wrfcRequested: boolean): string {
|
|
|
29
29
|
'Agent policy:',
|
|
30
30
|
'- GoodVibes Agent is not the coding TUI.',
|
|
31
31
|
'- Preserve the full original ask.',
|
|
32
|
-
'- GoodVibes TUI owns file edits, git/worktree flows,
|
|
32
|
+
'- GoodVibes TUI owns file edits, git/worktree flows, runtime-isolation UX, and any WRFC owner chain.',
|
|
33
33
|
wrfcRequested
|
|
34
34
|
? '- WRFC was explicitly requested by the Agent user for this build/fix/review delegation.'
|
|
35
35
|
: '- WRFC was not explicitly requested; do not turn this into WRFC solely because it came from Agent.',
|
|
@@ -200,7 +200,6 @@ export function registerExperienceRuntimeCommands(registry: CommandRegistry): vo
|
|
|
200
200
|
['remote', 'Remote dispatch approval with trust/artifact review.'],
|
|
201
201
|
['hook', 'Hook execution approval with deny/mutate authority review.'],
|
|
202
202
|
['plugin', 'Plugin lifecycle approval with provenance and capability review.'],
|
|
203
|
-
['sandbox', 'Sandbox isolation/policy change approval with WSL/VM review.'],
|
|
204
203
|
] as const;
|
|
205
204
|
if (sub === 'matrix') {
|
|
206
205
|
ctx.print([
|
|
@@ -213,13 +212,13 @@ export function registerExperienceRuntimeCommands(registry: CommandRegistry): vo
|
|
|
213
212
|
const kind = (args[1] ?? '').toLowerCase();
|
|
214
213
|
const entry = matrix.find(([id]) => id === kind);
|
|
215
214
|
if (!entry) {
|
|
216
|
-
ctx.print('Usage: /approval review <shell|file|network|delegate|mcp|remote|hook|plugin
|
|
215
|
+
ctx.print('Usage: /approval review <shell|file|network|delegate|mcp|remote|hook|plugin>');
|
|
217
216
|
return;
|
|
218
217
|
}
|
|
219
218
|
ctx.print([
|
|
220
219
|
`Approval Review: ${entry[0]}`,
|
|
221
220
|
` ${entry[1]}`,
|
|
222
|
-
' Related surfaces: /security, /policy preflight, /trust, /
|
|
221
|
+
' Related surfaces: /security, /policy preflight, /trust, /mcp',
|
|
223
222
|
].join('\n'));
|
|
224
223
|
return;
|
|
225
224
|
}
|
|
@@ -298,7 +297,7 @@ export function registerExperienceRuntimeCommands(registry: CommandRegistry): vo
|
|
|
298
297
|
enabled: Boolean(ctx.platform.configManager.get('ui.voiceEnabled')),
|
|
299
298
|
notes: [
|
|
300
299
|
'Voice is optional and local-first.',
|
|
301
|
-
'
|
|
300
|
+
'Operator review remains the primary control surface for risky actions.',
|
|
302
301
|
],
|
|
303
302
|
};
|
|
304
303
|
mkdirSync(dirname(targetPath), { recursive: true });
|
|
@@ -25,8 +25,7 @@ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void
|
|
|
25
25
|
'Welcome To GoodVibes',
|
|
26
26
|
' /onboarding - open the onboarding wizard with current settings preloaded',
|
|
27
27
|
' /setup onboarding - open the same onboarding wizard from setup workflows',
|
|
28
|
-
' /health review - unified startup, service, and
|
|
29
|
-
' /sandbox - explain that sandbox/QEMU workflows are delegated to GoodVibes TUI',
|
|
28
|
+
' /health review - unified startup, service, provider, and operator posture',
|
|
30
29
|
' /marketplace open - browse curated plugins, skills, hook packs, and policy packs',
|
|
31
30
|
' /remote setup - review bridge, tunnel, env, and bootstrap flows',
|
|
32
31
|
' /security - review trust posture, policy pressure, and incidents',
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { ServiceRegistry } from '@pellux/goodvibes-sdk/platform/config';
|
|
2
|
-
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
3
2
|
import { evaluateSessionMaintenance, formatSessionMaintenanceLines } from '@/runtime/index.ts';
|
|
4
3
|
import { estimateConversationTokens } from '@pellux/goodvibes-sdk/platform/core';
|
|
5
4
|
import type { CommandRegistry } from '../command-registry.ts';
|
|
6
5
|
import { buildSetupReviewSnapshot } from './local-setup-review.ts';
|
|
7
6
|
import { buildProviderAccountSnapshot } from '@/runtime/index.ts';
|
|
8
7
|
import { getSettingsControlPlaneSnapshot } from '@/runtime/index.ts';
|
|
9
|
-
import { listPersistedWorktreeMeta, summarizeWorktreeOwnership } from '@/runtime/index.ts';
|
|
10
8
|
import { checkRecoveryFile, readLastSessionPointer } from '@/runtime/index.ts';
|
|
11
9
|
import {
|
|
12
10
|
openCommandPanel,
|
|
@@ -20,26 +18,12 @@ import {
|
|
|
20
18
|
requireSessionMemoryStore,
|
|
21
19
|
} from './runtime-services.ts';
|
|
22
20
|
|
|
23
|
-
function renderSandboxHealthSummary(configManager: ConfigManager): string[] {
|
|
24
|
-
const backend = String(configManager.get('sandbox.vmBackend') ?? 'local');
|
|
25
|
-
const imagePath = String(configManager.get('sandbox.qemuImagePath') ?? '').trim();
|
|
26
|
-
const wrapperPath = String(configManager.get('sandbox.qemuExecWrapper') ?? '').trim();
|
|
27
|
-
const lines = [
|
|
28
|
-
` backend: ${backend}`,
|
|
29
|
-
` qemu image: ${imagePath || '(not configured)'}`,
|
|
30
|
-
` qemu wrapper: ${wrapperPath || '(not configured)'}`,
|
|
31
|
-
];
|
|
32
|
-
if (backend === 'qemu' && !imagePath) lines.push(' issue: qemu backend selected without qemuImagePath');
|
|
33
|
-
if (backend === 'qemu' && !wrapperPath) lines.push(' issue: qemu backend selected without qemuExecWrapper');
|
|
34
|
-
return lines;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
21
|
export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
38
22
|
registry.register({
|
|
39
23
|
name: 'health',
|
|
40
24
|
aliases: ['doctor'],
|
|
41
|
-
description: 'Health workspace for startup posture, service readiness,
|
|
42
|
-
usage: '[open|review|setup|services|
|
|
25
|
+
description: 'Health workspace for startup posture, service readiness, provider health, and Agent continuity',
|
|
26
|
+
usage: '[open|review|setup|services|provider|accounts|auth|settings|intelligence|remote|mcp|continuity|maintenance|repair [domain]]',
|
|
43
27
|
async handler(args, ctx) {
|
|
44
28
|
const sub = (args[0] ?? 'review').toLowerCase();
|
|
45
29
|
const readModels = requireReadModels(ctx);
|
|
@@ -72,14 +56,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
72
56
|
return;
|
|
73
57
|
}
|
|
74
58
|
|
|
75
|
-
if (sub === 'sandbox') {
|
|
76
|
-
ctx.print([
|
|
77
|
-
'Health Review: Sandbox',
|
|
78
|
-
...renderSandboxHealthSummary(ctx.platform.configManager),
|
|
79
|
-
].join('\n'));
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
59
|
if (sub === 'accounts') {
|
|
84
60
|
const operatorClient = requireOperatorClient(ctx);
|
|
85
61
|
const accounts = await operatorClient.providers.accountSnapshot();
|
|
@@ -259,29 +235,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
259
235
|
return;
|
|
260
236
|
}
|
|
261
237
|
|
|
262
|
-
if (sub === 'worktrees') {
|
|
263
|
-
const summary = readModels.worktrees.getSnapshot().summary;
|
|
264
|
-
const issues: string[] = [];
|
|
265
|
-
if (summary.discard > 0) issues.push(`${summary.discard} worktree(s) marked discard still tracked`);
|
|
266
|
-
if (summary.pendingCleanup > 0) issues.push(`${summary.pendingCleanup} worktree(s) awaiting cleanup`);
|
|
267
|
-
if ('kept' in summary && typeof (summary as { kept?: number }).kept === 'number' && (summary as { kept?: number }).kept! > 0) {
|
|
268
|
-
// read-model summary may include kept in some implementations; ignored in rendering below if absent
|
|
269
|
-
}
|
|
270
|
-
if (summary.paused > 0) issues.push(`${summary.paused} paused worktree(s) may need resume or merge review`);
|
|
271
|
-
ctx.print([
|
|
272
|
-
'Health Review: Worktrees',
|
|
273
|
-
` total: ${summary.total}`,
|
|
274
|
-
` active: ${summary.active}`,
|
|
275
|
-
` paused: ${summary.paused}`,
|
|
276
|
-
` discard: ${summary.discard}`,
|
|
277
|
-
` cleanup pending: ${summary.pendingCleanup}`,
|
|
278
|
-
...(issues.length > 0 ? issues.map((issue) => ` issue: ${issue}`) : [' no active worktree lifecycle issues detected']),
|
|
279
|
-
' next: worktree recovery is externalized to GoodVibes TUI.',
|
|
280
|
-
' next: use /delegate <task> only when the recovery is part of explicit build/fix/review work.',
|
|
281
|
-
].join('\n'));
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
238
|
if (sub === 'repair') {
|
|
286
239
|
const domain = (args[1] ?? 'review').toLowerCase();
|
|
287
240
|
const lines = ['Health Repair'];
|
|
@@ -316,12 +269,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
316
269
|
lines.push(' /services auth-review');
|
|
317
270
|
lines.push(' /health services');
|
|
318
271
|
lines.push(' verify: /health services');
|
|
319
|
-
} else if (domain === 'sandbox') {
|
|
320
|
-
lines.push(' domain: sandbox');
|
|
321
|
-
lines.push(' /sandbox');
|
|
322
|
-
lines.push(' delegate sandbox/QEMU setup and execution to GoodVibes TUI');
|
|
323
|
-
lines.push(' /health sandbox');
|
|
324
|
-
lines.push(' verify: /health sandbox');
|
|
325
272
|
} else if (domain === 'remote') {
|
|
326
273
|
lines.push(' domain: remote');
|
|
327
274
|
lines.push(' /remote supervisor');
|
|
@@ -347,11 +294,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
347
294
|
lines.push(' /compact');
|
|
348
295
|
lines.push(' /panel tokens');
|
|
349
296
|
lines.push(' verify: /health maintenance');
|
|
350
|
-
} else if (domain === 'worktrees') {
|
|
351
|
-
lines.push(' domain: worktrees');
|
|
352
|
-
lines.push(' worktree recovery is externalized to GoodVibes TUI');
|
|
353
|
-
lines.push(' /delegate <task> when explicit build/fix/review work needs repository recovery');
|
|
354
|
-
lines.push(' verify: /health worktrees');
|
|
355
297
|
} else if (domain === 'intelligence') {
|
|
356
298
|
lines.push(' domain: intelligence');
|
|
357
299
|
lines.push(' /intelligence review');
|
|
@@ -360,7 +302,7 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
360
302
|
lines.push(' /setup review');
|
|
361
303
|
lines.push(' verify: /health intelligence');
|
|
362
304
|
} else {
|
|
363
|
-
lines.push(' domains: settings, auth, accounts, services,
|
|
305
|
+
lines.push(' domains: settings, auth, accounts, services, remote, mcp, continuity, maintenance, intelligence');
|
|
364
306
|
lines.push(' use: /health repair <domain>');
|
|
365
307
|
}
|
|
366
308
|
ctx.print(lines.join('\n'));
|
|
@@ -409,8 +351,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
409
351
|
` managed locks: ${settingsSnapshot.managedLockCount}`,
|
|
410
352
|
` local auth users: ${readModels.localAuth.getSnapshot().userCount}`,
|
|
411
353
|
` remote runners: ${snapshot.remoteRunnerCount}`,
|
|
412
|
-
...renderSandboxHealthSummary(ctx.platform.configManager),
|
|
413
|
-
'',
|
|
414
354
|
...formatSessionMaintenanceLines(maintenance, 'guided').map((line) => ` ${line}`),
|
|
415
355
|
...(snapshot.issues.length > 0 ? ['', ...snapshot.issues.map((issue) => ` [${issue.severity.toUpperCase()}] ${issue.area}: ${issue.message}`)] : []),
|
|
416
356
|
...(snapshot.serviceIssues.length > 0 ? ['', ...snapshot.serviceIssues.map((issue) => ` service: ${issue}`)] : []),
|
|
@@ -418,14 +358,12 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
418
358
|
'Next steps:',
|
|
419
359
|
' /health open',
|
|
420
360
|
' /health services',
|
|
421
|
-
' /health sandbox',
|
|
422
361
|
' /health accounts',
|
|
423
362
|
' /health auth',
|
|
424
363
|
' /health settings',
|
|
425
364
|
' /health intelligence',
|
|
426
365
|
' /health remote',
|
|
427
366
|
' /health maintenance',
|
|
428
|
-
' /health worktrees',
|
|
429
367
|
' /health repair <domain>',
|
|
430
368
|
' /setup onboarding',
|
|
431
369
|
].join('\n'));
|
|
@@ -12,7 +12,7 @@ type KnowledgeAskMode = NonNullable<KnowledgeAskInput['mode']>;
|
|
|
12
12
|
function requireAgentKnowledgeApi(context: CommandContext) {
|
|
13
13
|
const knowledgeApi = context.clients?.agentKnowledgeApi;
|
|
14
14
|
if (!knowledgeApi) {
|
|
15
|
-
context.print('[knowledge] Agent Knowledge API is not available in this runtime. Refusing to use default Knowledge/Wiki or
|
|
15
|
+
context.print('[knowledge] Agent Knowledge API is not available in this runtime. Refusing to use default Knowledge/Wiki or non-Agent knowledge fallback.');
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
18
|
return knowledgeApi;
|
|
@@ -28,11 +28,11 @@ function findDisallowedKnowledgeScopeFlag(args: readonly string[]): string | nul
|
|
|
28
28
|
'--space',
|
|
29
29
|
'--knowledge-space',
|
|
30
30
|
'--knowledge-space-id',
|
|
31
|
-
'--
|
|
31
|
+
['--knowledge', 'SpaceId'].join(''),
|
|
32
32
|
'--include-all-spaces',
|
|
33
|
-
'--
|
|
34
|
-
'--
|
|
35
|
-
'--home-graph',
|
|
33
|
+
['--include', 'AllSpaces'].join(''),
|
|
34
|
+
['--home', 'graph'].join(''),
|
|
35
|
+
['--home', '-graph'].join(''),
|
|
36
36
|
];
|
|
37
37
|
for (const token of args) {
|
|
38
38
|
for (const flag of disallowed) {
|
|
@@ -45,7 +45,7 @@ function findDisallowedKnowledgeScopeFlag(args: readonly string[]): string | nul
|
|
|
45
45
|
function printScopeFlagRejection(context: CommandContext, flag: string): void {
|
|
46
46
|
context.print([
|
|
47
47
|
`[knowledge] Agent Knowledge is isolated; ${flag} is not accepted.`,
|
|
48
|
-
'[knowledge] GoodVibes Agent must not use default Knowledge/Wiki
|
|
48
|
+
'[knowledge] GoodVibes Agent must not use default Knowledge/Wiki or non-Agent product spaces.',
|
|
49
49
|
'[knowledge] Use only /api/goodvibes-agent/knowledge/* Agent-owned routes.',
|
|
50
50
|
].join('\n'));
|
|
51
51
|
}
|
|
@@ -89,7 +89,7 @@ function requireAgentKnowledgeAsk(context: CommandContext): ((input: KnowledgeAs
|
|
|
89
89
|
const serviceAsk = context.extensions.agentKnowledgeService?.ask?.bind(context.extensions.agentKnowledgeService);
|
|
90
90
|
if (serviceAsk) return serviceAsk;
|
|
91
91
|
|
|
92
|
-
context.print('[knowledge] Agent Knowledge ask is not available in this runtime. Refusing to use default Knowledge/Wiki or
|
|
92
|
+
context.print('[knowledge] Agent Knowledge ask is not available in this runtime. Refusing to use default Knowledge/Wiki or non-Agent knowledge fallback.');
|
|
93
93
|
return null;
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -2,7 +2,6 @@ import { dirname, join, resolve } from 'node:path';
|
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import type { CommandContext } from '../command-registry.ts';
|
|
4
4
|
import { discoverSkills } from '../../panels/skills-panel.ts';
|
|
5
|
-
import { buildSandboxReview, isRunningInWsl } from '@/runtime/index.ts';
|
|
6
5
|
import { getPluginDirectories } from '../../plugins/loader';
|
|
7
6
|
import { listBuiltinSubscriptionProviders } from '@pellux/goodvibes-sdk/platform/config';
|
|
8
7
|
import type { SetupReviewSnapshot } from './local-setup-transfer.ts';
|
|
@@ -37,10 +36,6 @@ export async function buildSetupReviewSnapshot(ctx: CommandContext): Promise<Set
|
|
|
37
36
|
const subscriptionManager = requireSubscriptionManager(ctx);
|
|
38
37
|
const activeSubscriptionCount = subscriptionManager.list().length;
|
|
39
38
|
const pendingSubscriptionCount = subscriptionManager.listPending().length;
|
|
40
|
-
const sandboxReplIsolation = String(ctx.platform.configManager.get('sandbox.replIsolation'));
|
|
41
|
-
const sandboxMcpIsolation = String(ctx.platform.configManager.get('sandbox.mcpIsolation'));
|
|
42
|
-
const sandboxReview = buildSandboxReview(ctx.platform.configManager);
|
|
43
|
-
const sandboxSecureModeReady = sandboxReview.host.secureSandboxReady;
|
|
44
39
|
const quarantinedPluginCount = plugins.filter((plugin) => plugin.quarantined).length;
|
|
45
40
|
const quarantinedMcpCount = mcpServers.filter((server) => server.schemaFreshness === 'quarantined').length;
|
|
46
41
|
const elevatedMcpCount = mcpServers.filter((server) => server.trustMode === 'allow-all').length;
|
|
@@ -96,15 +91,6 @@ export async function buildSetupReviewSnapshot(ctx: CommandContext): Promise<Set
|
|
|
96
91
|
area: 'remote',
|
|
97
92
|
message: remoteRunnerCount > 0 ? `${remoteRunnerCount} remote runner contract(s)` : 'no remote runner contracts registered',
|
|
98
93
|
},
|
|
99
|
-
{
|
|
100
|
-
severity: sandboxSecureModeReady || `${ctx.platform.configManager.get('sandbox.vmBackend')}` === 'local' ? 'pass' : 'warn',
|
|
101
|
-
area: 'sandbox',
|
|
102
|
-
message: `${ctx.platform.configManager.get('sandbox.vmBackend')}` === 'local'
|
|
103
|
-
? 'local mode (virtualization disabled by default)'
|
|
104
|
-
: sandboxSecureModeReady
|
|
105
|
-
? `QEMU enabled: REPL=${sandboxReplIsolation}, MCP=${sandboxMcpIsolation}`
|
|
106
|
-
: 'QEMU sandboxing requires running GoodVibes inside WSL on Windows',
|
|
107
|
-
},
|
|
108
94
|
];
|
|
109
95
|
|
|
110
96
|
return {
|
|
@@ -126,49 +112,11 @@ export async function buildSetupReviewSnapshot(ctx: CommandContext): Promise<Set
|
|
|
126
112
|
quarantinedMcpCount,
|
|
127
113
|
elevatedMcpCount,
|
|
128
114
|
remoteRunnerCount,
|
|
129
|
-
sandboxReplIsolation,
|
|
130
|
-
sandboxMcpIsolation,
|
|
131
|
-
sandboxSecureModeReady,
|
|
132
115
|
issues,
|
|
133
116
|
services,
|
|
134
117
|
};
|
|
135
118
|
}
|
|
136
119
|
|
|
137
|
-
export function renderSetupSandboxReview(ctx: CommandContext, snapshot: SetupReviewSnapshot): string {
|
|
138
|
-
const backend = `${ctx.platform.configManager.get('sandbox.vmBackend')}`;
|
|
139
|
-
const image = String(ctx.platform.configManager.get('sandbox.qemuImagePath') ?? '').trim();
|
|
140
|
-
const wrapper = String(ctx.platform.configManager.get('sandbox.qemuExecWrapper') ?? '').trim();
|
|
141
|
-
const host = String(ctx.platform.configManager.get('sandbox.qemuGuestHost') ?? '').trim();
|
|
142
|
-
const workspace = String(ctx.platform.configManager.get('sandbox.qemuWorkspacePath') ?? '').trim();
|
|
143
|
-
const lines = [
|
|
144
|
-
'Setup Sandbox Review',
|
|
145
|
-
` backend: ${backend}`,
|
|
146
|
-
` repl isolation: ${snapshot.sandboxReplIsolation}`,
|
|
147
|
-
` mcp isolation: ${snapshot.sandboxMcpIsolation}`,
|
|
148
|
-
` secure mode ready: ${snapshot.sandboxSecureModeReady ? 'yes' : 'no'}`,
|
|
149
|
-
` qemu image: ${image || '(not configured)'}`,
|
|
150
|
-
` qemu wrapper: ${wrapper || '(not configured)'}`,
|
|
151
|
-
` guest host: ${host || '(not configured)'}`,
|
|
152
|
-
` guest workspace: ${workspace || '(not configured)'}`,
|
|
153
|
-
'',
|
|
154
|
-
' next:',
|
|
155
|
-
];
|
|
156
|
-
if (backend === 'local') {
|
|
157
|
-
lines.push(' sandbox/QEMU setup is externalized to GoodVibes TUI');
|
|
158
|
-
lines.push(' use GoodVibes TUI for coding/runtime isolation work');
|
|
159
|
-
} else if (!image || !wrapper) {
|
|
160
|
-
lines.push(' sandbox/QEMU setup is externalized to GoodVibes TUI');
|
|
161
|
-
lines.push(' use GoodVibes TUI for coding/runtime isolation work');
|
|
162
|
-
} else {
|
|
163
|
-
lines.push(' sandbox sessions are blocked in Agent');
|
|
164
|
-
lines.push(' delegate build/fix/review work to GoodVibes TUI');
|
|
165
|
-
}
|
|
166
|
-
if (process.platform === 'win32' && !isRunningInWsl()) {
|
|
167
|
-
lines.push(' Run GoodVibes inside WSL before enabling QEMU sandboxing.');
|
|
168
|
-
}
|
|
169
|
-
return lines.join('\n');
|
|
170
|
-
}
|
|
171
|
-
|
|
172
120
|
export function exportSetupSupportBundle(
|
|
173
121
|
targetDirArg: string,
|
|
174
122
|
snapshot: SetupReviewSnapshot,
|
|
@@ -186,14 +134,5 @@ export function exportSetupSupportBundle(
|
|
|
186
134
|
if (existsSync(hooksPath)) {
|
|
187
135
|
writeFileSync(join(targetDir, 'hooks.managed.json'), readFileSync(hooksPath, 'utf-8'), 'utf-8');
|
|
188
136
|
}
|
|
189
|
-
writeFileSync(
|
|
190
|
-
join(targetDir, 'sandbox-externalized.txt'),
|
|
191
|
-
[
|
|
192
|
-
'GoodVibes Agent does not ship or manage QEMU sandbox wrappers.',
|
|
193
|
-
'Delegate build, fix, review, and runtime-isolation work to GoodVibes TUI.',
|
|
194
|
-
'',
|
|
195
|
-
].join('\n'),
|
|
196
|
-
'utf-8',
|
|
197
|
-
);
|
|
198
137
|
return targetDir;
|
|
199
138
|
}
|
|
@@ -25,9 +25,6 @@ export interface SetupReviewSnapshot {
|
|
|
25
25
|
readonly quarantinedMcpCount: number;
|
|
26
26
|
readonly elevatedMcpCount: number;
|
|
27
27
|
readonly remoteRunnerCount: number;
|
|
28
|
-
readonly sandboxReplIsolation: string;
|
|
29
|
-
readonly sandboxMcpIsolation: string;
|
|
30
|
-
readonly sandboxSecureModeReady: boolean;
|
|
31
28
|
readonly issues: Array<{ severity: 'pass' | 'warn' | 'fail'; area: string; message: string }>;
|
|
32
29
|
readonly services: string[];
|
|
33
30
|
}
|
|
@@ -25,7 +25,7 @@ export function registerLocalSetupCommands(registry: CommandRegistry): void {
|
|
|
25
25
|
name: 'setup',
|
|
26
26
|
aliases: ['startup'],
|
|
27
27
|
description: 'Launch the onboarding wizard and review Agent startup readiness',
|
|
28
|
-
usage: '[review|doctor|services|hooks|remote|
|
|
28
|
+
usage: '[review|doctor|services|hooks|remote|onboarding|support-bundle <dir> --yes|export <path> --yes|transfer <export|inspect|import> <path> [--yes]|link <surface> [target]|open-link <uri>]',
|
|
29
29
|
async handler(args, ctx) {
|
|
30
30
|
const parsed = stripYesFlag(args);
|
|
31
31
|
const commandArgs = [...parsed.rest];
|
|
@@ -58,7 +58,6 @@ export function registerLocalSetupCommands(registry: CommandRegistry): void {
|
|
|
58
58
|
` mcp quarantined: ${snapshot.quarantinedMcpCount}`,
|
|
59
59
|
` mcp elevated: ${snapshot.elevatedMcpCount}`,
|
|
60
60
|
` remote runners: ${snapshot.remoteRunnerCount}`,
|
|
61
|
-
' sandbox/QEMU: externalized to GoodVibes TUI for delegated build/runtime isolation',
|
|
62
61
|
'',
|
|
63
62
|
` service ids: ${snapshot.services.join(', ') || '(none)'}`,
|
|
64
63
|
` plugin dirs: ${snapshot.pluginDirectories.join(', ') || '(none)'}`,
|
|
@@ -71,7 +70,6 @@ export function registerLocalSetupCommands(registry: CommandRegistry): void {
|
|
|
71
70
|
ctx.print([
|
|
72
71
|
'Startup Doctor',
|
|
73
72
|
...snapshot.issues.map((issue) => ` [${issue.severity.toUpperCase()}] ${issue.area}: ${issue.message}`),
|
|
74
|
-
' [INFO] sandbox: GoodVibes Agent does not own sandbox/QEMU setup; delegate build/runtime isolation to GoodVibes TUI.',
|
|
75
73
|
...(snapshot.serviceIssues.length > 0
|
|
76
74
|
? ['', ' Service issues:', ...snapshot.serviceIssues.map((issue) => ` - ${issue}`)]
|
|
77
75
|
: []),
|
|
@@ -119,17 +117,6 @@ export function registerLocalSetupCommands(registry: CommandRegistry): void {
|
|
|
119
117
|
return;
|
|
120
118
|
}
|
|
121
119
|
|
|
122
|
-
if (sub === 'sandbox') {
|
|
123
|
-
ctx.print([
|
|
124
|
-
'Setup Sandbox',
|
|
125
|
-
' status: externalized',
|
|
126
|
-
' owner: GoodVibes TUI',
|
|
127
|
-
' reason: sandbox/QEMU setup and runtime isolation are coding/build execution surfaces.',
|
|
128
|
-
' result: no local Agent sandbox settings, files, or sessions were changed.',
|
|
129
|
-
].join('\n'));
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
120
|
if (sub === 'onboarding') {
|
|
134
121
|
openOnboardingWizard(ctx, { mode: 'edit', reset: true });
|
|
135
122
|
ctx.print('Opening onboarding wizard.');
|
|
@@ -295,7 +282,7 @@ export function registerLocalSetupCommands(registry: CommandRegistry): void {
|
|
|
295
282
|
return;
|
|
296
283
|
}
|
|
297
284
|
|
|
298
|
-
ctx.print('Usage: /setup [review|doctor|services|hooks|remote|
|
|
285
|
+
ctx.print('Usage: /setup [review|doctor|services|hooks|remote|onboarding|support-bundle <dir> --yes|export <path> --yes|transfer <export|inspect|import> <path> [--yes]|link <surface> [target]|open-link <uri>]');
|
|
299
286
|
},
|
|
300
287
|
});
|
|
301
288
|
}
|
|
@@ -89,11 +89,14 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
89
89
|
const { evaluation } = stateResult.state
|
|
90
90
|
? await persistEvaluatedNextQuestion(projectPlanningService, projectId, stateResult.state, initialEvaluation)
|
|
91
91
|
: { evaluation: initialEvaluation };
|
|
92
|
+
const planningNamespace = String(
|
|
93
|
+
status[['knowledge', 'SpaceId'].join('') as keyof typeof status] ?? `project:${status.projectId}`,
|
|
94
|
+
);
|
|
92
95
|
openProjectPlanningPanel();
|
|
93
96
|
ctx.print(
|
|
94
97
|
`Project planning: ${evaluation.readiness}\n` +
|
|
95
98
|
`Project: ${status.projectId}\n` +
|
|
96
|
-
`Planning namespace: ${
|
|
99
|
+
`Planning namespace: ${planningNamespace}\n` +
|
|
97
100
|
`Artifacts: ${status.counts.states} state, ${status.counts.decisions} decisions, ${status.counts.languageArtifacts} language\n` +
|
|
98
101
|
formatNextQuestion(evaluation.nextQuestion),
|
|
99
102
|
);
|
|
@@ -25,7 +25,6 @@ interface UpdateBundle {
|
|
|
25
25
|
readonly appVersion: string;
|
|
26
26
|
readonly updateChannel: 'stable' | 'preview';
|
|
27
27
|
readonly subscriptionProviders: readonly string[];
|
|
28
|
-
readonly sandboxProfile: string;
|
|
29
28
|
readonly notes: readonly string[];
|
|
30
29
|
}
|
|
31
30
|
|
|
@@ -61,7 +60,6 @@ function inspectUpdateBundle(bundle: UpdateBundle): string {
|
|
|
61
60
|
` appVersion: ${bundle.appVersion}`,
|
|
62
61
|
` updateChannel: ${bundle.updateChannel}`,
|
|
63
62
|
` subscriptionProviders: ${bundle.subscriptionProviders.length}`,
|
|
64
|
-
` sandboxProfile: ${bundle.sandboxProfile}`,
|
|
65
63
|
` notes: ${bundle.notes.length}`,
|
|
66
64
|
].join('\n');
|
|
67
65
|
}
|
|
@@ -226,11 +224,6 @@ export function registerPlatformAccessRuntimeCommands(registry: CommandRegistry)
|
|
|
226
224
|
const serviceRegistry = requireServiceRegistry(ctx);
|
|
227
225
|
const secretsManager = requireSecretsManager(ctx);
|
|
228
226
|
const builtinProviders = listBuiltinSubscriptionProviders().map((entry) => entry.provider);
|
|
229
|
-
const sandboxProfile = [
|
|
230
|
-
`${ctx.platform.configManager.get('sandbox.replIsolation')}`,
|
|
231
|
-
`${ctx.platform.configManager.get('sandbox.mcpIsolation')}`,
|
|
232
|
-
`${ctx.platform.configManager.get('sandbox.vmBackend')}`,
|
|
233
|
-
].join('/');
|
|
234
227
|
const activeSubscriptions = subscriptions.list().map((entry) => entry.provider);
|
|
235
228
|
if (sub === 'review') {
|
|
236
229
|
const channel = ctx.platform.configManager.get('release.channel');
|
|
@@ -240,7 +233,6 @@ export function registerPlatformAccessRuntimeCommands(registry: CommandRegistry)
|
|
|
240
233
|
` channel: ${channel}`,
|
|
241
234
|
` built-in subscription providers: ${builtinProviders.length}${builtinProviders.length > 0 ? ` (${builtinProviders.join(', ')})` : ''}`,
|
|
242
235
|
` active subscriptions: ${activeSubscriptions.length}${activeSubscriptions.length > 0 ? ` (${activeSubscriptions.join(', ')})` : ''}`,
|
|
243
|
-
` sandbox profile: ${sandboxProfile}`,
|
|
244
236
|
' use /update channel <stable|preview> --yes to change release posture',
|
|
245
237
|
].join('\n'));
|
|
246
238
|
return;
|
|
@@ -278,9 +270,8 @@ export function registerPlatformAccessRuntimeCommands(registry: CommandRegistry)
|
|
|
278
270
|
appVersion: VERSION,
|
|
279
271
|
updateChannel: ctx.platform.configManager.get('release.channel') as 'stable' | 'preview',
|
|
280
272
|
subscriptionProviders: [...new Set([...builtinProviders, ...activeSubscriptions])],
|
|
281
|
-
sandboxProfile,
|
|
282
273
|
notes: [
|
|
283
|
-
'Preview channel is recommended only when operator review
|
|
274
|
+
'Preview channel is recommended only when operator review is enabled.',
|
|
284
275
|
'OAuth-backed provider subscriptions survive channel changes and continue to apply to supported provider surfaces.',
|
|
285
276
|
],
|
|
286
277
|
};
|
|
@@ -220,7 +220,6 @@ export function registerPlatformServicesRuntimeCommands(registry: CommandRegistr
|
|
|
220
220
|
buildSetupLink('remote'),
|
|
221
221
|
buildSetupLink('knowledge'),
|
|
222
222
|
buildSetupLink('marketplace'),
|
|
223
|
-
buildSetupLink('sandbox'),
|
|
224
223
|
];
|
|
225
224
|
if (sub === 'review') {
|
|
226
225
|
ctx.print(['Deep Link Review', ...links.map((link) => ` ${link}`)].join('\n'));
|
|
@@ -8,7 +8,7 @@ export function getMemoryApi(context: CommandContext): MemoryApi | null {
|
|
|
8
8
|
const memoryApi = context.clients?.agentKnowledgeApi?.memory;
|
|
9
9
|
if (!memoryApi) {
|
|
10
10
|
context.print('[recall] Agent Memory API is not available in this runtime.');
|
|
11
|
-
context.print('[recall] Refusing to use default Knowledge/Wiki or
|
|
11
|
+
context.print('[recall] Refusing to use default Knowledge/Wiki or non-Agent knowledge fallback.');
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
14
|
return memoryApi;
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { AgentRoutineRegistry, type AgentRoutineRecord } from '../../agent/routine-registry.ts';
|
|
2
2
|
import {
|
|
3
3
|
buildRoutineSchedulePreview,
|
|
4
|
+
promoteRoutineToDaemonSchedule,
|
|
5
|
+
resolveAgentDaemonConnection,
|
|
6
|
+
} from '../../agent/routine-schedule-promotion.ts';
|
|
7
|
+
import { parseRoutineSchedulePromotionArgs } from '../../agent/routine-schedule-args.ts';
|
|
8
|
+
import {
|
|
4
9
|
formatRoutineScheduleCorrelation,
|
|
5
|
-
formatRoutineScheduleReceipt,
|
|
6
|
-
formatRoutineScheduleReceipts,
|
|
7
10
|
formatRoutineScheduleFailure,
|
|
8
11
|
formatRoutineSchedulePreview,
|
|
12
|
+
formatRoutineScheduleReceipt,
|
|
13
|
+
formatRoutineScheduleReceipts,
|
|
9
14
|
formatRoutineScheduleSuccess,
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
} from '../../agent/routine-schedule-format.ts';
|
|
16
|
+
import {
|
|
12
17
|
reconcileRoutineScheduleReceipts,
|
|
13
|
-
resolveAgentDaemonConnection,
|
|
14
18
|
RoutineScheduleReceiptStore,
|
|
15
|
-
} from '../../agent/routine-schedule-
|
|
19
|
+
} from '../../agent/routine-schedule-receipts.ts';
|
|
16
20
|
import type { CommandContext, CommandRegistry } from '../command-registry.ts';
|
|
17
21
|
import { requireShellPaths } from './runtime-services.ts';
|
|
18
22
|
|
|
@@ -7,18 +7,22 @@ import type { AutomationScheduleDefinition } from '@pellux/goodvibes-sdk/platfor
|
|
|
7
7
|
import { AgentRoutineRegistry } from '../../agent/routine-registry.ts';
|
|
8
8
|
import {
|
|
9
9
|
buildRoutineSchedulePreview,
|
|
10
|
+
promoteRoutineToDaemonSchedule,
|
|
11
|
+
resolveAgentDaemonConnection,
|
|
12
|
+
} from '../../agent/routine-schedule-promotion.ts';
|
|
13
|
+
import { parseRoutineSchedulePromotionArgs } from '../../agent/routine-schedule-args.ts';
|
|
14
|
+
import {
|
|
10
15
|
formatRoutineScheduleCorrelation,
|
|
11
|
-
formatRoutineScheduleReceipt,
|
|
12
|
-
formatRoutineScheduleReceipts,
|
|
13
16
|
formatRoutineScheduleFailure,
|
|
14
17
|
formatRoutineSchedulePreview,
|
|
18
|
+
formatRoutineScheduleReceipt,
|
|
19
|
+
formatRoutineScheduleReceipts,
|
|
15
20
|
formatRoutineScheduleSuccess,
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
} from '../../agent/routine-schedule-format.ts';
|
|
22
|
+
import {
|
|
18
23
|
reconcileRoutineScheduleReceipts,
|
|
19
|
-
resolveAgentDaemonConnection,
|
|
20
24
|
RoutineScheduleReceiptStore,
|
|
21
|
-
} from '../../agent/routine-schedule-
|
|
25
|
+
} from '../../agent/routine-schedule-receipts.ts';
|
|
22
26
|
import type { CommandContext } from '../command-registry.ts';
|
|
23
27
|
import { requireShellPaths } from './runtime-services.ts';
|
|
24
28
|
|
|
@@ -267,7 +267,7 @@ export async function handleSessionWorkflowCommand(args: string[], ctx: CommandC
|
|
|
267
267
|
ctx.print(` Remote re-entry: /remote recover ${meta.returnContext.remoteRunners![0]}`);
|
|
268
268
|
}
|
|
269
269
|
if ((meta.returnContext.worktreePaths?.length ?? 0) > 0) {
|
|
270
|
-
ctx.print(' Worktree re-entry: open GoodVibes TUI in the target workspace;
|
|
270
|
+
ctx.print(' Worktree re-entry: open GoodVibes TUI in the target workspace; delegate explicit build/fix/review recovery from Agent.');
|
|
271
271
|
}
|
|
272
272
|
if (returnContextMode === 'assisted') {
|
|
273
273
|
const helperModel = providerApi.createHelperModel(ctx.platform.configManager);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { CommandRegistry } from '../command-registry.ts';
|
|
2
2
|
import type { RuntimeTask, TaskLifecycleState } from '@/runtime/index.ts';
|
|
3
|
-
import {
|
|
4
|
-
import { requireOperatorClient, requirePanelManager, requireShellPaths } from './runtime-services.ts';
|
|
3
|
+
import { requireOperatorClient, requirePanelManager } from './runtime-services.ts';
|
|
5
4
|
|
|
6
5
|
const BLOCKED_TASK_MUTATIONS: ReadonlySet<string> = new Set([
|
|
7
6
|
'create',
|
|
@@ -108,18 +107,6 @@ export function registerTasksRuntimeCommands(registry: CommandRegistry): void {
|
|
|
108
107
|
` parent: ${task.parentTaskId ?? 'none'}`,
|
|
109
108
|
` children: ${task.childTaskIds.join(', ') || '(none)'}`,
|
|
110
109
|
` correlationId: ${task.correlationId ?? 'n/a'}`,
|
|
111
|
-
...(() => {
|
|
112
|
-
const shellPaths = requireShellPaths(ctx);
|
|
113
|
-
const worktrees = reviewWorktreeAttachments('task', task.id, {
|
|
114
|
-
workingDirectory: shellPaths.workingDirectory,
|
|
115
|
-
});
|
|
116
|
-
return worktrees.total > 0
|
|
117
|
-
? [
|
|
118
|
-
` worktrees: ${worktrees.total} tracked (${worktrees.active} active / ${worktrees.paused} paused / ${worktrees.pendingCleanup} cleanup)`,
|
|
119
|
-
' worktree next: open GoodVibes TUI in the target workspace for recovery.',
|
|
120
|
-
]
|
|
121
|
-
: [];
|
|
122
|
-
})(),
|
|
123
110
|
` summary: ${summarizeTaskResult(task)}`,
|
|
124
111
|
].join('\n'));
|
|
125
112
|
return;
|
package/src/input/commands.ts
CHANGED
|
@@ -49,11 +49,9 @@ import { registerConversationRuntimeCommands } from './commands/conversation-run
|
|
|
49
49
|
import { registerQrcodeRuntimeCommands } from './commands/qrcode-runtime.ts';
|
|
50
50
|
import { registerOnboardingRuntimeCommands } from './commands/onboarding-runtime.ts';
|
|
51
51
|
import { registerTtsRuntimeCommands } from './commands/tts-runtime.ts';
|
|
52
|
-
import { registerCloudflareRuntimeCommands } from './commands/cloudflare-runtime.ts';
|
|
53
52
|
import { registerWorkPlanRuntimeCommands } from './commands/work-plan-runtime.ts';
|
|
54
53
|
import { registerAgentWorkspaceRuntimeCommands } from './commands/agent-workspace-runtime.ts';
|
|
55
54
|
import { registerAgentRuntimeProfileRuntimeCommands } from './commands/agent-runtime-profile-runtime.ts';
|
|
56
|
-
import { registerAgentExternalizedTuiCommands } from './commands/agent-externalized-tui.ts';
|
|
57
55
|
import { registerDelegationRuntimeCommands } from './commands/delegation-runtime.ts';
|
|
58
56
|
import { registerPersonasRuntimeCommands } from './commands/personas-runtime.ts';
|
|
59
57
|
import { registerAgentSkillsRuntimeCommands } from './commands/agent-skills-runtime.ts';
|
|
@@ -74,7 +72,6 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
74
72
|
registerConfigCommand(registry);
|
|
75
73
|
registerOperatorRuntimeCommands(registry);
|
|
76
74
|
registerIntegrationRuntimeCommands(registry);
|
|
77
|
-
registerAgentExternalizedTuiCommands(registry);
|
|
78
75
|
registerNotifyRuntimeCommands(registry);
|
|
79
76
|
registerReplayRuntimeCommands(registry);
|
|
80
77
|
registerShareRuntimeCommands(registry);
|
|
@@ -109,7 +106,6 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
109
106
|
registerQrcodeRuntimeCommands(registry);
|
|
110
107
|
registerOnboardingRuntimeCommands(registry);
|
|
111
108
|
registerTtsRuntimeCommands(registry);
|
|
112
|
-
registerCloudflareRuntimeCommands(registry);
|
|
113
109
|
registerWorkPlanRuntimeCommands(registry);
|
|
114
110
|
registerLocalRuntimeCommands(registry);
|
|
115
111
|
registerSessionWorkflowCommands(registry);
|