mustard-claude 2.0.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 +198 -0
- package/bin/mustard.js +5 -0
- package/dist/analyzers/llm.d.ts +13 -0
- package/dist/analyzers/llm.js +339 -0
- package/dist/analyzers/llm.js.map +1 -0
- package/dist/analyzers/semantic.d.ts +13 -0
- package/dist/analyzers/semantic.js +215 -0
- package/dist/analyzers/semantic.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.js +377 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/sync.d.ts +5 -0
- package/dist/commands/sync.js +235 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.js +237 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/generators/claude-md-llm.d.ts +5 -0
- package/dist/generators/claude-md-llm.js +101 -0
- package/dist/generators/claude-md-llm.js.map +1 -0
- package/dist/generators/claude-md-template.d.ts +5 -0
- package/dist/generators/claude-md-template.js +273 -0
- package/dist/generators/claude-md-template.js.map +1 -0
- package/dist/generators/commands.d.ts +17 -0
- package/dist/generators/commands.js +845 -0
- package/dist/generators/commands.js.map +1 -0
- package/dist/generators/context.d.ts +11 -0
- package/dist/generators/context.js +621 -0
- package/dist/generators/context.js.map +1 -0
- package/dist/generators/hooks.d.ts +5 -0
- package/dist/generators/hooks.js +128 -0
- package/dist/generators/hooks.js.map +1 -0
- package/dist/generators/index.d.ts +11 -0
- package/dist/generators/index.js +541 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/prompts.d.ts +13 -0
- package/dist/generators/prompts.js +579 -0
- package/dist/generators/prompts.js.map +1 -0
- package/dist/generators/registry.d.ts +5 -0
- package/dist/generators/registry.js +93 -0
- package/dist/generators/registry.js.map +1 -0
- package/dist/scanners/dependencies.d.ts +7 -0
- package/dist/scanners/dependencies.js +195 -0
- package/dist/scanners/dependencies.js.map +1 -0
- package/dist/scanners/index.d.ts +6 -0
- package/dist/scanners/index.js +37 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/samples.d.ts +8 -0
- package/dist/scanners/samples.js +193 -0
- package/dist/scanners/samples.js.map +1 -0
- package/dist/scanners/stack.d.ts +5 -0
- package/dist/scanners/stack.js +294 -0
- package/dist/scanners/stack.js.map +1 -0
- package/dist/scanners/structure.d.ts +5 -0
- package/dist/scanners/structure.js +274 -0
- package/dist/scanners/structure.js.map +1 -0
- package/dist/services/grepai.d.ts +25 -0
- package/dist/services/grepai.js +89 -0
- package/dist/services/grepai.js.map +1 -0
- package/dist/services/ollama.d.ts +22 -0
- package/dist/services/ollama.js +86 -0
- package/dist/services/ollama.js.map +1 -0
- package/dist/services/package-manager.d.ts +95 -0
- package/dist/services/package-manager.js +164 -0
- package/dist/services/package-manager.js.map +1 -0
- package/dist/types.d.ts +233 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { readFile, writeFile, readdir, mkdir } from 'fs/promises';
|
|
3
|
+
import { join, resolve } from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
import { scanProject } from '../scanners/index.js';
|
|
8
|
+
import * as ollamaService from '../services/ollama.js';
|
|
9
|
+
import * as grepaiService from '../services/grepai.js';
|
|
10
|
+
import * as semanticAnalyzer from '../analyzers/semantic.js';
|
|
11
|
+
import { generateContext } from '../generators/context.js';
|
|
12
|
+
import { generateRegistry } from '../generators/registry.js';
|
|
13
|
+
import { generateAutoSection, mergePromptContext } from '../generators/prompts.js';
|
|
14
|
+
/**
|
|
15
|
+
* Sync command - syncs prompts and context with current codebase state
|
|
16
|
+
*/
|
|
17
|
+
export async function syncCommand(options) {
|
|
18
|
+
const projectPath = resolve(process.cwd());
|
|
19
|
+
const claudePath = join(projectPath, '.claude');
|
|
20
|
+
console.log(chalk.bold('\n🌿 Mustard CLI v2.0 - Sync\n'));
|
|
21
|
+
// 1. Check .claude/ exists
|
|
22
|
+
if (!existsSync(claudePath)) {
|
|
23
|
+
console.log(chalk.red('❌ No .claude/ directory found.'));
|
|
24
|
+
console.log(chalk.gray(' Run "mustard init" first.\n'));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Determine scope
|
|
28
|
+
const syncAll = !options.prompts && !options.context && !options.registry;
|
|
29
|
+
const syncPrompts = syncAll || options.prompts;
|
|
30
|
+
const syncContext = syncAll || options.context;
|
|
31
|
+
const syncRegistry = syncAll || options.registry;
|
|
32
|
+
// Show plan
|
|
33
|
+
console.log(chalk.white('📋 Sync plan:\n'));
|
|
34
|
+
if (syncPrompts)
|
|
35
|
+
console.log(chalk.green(' ✓ Prompts (merge with existing)'));
|
|
36
|
+
if (syncContext)
|
|
37
|
+
console.log(chalk.green(' ✓ Context files (regenerate)'));
|
|
38
|
+
if (syncRegistry)
|
|
39
|
+
console.log(chalk.green(' ✓ Entity registry (update)'));
|
|
40
|
+
console.log(chalk.yellow('\n ⚡ Preserved: CLAUDE.md, commands/, hooks/\n'));
|
|
41
|
+
// Confirm
|
|
42
|
+
if (!options.force) {
|
|
43
|
+
const { proceed } = await inquirer.prompt([{
|
|
44
|
+
type: 'confirm',
|
|
45
|
+
name: 'proceed',
|
|
46
|
+
message: 'Proceed with sync?',
|
|
47
|
+
default: true
|
|
48
|
+
}]);
|
|
49
|
+
if (!proceed) {
|
|
50
|
+
console.log(chalk.yellow('\n⚠️ Cancelled.\n'));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 2. Check dependencies
|
|
55
|
+
const deps = await checkDependencies(options);
|
|
56
|
+
// 3. Scan project
|
|
57
|
+
const scanSpinner = ora('Scanning project...').start();
|
|
58
|
+
let projectInfo;
|
|
59
|
+
try {
|
|
60
|
+
projectInfo = await scanProject(projectPath, { verbose: options.verbose });
|
|
61
|
+
scanSpinner.succeed('Project scanned');
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
scanSpinner.fail('Scan failed');
|
|
65
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
66
|
+
console.error(chalk.red(message));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// 4. Semantic analysis (if grepai available)
|
|
70
|
+
let patterns = {
|
|
71
|
+
services: [],
|
|
72
|
+
repositories: [],
|
|
73
|
+
endpoints: [],
|
|
74
|
+
components: [],
|
|
75
|
+
hooks: [],
|
|
76
|
+
entities: [],
|
|
77
|
+
callGraph: null
|
|
78
|
+
};
|
|
79
|
+
if (deps.grepai && options.grepai !== false) {
|
|
80
|
+
const semanticSpinner = ora('Analyzing codebase (grepai)...').start();
|
|
81
|
+
try {
|
|
82
|
+
patterns = await semanticAnalyzer.discoverPatterns({
|
|
83
|
+
stacks: projectInfo.stacks,
|
|
84
|
+
verbose: options.verbose
|
|
85
|
+
});
|
|
86
|
+
const entities = await semanticAnalyzer.discoverEntities(projectInfo.stacks);
|
|
87
|
+
patterns.entities = entities;
|
|
88
|
+
semanticSpinner.succeed(`Found ${patterns.entities.length} entities`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
semanticSpinner.warn('Semantic analysis limited');
|
|
92
|
+
if (options.verbose) {
|
|
93
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
94
|
+
console.log(chalk.gray(` ${message}`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 5. Build analysis object
|
|
99
|
+
const analysis = {
|
|
100
|
+
architecture: projectInfo.structure?.architecture ?? { type: 'unknown', confidence: 'low' },
|
|
101
|
+
patterns: [],
|
|
102
|
+
rules: [],
|
|
103
|
+
entities: patterns.entities
|
|
104
|
+
};
|
|
105
|
+
// 6. Sync prompts
|
|
106
|
+
let promptsUpdated = 0;
|
|
107
|
+
if (syncPrompts) {
|
|
108
|
+
const promptsSpinner = ora('Syncing prompts...').start();
|
|
109
|
+
try {
|
|
110
|
+
promptsUpdated = await syncPromptsWithContext(claudePath, projectInfo, analysis, patterns);
|
|
111
|
+
promptsSpinner.succeed(`Updated ${promptsUpdated} prompts`);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
promptsSpinner.fail('Prompt sync failed');
|
|
115
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
116
|
+
console.error(chalk.red(message));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// 7. Sync context
|
|
120
|
+
if (syncContext) {
|
|
121
|
+
const contextSpinner = ora('Syncing context files...').start();
|
|
122
|
+
try {
|
|
123
|
+
await generateContext(claudePath, projectInfo, analysis, {}, {
|
|
124
|
+
useOllama: deps.ollama && options.ollama !== false,
|
|
125
|
+
model: deps.ollamaModel ?? undefined,
|
|
126
|
+
verbose: options.verbose
|
|
127
|
+
});
|
|
128
|
+
contextSpinner.succeed('Context files updated');
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
contextSpinner.fail('Context sync failed');
|
|
132
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
133
|
+
console.error(chalk.red(message));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// 8. Sync registry
|
|
137
|
+
if (syncRegistry) {
|
|
138
|
+
const registrySpinner = ora('Updating entity registry...').start();
|
|
139
|
+
try {
|
|
140
|
+
const registry = generateRegistry(projectInfo, analysis);
|
|
141
|
+
const registryPath = join(claudePath, 'entity-registry.json');
|
|
142
|
+
await writeFile(registryPath, JSON.stringify(registry, null, 2));
|
|
143
|
+
registrySpinner.succeed(`Entity registry updated (${Object.keys(registry.e).length} entities)`);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
registrySpinner.fail('Registry sync failed');
|
|
147
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
148
|
+
console.error(chalk.red(message));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Done!
|
|
152
|
+
console.log(chalk.green.bold('\n✅ Sync complete!\n'));
|
|
153
|
+
// Show summary
|
|
154
|
+
const changes = [];
|
|
155
|
+
if (syncPrompts && promptsUpdated > 0)
|
|
156
|
+
changes.push(`${promptsUpdated} prompts`);
|
|
157
|
+
if (syncContext)
|
|
158
|
+
changes.push('context files');
|
|
159
|
+
if (syncRegistry)
|
|
160
|
+
changes.push('entity registry');
|
|
161
|
+
if (changes.length > 0) {
|
|
162
|
+
console.log(chalk.gray(` Updated: ${changes.join(', ')}`));
|
|
163
|
+
}
|
|
164
|
+
console.log(chalk.gray(' Run "mustard sync --help" for more options.\n'));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check available dependencies
|
|
168
|
+
*/
|
|
169
|
+
async function checkDependencies(options) {
|
|
170
|
+
const deps = {
|
|
171
|
+
ollama: false,
|
|
172
|
+
ollamaModel: null,
|
|
173
|
+
grepai: false
|
|
174
|
+
};
|
|
175
|
+
if (options.ollama !== false) {
|
|
176
|
+
const ollamaSpinner = ora('Checking Ollama...').start();
|
|
177
|
+
const ollamaAvailable = await ollamaService.checkOllamaAvailable();
|
|
178
|
+
if (ollamaAvailable) {
|
|
179
|
+
const models = await ollamaService.getAvailableModels();
|
|
180
|
+
if (models.length > 0) {
|
|
181
|
+
deps.ollama = true;
|
|
182
|
+
deps.ollamaModel = await ollamaService.selectBestModel(models);
|
|
183
|
+
ollamaSpinner.succeed(`Ollama: ${deps.ollamaModel}`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
ollamaSpinner.warn('Ollama running but no models');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
ollamaSpinner.warn('Ollama not available');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (options.grepai !== false) {
|
|
194
|
+
const grepaiSpinner = ora('Checking grepai...').start();
|
|
195
|
+
const grepaiAvailable = await grepaiService.checkGrepaiAvailable();
|
|
196
|
+
if (grepaiAvailable) {
|
|
197
|
+
deps.grepai = true;
|
|
198
|
+
grepaiSpinner.succeed('grepai: available');
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
grepaiSpinner.warn('grepai not available');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return deps;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Sync prompts with current project context
|
|
208
|
+
*/
|
|
209
|
+
async function syncPromptsWithContext(claudePath, projectInfo, analysis, patterns) {
|
|
210
|
+
const promptsPath = join(claudePath, 'prompts');
|
|
211
|
+
// Create prompts directory if it doesn't exist
|
|
212
|
+
if (!existsSync(promptsPath)) {
|
|
213
|
+
await mkdir(promptsPath, { recursive: true });
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
216
|
+
const files = await readdir(promptsPath);
|
|
217
|
+
let updated = 0;
|
|
218
|
+
for (const file of files) {
|
|
219
|
+
if (!file.endsWith('.md') || file === '_index.md')
|
|
220
|
+
continue;
|
|
221
|
+
const filePath = join(promptsPath, file);
|
|
222
|
+
const content = await readFile(filePath, 'utf-8');
|
|
223
|
+
// Generate new auto section based on prompt type
|
|
224
|
+
const promptType = file.replace('.md', '');
|
|
225
|
+
const autoSection = generateAutoSection(promptType, projectInfo, analysis, patterns);
|
|
226
|
+
// Merge: replace auto section, preserve rest
|
|
227
|
+
const merged = mergePromptContext(content, autoSection);
|
|
228
|
+
if (merged !== content) {
|
|
229
|
+
await writeFile(filePath, merged, 'utf-8');
|
|
230
|
+
updated++;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return updated;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InitOptions } from '../types.js';
|
|
2
|
+
export interface UpdateOptions extends InitOptions {
|
|
3
|
+
includeClaudeMd?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Update command - updates Mustard core files while preserving client customizations
|
|
7
|
+
*/
|
|
8
|
+
export declare function updateCommand(options: UpdateOptions): Promise<void>;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { rm, cp } from 'fs/promises';
|
|
3
|
+
import { join, resolve } from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
import { scanProject } from '../scanners/index.js';
|
|
8
|
+
import * as ollamaService from '../services/ollama.js';
|
|
9
|
+
import * as grepaiService from '../services/grepai.js';
|
|
10
|
+
import * as semanticAnalyzer from '../analyzers/semantic.js';
|
|
11
|
+
import { generateCoreOnly } from '../generators/index.js';
|
|
12
|
+
import { MUSTARD_COMMANDS_FOLDER } from '../generators/commands.js';
|
|
13
|
+
/**
|
|
14
|
+
* Update command - updates Mustard core files while preserving client customizations
|
|
15
|
+
*/
|
|
16
|
+
export async function updateCommand(options) {
|
|
17
|
+
const projectPath = resolve(process.cwd());
|
|
18
|
+
const claudePath = join(projectPath, '.claude');
|
|
19
|
+
console.log(chalk.bold('\n🌿 Mustard CLI v2.0 - Update\n'));
|
|
20
|
+
// Check if .claude/ exists
|
|
21
|
+
if (!existsSync(claudePath)) {
|
|
22
|
+
console.log(chalk.red('❌ No .claude/ directory found.'));
|
|
23
|
+
console.log(chalk.gray(' Run "mustard init" first to initialize the project.\n'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Show what will be updated vs preserved
|
|
27
|
+
console.log(chalk.white('📋 Update plan:\n'));
|
|
28
|
+
console.log(chalk.green(' ✓ Will update (core files):'));
|
|
29
|
+
console.log(chalk.gray(' • commands/mustard/*.md (Mustard commands)'));
|
|
30
|
+
console.log(chalk.gray(' • hooks/*.js'));
|
|
31
|
+
console.log(chalk.gray(' • core/*.md'));
|
|
32
|
+
console.log(chalk.gray(' • scripts/*.js'));
|
|
33
|
+
console.log(chalk.gray(' • context/README.md'));
|
|
34
|
+
console.log(chalk.gray(' • entity-registry.json'));
|
|
35
|
+
console.log(chalk.gray(' • settings.json (merged)'));
|
|
36
|
+
console.log(chalk.yellow('\n ⚡ Will preserve (client files):'));
|
|
37
|
+
console.log(chalk.gray(' • CLAUDE.md'));
|
|
38
|
+
console.log(chalk.gray(' • commands/*.md (user commands)'));
|
|
39
|
+
console.log(chalk.gray(' • prompts/*.md'));
|
|
40
|
+
console.log(chalk.gray(' • context/*.md (user files)'));
|
|
41
|
+
console.log(chalk.gray(' • docs/*'));
|
|
42
|
+
if (options.includeClaudeMd) {
|
|
43
|
+
console.log(chalk.cyan('\n ℹ️ --include-claude-md: CLAUDE.md will also be updated'));
|
|
44
|
+
}
|
|
45
|
+
// Create backup unless --force
|
|
46
|
+
if (!options.force) {
|
|
47
|
+
const { proceed } = await inquirer.prompt([
|
|
48
|
+
{
|
|
49
|
+
type: 'confirm',
|
|
50
|
+
name: 'proceed',
|
|
51
|
+
message: 'Create backup and proceed with update?',
|
|
52
|
+
default: true
|
|
53
|
+
}
|
|
54
|
+
]);
|
|
55
|
+
if (!proceed) {
|
|
56
|
+
console.log(chalk.yellow('\n⚠️ Cancelled.\n'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await backupExistingClaude(claudePath);
|
|
60
|
+
}
|
|
61
|
+
// Check dependencies
|
|
62
|
+
const deps = await checkDependencies(options);
|
|
63
|
+
// Scan project
|
|
64
|
+
const scanSpinner = ora('Scanning project...').start();
|
|
65
|
+
let projectInfo;
|
|
66
|
+
try {
|
|
67
|
+
projectInfo = await scanProject(projectPath, { verbose: options.verbose });
|
|
68
|
+
scanSpinner.succeed('Project scanned');
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
scanSpinner.fail('Scan failed');
|
|
72
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
73
|
+
console.error(chalk.red(message));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Semantic analysis (if grepai available)
|
|
77
|
+
let patterns = {
|
|
78
|
+
services: [],
|
|
79
|
+
repositories: [],
|
|
80
|
+
endpoints: [],
|
|
81
|
+
components: [],
|
|
82
|
+
hooks: [],
|
|
83
|
+
entities: [],
|
|
84
|
+
callGraph: null
|
|
85
|
+
};
|
|
86
|
+
if (deps.grepai && options.grepai !== false) {
|
|
87
|
+
const semanticSpinner = ora('Analyzing codebase (grepai)...').start();
|
|
88
|
+
try {
|
|
89
|
+
patterns = await semanticAnalyzer.discoverPatterns({
|
|
90
|
+
stacks: projectInfo.stacks,
|
|
91
|
+
verbose: options.verbose
|
|
92
|
+
});
|
|
93
|
+
const entities = await semanticAnalyzer.discoverEntities(projectInfo.stacks);
|
|
94
|
+
patterns.entities = entities;
|
|
95
|
+
semanticSpinner.succeed(`Found ${patterns.entities.length} entities`);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
semanticSpinner.warn('Semantic analysis limited');
|
|
99
|
+
if (options.verbose) {
|
|
100
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
101
|
+
console.log(chalk.gray(` ${message}`));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Build analysis object
|
|
106
|
+
const analysis = {
|
|
107
|
+
architecture: projectInfo.structure?.architecture ?? { type: 'unknown', confidence: 'low' },
|
|
108
|
+
patterns: [],
|
|
109
|
+
rules: [],
|
|
110
|
+
entities: patterns.entities
|
|
111
|
+
};
|
|
112
|
+
// Clean mustard commands folder before regenerating
|
|
113
|
+
// This ensures old Mustard commands are removed while preserving user commands in commands/
|
|
114
|
+
const mustardCommandsPath = join(claudePath, 'commands', MUSTARD_COMMANDS_FOLDER);
|
|
115
|
+
if (existsSync(mustardCommandsPath)) {
|
|
116
|
+
await rm(mustardCommandsPath, { recursive: true, force: true });
|
|
117
|
+
}
|
|
118
|
+
// Generate core files only
|
|
119
|
+
const genSpinner = ora('Updating core files...').start();
|
|
120
|
+
try {
|
|
121
|
+
const files = await generateCoreOnly(projectPath, projectInfo, analysis, {
|
|
122
|
+
useOllama: deps.ollama && options.ollama !== false,
|
|
123
|
+
model: deps.ollamaModel ?? undefined,
|
|
124
|
+
hasGrepai: deps.grepai,
|
|
125
|
+
verbose: options.verbose,
|
|
126
|
+
overwriteClaudeMd: options.includeClaudeMd ?? false
|
|
127
|
+
});
|
|
128
|
+
genSpinner.succeed(`Updated ${files.length} files`);
|
|
129
|
+
// Display updated files
|
|
130
|
+
console.log(chalk.gray('\n Updated files:'));
|
|
131
|
+
const grouped = groupFiles(files);
|
|
132
|
+
for (const [dir, dirFiles] of Object.entries(grouped)) {
|
|
133
|
+
if (dir === '') {
|
|
134
|
+
for (const file of dirFiles) {
|
|
135
|
+
console.log(chalk.gray(` .claude/${file}`));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(chalk.gray(` .claude/${dir}/`));
|
|
140
|
+
for (const file of dirFiles) {
|
|
141
|
+
console.log(chalk.gray(` ${file}`));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
genSpinner.fail('Update failed');
|
|
148
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
149
|
+
console.error(chalk.red(message));
|
|
150
|
+
if (options.verbose && error instanceof Error) {
|
|
151
|
+
console.error(error.stack);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Done!
|
|
156
|
+
console.log(chalk.green.bold('\n✅ Update complete!\n'));
|
|
157
|
+
console.log(chalk.gray(' Your customizations in CLAUDE.md, context/, and commands/ were preserved.'));
|
|
158
|
+
console.log(chalk.gray(' Mustard commands are in commands/mustard/ (safe to overwrite on updates).'));
|
|
159
|
+
console.log(chalk.gray(' A backup was created in case you need to restore.\n'));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check available dependencies
|
|
163
|
+
*/
|
|
164
|
+
async function checkDependencies(options) {
|
|
165
|
+
const deps = {
|
|
166
|
+
ollama: false,
|
|
167
|
+
ollamaModel: null,
|
|
168
|
+
grepai: false
|
|
169
|
+
};
|
|
170
|
+
if (options.ollama !== false) {
|
|
171
|
+
const ollamaSpinner = ora('Checking Ollama...').start();
|
|
172
|
+
const ollamaAvailable = await ollamaService.checkOllamaAvailable();
|
|
173
|
+
if (ollamaAvailable) {
|
|
174
|
+
const models = await ollamaService.getAvailableModels();
|
|
175
|
+
if (models.length > 0) {
|
|
176
|
+
deps.ollama = true;
|
|
177
|
+
deps.ollamaModel = await ollamaService.selectBestModel(models);
|
|
178
|
+
ollamaSpinner.succeed(`Ollama: ${deps.ollamaModel}`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
ollamaSpinner.warn('Ollama running but no models');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
ollamaSpinner.warn('Ollama not available');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (options.grepai !== false) {
|
|
189
|
+
const grepaiSpinner = ora('Checking grepai...').start();
|
|
190
|
+
const grepaiAvailable = await grepaiService.checkGrepaiAvailable();
|
|
191
|
+
if (grepaiAvailable) {
|
|
192
|
+
deps.grepai = true;
|
|
193
|
+
grepaiSpinner.succeed('grepai: available');
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
grepaiSpinner.warn('grepai not available');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return deps;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Backup existing .claude directory
|
|
203
|
+
*/
|
|
204
|
+
async function backupExistingClaude(claudePath) {
|
|
205
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
206
|
+
const backupPath = `${claudePath}.backup.${timestamp}`;
|
|
207
|
+
const spinner = ora('Creating backup...').start();
|
|
208
|
+
try {
|
|
209
|
+
await cp(claudePath, backupPath, { recursive: true });
|
|
210
|
+
spinner.succeed(`Backup: ${backupPath}`);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
spinner.fail('Backup failed');
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Group files by directory for display
|
|
219
|
+
*/
|
|
220
|
+
function groupFiles(files) {
|
|
221
|
+
const grouped = {};
|
|
222
|
+
for (const file of files) {
|
|
223
|
+
const parts = file.split('/');
|
|
224
|
+
if (parts.length === 1) {
|
|
225
|
+
grouped[''] = grouped[''] ?? [];
|
|
226
|
+
grouped[''].push(file);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const dir = parts[0];
|
|
230
|
+
const name = parts.slice(1).join('/');
|
|
231
|
+
grouped[dir] = grouped[dir] ?? [];
|
|
232
|
+
grouped[dir].push(name);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return grouped;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as ollama from '../services/ollama.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate CLAUDE.md using Ollama LLM
|
|
4
|
+
*/
|
|
5
|
+
export async function generateClaudeMd(projectInfo, analysis, options = {}) {
|
|
6
|
+
const { model = 'llama3.2', verbose = false } = options;
|
|
7
|
+
// Build context for the LLM
|
|
8
|
+
const stackList = projectInfo.stacks
|
|
9
|
+
.map(s => `- ${s.name}${s.version ? ` ${s.version}` : ''} (${s.path})`)
|
|
10
|
+
.join('\n');
|
|
11
|
+
const patternsDetected = (analysis.patterns ?? []).join(', ') || 'none detected';
|
|
12
|
+
const namingInfo = projectInfo.patterns
|
|
13
|
+
? `Classes: ${projectInfo.patterns.classes ?? 'PascalCase'}
|
|
14
|
+
Files: ${typeof projectInfo.patterns.files === 'object' ? JSON.stringify(projectInfo.patterns.files) : projectInfo.patterns.files}
|
|
15
|
+
Folders: ${projectInfo.patterns.folders ?? 'plural'}`
|
|
16
|
+
: 'Using defaults';
|
|
17
|
+
const architectureInfo = analysis.architecture
|
|
18
|
+
? `Type: ${analysis.architecture.type}\nDescription: ${analysis.architecture.description ?? 'N/A'}`
|
|
19
|
+
: 'Unknown';
|
|
20
|
+
const rulesDetected = (analysis.rules ?? []).length > 0
|
|
21
|
+
? analysis.rules.map(r => `- ${r}`).join('\n')
|
|
22
|
+
: 'No specific rules detected';
|
|
23
|
+
const prompt = `You are generating a CLAUDE.md file for a software project. This file will be used by Claude Code (an AI coding assistant) to understand the project. Generate ALL content in English.
|
|
24
|
+
|
|
25
|
+
## Project Information
|
|
26
|
+
|
|
27
|
+
**Name:** ${projectInfo.name}
|
|
28
|
+
**Type:** ${projectInfo.type}
|
|
29
|
+
**Package Manager:** ${projectInfo.packageManager ?? 'npm'}
|
|
30
|
+
|
|
31
|
+
**Stacks:**
|
|
32
|
+
${stackList}
|
|
33
|
+
|
|
34
|
+
**Architecture:**
|
|
35
|
+
${architectureInfo}
|
|
36
|
+
|
|
37
|
+
**Patterns Detected:**
|
|
38
|
+
${patternsDetected}
|
|
39
|
+
|
|
40
|
+
**Naming Conventions:**
|
|
41
|
+
${namingInfo}
|
|
42
|
+
|
|
43
|
+
**Rules:**
|
|
44
|
+
${rulesDetected}
|
|
45
|
+
|
|
46
|
+
## Requirements
|
|
47
|
+
|
|
48
|
+
Generate a comprehensive CLAUDE.md IN ENGLISH that includes ALL of the following sections:
|
|
49
|
+
|
|
50
|
+
1. **Header** - Project name and brief description
|
|
51
|
+
2. **Quick Reference** - Table with naming conventions for entities, tables, endpoints, components, hooks
|
|
52
|
+
3. **Project State** - Table with projects, technologies, ports, and status
|
|
53
|
+
4. **Delegation via Task Tool** - Explain that Claude should delegate to specialized agents
|
|
54
|
+
5. **Available Commands** - List commands like /mtd-pipeline-feature, /mtd-pipeline-bugfix, /mtd-git-commit, /mtd-validate-build, /mtd-validate-status
|
|
55
|
+
6. **Pipeline** - Explain the development pipeline (Explore → Spec → Implement → Review → Complete)
|
|
56
|
+
7. **Entity Registry** - Explain to always check .claude/entity-registry.json before searching for files
|
|
57
|
+
8. **grepai** - Explain that grepai should be used for semantic code search
|
|
58
|
+
9. **Rules** - Project-specific rules and patterns to follow
|
|
59
|
+
10. **Links** - Links to prompts, commands, and core documentation
|
|
60
|
+
|
|
61
|
+
## Format
|
|
62
|
+
|
|
63
|
+
Use markdown with:
|
|
64
|
+
- Tables where appropriate
|
|
65
|
+
- Code blocks for examples
|
|
66
|
+
- Clear section headers with ##
|
|
67
|
+
- Bullet points for lists
|
|
68
|
+
|
|
69
|
+
## Important
|
|
70
|
+
|
|
71
|
+
- ALL content must be in English
|
|
72
|
+
- Be specific to this project's stack (${projectInfo.stacks.map(s => s.name).join(', ')})
|
|
73
|
+
- Include actual commands appropriate for the detected stack
|
|
74
|
+
- Reference the correct file patterns for this project
|
|
75
|
+
- Keep it concise but comprehensive
|
|
76
|
+
|
|
77
|
+
Return ONLY the markdown content. Do not wrap it in code blocks.`;
|
|
78
|
+
try {
|
|
79
|
+
const response = await ollama.generate(prompt, { model });
|
|
80
|
+
// Clean up response if it's wrapped in code blocks
|
|
81
|
+
let content = response;
|
|
82
|
+
if (content.startsWith('```markdown')) {
|
|
83
|
+
content = content.slice(11);
|
|
84
|
+
}
|
|
85
|
+
if (content.startsWith('```')) {
|
|
86
|
+
content = content.slice(3);
|
|
87
|
+
}
|
|
88
|
+
if (content.endsWith('```')) {
|
|
89
|
+
content = content.slice(0, -3);
|
|
90
|
+
}
|
|
91
|
+
return content.trim();
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (verbose) {
|
|
95
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
96
|
+
console.error('Ollama CLAUDE.md generation failed:', message);
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=claude-md-llm.js.map
|