@pellux/goodvibes-agent 1.0.35 → 1.0.36
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 +15 -9
- package/README.md +8 -7
- package/dist/package/{ast-grep-napi.linux-x64-gnu-swtppvy9.node → ast-grep-napi.linux-x64-gnu-mkk8xwww.node} +0 -0
- package/dist/package/{ast-grep-napi.linux-x64-musl-ttfcdtap.node → ast-grep-napi.linux-x64-musl-ryqtgdv6.node} +0 -0
- package/dist/package/main.js +51504 -49337
- package/docs/README.md +6 -5
- package/docs/channels-remote-and-api.md +3 -3
- package/docs/connected-host.md +3 -3
- package/docs/getting-started.md +12 -7
- package/docs/knowledge-artifacts-and-multimodal.md +9 -4
- package/docs/project-planning.md +3 -3
- package/docs/providers-and-routing.md +2 -2
- package/docs/release-and-publishing.md +8 -8
- package/docs/tools-and-commands.md +31 -18
- package/docs/voice-and-live-tts.md +1 -1
- package/package.json +1 -1
- package/release/live-verification/live-verification.json +3 -3
- package/release/live-verification/live-verification.md +2 -4
- package/release/release-notes.md +4 -4
- package/release/release-readiness.json +46 -46
- package/src/agent/harness-control.ts +35 -9
- package/src/agent/reminder-schedule-format.ts +2 -5
- package/src/agent/reminder-schedule.ts +4 -11
- package/src/agent/routine-schedule-format.ts +3 -6
- package/src/agent/routine-schedule-promotion.ts +5 -14
- package/src/agent/routine-schedule-receipts.ts +4 -9
- package/src/cli/agent-knowledge-command.ts +6 -11
- package/src/cli/agent-knowledge-format.ts +4 -9
- package/src/cli/agent-knowledge-runtime.ts +7 -14
- package/src/cli/external-runtime.ts +3 -46
- package/src/cli/help.ts +2 -2
- package/src/cli/status.ts +6 -7
- package/src/input/agent-workspace-categories.ts +23 -23
- package/src/input/agent-workspace-channels.ts +3 -3
- package/src/input/agent-workspace-operations-command-editors.ts +1 -1
- package/src/input/command-registry.ts +1 -1
- package/src/input/commands/compat-runtime.ts +1 -1
- package/src/input/commands/planning-runtime.ts +1 -1
- package/src/input/commands/runtime-services.ts +1 -1
- package/src/input/mcp-workspace.ts +1 -1
- package/src/input/submission-router.ts +1 -1
- package/src/panels/builtin/shared.ts +1 -1
- package/src/panels/project-planning-panel.ts +4 -4
- package/src/panels/qr-panel.ts +2 -2
- package/src/renderer/conversation-overlays.ts +1 -0
- package/src/runtime/bootstrap-command-parts.ts +1 -1
- package/src/runtime/bootstrap-core.ts +1 -1
- package/src/runtime/bootstrap-hook-bridge.ts +1 -1
- package/src/runtime/bootstrap-shell.ts +1 -1
- package/src/runtime/bootstrap.ts +5 -4
- package/src/runtime/context.ts +2 -2
- package/src/runtime/index.ts +88 -5
- package/src/runtime/store/state.ts +1 -1
- package/src/tools/agent-channel-send-tool.ts +1 -1
- package/src/tools/agent-harness-channel-metadata.ts +36 -25
- package/src/tools/agent-harness-cli-metadata.ts +19 -1
- package/src/tools/agent-harness-command-catalog.ts +15 -4
- package/src/tools/agent-harness-connected-host-status.ts +7 -6
- package/src/tools/agent-harness-delegation-posture.ts +15 -4
- package/src/tools/agent-harness-keybinding-metadata.ts +67 -16
- package/src/tools/agent-harness-mcp-metadata.ts +11 -3
- package/src/tools/agent-harness-media-posture.ts +25 -14
- package/src/tools/agent-harness-metadata.ts +97 -6
- package/src/tools/agent-harness-mode-catalog.ts +81 -28
- package/src/tools/agent-harness-model-routing.ts +18 -3
- package/src/tools/agent-harness-model-tool-catalog.ts +85 -7
- package/src/tools/agent-harness-notification-metadata.ts +30 -19
- package/src/tools/agent-harness-operator-methods.ts +13 -8
- package/src/tools/agent-harness-pairing-posture.ts +17 -5
- package/src/tools/agent-harness-panel-metadata.ts +10 -4
- package/src/tools/agent-harness-provider-account-metadata.ts +46 -35
- package/src/tools/agent-harness-release-evidence.ts +31 -3
- package/src/tools/agent-harness-release-readiness.ts +30 -0
- package/src/tools/agent-harness-security-posture.ts +18 -4
- package/src/tools/agent-harness-service-posture.ts +8 -1
- package/src/tools/agent-harness-session-metadata.ts +24 -8
- package/src/tools/agent-harness-setup-posture.ts +32 -21
- package/src/tools/agent-harness-text.ts +6 -0
- package/src/tools/agent-harness-tool.ts +26 -34
- package/src/tools/agent-harness-ui-surface-metadata.ts +84 -84
- package/src/tools/agent-harness-workspace-actions.ts +64 -3
- package/src/tools/agent-knowledge-ingest-tool.ts +1 -1
- package/src/tools/agent-knowledge-tool.ts +1 -1
- package/src/tools/agent-media-generate-tool.ts +2 -2
- package/src/tools/agent-notify-tool.ts +1 -1
- package/src/tools/agent-reminder-schedule-tool.ts +1 -1
- package/src/tools/tool-definition-compaction.ts +35 -8
- package/src/version.ts +2 -8
|
@@ -6,7 +6,6 @@ import { formatEveryInterval } from '@pellux/goodvibes-sdk/platform/automation';
|
|
|
6
6
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
|
|
7
7
|
import type { ShellPathService } from '@/runtime/index.ts';
|
|
8
8
|
import { GOODVIBES_AGENT_SURFACE_ROOT } from '../config/surface.ts';
|
|
9
|
-
import { SDK_VERSION } from '../version.ts';
|
|
10
9
|
import { isRoutineScheduleDeliverySurfaceKind } from './routine-schedule-args.ts';
|
|
11
10
|
import {
|
|
12
11
|
ROUTINE_SCHEDULE_LIST_METHOD,
|
|
@@ -83,7 +82,7 @@ function redactedDeliveryTargets(delivery: ScheduleDeliveryInput | undefined): r
|
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
function normalizeFailureKind(value: unknown): RoutineScheduleReceipt['failureKind'] {
|
|
86
|
-
if (value === 'confirmation_required' || value === 'auth_required' || value === '
|
|
85
|
+
if (value === 'confirmation_required' || value === 'auth_required' || value === 'connected_host_incompatible') return value;
|
|
87
86
|
if (value === 'connected_host_unavailable' || value === 'connected_host_route_unavailable' || value === 'connected_host_error') return value;
|
|
88
87
|
if (value === 'daemon_unavailable') return 'connected_host_unavailable';
|
|
89
88
|
if (value === 'daemon_route_unavailable') return 'connected_host_route_unavailable';
|
|
@@ -450,17 +449,13 @@ async function classifyScheduleListError(
|
|
|
450
449
|
}
|
|
451
450
|
if (lower.includes('404') || lower.includes('not found')) {
|
|
452
451
|
const connectedHost = await fetchConnectedHostStatus(connection);
|
|
453
|
-
|
|
454
|
-
const connectedHostVersion = readString(record, 'version') ?? 'unknown';
|
|
455
|
-
if (connectedHost.ok && connectedHostVersion !== SDK_VERSION) {
|
|
452
|
+
if (connectedHost.ok) {
|
|
456
453
|
return {
|
|
457
454
|
ok: false,
|
|
458
|
-
kind: '
|
|
459
|
-
error:
|
|
455
|
+
kind: 'connected_host_incompatible',
|
|
456
|
+
error: 'Connected GoodVibes host compatibility does not satisfy Agent schedule requirements; schedules.list is unavailable.',
|
|
460
457
|
route: ROUTINE_SCHEDULE_ROUTE,
|
|
461
458
|
baseUrl: connection.baseUrl,
|
|
462
|
-
connectedHostVersion,
|
|
463
|
-
expectedSdkVersion: SDK_VERSION,
|
|
464
459
|
};
|
|
465
460
|
}
|
|
466
461
|
return { ok: false, kind: 'connected_host_route_unavailable', error: message, route: ROUTINE_SCHEDULE_ROUTE, baseUrl: connection.baseUrl };
|
|
@@ -484,23 +484,19 @@ export async function handleCompatCommand(runtime: CliCommandRuntime): Promise<C
|
|
|
484
484
|
const connection = resolveConnectedHostConnection(runtime);
|
|
485
485
|
const metadata = readPackageMetadata();
|
|
486
486
|
const connectedHost = await fetchConnectedHostStatus(connection);
|
|
487
|
-
const connectedHostRecord = isRecord(connectedHost.body) ? connectedHost.body : {};
|
|
488
|
-
const connectedHostVersion = readString(connectedHostRecord, 'version') ?? 'unknown';
|
|
489
|
-
const versionCompatible = connectedHost.ok && connectedHostVersion === metadata.sdkVersion;
|
|
490
487
|
const knowledgeRoute = await runKnowledgeCall(runtime, AGENT_KNOWLEDGE_METHODS.status, async (routeConnection) => (
|
|
491
488
|
await createAgentSdk(routeConnection).knowledge.status()
|
|
492
489
|
));
|
|
493
490
|
const knowledgeRouteReady = knowledgeRoute.ok;
|
|
491
|
+
const hostCompatible = connectedHost.ok && knowledgeRouteReady;
|
|
494
492
|
const value = {
|
|
495
|
-
ok:
|
|
493
|
+
ok: hostCompatible && knowledgeRouteReady,
|
|
496
494
|
packageVersion: metadata.version,
|
|
497
|
-
sdkPin: metadata.sdkVersion,
|
|
498
495
|
connectedHost: {
|
|
499
496
|
baseUrl: connection.baseUrl,
|
|
500
497
|
status: connectedHost.status,
|
|
501
|
-
version: connectedHostVersion,
|
|
502
498
|
reachable: connectedHost.ok,
|
|
503
|
-
compatible:
|
|
499
|
+
compatible: hostCompatible,
|
|
504
500
|
},
|
|
505
501
|
auth: {
|
|
506
502
|
tokenPresent: Boolean(connection.token),
|
|
@@ -515,12 +511,11 @@ export async function handleCompatCommand(runtime: CliCommandRuntime): Promise<C
|
|
|
515
511
|
const text = [
|
|
516
512
|
'GoodVibes Agent compatibility',
|
|
517
513
|
` package ${metadata.version}`,
|
|
518
|
-
`
|
|
519
|
-
`
|
|
520
|
-
` version compatible ${yesNo(versionCompatible)}`,
|
|
514
|
+
` connected host ${connection.baseUrl} (${connectedHost.ok ? 'reachable' : 'unreachable'})`,
|
|
515
|
+
` host compatible ${yesNo(hostCompatible)}`,
|
|
521
516
|
` operator token ${connection.token ? 'present' : 'missing'} (${connection.tokenPath})`,
|
|
522
517
|
` Agent Knowledge route ${knowledgeRouteReady ? 'ready' : `not ready (${knowledgeRoute.ok ? 'unknown' : formatAgentKnowledgeFailureKind(knowledgeRoute.kind)})`}`,
|
|
523
|
-
...(
|
|
518
|
+
...(hostCompatible ? [] : [' next update the connected GoodVibes host so its public Agent routes are compatible.']),
|
|
524
519
|
].join('\n');
|
|
525
520
|
return {
|
|
526
521
|
output: runtime.cli.flags.outputFormat === 'json' ? JSON.stringify(value, null, 2) : text,
|
|
@@ -6,8 +6,6 @@ export interface AgentKnowledgeFailureLike {
|
|
|
6
6
|
readonly error: string;
|
|
7
7
|
readonly baseUrl: string;
|
|
8
8
|
readonly route: string;
|
|
9
|
-
readonly connectedHostVersion?: string;
|
|
10
|
-
readonly expectedSdkVersion?: string;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
export function isRecord(value: unknown): value is JsonRecord {
|
|
@@ -45,10 +43,10 @@ function yesNo(value: boolean): string {
|
|
|
45
43
|
export function formatAgentKnowledgeFailureKind(kind: string): string {
|
|
46
44
|
if (kind === 'auth_required') return 'authorization required';
|
|
47
45
|
if (kind === 'connected_host_unavailable') return 'connected host unavailable';
|
|
46
|
+
if (kind === 'connected_host_incompatible') return 'connected host incompatible';
|
|
48
47
|
if (kind === 'connected_host_route_unavailable') return 'connected host route unavailable';
|
|
49
48
|
if (kind === 'connected_host_error') return 'connected host error';
|
|
50
49
|
if (kind === 'scope_contamination') return 'scope contamination';
|
|
51
|
-
if (kind === 'version_mismatch') return 'version mismatch';
|
|
52
50
|
return kind.replace(/[_-]+/g, ' ');
|
|
53
51
|
}
|
|
54
52
|
|
|
@@ -384,14 +382,11 @@ export function formatFailure(failure: AgentKnowledgeFailureLike, json: boolean)
|
|
|
384
382
|
` ${failure.error}`,
|
|
385
383
|
` connected host ${failure.baseUrl}`,
|
|
386
384
|
` route ${failure.route}`,
|
|
387
|
-
failure.kind === '
|
|
388
|
-
?
|
|
389
|
-
: null,
|
|
390
|
-
failure.kind === 'version_mismatch'
|
|
391
|
-
? ' next update the connected GoodVibes host so /status matches the Agent SDK pin.'
|
|
385
|
+
failure.kind === 'connected_host_incompatible'
|
|
386
|
+
? ' next update the connected GoodVibes host so its public Agent routes are compatible.'
|
|
392
387
|
: null,
|
|
393
388
|
failure.kind === 'connected_host_route_unavailable'
|
|
394
|
-
? ' next update the connected GoodVibes host
|
|
389
|
+
? ' next update the connected GoodVibes host so Agent Knowledge routes are available.'
|
|
395
390
|
: null,
|
|
396
391
|
failure.kind === 'scope_contamination'
|
|
397
392
|
? ' next update the connected GoodVibes host so Agent Knowledge routes return only Agent-owned scope data.'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createBrowserAgentSdk } from '@pellux/goodvibes-sdk/browser/agent';
|
|
2
2
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
|
|
3
|
-
import {
|
|
3
|
+
import { VERSION } from '../version.ts';
|
|
4
4
|
import { readConnectedHostOperatorToken } from '../runtime/connected-host-auth.ts';
|
|
5
5
|
import type { ConnectedHostCallMethod } from './agent-knowledge-methods.ts';
|
|
6
6
|
|
|
@@ -24,15 +24,13 @@ export interface AgentKnowledgeFailure {
|
|
|
24
24
|
readonly kind:
|
|
25
25
|
| 'connected_host_unavailable'
|
|
26
26
|
| 'auth_required'
|
|
27
|
-
| '
|
|
27
|
+
| 'connected_host_incompatible'
|
|
28
28
|
| 'connected_host_route_unavailable'
|
|
29
29
|
| 'connected_host_error'
|
|
30
30
|
| 'scope_contamination';
|
|
31
31
|
readonly error: string;
|
|
32
32
|
readonly baseUrl: string;
|
|
33
33
|
readonly route: string;
|
|
34
|
-
readonly connectedHostVersion?: string;
|
|
35
|
-
readonly expectedSdkVersion?: string;
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
export interface AgentKnowledgeSuccess<TData> {
|
|
@@ -53,8 +51,8 @@ export function readString(record: JsonRecord | null, key: string): string | nul
|
|
|
53
51
|
return typeof value === 'string' ? value : null;
|
|
54
52
|
}
|
|
55
53
|
|
|
56
|
-
export function readPackageMetadata(): { readonly version: string
|
|
57
|
-
return { version: VERSION
|
|
54
|
+
export function readPackageMetadata(): { readonly version: string } {
|
|
55
|
+
return { version: VERSION };
|
|
58
56
|
}
|
|
59
57
|
|
|
60
58
|
export function resolveConnectedHostConnection(runtime: AgentKnowledgeConnectionRuntime): AgentKnowledgeConnection {
|
|
@@ -90,19 +88,14 @@ export async function classifyKnowledgeError(error: unknown, connection: AgentKn
|
|
|
90
88
|
return { ok: false, kind: 'auth_required', error: message, baseUrl: connection.baseUrl, route };
|
|
91
89
|
}
|
|
92
90
|
if (lower.includes('404') || lower.includes('not found')) {
|
|
93
|
-
const metadata = readPackageMetadata();
|
|
94
91
|
const connectedHost = await fetchConnectedHostStatus(connection);
|
|
95
|
-
|
|
96
|
-
const connectedHostVersion = readString(connectedHostRecord, 'version') ?? 'unknown';
|
|
97
|
-
if (connectedHost.ok && connectedHostVersion !== metadata.sdkVersion) {
|
|
92
|
+
if (connectedHost.ok) {
|
|
98
93
|
return {
|
|
99
94
|
ok: false,
|
|
100
|
-
kind: '
|
|
101
|
-
error: `Connected GoodVibes host
|
|
95
|
+
kind: 'connected_host_incompatible',
|
|
96
|
+
error: `Connected GoodVibes host compatibility does not satisfy Agent Knowledge requirements; Agent Knowledge route is unavailable.`,
|
|
102
97
|
baseUrl: connection.baseUrl,
|
|
103
98
|
route,
|
|
104
|
-
connectedHostVersion,
|
|
105
|
-
expectedSdkVersion: metadata.sdkVersion,
|
|
106
99
|
};
|
|
107
100
|
}
|
|
108
101
|
return { ok: false, kind: 'connected_host_route_unavailable', error: message, baseUrl: connection.baseUrl, route };
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
2
2
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
|
|
3
|
-
import { SDK_VERSION } from '../version.ts';
|
|
4
3
|
import { readConnectedHostOperatorToken } from '../runtime/connected-host-auth.ts';
|
|
5
4
|
|
|
6
|
-
type JsonRecord = Record<string, unknown>;
|
|
7
|
-
|
|
8
5
|
export interface CliExternalRuntimeInspectionOptions {
|
|
9
6
|
readonly configManager: Pick<ConfigManager, 'get'>;
|
|
10
7
|
readonly homeDirectory: string;
|
|
@@ -15,8 +12,6 @@ export interface CliExternalRuntimeSnapshot {
|
|
|
15
12
|
readonly baseUrl: string;
|
|
16
13
|
readonly statusCode: number | null;
|
|
17
14
|
readonly reachable: boolean;
|
|
18
|
-
readonly version: string;
|
|
19
|
-
readonly expectedVersion: string;
|
|
20
15
|
readonly compatible: boolean;
|
|
21
16
|
readonly operatorToken: {
|
|
22
17
|
readonly present: boolean;
|
|
@@ -25,21 +20,12 @@ export interface CliExternalRuntimeSnapshot {
|
|
|
25
20
|
readonly agentKnowledge: {
|
|
26
21
|
readonly route: '/api/goodvibes-agent/knowledge/status';
|
|
27
22
|
readonly ready: boolean;
|
|
28
|
-
readonly kind: 'ok' | 'auth_required' | 'connected_host_unavailable' | '
|
|
23
|
+
readonly kind: 'ok' | 'auth_required' | 'connected_host_unavailable' | 'connected_host_incompatible' | 'connected_host_route_unavailable' | 'connected_host_error';
|
|
29
24
|
readonly statusCode: number | null;
|
|
30
25
|
};
|
|
31
26
|
readonly error: string | null;
|
|
32
27
|
}
|
|
33
28
|
|
|
34
|
-
function isRecord(value: unknown): value is JsonRecord {
|
|
35
|
-
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function readString(record: JsonRecord | null, key: string): string | null {
|
|
39
|
-
const value = record?.[key];
|
|
40
|
-
return typeof value === 'string' ? value : null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
29
|
function resolveBaseUrl(configManager: Pick<ConfigManager, 'get'>): string {
|
|
44
30
|
const host = String(configManager.get('controlPlane.host') ?? '127.0.0.1');
|
|
45
31
|
const port = Number(configManager.get('controlPlane.port') ?? 3421);
|
|
@@ -83,17 +69,12 @@ export async function inspectCliExternalRuntime(
|
|
|
83
69
|
|
|
84
70
|
try {
|
|
85
71
|
const status = await fetchJson(`${baseUrl}/status`, token.token, timeoutMs);
|
|
86
|
-
const statusRecord = isRecord(status.body) ? status.body : {};
|
|
87
|
-
const version = readString(statusRecord, 'version') ?? 'unknown';
|
|
88
|
-
const compatible = status.ok && version === SDK_VERSION;
|
|
89
72
|
|
|
90
73
|
if (!status.ok) {
|
|
91
74
|
return {
|
|
92
75
|
baseUrl,
|
|
93
76
|
statusCode: status.status,
|
|
94
77
|
reachable: false,
|
|
95
|
-
version,
|
|
96
|
-
expectedVersion: SDK_VERSION,
|
|
97
78
|
compatible: false,
|
|
98
79
|
operatorToken: { present: Boolean(token.token), path: token.path },
|
|
99
80
|
agentKnowledge: {
|
|
@@ -111,9 +92,7 @@ export async function inspectCliExternalRuntime(
|
|
|
111
92
|
baseUrl,
|
|
112
93
|
statusCode: status.status,
|
|
113
94
|
reachable: true,
|
|
114
|
-
|
|
115
|
-
expectedVersion: SDK_VERSION,
|
|
116
|
-
compatible,
|
|
95
|
+
compatible: false,
|
|
117
96
|
operatorToken: { present: false, path: token.path },
|
|
118
97
|
agentKnowledge: {
|
|
119
98
|
route,
|
|
@@ -125,32 +104,12 @@ export async function inspectCliExternalRuntime(
|
|
|
125
104
|
};
|
|
126
105
|
}
|
|
127
106
|
|
|
128
|
-
if (!compatible) {
|
|
129
|
-
return {
|
|
130
|
-
baseUrl,
|
|
131
|
-
statusCode: status.status,
|
|
132
|
-
reachable: true,
|
|
133
|
-
version,
|
|
134
|
-
expectedVersion: SDK_VERSION,
|
|
135
|
-
compatible: false,
|
|
136
|
-
operatorToken: { present: true, path: token.path },
|
|
137
|
-
agentKnowledge: {
|
|
138
|
-
route,
|
|
139
|
-
ready: false,
|
|
140
|
-
kind: 'version_mismatch',
|
|
141
|
-
statusCode: null,
|
|
142
|
-
},
|
|
143
|
-
error: null,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
107
|
const knowledge = await fetchJson(`${baseUrl}${route}`, token.token, timeoutMs);
|
|
108
|
+
const compatible = knowledge.ok;
|
|
148
109
|
return {
|
|
149
110
|
baseUrl,
|
|
150
111
|
statusCode: status.status,
|
|
151
112
|
reachable: true,
|
|
152
|
-
version,
|
|
153
|
-
expectedVersion: SDK_VERSION,
|
|
154
113
|
compatible,
|
|
155
114
|
operatorToken: { present: true, path: token.path },
|
|
156
115
|
agentKnowledge: {
|
|
@@ -172,8 +131,6 @@ export async function inspectCliExternalRuntime(
|
|
|
172
131
|
baseUrl,
|
|
173
132
|
statusCode: null,
|
|
174
133
|
reachable: false,
|
|
175
|
-
version: 'unknown',
|
|
176
|
-
expectedVersion: SDK_VERSION,
|
|
177
134
|
compatible: false,
|
|
178
135
|
operatorToken: { present: Boolean(token.token), path: token.path },
|
|
179
136
|
agentKnowledge: {
|
package/src/cli/help.ts
CHANGED
|
@@ -56,7 +56,7 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
56
56
|
' memory Manage Agent-owned durable memory records',
|
|
57
57
|
' routines Inspect local routines and explicitly promote one to a connected schedule',
|
|
58
58
|
' auth Inspect Agent auth posture and connection token state',
|
|
59
|
-
' compat Inspect
|
|
59
|
+
' compat Inspect connected-host compatibility and Agent Knowledge route readiness',
|
|
60
60
|
' knowledge Use isolated Agent Knowledge routes',
|
|
61
61
|
' ask|search Shortcuts for isolated Agent Knowledge ask/search',
|
|
62
62
|
' delegate Explicitly delegate build/fix/review work to GoodVibes TUI',
|
|
@@ -296,7 +296,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
296
296
|
},
|
|
297
297
|
compat: {
|
|
298
298
|
usage: ['compat', 'compat --json'],
|
|
299
|
-
summary: 'Inspect
|
|
299
|
+
summary: 'Inspect connected-host compatibility and Agent-specific knowledge route readiness.',
|
|
300
300
|
examples: ['compat', 'compat --json'],
|
|
301
301
|
},
|
|
302
302
|
knowledge: {
|
package/src/cli/status.ts
CHANGED
|
@@ -114,13 +114,13 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
114
114
|
});
|
|
115
115
|
} else if (!options.externalRuntime.compatible) {
|
|
116
116
|
findings.push({
|
|
117
|
-
id: 'external-runtime-
|
|
117
|
+
id: 'external-runtime-incompatible',
|
|
118
118
|
area: 'runtime',
|
|
119
119
|
severity: 'warning',
|
|
120
|
-
summary: 'Connected GoodVibes host
|
|
121
|
-
cause:
|
|
122
|
-
impact: 'Agent-only routes, especially isolated Agent Knowledge, may be
|
|
123
|
-
action: 'Update the owning GoodVibes host so
|
|
120
|
+
summary: 'Connected GoodVibes host compatibility does not satisfy Agent readiness.',
|
|
121
|
+
cause: 'Connected host is reachable, but at least one public Agent route is unavailable or incompatible.',
|
|
122
|
+
impact: 'Agent-only routes, especially isolated Agent Knowledge, may be unavailable.',
|
|
123
|
+
action: 'Update the owning GoodVibes host so its public Agent routes are compatible.',
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -144,7 +144,7 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
144
144
|
summary: 'Isolated Agent Knowledge route is not ready.',
|
|
145
145
|
cause: `${options.externalRuntime.agentKnowledge.route} returned ${options.externalRuntime.agentKnowledge.kind}${options.externalRuntime.agentKnowledge.statusCode === null ? '' : ` (${options.externalRuntime.agentKnowledge.statusCode})`}.`,
|
|
146
146
|
impact: 'Agent Knowledge ask/search will not use default or non-Agent knowledge fallback; it will fail closed until the Agent route is available.',
|
|
147
|
-
action: 'Update the connected GoodVibes host
|
|
147
|
+
action: 'Update the connected GoodVibes host so public Agent routes are compatible, then verify goodvibes-agent compat.',
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
}
|
|
@@ -283,7 +283,6 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
283
283
|
...(externalRuntime ? [
|
|
284
284
|
` baseUrl: ${externalRuntime.baseUrl}`,
|
|
285
285
|
` reachable: ${yesNo(externalRuntime.reachable)}${externalRuntime.statusCode === null ? '' : ` (HTTP ${externalRuntime.statusCode})`}`,
|
|
286
|
-
` sdk: ${externalRuntime.version} expected ${externalRuntime.expectedVersion}`,
|
|
287
286
|
` compatible: ${yesNo(externalRuntime.compatible)}`,
|
|
288
287
|
` access token: ${externalRuntime.operatorToken.present ? 'present' : 'missing'} (${externalRuntime.operatorToken.path})`,
|
|
289
288
|
` Agent Knowledge: ${externalRuntime.agentKnowledge.ready ? 'ready' : `not ready (${formatAgentKnowledgeFailureKind(externalRuntime.agentKnowledge.kind)})`}`,
|
|
@@ -3,10 +3,10 @@ import type { AgentWorkspaceCategory } from './agent-workspace-types.ts';
|
|
|
3
3
|
export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
4
4
|
{
|
|
5
5
|
id: 'home',
|
|
6
|
-
group: '
|
|
6
|
+
group: 'HOME',
|
|
7
7
|
label: 'Home',
|
|
8
8
|
summary: 'Main operator workspace for normal assistant work.',
|
|
9
|
-
detail: 'Use this as the Agent
|
|
9
|
+
detail: 'Use this as the primary Agent workspace: chat in the main conversation, inspect state, choose model/provider, and open setup without switching modes.',
|
|
10
10
|
actions: [
|
|
11
11
|
{ id: 'chat', label: 'Continue assistant chat', detail: 'Return to the main composer and type a normal message. Agent work stays serial in the main conversation.', kind: 'guidance', safety: 'safe' },
|
|
12
12
|
{ id: 'brief', label: 'Operator briefing', detail: 'Show a concise Agent status and next-actions briefing without mutating the connected host.', command: '/brief', kind: 'command', safety: 'read-only' },
|
|
@@ -29,13 +29,13 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
29
29
|
{ id: 'welcome', label: 'Welcome and setup guide', detail: 'Open the Agent setup guide from the workspace.', command: '/welcome', kind: 'command', safety: 'safe' },
|
|
30
30
|
{ id: 'health', label: 'Review health', detail: 'Show local health and connected-host status without starting or mutating anything.', command: '/health review', kind: 'command', safety: 'read-only' },
|
|
31
31
|
{ id: 'doctor', label: 'Doctor diagnostics', detail: 'Run the same Agent doctor diagnostics from the TUI home workspace instead of relying on the CLI.', command: '/doctor', kind: 'command', safety: 'read-only' },
|
|
32
|
-
{ id: 'compat', label: 'Host compatibility', detail: 'Inspect
|
|
32
|
+
{ id: 'compat', label: 'Host compatibility', detail: 'Inspect connected-host compatibility and isolated Agent Knowledge route readiness from the TUI.', command: '/compat', kind: 'command', safety: 'read-only' },
|
|
33
33
|
{ id: 'quit', label: 'Quit Agent', detail: 'Exit the TUI and restore terminal state.', command: '/quit', kind: 'command', safety: 'safe' },
|
|
34
34
|
],
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
id: 'setup',
|
|
38
|
-
group: '
|
|
38
|
+
group: 'CONFIGURE',
|
|
39
39
|
label: 'Setup',
|
|
40
40
|
summary: 'Configuration, auth, provider, and onboarding workspaces.',
|
|
41
41
|
detail: 'Use this to configure the assistant: provider/model, setup checklist, Agent Knowledge, local behavior, channels, and voice/media. Changes here stay Agent-owned.',
|
|
@@ -53,7 +53,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
53
53
|
{ id: 'setup-mode-show', label: 'Interaction mode', detail: 'Review current Agent interaction mode and domain verbosity.', command: '/mode show', kind: 'command', safety: 'read-only' },
|
|
54
54
|
{ id: 'setup-mode-preset', label: 'Set interaction mode', detail: 'Open a confirmed form for quiet, balanced, or operator interaction mode.', editorKind: 'mode-preset', kind: 'editor', safety: 'safe' },
|
|
55
55
|
{ id: 'setup-mode-domain', label: 'Set domain verbosity', detail: 'Open a confirmed form for one interaction-domain verbosity override.', editorKind: 'mode-domain', kind: 'editor', safety: 'safe' },
|
|
56
|
-
{ id: 'setup-compat', label: 'Compatibility', detail: 'Inspect
|
|
56
|
+
{ id: 'setup-compat', label: 'Compatibility', detail: 'Inspect connected-host compatibility and isolated Agent Knowledge route readiness.', command: '/compat', kind: 'command', safety: 'read-only' },
|
|
57
57
|
{ id: 'setup-agent-knowledge', label: 'Agent Knowledge', detail: 'Open isolated Agent Knowledge status, ask/search, ingest, source review, and reindex actions.', targetCategoryId: 'knowledge', kind: 'workspace', safety: 'safe' },
|
|
58
58
|
{ id: 'setup-runtime-profiles', label: 'Agent profiles', detail: 'Open starter templates, isolated Agent homes, profile defaults, and profile import/export actions.', targetCategoryId: 'profiles', kind: 'workspace', safety: 'safe' },
|
|
59
59
|
{ id: 'setup-profile-from-discovered', label: 'Profile from discovered behavior', detail: 'Create an isolated Agent profile directly from reviewed local persona, skill, and routine files.', editorKind: 'profile-from-discovered', kind: 'editor', safety: 'safe' },
|
|
@@ -94,7 +94,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
id: 'research',
|
|
97
|
-
group: '
|
|
97
|
+
group: 'RESEARCH',
|
|
98
98
|
label: 'Research',
|
|
99
99
|
summary: 'Read-only web research and source triage in the main conversation.',
|
|
100
100
|
detail: 'Use this workspace to ask Agent to search, inspect URLs, compare sources, and decide what belongs in isolated Agent Knowledge. Research requests run in the normal conversation; source ingestion is explicit.',
|
|
@@ -113,7 +113,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
id: 'artifacts',
|
|
116
|
-
group: '
|
|
116
|
+
group: 'ARTIFACTS',
|
|
117
117
|
label: 'Artifacts',
|
|
118
118
|
summary: 'Files, attachments, exports, source ingest, and generated media.',
|
|
119
119
|
detail: 'Use this workspace to handle concrete user-visible artifacts: attach images, export conversations, ingest source files into Agent Knowledge, inspect source libraries, and generate media with explicit confirmation.',
|
|
@@ -136,7 +136,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
id: 'conversation',
|
|
139
|
-
group: '
|
|
139
|
+
group: 'CONVERSATION',
|
|
140
140
|
label: 'Conversation',
|
|
141
141
|
summary: 'Transcript, prompt, context, and session controls.',
|
|
142
142
|
detail: 'Use this workspace for the main TUI conversation: context review, compaction, prompt helpers, transcript navigation, session continuity, title, export, undo, redo, and retry.',
|
|
@@ -181,7 +181,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
id: 'channels',
|
|
184
|
-
group: '
|
|
184
|
+
group: 'CHANNELS',
|
|
185
185
|
label: 'Channels',
|
|
186
186
|
summary: 'Companion pairing, channel posture, and delivery safety.',
|
|
187
187
|
detail: 'Agent uses connected channel accounts. Pairing, account inspection, and readiness checks are visible here; inbound delivery and public channel exposure stay policy-gated.',
|
|
@@ -209,7 +209,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
211
|
id: 'tools',
|
|
212
|
-
group: '
|
|
212
|
+
group: 'TOOLS',
|
|
213
213
|
label: 'Tools & MCP',
|
|
214
214
|
summary: 'MCP server setup, trust review, and tool inventory.',
|
|
215
215
|
detail: 'Configure and inspect task tools from the Agent TUI. Adding or changing tools requires typed confirmation; normal chat still chooses tools serially in the main conversation.',
|
|
@@ -240,7 +240,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
240
240
|
},
|
|
241
241
|
{
|
|
242
242
|
id: 'knowledge',
|
|
243
|
-
group: '
|
|
243
|
+
group: 'KNOWLEDGE',
|
|
244
244
|
label: 'Knowledge',
|
|
245
245
|
summary: 'Agent Knowledge and source-backed lookup.',
|
|
246
246
|
detail: 'Agent knowledge calls use the isolated Agent Knowledge route family only. Default knowledge and non-Agent knowledge segments are not the Agent knowledge environment.',
|
|
@@ -276,7 +276,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
276
276
|
},
|
|
277
277
|
{
|
|
278
278
|
id: 'voice-media',
|
|
279
|
-
group: '
|
|
279
|
+
group: 'VOICE & MEDIA',
|
|
280
280
|
label: 'Voice & Media',
|
|
281
281
|
summary: 'Voice, TTS, image input, browser tools, and media providers.',
|
|
282
282
|
detail: 'Voice, media, browser tools, and image-capable flows are first-class Agent tools. Connected-host administration stays outside Agent and side effects stay explicit.',
|
|
@@ -302,7 +302,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
302
302
|
},
|
|
303
303
|
{
|
|
304
304
|
id: 'profiles',
|
|
305
|
-
group: '
|
|
305
|
+
group: 'PROFILES',
|
|
306
306
|
label: 'Profiles',
|
|
307
307
|
summary: 'Isolated Agent homes, starter templates, and setup bundles.',
|
|
308
308
|
detail: 'Agent profiles isolate Agent state. Named homes and starter templates let one install behave like separate assistants for household, research, travel, operations, or personal workflows.',
|
|
@@ -325,7 +325,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
325
325
|
},
|
|
326
326
|
{
|
|
327
327
|
id: 'memory',
|
|
328
|
-
group: '
|
|
328
|
+
group: 'MEMORY',
|
|
329
329
|
label: 'Memory & Skills',
|
|
330
330
|
summary: 'Local assistant memory, notes, routines, skills, and reusable behavior.',
|
|
331
331
|
detail: 'Memory, notes, routines, skills, and personas stay Agent-local until stable shared registry contracts exist. Secrets must not be stored as memory or notes.',
|
|
@@ -362,7 +362,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
id: 'notes',
|
|
365
|
-
group: '
|
|
365
|
+
group: 'NOTES',
|
|
366
366
|
label: 'Notes',
|
|
367
367
|
summary: 'Agent-local scratchpad for source triage and temporary context.',
|
|
368
368
|
detail: 'Notes are local working context. They are useful for research notes, decisions in progress, and handoff notes, but they are not memory and are not Agent Knowledge.',
|
|
@@ -385,7 +385,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
385
385
|
},
|
|
386
386
|
{
|
|
387
387
|
id: 'personas',
|
|
388
|
-
group: '
|
|
388
|
+
group: 'PERSONAS',
|
|
389
389
|
label: 'Personas',
|
|
390
390
|
summary: 'Local behavior profiles for the main assistant.',
|
|
391
391
|
detail: 'Personas shape the serial Agent in the main conversation. They are local behavior profiles, not separate Agent identities.',
|
|
@@ -408,7 +408,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
408
408
|
},
|
|
409
409
|
{
|
|
410
410
|
id: 'skills',
|
|
411
|
-
group: '
|
|
411
|
+
group: 'SKILLS',
|
|
412
412
|
label: 'Skills',
|
|
413
413
|
summary: 'Reusable local procedures with setup readiness.',
|
|
414
414
|
detail: 'Skills are local, reviewable procedures with optional env/command requirements. Enabled skills inform the main conversation; secret-looking content is rejected.',
|
|
@@ -443,7 +443,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
445
|
id: 'routines',
|
|
446
|
-
group: '
|
|
446
|
+
group: 'ROUTINES',
|
|
447
447
|
label: 'Routines',
|
|
448
448
|
summary: 'Repeatable workflows with setup readiness.',
|
|
449
449
|
detail: 'Routines run in the main conversation by default and can declare env/command requirements. Promotion to a connected schedule requires a real schedule command and --yes.',
|
|
@@ -473,7 +473,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
473
473
|
},
|
|
474
474
|
{
|
|
475
475
|
id: 'work',
|
|
476
|
-
group: '
|
|
476
|
+
group: 'WORK',
|
|
477
477
|
label: 'Work & Approvals',
|
|
478
478
|
summary: 'Visible task state, work plan, and approval posture.',
|
|
479
479
|
detail: 'Use this workspace to inspect active operator state and update visible work-plan items from confirmed TUI forms.',
|
|
@@ -527,9 +527,9 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
527
527
|
},
|
|
528
528
|
{
|
|
529
529
|
id: 'host',
|
|
530
|
-
group: '
|
|
530
|
+
group: 'HOST',
|
|
531
531
|
label: 'Connected Host',
|
|
532
|
-
summary: 'Connected-host health, tasks, sessions, channels,
|
|
532
|
+
summary: 'Connected-host health, tasks, sessions, channels, and automation.',
|
|
533
533
|
detail: 'Use this workspace to inspect the GoodVibes host surfaces that Agent can see: system health, remote routes, host tasks, sessions, channels, schedules, knowledge, media, MCP, provider auth, support bundles, and telemetry/config posture.',
|
|
534
534
|
actions: [
|
|
535
535
|
{ id: 'host-overview', label: 'Host overview', detail: 'Review connected-host, provider, settings, continuity, and Agent health without starting or mutating host work.', command: '/health review', kind: 'command', safety: 'read-only' },
|
|
@@ -571,7 +571,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
571
571
|
},
|
|
572
572
|
{
|
|
573
573
|
id: 'automation',
|
|
574
|
-
group: '
|
|
574
|
+
group: 'AUTOMATION',
|
|
575
575
|
label: 'Automation',
|
|
576
576
|
summary: 'Reminders, schedule observability, and explicit routine promotion.',
|
|
577
577
|
detail: 'Agent does not create hidden local automation jobs. Confirmed reminders, reviewed routine promotion, and explicit run/pause/resume controls go through the connected host with confirmation.',
|
|
@@ -598,7 +598,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
598
598
|
},
|
|
599
599
|
{
|
|
600
600
|
id: 'delegate',
|
|
601
|
-
group: '
|
|
601
|
+
group: 'DELEGATE',
|
|
602
602
|
label: 'Build Delegation',
|
|
603
603
|
summary: 'Explicit handoff to GoodVibes TUI for code work.',
|
|
604
604
|
detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and delegated review only when explicitly requested.',
|
|
@@ -88,7 +88,7 @@ const AGENT_WORKSPACE_CHANNEL_SPECS: readonly AgentWorkspaceChannelSpec[] = [
|
|
|
88
88
|
requiredKeys: ['surfaces.signal.bridgeUrl', 'surfaces.signal.account'],
|
|
89
89
|
defaultTargetKeys: ['surfaces.signal.defaultRecipient'],
|
|
90
90
|
risk: 'bridge',
|
|
91
|
-
riskLabel: 'private
|
|
91
|
+
riskLabel: 'private routed delivery',
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
id: 'whatsapp',
|
|
@@ -119,7 +119,7 @@ const AGENT_WORKSPACE_CHANNEL_SPECS: readonly AgentWorkspaceChannelSpec[] = [
|
|
|
119
119
|
requiredKeys: ['surfaces.imessage.bridgeUrl', 'surfaces.imessage.account'],
|
|
120
120
|
defaultTargetKeys: ['surfaces.imessage.defaultChatId'],
|
|
121
121
|
risk: 'bridge',
|
|
122
|
-
riskLabel: 'Apple
|
|
122
|
+
riskLabel: 'Apple routed delivery',
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
id: 'bluebubbles',
|
|
@@ -128,7 +128,7 @@ const AGENT_WORKSPACE_CHANNEL_SPECS: readonly AgentWorkspaceChannelSpec[] = [
|
|
|
128
128
|
requiredKeys: ['surfaces.bluebubbles.serverUrl', 'surfaces.bluebubbles.password'],
|
|
129
129
|
defaultTargetKeys: ['surfaces.bluebubbles.defaultChatGuid'],
|
|
130
130
|
risk: 'bridge',
|
|
131
|
-
riskLabel: 'iMessage
|
|
131
|
+
riskLabel: 'iMessage routed delivery',
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
id: 'msteams',
|
|
@@ -149,7 +149,7 @@ export function createAgentWorkspaceOperationsCommandEditor(kind: AgentWorkspace
|
|
|
149
149
|
mode: 'update',
|
|
150
150
|
title: 'Override Planning Strategy',
|
|
151
151
|
selectedFieldIndex: 0,
|
|
152
|
-
message: 'Override the planner strategy through the runtime
|
|
152
|
+
message: 'Override the planner strategy through the runtime route. This changes planner state and requires typed confirmation.',
|
|
153
153
|
fields: [
|
|
154
154
|
{ id: 'strategy', label: 'Strategy', value: 'serial', required: true, multiline: false, hint: 'Planner strategy, such as serial.' },
|
|
155
155
|
{ id: 'confirm', label: 'Confirm', value: '', required: true, multiline: false, hint: 'Type yes to run /plan override with --yes.' },
|
|
@@ -153,7 +153,7 @@ export interface CommandProviderServices {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
/**
|
|
156
|
-
* Compose locally-owned command helpers with the narrower
|
|
156
|
+
* Compose locally-owned command helpers with the narrower runtime-owned
|
|
157
157
|
* runtime surfaces exported from runtime/shell-command-services.ts.
|
|
158
158
|
*/
|
|
159
159
|
export interface CommandWorkspaceUiServices {
|
|
@@ -8,7 +8,7 @@ export function registerCompatRuntimeCommands(registry: CommandRegistry): void {
|
|
|
8
8
|
registry.register({
|
|
9
9
|
name: 'compat',
|
|
10
10
|
aliases: ['compatibility'],
|
|
11
|
-
description: 'Inspect
|
|
11
|
+
description: 'Inspect connected-host compatibility and Agent Knowledge route readiness',
|
|
12
12
|
usage: '[--json]',
|
|
13
13
|
argsHint: '[--json]',
|
|
14
14
|
async handler(args, ctx) {
|
|
@@ -67,7 +67,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
67
67
|
}
|
|
68
68
|
const result = ctx.ops.planRuntime
|
|
69
69
|
? ctx.ops.planRuntime(parsed.rest[0] ?? args[0], parsed.rest.slice(1))
|
|
70
|
-
: { ok: false, output: 'Plan runtime
|
|
70
|
+
: { ok: false, output: 'Plan runtime route is not available in this runtime.' };
|
|
71
71
|
ctx.print(result.output);
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
@@ -31,7 +31,7 @@ import type {
|
|
|
31
31
|
|
|
32
32
|
function requireContextValue<T>(value: T | null | undefined, name: string): T {
|
|
33
33
|
if (value == null) {
|
|
34
|
-
throw new Error(`
|
|
34
|
+
throw new Error(`Required Agent runtime service "${name}" is unavailable in this runtime`);
|
|
35
35
|
}
|
|
36
36
|
return value;
|
|
37
37
|
}
|
|
@@ -266,7 +266,7 @@ export class McpWorkspace {
|
|
|
266
266
|
{ type: 'action', id: 'add', label: 'Add or update server', detail: `Open a confirmed Agent workspace form to save an MCP server in ${this.form.scope} scope.` },
|
|
267
267
|
{ type: 'action', id: 'reload', label: 'Reload runtime', detail: 'Confirm an MCP runtime reload from this workspace after external config edits.' },
|
|
268
268
|
{ type: 'action', id: 'refresh-tools', label: 'Refresh tools', detail: 'Fetch the currently available MCP tool list from connected servers.' },
|
|
269
|
-
{ type: 'action', id: 'config', label: 'Config locations', detail: 'Show
|
|
269
|
+
{ type: 'action', id: 'config', label: 'Config locations', detail: 'Show detected config files and writable project/global paths.' },
|
|
270
270
|
];
|
|
271
271
|
}
|
|
272
272
|
|
|
@@ -43,7 +43,7 @@ export function routeSubmissionIntent(input: SubmissionRouterInput): SubmissionI
|
|
|
43
43
|
return { kind: 'plan', label: 'plan', commandName, hasAttachments };
|
|
44
44
|
}
|
|
45
45
|
if (DELEGATION_COMMANDS.has(commandName)) {
|
|
46
|
-
return { kind: 'delegation', label: '
|
|
46
|
+
return { kind: 'delegation', label: 'delegation', commandName, hasAttachments };
|
|
47
47
|
}
|
|
48
48
|
if (PANEL_COMMANDS.has(commandName)) {
|
|
49
49
|
return { kind: 'slash-command', label: 'Agent workspace', commandName, hasAttachments };
|