@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.
Files changed (127) hide show
  1. package/AGENTS.md +56 -4
  2. package/README.md +29 -2
  3. package/dist/cli/index.js +2 -0
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/check.js +3 -3
  6. package/dist/commands/check.js.map +1 -1
  7. package/dist/commands/configure.d.ts +3 -0
  8. package/dist/commands/configure.d.ts.map +1 -0
  9. package/dist/commands/configure.js +19 -0
  10. package/dist/commands/configure.js.map +1 -0
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +2 -0
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/map.d.ts.map +1 -1
  15. package/dist/commands/map.js +10 -11
  16. package/dist/commands/map.js.map +1 -1
  17. package/dist/core/archive.d.ts.map +1 -1
  18. package/dist/core/archive.js +32 -43
  19. package/dist/core/archive.js.map +1 -1
  20. package/dist/core/check.d.ts.map +1 -1
  21. package/dist/core/check.js +115 -104
  22. package/dist/core/check.js.map +1 -1
  23. package/dist/core/ci.d.ts.map +1 -1
  24. package/dist/core/ci.js +50 -69
  25. package/dist/core/ci.js.map +1 -1
  26. package/dist/core/configure.d.ts +14 -0
  27. package/dist/core/configure.d.ts.map +1 -0
  28. package/dist/core/configure.js +434 -0
  29. package/dist/core/configure.js.map +1 -0
  30. package/dist/core/detect.d.ts.map +1 -1
  31. package/dist/core/detect.js +153 -26
  32. package/dist/core/detect.js.map +1 -1
  33. package/dist/core/diff.d.ts.map +1 -1
  34. package/dist/core/diff.js +62 -93
  35. package/dist/core/diff.js.map +1 -1
  36. package/dist/core/doc-style.d.ts +0 -4
  37. package/dist/core/doc-style.d.ts.map +1 -1
  38. package/dist/core/doc-style.js +28 -23
  39. package/dist/core/doc-style.js.map +1 -1
  40. package/dist/core/docs.js +106 -100
  41. package/dist/core/docs.js.map +1 -1
  42. package/dist/core/health.js +55 -77
  43. package/dist/core/health.js.map +1 -1
  44. package/dist/core/hooks.d.ts +0 -3
  45. package/dist/core/hooks.d.ts.map +1 -1
  46. package/dist/core/hooks.js +0 -11
  47. package/dist/core/hooks.js.map +1 -1
  48. package/dist/core/init.d.ts +2 -0
  49. package/dist/core/init.d.ts.map +1 -1
  50. package/dist/core/init.js +230 -406
  51. package/dist/core/init.js.map +1 -1
  52. package/dist/core/list.d.ts.map +1 -1
  53. package/dist/core/list.js +55 -65
  54. package/dist/core/list.js.map +1 -1
  55. package/dist/core/log.d.ts.map +1 -1
  56. package/dist/core/log.js +23 -33
  57. package/dist/core/log.js.map +1 -1
  58. package/dist/core/map.d.ts +15 -2
  59. package/dist/core/map.d.ts.map +1 -1
  60. package/dist/core/map.js +257 -194
  61. package/dist/core/map.js.map +1 -1
  62. package/dist/core/shared-setup.d.ts +0 -40
  63. package/dist/core/shared-setup.d.ts.map +1 -1
  64. package/dist/core/shared-setup.js +87 -52
  65. package/dist/core/shared-setup.js.map +1 -1
  66. package/dist/core/status.d.ts.map +1 -1
  67. package/dist/core/status.js +42 -52
  68. package/dist/core/status.js.map +1 -1
  69. package/dist/core/test-quality.d.ts +0 -8
  70. package/dist/core/test-quality.d.ts.map +1 -1
  71. package/dist/core/test-quality.js +24 -30
  72. package/dist/core/test-quality.js.map +1 -1
  73. package/dist/core/trace.d.ts.map +1 -1
  74. package/dist/core/trace.js +31 -41
  75. package/dist/core/trace.js.map +1 -1
  76. package/dist/core/update.d.ts.map +1 -1
  77. package/dist/core/update.js +61 -11
  78. package/dist/core/update.js.map +1 -1
  79. package/dist/core/validate.d.ts +1 -4
  80. package/dist/core/validate.d.ts.map +1 -1
  81. package/dist/core/validate.js +126 -148
  82. package/dist/core/validate.js.map +1 -1
  83. package/dist/utils/config.d.ts +15 -5
  84. package/dist/utils/config.d.ts.map +1 -1
  85. package/dist/utils/config.js +63 -42
  86. package/dist/utils/config.js.map +1 -1
  87. package/dist/utils/fs.d.ts +0 -12
  88. package/dist/utils/fs.d.ts.map +1 -1
  89. package/dist/utils/fs.js +0 -12
  90. package/dist/utils/fs.js.map +1 -1
  91. package/dist/utils/paths.d.ts +0 -6
  92. package/dist/utils/paths.d.ts.map +1 -1
  93. package/dist/utils/paths.js +0 -6
  94. package/dist/utils/paths.js.map +1 -1
  95. package/dist/utils/spawn.d.ts +0 -3
  96. package/dist/utils/spawn.d.ts.map +1 -1
  97. package/dist/utils/spawn.js +0 -3
  98. package/dist/utils/spawn.js.map +1 -1
  99. package/package.json +1 -1
  100. package/skills/grimoire-apply/SKILL.md +84 -16
  101. package/skills/grimoire-audit/SKILL.md +21 -1
  102. package/skills/grimoire-bug/SKILL.md +48 -9
  103. package/skills/grimoire-commit/SKILL.md +2 -1
  104. package/skills/grimoire-design/SKILL.md +259 -0
  105. package/skills/grimoire-design-consult/SKILL.md +200 -0
  106. package/skills/grimoire-discover/SKILL.md +65 -2
  107. package/skills/grimoire-draft/SKILL.md +85 -2
  108. package/skills/grimoire-plan/SKILL.md +61 -18
  109. package/skills/grimoire-pr/SKILL.md +4 -6
  110. package/skills/grimoire-pr-review/SKILL.md +45 -114
  111. package/skills/grimoire-precommit-review/SKILL.md +205 -0
  112. package/skills/grimoire-refactor/SKILL.md +5 -5
  113. package/skills/grimoire-review/SKILL.md +74 -147
  114. package/skills/grimoire-verify/SKILL.md +33 -0
  115. package/skills/references/adversarial-personas.md +225 -0
  116. package/skills/references/brand-tokens-format.md +186 -0
  117. package/skills/references/code-quality.md +140 -0
  118. package/skills/references/design-heuristics.md +138 -0
  119. package/skills/references/design-input-formats.md +190 -0
  120. package/skills/references/pattern-guard.md +180 -0
  121. package/skills/references/refactor-scan-categories.md +152 -0
  122. package/skills/references/review-personas.md +405 -0
  123. package/skills/references/security-compliance.md +22 -1
  124. package/skills/references/visual-fidelity.md +206 -0
  125. package/templates/brand-tokens-example.json +13 -0
  126. package/templates/brand-voice-example.md +22 -0
  127. 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
- * Parse a mapignore file into a Set of patterns.
13
- * Blank lines and lines starting with # are skipped.
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
- export async function generateMap(options) {
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
- // Duplicate report
133
- if (duplicates) {
134
- if (duplicates.clones.length > 0) {
135
- console.log(chalk.bold.yellow(`\nDuplicates: ${duplicates.clones.length} clone(s), ${duplicates.totalDuplicatedLines} duplicated lines (${duplicates.percentDuplicated.toFixed(1)}%)\n`));
136
- for (const clone of duplicates.clones.slice(0, 10)) {
137
- console.log(` ${chalk.dim(clone.firstFile)}:${clone.firstStartLine}-${clone.firstEndLine}`);
138
- console.log(` ${chalk.dim(clone.secondFile)}:${clone.secondStartLine}-${clone.secondEndLine}`);
139
- console.log(` ${chalk.dim(`${clone.lines} lines, ${clone.tokens} tokens`)}\n`);
140
- }
141
- if (duplicates.clones.length > 10) {
142
- console.log(chalk.dim(` ... and ${duplicates.clones.length - 10} more (see .snapshot.json for full list)`));
143
- }
144
- }
145
- else {
146
- console.log(chalk.green("\nNo duplicates detected."));
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
- // Diff against existing docs
294
+ printMapStructure(directories, keyFiles);
295
+ if (duplicates)
296
+ printDuplicateReport(duplicates);
150
297
  if (options.refresh) {
151
- if (undocumented.length > 0) {
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
- const dirName = basename(fullPath);
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
- .filter((e) => !e.name.startsWith(".") || e.name === ".grimoire");
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");
@@ -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;AAEvD,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,eAAO,MAAM,aAAa,UAOzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,WAAW,UAmBvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAmCjE;AAED;;GAEG;AACH,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,CAUf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,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;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtE;AAED;;;GAGG;AACH,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,CAmBf"}
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"}