sdd-mcp-server 3.3.0 → 3.5.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/README.md +120 -54
- package/dist/adapters/cli/SDDToolAdapter.d.ts +5 -1
- package/dist/adapters/cli/SDDToolAdapter.js +111 -18
- package/dist/adapters/cli/SDDToolAdapter.js.map +1 -1
- package/dist/application/services/ContextCompactionService.d.ts +39 -0
- package/dist/application/services/ContextCompactionService.js +253 -0
- package/dist/application/services/ContextCompactionService.js.map +1 -0
- package/dist/application/services/ProjectService.d.ts +7 -1
- package/dist/application/services/ProjectService.js +56 -1
- package/dist/application/services/ProjectService.js.map +1 -1
- package/dist/application/services/TemplateService.js +27 -5
- package/dist/application/services/TemplateService.js.map +1 -1
- package/dist/application/services/WorkflowEngineService.d.ts +3 -1
- package/dist/application/services/WorkflowEngineService.js +20 -5
- package/dist/application/services/WorkflowEngineService.js.map +1 -1
- package/dist/application/services/WorkflowService.js +8 -0
- package/dist/application/services/WorkflowService.js.map +1 -1
- package/dist/application/services/staticSteering.js +12 -13
- package/dist/application/services/staticSteering.js.map +1 -1
- package/dist/cli/install-skills.d.ts +13 -31
- package/dist/cli/install-skills.js +230 -173
- package/dist/cli/install-skills.js.map +1 -1
- package/dist/cli/install-target.d.ts +127 -0
- package/dist/cli/install-target.js +127 -0
- package/dist/cli/install-target.js.map +1 -0
- package/dist/cli/migrate-steering.js +13 -13
- package/dist/cli/migrate-steering.js.map +1 -1
- package/dist/cli/sdd-mcp-cli.d.ts +1 -1
- package/dist/cli/sdd-mcp-cli.js +14 -10
- package/dist/cli/sdd-mcp-cli.js.map +1 -1
- package/dist/cli/tool-support/antigravity.d.ts +6 -1
- package/dist/cli/tool-support/antigravity.js +55 -12
- package/dist/cli/tool-support/antigravity.js.map +1 -1
- package/dist/cli/tool-support/claude-code.d.ts +5 -0
- package/dist/cli/tool-support/claude-code.js +93 -0
- package/dist/cli/tool-support/claude-code.js.map +1 -0
- package/dist/cli/tool-support/codex.d.ts +18 -1
- package/dist/cli/tool-support/codex.js +161 -36
- package/dist/cli/tool-support/codex.js.map +1 -1
- package/dist/cli/tool-support/index.d.ts +2 -2
- package/dist/cli/tool-support/root-guidance.d.ts +9 -0
- package/dist/cli/tool-support/root-guidance.js +40 -0
- package/dist/cli/tool-support/root-guidance.js.map +1 -0
- package/dist/cli/tool-support/target-agent-renderer.d.ts +11 -0
- package/dist/cli/tool-support/target-agent-renderer.js +52 -0
- package/dist/cli/tool-support/target-agent-renderer.js.map +1 -0
- package/dist/cli/tool-support/target-installer.d.ts +40 -0
- package/dist/cli/tool-support/target-installer.js +116 -0
- package/dist/cli/tool-support/target-installer.js.map +1 -0
- package/dist/cli/utils/gitignore-manager.d.ts +5 -0
- package/dist/cli/utils/gitignore-manager.js +85 -0
- package/dist/cli/utils/gitignore-manager.js.map +1 -0
- package/dist/cli/utils/preserving-writer.d.ts +13 -0
- package/dist/cli/utils/preserving-writer.js +106 -0
- package/dist/cli/utils/preserving-writer.js.map +1 -0
- package/dist/domain/services/DomainService.d.ts +1 -0
- package/dist/domain/services/DomainService.js +12 -2
- package/dist/domain/services/DomainService.js.map +1 -1
- package/dist/domain/types.d.ts +13 -0
- package/dist/domain/types.js.map +1 -1
- package/dist/domain/workflow/WorkflowStateMachine.js +7 -2
- package/dist/domain/workflow/WorkflowStateMachine.js.map +1 -1
- package/dist/hooks/HookLoader.js +9 -1
- package/dist/hooks/HookLoader.js.map +1 -1
- package/dist/index.js +347 -26
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/di/container.js +4 -0
- package/dist/infrastructure/di/container.js.map +1 -1
- package/dist/infrastructure/di/types.d.ts +1 -0
- package/dist/infrastructure/di/types.js +1 -0
- package/dist/infrastructure/di/types.js.map +1 -1
- package/dist/infrastructure/mcp/ResourceManager.js +21 -1
- package/dist/infrastructure/mcp/ResourceManager.js.map +1 -1
- package/dist/infrastructure/mcp/ToolRegistry.js +34 -2
- package/dist/infrastructure/mcp/ToolRegistry.js.map +1 -1
- package/dist/infrastructure/schemas/project.schema.d.ts +47 -4
- package/dist/infrastructure/schemas/project.schema.js +39 -2
- package/dist/infrastructure/schemas/project.schema.js.map +1 -1
- package/dist/shared/BaseManager.d.ts +10 -1
- package/dist/shared/BaseManager.js +34 -5
- package/dist/shared/BaseManager.js.map +1 -1
- package/dist/skills/SkillManager.d.ts +3 -1
- package/dist/skills/SkillManager.js +15 -3
- package/dist/skills/SkillManager.js.map +1 -1
- package/package.json +2 -2
- package/sdd-entry.js +2 -2
- package/skills/sdd-design/SKILL.md +4 -0
- package/skills/sdd-implement/SKILL.md +10 -4
- package/skills/sdd-requirements/SKILL.md +4 -0
- package/skills/sdd-review/SKILL.md +4 -0
- package/skills/sdd-security-check/SKILL.md +4 -0
- package/skills/sdd-steering/SKILL.md +4 -0
- package/skills/sdd-steering-custom/SKILL.md +4 -0
- package/skills/sdd-tasks/SKILL.md +24 -7
- package/skills/sdd-test-gen/SKILL.md +4 -0
- package/skills/simple-task/SKILL.md +4 -0
- package/templates/CLAUDE.md +2 -36
- package/templates/codex-AGENTS.md +1 -2
- package/templates/codex-hook-runner.js +85 -0
- package/dist/utils/sddPaths.d.ts +0 -69
- package/dist/utils/sddPaths.js +0 -138
- package/dist/utils/sddPaths.js.map +0 -1
|
@@ -21,47 +21,90 @@ const LINK_DEFS = [
|
|
|
21
21
|
*/
|
|
22
22
|
export async function createAntigravitySymlinks(projectRoot, paths = { skillsPath: '.claude/skills', rulesPath: '.claude/rules' }) {
|
|
23
23
|
const agentDir = path.join(projectRoot, '.agent');
|
|
24
|
+
const failures = [];
|
|
24
25
|
// Warn on Windows where symlinks may require elevated privileges
|
|
25
26
|
if (process.platform === 'win32') {
|
|
26
27
|
console.log(' ⚠️ Symlinks on Windows may require administrator privileges');
|
|
27
28
|
}
|
|
28
|
-
// Create .agent/ directory if needed
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// Create .agent/ directory if needed.
|
|
30
|
+
try {
|
|
31
|
+
if (isSymlink(agentDir)) {
|
|
32
|
+
throw new Error(`Unsafe .agent destination is a symlink: ${agentDir}`);
|
|
33
|
+
}
|
|
34
|
+
if (!fs.existsSync(agentDir))
|
|
35
|
+
fs.mkdirSync(agentDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
console.error(' ❌ Failed to create .agent/:', message);
|
|
40
|
+
failures.push({ name: '.agent', path: agentDir, error: message });
|
|
41
|
+
return failures;
|
|
31
42
|
}
|
|
32
43
|
for (const { link, pathKey } of LINK_DEFS) {
|
|
33
|
-
// Compute relative symlink target
|
|
34
|
-
const
|
|
44
|
+
// Compute a relative symlink target from .agent to the effective path.
|
|
45
|
+
const resolvedTarget = path.resolve(projectRoot, paths[pathKey]);
|
|
46
|
+
const target = path.relative(agentDir, resolvedTarget) || '.';
|
|
35
47
|
const linkPath = path.join(agentDir, link);
|
|
36
48
|
// Check if something already exists at the link path
|
|
49
|
+
let existingTarget;
|
|
37
50
|
if (fs.existsSync(linkPath) || isSymlink(linkPath)) {
|
|
38
51
|
if (isSymlink(linkPath)) {
|
|
39
|
-
|
|
52
|
+
existingTarget = fs.readlinkSync(linkPath);
|
|
40
53
|
if (existingTarget === target) {
|
|
41
54
|
console.log(` ⏭️ .agent/${link} symlink already exists, skipping`);
|
|
42
55
|
continue;
|
|
43
56
|
}
|
|
44
|
-
// Symlink points somewhere else — warn, remove, and recreate
|
|
45
57
|
console.log(` ⚠️ .agent/${link} symlink points to ${existingTarget}, replacing with ${target}`);
|
|
46
|
-
fs.unlinkSync(linkPath);
|
|
47
58
|
}
|
|
48
59
|
else {
|
|
49
60
|
console.log(` ⚠️ .agent/${link} exists as a regular directory, skipping`);
|
|
50
61
|
continue;
|
|
51
62
|
}
|
|
52
63
|
}
|
|
53
|
-
// Verify the target directory exists before creating the symlink
|
|
54
|
-
const resolvedTarget = path.resolve(agentDir, target);
|
|
64
|
+
// Verify the target directory exists before creating the symlink.
|
|
55
65
|
if (!fs.existsSync(resolvedTarget)) {
|
|
56
66
|
console.log(` ⚠️ Target ${target} does not exist yet, creating symlink anyway`);
|
|
57
67
|
}
|
|
58
68
|
try {
|
|
59
|
-
|
|
69
|
+
createSymlinkSafely(target, linkPath, existingTarget);
|
|
60
70
|
console.log(` ✅ Created .agent/${link} → ${target}`);
|
|
61
71
|
}
|
|
62
72
|
catch (error) {
|
|
63
|
-
|
|
73
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
74
|
+
console.error(` ❌ Failed to create .agent/${link} symlink:`, message);
|
|
75
|
+
failures.push({ name: link, path: linkPath, error: message });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return failures;
|
|
79
|
+
}
|
|
80
|
+
function createSymlinkSafely(target, linkPath, existingTarget) {
|
|
81
|
+
const temporaryPath = `${linkPath}.sdd-${process.pid}-${Date.now()}`;
|
|
82
|
+
try {
|
|
83
|
+
fs.symlinkSync(target, temporaryPath, 'dir');
|
|
84
|
+
try {
|
|
85
|
+
fs.renameSync(temporaryPath, linkPath);
|
|
64
86
|
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (existingTarget === undefined)
|
|
89
|
+
throw error;
|
|
90
|
+
fs.unlinkSync(linkPath);
|
|
91
|
+
try {
|
|
92
|
+
fs.renameSync(temporaryPath, linkPath);
|
|
93
|
+
}
|
|
94
|
+
catch (replacementError) {
|
|
95
|
+
try {
|
|
96
|
+
fs.symlinkSync(existingTarget, linkPath, 'dir');
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Preserve the original replacement error for the structured report.
|
|
100
|
+
}
|
|
101
|
+
throw replacementError;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
if (isSymlink(temporaryPath))
|
|
107
|
+
fs.unlinkSync(temporaryPath);
|
|
65
108
|
}
|
|
66
109
|
}
|
|
67
110
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/cli/tool-support/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;GAIG;AACH,MAAM,SAAS,GAAyE;IACtF,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;IAC5C,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;CACxC,CAAC;
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/cli/tool-support/antigravity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type BaseTargetInstallRequest } from './target-installer.js';
|
|
2
|
+
export interface ClaudeCodeInstallRequest extends BaseTargetInstallRequest {
|
|
3
|
+
rootGuidanceContent?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function installClaudeCodeTarget(request: ClaudeCodeInstallRequest): Promise<import("../install-target.js").TargetInstallReport>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { findTemplate } from '../utils/find-package-root.js';
|
|
4
|
+
import { PreservingWriter, validateChildName } from '../utils/preserving-writer.js';
|
|
5
|
+
import { parseSourceAgent, renderClaudeCodeAgent } from './target-agent-renderer.js';
|
|
6
|
+
import { buildGuidanceSection, buildSteeringSection, buildTableSection, listMarkdownFiles, } from './root-guidance.js';
|
|
7
|
+
import { copyFlatComponents, TargetInstallSession, } from './target-installer.js';
|
|
8
|
+
export async function installClaudeCodeTarget(request) {
|
|
9
|
+
const session = new TargetInstallSession('claude-code', request.projectRoot, request.writer ?? new PreservingWriter(request.projectRoot));
|
|
10
|
+
const selected = new Set(request.components);
|
|
11
|
+
if (selected.has('skills')) {
|
|
12
|
+
await session.copySkills(request.sources.skillManager, request.paths.skills);
|
|
13
|
+
}
|
|
14
|
+
if (selected.has('steering')) {
|
|
15
|
+
await session.copySteering(request.sources.steeringSource, request.paths.steering);
|
|
16
|
+
}
|
|
17
|
+
if (selected.has('rules')) {
|
|
18
|
+
await copyFlatComponents(session, 'rules', request.paths.rules, await request.sources.rulesManager.listComponents());
|
|
19
|
+
}
|
|
20
|
+
if (selected.has('contexts')) {
|
|
21
|
+
await copyFlatComponents(session, 'contexts', request.paths.contexts, await request.sources.contextManager.listComponents());
|
|
22
|
+
}
|
|
23
|
+
if (selected.has('agents')) {
|
|
24
|
+
const destinationRoot = session.resolve(request.paths.agents);
|
|
25
|
+
for (const descriptor of await request.sources.agentManager.listComponents()) {
|
|
26
|
+
const destination = path.join(destinationRoot, `${descriptor.name}.md`);
|
|
27
|
+
try {
|
|
28
|
+
validateChildName(descriptor.name);
|
|
29
|
+
const source = await fs.promises.readFile(descriptor.path, 'utf8');
|
|
30
|
+
const rendered = renderClaudeCodeAgent(parseSourceAgent(source));
|
|
31
|
+
await session.write('agents', descriptor.name, destination, rendered);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
session.fail('agents', descriptor.name, destination, error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (selected.has('hooks')) {
|
|
39
|
+
const destinationRoot = session.resolve(request.paths.hooks);
|
|
40
|
+
for (const hook of await request.sources.hookLoader.listComponents()) {
|
|
41
|
+
const fileName = path.basename(hook.path);
|
|
42
|
+
const destination = path.join(destinationRoot, hook.event, fileName);
|
|
43
|
+
try {
|
|
44
|
+
validateChildName(hook.event);
|
|
45
|
+
validateChildName(fileName);
|
|
46
|
+
await session.copy('hooks', hook.name, hook.path, destination);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
session.fail('hooks', hook.name, destination, error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
let rootPreamble;
|
|
54
|
+
try {
|
|
55
|
+
rootPreamble = request.rootGuidanceContent ?? await loadClaudeTemplate();
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
session.fail('root', request.paths.rootGuidance, session.resolve(request.paths.rootGuidance), error);
|
|
59
|
+
return session.report;
|
|
60
|
+
}
|
|
61
|
+
const rootContent = await buildClaudeRootGuidance(request, selected, rootPreamble);
|
|
62
|
+
await session.write('root', request.paths.rootGuidance, session.resolve(request.paths.rootGuidance), rootContent);
|
|
63
|
+
return session.report;
|
|
64
|
+
}
|
|
65
|
+
async function buildClaudeRootGuidance(request, selected, preamble) {
|
|
66
|
+
const [skills, rules, contexts, agents, steeringDocs] = await Promise.all([
|
|
67
|
+
selected.has('skills') ? request.sources.skillManager.listSkills() : Promise.resolve([]),
|
|
68
|
+
selected.has('rules') ? request.sources.rulesManager.listComponents() : Promise.resolve([]),
|
|
69
|
+
selected.has('contexts') ? request.sources.contextManager.listComponents() : Promise.resolve([]),
|
|
70
|
+
selected.has('agents') ? request.sources.agentManager.listComponents() : Promise.resolve([]),
|
|
71
|
+
selected.has('steering') ? listMarkdownFiles(request.sources.steeringSource) : Promise.resolve([]),
|
|
72
|
+
]);
|
|
73
|
+
const sections = [
|
|
74
|
+
buildTableSection('Skills', 'On-demand guidance invoked via slash commands:', request.paths.skills, skills, skill => `${request.paths.skills}/${skill.name}/`),
|
|
75
|
+
buildTableSection('Rules', 'Always-active coding standards:', request.paths.rules, rules, rule => `${request.paths.rules}/${path.basename(rule.path)}`),
|
|
76
|
+
buildTableSection('Contexts', 'Switchable modes:', request.paths.contexts, contexts, context => `${request.paths.contexts}/${path.basename(context.path)}`),
|
|
77
|
+
buildTableSection('Agents', 'Specialized roles with model routing:', request.paths.agents, agents, agent => `${request.paths.agents}/${path.basename(agent.path, path.extname(agent.path))}.md`),
|
|
78
|
+
buildSteeringSection(request.paths.steering, steeringDocs),
|
|
79
|
+
selected.has('hooks') ? buildGuidanceSection('Hooks', request.paths.hooks) : '',
|
|
80
|
+
].join('');
|
|
81
|
+
const marker = '\n## MCP Tools';
|
|
82
|
+
const markerIndex = preamble.indexOf(marker);
|
|
83
|
+
if (markerIndex < 0)
|
|
84
|
+
return `${preamble}${sections}`;
|
|
85
|
+
return `${preamble.slice(0, markerIndex)}\n${sections}${preamble.slice(markerIndex)}`;
|
|
86
|
+
}
|
|
87
|
+
async function loadClaudeTemplate() {
|
|
88
|
+
const template = findTemplate('CLAUDE.md');
|
|
89
|
+
if (!template)
|
|
90
|
+
return '# CLAUDE.md — Spec-Driven Development (SDD)\n';
|
|
91
|
+
return fs.promises.readFile(template, 'utf8');
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli/tool-support/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SkillManager } from '../../skills/SkillManager.js';
|
|
2
2
|
import { RulesManager } from '../../rules/RulesManager.js';
|
|
3
3
|
import { AgentManager } from '../../agents/AgentManager.js';
|
|
4
|
+
import { type BaseTargetInstallRequest } from './target-installer.js';
|
|
4
5
|
/**
|
|
5
6
|
* References to manager instances needed for generating AGENTS.md
|
|
6
7
|
*/
|
|
@@ -19,6 +20,9 @@ export interface InstallPaths {
|
|
|
19
20
|
rulesPath: string;
|
|
20
21
|
agentsPath: string;
|
|
21
22
|
steeringPath: string;
|
|
23
|
+
contextsPath?: string;
|
|
24
|
+
hooksPath?: string;
|
|
25
|
+
agentExtension?: '.md' | '.toml';
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
28
|
* Which component types were actually installed in this run.
|
|
@@ -29,6 +33,13 @@ export interface InstalledComponents {
|
|
|
29
33
|
rules: boolean;
|
|
30
34
|
agents: boolean;
|
|
31
35
|
steering: boolean;
|
|
36
|
+
contexts?: boolean;
|
|
37
|
+
hooks?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface CodexGuidanceFailure {
|
|
40
|
+
name: string;
|
|
41
|
+
path: string;
|
|
42
|
+
error: string;
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
45
|
* Generate AGENTS.md in the project root for OpenAI Codex CLI.
|
|
@@ -40,4 +51,10 @@ export interface InstalledComponents {
|
|
|
40
51
|
* Only sections for actually-installed component types are included,
|
|
41
52
|
* and paths reflect the effective install targets (not hardcoded defaults).
|
|
42
53
|
*/
|
|
43
|
-
export declare function generateCodexAgentsMd(projectRoot: string, managers: ManagerRefs, paths: InstallPaths, installed: InstalledComponents): Promise<
|
|
54
|
+
export declare function generateCodexAgentsMd(projectRoot: string, managers: ManagerRefs, paths: InstallPaths, installed: InstalledComponents): Promise<CodexGuidanceFailure[]>;
|
|
55
|
+
export interface CodexInstallRequest extends BaseTargetInstallRequest {
|
|
56
|
+
rootGuidancePreamble?: string;
|
|
57
|
+
hookRunnerContent?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare function installCodexTarget(request: CodexInstallRequest): Promise<import("../install-target.js").TargetInstallReport>;
|
|
60
|
+
export declare function renderCodexHooksConfig(hooksPath: string, projectRoot?: string): string;
|
|
@@ -1,37 +1,12 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { findTemplate } from '../utils/find-package-root.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return '';
|
|
11
|
-
let section = `### ${title} (\`${basePath}/\`)\n\n`;
|
|
12
|
-
section += `${subtitle}\n\n`;
|
|
13
|
-
section += `| ${title.slice(0, -1)} | Description | Path |\n`;
|
|
14
|
-
section += '|-------|-------------|------|\n';
|
|
15
|
-
for (const item of items) {
|
|
16
|
-
section += `| ${item.name} | ${item.description || '—'} | \`${pathFormatter(item)}\` |\n`;
|
|
17
|
-
}
|
|
18
|
-
section += '\n';
|
|
19
|
-
return section;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Build a markdown bullet list section for steering docs.
|
|
23
|
-
*/
|
|
24
|
-
function buildSteeringSection(basePath, docs) {
|
|
25
|
-
if (docs.length === 0)
|
|
26
|
-
return '';
|
|
27
|
-
let section = `### Steering (\`${basePath}/\`)\n\n`;
|
|
28
|
-
section += 'Project-specific context documents:\n\n';
|
|
29
|
-
for (const doc of docs) {
|
|
30
|
-
section += `- \`${basePath}/${doc}\`\n`;
|
|
31
|
-
}
|
|
32
|
-
section += '\n';
|
|
33
|
-
return section;
|
|
34
|
-
}
|
|
4
|
+
import { PreservingWriter, validateChildName } from '../utils/preserving-writer.js';
|
|
5
|
+
import { parseSourceAgent, renderCodexAgent } from './target-agent-renderer.js';
|
|
6
|
+
import { buildGuidanceSection, buildSteeringSection, buildTableSection, listMarkdownFiles, } from './root-guidance.js';
|
|
7
|
+
import { copyFlatComponents, TargetInstallSession, } from './target-installer.js';
|
|
8
|
+
const CODEX_HOOK_RUNNER_FILE = 'sdd-hook-runner.mjs';
|
|
9
|
+
const GIT_ROOT_EXPRESSION = '$(git rev-parse --show-toplevel)';
|
|
35
10
|
/**
|
|
36
11
|
* Load the template preamble for AGENTS.md
|
|
37
12
|
*/
|
|
@@ -60,9 +35,24 @@ function loadPreamble() {
|
|
|
60
35
|
*/
|
|
61
36
|
export async function generateCodexAgentsMd(projectRoot, managers, paths, installed) {
|
|
62
37
|
const targetPath = path.join(projectRoot, 'AGENTS.md');
|
|
38
|
+
const failures = [];
|
|
63
39
|
if (fs.existsSync(targetPath)) {
|
|
40
|
+
try {
|
|
41
|
+
if (fs.statSync(targetPath).isDirectory()) {
|
|
42
|
+
const error = 'AGENTS.md destination is a directory';
|
|
43
|
+
failures.push({ name: 'AGENTS.md', path: targetPath, error });
|
|
44
|
+
console.error(' ❌ Failed to create AGENTS.md:', error);
|
|
45
|
+
return failures;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
50
|
+
failures.push({ name: 'AGENTS.md', path: targetPath, error: message });
|
|
51
|
+
console.error(' ❌ Failed to inspect AGENTS.md:', message);
|
|
52
|
+
return failures;
|
|
53
|
+
}
|
|
64
54
|
console.log(' ⏭️ AGENTS.md already exists, skipping');
|
|
65
|
-
return;
|
|
55
|
+
return failures;
|
|
66
56
|
}
|
|
67
57
|
let content = loadPreamble();
|
|
68
58
|
try {
|
|
@@ -74,18 +64,153 @@ export async function generateCodexAgentsMd(projectRoot, managers, paths, instal
|
|
|
74
64
|
]);
|
|
75
65
|
content += buildTableSection('Skills', 'Workflow guidance invoked via slash commands:', paths.skillsPath, skills, (s) => `${paths.skillsPath}/${s.name}/`);
|
|
76
66
|
content += buildTableSection('Rules', 'Always-active coding standards:', paths.rulesPath, rules, (r) => `${paths.rulesPath}/${path.basename(r.path)}`);
|
|
77
|
-
content += buildTableSection('Agents', 'Specialized AI personas:', paths.agentsPath, agents, (a) => `${paths.agentsPath}/${path.basename(a.path)}`);
|
|
67
|
+
content += buildTableSection('Agents', 'Specialized AI personas:', paths.agentsPath, agents, (a) => `${paths.agentsPath}/${path.basename(a.path, path.extname(a.path))}${paths.agentExtension ?? path.extname(a.path)}`);
|
|
78
68
|
content += buildSteeringSection(paths.steeringPath, steeringDocs);
|
|
69
|
+
if (installed.contexts)
|
|
70
|
+
content += buildGuidanceSection('Contexts', paths.contextsPath);
|
|
71
|
+
if (installed.hooks)
|
|
72
|
+
content += buildGuidanceSection('Hooks', paths.hooksPath);
|
|
79
73
|
}
|
|
80
74
|
catch (error) {
|
|
81
|
-
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
console.error(' ⚠️ Failed to gather component metadata:', message);
|
|
77
|
+
failures.push({ name: 'metadata', path: targetPath, error: message });
|
|
82
78
|
}
|
|
83
79
|
try {
|
|
84
|
-
fs.writeFileSync(targetPath, content, 'utf-8');
|
|
80
|
+
fs.writeFileSync(targetPath, content, { encoding: 'utf-8', flag: 'wx' });
|
|
85
81
|
console.log(' ✅ Created AGENTS.md for Codex CLI');
|
|
86
82
|
}
|
|
87
83
|
catch (error) {
|
|
88
|
-
|
|
84
|
+
if (isAlreadyExists(error)) {
|
|
85
|
+
console.log(' ⏭️ AGENTS.md already exists, skipping');
|
|
86
|
+
return failures;
|
|
87
|
+
}
|
|
88
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
89
|
+
failures.push({ name: 'AGENTS.md', path: targetPath, error: message });
|
|
90
|
+
console.error(' ❌ Failed to create AGENTS.md:', message);
|
|
91
|
+
}
|
|
92
|
+
return failures;
|
|
93
|
+
}
|
|
94
|
+
export async function installCodexTarget(request) {
|
|
95
|
+
const session = new TargetInstallSession('codex', request.projectRoot, request.writer ?? new PreservingWriter(request.projectRoot));
|
|
96
|
+
const selected = new Set(request.components);
|
|
97
|
+
if (selected.has('skills')) {
|
|
98
|
+
await session.copySkills(request.sources.skillManager, request.paths.skills);
|
|
99
|
+
}
|
|
100
|
+
if (selected.has('steering')) {
|
|
101
|
+
await session.copySteering(request.sources.steeringSource, request.paths.steering);
|
|
102
|
+
}
|
|
103
|
+
if (selected.has('rules')) {
|
|
104
|
+
await copyFlatComponents(session, 'rules', request.paths.rules, await request.sources.rulesManager.listComponents());
|
|
105
|
+
}
|
|
106
|
+
if (selected.has('contexts')) {
|
|
107
|
+
await copyFlatComponents(session, 'contexts', request.paths.contexts, await request.sources.contextManager.listComponents());
|
|
108
|
+
}
|
|
109
|
+
if (selected.has('agents')) {
|
|
110
|
+
const destinationRoot = session.resolve(request.paths.agents);
|
|
111
|
+
for (const descriptor of await request.sources.agentManager.listComponents()) {
|
|
112
|
+
const destination = path.join(destinationRoot, `${descriptor.name}.toml`);
|
|
113
|
+
try {
|
|
114
|
+
validateChildName(descriptor.name);
|
|
115
|
+
const source = await fs.promises.readFile(descriptor.path, 'utf8');
|
|
116
|
+
const rendered = renderCodexAgent(parseSourceAgent(source));
|
|
117
|
+
await session.write('agents', descriptor.name, destination, rendered);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
session.fail('agents', descriptor.name, destination, error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (selected.has('hooks')) {
|
|
125
|
+
const runnerDestination = session.resolve(path.join(request.paths.hooks, CODEX_HOOK_RUNNER_FILE));
|
|
126
|
+
const configDestination = session.resolve(path.join(path.dirname(request.paths.hooks), 'hooks.json'));
|
|
127
|
+
let runnerContent = request.hookRunnerContent ?? null;
|
|
128
|
+
let templateLoadFailed = false;
|
|
129
|
+
if (request.hookRunnerContent === undefined) {
|
|
130
|
+
try {
|
|
131
|
+
runnerContent = await loadHookRunnerTemplate();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
templateLoadFailed = true;
|
|
135
|
+
session.fail('hooks', CODEX_HOOK_RUNNER_FILE, runnerDestination, error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (runnerContent === null && !templateLoadFailed) {
|
|
139
|
+
session.fail('hooks', CODEX_HOOK_RUNNER_FILE, runnerDestination, new Error('Codex hook runner template not found'));
|
|
140
|
+
}
|
|
141
|
+
else if (runnerContent !== null) {
|
|
142
|
+
await session.write('hooks', CODEX_HOOK_RUNNER_FILE, runnerDestination, runnerContent);
|
|
143
|
+
await session.write('hooks', 'hooks.json', configDestination, renderCodexHooksConfig(request.paths.hooks, request.projectRoot));
|
|
144
|
+
}
|
|
89
145
|
}
|
|
146
|
+
const rootContent = await buildCodexRootGuidance(request, selected, request.rootGuidancePreamble ?? loadPreamble());
|
|
147
|
+
await session.write('root', request.paths.rootGuidance, session.resolve(request.paths.rootGuidance), rootContent);
|
|
148
|
+
return session.report;
|
|
149
|
+
}
|
|
150
|
+
async function buildCodexRootGuidance(request, selected, preamble) {
|
|
151
|
+
const [skills, rules, agents, steeringDocs] = await Promise.all([
|
|
152
|
+
selected.has('skills') ? request.sources.skillManager.listSkills() : Promise.resolve([]),
|
|
153
|
+
selected.has('rules') ? request.sources.rulesManager.listComponents() : Promise.resolve([]),
|
|
154
|
+
selected.has('agents') ? request.sources.agentManager.listComponents() : Promise.resolve([]),
|
|
155
|
+
selected.has('steering') ? listMarkdownFiles(request.sources.steeringSource) : Promise.resolve([]),
|
|
156
|
+
]);
|
|
157
|
+
let content = preamble;
|
|
158
|
+
content += buildTableSection('Skills', 'Workflow guidance invoked as skills:', request.paths.skills, skills, skill => `${request.paths.skills}/${skill.name}/`);
|
|
159
|
+
content += buildTableSection('Rules', 'Always-active project guidance:', request.paths.rules, rules, rule => `${request.paths.rules}/${path.basename(rule.path)}`);
|
|
160
|
+
content += buildTableSection('Agents', 'Specialized AI personas with role-specific model routing:', request.paths.agents, agents, agent => `${request.paths.agents}/${path.basename(agent.path, path.extname(agent.path))}.toml`);
|
|
161
|
+
content += buildSteeringSection(request.paths.steering, steeringDocs);
|
|
162
|
+
if (selected.has('contexts'))
|
|
163
|
+
content += buildGuidanceSection('Contexts', request.paths.contexts);
|
|
164
|
+
if (selected.has('hooks'))
|
|
165
|
+
content += buildGuidanceSection('Hooks', request.paths.hooks);
|
|
166
|
+
return content;
|
|
167
|
+
}
|
|
168
|
+
export function renderCodexHooksConfig(hooksPath, projectRoot = process.cwd()) {
|
|
169
|
+
const runner = resolveHookRunnerCommandPath(hooksPath, projectRoot);
|
|
170
|
+
const command = (event) => `node ${runner} ${event}`;
|
|
171
|
+
return `${JSON.stringify({
|
|
172
|
+
hooks: {
|
|
173
|
+
SessionStart: [{
|
|
174
|
+
matcher: 'startup|resume',
|
|
175
|
+
hooks: [{ type: 'command', command: command('session-start') }],
|
|
176
|
+
}],
|
|
177
|
+
Stop: [{
|
|
178
|
+
hooks: [{ type: 'command', command: command('stop') }],
|
|
179
|
+
}],
|
|
180
|
+
},
|
|
181
|
+
}, null, 2)}\n`;
|
|
182
|
+
}
|
|
183
|
+
function resolveHookRunnerCommandPath(hooksPath, projectRoot) {
|
|
184
|
+
const absoluteProjectRoot = path.resolve(projectRoot);
|
|
185
|
+
const absoluteRunner = path.resolve(absoluteProjectRoot, hooksPath, CODEX_HOOK_RUNNER_FILE);
|
|
186
|
+
const relativeRunner = path.relative(absoluteProjectRoot, absoluteRunner).split(path.sep).join('/');
|
|
187
|
+
if (path.isAbsolute(hooksPath)
|
|
188
|
+
|| relativeRunner === ''
|
|
189
|
+
|| relativeRunner === '..'
|
|
190
|
+
|| relativeRunner.startsWith('../')) {
|
|
191
|
+
return shellQuote(absoluteRunner);
|
|
192
|
+
}
|
|
193
|
+
return `"${GIT_ROOT_EXPRESSION}/${shellDoubleQuote(relativeRunner)}"`;
|
|
194
|
+
}
|
|
195
|
+
function shellDoubleQuote(value) {
|
|
196
|
+
if (value.includes('\n') || value.includes('\r') || value.includes('\0')) {
|
|
197
|
+
throw new Error('Hook path contains an unsupported control character');
|
|
198
|
+
}
|
|
199
|
+
return value.replace(/(["\\$`])/g, '\\$1');
|
|
200
|
+
}
|
|
201
|
+
function shellQuote(value) {
|
|
202
|
+
if (value.includes('\n') || value.includes('\r') || value.includes('\0')) {
|
|
203
|
+
throw new Error('Hook path contains an unsupported control character');
|
|
204
|
+
}
|
|
205
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
206
|
+
}
|
|
207
|
+
async function loadHookRunnerTemplate() {
|
|
208
|
+
const template = findTemplate('codex-hook-runner.js');
|
|
209
|
+
if (!template)
|
|
210
|
+
return null;
|
|
211
|
+
return fs.promises.readFile(template, 'utf8');
|
|
212
|
+
}
|
|
213
|
+
function isAlreadyExists(error) {
|
|
214
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'EEXIST';
|
|
90
215
|
}
|
|
91
216
|
//# sourceMappingURL=codex.js.map
|
|
@@ -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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { generateCodexAgentsMd } from './codex.js';
|
|
2
|
-
export type { ManagerRefs, InstallPaths, InstalledComponents } from './codex.js';
|
|
2
|
+
export type { ManagerRefs, InstallPaths, InstalledComponents, CodexGuidanceFailure } from './codex.js';
|
|
3
3
|
export { createAntigravitySymlinks } from './antigravity.js';
|
|
4
|
-
export type { AntigravityPaths } from './antigravity.js';
|
|
4
|
+
export type { AntigravityPaths, AntigravityFailure } from './antigravity.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface GuidanceItem {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function buildTableSection(title: string, subtitle: string, basePath: string, items: GuidanceItem[], pathFormatter: (item: GuidanceItem) => string): string;
|
|
7
|
+
export declare function buildSteeringSection(basePath: string, docs: string[]): string;
|
|
8
|
+
export declare function buildGuidanceSection(title: string, basePath: string | undefined): string;
|
|
9
|
+
export declare function listMarkdownFiles(directory: string): Promise<string[]>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
export function buildTableSection(title, subtitle, basePath, items, pathFormatter) {
|
|
3
|
+
if (items.length === 0)
|
|
4
|
+
return '';
|
|
5
|
+
let section = `### ${title} (\`${basePath}/\`)\n\n`;
|
|
6
|
+
section += `${subtitle}\n\n`;
|
|
7
|
+
section += `| ${title.slice(0, -1)} | Description | Path |\n`;
|
|
8
|
+
section += '|-------|-------------|------|\n';
|
|
9
|
+
for (const item of items) {
|
|
10
|
+
section += `| ${item.name} | ${item.description || '—'} | \`${pathFormatter(item)}\` |\n`;
|
|
11
|
+
}
|
|
12
|
+
section += '\n';
|
|
13
|
+
return section;
|
|
14
|
+
}
|
|
15
|
+
export function buildSteeringSection(basePath, docs) {
|
|
16
|
+
if (docs.length === 0)
|
|
17
|
+
return '';
|
|
18
|
+
let section = `### Steering (\`${basePath}/\`)\n\n`;
|
|
19
|
+
section += 'Project-specific context documents:\n\n';
|
|
20
|
+
for (const doc of docs) {
|
|
21
|
+
section += `- \`${basePath}/${doc}\`\n`;
|
|
22
|
+
}
|
|
23
|
+
section += '\n';
|
|
24
|
+
return section;
|
|
25
|
+
}
|
|
26
|
+
export function buildGuidanceSection(title, basePath) {
|
|
27
|
+
if (!basePath)
|
|
28
|
+
return '';
|
|
29
|
+
return `### ${title} (\`${basePath}/\`)\n\nRead the relevant guidance files from this directory on demand.\n\n`;
|
|
30
|
+
}
|
|
31
|
+
export async function listMarkdownFiles(directory) {
|
|
32
|
+
try {
|
|
33
|
+
const entries = await fs.promises.readdir(directory);
|
|
34
|
+
return entries.filter(file => file.endsWith('.md'));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=root-guidance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-guidance.js","sourceRoot":"","sources":["../../../src/cli/tool-support/root-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAQzB,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,KAAqB,EACrB,aAA6C;IAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,OAAO,GAAG,OAAO,KAAK,OAAO,QAAQ,UAAU,CAAC;IACpD,OAAO,IAAI,GAAG,QAAQ,MAAM,CAAC;IAC7B,OAAO,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAC9D,OAAO,IAAI,kCAAkC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,IAAI,GAAG,QAAQ,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5F,CAAC;IACD,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,IAAc;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,OAAO,GAAG,mBAAmB,QAAQ,UAAU,CAAC;IACpD,OAAO,IAAI,yCAAyC,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,OAAO,QAAQ,IAAI,GAAG,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,QAA4B;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,OAAO,KAAK,OAAO,QAAQ,6EAA6E,CAAC;AAClH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AgentRole } from '../install-target.js';
|
|
2
|
+
export interface SourceAgent {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
role: AgentRole;
|
|
6
|
+
expertise: string;
|
|
7
|
+
instructions: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseSourceAgent(content: string): SourceAgent;
|
|
10
|
+
export declare function renderClaudeCodeAgent(agent: SourceAgent): string;
|
|
11
|
+
export declare function renderCodexAgent(agent: SourceAgent): string;
|