create-claude-context 1.0.0 ā 1.2.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/LICENSE +21 -21
- package/README.md +146 -146
- package/bin/create-claude-context.js +61 -61
- package/lib/detector.js +373 -373
- package/lib/index.js +170 -170
- package/lib/installer.js +371 -362
- package/lib/placeholder.js +208 -208
- package/lib/prompts.js +287 -287
- package/lib/spinner.js +60 -60
- package/lib/validate.js +147 -147
- package/package.json +59 -59
- package/templates/CLAUDE.md.template +235 -235
- package/templates/base/README.md +257 -257
- package/templates/base/RPI_WORKFLOW_PLAN.md +320 -320
- package/templates/base/agents/api-developer.md +76 -76
- package/templates/base/agents/context-engineer.md +525 -525
- package/templates/base/agents/core-architect.md +76 -76
- package/templates/base/agents/database-ops.md +76 -76
- package/templates/base/agents/deployment-ops.md +76 -76
- package/templates/base/agents/integration-hub.md +76 -76
- package/templates/base/analytics/README.md +114 -114
- package/templates/base/automation/config.json +58 -0
- package/templates/base/automation/generators/code-mapper.js +308 -0
- package/templates/base/automation/generators/index-builder.js +321 -0
- package/templates/base/automation/hooks/post-commit.sh +83 -0
- package/templates/base/automation/hooks/pre-commit.sh +103 -0
- package/templates/base/ci-templates/README.md +108 -108
- package/templates/base/ci-templates/github-actions/context-check.yml +144 -144
- package/templates/base/ci-templates/github-actions/validate-docs.yml +105 -105
- package/templates/base/commands/analytics.md +238 -238
- package/templates/base/commands/auto-sync.md +172 -0
- package/templates/base/commands/collab.md +194 -194
- package/templates/base/commands/help.md +450 -450
- package/templates/base/commands/rpi-implement.md +115 -115
- package/templates/base/commands/rpi-plan.md +93 -93
- package/templates/base/commands/rpi-research.md +88 -88
- package/templates/base/commands/session-resume.md +144 -0
- package/templates/base/commands/session-save.md +112 -0
- package/templates/base/commands/validate-all.md +77 -77
- package/templates/base/commands/verify-docs-current.md +86 -86
- package/templates/base/config/base.json +57 -57
- package/templates/base/config/environments/development.json +13 -13
- package/templates/base/config/environments/production.json +17 -17
- package/templates/base/config/environments/staging.json +13 -13
- package/templates/base/config/local.json.example +21 -21
- package/templates/base/context/.meta/generated-at.json +18 -0
- package/templates/base/context/ARCHITECTURE_SNAPSHOT.md +156 -156
- package/templates/base/context/CODE_TO_WORKFLOW_MAP.md +94 -94
- package/templates/base/context/FILE_OWNERSHIP.md +57 -0
- package/templates/base/context/INTEGRATION_POINTS.md +92 -0
- package/templates/base/context/KNOWN_GOTCHAS.md +195 -195
- package/templates/base/context/TESTING_MAP.md +95 -0
- package/templates/base/context/WORKFLOW_INDEX.md +129 -129
- package/templates/base/context/workflows/WORKFLOW_TEMPLATE.md +294 -294
- package/templates/base/indexes/agents/CAPABILITY_MATRIX.md +255 -255
- package/templates/base/indexes/agents/CATEGORY_INDEX.md +44 -44
- package/templates/base/indexes/code/CATEGORY_INDEX.md +38 -38
- package/templates/base/indexes/routing/CATEGORY_INDEX.md +39 -39
- package/templates/base/indexes/search/CATEGORY_INDEX.md +39 -39
- package/templates/base/indexes/workflows/CATEGORY_INDEX.md +38 -38
- package/templates/base/knowledge/README.md +98 -98
- package/templates/base/knowledge/sessions/README.md +88 -88
- package/templates/base/knowledge/sessions/TEMPLATE.md +150 -150
- package/templates/base/knowledge/shared/decisions/0001-adopt-context-engineering.md +144 -144
- package/templates/base/knowledge/shared/decisions/README.md +49 -49
- package/templates/base/knowledge/shared/decisions/TEMPLATE.md +123 -123
- package/templates/base/knowledge/shared/patterns/README.md +62 -62
- package/templates/base/knowledge/shared/patterns/TEMPLATE.md +120 -120
- package/templates/base/plans/PLAN_TEMPLATE.md +250 -250
- package/templates/base/research/RESEARCH_TEMPLATE.md +153 -153
- package/templates/base/schemas/agent.schema.json +141 -141
- package/templates/base/schemas/anchors.schema.json +54 -0
- package/templates/base/schemas/automation.schema.json +93 -0
- package/templates/base/schemas/command.schema.json +134 -134
- package/templates/base/schemas/hashes.schema.json +40 -0
- package/templates/base/schemas/manifest.schema.json +117 -117
- package/templates/base/schemas/plan.schema.json +136 -136
- package/templates/base/schemas/research.schema.json +115 -115
- package/templates/base/schemas/roles.schema.json +34 -0
- package/templates/base/schemas/session.schema.json +77 -0
- package/templates/base/schemas/settings.schema.json +244 -244
- package/templates/base/schemas/staleness.schema.json +53 -0
- package/templates/base/schemas/team-config.schema.json +42 -0
- package/templates/base/schemas/workflow.schema.json +126 -126
- package/templates/base/session/checkpoints/.gitkeep +2 -0
- package/templates/base/session/current/state.json +20 -0
- package/templates/base/session/history/.gitkeep +2 -0
- package/templates/base/settings.json +79 -57
- package/templates/base/standards/COMPATIBILITY.md +219 -219
- package/templates/base/standards/EXTENSION_GUIDELINES.md +280 -280
- package/templates/base/standards/QUALITY_CHECKLIST.md +211 -211
- package/templates/base/standards/README.md +66 -66
- package/templates/base/sync/anchors.json +6 -0
- package/templates/base/sync/hashes.json +6 -0
- package/templates/base/sync/staleness.json +10 -0
- package/templates/base/team/README.md +168 -168
- package/templates/base/team/config.json +79 -79
- package/templates/base/team/roles.json +145 -145
- package/templates/base/tools/bin/claude-context.js +151 -151
- package/templates/base/tools/lib/anchor-resolver.js +276 -0
- package/templates/base/tools/lib/config-loader.js +363 -363
- package/templates/base/tools/lib/detector.js +350 -350
- package/templates/base/tools/lib/diagnose.js +206 -206
- package/templates/base/tools/lib/drift-detector.js +373 -0
- package/templates/base/tools/lib/errors.js +199 -199
- package/templates/base/tools/lib/index.js +36 -24
- package/templates/base/tools/lib/init.js +192 -192
- package/templates/base/tools/lib/logger.js +230 -230
- package/templates/base/tools/lib/placeholder.js +201 -201
- package/templates/base/tools/lib/session-manager.js +354 -0
- package/templates/base/tools/lib/validate.js +521 -521
- package/templates/base/tools/package.json +49 -49
|
@@ -1,192 +1,192 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Context Engineering - Initialization Module
|
|
3
|
-
*
|
|
4
|
-
* Handles initialization of context engineering for a repository.
|
|
5
|
-
* Includes tech stack detection, workflow discovery, and template population.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
const chalk = require('chalk');
|
|
11
|
-
const { configLoader, findClaudeDir } = require('./config-loader');
|
|
12
|
-
const { logger } = require('./logger');
|
|
13
|
-
const { InitializationError, FileSystemError } = require('./errors');
|
|
14
|
-
const { detectTechStack } = require('./detector');
|
|
15
|
-
const { replacePlaceholders } = require('./placeholder');
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Initialize context engineering for a repository
|
|
19
|
-
*/
|
|
20
|
-
async function init(options = {}) {
|
|
21
|
-
const {
|
|
22
|
-
config: configPath,
|
|
23
|
-
interactive = true,
|
|
24
|
-
resume = false,
|
|
25
|
-
validateOnly = false,
|
|
26
|
-
techStack = null,
|
|
27
|
-
projectName = null,
|
|
28
|
-
} = options;
|
|
29
|
-
|
|
30
|
-
const op = logger.startOperation('init');
|
|
31
|
-
|
|
32
|
-
try {
|
|
33
|
-
console.log(chalk.cyan('\nš¦ Initializing Claude Context Engineering...\n'));
|
|
34
|
-
|
|
35
|
-
// Find or create .claude directory
|
|
36
|
-
const claudeDir = findClaudeDir();
|
|
37
|
-
const projectRoot = path.dirname(claudeDir);
|
|
38
|
-
|
|
39
|
-
// Check for existing initialization
|
|
40
|
-
const progressFile = path.join(claudeDir, 'INIT_PROGRESS.json');
|
|
41
|
-
let progress = null;
|
|
42
|
-
|
|
43
|
-
if (fs.existsSync(progressFile)) {
|
|
44
|
-
progress = JSON.parse(fs.readFileSync(progressFile, 'utf8'));
|
|
45
|
-
|
|
46
|
-
if (!resume && progress.status !== 'COMPLETED') {
|
|
47
|
-
console.log(chalk.yellow('ā ļø Previous initialization found. Use --resume to continue.'));
|
|
48
|
-
console.log(chalk.gray(` Status: ${progress.status}`));
|
|
49
|
-
console.log(chalk.gray(` Last phase: ${progress.current_phase}`));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Validate-only mode
|
|
55
|
-
if (validateOnly) {
|
|
56
|
-
console.log(chalk.cyan('š Validating existing initialization...\n'));
|
|
57
|
-
return await validateInitialization(claudeDir);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Resume mode
|
|
61
|
-
if (resume && progress) {
|
|
62
|
-
console.log(chalk.cyan(`š Resuming from phase: ${progress.current_phase}\n`));
|
|
63
|
-
return await resumeInitialization(claudeDir, progress, options);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Start fresh initialization
|
|
67
|
-
console.log(chalk.white('Phase 1: Repository Analysis'));
|
|
68
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
69
|
-
|
|
70
|
-
// Detect tech stack
|
|
71
|
-
console.log(' Detecting technology stack...');
|
|
72
|
-
const detected = await detectTechStack(projectRoot, { hint: techStack });
|
|
73
|
-
|
|
74
|
-
console.log(chalk.green(` ā Tech stack: ${detected.stack}`));
|
|
75
|
-
console.log(chalk.gray(` Languages: ${detected.languages.join(', ')}`));
|
|
76
|
-
console.log(chalk.gray(` Frameworks: ${detected.frameworks.join(', ')}`));
|
|
77
|
-
console.log(chalk.gray(` Files: ${detected.fileCount}`));
|
|
78
|
-
|
|
79
|
-
// Create progress file
|
|
80
|
-
progress = {
|
|
81
|
-
version: '1.0.0',
|
|
82
|
-
started_at: new Date().toISOString(),
|
|
83
|
-
last_updated: new Date().toISOString(),
|
|
84
|
-
status: 'IN_PROGRESS',
|
|
85
|
-
current_phase: 'analysis',
|
|
86
|
-
phases: {
|
|
87
|
-
analysis: { status: 'COMPLETE', duration_ms: 0 },
|
|
88
|
-
discovery: { status: 'PENDING' },
|
|
89
|
-
population: { status: 'PENDING' },
|
|
90
|
-
validation: { status: 'PENDING' },
|
|
91
|
-
finalization: { status: 'PENDING' },
|
|
92
|
-
},
|
|
93
|
-
detected: {
|
|
94
|
-
tech_stack: detected.stack,
|
|
95
|
-
languages: detected.languages,
|
|
96
|
-
frameworks: detected.frameworks,
|
|
97
|
-
file_count: detected.fileCount,
|
|
98
|
-
loc: detected.loc || 0,
|
|
99
|
-
},
|
|
100
|
-
project_name: projectName || detected.projectName || path.basename(projectRoot),
|
|
101
|
-
errors: [],
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
saveProgress(progressFile, progress);
|
|
105
|
-
|
|
106
|
-
// Phase 2: Workflow Discovery
|
|
107
|
-
console.log(chalk.white('\nPhase 2: Workflow Discovery'));
|
|
108
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
109
|
-
console.log(chalk.yellow(' ā ļø Full workflow discovery requires Claude Code agent.'));
|
|
110
|
-
console.log(chalk.gray(' Run: @context-engineer "Initialize context engineering"'));
|
|
111
|
-
console.log(chalk.gray(' The agent will discover 8-15 workflows automatically.\n'));
|
|
112
|
-
|
|
113
|
-
progress.current_phase = 'discovery';
|
|
114
|
-
progress.phases.discovery.status = 'PENDING_AGENT';
|
|
115
|
-
saveProgress(progressFile, progress);
|
|
116
|
-
|
|
117
|
-
// Phase 3: Template Population (partial - placeholders only)
|
|
118
|
-
console.log(chalk.white('Phase 3: Template Population (Partial)'));
|
|
119
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
120
|
-
|
|
121
|
-
const placeholderValues = {
|
|
122
|
-
PROJECT_NAME: progress.project_name,
|
|
123
|
-
TECH_STACK: detected.stack,
|
|
124
|
-
DATE: new Date().toISOString().split('T')[0],
|
|
125
|
-
WORKFLOWS_COUNT: '{{WORKFLOWS_COUNT}}', // To be filled by agent
|
|
126
|
-
// Add more known values
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const claudeMdPath = path.join(projectRoot, 'CLAUDE.md');
|
|
130
|
-
if (fs.existsSync(claudeMdPath)) {
|
|
131
|
-
const result = await replacePlaceholders(claudeMdPath, placeholderValues, { dryRun: false });
|
|
132
|
-
console.log(chalk.green(` ā Replaced ${result.replaced} placeholders in CLAUDE.md`));
|
|
133
|
-
console.log(chalk.gray(` Remaining: ${result.remaining} placeholders`));
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
progress.current_phase = 'population';
|
|
137
|
-
progress.phases.population.status = 'PARTIAL';
|
|
138
|
-
saveProgress(progressFile, progress);
|
|
139
|
-
|
|
140
|
-
// Summary
|
|
141
|
-
console.log(chalk.white('\nš Initialization Summary'));
|
|
142
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
143
|
-
console.log(chalk.green(' ā Repository analyzed'));
|
|
144
|
-
console.log(chalk.green(' ā Tech stack detected'));
|
|
145
|
-
console.log(chalk.yellow(' ā³ Workflow discovery pending (run agent)'));
|
|
146
|
-
console.log(chalk.yellow(' ā³ Template population partial'));
|
|
147
|
-
|
|
148
|
-
console.log(chalk.white('\nš Next Steps:'));
|
|
149
|
-
console.log(chalk.cyan(' 1. Run: @context-engineer "Initialize context engineering"'));
|
|
150
|
-
console.log(chalk.gray(' This will discover workflows and complete the setup.'));
|
|
151
|
-
console.log(chalk.cyan(' 2. Review generated workflow documentation'));
|
|
152
|
-
console.log(chalk.cyan(' 3. Run: npx claude-context validate'));
|
|
153
|
-
|
|
154
|
-
op.success();
|
|
155
|
-
|
|
156
|
-
} catch (error) {
|
|
157
|
-
op.fail(error);
|
|
158
|
-
throw error;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Save initialization progress
|
|
164
|
-
*/
|
|
165
|
-
function saveProgress(filePath, progress) {
|
|
166
|
-
progress.last_updated = new Date().toISOString();
|
|
167
|
-
fs.writeFileSync(filePath, JSON.stringify(progress, null, 2));
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Resume an interrupted initialization
|
|
172
|
-
*/
|
|
173
|
-
async function resumeInitialization(claudeDir, progress, options) {
|
|
174
|
-
console.log(chalk.cyan(`Resuming from phase: ${progress.current_phase}`));
|
|
175
|
-
// Implementation would continue from the last phase
|
|
176
|
-
console.log(chalk.yellow('ā ļø Resume functionality requires full agent support.'));
|
|
177
|
-
console.log(chalk.gray(' Run: @context-engineer "resume initialization"'));
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Validate an existing initialization
|
|
182
|
-
*/
|
|
183
|
-
async function validateInitialization(claudeDir) {
|
|
184
|
-
const { validate } = require('./validate');
|
|
185
|
-
return await validate({ all: true, claudeDir });
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
module.exports = {
|
|
189
|
-
init,
|
|
190
|
-
resumeInitialization,
|
|
191
|
-
validateInitialization,
|
|
192
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Claude Context Engineering - Initialization Module
|
|
3
|
+
*
|
|
4
|
+
* Handles initialization of context engineering for a repository.
|
|
5
|
+
* Includes tech stack detection, workflow discovery, and template population.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const chalk = require('chalk');
|
|
11
|
+
const { configLoader, findClaudeDir } = require('./config-loader');
|
|
12
|
+
const { logger } = require('./logger');
|
|
13
|
+
const { InitializationError, FileSystemError } = require('./errors');
|
|
14
|
+
const { detectTechStack } = require('./detector');
|
|
15
|
+
const { replacePlaceholders } = require('./placeholder');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Initialize context engineering for a repository
|
|
19
|
+
*/
|
|
20
|
+
async function init(options = {}) {
|
|
21
|
+
const {
|
|
22
|
+
config: configPath,
|
|
23
|
+
interactive = true,
|
|
24
|
+
resume = false,
|
|
25
|
+
validateOnly = false,
|
|
26
|
+
techStack = null,
|
|
27
|
+
projectName = null,
|
|
28
|
+
} = options;
|
|
29
|
+
|
|
30
|
+
const op = logger.startOperation('init');
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
console.log(chalk.cyan('\nš¦ Initializing Claude Context Engineering...\n'));
|
|
34
|
+
|
|
35
|
+
// Find or create .claude directory
|
|
36
|
+
const claudeDir = findClaudeDir();
|
|
37
|
+
const projectRoot = path.dirname(claudeDir);
|
|
38
|
+
|
|
39
|
+
// Check for existing initialization
|
|
40
|
+
const progressFile = path.join(claudeDir, 'INIT_PROGRESS.json');
|
|
41
|
+
let progress = null;
|
|
42
|
+
|
|
43
|
+
if (fs.existsSync(progressFile)) {
|
|
44
|
+
progress = JSON.parse(fs.readFileSync(progressFile, 'utf8'));
|
|
45
|
+
|
|
46
|
+
if (!resume && progress.status !== 'COMPLETED') {
|
|
47
|
+
console.log(chalk.yellow('ā ļø Previous initialization found. Use --resume to continue.'));
|
|
48
|
+
console.log(chalk.gray(` Status: ${progress.status}`));
|
|
49
|
+
console.log(chalk.gray(` Last phase: ${progress.current_phase}`));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Validate-only mode
|
|
55
|
+
if (validateOnly) {
|
|
56
|
+
console.log(chalk.cyan('š Validating existing initialization...\n'));
|
|
57
|
+
return await validateInitialization(claudeDir);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Resume mode
|
|
61
|
+
if (resume && progress) {
|
|
62
|
+
console.log(chalk.cyan(`š Resuming from phase: ${progress.current_phase}\n`));
|
|
63
|
+
return await resumeInitialization(claudeDir, progress, options);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Start fresh initialization
|
|
67
|
+
console.log(chalk.white('Phase 1: Repository Analysis'));
|
|
68
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
69
|
+
|
|
70
|
+
// Detect tech stack
|
|
71
|
+
console.log(' Detecting technology stack...');
|
|
72
|
+
const detected = await detectTechStack(projectRoot, { hint: techStack });
|
|
73
|
+
|
|
74
|
+
console.log(chalk.green(` ā Tech stack: ${detected.stack}`));
|
|
75
|
+
console.log(chalk.gray(` Languages: ${detected.languages.join(', ')}`));
|
|
76
|
+
console.log(chalk.gray(` Frameworks: ${detected.frameworks.join(', ')}`));
|
|
77
|
+
console.log(chalk.gray(` Files: ${detected.fileCount}`));
|
|
78
|
+
|
|
79
|
+
// Create progress file
|
|
80
|
+
progress = {
|
|
81
|
+
version: '1.0.0',
|
|
82
|
+
started_at: new Date().toISOString(),
|
|
83
|
+
last_updated: new Date().toISOString(),
|
|
84
|
+
status: 'IN_PROGRESS',
|
|
85
|
+
current_phase: 'analysis',
|
|
86
|
+
phases: {
|
|
87
|
+
analysis: { status: 'COMPLETE', duration_ms: 0 },
|
|
88
|
+
discovery: { status: 'PENDING' },
|
|
89
|
+
population: { status: 'PENDING' },
|
|
90
|
+
validation: { status: 'PENDING' },
|
|
91
|
+
finalization: { status: 'PENDING' },
|
|
92
|
+
},
|
|
93
|
+
detected: {
|
|
94
|
+
tech_stack: detected.stack,
|
|
95
|
+
languages: detected.languages,
|
|
96
|
+
frameworks: detected.frameworks,
|
|
97
|
+
file_count: detected.fileCount,
|
|
98
|
+
loc: detected.loc || 0,
|
|
99
|
+
},
|
|
100
|
+
project_name: projectName || detected.projectName || path.basename(projectRoot),
|
|
101
|
+
errors: [],
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
saveProgress(progressFile, progress);
|
|
105
|
+
|
|
106
|
+
// Phase 2: Workflow Discovery
|
|
107
|
+
console.log(chalk.white('\nPhase 2: Workflow Discovery'));
|
|
108
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
109
|
+
console.log(chalk.yellow(' ā ļø Full workflow discovery requires Claude Code agent.'));
|
|
110
|
+
console.log(chalk.gray(' Run: @context-engineer "Initialize context engineering"'));
|
|
111
|
+
console.log(chalk.gray(' The agent will discover 8-15 workflows automatically.\n'));
|
|
112
|
+
|
|
113
|
+
progress.current_phase = 'discovery';
|
|
114
|
+
progress.phases.discovery.status = 'PENDING_AGENT';
|
|
115
|
+
saveProgress(progressFile, progress);
|
|
116
|
+
|
|
117
|
+
// Phase 3: Template Population (partial - placeholders only)
|
|
118
|
+
console.log(chalk.white('Phase 3: Template Population (Partial)'));
|
|
119
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
120
|
+
|
|
121
|
+
const placeholderValues = {
|
|
122
|
+
PROJECT_NAME: progress.project_name,
|
|
123
|
+
TECH_STACK: detected.stack,
|
|
124
|
+
DATE: new Date().toISOString().split('T')[0],
|
|
125
|
+
WORKFLOWS_COUNT: '{{WORKFLOWS_COUNT}}', // To be filled by agent
|
|
126
|
+
// Add more known values
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const claudeMdPath = path.join(projectRoot, 'CLAUDE.md');
|
|
130
|
+
if (fs.existsSync(claudeMdPath)) {
|
|
131
|
+
const result = await replacePlaceholders(claudeMdPath, placeholderValues, { dryRun: false });
|
|
132
|
+
console.log(chalk.green(` ā Replaced ${result.replaced} placeholders in CLAUDE.md`));
|
|
133
|
+
console.log(chalk.gray(` Remaining: ${result.remaining} placeholders`));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
progress.current_phase = 'population';
|
|
137
|
+
progress.phases.population.status = 'PARTIAL';
|
|
138
|
+
saveProgress(progressFile, progress);
|
|
139
|
+
|
|
140
|
+
// Summary
|
|
141
|
+
console.log(chalk.white('\nš Initialization Summary'));
|
|
142
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
143
|
+
console.log(chalk.green(' ā Repository analyzed'));
|
|
144
|
+
console.log(chalk.green(' ā Tech stack detected'));
|
|
145
|
+
console.log(chalk.yellow(' ā³ Workflow discovery pending (run agent)'));
|
|
146
|
+
console.log(chalk.yellow(' ā³ Template population partial'));
|
|
147
|
+
|
|
148
|
+
console.log(chalk.white('\nš Next Steps:'));
|
|
149
|
+
console.log(chalk.cyan(' 1. Run: @context-engineer "Initialize context engineering"'));
|
|
150
|
+
console.log(chalk.gray(' This will discover workflows and complete the setup.'));
|
|
151
|
+
console.log(chalk.cyan(' 2. Review generated workflow documentation'));
|
|
152
|
+
console.log(chalk.cyan(' 3. Run: npx claude-context validate'));
|
|
153
|
+
|
|
154
|
+
op.success();
|
|
155
|
+
|
|
156
|
+
} catch (error) {
|
|
157
|
+
op.fail(error);
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Save initialization progress
|
|
164
|
+
*/
|
|
165
|
+
function saveProgress(filePath, progress) {
|
|
166
|
+
progress.last_updated = new Date().toISOString();
|
|
167
|
+
fs.writeFileSync(filePath, JSON.stringify(progress, null, 2));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Resume an interrupted initialization
|
|
172
|
+
*/
|
|
173
|
+
async function resumeInitialization(claudeDir, progress, options) {
|
|
174
|
+
console.log(chalk.cyan(`Resuming from phase: ${progress.current_phase}`));
|
|
175
|
+
// Implementation would continue from the last phase
|
|
176
|
+
console.log(chalk.yellow('ā ļø Resume functionality requires full agent support.'));
|
|
177
|
+
console.log(chalk.gray(' Run: @context-engineer "resume initialization"'));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Validate an existing initialization
|
|
182
|
+
*/
|
|
183
|
+
async function validateInitialization(claudeDir) {
|
|
184
|
+
const { validate } = require('./validate');
|
|
185
|
+
return await validate({ all: true, claudeDir });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
module.exports = {
|
|
189
|
+
init,
|
|
190
|
+
resumeInitialization,
|
|
191
|
+
validateInitialization,
|
|
192
|
+
};
|