@kiwidata/grimoire 0.1.2 → 0.1.4
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/AGENTS.md +56 -4
- package/README.md +29 -2
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/check.js +3 -3
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/configure.d.ts +3 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +19 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/map.d.ts.map +1 -1
- package/dist/commands/map.js +10 -11
- package/dist/commands/map.js.map +1 -1
- package/dist/core/archive.d.ts.map +1 -1
- package/dist/core/archive.js +32 -43
- package/dist/core/archive.js.map +1 -1
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +115 -104
- package/dist/core/check.js.map +1 -1
- package/dist/core/ci.d.ts.map +1 -1
- package/dist/core/ci.js +50 -69
- package/dist/core/ci.js.map +1 -1
- package/dist/core/configure.d.ts +14 -0
- package/dist/core/configure.d.ts.map +1 -0
- package/dist/core/configure.js +434 -0
- package/dist/core/configure.js.map +1 -0
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +153 -26
- package/dist/core/detect.js.map +1 -1
- package/dist/core/diff.d.ts.map +1 -1
- package/dist/core/diff.js +62 -93
- package/dist/core/diff.js.map +1 -1
- package/dist/core/doc-style.d.ts +0 -4
- package/dist/core/doc-style.d.ts.map +1 -1
- package/dist/core/doc-style.js +28 -23
- package/dist/core/doc-style.js.map +1 -1
- package/dist/core/docs.js +106 -100
- package/dist/core/docs.js.map +1 -1
- package/dist/core/health.js +55 -77
- package/dist/core/health.js.map +1 -1
- package/dist/core/hooks.d.ts +0 -3
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +0 -11
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/init.d.ts +2 -0
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +230 -406
- package/dist/core/init.js.map +1 -1
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +55 -65
- package/dist/core/list.js.map +1 -1
- package/dist/core/log.d.ts.map +1 -1
- package/dist/core/log.js +23 -33
- package/dist/core/log.js.map +1 -1
- package/dist/core/map.d.ts +15 -2
- package/dist/core/map.d.ts.map +1 -1
- package/dist/core/map.js +257 -194
- package/dist/core/map.js.map +1 -1
- package/dist/core/shared-setup.d.ts +0 -40
- package/dist/core/shared-setup.d.ts.map +1 -1
- package/dist/core/shared-setup.js +87 -52
- package/dist/core/shared-setup.js.map +1 -1
- package/dist/core/status.d.ts.map +1 -1
- package/dist/core/status.js +42 -52
- package/dist/core/status.js.map +1 -1
- package/dist/core/test-quality.d.ts +0 -8
- package/dist/core/test-quality.d.ts.map +1 -1
- package/dist/core/test-quality.js +24 -30
- package/dist/core/test-quality.js.map +1 -1
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js +31 -41
- package/dist/core/trace.js.map +1 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +61 -11
- package/dist/core/update.js.map +1 -1
- package/dist/core/validate.d.ts +1 -4
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +126 -148
- package/dist/core/validate.js.map +1 -1
- package/dist/utils/config.d.ts +15 -5
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +63 -42
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/fs.d.ts +0 -12
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +0 -12
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/paths.d.ts +0 -6
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +0 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/spawn.d.ts +0 -3
- package/dist/utils/spawn.d.ts.map +1 -1
- package/dist/utils/spawn.js +0 -3
- package/dist/utils/spawn.js.map +1 -1
- package/package.json +1 -1
- package/skills/grimoire-apply/SKILL.md +84 -16
- package/skills/grimoire-audit/SKILL.md +21 -1
- package/skills/grimoire-bug/SKILL.md +48 -9
- package/skills/grimoire-commit/SKILL.md +2 -1
- package/skills/grimoire-design/SKILL.md +259 -0
- package/skills/grimoire-design-consult/SKILL.md +200 -0
- package/skills/grimoire-discover/SKILL.md +65 -2
- package/skills/grimoire-draft/SKILL.md +85 -2
- package/skills/grimoire-plan/SKILL.md +61 -18
- package/skills/grimoire-pr/SKILL.md +4 -6
- package/skills/grimoire-pr-review/SKILL.md +45 -114
- package/skills/grimoire-precommit-review/SKILL.md +205 -0
- package/skills/grimoire-refactor/SKILL.md +5 -5
- package/skills/grimoire-review/SKILL.md +74 -147
- package/skills/grimoire-verify/SKILL.md +33 -0
- package/skills/references/adversarial-personas.md +225 -0
- package/skills/references/brand-tokens-format.md +186 -0
- package/skills/references/code-quality.md +140 -0
- package/skills/references/design-heuristics.md +138 -0
- package/skills/references/design-input-formats.md +190 -0
- package/skills/references/pattern-guard.md +180 -0
- package/skills/references/refactor-scan-categories.md +152 -0
- package/skills/references/review-personas.md +405 -0
- package/skills/references/security-compliance.md +22 -1
- package/skills/references/visual-fidelity.md +206 -0
- package/templates/brand-tokens-example.json +13 -0
- package/templates/brand-voice-example.md +22 -0
- package/templates/design-tool-setup-stub.md +59 -0
package/dist/core/map.js
CHANGED
|
@@ -1,17 +1,190 @@
|
|
|
1
|
-
import { readdir, readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
-
import { join, relative, extname, basename, dirname } from "node:path";
|
|
1
|
+
import { readdir, readFile, writeFile, mkdir, access, } from "node:fs/promises";
|
|
2
|
+
import { join, relative, resolve, extname, basename, dirname, } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import { findProjectRoot } from "../utils/paths.js";
|
|
8
|
+
import { loadConfig } from "../utils/config.js";
|
|
8
9
|
const execFileAsync = promisify(execFile);
|
|
9
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
const PACKAGE_ROOT = join(__dirname, "..", "..");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export class McpRequiredError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "McpRequiredError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function requireMcpConfigured(root) {
|
|
19
|
+
const config = await loadConfig(root).catch(() => null);
|
|
20
|
+
if (!config?.project.integrations?.codebase_memory_mcp) {
|
|
21
|
+
console.error(chalk.red("Error: codebase-memory-mcp is required for grimoire map."));
|
|
22
|
+
console.error("Install codebase-memory-mcp and run grimoire init to register it.");
|
|
23
|
+
throw new McpRequiredError("codebase-memory-mcp not configured");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const SCANNED_HEADERS = new Set(["## file placement", "## patterns"]);
|
|
27
|
+
const SKIP_TOKENS = ["(", ";", "node_modules", "dist", "build", ".git"];
|
|
28
|
+
export function extractPathRules(content, filename) {
|
|
29
|
+
const items = [];
|
|
30
|
+
let inScannedSection = false;
|
|
31
|
+
for (const line of content.split("\n")) {
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
if (trimmed.startsWith("## ")) {
|
|
34
|
+
inScannedSection = SCANNED_HEADERS.has(trimmed.toLowerCase());
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!inScannedSection)
|
|
38
|
+
continue;
|
|
39
|
+
const matches = [...line.matchAll(/`([a-z][^`]+\/)`/g)];
|
|
40
|
+
for (const match of matches) {
|
|
41
|
+
const token = match[1];
|
|
42
|
+
if (SKIP_TOKENS.some((s) => token.includes(s)))
|
|
43
|
+
continue;
|
|
44
|
+
items.push({ conventionsFile: filename, path: token, context: trimmed });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return items;
|
|
48
|
+
}
|
|
49
|
+
async function detectConventionsDrift(root) {
|
|
50
|
+
const conventionsDir = join(root, ".grimoire", "docs", "conventions");
|
|
51
|
+
let files;
|
|
52
|
+
try {
|
|
53
|
+
const entries = await readdir(conventionsDir);
|
|
54
|
+
files = entries.filter((f) => f.endsWith(".md"));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
files = [];
|
|
58
|
+
}
|
|
59
|
+
if (files.length === 0) {
|
|
60
|
+
console.log(chalk.dim("No conventions files found. Run /grimoire:discover to generate them."));
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
const driftItems = [];
|
|
64
|
+
for (const file of files) {
|
|
65
|
+
const content = await readFile(join(conventionsDir, file), "utf-8");
|
|
66
|
+
const rules = extractPathRules(content, file);
|
|
67
|
+
for (const rule of rules) {
|
|
68
|
+
const resolved = resolve(join(root, rule.path));
|
|
69
|
+
if (!resolved.startsWith(root + "/"))
|
|
70
|
+
continue;
|
|
71
|
+
try {
|
|
72
|
+
await access(resolved);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (err.code === "ENOENT") {
|
|
76
|
+
driftItems.push(rule);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return driftItems;
|
|
82
|
+
}
|
|
83
|
+
export async function runMap(options) {
|
|
84
|
+
const root = await findProjectRoot();
|
|
85
|
+
await requireMcpConfigured(root);
|
|
86
|
+
const drift = await detectConventionsDrift(root);
|
|
87
|
+
if (drift.length > 0) {
|
|
88
|
+
console.log(chalk.yellow("Drift detected:"));
|
|
89
|
+
for (const item of drift) {
|
|
90
|
+
const relPath = relative(root, resolve(join(root, item.path)));
|
|
91
|
+
console.log(` ${item.conventionsFile}: ${item.context} — path not found: ${relPath}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.green("No drift detected. Conventions files match the codebase."));
|
|
96
|
+
}
|
|
97
|
+
console.log(chalk.dim("For semantic drift (naming, patterns), run /grimoire:discover in an agent session."));
|
|
98
|
+
if (options.duplicates) {
|
|
99
|
+
const dupIgnoreGlobs = await loadDupIgnore(root);
|
|
100
|
+
await runJscpd(root, dupIgnoreGlobs);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function loadDupIgnore(root) {
|
|
104
|
+
const projectPath = join(root, ".grimoire", "dupignore");
|
|
105
|
+
let content;
|
|
106
|
+
try {
|
|
107
|
+
content = await readFile(projectPath, "utf-8");
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
const templatePath = join(PACKAGE_ROOT, "templates", "dupignore");
|
|
111
|
+
try {
|
|
112
|
+
content = await readFile(templatePath, "utf-8");
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return new Set();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const patterns = new Set();
|
|
119
|
+
for (const line of content.split("\n")) {
|
|
120
|
+
const trimmed = line.trim();
|
|
121
|
+
if (trimmed && !trimmed.startsWith("#"))
|
|
122
|
+
patterns.add(trimmed);
|
|
123
|
+
}
|
|
124
|
+
return patterns;
|
|
125
|
+
}
|
|
126
|
+
function cloneLoc(loc) {
|
|
127
|
+
return loc?.line ?? 0;
|
|
128
|
+
}
|
|
129
|
+
function buildCloneInfo(d, root) {
|
|
130
|
+
const first = d.firstFile;
|
|
131
|
+
const second = d.secondFile;
|
|
132
|
+
return {
|
|
133
|
+
firstFile: relative(root, first.name),
|
|
134
|
+
firstStartLine: cloneLoc(first.startLoc),
|
|
135
|
+
firstEndLine: cloneLoc(first.endLoc),
|
|
136
|
+
secondFile: relative(root, second.name),
|
|
137
|
+
secondStartLine: cloneLoc(second.startLoc),
|
|
138
|
+
secondEndLine: cloneLoc(second.endLoc),
|
|
139
|
+
lines: d.lines || 0,
|
|
140
|
+
tokens: d.tokens || 0,
|
|
141
|
+
fragment: (d.fragment || "").slice(0, 200),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function parseJscpdReport(root, reportContent) {
|
|
145
|
+
const report = JSON.parse(reportContent);
|
|
146
|
+
const clones = (report.duplicates || []).map((d) => buildCloneInfo(d, root));
|
|
147
|
+
const stats = report.statistics;
|
|
148
|
+
const totals = stats?.total;
|
|
149
|
+
const totalLines = totals?.lines || 1;
|
|
150
|
+
const dupLines = totals?.duplicatedLines || 0;
|
|
151
|
+
return {
|
|
152
|
+
clones,
|
|
153
|
+
totalDuplicatedLines: dupLines,
|
|
154
|
+
percentDuplicated: (dupLines / totalLines) * 100,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function runJscpd(root, dupIgnoreGlobs) {
|
|
158
|
+
try {
|
|
159
|
+
await execFileAsync("npx", ["jscpd", "--version"], { cwd: root });
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
console.log(chalk.yellow("\njscpd not found. Install with: npm install -g jscpd"));
|
|
163
|
+
console.log(chalk.yellow("Skipping duplicate detection.\n"));
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
console.log(chalk.dim("\nRunning jscpd duplicate detection..."));
|
|
167
|
+
try {
|
|
168
|
+
const ignoreArg = [...dupIgnoreGlobs].join(",");
|
|
169
|
+
const args = [
|
|
170
|
+
"jscpd",
|
|
171
|
+
root,
|
|
172
|
+
"--reporters", "json",
|
|
173
|
+
"--output", join(root, ".grimoire", "docs"),
|
|
174
|
+
"--silent",
|
|
175
|
+
];
|
|
176
|
+
if (ignoreArg)
|
|
177
|
+
args.push("--ignore", ignoreArg);
|
|
178
|
+
await execFileAsync("npx", args, { cwd: root, timeout: 60_000 });
|
|
179
|
+
const reportPath = join(root, ".grimoire", "docs", "jscpd-report.json");
|
|
180
|
+
const reportContent = await readFile(reportPath, "utf-8");
|
|
181
|
+
return parseJscpdReport(root, reportContent);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
console.log(chalk.yellow(`\njscpd failed: ${err instanceof Error ? err.message : "unknown error"}`));
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
15
188
|
function parseIgnoreFile(content) {
|
|
16
189
|
const patterns = new Set();
|
|
17
190
|
for (const line of content.split("\n")) {
|
|
@@ -22,11 +195,6 @@ function parseIgnoreFile(content) {
|
|
|
22
195
|
}
|
|
23
196
|
return patterns;
|
|
24
197
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Parse a mapkeys file into a Record<filename, type>.
|
|
27
|
-
* Format: filename = type
|
|
28
|
-
* Blank lines and lines starting with # are skipped.
|
|
29
|
-
*/
|
|
30
198
|
function parseKeyFilesConfig(content) {
|
|
31
199
|
const keys = {};
|
|
32
200
|
for (const line of content.split("\n")) {
|
|
@@ -44,70 +212,18 @@ function parseKeyFilesConfig(content) {
|
|
|
44
212
|
}
|
|
45
213
|
return keys;
|
|
46
214
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Load config from project-level file, falling back to bundled template.
|
|
49
|
-
*/
|
|
50
215
|
async function loadConfigFile(root, filename) {
|
|
51
|
-
// Project-level override: .grimoire/<filename>
|
|
52
216
|
const projectPath = join(root, ".grimoire", filename);
|
|
53
217
|
try {
|
|
54
218
|
return await readFile(projectPath, "utf-8");
|
|
55
219
|
}
|
|
56
220
|
catch {
|
|
57
|
-
// Fall back to bundled template
|
|
58
221
|
const templatePath = join(PACKAGE_ROOT, "templates", filename);
|
|
59
222
|
return await readFile(templatePath, "utf-8");
|
|
60
223
|
}
|
|
61
224
|
}
|
|
62
|
-
|
|
63
|
-
const root = await findProjectRoot();
|
|
64
|
-
const docsDir = join(root, ".grimoire", "docs");
|
|
65
|
-
// Load config files
|
|
66
|
-
// mapignore → structure scan only (dir-name match)
|
|
67
|
-
// dupignore → jscpd only (glob match)
|
|
68
|
-
const ignoreContent = await loadConfigFile(root, "mapignore");
|
|
69
|
-
const keysContent = await loadConfigFile(root, "mapkeys");
|
|
70
|
-
const dupIgnoreContent = await loadConfigFile(root, "dupignore");
|
|
71
|
-
const ignorePatterns = parseIgnoreFile(ignoreContent);
|
|
72
|
-
const keyFilePatterns = parseKeyFilesConfig(keysContent);
|
|
73
|
-
const dupIgnoreGlobs = parseIgnoreFile(dupIgnoreContent);
|
|
74
|
-
// Scan the directory tree
|
|
75
|
-
const directories = [];
|
|
76
|
-
const keyFiles = [];
|
|
77
|
-
await scanDirectory(root, root, 0, options.maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns);
|
|
78
|
-
// Load existing index if refreshing
|
|
79
|
-
let existingAreas = [];
|
|
80
|
-
if (options.refresh) {
|
|
81
|
-
existingAreas = await loadExistingAreas(docsDir);
|
|
82
|
-
}
|
|
83
|
-
// Determine what's undocumented and what's been removed
|
|
84
|
-
const scannedDirs = new Set(directories.map((d) => d.path));
|
|
85
|
-
const undocumented = directories
|
|
86
|
-
.filter((d) => !existingAreas.includes(d.path))
|
|
87
|
-
.filter((d) => d.fileCount > 0)
|
|
88
|
-
.map((d) => d.path);
|
|
89
|
-
const removed = existingAreas.filter((a) => !scannedDirs.has(a));
|
|
90
|
-
// Run duplicate detection if requested
|
|
91
|
-
let duplicates = null;
|
|
92
|
-
if (options.duplicates) {
|
|
93
|
-
duplicates = await runJscpd(root, dupIgnoreGlobs);
|
|
94
|
-
}
|
|
95
|
-
const snapshot = {
|
|
96
|
-
generatedAt: new Date().toISOString(),
|
|
97
|
-
projectRoot: ".",
|
|
98
|
-
directories,
|
|
99
|
-
keyFiles,
|
|
100
|
-
undocumented,
|
|
101
|
-
removed,
|
|
102
|
-
duplicates,
|
|
103
|
-
};
|
|
104
|
-
if (options.json) {
|
|
105
|
-
console.log(JSON.stringify(snapshot, null, 2));
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
// Pretty print
|
|
225
|
+
function printMapStructure(directories, keyFiles) {
|
|
109
226
|
console.log(chalk.bold("\nProject Map\n"));
|
|
110
|
-
// Directory tree
|
|
111
227
|
console.log(chalk.bold("Structure:"));
|
|
112
228
|
for (const dir of directories) {
|
|
113
229
|
const depth = dir.path === "." ? 0 : dir.path.split("/").length;
|
|
@@ -117,72 +233,101 @@ export async function generateMap(options) {
|
|
|
117
233
|
.slice(0, 3)
|
|
118
234
|
.map(([ext, count]) => `${count} ${ext}`)
|
|
119
235
|
.join(", ");
|
|
120
|
-
const keyFileNote = dir.keyFiles.length > 0
|
|
121
|
-
? chalk.dim(` [${dir.keyFiles.join(", ")}]`)
|
|
122
|
-
: "";
|
|
236
|
+
const keyFileNote = dir.keyFiles.length > 0 ? chalk.dim(` [${dir.keyFiles.join(", ")}]`) : "";
|
|
123
237
|
console.log(`${padding}${chalk.cyan(dir.path + "/")} ${chalk.dim(extSummary)}${keyFileNote}`);
|
|
124
238
|
}
|
|
125
|
-
// Key files
|
|
126
239
|
if (keyFiles.length > 0) {
|
|
127
240
|
console.log(chalk.bold("\nKey Files:"));
|
|
128
|
-
for (const kf of keyFiles)
|
|
241
|
+
for (const kf of keyFiles)
|
|
129
242
|
console.log(` ${kf.path} ${chalk.dim(`(${kf.type})`)}`);
|
|
130
|
-
}
|
|
131
243
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
244
|
+
}
|
|
245
|
+
function printDuplicateReport(duplicates) {
|
|
246
|
+
if (duplicates.clones.length === 0) {
|
|
247
|
+
console.log(chalk.green("\nNo duplicates detected."));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
console.log(chalk.bold.yellow(`\nDuplicates: ${duplicates.clones.length} clone(s), ${duplicates.totalDuplicatedLines} duplicated lines (${duplicates.percentDuplicated.toFixed(1)}%)\n`));
|
|
251
|
+
for (const clone of duplicates.clones.slice(0, 10)) {
|
|
252
|
+
console.log(` ${chalk.dim(clone.firstFile)}:${clone.firstStartLine}-${clone.firstEndLine}`);
|
|
253
|
+
console.log(` ${chalk.dim(clone.secondFile)}:${clone.secondStartLine}-${clone.secondEndLine}`);
|
|
254
|
+
console.log(` ${chalk.dim(`${clone.lines} lines, ${clone.tokens} tokens`)}\n`);
|
|
255
|
+
}
|
|
256
|
+
if (duplicates.clones.length > 10) {
|
|
257
|
+
console.log(chalk.dim(` ... and ${duplicates.clones.length - 10} more (see .snapshot.json for full list)`));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function printRefreshReport(undocumented, removed) {
|
|
261
|
+
if (undocumented.length > 0) {
|
|
262
|
+
console.log(chalk.bold.yellow("\nUndocumented areas:"));
|
|
263
|
+
for (const u of undocumented)
|
|
264
|
+
console.log(` ${chalk.yellow("+")} ${u}/`);
|
|
265
|
+
}
|
|
266
|
+
if (removed.length > 0) {
|
|
267
|
+
console.log(chalk.bold.red("\nRemoved (docs may be stale):"));
|
|
268
|
+
for (const r of removed)
|
|
269
|
+
console.log(` ${chalk.red("-")} ${r}/`);
|
|
270
|
+
}
|
|
271
|
+
if (undocumented.length === 0 && removed.length === 0) {
|
|
272
|
+
console.log(chalk.green("\nAll areas are documented. No changes detected."));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
export async function generateMap(options) {
|
|
276
|
+
const root = await findProjectRoot();
|
|
277
|
+
const docsDir = join(root, ".grimoire", "docs");
|
|
278
|
+
const ignorePatterns = parseIgnoreFile(await loadConfigFile(root, "mapignore"));
|
|
279
|
+
const keyFilePatterns = parseKeyFilesConfig(await loadConfigFile(root, "mapkeys"));
|
|
280
|
+
const dupIgnoreGlobs = parseIgnoreFile(await loadConfigFile(root, "dupignore"));
|
|
281
|
+
const directories = [];
|
|
282
|
+
const keyFiles = [];
|
|
283
|
+
await scanDirectory(root, root, 0, options.maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns);
|
|
284
|
+
const existingAreas = options.refresh ? await loadExistingAreas(docsDir) : [];
|
|
285
|
+
const scannedDirs = new Set(directories.map((d) => d.path));
|
|
286
|
+
const undocumented = directories.filter((d) => !existingAreas.includes(d.path) && d.fileCount > 0).map((d) => d.path);
|
|
287
|
+
const removed = existingAreas.filter((a) => !scannedDirs.has(a));
|
|
288
|
+
const duplicates = options.duplicates ? await runJscpd(root, dupIgnoreGlobs) : null;
|
|
289
|
+
const snapshot = { generatedAt: new Date().toISOString(), projectRoot: ".", directories, keyFiles, undocumented, removed, duplicates };
|
|
290
|
+
if (options.json) {
|
|
291
|
+
console.log(JSON.stringify(snapshot, null, 2));
|
|
292
|
+
return;
|
|
148
293
|
}
|
|
149
|
-
|
|
294
|
+
printMapStructure(directories, keyFiles);
|
|
295
|
+
if (duplicates)
|
|
296
|
+
printDuplicateReport(duplicates);
|
|
150
297
|
if (options.refresh) {
|
|
151
|
-
|
|
152
|
-
console.log(chalk.bold.yellow("\nUndocumented areas:"));
|
|
153
|
-
for (const u of undocumented) {
|
|
154
|
-
console.log(` ${chalk.yellow("+")} ${u}/`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (removed.length > 0) {
|
|
158
|
-
console.log(chalk.bold.red("\nRemoved (docs may be stale):"));
|
|
159
|
-
for (const r of removed) {
|
|
160
|
-
console.log(` ${chalk.red("-")} ${r}/`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (undocumented.length === 0 && removed.length === 0) {
|
|
164
|
-
console.log(chalk.green("\nAll areas are documented. No changes detected."));
|
|
165
|
-
}
|
|
298
|
+
printRefreshReport(undocumented, removed);
|
|
166
299
|
}
|
|
167
300
|
else {
|
|
168
301
|
console.log(chalk.dim(`\n${directories.length} directories, ${keyFiles.length} key files found.`));
|
|
169
302
|
console.log(chalk.dim("Run /grimoire:discover to generate area docs from this snapshot."));
|
|
170
303
|
}
|
|
171
|
-
// Write snapshot for the skill to consume
|
|
172
304
|
await mkdir(docsDir, { recursive: true });
|
|
173
305
|
await writeFile(join(docsDir, ".snapshot.json"), JSON.stringify(snapshot, null, 2));
|
|
174
306
|
console.log(chalk.dim(`\nSnapshot saved to .grimoire/docs/.snapshot.json`));
|
|
175
307
|
}
|
|
308
|
+
function shouldSkipDir(depth, dirName, ignorePatterns) {
|
|
309
|
+
if (depth === 0)
|
|
310
|
+
return false;
|
|
311
|
+
return ignorePatterns.has(dirName) || (dirName.startsWith(".") && dirName !== ".grimoire");
|
|
312
|
+
}
|
|
313
|
+
function processFiles(files, relPath, keyFilePatterns, keyFiles) {
|
|
314
|
+
const extensions = {};
|
|
315
|
+
const dirKeyFiles = [];
|
|
316
|
+
for (const file of files) {
|
|
317
|
+
const ext = extname(file.name) || file.name;
|
|
318
|
+
extensions[ext] = (extensions[ext] || 0) + 1;
|
|
319
|
+
if (keyFilePatterns[file.name]) {
|
|
320
|
+
keyFiles.push({ path: relPath === "." ? file.name : `${relPath}/${file.name}`, type: keyFilePatterns[file.name] });
|
|
321
|
+
dirKeyFiles.push(file.name);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return { extensions, dirKeyFiles };
|
|
325
|
+
}
|
|
176
326
|
async function scanDirectory(fullPath, root, depth, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns) {
|
|
177
327
|
if (depth > maxDepth)
|
|
178
328
|
return;
|
|
179
329
|
const relPath = relative(root, fullPath) || ".";
|
|
180
|
-
|
|
181
|
-
// Skip ignored directories (by name match)
|
|
182
|
-
if (depth > 0 && ignorePatterns.has(dirName))
|
|
183
|
-
return;
|
|
184
|
-
// Skip hidden dirs except .grimoire
|
|
185
|
-
if (depth > 0 && dirName.startsWith(".") && dirName !== ".grimoire")
|
|
330
|
+
if (shouldSkipDir(depth, basename(fullPath), ignorePatterns))
|
|
186
331
|
return;
|
|
187
332
|
let entries;
|
|
188
333
|
try {
|
|
@@ -194,97 +339,15 @@ async function scanDirectory(fullPath, root, depth, maxDepth, directories, keyFi
|
|
|
194
339
|
const files = entries.filter((e) => e.isFile());
|
|
195
340
|
const subdirs = entries
|
|
196
341
|
.filter((e) => e.isDirectory())
|
|
197
|
-
.filter((e) => !ignorePatterns.has(e.name))
|
|
198
|
-
|
|
199
|
-
// Count extensions and detect key files
|
|
200
|
-
const extensions = {};
|
|
201
|
-
const dirKeyFiles = [];
|
|
202
|
-
for (const file of files) {
|
|
203
|
-
const ext = extname(file.name) || file.name;
|
|
204
|
-
extensions[ext] = (extensions[ext] || 0) + 1;
|
|
205
|
-
if (keyFilePatterns[file.name]) {
|
|
206
|
-
const kfPath = relPath === "." ? file.name : `${relPath}/${file.name}`;
|
|
207
|
-
keyFiles.push({
|
|
208
|
-
path: kfPath,
|
|
209
|
-
type: keyFilePatterns[file.name],
|
|
210
|
-
});
|
|
211
|
-
dirKeyFiles.push(file.name);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Include directories that have files or are shallow enough to show structure
|
|
342
|
+
.filter((e) => !ignorePatterns.has(e.name) && (!e.name.startsWith(".") || e.name === ".grimoire"));
|
|
343
|
+
const { extensions, dirKeyFiles } = processFiles(files, relPath, keyFilePatterns, keyFiles);
|
|
215
344
|
if (files.length > 0 || depth <= 1) {
|
|
216
|
-
directories.push({
|
|
217
|
-
path: relPath === "." ? "." : relPath,
|
|
218
|
-
fileCount: files.length,
|
|
219
|
-
extensions,
|
|
220
|
-
keyFiles: dirKeyFiles,
|
|
221
|
-
subdirs: subdirs.map((s) => s.name),
|
|
222
|
-
});
|
|
345
|
+
directories.push({ path: relPath, fileCount: files.length, extensions, keyFiles: dirKeyFiles, subdirs: subdirs.map((s) => s.name) });
|
|
223
346
|
}
|
|
224
347
|
for (const subdir of subdirs) {
|
|
225
348
|
await scanDirectory(join(fullPath, subdir.name), root, depth + 1, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns);
|
|
226
349
|
}
|
|
227
350
|
}
|
|
228
|
-
async function runJscpd(root, dupIgnoreGlobs) {
|
|
229
|
-
// Check if jscpd is available
|
|
230
|
-
try {
|
|
231
|
-
await execFileAsync("npx", ["jscpd", "--version"], { cwd: root });
|
|
232
|
-
}
|
|
233
|
-
catch {
|
|
234
|
-
console.log(chalk.yellow("\njscpd not found. Install with: npm install -g jscpd"));
|
|
235
|
-
console.log(chalk.yellow("Skipping duplicate detection.\n"));
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
console.log(chalk.dim("\nRunning jscpd duplicate detection..."));
|
|
239
|
-
try {
|
|
240
|
-
const ignoreArg = [...dupIgnoreGlobs].join(",");
|
|
241
|
-
const args = [
|
|
242
|
-
"jscpd",
|
|
243
|
-
root,
|
|
244
|
-
"--reporters", "json",
|
|
245
|
-
"--output", join(root, ".grimoire", "docs"),
|
|
246
|
-
"--silent",
|
|
247
|
-
];
|
|
248
|
-
if (ignoreArg) {
|
|
249
|
-
args.push("--ignore", ignoreArg);
|
|
250
|
-
}
|
|
251
|
-
await execFileAsync("npx", args, {
|
|
252
|
-
cwd: root,
|
|
253
|
-
timeout: 60_000,
|
|
254
|
-
});
|
|
255
|
-
// Read the jscpd JSON report
|
|
256
|
-
const reportPath = join(root, ".grimoire", "docs", "jscpd-report.json");
|
|
257
|
-
const reportContent = await readFile(reportPath, "utf-8");
|
|
258
|
-
const report = JSON.parse(reportContent);
|
|
259
|
-
const clones = (report.duplicates || []).map((d) => {
|
|
260
|
-
const first = d.firstFile;
|
|
261
|
-
const second = d.secondFile;
|
|
262
|
-
return {
|
|
263
|
-
firstFile: relative(root, first.name),
|
|
264
|
-
firstStartLine: first.startLoc?.line ?? 0,
|
|
265
|
-
firstEndLine: first.endLoc?.line ?? 0,
|
|
266
|
-
secondFile: relative(root, second.name),
|
|
267
|
-
secondStartLine: second.startLoc?.line ?? 0,
|
|
268
|
-
secondEndLine: second.endLoc?.line ?? 0,
|
|
269
|
-
lines: d.lines || 0,
|
|
270
|
-
tokens: d.tokens || 0,
|
|
271
|
-
fragment: (d.fragment || "").slice(0, 200),
|
|
272
|
-
};
|
|
273
|
-
});
|
|
274
|
-
const stats = report.statistics;
|
|
275
|
-
const totalLines = stats?.total?.lines || 1;
|
|
276
|
-
const dupLines = stats?.total?.duplicatedLines || 0;
|
|
277
|
-
return {
|
|
278
|
-
clones,
|
|
279
|
-
totalDuplicatedLines: dupLines,
|
|
280
|
-
percentDuplicated: (dupLines / totalLines) * 100,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
console.log(chalk.yellow(`\njscpd failed: ${err instanceof Error ? err.message : "unknown error"}`));
|
|
285
|
-
return null;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
351
|
async function loadExistingAreas(docsDir) {
|
|
289
352
|
try {
|
|
290
353
|
const indexContent = await readFile(join(docsDir, "index.yml"), "utf-8");
|
package/dist/core/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,12 @@
|
|
|
1
1
|
import type { CavemanLevel } from "../utils/config.js";
|
|
2
|
-
export declare const GRIMOIRE_START_MARKER = "<!-- GRIMOIRE:START -->";
|
|
3
|
-
export declare const GRIMOIRE_END_MARKER = "<!-- GRIMOIRE:END -->";
|
|
4
2
|
export declare const GRIMOIRE_DIRS: string[];
|
|
5
3
|
export declare const TEMPLATE_FILES: Array<[string, string]>;
|
|
6
|
-
export declare const SKILL_AGENTS: Record<string, string>;
|
|
7
|
-
export declare const DEFAULT_SKILL_AGENT = "claude";
|
|
8
4
|
export declare const SKILL_NAMES: string[];
|
|
9
|
-
/**
|
|
10
|
-
* Build a managed block from the package AGENTS.md content.
|
|
11
|
-
*/
|
|
12
|
-
export declare function buildManagedBlock(content: string): string;
|
|
13
|
-
/**
|
|
14
|
-
* Upsert grimoire-managed content into a file using start/end markers.
|
|
15
|
-
* If the file exists with markers, replace the managed section.
|
|
16
|
-
* If the file exists without markers, append the managed section.
|
|
17
|
-
* If the file doesn't exist, create it with the managed section.
|
|
18
|
-
*/
|
|
19
|
-
export declare function upsertManagedBlock(filePath: string, managedBlock: string, verb: "created" | "updated", label: string): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Build a caveman directive block for the given intensity level.
|
|
22
|
-
* Uses the upstream caveman skill format (github.com/JuliusBrussee/caveman).
|
|
23
|
-
*/
|
|
24
5
|
export declare function buildCavemanDirective(level: CavemanLevel): string;
|
|
25
|
-
/**
|
|
26
|
-
* Read the package AGENTS.md and upsert its content into the project's AGENTS.md.
|
|
27
|
-
*/
|
|
28
6
|
export declare function upsertAgentsFile(root: string, packageRoot: string, verb: "created" | "updated", caveman?: CavemanLevel): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Ensure all grimoire directories exist (idempotent).
|
|
31
|
-
*/
|
|
32
7
|
export declare function ensureDirectories(root: string): Promise<void>;
|
|
33
|
-
/**
|
|
34
|
-
* Copy template files from the package into the project.
|
|
35
|
-
* By default only creates missing templates. With force=true, overwrites all.
|
|
36
|
-
*/
|
|
37
8
|
export declare function installTemplates(root: string, packageRoot: string, force?: boolean): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Generate agent-specific instruction files (cursor, copilot).
|
|
40
|
-
*/
|
|
41
9
|
export declare function generateAgentFiles(root: string, packageRoot: string, agents: string[], verb?: "created" | "updated"): Promise<void>;
|
|
42
|
-
/**
|
|
43
|
-
* Auto-detect which agent files exist in the project.
|
|
44
|
-
* Covers cursor, copilot (instruction files) and claude, opencode, codex (skill dirs).
|
|
45
|
-
*/
|
|
46
10
|
export declare function detectAgentFiles(root: string): Promise<string[]>;
|
|
47
|
-
/**
|
|
48
|
-
* Copy SKILL.md files from the package into each selected agent's skill directory.
|
|
49
|
-
* Unknown agents (cursor, copilot) are ignored — they use instruction files, not skills.
|
|
50
|
-
*/
|
|
51
11
|
export declare function installSkillFiles(root: string, packageRoot: string, skillNames: string[], verb: "created" | "updated", agents?: string[]): Promise<void>;
|
|
52
12
|
//# sourceMappingURL=shared-setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-setup.d.ts","sourceRoot":"","sources":["../../src/core/shared-setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-setup.d.ts","sourceRoot":"","sources":["../../src/core/shared-setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,eAAO,MAAM,aAAa,UAQzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlD,CAAC;AAUF,eAAO,MAAM,WAAW,UAsBvB,CAAC;AAuCF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAmCjE;AAGD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,OAAO,GAAE,YAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAcf;AAiCD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CASf;AAGD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAGD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,GAAE,SAAS,GAAG,SAAqB,GACtC,OAAO,CAAC,IAAI,CAAC,CAoCf;AAGD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtE;AAuDD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,MAAM,GAAE,MAAM,EAA0B,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf"}
|