@kiwidata/grimoire 0.1.3 → 0.1.5

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 (159) hide show
  1. package/AGENTS.md +56 -4
  2. package/README.md +107 -59
  3. package/dist/cli/index.js +7 -7
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/check.js +1 -1
  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/core/check.d.ts.map +1 -1
  15. package/dist/core/check.js +165 -111
  16. package/dist/core/check.js.map +1 -1
  17. package/dist/core/ci.d.ts.map +1 -1
  18. package/dist/core/ci.js +50 -69
  19. package/dist/core/ci.js.map +1 -1
  20. package/dist/core/configure.d.ts +14 -0
  21. package/dist/core/configure.d.ts.map +1 -0
  22. package/dist/core/configure.js +434 -0
  23. package/dist/core/configure.js.map +1 -0
  24. package/dist/core/detect.d.ts.map +1 -1
  25. package/dist/core/detect.js +153 -26
  26. package/dist/core/detect.js.map +1 -1
  27. package/dist/core/diff.d.ts.map +1 -1
  28. package/dist/core/diff.js +62 -93
  29. package/dist/core/diff.js.map +1 -1
  30. package/dist/core/doc-style.d.ts +0 -4
  31. package/dist/core/doc-style.d.ts.map +1 -1
  32. package/dist/core/doc-style.js +103 -22
  33. package/dist/core/doc-style.js.map +1 -1
  34. package/dist/core/docs.js +202 -170
  35. package/dist/core/docs.js.map +1 -1
  36. package/dist/core/health.d.ts +6 -0
  37. package/dist/core/health.d.ts.map +1 -1
  38. package/dist/core/health.js +133 -96
  39. package/dist/core/health.js.map +1 -1
  40. package/dist/core/hooks.d.ts +0 -3
  41. package/dist/core/hooks.d.ts.map +1 -1
  42. package/dist/core/hooks.js +11 -16
  43. package/dist/core/hooks.js.map +1 -1
  44. package/dist/core/init.d.ts +2 -0
  45. package/dist/core/init.d.ts.map +1 -1
  46. package/dist/core/init.js +230 -406
  47. package/dist/core/init.js.map +1 -1
  48. package/dist/core/list.d.ts.map +1 -1
  49. package/dist/core/list.js +55 -65
  50. package/dist/core/list.js.map +1 -1
  51. package/dist/core/risk-register.d.ts +17 -0
  52. package/dist/core/risk-register.d.ts.map +1 -0
  53. package/dist/core/risk-register.js +73 -0
  54. package/dist/core/risk-register.js.map +1 -0
  55. package/dist/core/shared-setup.d.ts +0 -40
  56. package/dist/core/shared-setup.d.ts.map +1 -1
  57. package/dist/core/shared-setup.js +92 -56
  58. package/dist/core/shared-setup.js.map +1 -1
  59. package/dist/core/status.d.ts.map +1 -1
  60. package/dist/core/status.js +42 -52
  61. package/dist/core/status.js.map +1 -1
  62. package/dist/core/test-quality.d.ts +0 -8
  63. package/dist/core/test-quality.d.ts.map +1 -1
  64. package/dist/core/test-quality.js +24 -30
  65. package/dist/core/test-quality.js.map +1 -1
  66. package/dist/core/trace.d.ts.map +1 -1
  67. package/dist/core/trace.js +67 -75
  68. package/dist/core/trace.js.map +1 -1
  69. package/dist/core/update.d.ts.map +1 -1
  70. package/dist/core/update.js +61 -11
  71. package/dist/core/update.js.map +1 -1
  72. package/dist/core/validate.d.ts +1 -4
  73. package/dist/core/validate.d.ts.map +1 -1
  74. package/dist/core/validate.js +126 -148
  75. package/dist/core/validate.js.map +1 -1
  76. package/dist/index.d.ts +0 -3
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +0 -3
  79. package/dist/index.js.map +1 -1
  80. package/dist/utils/config.d.ts +15 -5
  81. package/dist/utils/config.d.ts.map +1 -1
  82. package/dist/utils/config.js +63 -42
  83. package/dist/utils/config.js.map +1 -1
  84. package/dist/utils/fs.d.ts +0 -12
  85. package/dist/utils/fs.d.ts.map +1 -1
  86. package/dist/utils/fs.js +0 -12
  87. package/dist/utils/fs.js.map +1 -1
  88. package/dist/utils/paths.d.ts +0 -6
  89. package/dist/utils/paths.d.ts.map +1 -1
  90. package/dist/utils/paths.js +0 -6
  91. package/dist/utils/paths.js.map +1 -1
  92. package/dist/utils/spawn.d.ts +0 -3
  93. package/dist/utils/spawn.d.ts.map +1 -1
  94. package/dist/utils/spawn.js +0 -3
  95. package/dist/utils/spawn.js.map +1 -1
  96. package/package.json +1 -1
  97. package/skills/grimoire-apply/SKILL.md +89 -25
  98. package/skills/grimoire-audit/SKILL.md +21 -1
  99. package/skills/grimoire-bug/SKILL.md +48 -9
  100. package/skills/grimoire-commit/SKILL.md +3 -2
  101. package/skills/grimoire-design/SKILL.md +259 -0
  102. package/skills/grimoire-design-consult/SKILL.md +200 -0
  103. package/skills/grimoire-discover/SKILL.md +139 -109
  104. package/skills/grimoire-draft/SKILL.md +131 -15
  105. package/skills/grimoire-plan/SKILL.md +119 -46
  106. package/skills/grimoire-pr/SKILL.md +7 -10
  107. package/skills/grimoire-pr-review/SKILL.md +46 -115
  108. package/skills/grimoire-precommit-review/SKILL.md +205 -0
  109. package/skills/grimoire-refactor/SKILL.md +6 -6
  110. package/skills/grimoire-review/SKILL.md +95 -156
  111. package/skills/grimoire-verify/SKILL.md +40 -7
  112. package/skills/grimoire-vuln-remediate/SKILL.md +107 -0
  113. package/skills/grimoire-vuln-triage/SKILL.md +109 -0
  114. package/skills/references/adversarial-personas.md +225 -0
  115. package/skills/references/brand-tokens-format.md +186 -0
  116. package/skills/references/code-quality.md +172 -0
  117. package/skills/references/container-scan-triage.md +102 -0
  118. package/skills/references/dependency-vuln-triage.md +236 -0
  119. package/skills/references/design-heuristics.md +138 -0
  120. package/skills/references/design-input-formats.md +190 -0
  121. package/skills/references/pattern-guard.md +180 -0
  122. package/skills/references/principles.md +82 -0
  123. package/skills/references/refactor-scan-categories.md +154 -2
  124. package/skills/references/review-personas.md +406 -0
  125. package/skills/references/security-compliance.md +22 -1
  126. package/skills/references/testing-contracts.md +1 -1
  127. package/skills/references/visual-fidelity.md +206 -0
  128. package/templates/accepted-risks.yml +47 -0
  129. package/templates/brand-tokens-example.json +13 -0
  130. package/templates/brand-voice-example.md +22 -0
  131. package/templates/constraints.md +25 -0
  132. package/templates/design-tool-setup-stub.md +59 -0
  133. package/dist/commands/archive.d.ts +0 -3
  134. package/dist/commands/archive.d.ts.map +0 -1
  135. package/dist/commands/archive.js +0 -22
  136. package/dist/commands/archive.js.map +0 -1
  137. package/dist/commands/log.d.ts +0 -3
  138. package/dist/commands/log.d.ts.map +0 -1
  139. package/dist/commands/log.js +0 -15
  140. package/dist/commands/log.js.map +0 -1
  141. package/dist/commands/map.d.ts +0 -3
  142. package/dist/commands/map.d.ts.map +0 -1
  143. package/dist/commands/map.js +0 -17
  144. package/dist/commands/map.js.map +0 -1
  145. package/dist/core/archive.d.ts +0 -9
  146. package/dist/core/archive.d.ts.map +0 -1
  147. package/dist/core/archive.js +0 -92
  148. package/dist/core/archive.js.map +0 -1
  149. package/dist/core/log.d.ts +0 -8
  150. package/dist/core/log.d.ts.map +0 -1
  151. package/dist/core/log.js +0 -150
  152. package/dist/core/log.js.map +0 -1
  153. package/dist/core/map.d.ts +0 -9
  154. package/dist/core/map.d.ts.map +0 -1
  155. package/dist/core/map.js +0 -302
  156. package/dist/core/map.js.map +0 -1
  157. package/templates/dupignore +0 -93
  158. package/templates/mapignore +0 -58
  159. package/templates/mapkeys +0 -65
package/dist/core/log.js DELETED
@@ -1,150 +0,0 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import chalk from "chalk";
4
- import { simpleGit } from "simple-git";
5
- import { findProjectRoot } from "../utils/paths.js";
6
- export async function generateLog(options) {
7
- const root = await findProjectRoot();
8
- const archiveDir = join(root, ".grimoire", "archive");
9
- let entries;
10
- try {
11
- entries = await readArchiveEntries(archiveDir);
12
- }
13
- catch {
14
- throw new Error("No archive found. No changes have been archived yet.");
15
- }
16
- if (entries.length === 0) {
17
- console.log(chalk.dim("No archived changes found."));
18
- return;
19
- }
20
- // Filter by date range if tags/dates provided
21
- if (options.from || options.to) {
22
- const fromDate = options.from
23
- ? await resolveDate(root, options.from)
24
- : "";
25
- const toDate = options.to
26
- ? await resolveDate(root, options.to)
27
- : "9999-99-99";
28
- entries = entries.filter((e) => e.date >= fromDate && e.date <= toDate);
29
- }
30
- // Sort newest first
31
- entries.sort((a, b) => b.date.localeCompare(a.date));
32
- if (options.json) {
33
- console.log(JSON.stringify(entries, null, 2));
34
- return;
35
- }
36
- // Pretty output
37
- console.log(chalk.bold("Grimoire Change Log\n"));
38
- let currentMonth = "";
39
- for (const entry of entries) {
40
- const month = entry.date.slice(0, 7); // YYYY-MM
41
- if (month !== currentMonth) {
42
- currentMonth = month;
43
- console.log(chalk.bold.underline(`\n${formatMonth(month)}\n`));
44
- }
45
- console.log(` ${chalk.dim(entry.date)} ${chalk.cyan(entry.changeId)}`);
46
- console.log(` ${entry.summary}`);
47
- if (entry.features.length > 0) {
48
- console.log(` ${chalk.dim("Features:")} ${entry.features.join(", ")}`);
49
- }
50
- if (entry.decisions.length > 0) {
51
- console.log(` ${chalk.dim("Decisions:")} ${entry.decisions.join(", ")}`);
52
- }
53
- if (entry.scenarios.length > 0) {
54
- const display = entry.scenarios.length <= 3
55
- ? entry.scenarios.join(", ")
56
- : `${entry.scenarios.slice(0, 3).join(", ")} +${entry.scenarios.length - 3} more`;
57
- console.log(` ${chalk.dim("Scenarios:")} ${display}`);
58
- }
59
- console.log();
60
- }
61
- console.log(chalk.dim(`${entries.length} change(s) total`));
62
- }
63
- async function readArchiveEntries(archiveDir) {
64
- const dirs = await readdir(archiveDir, { withFileTypes: true });
65
- const entries = [];
66
- for (const dir of dirs) {
67
- if (!dir.isDirectory())
68
- continue;
69
- // Directory name format: YYYY-MM-DD-<change-id>
70
- const match = dir.name.match(/^(\d{4}-\d{2}-\d{2})-(.+)$/);
71
- if (!match)
72
- continue;
73
- const [, date, changeId] = match;
74
- const manifestPath = join(archiveDir, dir.name, "manifest.md");
75
- let manifest;
76
- try {
77
- manifest = await readFile(manifestPath, "utf-8");
78
- }
79
- catch {
80
- continue;
81
- }
82
- entries.push({
83
- date,
84
- changeId,
85
- ...parseManifest(manifest),
86
- });
87
- }
88
- return entries;
89
- }
90
- function parseManifest(content) {
91
- // Extract title: # Change: <summary>
92
- const titleMatch = content.match(/^#\s+Change:\s*(.+)$/m);
93
- const summary = titleMatch ? titleMatch[1].trim() : "(no summary)";
94
- // Extract why section
95
- const whyMatch = content.match(/^##\s+Why\s*\n([\s\S]*?)(?=^##|\Z)/m);
96
- const why = whyMatch ? whyMatch[1].trim() : "";
97
- // Extract feature changes
98
- const features = [];
99
- const featurePattern = /\*\*(?:ADDED|MODIFIED|REMOVED)\*\*\s+`([^`]+\.feature)`/g;
100
- let m;
101
- while ((m = featurePattern.exec(content)) !== null) {
102
- features.push(m[1]);
103
- }
104
- // Extract decisions
105
- const decisions = [];
106
- const decisionPattern = /\*\*(?:ADDED|MODIFIED|SUPERSEDED)\*\*\s+`(\d{4}-[^`]+\.md)`/g;
107
- while ((m = decisionPattern.exec(content)) !== null) {
108
- decisions.push(m[1]);
109
- }
110
- // Extract scenarios
111
- const scenarios = [];
112
- const scenarioPattern = /"([^"]+)"/g;
113
- const scenarioSection = content.match(/^##\s+Scenarios\s+(?:Added|Modified)\s*\n([\s\S]*?)(?=^##|\Z)/gm);
114
- if (scenarioSection) {
115
- for (const section of scenarioSection) {
116
- while ((m = scenarioPattern.exec(section)) !== null) {
117
- scenarios.push(m[1]);
118
- }
119
- }
120
- }
121
- return { summary, why, features, decisions, scenarios };
122
- }
123
- /**
124
- * Resolve a git tag or date string to an ISO date.
125
- * If it looks like a date already, return it. Otherwise try git tag.
126
- */
127
- async function resolveDate(root, ref) {
128
- if (/^\d{4}-\d{2}-\d{2}$/.test(ref)) {
129
- return ref;
130
- }
131
- // Try as a git tag
132
- try {
133
- const git = simpleGit(root);
134
- const stdout = await git.raw(["log", "-1", "--format=%aI", ref]);
135
- return stdout.trim().split("T")[0];
136
- }
137
- catch {
138
- console.error(chalk.yellow(`Warning: Could not resolve "${ref}" as a git tag or date. Using as-is.`));
139
- return ref;
140
- }
141
- }
142
- function formatMonth(yyyyMm) {
143
- const [year, month] = yyyyMm.split("-");
144
- const months = [
145
- "January", "February", "March", "April", "May", "June",
146
- "July", "August", "September", "October", "November", "December",
147
- ];
148
- return `${months[parseInt(month, 10) - 1]} ${year}`;
149
- }
150
- //# sourceMappingURL=log.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/core/log.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- interface MapOptions {
2
- json: boolean;
3
- refresh: boolean;
4
- maxDepth: number;
5
- duplicates: boolean;
6
- }
7
- export declare function generateMap(options: MapOptions): Promise<void>;
8
- export {};
9
- //# sourceMappingURL=map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAiGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KpE"}
package/dist/core/map.js DELETED
@@ -1,302 +0,0 @@
1
- import { readdir, readFile, writeFile, mkdir } from "node:fs/promises";
2
- import { join, relative, extname, basename, dirname } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { execFile } from "node:child_process";
5
- import { promisify } from "node:util";
6
- import chalk from "chalk";
7
- import { findProjectRoot } from "../utils/paths.js";
8
- const execFileAsync = promisify(execFile);
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- 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
- */
15
- function parseIgnoreFile(content) {
16
- const patterns = new Set();
17
- for (const line of content.split("\n")) {
18
- const trimmed = line.trim();
19
- if (trimmed && !trimmed.startsWith("#")) {
20
- patterns.add(trimmed);
21
- }
22
- }
23
- return patterns;
24
- }
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
- function parseKeyFilesConfig(content) {
31
- const keys = {};
32
- for (const line of content.split("\n")) {
33
- const trimmed = line.trim();
34
- if (!trimmed || trimmed.startsWith("#"))
35
- continue;
36
- const eqIndex = trimmed.indexOf("=");
37
- if (eqIndex === -1)
38
- continue;
39
- const filename = trimmed.slice(0, eqIndex).trim();
40
- const type = trimmed.slice(eqIndex + 1).trim();
41
- if (filename && type) {
42
- keys[filename] = type;
43
- }
44
- }
45
- return keys;
46
- }
47
- /**
48
- * Load config from project-level file, falling back to bundled template.
49
- */
50
- async function loadConfigFile(root, filename) {
51
- // Project-level override: .grimoire/<filename>
52
- const projectPath = join(root, ".grimoire", filename);
53
- try {
54
- return await readFile(projectPath, "utf-8");
55
- }
56
- catch {
57
- // Fall back to bundled template
58
- const templatePath = join(PACKAGE_ROOT, "templates", filename);
59
- return await readFile(templatePath, "utf-8");
60
- }
61
- }
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
109
- console.log(chalk.bold("\nProject Map\n"));
110
- // Directory tree
111
- console.log(chalk.bold("Structure:"));
112
- for (const dir of directories) {
113
- const depth = dir.path === "." ? 0 : dir.path.split("/").length;
114
- const padding = " ".repeat(depth);
115
- const extSummary = Object.entries(dir.extensions)
116
- .sort((a, b) => b[1] - a[1])
117
- .slice(0, 3)
118
- .map(([ext, count]) => `${count} ${ext}`)
119
- .join(", ");
120
- const keyFileNote = dir.keyFiles.length > 0
121
- ? chalk.dim(` [${dir.keyFiles.join(", ")}]`)
122
- : "";
123
- console.log(`${padding}${chalk.cyan(dir.path + "/")} ${chalk.dim(extSummary)}${keyFileNote}`);
124
- }
125
- // Key files
126
- if (keyFiles.length > 0) {
127
- console.log(chalk.bold("\nKey Files:"));
128
- for (const kf of keyFiles) {
129
- console.log(` ${kf.path} ${chalk.dim(`(${kf.type})`)}`);
130
- }
131
- }
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
- }
148
- }
149
- // Diff against existing docs
150
- 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
- }
166
- }
167
- else {
168
- console.log(chalk.dim(`\n${directories.length} directories, ${keyFiles.length} key files found.`));
169
- console.log(chalk.dim("Run /grimoire:discover to generate area docs from this snapshot."));
170
- }
171
- // Write snapshot for the skill to consume
172
- await mkdir(docsDir, { recursive: true });
173
- await writeFile(join(docsDir, ".snapshot.json"), JSON.stringify(snapshot, null, 2));
174
- console.log(chalk.dim(`\nSnapshot saved to .grimoire/docs/.snapshot.json`));
175
- }
176
- async function scanDirectory(fullPath, root, depth, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns) {
177
- if (depth > maxDepth)
178
- return;
179
- 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")
186
- return;
187
- let entries;
188
- try {
189
- entries = await readdir(fullPath, { withFileTypes: true });
190
- }
191
- catch {
192
- return;
193
- }
194
- const files = entries.filter((e) => e.isFile());
195
- const subdirs = entries
196
- .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
215
- 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
- });
223
- }
224
- for (const subdir of subdirs) {
225
- await scanDirectory(join(fullPath, subdir.name), root, depth + 1, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns);
226
- }
227
- }
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
- async function loadExistingAreas(docsDir) {
289
- try {
290
- const indexContent = await readFile(join(docsDir, "index.yml"), "utf-8");
291
- const areas = [];
292
- const dirMatches = indexContent.matchAll(/directory:\s*(.+)/g);
293
- for (const match of dirMatches) {
294
- areas.push(match[1].trim());
295
- }
296
- return areas;
297
- }
298
- catch {
299
- return [];
300
- }
301
- }
302
- //# sourceMappingURL=map.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"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"}
@@ -1,93 +0,0 @@
1
- # Glob patterns excluded from duplicate detection (jscpd).
2
- # Matched against paths relative to project root. One glob per line.
3
- # Lines starting with # are comments.
4
- #
5
- # This file is independent of .grimoire/mapignore (structure scan).
6
- # Edit here to silence duplicate-detection noise without hiding
7
- # directories from the project map.
8
-
9
- # Version control
10
- **/.git/**
11
-
12
- # Dependencies
13
- **/node_modules/**
14
- **/.venv/**
15
- **/venv/**
16
- **/env/**
17
- **/vendor/**
18
- **/bower_components/**
19
- **/third_party/**
20
- **/external/**
21
- **/libs/**
22
- **/Pods/**
23
- **/Carthage/**
24
- **/site-packages/**
25
- **/deps/**
26
- **/.pnpm-store/**
27
- **/.yarn/**
28
-
29
- # Build output
30
- **/dist/**
31
- **/build/**
32
- **/.next/**
33
- **/.nuxt/**
34
- **/out/**
35
- **/target/**
36
- **/.gradle/**
37
- **/bin/**
38
- **/obj/**
39
-
40
- # Caches
41
- **/__pycache__/**
42
- **/.pytest_cache/**
43
- **/.mypy_cache/**
44
- **/.ruff_cache/**
45
- **/.tox/**
46
- **/.cache/**
47
- **/.parcel-cache/**
48
- **/.turbo/**
49
-
50
- # Coverage and test artifacts
51
- **/coverage/**
52
- **/.nyc_output/**
53
- **/htmlcov/**
54
-
55
- # Generated code — Protobuf, gRPC
56
- **/*_pb2.py
57
- **/*_pb2_grpc.py
58
- **/*.pb.go
59
- **/*.pb.cc
60
- **/*.pb.h
61
- **/*_pb.js
62
- **/*_pb.d.ts
63
- **/*.pb.dart
64
-
65
- # Generated code — OpenAPI / Swagger clients
66
- **/generated/**
67
- **/*_generated.*
68
- **/*.generated.*
69
- **/openapi/**
70
- **/swagger/**
71
-
72
- # Generated code — GraphQL
73
- **/__generated__/**
74
- **/graphql.schema.json
75
-
76
- # Minified / bundled assets
77
- **/*.min.js
78
- **/*.min.css
79
- **/*.bundle.js
80
- **/*.chunk.js
81
-
82
- # Database migrations (often near-duplicate boilerplate)
83
- **/migrations/**
84
- **/alembic/versions/**
85
-
86
- # Lock files and compiled artifacts
87
- **/*.lock
88
- **/*.map
89
-
90
- # Snapshots / fixtures (duplication here is intentional)
91
- **/__snapshots__/**
92
- **/fixtures/**
93
- **/testdata/**
@@ -1,58 +0,0 @@
1
- # Directories and patterns to ignore when scanning the codebase
2
- # Uses glob-style patterns, one per line
3
- # Lines starting with # are comments
4
-
5
- # Version control
6
- .git
7
-
8
- # Dependencies
9
- node_modules
10
- .venv
11
- venv
12
- env
13
- vendor
14
- bower_components
15
- third_party
16
- external
17
- Pods
18
- Carthage
19
- site-packages
20
- .pnpm-store
21
- .yarn
22
-
23
- # Build output
24
- dist
25
- build
26
- .next
27
- .nuxt
28
- out
29
- target
30
- .gradle
31
- obj
32
-
33
- # Caches
34
- __pycache__
35
- .pytest_cache
36
- .mypy_cache
37
- .ruff_cache
38
- .tox
39
- .cache
40
- .parcel-cache
41
- .turbo
42
-
43
- # Coverage and test artifacts
44
- coverage
45
- .nyc_output
46
- htmlcov
47
-
48
- # IDE and OS
49
- .idea
50
- .vscode
51
- .DS_Store
52
-
53
- # Package metadata
54
- *.egg-info
55
- .eggs
56
-
57
- # Containers
58
- .docker