@horiastanxd/claude-init 0.6.0 → 0.8.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 +10 -2
- package/dist/cli.js +39 -25
- package/dist/cli.js.map +1 -1
- package/dist/enrich.d.ts +18 -0
- package/dist/enrich.js +61 -0
- package/dist/enrich.js.map +1 -0
- package/dist/generate-recursive.d.ts +18 -0
- package/dist/generate-recursive.js +44 -0
- package/dist/generate-recursive.js.map +1 -0
- package/dist/mcp-server.js +31 -2
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -85,6 +85,7 @@ npx @horiastanxd/claude-init -t claude,cursor # only specific tools
|
|
|
85
85
|
npx @horiastanxd/claude-init --overwrite # refresh files that already exist
|
|
86
86
|
npx @horiastanxd/claude-init --dry-run # print the analysis as JSON, write nothing
|
|
87
87
|
npx @horiastanxd/claude-init --recurse # also generate into each workspace package (monorepo)
|
|
88
|
+
npx @horiastanxd/claude-init --enrich # opt-in: sharpen the description with an LLM (needs ANTHROPIC_API_KEY)
|
|
88
89
|
npx @horiastanxd/claude-init list # show all targets and their paths
|
|
89
90
|
```
|
|
90
91
|
|
|
@@ -103,11 +104,19 @@ Options:
|
|
|
103
104
|
--overwrite overwrite existing files
|
|
104
105
|
--dry-run print the analysis as JSON, write nothing
|
|
105
106
|
--recurse also generate into each workspace package (monorepo)
|
|
107
|
+
--enrich use an LLM to enrich the project description (opt-in)
|
|
108
|
+
--enrich-model <model> model for --enrich (default: claude-opus-4-8)
|
|
106
109
|
```
|
|
107
110
|
|
|
111
|
+
`--enrich` is the one feature that leaves your machine, and it is off by default -
|
|
112
|
+
everything else is 100% local. It needs `ANTHROPIC_API_KEY` and the Anthropic SDK
|
|
113
|
+
(`npm install @anthropic-ai/sdk`); if either is missing, generation continues without
|
|
114
|
+
enrichment, so nothing breaks.
|
|
115
|
+
|
|
108
116
|
For a monorepo, `--recurse` reads the workspaces from `package.json`
|
|
109
117
|
(`workspaces`) or `pnpm-workspace.yaml`, then generates context files in the root
|
|
110
|
-
and in each package, analyzing every package on its own.
|
|
118
|
+
and in each package, analyzing every package on its own. It works for both
|
|
119
|
+
`generate --recurse` and `check --recurse` (and the MCP tools take a `recurse` flag).
|
|
111
120
|
|
|
112
121
|
## Keep context files fresh
|
|
113
122
|
|
|
@@ -219,7 +228,6 @@ Contributions welcome - adding a new tool is usually a single entry in
|
|
|
219
228
|
|
|
220
229
|
## Roadmap
|
|
221
230
|
|
|
222
|
-
- Optional LLM pass to enrich descriptions (opt-in, off by default)
|
|
223
231
|
- More tools as their formats stabilize
|
|
224
232
|
|
|
225
233
|
Ideas and PRs welcome.
|
package/dist/cli.js
CHANGED
|
@@ -4,8 +4,9 @@ import { resolve } from 'node:path';
|
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import ora from 'ora';
|
|
6
6
|
import { analyzeProject } from './analyzer/index.js';
|
|
7
|
-
import { detectWorkspacePackages } from './analyzer/workspaces.js';
|
|
8
7
|
import { generateAll, checkAll } from './generators/index.js';
|
|
8
|
+
import { generateWorkspacePackages, checkWorkspacePackages } from './generate-recursive.js';
|
|
9
|
+
import { enrichAnalysis, createAnthropicCompleter } from './enrich.js';
|
|
9
10
|
import { TARGETS, TARGET_IDS, invalidTargets } from './generators/registry.js';
|
|
10
11
|
import { getVersion } from './version.js';
|
|
11
12
|
function parseTargets(raw) {
|
|
@@ -34,6 +35,22 @@ async function runGenerate(dir, opts) {
|
|
|
34
35
|
}
|
|
35
36
|
spinner.succeed(`Analyzed ${chalk.bold(analysis.name)} ` +
|
|
36
37
|
chalk.dim(`(${analysis.techStack.language}${analysis.techStack.framework ? `, ${analysis.techStack.framework}` : ''})`));
|
|
38
|
+
if (opts.enrich) {
|
|
39
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
40
|
+
if (!apiKey) {
|
|
41
|
+
console.log(chalk.yellow(' --enrich set but ANTHROPIC_API_KEY is not set; skipping enrichment.'));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
try {
|
|
45
|
+
const complete = await createAnthropicCompleter({ model: opts.enrichModel, apiKey });
|
|
46
|
+
analysis = await enrichAnalysis(analysis, complete);
|
|
47
|
+
console.log(chalk.dim(` enriched description via ${opts.enrichModel}`));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.log(chalk.yellow(` Enrichment skipped: ${err.message}`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
37
54
|
if (opts.dryRun) {
|
|
38
55
|
console.log(JSON.stringify(analysis, null, 2));
|
|
39
56
|
return;
|
|
@@ -51,28 +68,13 @@ async function runGenerate(dir, opts) {
|
|
|
51
68
|
}
|
|
52
69
|
let total = written.length;
|
|
53
70
|
if (opts.recurse) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
let pkgAnalysis;
|
|
58
|
-
try {
|
|
59
|
-
pkgAnalysis = await analyzeProject(pkgDir);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
const res = await generateAll(pkgAnalysis, {
|
|
65
|
-
outputDir: pkgDir,
|
|
66
|
-
targets,
|
|
67
|
-
overwrite: opts.overwrite,
|
|
68
|
-
minimal: false,
|
|
69
|
-
});
|
|
70
|
-
console.log(chalk.bold(`\n${rel}/`));
|
|
71
|
-
for (const f of res.written)
|
|
71
|
+
for (const pkg of await generateWorkspacePackages(projectDir, { targets, overwrite: opts.overwrite })) {
|
|
72
|
+
console.log(chalk.bold(`\n${pkg.rel}/`));
|
|
73
|
+
for (const f of pkg.written)
|
|
72
74
|
console.log(chalk.green(' +'), f);
|
|
73
|
-
for (const f of
|
|
75
|
+
for (const f of pkg.skipped)
|
|
74
76
|
console.log(chalk.yellow(' -'), `${f} ${chalk.dim('(exists)')}`);
|
|
75
|
-
total +=
|
|
77
|
+
total += pkg.written.length;
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
if (!total && skipped.length) {
|
|
@@ -85,17 +87,26 @@ async function runGenerate(dir, opts) {
|
|
|
85
87
|
async function runCheck(dir, opts) {
|
|
86
88
|
const projectDir = resolve(dir ?? '.');
|
|
87
89
|
const targets = parseTargets(opts.targets);
|
|
88
|
-
const
|
|
89
|
-
const { entries, drifted } = await checkAll(analysis, resolve(opts.output), targets);
|
|
90
|
-
for (const e of entries) {
|
|
90
|
+
const printEntry = (e) => {
|
|
91
91
|
const mark = e.status === 'ok'
|
|
92
92
|
? chalk.green(' ok ')
|
|
93
93
|
: e.status === 'stale'
|
|
94
94
|
? chalk.yellow(' stale ')
|
|
95
95
|
: chalk.red(' missing');
|
|
96
96
|
console.log(mark, e.path);
|
|
97
|
+
};
|
|
98
|
+
const analysis = await analyzeProject(projectDir);
|
|
99
|
+
const { entries, drifted } = await checkAll(analysis, resolve(opts.output), targets);
|
|
100
|
+
entries.forEach(printEntry);
|
|
101
|
+
let anyDrift = drifted;
|
|
102
|
+
if (opts.recurse) {
|
|
103
|
+
for (const pkg of await checkWorkspacePackages(projectDir, targets)) {
|
|
104
|
+
console.log(chalk.bold(`\n${pkg.rel}/`));
|
|
105
|
+
pkg.entries.forEach(printEntry);
|
|
106
|
+
anyDrift = anyDrift || pkg.drifted;
|
|
107
|
+
}
|
|
97
108
|
}
|
|
98
|
-
if (
|
|
109
|
+
if (anyDrift) {
|
|
99
110
|
console.log(chalk.red('\nContext files are out of date. Run `claude-init --overwrite` to refresh.'));
|
|
100
111
|
process.exitCode = 1;
|
|
101
112
|
}
|
|
@@ -132,6 +143,8 @@ async function main() {
|
|
|
132
143
|
.option('--overwrite', 'overwrite existing files', false)
|
|
133
144
|
.option('--dry-run', 'print the analysis as JSON without writing files', false)
|
|
134
145
|
.option('--recurse', 'also generate into each workspace package (monorepo)', false)
|
|
146
|
+
.option('--enrich', 'use an LLM to enrich the project description (opt-in; needs ANTHROPIC_API_KEY)', false)
|
|
147
|
+
.option('--enrich-model <model>', 'model to use for --enrich', 'claude-opus-4-8')
|
|
135
148
|
.action(runGenerate);
|
|
136
149
|
program
|
|
137
150
|
.command('check')
|
|
@@ -139,6 +152,7 @@ async function main() {
|
|
|
139
152
|
.argument('[dir]', 'project directory', '.')
|
|
140
153
|
.option('-t, --targets <list>', `comma-separated (${TARGET_IDS.join(',')},all)`, 'all')
|
|
141
154
|
.option('-o, --output <dir>', 'output directory', '.')
|
|
155
|
+
.option('--recurse', 'also check each workspace package (monorepo)', false)
|
|
142
156
|
.action(runCheck);
|
|
143
157
|
program.command('list').description('List supported targets and their output paths').action(runList);
|
|
144
158
|
program
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/enrich.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProjectAnalysis } from './types.js';
|
|
2
|
+
/** Produces a completion from a system + user prompt. Injected so the network call is testable. */
|
|
3
|
+
export type CompleteFn = (system: string, user: string) => Promise<string>;
|
|
4
|
+
export interface EnrichOptions {
|
|
5
|
+
model: string;
|
|
6
|
+
apiKey: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Enrich the project description with an LLM. Pure given `complete` - the network
|
|
10
|
+
* dependency is injected, so this is fully testable without hitting the API.
|
|
11
|
+
*/
|
|
12
|
+
export declare function enrichAnalysis(analysis: ProjectAnalysis, complete: CompleteFn): Promise<ProjectAnalysis>;
|
|
13
|
+
/**
|
|
14
|
+
* Build a completer backed by the official Anthropic SDK. The SDK is loaded
|
|
15
|
+
* dynamically and is NOT a dependency of this package - enrichment is opt-in, so
|
|
16
|
+
* default installs stay network-free. Install it with `npm install @anthropic-ai/sdk`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAnthropicCompleter(opts: EnrichOptions): Promise<CompleteFn>;
|
package/dist/enrich.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const SYSTEM_PROMPT = 'You write a single concise sentence describing what a software project does, for a ' +
|
|
2
|
+
'README-style context file. Output only the sentence: no preamble, no markdown, no quotes, ' +
|
|
3
|
+
'present tense, third person.';
|
|
4
|
+
function buildEnrichPrompt(a) {
|
|
5
|
+
const { techStack: t } = a;
|
|
6
|
+
const stack = [t.language, t.framework, t.runtime, t.database, t.testing]
|
|
7
|
+
.filter(Boolean)
|
|
8
|
+
.join(', ');
|
|
9
|
+
const lines = [
|
|
10
|
+
`Project name: ${a.name}`,
|
|
11
|
+
`Stack: ${stack}`,
|
|
12
|
+
a.description ? `Existing description: ${a.description}` : '',
|
|
13
|
+
'File tree:',
|
|
14
|
+
a.structure.tree,
|
|
15
|
+
].filter(Boolean);
|
|
16
|
+
return lines.join('\n');
|
|
17
|
+
}
|
|
18
|
+
/** Collapse a model reply to a single trimmed sentence. */
|
|
19
|
+
function toOneSentence(text) {
|
|
20
|
+
const clean = text.trim().replace(/\s+/g, ' ');
|
|
21
|
+
const end = clean.search(/[.!?](\s|$)/);
|
|
22
|
+
return end === -1 ? clean : clean.slice(0, end + 1);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Enrich the project description with an LLM. Pure given `complete` - the network
|
|
26
|
+
* dependency is injected, so this is fully testable without hitting the API.
|
|
27
|
+
*/
|
|
28
|
+
export async function enrichAnalysis(analysis, complete) {
|
|
29
|
+
const reply = (await complete(SYSTEM_PROMPT, buildEnrichPrompt(analysis))).trim();
|
|
30
|
+
if (!reply)
|
|
31
|
+
return analysis;
|
|
32
|
+
return { ...analysis, description: toOneSentence(reply) };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build a completer backed by the official Anthropic SDK. The SDK is loaded
|
|
36
|
+
* dynamically and is NOT a dependency of this package - enrichment is opt-in, so
|
|
37
|
+
* default installs stay network-free. Install it with `npm install @anthropic-ai/sdk`.
|
|
38
|
+
*/
|
|
39
|
+
export async function createAnthropicCompleter(opts) {
|
|
40
|
+
const specifier = '@anthropic-ai/sdk';
|
|
41
|
+
let mod;
|
|
42
|
+
try {
|
|
43
|
+
mod = await import(specifier);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new Error('Enrichment needs the Anthropic SDK. Install it with: npm install @anthropic-ai/sdk');
|
|
47
|
+
}
|
|
48
|
+
const Anthropic = mod.default;
|
|
49
|
+
const client = new Anthropic({ apiKey: opts.apiKey });
|
|
50
|
+
return async (system, user) => {
|
|
51
|
+
const message = await client.messages.create({
|
|
52
|
+
model: opts.model,
|
|
53
|
+
max_tokens: 1024,
|
|
54
|
+
system,
|
|
55
|
+
messages: [{ role: 'user', content: user }],
|
|
56
|
+
});
|
|
57
|
+
const block = message.content.find((b) => b.type === 'text');
|
|
58
|
+
return block?.text ?? '';
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=enrich.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CheckEntry } from './types.js';
|
|
2
|
+
export interface PackageGenerate {
|
|
3
|
+
rel: string;
|
|
4
|
+
written: string[];
|
|
5
|
+
skipped: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface PackageCheck {
|
|
8
|
+
rel: string;
|
|
9
|
+
entries: CheckEntry[];
|
|
10
|
+
drifted: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Generate context files in each workspace package, analyzing every package on its own. */
|
|
13
|
+
export declare function generateWorkspacePackages(projectDir: string, opts: {
|
|
14
|
+
targets: string[];
|
|
15
|
+
overwrite: boolean;
|
|
16
|
+
}): Promise<PackageGenerate[]>;
|
|
17
|
+
/** Check context files in each workspace package against its own analysis. */
|
|
18
|
+
export declare function checkWorkspacePackages(projectDir: string, targets: string[]): Promise<PackageCheck[]>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { analyzeProject } from './analyzer/index.js';
|
|
3
|
+
import { detectWorkspacePackages } from './analyzer/workspaces.js';
|
|
4
|
+
import { generateAll, checkAll } from './generators/index.js';
|
|
5
|
+
/** Generate context files in each workspace package, analyzing every package on its own. */
|
|
6
|
+
export async function generateWorkspacePackages(projectDir, opts) {
|
|
7
|
+
const out = [];
|
|
8
|
+
for (const rel of await detectWorkspacePackages(projectDir)) {
|
|
9
|
+
const pkgDir = resolve(projectDir, rel);
|
|
10
|
+
let analysis;
|
|
11
|
+
try {
|
|
12
|
+
analysis = await analyzeProject(pkgDir);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const { written, skipped } = await generateAll(analysis, {
|
|
18
|
+
outputDir: pkgDir,
|
|
19
|
+
targets: opts.targets,
|
|
20
|
+
overwrite: opts.overwrite,
|
|
21
|
+
minimal: false,
|
|
22
|
+
});
|
|
23
|
+
out.push({ rel, written, skipped });
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
/** Check context files in each workspace package against its own analysis. */
|
|
28
|
+
export async function checkWorkspacePackages(projectDir, targets) {
|
|
29
|
+
const out = [];
|
|
30
|
+
for (const rel of await detectWorkspacePackages(projectDir)) {
|
|
31
|
+
const pkgDir = resolve(projectDir, rel);
|
|
32
|
+
let analysis;
|
|
33
|
+
try {
|
|
34
|
+
analysis = await analyzeProject(pkgDir);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const { entries, drifted } = await checkAll(analysis, pkgDir, targets);
|
|
40
|
+
out.push({ rel, entries, drifted });
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=generate-recursive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-recursive.js","sourceRoot":"","sources":["../src/generate-recursive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAe9D,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAkB,EAClB,IAA+C;IAE/C,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE;YACvD,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,EAClB,OAAiB;IAEjB,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -3,6 +3,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { analyzeProject } from './analyzer/index.js';
|
|
5
5
|
import { generateAll, checkAll } from './generators/index.js';
|
|
6
|
+
import { generateWorkspacePackages, checkWorkspacePackages } from './generate-recursive.js';
|
|
6
7
|
import { TARGET_IDS } from './generators/registry.js';
|
|
7
8
|
import { getVersion } from './version.js';
|
|
8
9
|
export async function startMcpServer() {
|
|
@@ -34,6 +35,10 @@ export async function startMcpServer() {
|
|
|
34
35
|
},
|
|
35
36
|
outputDir: { type: 'string', description: 'Output directory (default: the project path)' },
|
|
36
37
|
overwrite: { type: 'boolean', description: 'Overwrite existing files (default: false)' },
|
|
38
|
+
recurse: {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
description: 'Also generate into each workspace package for a monorepo (default: false)',
|
|
41
|
+
},
|
|
37
42
|
},
|
|
38
43
|
required: ['path'],
|
|
39
44
|
},
|
|
@@ -50,6 +55,10 @@ export async function startMcpServer() {
|
|
|
50
55
|
items: { type: 'string', enum: [...TARGET_IDS, 'all'] },
|
|
51
56
|
},
|
|
52
57
|
outputDir: { type: 'string', description: 'Directory holding the files (default: the project path)' },
|
|
58
|
+
recurse: {
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
description: 'Also check each workspace package for a monorepo (default: false)',
|
|
61
|
+
},
|
|
53
62
|
},
|
|
54
63
|
required: ['path'],
|
|
55
64
|
},
|
|
@@ -78,15 +87,35 @@ export async function startMcpServer() {
|
|
|
78
87
|
: 'No files generated.',
|
|
79
88
|
skipped.length ? `\nSkipped (already exist):\n${skipped.map((f) => ` - ${f}`).join('\n')}` : '',
|
|
80
89
|
].filter(Boolean);
|
|
90
|
+
if (args.recurse === true) {
|
|
91
|
+
const packages = await generateWorkspacePackages(path, {
|
|
92
|
+
targets: args.targets ?? ['all'],
|
|
93
|
+
overwrite: args.overwrite === true,
|
|
94
|
+
});
|
|
95
|
+
for (const pkg of packages) {
|
|
96
|
+
lines.push(`\n${pkg.rel}/\n${pkg.written.map((f) => ` + ${f}`).join('\n')}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
81
99
|
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
82
100
|
}
|
|
83
101
|
if (name === 'check_context_files') {
|
|
84
102
|
const analysis = await analyzeProject(path);
|
|
85
103
|
const { entries, drifted } = await checkAll(analysis, args.outputDir ?? path, args.targets ?? ['all']);
|
|
86
|
-
const
|
|
104
|
+
const sections = [entries.map((e) => ` ${e.status.padEnd(7)} ${e.path}`).join('\n')];
|
|
105
|
+
let anyDrift = drifted;
|
|
106
|
+
if (args.recurse === true) {
|
|
107
|
+
const packages = await checkWorkspacePackages(path, args.targets ?? ['all']);
|
|
108
|
+
for (const pkg of packages) {
|
|
109
|
+
sections.push(`${pkg.rel}/\n${pkg.entries.map((e) => ` ${e.status.padEnd(7)} ${e.path}`).join('\n')}`);
|
|
110
|
+
anyDrift = anyDrift || pkg.drifted;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
87
113
|
return {
|
|
88
114
|
content: [
|
|
89
|
-
{
|
|
115
|
+
{
|
|
116
|
+
type: 'text',
|
|
117
|
+
text: `${sections.join('\n\n')}\n\n${anyDrift ? 'Drift detected.' : 'All up to date.'}`,
|
|
118
|
+
},
|
|
90
119
|
],
|
|
91
120
|
};
|
|
92
121
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAC9C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,mGAAmG;gBACrG,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;qBAChF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EACT,+HAA+H;gBACjI,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;wBAC/E,OAAO,EAAE;4BACP,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,EAAE;4BACvD,WAAW,EAAE,0CAA0C;yBACxD;wBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;wBAC1F,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2CAA2C,EAAE;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@horiastanxd/claude-init",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "One command generates AI context files - CLAUDE.md, AGENTS.md, Cursor/Windsurf/Cline/Continue/Kilo Code/Trae rules, GEMINI.md, Copilot, Aider, Junie, Warp - for any repository. CLI + MCP server, 100% local.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|