mindlore 0.1.0 → 0.2.1

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 (98) hide show
  1. package/README.md +13 -5
  2. package/SCHEMA.md +60 -4
  3. package/dist/scripts/init.d.ts +10 -0
  4. package/dist/scripts/init.d.ts.map +1 -0
  5. package/dist/scripts/init.js +375 -0
  6. package/dist/scripts/init.js.map +1 -0
  7. package/dist/scripts/lib/constants.d.ts +29 -0
  8. package/dist/scripts/lib/constants.d.ts.map +1 -0
  9. package/dist/scripts/lib/constants.js +58 -0
  10. package/dist/scripts/lib/constants.js.map +1 -0
  11. package/dist/scripts/mindlore-fts5-index.d.ts +9 -0
  12. package/dist/scripts/mindlore-fts5-index.d.ts.map +1 -0
  13. package/dist/scripts/mindlore-fts5-index.js +89 -0
  14. package/dist/scripts/mindlore-fts5-index.js.map +1 -0
  15. package/dist/scripts/mindlore-fts5-search.d.ts +10 -0
  16. package/dist/scripts/mindlore-fts5-search.d.ts.map +1 -0
  17. package/dist/scripts/mindlore-fts5-search.js +108 -0
  18. package/dist/scripts/mindlore-fts5-search.js.map +1 -0
  19. package/dist/scripts/mindlore-health-check.d.ts +10 -0
  20. package/dist/scripts/mindlore-health-check.d.ts.map +1 -0
  21. package/dist/scripts/mindlore-health-check.js +337 -0
  22. package/dist/scripts/mindlore-health-check.js.map +1 -0
  23. package/dist/scripts/uninstall.d.ts +10 -0
  24. package/dist/scripts/uninstall.d.ts.map +1 -0
  25. package/dist/scripts/uninstall.js +143 -0
  26. package/dist/scripts/uninstall.js.map +1 -0
  27. package/dist/tests/compounding.test.d.ts +8 -0
  28. package/dist/tests/compounding.test.d.ts.map +1 -0
  29. package/dist/tests/compounding.test.js +51 -0
  30. package/dist/tests/compounding.test.js.map +1 -0
  31. package/dist/tests/decision.test.d.ts +2 -0
  32. package/dist/tests/decision.test.d.ts.map +1 -0
  33. package/dist/tests/decision.test.js +61 -0
  34. package/dist/tests/decision.test.js.map +1 -0
  35. package/dist/tests/dedup.test.d.ts +2 -0
  36. package/dist/tests/dedup.test.d.ts.map +1 -0
  37. package/dist/tests/dedup.test.js +74 -0
  38. package/dist/tests/dedup.test.js.map +1 -0
  39. package/dist/tests/frontmatter.test.d.ts +2 -0
  40. package/dist/tests/frontmatter.test.d.ts.map +1 -0
  41. package/dist/tests/frontmatter.test.js +90 -0
  42. package/dist/tests/frontmatter.test.js.map +1 -0
  43. package/dist/tests/fts5.test.d.ts +2 -0
  44. package/dist/tests/fts5.test.d.ts.map +1 -0
  45. package/dist/tests/fts5.test.js +95 -0
  46. package/dist/tests/fts5.test.js.map +1 -0
  47. package/dist/tests/helpers/db.d.ts +7 -0
  48. package/dist/tests/helpers/db.d.ts.map +1 -0
  49. package/dist/tests/helpers/db.js +46 -0
  50. package/dist/tests/helpers/db.js.map +1 -0
  51. package/dist/tests/hook-smoke.test.d.ts +2 -0
  52. package/dist/tests/hook-smoke.test.d.ts.map +1 -0
  53. package/dist/tests/hook-smoke.test.js +58 -0
  54. package/dist/tests/hook-smoke.test.js.map +1 -0
  55. package/dist/tests/init.test.d.ts +2 -0
  56. package/dist/tests/init.test.d.ts.map +1 -0
  57. package/dist/tests/init.test.js +85 -0
  58. package/dist/tests/init.test.js.map +1 -0
  59. package/dist/tests/log.test.d.ts +2 -0
  60. package/dist/tests/log.test.d.ts.map +1 -0
  61. package/dist/tests/log.test.js +68 -0
  62. package/dist/tests/log.test.js.map +1 -0
  63. package/dist/tests/read-guard.test.d.ts +2 -0
  64. package/dist/tests/read-guard.test.d.ts.map +1 -0
  65. package/dist/tests/read-guard.test.js +69 -0
  66. package/dist/tests/read-guard.test.js.map +1 -0
  67. package/dist/tests/search-hook.test.d.ts +2 -0
  68. package/dist/tests/search-hook.test.d.ts.map +1 -0
  69. package/dist/tests/search-hook.test.js +108 -0
  70. package/dist/tests/search-hook.test.js.map +1 -0
  71. package/dist/tests/session-focus.test.d.ts +2 -0
  72. package/dist/tests/session-focus.test.d.ts.map +1 -0
  73. package/dist/tests/session-focus.test.js +71 -0
  74. package/dist/tests/session-focus.test.js.map +1 -0
  75. package/dist/tests/uninstall.test.d.ts +2 -0
  76. package/dist/tests/uninstall.test.d.ts.map +1 -0
  77. package/dist/tests/uninstall.test.js +98 -0
  78. package/dist/tests/uninstall.test.js.map +1 -0
  79. package/hooks/lib/mindlore-common.cjs +36 -2
  80. package/hooks/mindlore-decision-detector.cjs +51 -0
  81. package/hooks/mindlore-fts5-sync.cjs +4 -18
  82. package/hooks/mindlore-index.cjs +4 -18
  83. package/hooks/mindlore-read-guard.cjs +62 -0
  84. package/hooks/mindlore-search.cjs +5 -18
  85. package/hooks/mindlore-session-end.cjs +74 -8
  86. package/package.json +19 -7
  87. package/plugin.json +26 -2
  88. package/skills/mindlore-decide/SKILL.md +71 -0
  89. package/skills/mindlore-ingest/SKILL.md +13 -2
  90. package/skills/mindlore-log/SKILL.md +79 -0
  91. package/skills/mindlore-query/SKILL.md +125 -0
  92. package/templates/SCHEMA.md +60 -4
  93. package/scripts/init.cjs +0 -450
  94. package/scripts/lib/constants.cjs +0 -49
  95. package/scripts/mindlore-fts5-index.cjs +0 -112
  96. package/scripts/mindlore-fts5-search.cjs +0 -119
  97. package/scripts/mindlore-health-check.cjs +0 -336
  98. package/scripts/uninstall.cjs +0 -186
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * mindlore-fts5-index — Full re-index of .mindlore/ into FTS5 database.
5
+ *
6
+ * Scans all .md files, computes SHA256 content-hash, skips unchanged files.
7
+ * Usage: node dist/scripts/mindlore-fts5-index.js [path-to-mindlore-dir]
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const constants_js_1 = require("./lib/constants.js");
16
+ const { sha256, getAllMdFiles, openDatabase, parseFrontmatter, extractFtsMetadata, SQL_FTS_INSERT, } = require((0, constants_js_1.resolveHookCommon)(__dirname));
17
+ // ── Main ───────────────────────────────────────────────────────────────
18
+ function main() {
19
+ const baseDir = process.argv[2] ?? path_1.default.join(process.cwd(), '.mindlore');
20
+ const dbPath = path_1.default.join(baseDir, constants_js_1.DB_NAME);
21
+ if (!fs_1.default.existsSync(dbPath)) {
22
+ console.error(' Database not found. Run: npx mindlore init');
23
+ process.exit(1);
24
+ }
25
+ const db = openDatabase(dbPath);
26
+ if (!db) {
27
+ console.error(' better-sqlite3 not installed. Run: npm install better-sqlite3');
28
+ process.exit(1);
29
+ }
30
+ const getHash = db.prepare('SELECT content_hash FROM file_hashes WHERE path = ?');
31
+ const upsertHash = db.prepare(`
32
+ INSERT INTO file_hashes (path, content_hash, last_indexed)
33
+ VALUES (?, ?, ?)
34
+ ON CONFLICT(path) DO UPDATE SET
35
+ content_hash = excluded.content_hash,
36
+ last_indexed = excluded.last_indexed
37
+ `);
38
+ const deleteFts = db.prepare('DELETE FROM mindlore_fts WHERE path = ?');
39
+ const insertFts = db.prepare(SQL_FTS_INSERT);
40
+ const mdFiles = getAllMdFiles(baseDir);
41
+ let indexed = 0;
42
+ let skipped = 0;
43
+ let errors = 0;
44
+ const now = new Date().toISOString();
45
+ const transaction = db.transaction(() => {
46
+ for (const filePath of mdFiles) {
47
+ try {
48
+ const content = fs_1.default.readFileSync(filePath, 'utf8').replace(/\r\n/g, '\n');
49
+ const hash = sha256(content);
50
+ const existing = getHash.get(filePath);
51
+ if (existing && existing.content_hash === hash) {
52
+ skipped++;
53
+ continue;
54
+ }
55
+ const { meta, body } = parseFrontmatter(content);
56
+ const { slug, description, type, category, title, tags, quality } = extractFtsMetadata(meta, body, filePath, baseDir);
57
+ deleteFts.run(filePath);
58
+ insertFts.run(filePath, slug, description, type, category, title, body, tags, quality);
59
+ upsertHash.run(filePath, hash, now);
60
+ indexed++;
61
+ }
62
+ catch (err) {
63
+ const message = err instanceof Error ? err.message : String(err);
64
+ console.error(` Error indexing ${path_1.default.basename(filePath)}: ${message}`);
65
+ errors++;
66
+ }
67
+ }
68
+ });
69
+ transaction();
70
+ const allIndexed = db.prepare('SELECT path FROM file_hashes').all();
71
+ const existingPaths = new Set(mdFiles);
72
+ let removed = 0;
73
+ const deleteHash = db.prepare('DELETE FROM file_hashes WHERE path = ?');
74
+ const cleanupTransaction = db.transaction(() => {
75
+ for (const row of allIndexed) {
76
+ if (!existingPaths.has(row.path)) {
77
+ deleteFts.run(row.path);
78
+ deleteHash.run(row.path);
79
+ removed++;
80
+ }
81
+ }
82
+ });
83
+ cleanupTransaction();
84
+ db.close();
85
+ console.log(`\n FTS5 Index: ${indexed} indexed, ${skipped} unchanged, ${removed} removed, ${errors} errors\n`);
86
+ process.exit(errors > 0 ? 1 : 0);
87
+ }
88
+ main();
89
+ //# sourceMappingURL=mindlore-fts5-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-fts5-index.js","sourceRoot":"","sources":["../../scripts/mindlore-fts5-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mindlore-fts5-search — Search .mindlore/ knowledge base via FTS5.
4
+ *
5
+ * Usage: node dist/scripts/mindlore-fts5-search.js "query" [path-to-mindlore-dir]
6
+ *
7
+ * Returns top 3 results ranked by BM25 with file path and snippet.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=mindlore-fts5-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-fts5-search.d.ts","sourceRoot":"","sources":["../../scripts/mindlore-fts5-search.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * mindlore-fts5-search — Search .mindlore/ knowledge base via FTS5.
5
+ *
6
+ * Usage: node dist/scripts/mindlore-fts5-search.js "query" [path-to-mindlore-dir]
7
+ *
8
+ * Returns top 3 results ranked by BM25 with file path and snippet.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const constants_js_1 = require("./lib/constants.js");
17
+ const { openDatabase } = require((0, constants_js_1.resolveHookCommon)(__dirname));
18
+ const MAX_RESULTS = 3;
19
+ // ── Helpers ────────────────────────────────────────────────────────────
20
+ function extractHeadings(content, maxHeadings) {
21
+ const lines = content.split('\n');
22
+ const headings = [];
23
+ for (const line of lines) {
24
+ if (line.startsWith('#')) {
25
+ headings.push(line.replace(/^#+\s*/, '').trim());
26
+ if (headings.length >= maxHeadings)
27
+ break;
28
+ }
29
+ }
30
+ return headings;
31
+ }
32
+ function main() {
33
+ const query = process.argv[2];
34
+ if (!query) {
35
+ console.error('Usage: node mindlore-fts5-search.js "query" [mindlore-dir]');
36
+ process.exit(1);
37
+ }
38
+ const baseDir = process.argv[3] ?? path_1.default.join(process.cwd(), '.mindlore');
39
+ const dbPath = path_1.default.join(baseDir, constants_js_1.DB_NAME);
40
+ if (!fs_1.default.existsSync(dbPath)) {
41
+ console.error(' Database not found. Run: npx mindlore init && npm run index');
42
+ process.exit(1);
43
+ }
44
+ const db = openDatabase(dbPath, { readonly: true });
45
+ if (!db) {
46
+ console.error(' better-sqlite3 not installed.');
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ const sanitized = query.replace(/['"(){}[\]*:^~!]/g, ' ').trim();
51
+ if (!sanitized) {
52
+ console.log(' No valid search terms.');
53
+ process.exit(0);
54
+ }
55
+ const results = db
56
+ .prepare(`SELECT path, snippet(mindlore_fts, 1, '>>>', '<<<', '...', 40) as snippet,
57
+ rank
58
+ FROM mindlore_fts
59
+ WHERE mindlore_fts MATCH ?
60
+ ORDER BY rank
61
+ LIMIT ?`)
62
+ .all(sanitized, MAX_RESULTS);
63
+ if (results.length === 0) {
64
+ console.log(` No results for: "${query}"`);
65
+ process.exit(0);
66
+ }
67
+ console.log(`\n Mindlore Search: "${query}" (${results.length} results)\n`);
68
+ for (let i = 0; i < results.length; i++) {
69
+ const r = results[i];
70
+ if (!r)
71
+ continue;
72
+ const relativePath = path_1.default.relative(baseDir, r.path);
73
+ const fileName = path_1.default.basename(r.path, '.md');
74
+ let headings = [];
75
+ if (fs_1.default.existsSync(r.path)) {
76
+ const content = fs_1.default.readFileSync(r.path, 'utf8');
77
+ headings = extractHeadings(content, 2);
78
+ }
79
+ console.log(` ${i + 1}. ${relativePath}`);
80
+ if (headings.length > 0) {
81
+ console.log(` ${headings.join(' > ')}`);
82
+ }
83
+ console.log(` ${r.snippet || fileName}`);
84
+ console.log('');
85
+ }
86
+ }
87
+ catch (err) {
88
+ const message = err instanceof Error ? err.message : String(err);
89
+ if (message.includes('fts5')) {
90
+ const words = query.split(/\s+/).filter((w) => w.length >= 2);
91
+ if (words.length > 0) {
92
+ console.error(` Search syntax error. Try simpler terms: ${words.join(' ')}`);
93
+ }
94
+ else {
95
+ console.error(` Search error: ${message}`);
96
+ }
97
+ }
98
+ else {
99
+ console.error(` Error: ${message}`);
100
+ }
101
+ process.exit(1);
102
+ }
103
+ finally {
104
+ db.close();
105
+ }
106
+ }
107
+ main();
108
+ //# sourceMappingURL=mindlore-fts5-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-fts5-search.js","sourceRoot":"","sources":["../../scripts/mindlore-fts5-search.ts"],"names":[],"mappings":";;AAEA;;;;;;GAMG;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AACxB,qDAAgE;AAGhE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAA,gCAAiB,EAAC,SAAS,CAAC,CAE5D,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,0EAA0E;AAE1E,SAAS,eAAe,CAAC,OAAe,EAAE,WAAmB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,QAAQ,CAAC,MAAM,IAAI,WAAW;gBAAE,MAAM;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAUD,SAAS,IAAI;IACX,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAO,CAAC,CAAC;IAE3C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,EAAE;aACf,OAAO,CACN;;;;;iBAKS,CACV;aACA,GAAG,CAAC,SAAS,EAAE,WAAW,CAAmB,CAAC;QAEjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAE7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAE9C,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChD,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;YAC3C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,6CAA6C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mindlore-health-check — 18-point structural health check for .mindlore/
4
+ *
5
+ * Usage: node dist/scripts/mindlore-health-check.js [path-to-mindlore-dir]
6
+ *
7
+ * Exit codes: 0 = healthy, 1 = issues found
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=mindlore-health-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-health-check.d.ts","sourceRoot":"","sources":["../../scripts/mindlore-health-check.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
@@ -0,0 +1,337 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * mindlore-health-check — 18-point structural health check for .mindlore/
5
+ *
6
+ * Usage: node dist/scripts/mindlore-health-check.js [path-to-mindlore-dir]
7
+ *
8
+ * Exit codes: 0 = healthy, 1 = issues found
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const constants_js_1 = require("./lib/constants.js");
17
+ const { parseFrontmatter: _parseFm, getAllMdFiles: _getAllMd, } = require((0, constants_js_1.resolveHookCommon)(__dirname));
18
+ function parseFrontmatter(content) {
19
+ const { meta } = _parseFm(content);
20
+ return Object.keys(meta).length > 0 ? meta : null;
21
+ }
22
+ function getAllMdFiles(dir) {
23
+ return _getAllMd(dir, new Set());
24
+ }
25
+ class HealthChecker {
26
+ baseDir;
27
+ results = [];
28
+ passed = 0;
29
+ failed = 0;
30
+ warnings = 0;
31
+ constructor(baseDir) {
32
+ this.baseDir = baseDir;
33
+ }
34
+ check(name, fn) {
35
+ try {
36
+ const result = fn();
37
+ if (result.ok) {
38
+ this.passed++;
39
+ this.results.push({ name, status: 'PASS', detail: result.detail });
40
+ }
41
+ else if (result.warn) {
42
+ this.warnings++;
43
+ this.results.push({ name, status: 'WARN', detail: result.detail });
44
+ }
45
+ else {
46
+ this.failed++;
47
+ this.results.push({ name, status: 'FAIL', detail: result.detail });
48
+ }
49
+ }
50
+ catch (err) {
51
+ this.failed++;
52
+ const message = err instanceof Error ? err.message : String(err);
53
+ this.results.push({ name, status: 'FAIL', detail: message });
54
+ }
55
+ }
56
+ checkDirectories() {
57
+ for (const dir of constants_js_1.DIRECTORIES) {
58
+ this.check(`Directory: ${dir}/`, () => {
59
+ const dirPath = path_1.default.join(this.baseDir, dir);
60
+ if (fs_1.default.existsSync(dirPath)) {
61
+ return { ok: true, detail: 'exists' };
62
+ }
63
+ return { ok: false, detail: 'missing' };
64
+ });
65
+ }
66
+ }
67
+ checkSchema() {
68
+ this.check('SCHEMA.md', () => {
69
+ const schemaPath = path_1.default.join(this.baseDir, 'SCHEMA.md');
70
+ if (!fs_1.default.existsSync(schemaPath)) {
71
+ return { ok: false, detail: 'missing' };
72
+ }
73
+ const content = fs_1.default.readFileSync(schemaPath, 'utf8');
74
+ if (content.length < 100) {
75
+ return { ok: false, detail: 'too short (corrupted?)' };
76
+ }
77
+ if (!content.includes('## 1. Identity')) {
78
+ return { warn: true, detail: 'may be outdated (missing Identity section)' };
79
+ }
80
+ return { ok: true, detail: `${content.split('\n').length} lines` };
81
+ });
82
+ }
83
+ checkIndex() {
84
+ this.check('INDEX.md format', () => {
85
+ const indexPath = path_1.default.join(this.baseDir, 'INDEX.md');
86
+ if (!fs_1.default.existsSync(indexPath)) {
87
+ return { ok: false, detail: 'missing' };
88
+ }
89
+ const content = fs_1.default.readFileSync(indexPath, 'utf8');
90
+ const lines = content.trim().split('\n');
91
+ if (lines.length > 60) {
92
+ return {
93
+ warn: true,
94
+ detail: `${lines.length} lines (should be ~15-60, consider trimming)`,
95
+ };
96
+ }
97
+ return { ok: true, detail: `${lines.length} lines` };
98
+ });
99
+ }
100
+ checkDatabase() {
101
+ this.check('mindlore.db FTS5', () => {
102
+ const dbPath = path_1.default.join(this.baseDir, constants_js_1.DB_NAME);
103
+ if (!fs_1.default.existsSync(dbPath)) {
104
+ return { ok: false, detail: 'database missing' };
105
+ }
106
+ let Database;
107
+ try {
108
+ Database = require('better-sqlite3');
109
+ }
110
+ catch (_err) {
111
+ return { warn: true, detail: 'better-sqlite3 not available, cannot verify' };
112
+ }
113
+ const db = new Database(dbPath, { readonly: true });
114
+ try {
115
+ const result = db.prepare('SELECT count(*) as cnt FROM mindlore_fts').get();
116
+ const hashResult = db
117
+ .prepare('SELECT count(*) as cnt FROM file_hashes')
118
+ .get();
119
+ let schemaVersion = 0;
120
+ try {
121
+ db.prepare('SELECT tags, quality FROM mindlore_fts LIMIT 0').run();
122
+ schemaVersion = 9;
123
+ }
124
+ catch (_err) {
125
+ try {
126
+ db.prepare('SELECT slug, description, category, title FROM mindlore_fts LIMIT 0').run();
127
+ schemaVersion = 7;
128
+ }
129
+ catch (_err2) {
130
+ schemaVersion = 2;
131
+ }
132
+ }
133
+ if (schemaVersion < 9) {
134
+ return {
135
+ warn: true,
136
+ detail: `${result.cnt} indexed, ${hashResult.cnt} hashes — ${schemaVersion}-col schema (run: npx mindlore init to upgrade to 9-col)`,
137
+ };
138
+ }
139
+ return {
140
+ ok: true,
141
+ detail: `${result.cnt} indexed, ${hashResult.cnt} hashes, 9-col schema`,
142
+ };
143
+ }
144
+ catch (err) {
145
+ const message = err instanceof Error ? err.message : String(err);
146
+ return { ok: false, detail: `FTS5 error: ${message}` };
147
+ }
148
+ finally {
149
+ db.close();
150
+ }
151
+ });
152
+ }
153
+ checkOrphans() {
154
+ this.check('Orphan files', () => {
155
+ const dbPath = path_1.default.join(this.baseDir, constants_js_1.DB_NAME);
156
+ if (!fs_1.default.existsSync(dbPath)) {
157
+ return { warn: true, detail: 'no database, cannot check' };
158
+ }
159
+ let Database;
160
+ try {
161
+ Database = require('better-sqlite3');
162
+ }
163
+ catch (_err) {
164
+ return { warn: true, detail: 'better-sqlite3 not available' };
165
+ }
166
+ const mdFiles = getAllMdFiles(this.baseDir).filter(constants_js_1.isContentFile);
167
+ const db = new Database(dbPath, { readonly: true });
168
+ try {
169
+ const indexed = new Set();
170
+ const rows = db.prepare('SELECT path FROM file_hashes').all();
171
+ for (const row of rows) {
172
+ indexed.add(path_1.default.resolve(row.path));
173
+ }
174
+ const orphans = mdFiles.filter((f) => !indexed.has(path_1.default.resolve(f)));
175
+ if (orphans.length === 0) {
176
+ return { ok: true, detail: 'no orphans' };
177
+ }
178
+ if (orphans.length <= 3) {
179
+ return {
180
+ warn: true,
181
+ detail: `${orphans.length} unindexed: ${orphans.map((f) => path_1.default.basename(f)).join(', ')}`,
182
+ };
183
+ }
184
+ return {
185
+ ok: false,
186
+ detail: `${orphans.length} unindexed files — run: npm run index`,
187
+ };
188
+ }
189
+ finally {
190
+ db.close();
191
+ }
192
+ });
193
+ }
194
+ checkFrontmatter() {
195
+ this.check('Frontmatter: slug + type', () => {
196
+ const mdFiles = getAllMdFiles(this.baseDir).filter(constants_js_1.isContentFile);
197
+ let missingSlug = 0;
198
+ let missingType = 0;
199
+ let wrongDir = 0;
200
+ for (const file of mdFiles) {
201
+ const content = fs_1.default.readFileSync(file, 'utf8').replace(/\r\n/g, '\n');
202
+ const fm = parseFrontmatter(content);
203
+ if (!fm) {
204
+ missingSlug++;
205
+ missingType++;
206
+ continue;
207
+ }
208
+ if (!fm.slug)
209
+ missingSlug++;
210
+ if (!fm.type) {
211
+ missingType++;
212
+ continue;
213
+ }
214
+ const expectedDir = constants_js_1.TYPE_TO_DIR[fm.type];
215
+ if (expectedDir) {
216
+ const parentDir = path_1.default.basename(path_1.default.dirname(file));
217
+ if (parentDir !== expectedDir) {
218
+ wrongDir++;
219
+ }
220
+ }
221
+ }
222
+ const issues = [];
223
+ if (missingSlug > 0)
224
+ issues.push(`${missingSlug} missing slug`);
225
+ if (missingType > 0)
226
+ issues.push(`${missingType} missing type`);
227
+ if (wrongDir > 0)
228
+ issues.push(`${wrongDir} type-dir mismatch`);
229
+ if (issues.length === 0) {
230
+ return {
231
+ ok: true,
232
+ detail: `${mdFiles.length} files validated`,
233
+ };
234
+ }
235
+ if (wrongDir > 0) {
236
+ return { ok: false, detail: issues.join(', ') };
237
+ }
238
+ return { warn: true, detail: issues.join(', ') };
239
+ });
240
+ }
241
+ checkStaleDeltas() {
242
+ this.check('Stale deltas', () => {
243
+ const diaryDir = path_1.default.join(this.baseDir, 'diary');
244
+ if (!fs_1.default.existsSync(diaryDir))
245
+ return { ok: true, detail: 'no diary dir' };
246
+ const now = Date.now();
247
+ const thirtyDays = 30 * 24 * 60 * 60 * 1000;
248
+ let stale = 0;
249
+ const files = fs_1.default.readdirSync(diaryDir).filter((f) => f.startsWith('delta-') && f.endsWith('.md'));
250
+ for (const file of files) {
251
+ const fullPath = path_1.default.join(diaryDir, file);
252
+ const content = fs_1.default.readFileSync(fullPath, 'utf8').replace(/\r\n/g, '\n');
253
+ const fm = parseFrontmatter(content);
254
+ if (fm && fm.archived === 'true')
255
+ continue;
256
+ const stat = fs_1.default.statSync(fullPath);
257
+ if (now - stat.mtimeMs > thirtyDays)
258
+ stale++;
259
+ }
260
+ if (stale === 0)
261
+ return { ok: true, detail: `${files.length} deltas, none stale` };
262
+ return { warn: true, detail: `${stale} deltas older than 30 days without archived flag — run /mindlore-log reflect` };
263
+ });
264
+ }
265
+ checkConflictingAnalyses() {
266
+ this.check('Conflicting analyses', () => {
267
+ const analysesDir = path_1.default.join(this.baseDir, 'analyses');
268
+ if (!fs_1.default.existsSync(analysesDir))
269
+ return { ok: true, detail: 'no analyses dir' };
270
+ const files = fs_1.default.readdirSync(analysesDir).filter((f) => f.endsWith('.md'));
271
+ if (files.length < 2)
272
+ return { ok: true, detail: `${files.length} analyses, no conflict possible` };
273
+ const tagMap = {};
274
+ for (const file of files) {
275
+ const content = fs_1.default.readFileSync(path_1.default.join(analysesDir, file), 'utf8').replace(/\r\n/g, '\n');
276
+ const fm = parseFrontmatter(content);
277
+ if (!fm?.tags || !fm.confidence)
278
+ continue;
279
+ const tags = Array.isArray(fm.tags) ? fm.tags : String(fm.tags).split(',').map((t) => t.trim());
280
+ for (const tag of tags) {
281
+ if (!tagMap[tag])
282
+ tagMap[tag] = [];
283
+ const entries = tagMap[tag];
284
+ if (entries)
285
+ entries.push({ file, confidence: String(fm.confidence) });
286
+ }
287
+ }
288
+ const conflicts = [];
289
+ for (const [tag, entries] of Object.entries(tagMap)) {
290
+ if (!entries || entries.length < 2)
291
+ continue;
292
+ const confidences = new Set(entries.map((e) => e.confidence));
293
+ if (confidences.size > 1) {
294
+ conflicts.push(`${tag}: ${entries.map((e) => `${e.file}(${e.confidence})`).join(' vs ')}`);
295
+ }
296
+ }
297
+ if (conflicts.length === 0)
298
+ return { ok: true, detail: `${files.length} analyses, no conflicts` };
299
+ return { warn: true, detail: `${conflicts.length} tag conflicts: ${conflicts.slice(0, 2).join('; ')}` };
300
+ });
301
+ }
302
+ run() {
303
+ this.checkDirectories();
304
+ this.checkSchema();
305
+ this.checkIndex();
306
+ this.checkDatabase();
307
+ this.checkOrphans();
308
+ this.checkFrontmatter();
309
+ this.checkStaleDeltas();
310
+ this.checkConflictingAnalyses();
311
+ return this;
312
+ }
313
+ report() {
314
+ console.log('\n Mindlore Health Check\n');
315
+ for (const r of this.results) {
316
+ const icon = r.status === 'PASS' ? '+' : r.status === 'WARN' ? '~' : '-';
317
+ console.log(` [${icon}] ${r.name}: ${r.detail}`);
318
+ }
319
+ const total = this.passed + this.failed + this.warnings;
320
+ console.log(`\n Score: ${this.passed}/${total} passed, ${this.warnings} warnings, ${this.failed} failed\n`);
321
+ return this.failed === 0;
322
+ }
323
+ }
324
+ // ── Main ───────────────────────────────────────────────────────────────
325
+ function main() {
326
+ const baseDir = process.argv[2] ?? path_1.default.join(process.cwd(), '.mindlore');
327
+ if (!fs_1.default.existsSync(baseDir)) {
328
+ console.error(` .mindlore/ not found at: ${baseDir}`);
329
+ console.error(' Run: npx mindlore init');
330
+ process.exit(1);
331
+ }
332
+ const checker = new HealthChecker(baseDir);
333
+ const healthy = checker.run().report();
334
+ process.exit(healthy ? 0 : 1);
335
+ }
336
+ main();
337
+ //# sourceMappingURL=mindlore-health-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mindlore-health-check.js","sourceRoot":"","sources":["../../scripts/mindlore-health-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mindlore uninstall — Remove Mindlore hooks, skills, and optionally project data.
4
+ *
5
+ * Usage: npx mindlore uninstall [--all]
6
+ *
7
+ * --all: also remove .mindlore/ project data (without flag, only hooks + skills)
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../scripts/uninstall.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}