@planu/cli 1.5.0 → 1.6.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/dist/engine/hooks-reconciler.d.ts +7 -1
- package/dist/engine/hooks-reconciler.d.ts.map +1 -1
- package/dist/engine/hooks-reconciler.js +127 -2
- package/dist/engine/hooks-reconciler.js.map +1 -1
- package/dist/engine/skills-reconciler.d.ts +10 -1
- package/dist/engine/skills-reconciler.d.ts.map +1 -1
- package/dist/engine/skills-reconciler.js +128 -2
- package/dist/engine/skills-reconciler.js.map +1 -1
- package/dist/tools/reconcile-hooks.d.ts +5 -0
- package/dist/tools/reconcile-hooks.d.ts.map +1 -1
- package/dist/tools/reconcile-hooks.js +61 -4
- package/dist/tools/reconcile-hooks.js.map +1 -1
- package/dist/tools/reconcile-skills.d.ts +1 -0
- package/dist/tools/reconcile-skills.d.ts.map +1 -1
- package/dist/tools/reconcile-skills.js +57 -9
- package/dist/tools/reconcile-skills.js.map +1 -1
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts +1 -0
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts.map +1 -1
- package/dist/tools/schemas/reconcile-skills-schemas.js +5 -0
- package/dist/tools/schemas/reconcile-skills-schemas.js.map +1 -1
- package/dist/types/conventions.d.ts +29 -0
- package/dist/types/conventions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import type { HooksReconciliation } from '../types/index.js';
|
|
1
|
+
import type { HooksReconciliation, HooksPatchResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Auto-patch husky hook files with missing quality checks.
|
|
4
|
+
* Idempotent: checks already present in the file are reported as skipped.
|
|
5
|
+
* Only works for husky manager — returns empty patch for other managers.
|
|
6
|
+
*/
|
|
7
|
+
export declare function patchHooks(missingChecks: string[], projectPath: string): HooksPatchResult;
|
|
2
8
|
/**
|
|
3
9
|
* Analyse git hooks against detected project capabilities and report drift.
|
|
4
10
|
* Never throws — returns a zero-score result on unexpected errors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-reconciler.d.ts","sourceRoot":"","sources":["../../src/engine/hooks-reconciler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,
|
|
1
|
+
{"version":3,"file":"hooks-reconciler.d.ts","sourceRoot":"","sources":["../../src/engine/hooks-reconciler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EAInB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAiT3B;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAsCzF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CA+CvE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// engine/hooks-reconciler.ts — Detect drift between CI/quality pipeline and git hooks.
|
|
2
|
-
// Read-only analysis
|
|
3
|
-
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
// Read-only analysis by default; patchHooks() writes fixes when autoFix is enabled.
|
|
3
|
+
import { readFileSync, existsSync, readdirSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
// ---------------------------------------------------------------------------
|
|
6
6
|
// Helpers
|
|
@@ -152,8 +152,133 @@ function detectOutdatedChecks(scripts, caps) {
|
|
|
152
152
|
return outdated;
|
|
153
153
|
}
|
|
154
154
|
// ---------------------------------------------------------------------------
|
|
155
|
+
// Lint-staged detection helpers
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
function lintStagedCoversPrettier(pkg) {
|
|
158
|
+
const ls = pkg['lint-staged'];
|
|
159
|
+
if (!ls || typeof ls !== 'object') {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const entries = Object.values(ls);
|
|
163
|
+
return entries.some((v) => {
|
|
164
|
+
if (typeof v === 'string') {
|
|
165
|
+
return v.includes('prettier');
|
|
166
|
+
}
|
|
167
|
+
if (Array.isArray(v)) {
|
|
168
|
+
return v.some((cmd) => typeof cmd === 'string' && cmd.includes('prettier'));
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function lintStagedCoversEslint(pkg) {
|
|
174
|
+
const ls = pkg['lint-staged'];
|
|
175
|
+
if (!ls || typeof ls !== 'object') {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const entries = Object.values(ls);
|
|
179
|
+
return entries.some((v) => {
|
|
180
|
+
if (typeof v === 'string') {
|
|
181
|
+
return /eslint|lint/.test(v);
|
|
182
|
+
}
|
|
183
|
+
if (Array.isArray(v)) {
|
|
184
|
+
return v.some((cmd) => typeof cmd === 'string' && /eslint|lint/.test(cmd));
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Patch helpers
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
const HUSKY_SHEBANG = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n';
|
|
193
|
+
function readHookFile(hookPath) {
|
|
194
|
+
try {
|
|
195
|
+
return readFileSync(hookPath, 'utf-8');
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return '';
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function writeHookFile(hookPath, content) {
|
|
202
|
+
writeFileSync(hookPath, content, { encoding: 'utf-8', mode: 0o755 });
|
|
203
|
+
}
|
|
204
|
+
function buildPatchCandidates(missingChecks, pkg) {
|
|
205
|
+
const candidates = [];
|
|
206
|
+
const prettierCoveredByLintStaged = lintStagedCoversPrettier(pkg);
|
|
207
|
+
const eslintCoveredByLintStaged = lintStagedCoversEslint(pkg);
|
|
208
|
+
for (const check of missingChecks) {
|
|
209
|
+
if (check.includes('TypeScript') && check.includes('pre-commit')) {
|
|
210
|
+
candidates.push({ hook: 'pre-commit', line: 'pnpm typecheck', description: check });
|
|
211
|
+
}
|
|
212
|
+
else if (check.includes('ESLint') && check.includes('pre-commit')) {
|
|
213
|
+
if (!eslintCoveredByLintStaged) {
|
|
214
|
+
candidates.push({ hook: 'pre-commit', line: 'pnpm lint', description: check });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else if (check.includes('test') && check.includes('pre-push')) {
|
|
218
|
+
candidates.push({ hook: 'pre-push', line: 'pnpm test', description: check });
|
|
219
|
+
}
|
|
220
|
+
else if (check.includes('commit-msg') && check.includes('no commit-msg hook')) {
|
|
221
|
+
candidates.push({
|
|
222
|
+
hook: 'commit-msg',
|
|
223
|
+
line: 'npx --no -- commitlint --edit "$1"',
|
|
224
|
+
description: check,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
else if (check.includes('commit-msg') && check.includes('does not invoke commitlint')) {
|
|
228
|
+
candidates.push({
|
|
229
|
+
hook: 'commit-msg',
|
|
230
|
+
line: 'npx --no -- commitlint --edit "$1"',
|
|
231
|
+
description: check,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else if (check.includes('prettier') && !prettierCoveredByLintStaged) {
|
|
235
|
+
candidates.push({
|
|
236
|
+
hook: 'pre-commit',
|
|
237
|
+
line: 'npx prettier --check .',
|
|
238
|
+
description: check,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return candidates;
|
|
243
|
+
}
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
155
245
|
// Public API
|
|
156
246
|
// ---------------------------------------------------------------------------
|
|
247
|
+
/**
|
|
248
|
+
* Auto-patch husky hook files with missing quality checks.
|
|
249
|
+
* Idempotent: checks already present in the file are reported as skipped.
|
|
250
|
+
* Only works for husky manager — returns empty patch for other managers.
|
|
251
|
+
*/
|
|
252
|
+
export function patchHooks(missingChecks, projectPath) {
|
|
253
|
+
const pkg = readPackageJson(projectPath);
|
|
254
|
+
const manager = detectHookManager(projectPath, pkg);
|
|
255
|
+
if (manager !== 'husky') {
|
|
256
|
+
return { patched: [], skipped: missingChecks.slice(), healthScore: 0 };
|
|
257
|
+
}
|
|
258
|
+
const huskyDir = join(projectPath, '.husky');
|
|
259
|
+
const candidates = buildPatchCandidates(missingChecks, pkg);
|
|
260
|
+
const patched = [];
|
|
261
|
+
const skipped = [];
|
|
262
|
+
for (const candidate of candidates) {
|
|
263
|
+
const hookPath = join(huskyDir, candidate.hook);
|
|
264
|
+
let current = readHookFile(hookPath);
|
|
265
|
+
if (current.includes(candidate.line)) {
|
|
266
|
+
skipped.push(candidate.description);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (current === '') {
|
|
270
|
+
current = HUSKY_SHEBANG;
|
|
271
|
+
}
|
|
272
|
+
const updated = current.endsWith('\n')
|
|
273
|
+
? `${current}${candidate.line}\n`
|
|
274
|
+
: `${current}\n${candidate.line}\n`;
|
|
275
|
+
writeHookFile(hookPath, updated);
|
|
276
|
+
patched.push({ hook: candidate.hook, added: candidate.line });
|
|
277
|
+
}
|
|
278
|
+
// Re-run analysis to get updated health score
|
|
279
|
+
const afterReconcile = reconcileHooks(projectPath);
|
|
280
|
+
return { patched, skipped, healthScore: afterReconcile.healthScore };
|
|
281
|
+
}
|
|
157
282
|
/**
|
|
158
283
|
* Analyse git hooks against detected project capabilities and report drift.
|
|
159
284
|
* Never throws — returns a zero-score result on unexpected errors.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-reconciler.js","sourceRoot":"","sources":["../../src/engine/hooks-reconciler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks-reconciler.js","sourceRoot":"","sources":["../../src/engine/hooks-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SkillsReconciliation, ProjectKnowledge } from '../types/index.js';
|
|
1
|
+
import type { SkillsReconciliation, SkillsAutoFixResult, ProjectKnowledge } from '../types/index.js';
|
|
2
2
|
export type { SkillsReconciliation };
|
|
3
3
|
/**
|
|
4
4
|
* Scan the project's installed skills against the recommended set for its current stack.
|
|
@@ -12,4 +12,13 @@ export type { SkillsReconciliation };
|
|
|
12
12
|
* 6. Compute health score and return the reconciliation report.
|
|
13
13
|
*/
|
|
14
14
|
export declare function reconcileSkills(projectPath: string, knowledge: ProjectKnowledge | null): Promise<SkillsReconciliation>;
|
|
15
|
+
/**
|
|
16
|
+
* Auto-fix the skills installation to match the reconciliation report:
|
|
17
|
+
* 1. Install each skill listed in `newSkillsDetected` (using the builtin source as fallback).
|
|
18
|
+
* 2. Remove each skill listed in `staleSkills` from disk and the manifest.
|
|
19
|
+
* 3. Detect and fix corrupt manifest entries (path does not exist on disk).
|
|
20
|
+
*
|
|
21
|
+
* Returns a summary of all actions taken plus the new health score.
|
|
22
|
+
*/
|
|
23
|
+
export declare function autoFixSkills(reconciliation: SkillsReconciliation, projectPath: string): Promise<SkillsAutoFixResult>;
|
|
15
24
|
//# sourceMappingURL=skills-reconciler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-reconciler.d.ts","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"skills-reconciler.d.ts","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC,oBAAoB,CAAC,CA8B/B;AAsED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,cAAc,EAAE,oBAAoB,EACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAiB9B"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// engine/skills-reconciler.ts — SPEC-189: Detect stack changes and reconcile skills
|
|
2
|
+
// SPEC-395: autoFixSkills — install missing, remove stale, repair corrupt paths.
|
|
2
3
|
// Compares recommended skills (based on current stack) with installed skills.
|
|
3
|
-
// Read-only analysis — does NOT install or remove anything.
|
|
4
4
|
import * as fs from 'node:fs/promises';
|
|
5
5
|
import * as path from 'node:path';
|
|
6
|
-
import { readSkillManifest } from './skill-registry/installer.js';
|
|
6
|
+
import { readSkillManifest, installSkill } from './skill-registry/installer.js';
|
|
7
7
|
import { fetchRecommendedSkills } from './skills/skills-fetcher.js';
|
|
8
8
|
/**
|
|
9
9
|
* Scan the project's installed skills against the recommended set for its current stack.
|
|
@@ -95,4 +95,130 @@ function buildEmptyReconciliation(_reason) {
|
|
|
95
95
|
healthScore: 0,
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// SPEC-395: autoFixSkills — mutating reconciliation
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
/**
|
|
102
|
+
* Auto-fix the skills installation to match the reconciliation report:
|
|
103
|
+
* 1. Install each skill listed in `newSkillsDetected` (using the builtin source as fallback).
|
|
104
|
+
* 2. Remove each skill listed in `staleSkills` from disk and the manifest.
|
|
105
|
+
* 3. Detect and fix corrupt manifest entries (path does not exist on disk).
|
|
106
|
+
*
|
|
107
|
+
* Returns a summary of all actions taken plus the new health score.
|
|
108
|
+
*/
|
|
109
|
+
export async function autoFixSkills(reconciliation, projectPath) {
|
|
110
|
+
const installed = await installMissingSkills(reconciliation.newSkillsDetected, projectPath);
|
|
111
|
+
const removed = await removeStaleSkills(reconciliation.staleSkills, projectPath);
|
|
112
|
+
const pathsFixed = await fixCorruptPaths(projectPath);
|
|
113
|
+
// Re-read the manifest after all mutations to compute the new health score.
|
|
114
|
+
const updatedManifest = await readSkillManifest(projectPath);
|
|
115
|
+
const totalInstalled = updatedManifest.skills.length;
|
|
116
|
+
const staleCount = 0; // All stale skills have been removed.
|
|
117
|
+
const healthScore = computeHealthScore(totalInstalled + reconciliation.newSkillsDetected.length - installed.length, totalInstalled, staleCount);
|
|
118
|
+
return { installed, removed, pathsFixed, healthScore };
|
|
119
|
+
}
|
|
120
|
+
/** Install each missing skill using the 'builtin' source as a local placeholder. */
|
|
121
|
+
async function installMissingSkills(skillNames, projectPath) {
|
|
122
|
+
const successfullyInstalled = [];
|
|
123
|
+
for (const skillName of skillNames) {
|
|
124
|
+
try {
|
|
125
|
+
await installSkill(skillName, 'builtin', projectPath);
|
|
126
|
+
successfullyInstalled.push(skillName);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Non-blocking — skip skills that fail to install.
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return successfullyInstalled;
|
|
133
|
+
}
|
|
134
|
+
/** Remove stale skills from disk (directory) and from the manifest. */
|
|
135
|
+
async function removeStaleSkills(staleNames, projectPath) {
|
|
136
|
+
const skillsDir = path.join(projectPath, '.claude', 'skills');
|
|
137
|
+
const removed = [];
|
|
138
|
+
for (const skillName of staleNames) {
|
|
139
|
+
const skillDir = path.join(skillsDir, skillName);
|
|
140
|
+
const skillFile = path.join(skillsDir, `${skillName}.md`);
|
|
141
|
+
// Remove directory-based skill.
|
|
142
|
+
try {
|
|
143
|
+
await fs.rm(skillDir, { recursive: true, force: true });
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
/* v8 ignore next 1 */
|
|
147
|
+
}
|
|
148
|
+
// Remove flat .md-based skill.
|
|
149
|
+
try {
|
|
150
|
+
await fs.rm(skillFile, { force: true });
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
/* v8 ignore next 1 */
|
|
154
|
+
}
|
|
155
|
+
removed.push(skillName);
|
|
156
|
+
}
|
|
157
|
+
if (removed.length > 0) {
|
|
158
|
+
await removeFromManifest(projectPath, new Set(removed));
|
|
159
|
+
}
|
|
160
|
+
return removed;
|
|
161
|
+
}
|
|
162
|
+
/** Remove entries from the manifest by name. */
|
|
163
|
+
async function removeFromManifest(projectPath, namesToRemove) {
|
|
164
|
+
const manifest = await readSkillManifest(projectPath);
|
|
165
|
+
const updated = {
|
|
166
|
+
...manifest,
|
|
167
|
+
skills: manifest.skills.filter((s) => !namesToRemove.has(s.name)),
|
|
168
|
+
};
|
|
169
|
+
const manifestFile = path.join(projectPath, '.claude', 'skills', 'manifest.json');
|
|
170
|
+
await fs.mkdir(path.dirname(manifestFile), { recursive: true });
|
|
171
|
+
await fs.writeFile(manifestFile, JSON.stringify(updated, null, 2), 'utf-8');
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Detect manifest entries whose recorded `path` does not exist on disk and attempt to
|
|
175
|
+
* find the skill by name inside `.claude/skills/`. Updates the manifest in place.
|
|
176
|
+
*/
|
|
177
|
+
async function fixCorruptPaths(projectPath) {
|
|
178
|
+
const manifest = await readSkillManifest(projectPath);
|
|
179
|
+
const skillsDir = path.join(projectPath, '.claude', 'skills');
|
|
180
|
+
const fixed = [];
|
|
181
|
+
const updatedSkills = [];
|
|
182
|
+
for (const entry of manifest.skills) {
|
|
183
|
+
const pathExists = await checkPathExists(entry.path);
|
|
184
|
+
if (pathExists) {
|
|
185
|
+
updatedSkills.push(entry);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
// Try to locate the skill by its name inside the skills directory.
|
|
189
|
+
const candidateDir = path.join(skillsDir, entry.name);
|
|
190
|
+
const candidateFile = path.join(skillsDir, `${entry.name}.md`);
|
|
191
|
+
const dirExists = await checkPathExists(candidateDir);
|
|
192
|
+
const fileExists = await checkPathExists(candidateFile);
|
|
193
|
+
if (dirExists) {
|
|
194
|
+
updatedSkills.push({ ...entry, path: candidateDir });
|
|
195
|
+
fixed.push(entry.name);
|
|
196
|
+
}
|
|
197
|
+
else if (fileExists) {
|
|
198
|
+
updatedSkills.push({ ...entry, path: candidateFile });
|
|
199
|
+
fixed.push(entry.name);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Cannot locate the skill — keep the entry as-is (do not silently remove).
|
|
203
|
+
updatedSkills.push(entry);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (fixed.length > 0) {
|
|
207
|
+
const updatedManifest = { ...manifest, skills: updatedSkills };
|
|
208
|
+
const manifestFile = path.join(skillsDir, 'manifest.json');
|
|
209
|
+
await fs.mkdir(skillsDir, { recursive: true });
|
|
210
|
+
await fs.writeFile(manifestFile, JSON.stringify(updatedManifest, null, 2), 'utf-8');
|
|
211
|
+
}
|
|
212
|
+
return fixed;
|
|
213
|
+
}
|
|
214
|
+
/** Return true if the given path exists (file or directory). */
|
|
215
|
+
async function checkPathExists(targetPath) {
|
|
216
|
+
try {
|
|
217
|
+
await fs.access(targetPath);
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
98
224
|
//# sourceMappingURL=skills-reconciler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-reconciler.js","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,
|
|
1
|
+
{"version":3,"file":"skills-reconciler.js","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,11 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
2
2
|
import type { ToolResult } from '../types/index.js';
|
|
3
3
|
export declare function handleReconcileHooks(args: {
|
|
4
4
|
projectPath: string;
|
|
5
|
+
autoFix?: boolean;
|
|
6
|
+
}): ToolResult;
|
|
7
|
+
export declare function handleReconcileHooksAsync(args: {
|
|
8
|
+
projectPath: string;
|
|
9
|
+
autoFix?: boolean;
|
|
5
10
|
}): ToolResult;
|
|
6
11
|
export declare function registerReconcileHooksTool(server: McpServer): void;
|
|
7
12
|
//# sourceMappingURL=reconcile-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reconcile-hooks.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA8HpD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,UAAU,CAKjG;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,UAAU,CAab;AAMD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBlE"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// tools/reconcile-hooks.ts — MCP tool: reconcile_hooks
|
|
2
2
|
// Detects drift between CI/quality pipeline and git hooks.
|
|
3
|
+
// With autoFix:true, patches husky hook files with missing quality checks.
|
|
3
4
|
import { z } from 'zod';
|
|
4
|
-
import { reconcileHooks } from '../engine/hooks-reconciler.js';
|
|
5
|
+
import { reconcileHooks, patchHooks } from '../engine/hooks-reconciler.js';
|
|
5
6
|
import { safeTracked } from './safe-handler.js';
|
|
6
7
|
// ---------------------------------------------------------------------------
|
|
7
8
|
// Zod schema
|
|
@@ -11,6 +12,11 @@ const reconcileHooksSchema = {
|
|
|
11
12
|
.string()
|
|
12
13
|
.max(4096)
|
|
13
14
|
.describe('Absolute path to the project root to analyse git hooks against CI capabilities'),
|
|
15
|
+
autoFix: z
|
|
16
|
+
.boolean()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('When true, automatically patches husky hook files to add missing quality checks. ' +
|
|
19
|
+
'Idempotent: checks already present are skipped. Default: false.'),
|
|
14
20
|
};
|
|
15
21
|
// ---------------------------------------------------------------------------
|
|
16
22
|
// Formatter
|
|
@@ -52,6 +58,44 @@ function formatReconciliation(result) {
|
|
|
52
58
|
}
|
|
53
59
|
return lines.join('\n');
|
|
54
60
|
}
|
|
61
|
+
function formatPatchResult(reconcileResult, patchResult) {
|
|
62
|
+
const lines = [];
|
|
63
|
+
lines.push('# Hooks Reconciliation Report (Auto-Fix Applied)');
|
|
64
|
+
lines.push('');
|
|
65
|
+
lines.push(`## Health Score: ${patchResult.healthScore}/100`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
lines.push(`- Status: **${reconcileResult.hooksInSync ? 'IN SYNC' : 'DRIFT DETECTED (before fix)'}**`);
|
|
68
|
+
lines.push('');
|
|
69
|
+
if (patchResult.patched.length > 0) {
|
|
70
|
+
lines.push('## Patched Checks');
|
|
71
|
+
lines.push('');
|
|
72
|
+
for (const p of patchResult.patched) {
|
|
73
|
+
lines.push(` - ${p.hook}: \`${p.added}\``);
|
|
74
|
+
}
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
if (patchResult.skipped.length > 0) {
|
|
78
|
+
lines.push('## Skipped (already present or covered by lint-staged)');
|
|
79
|
+
lines.push('');
|
|
80
|
+
for (const s of patchResult.skipped) {
|
|
81
|
+
lines.push(` - ${s}`);
|
|
82
|
+
}
|
|
83
|
+
lines.push('');
|
|
84
|
+
}
|
|
85
|
+
if (patchResult.patched.length === 0 && patchResult.skipped.length === 0) {
|
|
86
|
+
lines.push('No patches needed — hooks are already up to date.');
|
|
87
|
+
lines.push('');
|
|
88
|
+
}
|
|
89
|
+
if (reconcileResult.outdatedHooks.length > 0) {
|
|
90
|
+
lines.push('## Enhancement Opportunities (not auto-fixed)');
|
|
91
|
+
lines.push('');
|
|
92
|
+
for (const item of reconcileResult.outdatedHooks) {
|
|
93
|
+
lines.push(` - ${item}`);
|
|
94
|
+
}
|
|
95
|
+
lines.push('');
|
|
96
|
+
}
|
|
97
|
+
return lines.join('\n');
|
|
98
|
+
}
|
|
55
99
|
// ---------------------------------------------------------------------------
|
|
56
100
|
// Handler
|
|
57
101
|
// ---------------------------------------------------------------------------
|
|
@@ -61,18 +105,31 @@ export function handleReconcileHooks(args) {
|
|
|
61
105
|
const isError = result.healthScore === 0 && !result.hooksInSync;
|
|
62
106
|
return { content: [{ type: 'text', text }], isError };
|
|
63
107
|
}
|
|
108
|
+
export function handleReconcileHooksAsync(args) {
|
|
109
|
+
const result = reconcileHooks(args.projectPath);
|
|
110
|
+
if (!args.autoFix) {
|
|
111
|
+
const text = formatReconciliation(result);
|
|
112
|
+
const isError = result.healthScore === 0 && !result.hooksInSync;
|
|
113
|
+
return { content: [{ type: 'text', text }], isError };
|
|
114
|
+
}
|
|
115
|
+
const patch = patchHooks(result.missingHooks, args.projectPath);
|
|
116
|
+
const text = formatPatchResult(result, patch);
|
|
117
|
+
const isError = patch.healthScore === 0 && patch.patched.length === 0;
|
|
118
|
+
return { content: [{ type: 'text', text }], isError };
|
|
119
|
+
}
|
|
64
120
|
// ---------------------------------------------------------------------------
|
|
65
121
|
// Registration
|
|
66
122
|
// ---------------------------------------------------------------------------
|
|
67
123
|
export function registerReconcileHooksTool(server) {
|
|
68
124
|
server.registerTool('reconcile_hooks', {
|
|
69
|
-
description: 'Detect drift between the project CI/quality pipeline and its git hooks. Checks whether hooks enforce TypeScript, ESLint, tests, commitlint, and Prettier based on what the project has installed. Returns a health score (0-100) and lists missing or outdated steps.'
|
|
125
|
+
description: 'Detect drift between the project CI/quality pipeline and its git hooks. Checks whether hooks enforce TypeScript, ESLint, tests, commitlint, and Prettier based on what the project has installed. Returns a health score (0-100) and lists missing or outdated steps. ' +
|
|
126
|
+
'With autoFix:true, automatically patches husky hook files to add missing quality checks (idempotent).',
|
|
70
127
|
inputSchema: reconcileHooksSchema,
|
|
71
128
|
annotations: {
|
|
72
|
-
readOnlyHint:
|
|
129
|
+
readOnlyHint: false,
|
|
73
130
|
destructiveHint: false,
|
|
74
131
|
title: 'Reconcile Hooks',
|
|
75
132
|
},
|
|
76
|
-
}, safeTracked('reconcile_hooks', (args) => Promise.resolve(
|
|
133
|
+
}, safeTracked('reconcile_hooks', (args) => Promise.resolve(handleReconcileHooksAsync(args))));
|
|
77
134
|
}
|
|
78
135
|
//# sourceMappingURL=reconcile-hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-hooks.js","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,2DAA2D;
|
|
1
|
+
{"version":3,"file":"reconcile-hooks.js","sourceRoot":"","sources":["../../src/tools/reconcile-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { ToolResult } from '../types/index.js';
|
|
|
3
3
|
export declare function handleReconcileSkills(args: {
|
|
4
4
|
projectId: string;
|
|
5
5
|
projectPath: string;
|
|
6
|
+
autoFix?: boolean;
|
|
6
7
|
}): Promise<ToolResult>;
|
|
7
8
|
export declare function registerReconcileSkillsTool(server: McpServer): void;
|
|
8
9
|
//# sourceMappingURL=reconcile-skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-skills.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reconcile-skills.d.ts","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,CAAC,CAWtB;AAmGD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyBnE"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
// tools/reconcile-skills.ts — SPEC-189: reconcile_skills MCP tool registration
|
|
2
|
-
//
|
|
3
|
-
// Does NOT install or remove anything — it reports what needs attention.
|
|
2
|
+
// SPEC-395: adds autoFix:boolean to auto-install missing, remove stale, repair paths.
|
|
4
3
|
import { safeTracked } from './safe-handler.js';
|
|
5
4
|
import { ReconcileSkillsInputSchema } from './schemas/reconcile-skills-schemas.js';
|
|
6
|
-
import { reconcileSkills } from '../engine/skills-reconciler.js';
|
|
5
|
+
import { reconcileSkills, autoFixSkills } from '../engine/skills-reconciler.js';
|
|
7
6
|
import { sanitizePath } from './sanitize-path.js';
|
|
8
7
|
import { knowledgeStore } from '../storage/index.js';
|
|
9
8
|
// ---------------------------------------------------------------------------
|
|
@@ -12,7 +11,17 @@ import { knowledgeStore } from '../storage/index.js';
|
|
|
12
11
|
export async function handleReconcileSkills(args) {
|
|
13
12
|
const projectPath = sanitizePath(args.projectPath);
|
|
14
13
|
const knowledge = await knowledgeStore.getKnowledge(args.projectId);
|
|
15
|
-
const
|
|
14
|
+
const reconciliation = await reconcileSkills(projectPath, knowledge);
|
|
15
|
+
if (args.autoFix === true) {
|
|
16
|
+
const fixResult = await autoFixSkills(reconciliation, projectPath);
|
|
17
|
+
return buildAutoFixReport(fixResult);
|
|
18
|
+
}
|
|
19
|
+
return buildReadOnlyReport(reconciliation);
|
|
20
|
+
}
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Report builders
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
function buildReadOnlyReport(result) {
|
|
16
25
|
const lines = [];
|
|
17
26
|
lines.push(`## Skills Reconciliation Report`);
|
|
18
27
|
lines.push(`**Health score**: ${result.healthScore}/100`);
|
|
@@ -43,9 +52,46 @@ export async function handleReconcileSkills(args) {
|
|
|
43
52
|
else {
|
|
44
53
|
lines.push('No stale skills detected.');
|
|
45
54
|
}
|
|
46
|
-
return {
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
56
|
+
}
|
|
57
|
+
function buildAutoFixReport(fix) {
|
|
58
|
+
const lines = [];
|
|
59
|
+
lines.push('## Skills Auto-Fix Report');
|
|
60
|
+
lines.push(`**Health score after fix**: ${fix.healthScore}/100`);
|
|
61
|
+
lines.push('');
|
|
62
|
+
if (fix.installed.length > 0) {
|
|
63
|
+
lines.push(`### Installed (${fix.installed.length})`);
|
|
64
|
+
for (const name of fix.installed) {
|
|
65
|
+
lines.push(`- \`${name}\``);
|
|
66
|
+
}
|
|
67
|
+
lines.push('');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
lines.push('No missing skills to install.');
|
|
71
|
+
lines.push('');
|
|
72
|
+
}
|
|
73
|
+
if (fix.removed.length > 0) {
|
|
74
|
+
lines.push(`### Removed (${fix.removed.length})`);
|
|
75
|
+
for (const name of fix.removed) {
|
|
76
|
+
lines.push(`- \`${name}\``);
|
|
77
|
+
}
|
|
78
|
+
lines.push('');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
lines.push('No stale skills to remove.');
|
|
82
|
+
lines.push('');
|
|
83
|
+
}
|
|
84
|
+
if (fix.pathsFixed.length > 0) {
|
|
85
|
+
lines.push(`### Paths corrected (${fix.pathsFixed.length})`);
|
|
86
|
+
for (const name of fix.pathsFixed) {
|
|
87
|
+
lines.push(`- \`${name}\``);
|
|
88
|
+
}
|
|
89
|
+
lines.push('');
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
lines.push('No corrupt manifest paths detected.');
|
|
93
|
+
}
|
|
94
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
49
95
|
}
|
|
50
96
|
// ---------------------------------------------------------------------------
|
|
51
97
|
// Registration
|
|
@@ -56,14 +102,16 @@ export function registerReconcileSkillsTool(server) {
|
|
|
56
102
|
'Detects skills that are recommended for the stack but not yet installed (newSkillsDetected) ' +
|
|
57
103
|
'and skills installed for technologies no longer in use (staleSkills). ' +
|
|
58
104
|
'Returns a health score (0–100) indicating how well skills match the current stack. ' +
|
|
59
|
-
'
|
|
105
|
+
'Pass autoFix:true to automatically install missing skills, remove stale skills, ' +
|
|
106
|
+
'and repair corrupt manifest paths (mutates .claude/skills/).',
|
|
60
107
|
inputSchema: {
|
|
61
108
|
projectId: ReconcileSkillsInputSchema.shape.projectId,
|
|
62
109
|
projectPath: ReconcileSkillsInputSchema.shape.projectPath,
|
|
110
|
+
autoFix: ReconcileSkillsInputSchema.shape.autoFix,
|
|
63
111
|
},
|
|
64
112
|
annotations: {
|
|
65
113
|
title: 'Reconcile Skills',
|
|
66
|
-
readOnlyHint:
|
|
114
|
+
readOnlyHint: false,
|
|
67
115
|
},
|
|
68
116
|
}, safeTracked('reconcile_skills', async (args) => handleReconcileSkills(args)));
|
|
69
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-skills.js","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"reconcile-skills.js","sourceRoot":"","sources":["../../src/tools/reconcile-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-skills-schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/reconcile-skills-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,eAAO,MAAM,0BAA0B
|
|
1
|
+
{"version":3,"file":"reconcile-skills-schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/reconcile-skills-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,eAAO,MAAM,0BAA0B;;;;iBAwBrC,CAAC"}
|
|
@@ -14,5 +14,10 @@ export const ReconcileSkillsInputSchema = z.object({
|
|
|
14
14
|
.max(2000)
|
|
15
15
|
.describe('Absolute path to the project root directory (e.g. "/home/user/my-project"). ' +
|
|
16
16
|
'Used to scan the .claude/skills/ directory for installed skills.'),
|
|
17
|
+
autoFix: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('When true, automatically installs missing skills, removes stale skills from disk ' +
|
|
21
|
+
'and manifest, and corrects corrupt manifest paths. Default: false (read-only analysis).'),
|
|
17
22
|
});
|
|
18
23
|
//# sourceMappingURL=reconcile-skills-schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-skills-schemas.js","sourceRoot":"","sources":["../../../src/tools/schemas/reconcile-skills-schemas.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,yEAAyE;QACvE,uDAAuD,CAC1D;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,8EAA8E;QAC5E,kEAAkE,CACrE;CACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"reconcile-skills-schemas.js","sourceRoot":"","sources":["../../../src/tools/schemas/reconcile-skills-schemas.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kDAAkD;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,yEAAyE;QACvE,uDAAuD,CAC1D;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,8EAA8E;QAC5E,kEAAkE,CACrE;IACH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,mFAAmF;QACjF,yFAAyF,CAC5F;CACJ,CAAC,CAAC"}
|
|
@@ -52,6 +52,17 @@ export interface SkillsReconciliation {
|
|
|
52
52
|
updatedSkills: string[];
|
|
53
53
|
healthScore: number;
|
|
54
54
|
}
|
|
55
|
+
/** Result returned when autoFix:true is passed to reconcile_skills (SPEC-395). */
|
|
56
|
+
export interface SkillsAutoFixResult {
|
|
57
|
+
/** Skills successfully installed during the auto-fix run. */
|
|
58
|
+
installed: string[];
|
|
59
|
+
/** Skills removed from disk and manifest during the auto-fix run. */
|
|
60
|
+
removed: string[];
|
|
61
|
+
/** Manifest entries whose paths were corrected during the auto-fix run. */
|
|
62
|
+
pathsFixed: string[];
|
|
63
|
+
/** Health score after all fixes were applied (0–100). */
|
|
64
|
+
healthScore: number;
|
|
65
|
+
}
|
|
55
66
|
export interface ComplianceGateResult {
|
|
56
67
|
conventionWarnings: string[];
|
|
57
68
|
constitutionWarnings: {
|
|
@@ -83,6 +94,24 @@ export interface HooksReconciliation {
|
|
|
83
94
|
outdatedHooks: string[];
|
|
84
95
|
healthScore: number;
|
|
85
96
|
}
|
|
97
|
+
/** Internal candidate for patching a single hook step. */
|
|
98
|
+
export interface PatchCandidate {
|
|
99
|
+
hook: string;
|
|
100
|
+
line: string;
|
|
101
|
+
description: string;
|
|
102
|
+
}
|
|
103
|
+
/** Result of auto-patching husky hook files with missing quality checks. */
|
|
104
|
+
export interface HooksPatchResult {
|
|
105
|
+
/** Checks that were successfully appended to hook files. */
|
|
106
|
+
patched: {
|
|
107
|
+
hook: string;
|
|
108
|
+
added: string;
|
|
109
|
+
}[];
|
|
110
|
+
/** Checks skipped because they were already present or covered by lint-staged. */
|
|
111
|
+
skipped: string[];
|
|
112
|
+
/** Updated health score after patching (0–100). */
|
|
113
|
+
healthScore: number;
|
|
114
|
+
}
|
|
86
115
|
export interface ProjectCapabilities {
|
|
87
116
|
hasTypeScript: boolean;
|
|
88
117
|
hasEsLint: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conventions.d.ts","sourceRoot":"","sources":["../../src/types/conventions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conventions.d.ts","sourceRoot":"","sources":["../../src/types/conventions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planu/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Planu — MCP Server for Spec Driven Development. Manages specs, estimations, reverse engineering, and auto-learning across any language/framework.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|