vgxness 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/cli-help.js +2 -2
- package/dist/cli/setup-status-renderer.js +6 -1
- package/dist/cli/tui/main-menu/main-menu-read-model.js +1 -1
- package/dist/cli/tui/setup/setup-tui-read-model.js +7 -7
- package/dist/mcp/provider-change-plan.js +19 -8
- package/dist/mcp/schema.js +1 -1
- package/dist/mcp/validation.js +1 -1
- package/dist/setup/providers/claude-setup-adapter.js +48 -5
- package/dist/setup/providers/opencode-setup-adapter.js +2 -2
- package/dist/setup/providers/provider-setup-adapter.js +3 -0
- package/dist/setup/setup-lifecycle-service.js +2 -1
- package/dist/setup/setup-plan.js +2 -2
- package/package.json +1 -1
package/dist/cli/cli-help.js
CHANGED
|
@@ -69,7 +69,7 @@ Areas:
|
|
|
69
69
|
Use --overwrite-vgxness (alias --reinstall) to reinstall only VGXNESS-managed OpenCode entries while preserving unrelated config; --yes is still required to write.
|
|
70
70
|
It writes only after --yes. The default target is $HOME/.config/opencode/opencode.json; use --scope project to target .opencode/opencode.json explicitly.
|
|
71
71
|
Project OpenCode config can override user config. Plans are read-only; applies refuse unsafe existing config and create backups before merge.
|
|
72
|
-
Claude support is
|
|
72
|
+
Claude support is first-class for guarded MCP setup. Claude scopes are local|project|user; compatibility aliases personal/global map to user with warnings. Plans show Claude CLI argv, project .mcp.json compatibility, user ~/.claude.json MCP merge, agents, and guarded CLAUDE.md managed memory separately. Project scope confirmed applies write .mcp.json, .claude/agents/*.md, and the project-root CLAUDE.md managed block as needed. User/global confirmed applies narrowly merge only mcpServers.vgxness in ~/.claude.json, write ~/.claude/agents/*.md, and manage only the VGXNESS block in ~/.claude/CLAUDE.md. Confirmed Claude writes/CLI execution require VGXNESS run preflight metadata (--run-id, with optional --phase/--agent-id). Status/doctor/change-plan are read-only and do not execute Claude Code.
|
|
73
73
|
|
|
74
74
|
skills register --project <name> --name <name> --description <text>
|
|
75
75
|
skills list [--project <name>] [--scope project|personal]
|
|
@@ -98,7 +98,7 @@ Areas:
|
|
|
98
98
|
No args in an interactive TTY opens the OpenTUI main menu.
|
|
99
99
|
No args without a TTY prints static safe setup guidance and exits 0 without opening project state.
|
|
100
100
|
Setup TUI may launch without --project; Installation remains available and project-scoped checks are deferred while project screens render project-required recovery states.
|
|
101
|
-
Provider setup support: OpenCode supported
|
|
101
|
+
Provider setup support: OpenCode first-class supported default guided install; Claude first-class supported guarded install for CLI MCP registration, project compatibility, and project/user agent planning; Antigravity placeholder; Custom/future extension point.
|
|
102
102
|
Provider config writes/install/apply are external-only and require explicit confirmation.
|
|
103
103
|
|
|
104
104
|
sdd status --project <name> --change <id> [--json]
|
|
@@ -41,5 +41,10 @@ function renderDefaults(status) {
|
|
|
41
41
|
}
|
|
42
42
|
function renderProvider(provider) {
|
|
43
43
|
const safety = provider.actions.some((action) => action.safety.writesProviderConfig) ? 'external write action flagged' : 'no provider writes';
|
|
44
|
-
return `${provider.displayName} ${provider.status}/${provider.supportLevel} (${safety})`;
|
|
44
|
+
return `${provider.displayName} ${provider.status}/${renderSupportLevel(provider.supportLevel)} (${safety})`;
|
|
45
|
+
}
|
|
46
|
+
function renderSupportLevel(supportLevel) {
|
|
47
|
+
if (supportLevel === 'supported-primary' || supportLevel === 'supported-secondary')
|
|
48
|
+
return 'supported';
|
|
49
|
+
return supportLevel;
|
|
45
50
|
}
|
|
@@ -14,7 +14,7 @@ const statCards = [
|
|
|
14
14
|
{ label: 'SDD', value: 'guided', badge: '', description: 'MCP flow' },
|
|
15
15
|
];
|
|
16
16
|
const statusSnapshotLines = [
|
|
17
|
-
'OpenCode
|
|
17
|
+
'OpenCode supported; dashboard does not call providers.',
|
|
18
18
|
'Advanced checks stay explicit: setup status, mcp doctor opencode.',
|
|
19
19
|
];
|
|
20
20
|
const optionCopy = {
|
|
@@ -31,7 +31,7 @@ export function setupTuiViewModelFromPlan(plan, status, state) {
|
|
|
31
31
|
workspaceRootLabel: compactPath(workspaceRoot, 72),
|
|
32
32
|
readinessLabel: label(readiness),
|
|
33
33
|
readinessBadge: readinessBadge(readiness),
|
|
34
|
-
providerLabel: isOpenCode ? 'OpenCode' : isClaude ? 'Claude (supported
|
|
34
|
+
providerLabel: isOpenCode ? 'OpenCode' : isClaude ? 'Claude (first-class supported)' : 'Manual / none',
|
|
35
35
|
databaseLabel: plan === undefined ? 'pending' : plan.db.mode,
|
|
36
36
|
databasePathLabel: compactPath(databasePath, 72),
|
|
37
37
|
databaseSourceLabel: String(databaseSource),
|
|
@@ -47,8 +47,8 @@ export function setupTuiViewModelFromPlan(plan, status, state) {
|
|
|
47
47
|
opencodeActionLabel: isOpenCode ? opencodeActionLabel(opencode?.action) : isClaude ? 'No guided setup write; use guarded Claude install with run preflight.' : 'No automatic provider write; use manual setup guidance.',
|
|
48
48
|
memoryPathExplanation: memoryExplanation,
|
|
49
49
|
providerInstallabilityLabel: isOpenCode
|
|
50
|
-
? 'OpenCode is the default guided install provider. Claude is supported
|
|
51
|
-
: 'Manual / none is read-only guidance. Claude remains supported
|
|
50
|
+
? 'OpenCode is the default guided install provider. Claude is first-class supported via guarded mcp install claude --scope project --yes --run-id <id>.'
|
|
51
|
+
: 'Manual / none is read-only guidance. Claude remains supported through explicit guarded apply outside this guided OpenCode flow.',
|
|
52
52
|
agentReadinessLabel: agentReadiness.label,
|
|
53
53
|
agentReadinessDetail: agentReadiness.detail,
|
|
54
54
|
plannedActions: plan?.actions.map((action) => ({
|
|
@@ -79,7 +79,7 @@ export function setupTuiViewModelFromPlan(plan, status, state) {
|
|
|
79
79
|
],
|
|
80
80
|
providerChoices: [
|
|
81
81
|
choice('provider:opencode', 'OpenCode', 'Default guided install provider; writes still require final confirmation.', (selections?.provider ?? plan?.provider ?? 'opencode') === 'opencode', state?.focusedChoiceId, [badgeLabels.recommended]),
|
|
82
|
-
choice('provider:claude-supported
|
|
82
|
+
choice('provider:claude-supported', 'Claude (first-class supported)', 'Claude CLI MCP registration and project compatibility apply only via guarded mcp install claude --scope project --yes --run-id <id>; explicit install path.', (selections?.provider ?? plan?.provider) === 'claude', state?.focusedChoiceId, ['[supported]', badgeLabels.readOnly]),
|
|
83
83
|
choice('provider:none', 'Manual / none', 'No automatic provider config write; follow manual setup guidance.', (selections?.provider ?? plan?.provider) === 'none', state?.focusedChoiceId, [badgeLabels.manual, badgeLabels.readOnly]),
|
|
84
84
|
],
|
|
85
85
|
scopeChoices: isOpenCode
|
|
@@ -106,13 +106,13 @@ function previewDetailLines(input) {
|
|
|
106
106
|
const opencode = plan?.opencode;
|
|
107
107
|
const actions = plan?.actions.map((action) => `Planned action: ${action.description}${action.targetPath === undefined ? '' : ` Target: ${compactPath(action.targetPath, 72)}`}${action.backupRequired ? ' Backup required.' : ''}`) ?? ['Planned action: create read-only preview plan.'];
|
|
108
108
|
return [
|
|
109
|
-
`Provider: ${input.provider === 'opencode' ? 'OpenCode [recommended default]' : input.provider === 'claude' ? 'Claude [supported
|
|
109
|
+
`Provider: ${input.provider === 'opencode' ? 'OpenCode [recommended default]' : input.provider === 'claude' ? 'Claude [first-class supported] [guarded explicit apply]' : 'Manual / none [manual] [read-only]'}`,
|
|
110
110
|
`Memory path: ${plan?.db.mode ?? 'pending'} at ${compactPath(input.databasePath, 72)} (source: ${String(input.databaseSource)})`,
|
|
111
111
|
`Memory guidance: ${memoryPathExplanation(plan, input.databasePath, input.databaseSource)}`,
|
|
112
112
|
`Scope: ${input.isOpenCode ? (opencode?.scope ?? 'user') : 'disabled for manual/none provider'}`,
|
|
113
113
|
`Install mode: ${input.isOpenCode ? (opencode?.installsAgents === false ? 'mcp-only' : 'mcp-plus-agents') : 'disabled for manual/none provider'}`,
|
|
114
114
|
`Reinstall VGXNESS entries: ${input.isOpenCode ? String(opencode?.overwriteVgxness ?? false) : 'disabled for manual/none provider'}`,
|
|
115
|
-
`Provider installability: ${input.isOpenCode ? 'OpenCode installable after final confirmation; Claude
|
|
115
|
+
`Provider installability: ${input.isOpenCode ? 'OpenCode installable after final confirmation; Claude first-class support requires guarded mcp install claude --scope project --yes --run-id <id>.' : 'No guided provider install from this selection; Claude uses guarded explicit apply.'}`,
|
|
116
116
|
`Agent readiness: ${agentReadinessFromPlan(plan)}`,
|
|
117
117
|
`Target config: ${input.isOpenCode && opencode?.targetPath !== undefined ? compactPath(opencode.targetPath, 72) : 'none; no provider config will be written'}`,
|
|
118
118
|
`Safety: ${input.isOpenCode ? '[will write after confirm] only on final confirmation' : '[read-only] manual/no-provider-write mode'}`,
|
|
@@ -132,7 +132,7 @@ function helpLines(screen) {
|
|
|
132
132
|
'Next/back: Tab continues; Shift+Tab goes back. Enter continues on review and confirms only on final confirmation.',
|
|
133
133
|
'Cancel/close: q or Esc cancels setup; when help is open, ?/h toggles it closed.',
|
|
134
134
|
reviewLine,
|
|
135
|
-
'Provider support: OpenCode is the default guided install provider; Claude is supported
|
|
135
|
+
'Provider support: OpenCode is the default guided install provider; Claude is first-class supported for guarded explicit apply via mcp install claude --scope project --yes --run-id <id>; Manual / none writes no provider config.',
|
|
136
136
|
'Agent readiness: the preview checks vgxness-manager/SDD readiness guidance; preview screens never seed agents.',
|
|
137
137
|
'No-write guarantee: no provider config is written before explicit final confirmation.',
|
|
138
138
|
];
|
|
@@ -5,7 +5,7 @@ import { ProviderDoctorService } from './provider-doctor.js';
|
|
|
5
5
|
import { ProviderStatusService } from './provider-status.js';
|
|
6
6
|
import { resolveClaudeCodeScope } from './claude-code-scope.js';
|
|
7
7
|
export const providerChangePlanProviders = ['opencode', 'claude', 'antigravity', 'custom'];
|
|
8
|
-
export const providerChangePlanTypes = ['opencode-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
8
|
+
export const providerChangePlanTypes = ['opencode-mcp-install', 'claude-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
9
9
|
const safety = {
|
|
10
10
|
readOnly: true,
|
|
11
11
|
willWrite: false,
|
|
@@ -102,7 +102,7 @@ function unsupportedProviderEnvelope(input) {
|
|
|
102
102
|
supported: false,
|
|
103
103
|
status: 'unsupported',
|
|
104
104
|
code: 'UNSUPPORTED_PROVIDER',
|
|
105
|
-
summary: `${input.provider} is a recognized provider value, but provider change planning
|
|
105
|
+
summary: `${input.provider} is a recognized provider value, but read-only provider change planning currently supports OpenCode and Claude.`,
|
|
106
106
|
providerIdentity: {
|
|
107
107
|
provider: input.provider,
|
|
108
108
|
adapter: input.provider,
|
|
@@ -120,15 +120,16 @@ function unsupportedProviderEnvelope(input) {
|
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
function blockedPlanEnvelope(input, status, doctor, message) {
|
|
123
|
+
const providerName = input.provider === 'claude' ? 'Claude' : 'OpenCode';
|
|
123
124
|
return {
|
|
124
125
|
...baseEnvelope(input),
|
|
125
126
|
supported: true,
|
|
126
127
|
status: 'blocked',
|
|
127
128
|
code: 'PLAN_UNAVAILABLE',
|
|
128
|
-
summary:
|
|
129
|
+
summary: `${providerName} change planning could not resolve the future MCP server command: ${message}`,
|
|
129
130
|
providerIdentity: {
|
|
130
|
-
provider:
|
|
131
|
-
adapter:
|
|
131
|
+
provider: input.provider,
|
|
132
|
+
adapter: input.provider,
|
|
132
133
|
support: 'supported',
|
|
133
134
|
},
|
|
134
135
|
statusSummary: statusSummary(status),
|
|
@@ -206,14 +207,24 @@ function baseEnvelope(input) {
|
|
|
206
207
|
scope: input.scope,
|
|
207
208
|
provider: input.provider,
|
|
208
209
|
requestedChangeType: input.changeType,
|
|
209
|
-
normalizedChangeType: normalizeChangeType(input.changeType),
|
|
210
|
+
normalizedChangeType: normalizeChangeType(input.provider, input.changeType),
|
|
210
211
|
payloadMode: input.payloadMode,
|
|
211
212
|
workspaceRoot: input.workspaceRoot,
|
|
212
213
|
safety,
|
|
213
214
|
};
|
|
214
215
|
}
|
|
215
|
-
function normalizeChangeType(changeType) {
|
|
216
|
-
|
|
216
|
+
function normalizeChangeType(provider, changeType) {
|
|
217
|
+
if (provider === 'opencode') {
|
|
218
|
+
return changeType === 'setup' || changeType === 'install' || changeType === 'config-preparation' || changeType === 'claude-mcp-install'
|
|
219
|
+
? 'opencode-mcp-install'
|
|
220
|
+
: changeType;
|
|
221
|
+
}
|
|
222
|
+
if (provider === 'claude') {
|
|
223
|
+
return changeType === 'setup' || changeType === 'install' || changeType === 'config-preparation' || changeType === 'opencode-mcp-install'
|
|
224
|
+
? 'claude-mcp-install'
|
|
225
|
+
: changeType;
|
|
226
|
+
}
|
|
227
|
+
return changeType;
|
|
217
228
|
}
|
|
218
229
|
function statusSummary(status) {
|
|
219
230
|
return {
|
package/dist/mcp/schema.js
CHANGED
|
@@ -99,7 +99,7 @@ const finalRunStatuses = ['completed', 'failed', 'blocked', 'cancelled'];
|
|
|
99
99
|
const runOutcomes = ['success', 'partial', 'failure', 'blocked', 'cancelled'];
|
|
100
100
|
const payloadModes = ['compact', 'verbose'];
|
|
101
101
|
const providerChangePlanProviders = ['opencode', 'claude', 'antigravity', 'custom'];
|
|
102
|
-
const providerChangePlanTypes = ['opencode-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
102
|
+
const providerChangePlanTypes = ['opencode-mcp-install', 'claude-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
103
103
|
const jsonValueSchema = z.lazy(() => z.union([z.string(), z.number().finite(), z.boolean(), z.null(), z.array(jsonValueSchema), z.record(z.string(), jsonValueSchema)]));
|
|
104
104
|
export const VGX_MCP_TOOL_INPUT_SCHEMAS = {
|
|
105
105
|
vgxness_sdd_status: z
|
package/dist/mcp/validation.js
CHANGED
|
@@ -13,7 +13,7 @@ const runOutcomes = ['success', 'partial', 'failure', 'blocked', 'cancelled'];
|
|
|
13
13
|
const permissionDecisions = ['allow', 'ask', 'deny'];
|
|
14
14
|
const payloadModes = ['compact', 'verbose'];
|
|
15
15
|
const providerChangePlanProviders = ['opencode', 'claude', 'antigravity', 'custom'];
|
|
16
|
-
const providerChangePlanTypes = ['opencode-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
16
|
+
const providerChangePlanTypes = ['opencode-mcp-install', 'claude-mcp-install', 'setup', 'install', 'config-preparation'];
|
|
17
17
|
const validChangePattern = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
18
18
|
const validMemoryTopicKeyPattern = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/;
|
|
19
19
|
const maxMemoryTitleLength = 200;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { planClaudeCodeMcpInstall } from '../../mcp/client-install-claude-code-contract.js';
|
|
1
2
|
import { createMcpClientSetupPreview } from '../../mcp/client-setup-preview.js';
|
|
2
|
-
import { noWriteActionSafety } from './provider-setup-adapter.js';
|
|
3
|
+
import { externalProviderWriteSafety, noWriteActionSafety } from './provider-setup-adapter.js';
|
|
3
4
|
export const claudeSetupAdapter = {
|
|
4
5
|
id: 'claude',
|
|
5
6
|
displayName: 'Claude',
|
|
6
|
-
supportLevel: 'supported
|
|
7
|
+
supportLevel: 'supported',
|
|
7
8
|
capabilities: ['mcp-preview', 'mcp-install-plan', 'cli-mcp-plan', 'agent-preview', 'doctor', 'manual-guidance'],
|
|
8
9
|
targets: [
|
|
9
10
|
{ kind: 'project-config', label: 'Project .mcp.json', path: '.mcp.json', writableBySetup: false },
|
|
@@ -14,10 +15,11 @@ export const claudeSetupAdapter = {
|
|
|
14
15
|
{ kind: 'user-config', label: 'User Claude memory', path: '~/.claude/CLAUDE.md', writableBySetup: false },
|
|
15
16
|
],
|
|
16
17
|
getStatus(context) {
|
|
18
|
+
const plan = this.getInstallPlan?.(context);
|
|
17
19
|
return {
|
|
18
20
|
providerId: 'claude',
|
|
19
|
-
status: '
|
|
20
|
-
summary: 'Claude
|
|
21
|
+
status: plan?.status === 'blocked' ? 'blocked' : 'available',
|
|
22
|
+
summary: 'Claude provider setup is available for CLI MCP registration planning/apply, project .mcp.json compatibility, guarded CLAUDE.md memory, user ~/.claude.json MCP merge, and project/user agents; explicit guarded apply is required for writes or CLI execution.',
|
|
21
23
|
evidence: context.databasePath !== undefined
|
|
22
24
|
? ['Claude MCP preview can be generated from the selected database path.']
|
|
23
25
|
: ['Claude MCP preview uses a placeholder until a database path is selected.'],
|
|
@@ -27,9 +29,10 @@ export const claudeSetupAdapter = {
|
|
|
27
29
|
id: 'claude-manual-guidance',
|
|
28
30
|
label: 'Review guarded Claude install guidance',
|
|
29
31
|
kind: 'manual-guidance',
|
|
30
|
-
description: '
|
|
32
|
+
description: 'Claude install guidance only in setup status; writes are available only through the guarded mcp install claude flow with run preflight metadata.',
|
|
31
33
|
safety: noWriteActionSafety,
|
|
32
34
|
},
|
|
35
|
+
...(plan?.actions ?? []),
|
|
33
36
|
],
|
|
34
37
|
};
|
|
35
38
|
},
|
|
@@ -48,4 +51,44 @@ export const claudeSetupAdapter = {
|
|
|
48
51
|
warnings: preview.warnings,
|
|
49
52
|
};
|
|
50
53
|
},
|
|
54
|
+
getInstallPlan(context) {
|
|
55
|
+
const contract = planClaudeCodeMcpInstall({
|
|
56
|
+
cwd: context.workspaceRoot,
|
|
57
|
+
databasePath: context.databasePath ?? '<database-path>',
|
|
58
|
+
...(context.databasePathSource !== undefined ? { databasePathSource: context.databasePathSource } : {}),
|
|
59
|
+
scope: 'project',
|
|
60
|
+
...(context.env !== undefined ? { env: context.env } : {}),
|
|
61
|
+
...(context.overwriteVgxness !== undefined ? { overwriteVgxness: context.overwriteVgxness } : {}),
|
|
62
|
+
});
|
|
63
|
+
return claudeInstallPlan(context, contract);
|
|
64
|
+
},
|
|
51
65
|
};
|
|
66
|
+
function claudeInstallPlan(_context, contract) {
|
|
67
|
+
const actions = contract.status === 'would_install' ? [externalInstallAction(contract.targetPath, contract.overwriteVgxness)] : [];
|
|
68
|
+
return {
|
|
69
|
+
providerId: 'claude',
|
|
70
|
+
status: contract.status === 'would_install' ? 'available' : 'blocked',
|
|
71
|
+
readOnly: true,
|
|
72
|
+
mutating: false,
|
|
73
|
+
writesProviderConfig: false,
|
|
74
|
+
summary: contract.status === 'would_install'
|
|
75
|
+
? 'Claude project install plan is available for external guarded application; the read-only setup status does not write provider config.'
|
|
76
|
+
: contract.message,
|
|
77
|
+
targetPath: contract.targetPath,
|
|
78
|
+
warnings: contract.warnings,
|
|
79
|
+
actions,
|
|
80
|
+
source: contract,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function externalInstallAction(targetPath, overwriteVgxness = false) {
|
|
84
|
+
return {
|
|
85
|
+
id: 'claude-mcp-install-project',
|
|
86
|
+
label: 'Copy external Claude project install command',
|
|
87
|
+
kind: 'copy-command',
|
|
88
|
+
command: ['vgxness', 'mcp', 'install', 'claude', '--scope', 'project', '--yes', ...(overwriteVgxness ? ['--overwrite-vgxness'] : [])],
|
|
89
|
+
description: overwriteVgxness
|
|
90
|
+
? 'Copy and run this outside setup status only after reviewing that VGXNESS entries will be overwritten and unrelated config preserved.'
|
|
91
|
+
: 'Copy and run this outside setup status only after reviewing the read-only plan.',
|
|
92
|
+
safety: externalProviderWriteSafety(targetPath),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
@@ -5,7 +5,7 @@ import { externalProviderWriteSafety, noWriteActionSafety, } from './provider-se
|
|
|
5
5
|
export const openCodeSetupAdapter = {
|
|
6
6
|
id: 'opencode',
|
|
7
7
|
displayName: 'OpenCode',
|
|
8
|
-
supportLevel: 'supported
|
|
8
|
+
supportLevel: 'supported',
|
|
9
9
|
capabilities: ['mcp-preview', 'mcp-install-plan', 'mcp-install-apply-external', 'agent-preview', 'doctor', 'visibility-check'],
|
|
10
10
|
targets: [
|
|
11
11
|
{ kind: 'user-config', label: 'User/global OpenCode config (default)', path: '$HOME/.config/opencode/opencode.json', writableBySetup: false },
|
|
@@ -19,7 +19,7 @@ export const openCodeSetupAdapter = {
|
|
|
19
19
|
status: visibility?.ready === true ? 'ready' : 'available',
|
|
20
20
|
summary: visibility?.ready === true
|
|
21
21
|
? 'OpenCode MCP visibility is ready.'
|
|
22
|
-
: 'OpenCode
|
|
22
|
+
: 'OpenCode provider setup is available; install/apply remains external and explicit.',
|
|
23
23
|
evidence: visibility?.evidence ?? ['OpenCode setup preview and install planning are available.'],
|
|
24
24
|
guidance: visibility?.guidance ?? ['Preview setup first, then copy and run external install commands only after review.'],
|
|
25
25
|
actions: plan?.actions ?? [],
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSupportedProviderLevel } from './providers/provider-setup-adapter.js';
|
|
1
2
|
import { listProviderSetupAdapters } from './providers/provider-setup-registry.js';
|
|
2
3
|
const agentName = 'vgxness-manager';
|
|
3
4
|
export class SetupLifecycleService {
|
|
@@ -151,7 +152,7 @@ function verificationSummary(environment, project, providers, agents, mcp) {
|
|
|
151
152
|
{
|
|
152
153
|
id: 'providers',
|
|
153
154
|
label: 'Providers',
|
|
154
|
-
status: providers.some((provider) => provider.supportLevel
|
|
155
|
+
status: providers.some((provider) => isSupportedProviderLevel(provider.supportLevel)) ? 'ready' : 'unknown',
|
|
155
156
|
detail: `${providers.length} provider targets are available for read-only setup status.`,
|
|
156
157
|
},
|
|
157
158
|
{
|
package/dist/setup/setup-plan.js
CHANGED
|
@@ -87,7 +87,7 @@ export function createSetupPlan(input) {
|
|
|
87
87
|
actions: [
|
|
88
88
|
{
|
|
89
89
|
id: 'claude-guarded-install',
|
|
90
|
-
description: `Review supported
|
|
90
|
+
description: `Review first-class supported Claude plan for CLI MCP registration, .mcp.json compatibility, ${claude.agentNames.length} .claude/agents/*.md file(s), and guarded project-root CLAUDE.md managed block; apply only with vgxness mcp install claude --scope project --yes --run-id <id>.`,
|
|
91
91
|
mutating: false,
|
|
92
92
|
targetPath,
|
|
93
93
|
backupRequired: claude.backupRequired,
|
|
@@ -100,7 +100,7 @@ export function createSetupPlan(input) {
|
|
|
100
100
|
targetPath: target.path,
|
|
101
101
|
reason: target.kind === 'project-memory' ? 'A future guarded Claude apply would create a managed VGXNESS backup before appending or updating the project-root CLAUDE.md managed block.' : 'A future guarded Claude apply would create a managed VGXNESS backup before merging or updating Claude project configuration.',
|
|
102
102
|
})),
|
|
103
|
-
nextCommands: ['vgxness mcp install claude --plan --scope project', 'vgxness mcp install claude --scope project --yes --run-id <id>', 'OpenCode remains the default
|
|
103
|
+
nextCommands: ['vgxness mcp install claude --plan --scope project', 'vgxness mcp install claude --scope project --yes --run-id <id>', 'OpenCode remains the default guided setup provider.'],
|
|
104
104
|
},
|
|
105
105
|
};
|
|
106
106
|
}
|