sdd-mcp-server 5.0.1 → 5.1.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/CHANGELOG.md +12 -0
- package/README.md +60 -7
- package/bootstrap.sh +6 -0
- package/dist/adapters/cli/SDDToolAdapter.d.ts +1 -0
- package/dist/adapters/cli/SDDToolAdapter.js +44 -33
- package/dist/adapters/cli/SDDToolAdapter.js.map +1 -1
- package/dist/cli/install-skills.d.ts +2 -5
- package/dist/cli/install-skills.js +35 -67
- package/dist/cli/install-skills.js.map +1 -1
- package/dist/cli/install-target.d.ts +6 -0
- package/dist/cli/install-target.js +1 -1
- package/dist/cli/install-target.js.map +1 -1
- package/dist/cli/model-role-config.d.ts +17 -0
- package/dist/cli/model-role-config.js +65 -0
- package/dist/cli/model-role-config.js.map +1 -0
- package/dist/cli/sdd-mcp-cli.js +9 -0
- package/dist/cli/sdd-mcp-cli.js.map +1 -1
- package/dist/cli/setup-global.d.ts +41 -0
- package/dist/cli/setup-global.js +349 -0
- package/dist/cli/setup-global.js.map +1 -0
- package/dist/cli/tool-support/claude-code.js +2 -2
- package/dist/cli/tool-support/claude-code.js.map +1 -1
- package/dist/cli/tool-support/codex.js +2 -2
- package/dist/cli/tool-support/codex.js.map +1 -1
- package/dist/cli/tool-support/mcp-registration.d.ts +10 -1
- package/dist/cli/tool-support/mcp-registration.js +22 -14
- package/dist/cli/tool-support/mcp-registration.js.map +1 -1
- package/dist/cli/tool-support/omp.js +2 -2
- package/dist/cli/tool-support/omp.js.map +1 -1
- package/dist/cli/tool-support/target-agent-renderer.d.ts +4 -3
- package/dist/cli/tool-support/target-agent-renderer.js +8 -8
- package/dist/cli/tool-support/target-agent-renderer.js.map +1 -1
- package/dist/cli/tool-support/target-installer.d.ts +7 -4
- package/dist/cli/tool-support/target-installer.js +33 -15
- package/dist/cli/tool-support/target-installer.js.map +1 -1
- package/dist/cli/utils/find-package-root.d.ts +6 -0
- package/dist/cli/utils/find-package-root.js +36 -0
- package/dist/cli/utils/find-package-root.js.map +1 -1
- package/dist/cli/utils/preserving-writer.d.ts +11 -4
- package/dist/cli/utils/preserving-writer.js +42 -18
- package/dist/cli/utils/preserving-writer.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/version.js +1 -1
- package/package.json +3 -1
- package/sdd-entry.js +2 -2
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { execFile } from 'child_process';
|
|
3
|
+
import { homedir as systemHomedir } from 'os';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { CliUsageError, getTargetPolicy, } from './install-target.js';
|
|
6
|
+
import { PreservingWriter, validateDestinationPath } from './utils/preserving-writer.js';
|
|
7
|
+
import { resolvePackageComponentPath } from './utils/find-package-root.js';
|
|
8
|
+
import { SkillManager } from '../skills/SkillManager.js';
|
|
9
|
+
import { TargetInstallSession } from './tool-support/target-installer.js';
|
|
10
|
+
import { RuntimeRegistrationConflictError } from './tool-support/mcp-registration.js';
|
|
11
|
+
const TARGETS = ['claude-code', 'codex', 'omp'];
|
|
12
|
+
const CONTROL_CHARACTER = /\p{Cc}/u;
|
|
13
|
+
export class GlobalSetupCLI {
|
|
14
|
+
dependencies;
|
|
15
|
+
constructor(dependencies = {}) {
|
|
16
|
+
this.dependencies = {
|
|
17
|
+
env: process.env,
|
|
18
|
+
homedir: systemHomedir,
|
|
19
|
+
runOmpConfigPath: runDefaultOmpConfigPath,
|
|
20
|
+
...dependencies,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
parseArgs(args) {
|
|
24
|
+
if (args.length === 0)
|
|
25
|
+
return {};
|
|
26
|
+
if (args[0] !== '--target') {
|
|
27
|
+
throw new CliUsageError(`Unknown setup-global argument: ${args[0]}`);
|
|
28
|
+
}
|
|
29
|
+
if (args.length < 2 || args[1].startsWith('--')) {
|
|
30
|
+
throw new CliUsageError('--target requires a value');
|
|
31
|
+
}
|
|
32
|
+
if (args.length > 2) {
|
|
33
|
+
if (args.slice(2).includes('--target')) {
|
|
34
|
+
throw new CliUsageError('--target may be specified only once');
|
|
35
|
+
}
|
|
36
|
+
throw new CliUsageError(`Unknown setup-global argument: ${args[2]}`);
|
|
37
|
+
}
|
|
38
|
+
const target = args[1];
|
|
39
|
+
if (!isInstallTarget(target)) {
|
|
40
|
+
throw new CliUsageError(`Unsupported target "${target}". Choose claude-code, codex, or omp.`);
|
|
41
|
+
}
|
|
42
|
+
return { target };
|
|
43
|
+
}
|
|
44
|
+
async run(options) {
|
|
45
|
+
const source = resolvePackageComponentPath('skills');
|
|
46
|
+
const skills = await new SkillManager(source).listSkills();
|
|
47
|
+
if (skills.length === 0)
|
|
48
|
+
throw new Error(`No packaged Skills found at ${source}`);
|
|
49
|
+
const reports = [];
|
|
50
|
+
for (const target of options.target ? [options.target] : TARGETS) {
|
|
51
|
+
const report = { target, installed: [], skipped: [], conflicts: [], failed: [], warnings: [] };
|
|
52
|
+
reports.push(report);
|
|
53
|
+
let destination = this.dependencies.homedir();
|
|
54
|
+
let component = 'runtime';
|
|
55
|
+
try {
|
|
56
|
+
const locations = await this.resolveLocations(target);
|
|
57
|
+
destination = path.join(locations.runtimeRoot, locations.runtimeStateDirectory);
|
|
58
|
+
if (locations.fallbackNotice)
|
|
59
|
+
report.warnings.push(locations.fallbackNotice);
|
|
60
|
+
const runtimeWriter = new PreservingWriter(locations.runtimeRoot, { stateDirectory: locations.runtimeStateDirectory });
|
|
61
|
+
destination = path.join(runtimeWriter.stateRoot, 'install.lock');
|
|
62
|
+
await runtimeWriter.withInstallLock(async (assertHeld) => {
|
|
63
|
+
destination = runtimeWriter.stateRoot;
|
|
64
|
+
await runtimeWriter.validateState();
|
|
65
|
+
destination = path.join(locations.runtimeRoot, locations.runtimeConfig);
|
|
66
|
+
const runtime = await runtimeWriter.installRuntimeRegistration(target, {
|
|
67
|
+
...getTargetPolicy(target).defaultPaths,
|
|
68
|
+
runtimeConfig: locations.runtimeConfig,
|
|
69
|
+
}, { configureClaudePermissions: false });
|
|
70
|
+
report.installed.push(...runtime.installed.map(file => path.join(locations.runtimeRoot, file)));
|
|
71
|
+
report.skipped.push(...runtime.skipped.map(file => path.join(locations.runtimeRoot, file)));
|
|
72
|
+
report.warnings.push(...runtime.warnings);
|
|
73
|
+
component = 'skills';
|
|
74
|
+
destination = path.join(locations.skillsRoot, locations.skillsStateDirectory);
|
|
75
|
+
const skillsWriter = new PreservingWriter(locations.skillsRoot, { stateDirectory: locations.skillsStateDirectory });
|
|
76
|
+
const result = await skillsWriter.withInstallLock(async () => {
|
|
77
|
+
await skillsWriter.validateState();
|
|
78
|
+
const session = new TargetInstallSession(target, locations.skillsRoot, skillsWriter, 'lean', ['skills'], false, false);
|
|
79
|
+
await session.copySkills({ listSkills: async () => skills }, locations.skillsDirectory);
|
|
80
|
+
return session.complete();
|
|
81
|
+
});
|
|
82
|
+
report.installed.push(...result.installed.map(file => path.join(locations.skillsRoot, file)));
|
|
83
|
+
report.skipped.push(...result.skipped.map(file => path.join(locations.skillsRoot, file)));
|
|
84
|
+
report.conflicts.push(...result.conflicts);
|
|
85
|
+
report.failed.push(...result.failed);
|
|
86
|
+
report.warnings.push(...result.warnings);
|
|
87
|
+
await assertHeld();
|
|
88
|
+
return report;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (error instanceof RuntimeRegistrationConflictError) {
|
|
93
|
+
report.conflicts.push({ component: 'runtime', name: 'sdd-mcp', path: error.configPath, reason: error.reason });
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
report.failed.push({
|
|
97
|
+
component, name: 'sdd-mcp', path: destination,
|
|
98
|
+
error: error instanceof Error ? error.message : String(error),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return reports;
|
|
104
|
+
}
|
|
105
|
+
async resolveLocations(target) {
|
|
106
|
+
const configuredHome = this.dependencies.homedir();
|
|
107
|
+
const home = resolveRootPath(configuredHome, configuredHome, 'home directory');
|
|
108
|
+
if (target === 'claude-code')
|
|
109
|
+
return this.resolveClaudeLocations(home);
|
|
110
|
+
if (target === 'codex')
|
|
111
|
+
return this.resolveCodexLocations(home);
|
|
112
|
+
return this.resolveOmpLocations(home);
|
|
113
|
+
}
|
|
114
|
+
resolveClaudeLocations(home) {
|
|
115
|
+
const override = this.dependencies.env.CLAUDE_CONFIG_DIR;
|
|
116
|
+
const hasOverride = override !== undefined && override !== '';
|
|
117
|
+
const personal = hasOverride
|
|
118
|
+
? resolveRootPath(override, home, 'CLAUDE_CONFIG_DIR')
|
|
119
|
+
: path.join(home, '.claude');
|
|
120
|
+
const locations = hasOverride
|
|
121
|
+
? {
|
|
122
|
+
target: 'claude-code',
|
|
123
|
+
runtimeRoot: personal,
|
|
124
|
+
runtimeConfig: '.claude.json',
|
|
125
|
+
runtimeStateDirectory: path.join('.sdd-mcp', 'global-runtime'),
|
|
126
|
+
skillsRoot: personal,
|
|
127
|
+
skillsDirectory: 'skills',
|
|
128
|
+
skillsStateDirectory: path.join('.sdd-mcp', 'global-skills'),
|
|
129
|
+
}
|
|
130
|
+
: {
|
|
131
|
+
target: 'claude-code',
|
|
132
|
+
runtimeRoot: home,
|
|
133
|
+
runtimeConfig: '.claude.json',
|
|
134
|
+
runtimeStateDirectory: path.join('.claude', '.sdd-mcp', 'global-runtime'),
|
|
135
|
+
skillsRoot: personal,
|
|
136
|
+
skillsDirectory: 'skills',
|
|
137
|
+
skillsStateDirectory: path.join('.sdd-mcp', 'global-skills'),
|
|
138
|
+
};
|
|
139
|
+
validateLocations(locations);
|
|
140
|
+
return locations;
|
|
141
|
+
}
|
|
142
|
+
resolveCodexLocations(home) {
|
|
143
|
+
const override = this.dependencies.env.CODEX_HOME;
|
|
144
|
+
const runtimeRoot = override !== undefined && override !== ''
|
|
145
|
+
? resolveRootPath(override, home, 'CODEX_HOME')
|
|
146
|
+
: path.join(home, '.codex');
|
|
147
|
+
const locations = {
|
|
148
|
+
target: 'codex',
|
|
149
|
+
runtimeRoot,
|
|
150
|
+
runtimeConfig: 'config.toml',
|
|
151
|
+
runtimeStateDirectory: path.join('.sdd-mcp', 'global-runtime'),
|
|
152
|
+
skillsRoot: path.join(home, '.agents'),
|
|
153
|
+
skillsDirectory: 'skills',
|
|
154
|
+
skillsStateDirectory: path.join('.sdd-mcp', 'global-skills'),
|
|
155
|
+
};
|
|
156
|
+
validateLocations(locations);
|
|
157
|
+
return locations;
|
|
158
|
+
}
|
|
159
|
+
async resolveOmpLocations(home) {
|
|
160
|
+
let discovered;
|
|
161
|
+
try {
|
|
162
|
+
discovered = parseOmpDiscoveryOutput(await this.dependencies.runOmpConfigPath());
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
discovered = undefined;
|
|
166
|
+
}
|
|
167
|
+
if (discovered !== undefined) {
|
|
168
|
+
const root = resolveRootPath(discovered, home, 'OMP discovered agent directory');
|
|
169
|
+
const locations = createOmpLocations(root);
|
|
170
|
+
validateLocations(locations);
|
|
171
|
+
return locations;
|
|
172
|
+
}
|
|
173
|
+
const root = this.resolveOmpFallback(home);
|
|
174
|
+
const locations = createOmpLocations(root);
|
|
175
|
+
locations.fallbackNotice = `OMP discovery unavailable; using fallback directory: ${root}`;
|
|
176
|
+
validateLocations(locations);
|
|
177
|
+
return locations;
|
|
178
|
+
}
|
|
179
|
+
resolveOmpFallback(home) {
|
|
180
|
+
const rawProfile = this.dependencies.env.OMP_PROFILE !== undefined
|
|
181
|
+
? this.dependencies.env.OMP_PROFILE
|
|
182
|
+
: this.dependencies.env.PI_PROFILE ?? '';
|
|
183
|
+
const normalizedProfile = normalizeOmpProfile(rawProfile);
|
|
184
|
+
const configuredDirectory = this.dependencies.env.PI_CONFIG_DIR || '.omp';
|
|
185
|
+
const configRoot = resolveHomeRelativePath(configuredDirectory, home, 'PI_CONFIG_DIR');
|
|
186
|
+
if (normalizedProfile !== undefined) {
|
|
187
|
+
return resolveContainedPath(configRoot, 'profiles', normalizedProfile, 'agent');
|
|
188
|
+
}
|
|
189
|
+
const agentOverride = this.dependencies.env.PI_CODING_AGENT_DIR;
|
|
190
|
+
if (agentOverride) {
|
|
191
|
+
return resolveRootPath(agentOverride, home, 'PI_CODING_AGENT_DIR');
|
|
192
|
+
}
|
|
193
|
+
return resolveContainedPath(configRoot, 'agent');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export async function mainGlobalSetup(args = process.argv.slice(3)) {
|
|
197
|
+
try {
|
|
198
|
+
const cli = new GlobalSetupCLI();
|
|
199
|
+
const reports = await cli.run(cli.parseArgs(args));
|
|
200
|
+
for (const report of reports) {
|
|
201
|
+
console.log(`\n${report.target}`);
|
|
202
|
+
for (const warning of report.warnings)
|
|
203
|
+
console.log(`Notice: ${warning}`);
|
|
204
|
+
if (report.installed.length || report.skipped.length) {
|
|
205
|
+
console.log('Installed / unchanged');
|
|
206
|
+
for (const file of report.installed)
|
|
207
|
+
console.log(` Installed: ${file}`);
|
|
208
|
+
for (const file of report.skipped)
|
|
209
|
+
console.log(` Unchanged: ${file}`);
|
|
210
|
+
}
|
|
211
|
+
if (report.conflicts.length) {
|
|
212
|
+
console.log('Preserved conflicts');
|
|
213
|
+
for (const conflict of report.conflicts)
|
|
214
|
+
console.log(` [${conflict.component}] ${conflict.path} (${conflict.reason})`);
|
|
215
|
+
}
|
|
216
|
+
if (report.failed.length) {
|
|
217
|
+
console.error('Failures');
|
|
218
|
+
for (const failure of report.failed)
|
|
219
|
+
console.error(` [${failure.component}] ${failure.path}: ${failure.error}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
process.exitCode = reports.some(report => report.failed.length || report.conflicts.length) ? 1 : 0;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error(`Global setup failed: ${errorMessage(error)}`);
|
|
226
|
+
process.exitCode = 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function runDefaultOmpConfigPath() {
|
|
230
|
+
return new Promise((resolve, reject) => {
|
|
231
|
+
execFile('omp', ['config', 'path'], { encoding: 'utf8', shell: false }, (error, stdout) => {
|
|
232
|
+
if (error) {
|
|
233
|
+
reject(error);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
resolve(stdout);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
function parseOmpDiscoveryOutput(output) {
|
|
241
|
+
let candidate = output;
|
|
242
|
+
if (candidate.endsWith('\r\n'))
|
|
243
|
+
candidate = candidate.slice(0, -2);
|
|
244
|
+
else if (candidate.endsWith('\n') || candidate.endsWith('\r'))
|
|
245
|
+
candidate = candidate.slice(0, -1);
|
|
246
|
+
if (!candidate || CONTROL_CHARACTER.test(candidate) || !path.isAbsolute(candidate)) {
|
|
247
|
+
return undefined;
|
|
248
|
+
}
|
|
249
|
+
return candidate;
|
|
250
|
+
}
|
|
251
|
+
function normalizeOmpProfile(rawProfile) {
|
|
252
|
+
const normalized = rawProfile.trim();
|
|
253
|
+
if (CONTROL_CHARACTER.test(rawProfile) && normalized !== '') {
|
|
254
|
+
throw new CliUsageError('OMP profile must contain no control characters');
|
|
255
|
+
}
|
|
256
|
+
if (normalized === '' || normalized === 'default')
|
|
257
|
+
return undefined;
|
|
258
|
+
if (normalized === '.'
|
|
259
|
+
|| normalized === '..'
|
|
260
|
+
|| normalized.includes('/')
|
|
261
|
+
|| normalized.includes('\\')) {
|
|
262
|
+
throw new CliUsageError(`Unsafe OMP profile: ${rawProfile}`);
|
|
263
|
+
}
|
|
264
|
+
return normalized;
|
|
265
|
+
}
|
|
266
|
+
function resolveHomeRelativePath(value, home, setting) {
|
|
267
|
+
if (CONTROL_CHARACTER.test(value) || path.isAbsolute(value)) {
|
|
268
|
+
throw new CliUsageError(`${setting} must be a control-free home-relative directory`);
|
|
269
|
+
}
|
|
270
|
+
const destination = path.resolve(home, value);
|
|
271
|
+
try {
|
|
272
|
+
validateDestinationPath(home, destination);
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
throw new CliUsageError(`${setting} is unsafe: ${errorMessage(error)}`);
|
|
276
|
+
}
|
|
277
|
+
return canonicalizeExistingAncestors(destination);
|
|
278
|
+
}
|
|
279
|
+
function resolveContainedPath(root, ...segments) {
|
|
280
|
+
const destination = path.join(root, ...segments);
|
|
281
|
+
try {
|
|
282
|
+
validateDestinationPath(root, destination);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
throw new CliUsageError(`Unsafe OMP fallback destination: ${errorMessage(error)}`);
|
|
286
|
+
}
|
|
287
|
+
return canonicalizeExistingAncestors(destination);
|
|
288
|
+
}
|
|
289
|
+
function createOmpLocations(root) {
|
|
290
|
+
return {
|
|
291
|
+
target: 'omp',
|
|
292
|
+
runtimeRoot: root,
|
|
293
|
+
runtimeConfig: 'mcp.json',
|
|
294
|
+
runtimeStateDirectory: path.join('.sdd-mcp', 'global-runtime'),
|
|
295
|
+
skillsRoot: root,
|
|
296
|
+
skillsDirectory: 'skills',
|
|
297
|
+
skillsStateDirectory: path.join('.sdd-mcp', 'global-skills'),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function isInstallTarget(value) {
|
|
301
|
+
return TARGETS.includes(value);
|
|
302
|
+
}
|
|
303
|
+
function resolveRootPath(value, home, setting) {
|
|
304
|
+
if (!value || CONTROL_CHARACTER.test(value)) {
|
|
305
|
+
throw new CliUsageError(`${setting} must be non-empty and contain no control characters`);
|
|
306
|
+
}
|
|
307
|
+
let expanded = value;
|
|
308
|
+
if (value === '~')
|
|
309
|
+
expanded = home;
|
|
310
|
+
else if (value.startsWith('~/'))
|
|
311
|
+
expanded = path.join(home, value.slice(2));
|
|
312
|
+
if (!path.isAbsolute(expanded)) {
|
|
313
|
+
throw new CliUsageError(`${setting} must be an absolute path or use ~ or ~/...`);
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
return canonicalizeExistingAncestors(expanded);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
throw new CliUsageError(`Cannot resolve ${setting}: ${errorMessage(error)}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
function canonicalizeExistingAncestors(value) {
|
|
323
|
+
const missingSegments = [];
|
|
324
|
+
let existing = path.normalize(value);
|
|
325
|
+
while (!fs.existsSync(existing)) {
|
|
326
|
+
const parent = path.dirname(existing);
|
|
327
|
+
if (parent === existing)
|
|
328
|
+
break;
|
|
329
|
+
missingSegments.unshift(path.basename(existing));
|
|
330
|
+
existing = parent;
|
|
331
|
+
}
|
|
332
|
+
const canonical = fs.realpathSync(existing);
|
|
333
|
+
return path.join(canonical, ...missingSegments);
|
|
334
|
+
}
|
|
335
|
+
function validateLocations(locations) {
|
|
336
|
+
try {
|
|
337
|
+
validateDestinationPath(locations.runtimeRoot, path.join(locations.runtimeRoot, locations.runtimeConfig));
|
|
338
|
+
validateDestinationPath(locations.runtimeRoot, path.join(locations.runtimeRoot, locations.runtimeStateDirectory));
|
|
339
|
+
validateDestinationPath(locations.skillsRoot, path.join(locations.skillsRoot, locations.skillsDirectory));
|
|
340
|
+
validateDestinationPath(locations.skillsRoot, path.join(locations.skillsRoot, locations.skillsStateDirectory));
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
throw new CliUsageError(errorMessage(error));
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function errorMessage(error) {
|
|
347
|
+
return error instanceof Error ? error.message : String(error);
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=setup-global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-global.js","sourceRoot":"","sources":["../../src/cli/setup-global.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ async function installClaudeCodeTargetLocked(request) {
|
|
|
13
13
|
const session = new TargetInstallSession('claude-code', request.projectRoot, request.writer, request.profile ?? 'lean', request.components, request.refreshGenerated);
|
|
14
14
|
const selected = new Set(request.components);
|
|
15
15
|
if (selected.has('skills')) {
|
|
16
|
-
await session.copySkills(request.sources.skillManager, request.paths.skills);
|
|
16
|
+
await session.copySkills(request.sources.skillManager, request.paths.skills, request.modelRoutes);
|
|
17
17
|
}
|
|
18
18
|
if (selected.has('steering')) {
|
|
19
19
|
await session.copySteering(request.sources.steeringSource, request.paths.steering);
|
|
@@ -31,7 +31,7 @@ async function installClaudeCodeTargetLocked(request) {
|
|
|
31
31
|
try {
|
|
32
32
|
validateChildName(descriptor.name);
|
|
33
33
|
const source = await fs.promises.readFile(descriptor.path, 'utf8');
|
|
34
|
-
const rendered = renderClaudeCodeAgent(parseSourceAgent(source));
|
|
34
|
+
const rendered = renderClaudeCodeAgent(parseSourceAgent(source), request.modelRoutes);
|
|
35
35
|
await session.write('agents', descriptor.name, destination, rendered);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli/tool-support/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAiC;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,OAAgE;IAC3G,MAAM,OAAO,GAAG,IAAI,oBAAoB,CACtC,aAAa,EACb,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,IAAI,MAAM,EACzB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,gBAAgB,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli/tool-support/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ async function installCodexTargetLocked(request) {
|
|
|
31
31
|
const session = new TargetInstallSession('codex', request.projectRoot, request.writer, request.profile ?? 'lean', request.components, request.refreshGenerated);
|
|
32
32
|
const selected = new Set(request.components);
|
|
33
33
|
if (selected.has('skills')) {
|
|
34
|
-
await session.copySkills(request.sources.skillManager, request.paths.skills);
|
|
34
|
+
await session.copySkills(request.sources.skillManager, request.paths.skills, request.modelRoutes);
|
|
35
35
|
}
|
|
36
36
|
if (selected.has('steering')) {
|
|
37
37
|
await session.copySteering(request.sources.steeringSource, request.paths.steering);
|
|
@@ -49,7 +49,7 @@ async function installCodexTargetLocked(request) {
|
|
|
49
49
|
try {
|
|
50
50
|
validateChildName(descriptor.name);
|
|
51
51
|
const source = await fs.promises.readFile(descriptor.path, 'utf8');
|
|
52
|
-
const rendered = renderCodexAgent(parseSourceAgent(source));
|
|
52
|
+
const rendered = renderCodexAgent(parseSourceAgent(source), request.modelRoutes);
|
|
53
53
|
await session.write('agents', descriptor.name, destination, rendered);
|
|
54
54
|
}
|
|
55
55
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/tool-support/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AACrD,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAC/D;;GAEG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,iDAAiD,CAAC;AAC3D,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA4B;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAA2D;IACjG,MAAM,OAAO,GAAG,IAAI,oBAAoB,CACtC,OAAO,EACP,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,IAAI,MAAM,EACzB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,gBAAgB,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli/tool-support/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,15 @@ export interface RuntimeRegistrationRecord {
|
|
|
7
7
|
permissionPath?: string;
|
|
8
8
|
permissionSemanticSha256?: string;
|
|
9
9
|
}
|
|
10
|
+
export type RuntimeConflictReason = 'unmanaged-entry' | 'modified-entry' | 'unowned-region';
|
|
11
|
+
export declare class RuntimeRegistrationConflictError extends Error {
|
|
12
|
+
readonly configPath: string;
|
|
13
|
+
readonly reason: RuntimeConflictReason;
|
|
14
|
+
constructor(configPath: string, reason: RuntimeConflictReason);
|
|
15
|
+
}
|
|
16
|
+
export interface RuntimeRegistrationOptions {
|
|
17
|
+
configureClaudePermissions?: boolean;
|
|
18
|
+
}
|
|
10
19
|
export interface RuntimeRegistrationResult {
|
|
11
20
|
registration: RuntimeRegistrationRecord;
|
|
12
21
|
installed: string[];
|
|
@@ -19,4 +28,4 @@ export declare function installRuntimeRegistration(projectRoot: string, target:
|
|
|
19
28
|
skipped: string[];
|
|
20
29
|
warnings: string[];
|
|
21
30
|
}>;
|
|
22
|
-
export declare function registerRuntimeLocked(projectRoot: string, target: InstallTarget, paths: ResolvedInstallPaths, previous?: RuntimeRegistrationRecord, assertHeld?: () => Promise<void
|
|
31
|
+
export declare function registerRuntimeLocked(projectRoot: string, target: InstallTarget, paths: ResolvedInstallPaths, previous?: RuntimeRegistrationRecord, assertHeld?: () => Promise<void>, options?: RuntimeRegistrationOptions): Promise<RuntimeRegistrationResult>;
|
|
@@ -6,6 +6,16 @@ import { parse as parseToml } from 'smol-toml';
|
|
|
6
6
|
import { atomicWriteFile } from '../../utils/atomicWrite.js';
|
|
7
7
|
import { PACKAGE_VERSION } from '../../shared/version.js';
|
|
8
8
|
import { PreservingWriter, validateDestinationPath } from '../utils/preserving-writer.js';
|
|
9
|
+
export class RuntimeRegistrationConflictError extends Error {
|
|
10
|
+
configPath;
|
|
11
|
+
reason;
|
|
12
|
+
constructor(configPath, reason) {
|
|
13
|
+
super(`Preserved runtime registration conflict (${reason}): ${configPath}`);
|
|
14
|
+
this.configPath = configPath;
|
|
15
|
+
this.reason = reason;
|
|
16
|
+
this.name = 'RuntimeRegistrationConflictError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
9
19
|
const SERVER_NAME = 'sdd-mcp';
|
|
10
20
|
const COMMAND = 'npx';
|
|
11
21
|
const ARGS = ['-y', `sdd-mcp-server@${PACKAGE_VERSION}`];
|
|
@@ -14,7 +24,7 @@ export async function installRuntimeRegistration(projectRoot, target, paths) {
|
|
|
14
24
|
return new PreservingWriter(projectRoot).installRuntimeRegistration(target, paths);
|
|
15
25
|
}
|
|
16
26
|
const END_MARKER = '# <<< sdd-mcp managed runtime';
|
|
17
|
-
export async function registerRuntimeLocked(projectRoot, target, paths, previous, assertHeld = async () => undefined) {
|
|
27
|
+
export async function registerRuntimeLocked(projectRoot, target, paths, previous, assertHeld = async () => undefined, options = {}) {
|
|
18
28
|
const configPath = path.resolve(projectRoot, paths.runtimeConfig);
|
|
19
29
|
validateDestinationPath(projectRoot, configPath);
|
|
20
30
|
const configPrior = await readOptional(configPath);
|
|
@@ -25,13 +35,13 @@ export async function registerRuntimeLocked(projectRoot, target, paths, previous
|
|
|
25
35
|
let entrySemanticSha256;
|
|
26
36
|
let managedRegionSha256;
|
|
27
37
|
if (target === 'codex') {
|
|
28
|
-
const prepared = prepareCodex(configPrior, previous);
|
|
38
|
+
const prepared = prepareCodex(configPrior, configPath, previous);
|
|
29
39
|
configNext = prepared.bytes;
|
|
30
40
|
entrySemanticSha256 = prepared.semanticHash;
|
|
31
41
|
managedRegionSha256 = prepared.regionHash;
|
|
32
42
|
}
|
|
33
43
|
else {
|
|
34
|
-
const prepared = prepareJsonc(configPrior, target, previous);
|
|
44
|
+
const prepared = prepareJsonc(configPrior, target, configPath, previous);
|
|
35
45
|
configNext = prepared.bytes;
|
|
36
46
|
entrySemanticSha256 = prepared.semanticHash;
|
|
37
47
|
}
|
|
@@ -39,7 +49,7 @@ export async function registerRuntimeLocked(projectRoot, target, paths, previous
|
|
|
39
49
|
let permissionSemanticSha256;
|
|
40
50
|
let permissionPrior = null;
|
|
41
51
|
let permissionNext = null;
|
|
42
|
-
if (target === 'claude-code') {
|
|
52
|
+
if (target === 'claude-code' && options.configureClaudePermissions !== false) {
|
|
43
53
|
permissionPath = path.resolve(projectRoot, paths.runtimePermissionConfig);
|
|
44
54
|
validateDestinationPath(projectRoot, permissionPath);
|
|
45
55
|
permissionPrior = await readOptional(permissionPath);
|
|
@@ -124,7 +134,7 @@ function uniqueJsoncProperty(node, key, context) {
|
|
|
124
134
|
throw new Error(`Duplicate JSONC property ${context}.${key}`);
|
|
125
135
|
return matches[0]?.children?.[1];
|
|
126
136
|
}
|
|
127
|
-
function prepareJsonc(prior, target, previous) {
|
|
137
|
+
function prepareJsonc(prior, target, configPath, previous) {
|
|
128
138
|
const source = prior?.toString('utf8') ?? '{}\n';
|
|
129
139
|
const errors = [];
|
|
130
140
|
const parsed = parseJsonc(source, errors, { allowTrailingComma: true });
|
|
@@ -142,7 +152,7 @@ function prepareJsonc(prior, target, previous) {
|
|
|
142
152
|
const existing = servers && typeof servers === 'object' && !Array.isArray(servers)
|
|
143
153
|
? servers[SERVER_NAME]
|
|
144
154
|
: undefined;
|
|
145
|
-
assertOwnedOrDesired(existing, desired, previous?.entrySemanticSha256,
|
|
155
|
+
assertOwnedOrDesired(existing, desired, previous?.entrySemanticSha256, configPath);
|
|
146
156
|
const edits = modify(source, ['mcpServers', SERVER_NAME], desired, {
|
|
147
157
|
formattingOptions: { insertSpaces: true, tabSize: 2, eol: source.includes('\r\n') ? '\r\n' : '\n' },
|
|
148
158
|
});
|
|
@@ -174,7 +184,7 @@ function prepareClaudePermissions(prior) {
|
|
|
174
184
|
});
|
|
175
185
|
return { bytes: Buffer.from(applyEdits(source, edits)), semanticHash: semanticHash(desiredRule) };
|
|
176
186
|
}
|
|
177
|
-
function prepareCodex(prior, previous) {
|
|
187
|
+
function prepareCodex(prior, configPath, previous) {
|
|
178
188
|
const source = prior?.toString('utf8') ?? '';
|
|
179
189
|
let parsed;
|
|
180
190
|
try {
|
|
@@ -200,9 +210,7 @@ function prepareCodex(prior, previous) {
|
|
|
200
210
|
const block = `${START_MARKER}\n[mcp_servers.'sdd-mcp']\ncommand = "npx"\nargs = ["-y", "sdd-mcp-server@${PACKAGE_VERSION}"]\nrequired = true\ndefault_tools_approval_mode = "auto"\nstartup_timeout_sec = 30\n${END_MARKER}\n`;
|
|
201
211
|
if (starts.length === 0) {
|
|
202
212
|
if (existing !== undefined) {
|
|
203
|
-
|
|
204
|
-
throw new Error('Unmanaged sdd-mcp runtime server already exists');
|
|
205
|
-
throw new Error('Exact Codex runtime entry lacks managed markers');
|
|
213
|
+
throw new RuntimeRegistrationConflictError(configPath, 'unmanaged-entry');
|
|
206
214
|
}
|
|
207
215
|
}
|
|
208
216
|
else {
|
|
@@ -212,13 +220,13 @@ function prepareCodex(prior, previous) {
|
|
|
212
220
|
if (currentRegionHash !== previous.managedRegionSha256
|
|
213
221
|
|| existing === undefined
|
|
214
222
|
|| semanticHash(existing) !== previous.entrySemanticSha256) {
|
|
215
|
-
throw new
|
|
223
|
+
throw new RuntimeRegistrationConflictError(configPath, 'modified-entry');
|
|
216
224
|
}
|
|
217
225
|
}
|
|
218
226
|
else if (currentRegionHash !== sha256(Buffer.from(block))
|
|
219
227
|
|| existing === undefined
|
|
220
228
|
|| semanticHash(existing) !== semanticHash(desiredEntry)) {
|
|
221
|
-
throw new
|
|
229
|
+
throw new RuntimeRegistrationConflictError(configPath, 'unowned-region');
|
|
222
230
|
}
|
|
223
231
|
}
|
|
224
232
|
const next = starts.length === 1
|
|
@@ -232,13 +240,13 @@ function prepareCodex(prior, previous) {
|
|
|
232
240
|
}
|
|
233
241
|
return { bytes: Buffer.from(next), semanticHash: semanticHash(desiredEntry), regionHash: sha256(Buffer.from(block)) };
|
|
234
242
|
}
|
|
235
|
-
function assertOwnedOrDesired(existing, desired, ownedHash,
|
|
243
|
+
function assertOwnedOrDesired(existing, desired, ownedHash, configPath) {
|
|
236
244
|
if (existing === undefined)
|
|
237
245
|
return;
|
|
238
246
|
const existingHash = semanticHash(existing);
|
|
239
247
|
if (existingHash === semanticHash(desired) || existingHash === ownedHash)
|
|
240
248
|
return;
|
|
241
|
-
throw new
|
|
249
|
+
throw new RuntimeRegistrationConflictError(configPath, ownedHash ? 'modified-entry' : 'unmanaged-entry');
|
|
242
250
|
}
|
|
243
251
|
async function replaceCas(file, prior, next, assertHeld) {
|
|
244
252
|
await assertHeld();
|