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.
Files changed (46) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +60 -7
  3. package/bootstrap.sh +6 -0
  4. package/dist/adapters/cli/SDDToolAdapter.d.ts +1 -0
  5. package/dist/adapters/cli/SDDToolAdapter.js +44 -33
  6. package/dist/adapters/cli/SDDToolAdapter.js.map +1 -1
  7. package/dist/cli/install-skills.d.ts +2 -5
  8. package/dist/cli/install-skills.js +35 -67
  9. package/dist/cli/install-skills.js.map +1 -1
  10. package/dist/cli/install-target.d.ts +6 -0
  11. package/dist/cli/install-target.js +1 -1
  12. package/dist/cli/install-target.js.map +1 -1
  13. package/dist/cli/model-role-config.d.ts +17 -0
  14. package/dist/cli/model-role-config.js +65 -0
  15. package/dist/cli/model-role-config.js.map +1 -0
  16. package/dist/cli/sdd-mcp-cli.js +9 -0
  17. package/dist/cli/sdd-mcp-cli.js.map +1 -1
  18. package/dist/cli/setup-global.d.ts +41 -0
  19. package/dist/cli/setup-global.js +349 -0
  20. package/dist/cli/setup-global.js.map +1 -0
  21. package/dist/cli/tool-support/claude-code.js +2 -2
  22. package/dist/cli/tool-support/claude-code.js.map +1 -1
  23. package/dist/cli/tool-support/codex.js +2 -2
  24. package/dist/cli/tool-support/codex.js.map +1 -1
  25. package/dist/cli/tool-support/mcp-registration.d.ts +10 -1
  26. package/dist/cli/tool-support/mcp-registration.js +22 -14
  27. package/dist/cli/tool-support/mcp-registration.js.map +1 -1
  28. package/dist/cli/tool-support/omp.js +2 -2
  29. package/dist/cli/tool-support/omp.js.map +1 -1
  30. package/dist/cli/tool-support/target-agent-renderer.d.ts +4 -3
  31. package/dist/cli/tool-support/target-agent-renderer.js +8 -8
  32. package/dist/cli/tool-support/target-agent-renderer.js.map +1 -1
  33. package/dist/cli/tool-support/target-installer.d.ts +7 -4
  34. package/dist/cli/tool-support/target-installer.js +33 -15
  35. package/dist/cli/tool-support/target-installer.js.map +1 -1
  36. package/dist/cli/utils/find-package-root.d.ts +6 -0
  37. package/dist/cli/utils/find-package-root.js +36 -0
  38. package/dist/cli/utils/find-package-root.js.map +1 -1
  39. package/dist/cli/utils/preserving-writer.d.ts +11 -4
  40. package/dist/cli/utils/preserving-writer.js +42 -18
  41. package/dist/cli/utils/preserving-writer.js.map +1 -1
  42. package/dist/index.js +0 -0
  43. package/dist/shared/version.d.ts +1 -1
  44. package/dist/shared/version.js +1 -1
  45. package/package.json +3 -1
  46. 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":"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"}
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":"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"}
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>): Promise<RuntimeRegistrationResult>;
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, 'runtime server');
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
- if (semanticHash(existing) !== semanticHash(desiredEntry))
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 Error('Managed Codex runtime region was modified');
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 Error('Unowned Codex runtime region differs from the desired entry');
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, label) {
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 Error(`Conflicting unmanaged ${label} named ${SERVER_NAME}`);
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();