@kiwidata/grimoire 0.1.4 → 0.1.6

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 (112) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/AGENTS.md +21 -25
  3. package/LICENSE +36 -0
  4. package/README.md +86 -61
  5. package/dist/cli/index.js +2 -43
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/program.d.ts +4 -0
  8. package/dist/cli/program.d.ts.map +1 -0
  9. package/dist/cli/program.js +45 -0
  10. package/dist/cli/program.js.map +1 -0
  11. package/dist/commands/configure.d.ts.map +1 -1
  12. package/dist/commands/configure.js +2 -1
  13. package/dist/commands/configure.js.map +1 -1
  14. package/dist/core/check.d.ts.map +1 -1
  15. package/dist/core/check.js +47 -11
  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 +2 -2
  19. package/dist/core/ci.js.map +1 -1
  20. package/dist/core/doc-style.d.ts.map +1 -1
  21. package/dist/core/doc-style.js +76 -0
  22. package/dist/core/doc-style.js.map +1 -1
  23. package/dist/core/docs.d.ts.map +1 -1
  24. package/dist/core/docs.js +93 -74
  25. package/dist/core/docs.js.map +1 -1
  26. package/dist/core/health.d.ts +6 -0
  27. package/dist/core/health.d.ts.map +1 -1
  28. package/dist/core/health.js +78 -21
  29. package/dist/core/health.js.map +1 -1
  30. package/dist/core/hooks.d.ts.map +1 -1
  31. package/dist/core/hooks.js +17 -19
  32. package/dist/core/hooks.js.map +1 -1
  33. package/dist/core/list.d.ts.map +1 -1
  34. package/dist/core/list.js +4 -7
  35. package/dist/core/list.js.map +1 -1
  36. package/dist/core/pr.d.ts.map +1 -1
  37. package/dist/core/pr.js +0 -8
  38. package/dist/core/pr.js.map +1 -1
  39. package/dist/core/risk-register.d.ts +17 -0
  40. package/dist/core/risk-register.d.ts.map +1 -0
  41. package/dist/core/risk-register.js +73 -0
  42. package/dist/core/risk-register.js.map +1 -0
  43. package/dist/core/shared-setup.d.ts.map +1 -1
  44. package/dist/core/shared-setup.js +5 -4
  45. package/dist/core/shared-setup.js.map +1 -1
  46. package/dist/core/status.d.ts.map +1 -1
  47. package/dist/core/status.js +3 -3
  48. package/dist/core/status.js.map +1 -1
  49. package/dist/core/trace.d.ts.map +1 -1
  50. package/dist/core/trace.js +37 -35
  51. package/dist/core/trace.js.map +1 -1
  52. package/dist/core/update.d.ts.map +1 -1
  53. package/dist/core/update.js +1 -10
  54. package/dist/core/update.js.map +1 -1
  55. package/dist/index.d.ts +0 -3
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +0 -3
  58. package/dist/index.js.map +1 -1
  59. package/package.json +19 -2
  60. package/skills/grimoire-apply/SKILL.md +40 -37
  61. package/skills/grimoire-audit/SKILL.md +4 -1
  62. package/skills/grimoire-bug/SKILL.md +7 -3
  63. package/skills/grimoire-commit/SKILL.md +1 -1
  64. package/skills/grimoire-design/SKILL.md +3 -3
  65. package/skills/grimoire-discover/SKILL.md +77 -110
  66. package/skills/grimoire-draft/SKILL.md +55 -18
  67. package/skills/grimoire-plan/SKILL.md +58 -52
  68. package/skills/grimoire-pr/SKILL.md +7 -8
  69. package/skills/grimoire-pr-review/SKILL.md +2 -1
  70. package/skills/grimoire-refactor/SKILL.md +3 -3
  71. package/skills/grimoire-review/SKILL.md +13 -1
  72. package/skills/grimoire-verify/SKILL.md +19 -7
  73. package/skills/grimoire-vuln-remediate/SKILL.md +107 -0
  74. package/skills/grimoire-vuln-triage/SKILL.md +109 -0
  75. package/skills/references/artifact-map.md +44 -0
  76. package/skills/references/code-quality.md +41 -9
  77. package/skills/references/container-scan-triage.md +102 -0
  78. package/skills/references/dependency-vuln-triage.md +236 -0
  79. package/skills/references/principles.md +82 -0
  80. package/skills/references/refactor-scan-categories.md +2 -2
  81. package/skills/references/review-personas.md +13 -6
  82. package/skills/references/test-baseline.md +55 -0
  83. package/skills/references/testing-contracts.md +1 -1
  84. package/templates/accepted-risks.yml +47 -0
  85. package/templates/constraints.md +25 -0
  86. package/dist/commands/archive.d.ts +0 -3
  87. package/dist/commands/archive.d.ts.map +0 -1
  88. package/dist/commands/archive.js +0 -22
  89. package/dist/commands/archive.js.map +0 -1
  90. package/dist/commands/log.d.ts +0 -3
  91. package/dist/commands/log.d.ts.map +0 -1
  92. package/dist/commands/log.js +0 -15
  93. package/dist/commands/log.js.map +0 -1
  94. package/dist/commands/map.d.ts +0 -3
  95. package/dist/commands/map.d.ts.map +0 -1
  96. package/dist/commands/map.js +0 -16
  97. package/dist/commands/map.js.map +0 -1
  98. package/dist/core/archive.d.ts +0 -9
  99. package/dist/core/archive.d.ts.map +0 -1
  100. package/dist/core/archive.js +0 -81
  101. package/dist/core/archive.js.map +0 -1
  102. package/dist/core/log.d.ts +0 -8
  103. package/dist/core/log.d.ts.map +0 -1
  104. package/dist/core/log.js +0 -140
  105. package/dist/core/log.js.map +0 -1
  106. package/dist/core/map.d.ts +0 -22
  107. package/dist/core/map.d.ts.map +0 -1
  108. package/dist/core/map.js +0 -365
  109. package/dist/core/map.js.map +0 -1
  110. package/templates/dupignore +0 -93
  111. package/templates/mapignore +0 -58
  112. package/templates/mapkeys +0 -65
@@ -1 +0,0 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/core/log.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- export interface MapOptions {
2
- duplicates: boolean;
3
- }
4
- interface DriftItem {
5
- conventionsFile: string;
6
- path: string;
7
- context: string;
8
- }
9
- export declare class McpRequiredError extends Error {
10
- constructor(message: string);
11
- }
12
- export declare function extractPathRules(content: string, filename: string): DriftItem[];
13
- export declare function runMap(options: MapOptions): Promise<void>;
14
- interface LegacyMapOptions {
15
- json: boolean;
16
- refresh: boolean;
17
- maxDepth: number;
18
- duplicates: boolean;
19
- }
20
- export declare function generateMap(options: LegacyMapOptions): Promise<void>;
21
- export {};
22
- //# sourceMappingURL=map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAcD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAuB/E;AA2CD,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/D;AAyHD,UAAU,gBAAgB;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAgHD,wBAAsB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC1E"}
package/dist/core/map.js DELETED
@@ -1,365 +0,0 @@
1
- import { readdir, readFile, writeFile, mkdir, access, } from "node:fs/promises";
2
- import { join, relative, resolve, 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
- import { loadConfig } from "../utils/config.js";
9
- const execFileAsync = promisify(execFile);
10
- const __dirname = dirname(fileURLToPath(import.meta.url));
11
- const PACKAGE_ROOT = join(__dirname, "..", "..");
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
- }
188
- function parseIgnoreFile(content) {
189
- const patterns = new Set();
190
- for (const line of content.split("\n")) {
191
- const trimmed = line.trim();
192
- if (trimmed && !trimmed.startsWith("#")) {
193
- patterns.add(trimmed);
194
- }
195
- }
196
- return patterns;
197
- }
198
- function parseKeyFilesConfig(content) {
199
- const keys = {};
200
- for (const line of content.split("\n")) {
201
- const trimmed = line.trim();
202
- if (!trimmed || trimmed.startsWith("#"))
203
- continue;
204
- const eqIndex = trimmed.indexOf("=");
205
- if (eqIndex === -1)
206
- continue;
207
- const filename = trimmed.slice(0, eqIndex).trim();
208
- const type = trimmed.slice(eqIndex + 1).trim();
209
- if (filename && type) {
210
- keys[filename] = type;
211
- }
212
- }
213
- return keys;
214
- }
215
- async function loadConfigFile(root, filename) {
216
- const projectPath = join(root, ".grimoire", filename);
217
- try {
218
- return await readFile(projectPath, "utf-8");
219
- }
220
- catch {
221
- const templatePath = join(PACKAGE_ROOT, "templates", filename);
222
- return await readFile(templatePath, "utf-8");
223
- }
224
- }
225
- function printMapStructure(directories, keyFiles) {
226
- console.log(chalk.bold("\nProject Map\n"));
227
- console.log(chalk.bold("Structure:"));
228
- for (const dir of directories) {
229
- const depth = dir.path === "." ? 0 : dir.path.split("/").length;
230
- const padding = " ".repeat(depth);
231
- const extSummary = Object.entries(dir.extensions)
232
- .sort((a, b) => b[1] - a[1])
233
- .slice(0, 3)
234
- .map(([ext, count]) => `${count} ${ext}`)
235
- .join(", ");
236
- const keyFileNote = dir.keyFiles.length > 0 ? chalk.dim(` [${dir.keyFiles.join(", ")}]`) : "";
237
- console.log(`${padding}${chalk.cyan(dir.path + "/")} ${chalk.dim(extSummary)}${keyFileNote}`);
238
- }
239
- if (keyFiles.length > 0) {
240
- console.log(chalk.bold("\nKey Files:"));
241
- for (const kf of keyFiles)
242
- console.log(` ${kf.path} ${chalk.dim(`(${kf.type})`)}`);
243
- }
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;
293
- }
294
- printMapStructure(directories, keyFiles);
295
- if (duplicates)
296
- printDuplicateReport(duplicates);
297
- if (options.refresh) {
298
- printRefreshReport(undocumented, removed);
299
- }
300
- else {
301
- console.log(chalk.dim(`\n${directories.length} directories, ${keyFiles.length} key files found.`));
302
- console.log(chalk.dim("Run /grimoire:discover to generate area docs from this snapshot."));
303
- }
304
- await mkdir(docsDir, { recursive: true });
305
- await writeFile(join(docsDir, ".snapshot.json"), JSON.stringify(snapshot, null, 2));
306
- console.log(chalk.dim(`\nSnapshot saved to .grimoire/docs/.snapshot.json`));
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
- }
326
- async function scanDirectory(fullPath, root, depth, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns) {
327
- if (depth > maxDepth)
328
- return;
329
- const relPath = relative(root, fullPath) || ".";
330
- if (shouldSkipDir(depth, basename(fullPath), ignorePatterns))
331
- return;
332
- let entries;
333
- try {
334
- entries = await readdir(fullPath, { withFileTypes: true });
335
- }
336
- catch {
337
- return;
338
- }
339
- const files = entries.filter((e) => e.isFile());
340
- const subdirs = entries
341
- .filter((e) => e.isDirectory())
342
- .filter((e) => !ignorePatterns.has(e.name) && (!e.name.startsWith(".") || e.name === ".grimoire"));
343
- const { extensions, dirKeyFiles } = processFiles(files, relPath, keyFilePatterns, keyFiles);
344
- if (files.length > 0 || depth <= 1) {
345
- directories.push({ path: relPath, fileCount: files.length, extensions, keyFiles: dirKeyFiles, subdirs: subdirs.map((s) => s.name) });
346
- }
347
- for (const subdir of subdirs) {
348
- await scanDirectory(join(fullPath, subdir.name), root, depth + 1, maxDepth, directories, keyFiles, ignorePatterns, keyFilePatterns);
349
- }
350
- }
351
- async function loadExistingAreas(docsDir) {
352
- try {
353
- const indexContent = await readFile(join(docsDir, "index.yml"), "utf-8");
354
- const areas = [];
355
- const dirMatches = indexContent.matchAll(/directory:\s*(.+)/g);
356
- for (const match of dirMatches) {
357
- areas.push(match[1].trim());
358
- }
359
- return areas;
360
- }
361
- catch {
362
- return [];
363
- }
364
- }
365
- //# 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
package/templates/mapkeys DELETED
@@ -1,65 +0,0 @@
1
- # Key files that indicate what a directory is for
2
- # Format: filename = type
3
- # Lines starting with # are comments
4
-
5
- # Node / JavaScript / TypeScript
6
- package.json = node-package
7
- tsconfig.json = typescript-config
8
- index.ts = module-entry
9
- index.js = module-entry
10
- routes.ts = api-routes
11
- routes.js = api-routes
12
- middleware.ts = middleware
13
- middleware.js = middleware
14
- eslint.config.js = linter-config
15
- .eslintrc.js = linter-config
16
- .eslintrc.json = linter-config
17
- jest.config.js = test-config
18
- jest.config.ts = test-config
19
- vitest.config.ts = test-config
20
-
21
- # Python
22
- pyproject.toml = python-package
23
- setup.py = python-package
24
- setup.cfg = python-config
25
- requirements.txt = python-deps
26
- Pipfile = python-deps
27
- __init__.py = python-module
28
- conftest.py = pytest-fixtures
29
- pytest.ini = test-config
30
-
31
- # Django
32
- urls.py = django-urls
33
- views.py = django-views
34
- models.py = django-models
35
- serializers.py = drf-serializers
36
- admin.py = django-admin
37
- apps.py = django-app
38
- settings.py = django-settings
39
- manage.py = django-management
40
- middleware.py = middleware
41
-
42
- # FastAPI / Flask
43
- main.py = app-entry
44
- app.py = app-entry
45
-
46
- # Background tasks
47
- tasks.py = background-tasks
48
- celery.py = task-queue
49
-
50
- # Database
51
- alembic.ini = db-migrations
52
- schema.prisma = db-schema
53
-
54
- # Build / Deploy
55
- Dockerfile = container
56
- docker-compose.yml = container-orchestration
57
- docker-compose.yaml = container-orchestration
58
- Makefile = build-system
59
- Procfile = deployment
60
-
61
- # Go
62
- go.mod = go-module
63
-
64
- # Rust
65
- Cargo.toml = rust-package