mindlore 0.2.1 → 0.3.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 (112) hide show
  1. package/README.md +14 -11
  2. package/SCHEMA.md +15 -2
  3. package/dist/scripts/init.d.ts +1 -1
  4. package/dist/scripts/init.js +133 -68
  5. package/dist/scripts/init.js.map +1 -1
  6. package/dist/scripts/lib/constants.d.ts +34 -0
  7. package/dist/scripts/lib/constants.d.ts.map +1 -1
  8. package/dist/scripts/lib/constants.js +95 -1
  9. package/dist/scripts/lib/constants.js.map +1 -1
  10. package/dist/scripts/lib/schemas.d.ts +93 -0
  11. package/dist/scripts/lib/schemas.d.ts.map +1 -0
  12. package/dist/scripts/lib/schemas.js +108 -0
  13. package/dist/scripts/lib/schemas.js.map +1 -0
  14. package/dist/scripts/mindlore-fts5-index.js +3 -4
  15. package/dist/scripts/mindlore-fts5-index.js.map +1 -1
  16. package/dist/scripts/mindlore-fts5-search.d.ts +1 -1
  17. package/dist/scripts/mindlore-fts5-search.js +87 -74
  18. package/dist/scripts/mindlore-fts5-search.js.map +1 -1
  19. package/dist/scripts/quality-populate.d.ts +11 -0
  20. package/dist/scripts/quality-populate.d.ts.map +1 -0
  21. package/dist/scripts/quality-populate.js +86 -0
  22. package/dist/scripts/quality-populate.js.map +1 -0
  23. package/dist/scripts/uninstall.d.ts +1 -1
  24. package/dist/scripts/uninstall.js +27 -17
  25. package/dist/scripts/uninstall.js.map +1 -1
  26. package/dist/tests/compounding.test.js +2 -2
  27. package/dist/tests/compounding.test.js.map +1 -1
  28. package/dist/tests/cwd-changed.test.d.ts +2 -0
  29. package/dist/tests/cwd-changed.test.d.ts.map +1 -0
  30. package/dist/tests/cwd-changed.test.js +62 -0
  31. package/dist/tests/cwd-changed.test.js.map +1 -0
  32. package/dist/tests/dedup.test.js +4 -4
  33. package/dist/tests/dedup.test.js.map +1 -1
  34. package/dist/tests/dont-repeat.test.d.ts +2 -0
  35. package/dist/tests/dont-repeat.test.d.ts.map +1 -0
  36. package/dist/tests/dont-repeat.test.js +100 -0
  37. package/dist/tests/dont-repeat.test.js.map +1 -0
  38. package/dist/tests/e2e-pipeline.test.d.ts +2 -0
  39. package/dist/tests/e2e-pipeline.test.d.ts.map +1 -0
  40. package/dist/tests/e2e-pipeline.test.js +220 -0
  41. package/dist/tests/e2e-pipeline.test.js.map +1 -0
  42. package/dist/tests/evolve.test.d.ts +2 -0
  43. package/dist/tests/evolve.test.d.ts.map +1 -0
  44. package/dist/tests/evolve.test.js +105 -0
  45. package/dist/tests/evolve.test.js.map +1 -0
  46. package/dist/tests/explore.test.d.ts +2 -0
  47. package/dist/tests/explore.test.d.ts.map +1 -0
  48. package/dist/tests/explore.test.js +146 -0
  49. package/dist/tests/explore.test.js.map +1 -0
  50. package/dist/tests/fts5.test.js +7 -7
  51. package/dist/tests/fts5.test.js.map +1 -1
  52. package/dist/tests/global-layer.test.d.ts +2 -0
  53. package/dist/tests/global-layer.test.d.ts.map +1 -0
  54. package/dist/tests/global-layer.test.js +152 -0
  55. package/dist/tests/global-layer.test.js.map +1 -0
  56. package/dist/tests/helpers/db.d.ts +14 -1
  57. package/dist/tests/helpers/db.d.ts.map +1 -1
  58. package/dist/tests/helpers/db.js +3 -3
  59. package/dist/tests/helpers/db.js.map +1 -1
  60. package/dist/tests/hook-smoke.test.js +2 -2
  61. package/dist/tests/hook-smoke.test.js.map +1 -1
  62. package/dist/tests/init.test.js +83 -0
  63. package/dist/tests/init.test.js.map +1 -1
  64. package/dist/tests/model-router.test.d.ts +2 -0
  65. package/dist/tests/model-router.test.d.ts.map +1 -0
  66. package/dist/tests/model-router.test.js +146 -0
  67. package/dist/tests/model-router.test.js.map +1 -0
  68. package/dist/tests/post-read.test.d.ts +2 -0
  69. package/dist/tests/post-read.test.d.ts.map +1 -0
  70. package/dist/tests/post-read.test.js +69 -0
  71. package/dist/tests/post-read.test.js.map +1 -0
  72. package/dist/tests/quality-populate.test.d.ts +2 -0
  73. package/dist/tests/quality-populate.test.d.ts.map +1 -0
  74. package/dist/tests/quality-populate.test.js +158 -0
  75. package/dist/tests/quality-populate.test.js.map +1 -0
  76. package/dist/tests/reflect.test.d.ts +2 -0
  77. package/dist/tests/reflect.test.d.ts.map +1 -0
  78. package/dist/tests/reflect.test.js +122 -0
  79. package/dist/tests/reflect.test.js.map +1 -0
  80. package/dist/tests/schemas.test.d.ts +2 -0
  81. package/dist/tests/schemas.test.d.ts.map +1 -0
  82. package/dist/tests/schemas.test.js +87 -0
  83. package/dist/tests/schemas.test.js.map +1 -0
  84. package/dist/tests/search-hook.test.js +3 -3
  85. package/dist/tests/search-hook.test.js.map +1 -1
  86. package/dist/tests/upgrade.test.d.ts +2 -0
  87. package/dist/tests/upgrade.test.d.ts.map +1 -0
  88. package/dist/tests/upgrade.test.js +91 -0
  89. package/dist/tests/upgrade.test.js.map +1 -0
  90. package/hooks/lib/mindlore-common.cjs +89 -5
  91. package/hooks/lib/types.d.ts +56 -0
  92. package/hooks/mindlore-cwd-changed.cjs +57 -0
  93. package/hooks/mindlore-dont-repeat.cjs +222 -0
  94. package/hooks/mindlore-fts5-sync.cjs +6 -9
  95. package/hooks/mindlore-index.cjs +3 -3
  96. package/hooks/mindlore-model-router.cjs +54 -0
  97. package/hooks/mindlore-post-read.cjs +97 -0
  98. package/hooks/mindlore-read-guard.cjs +27 -4
  99. package/hooks/mindlore-search.cjs +73 -52
  100. package/hooks/mindlore-session-end.cjs +43 -1
  101. package/hooks/mindlore-session-focus.cjs +14 -0
  102. package/package.json +5 -3
  103. package/plugin.json +29 -1
  104. package/skills/mindlore-decide/SKILL.md +8 -0
  105. package/skills/mindlore-evolve/SKILL.md +99 -0
  106. package/skills/mindlore-explore/SKILL.md +104 -0
  107. package/skills/mindlore-health/SKILL.md +8 -0
  108. package/skills/mindlore-ingest/SKILL.md +65 -32
  109. package/skills/mindlore-log/SKILL.md +30 -13
  110. package/skills/mindlore-query/SKILL.md +8 -0
  111. package/templates/SCHEMA.md +15 -2
  112. package/templates/config.json +9 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const child_process_1 = require("child_process");
9
+ const db_1 = require("./helpers/db");
10
+ const TEST_DIR = path_1.default.join(__dirname, '..', '.test-quality-populate');
11
+ const DB_PATH = path_1.default.join(TEST_DIR, 'mindlore.db');
12
+ let db;
13
+ beforeEach(() => {
14
+ (0, db_1.setupTestDir)(TEST_DIR, ['sources', 'raw']);
15
+ db = (0, db_1.createTestDb)(DB_PATH);
16
+ });
17
+ afterEach(() => {
18
+ db.close();
19
+ (0, db_1.teardownTestDir)(TEST_DIR);
20
+ });
21
+ describe('Quality populate — storage and retrieval', () => {
22
+ test('high quality stored and retrieved correctly', () => {
23
+ (0, db_1.insertFts)(db, {
24
+ path: path_1.default.join(TEST_DIR, 'sources', 'anthropic-docs.md'),
25
+ slug: 'anthropic-docs',
26
+ type: 'source',
27
+ title: 'Anthropic Claude API Docs',
28
+ content: '# Claude API\n\nOfficial documentation from docs.anthropic.com',
29
+ quality: 'high',
30
+ });
31
+ const row = db.prepare('SELECT quality FROM mindlore_fts WHERE slug = ?').get('anthropic-docs');
32
+ expect(row.quality).toBe('high');
33
+ });
34
+ test('medium quality stored and retrieved correctly', () => {
35
+ (0, db_1.insertFts)(db, {
36
+ path: path_1.default.join(TEST_DIR, 'sources', 'blog-post.md'),
37
+ slug: 'blog-post',
38
+ type: 'source',
39
+ content: '# React Patterns\n\nSome thoughts on React patterns.',
40
+ quality: 'medium',
41
+ });
42
+ const row = db.prepare('SELECT quality FROM mindlore_fts WHERE slug = ?').get('blog-post');
43
+ expect(row.quality).toBe('medium');
44
+ });
45
+ test('low quality stored and retrieved correctly', () => {
46
+ (0, db_1.insertFts)(db, {
47
+ path: path_1.default.join(TEST_DIR, 'raw', 'quick-paste.md'),
48
+ slug: 'quick-paste',
49
+ type: 'raw',
50
+ content: 'some random text pasted quickly',
51
+ quality: 'low',
52
+ });
53
+ const row = db.prepare('SELECT quality FROM mindlore_fts WHERE slug = ?').get('quick-paste');
54
+ expect(row.quality).toBe('low');
55
+ });
56
+ test('NULL quality records are queryable via FTS5', () => {
57
+ (0, db_1.insertFts)(db, {
58
+ path: path_1.default.join(TEST_DIR, 'sources', 'no-quality.md'),
59
+ slug: 'no-quality',
60
+ type: 'source',
61
+ content: '# Test\n\nContent without quality assignment.',
62
+ });
63
+ const row = db.prepare('SELECT quality FROM mindlore_fts WHERE slug = ?').get('no-quality');
64
+ expect(row.quality).toBeNull();
65
+ const results = db.prepare("SELECT slug FROM mindlore_fts WHERE mindlore_fts MATCH 'quality'").all();
66
+ expect(results.length).toBeGreaterThan(0);
67
+ });
68
+ test('all three quality values coexist in same DB', () => {
69
+ for (const q of ['high', 'medium', 'low', null]) {
70
+ (0, db_1.insertFts)(db, {
71
+ path: path_1.default.join(TEST_DIR, 'sources', `quality-${q}.md`),
72
+ slug: `quality-${q}`,
73
+ type: 'source',
74
+ content: `Test content for ${q}`,
75
+ quality: q,
76
+ });
77
+ }
78
+ const rows = db.prepare('SELECT slug, quality FROM mindlore_fts WHERE slug LIKE ?').all('quality-%');
79
+ expect(rows).toHaveLength(4);
80
+ const qualities = rows.map(r => r.quality);
81
+ expect(qualities).toContain('high');
82
+ expect(qualities).toContain('medium');
83
+ expect(qualities).toContain('low');
84
+ expect(qualities).toContain(null);
85
+ });
86
+ });
87
+ // ── Bulk populate script integration tests ──────────────────────────────
88
+ const INIT_SCRIPT = path_1.default.join(__dirname, '..', 'dist', 'scripts', 'init.js');
89
+ const POPULATE_SCRIPT = path_1.default.join(__dirname, '..', 'dist', 'scripts', 'quality-populate.js');
90
+ const BULK_DIR = path_1.default.join(__dirname, '..', '.test-quality-bulk');
91
+ function initMindlore() {
92
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
93
+ cwd: BULK_DIR,
94
+ stdio: 'pipe',
95
+ env: { ...process.env, HOME: BULK_DIR, USERPROFILE: BULK_DIR },
96
+ });
97
+ }
98
+ function writeSource(filename, frontmatter, body) {
99
+ const sourcesDir = path_1.default.join(BULK_DIR, '.mindlore', 'sources');
100
+ fs_1.default.mkdirSync(sourcesDir, { recursive: true });
101
+ fs_1.default.writeFileSync(path_1.default.join(sourcesDir, filename), `---\n${frontmatter}\n---\n\n${body}\n`, 'utf8');
102
+ }
103
+ function readSourceQuality(filename) {
104
+ const content = fs_1.default.readFileSync(path_1.default.join(BULK_DIR, '.mindlore', 'sources', filename), 'utf8');
105
+ const match = content.match(/^quality:\s*(.+)$/m);
106
+ return match?.[1]?.trim() ?? null;
107
+ }
108
+ function runPopulate() {
109
+ return (0, child_process_1.execSync)(`node "${POPULATE_SCRIPT}"`, {
110
+ cwd: BULK_DIR,
111
+ encoding: 'utf8',
112
+ env: { ...process.env, HOME: BULK_DIR, USERPROFILE: BULK_DIR },
113
+ });
114
+ }
115
+ describe('Quality populate — bulk script', () => {
116
+ beforeEach(() => {
117
+ fs_1.default.mkdirSync(BULK_DIR, { recursive: true });
118
+ initMindlore();
119
+ });
120
+ afterEach(() => {
121
+ fs_1.default.rmSync(BULK_DIR, { recursive: true, force: true });
122
+ });
123
+ test('should assign quality based on source_type heuristic', () => {
124
+ writeSource('github-test.md', 'slug: github-test\ntype: source\nsource_type: github-repo', '# GitHub Test');
125
+ writeSource('blog-test.md', 'slug: blog-test\ntype: source\nsource_type: blog', '# Blog Test');
126
+ writeSource('snippet-test.md', 'slug: snippet-test\ntype: source\nsource_type: snippet', '# Snippet Test');
127
+ runPopulate();
128
+ expect(readSourceQuality('github-test.md')).toBe('high');
129
+ expect(readSourceQuality('blog-test.md')).toBe('medium');
130
+ expect(readSourceQuality('snippet-test.md')).toBe('low');
131
+ });
132
+ test('should preserve existing quality values', () => {
133
+ writeSource('already-set.md', 'slug: already-set\ntype: source\nsource_type: blog\nquality: high', '# Already High');
134
+ runPopulate();
135
+ expect(readSourceQuality('already-set.md')).toBe('high');
136
+ });
137
+ test('should handle missing source_type with URL fallback', () => {
138
+ writeSource('github-url.md', 'slug: github-url\ntype: source\nsource_url: https://github.com/user/repo', '# GitHub URL');
139
+ writeSource('docs-url.md', 'slug: docs-url\ntype: source\nsource_url: https://docs.anthropic.com/api', '# Docs URL');
140
+ runPopulate();
141
+ expect(readSourceQuality('github-url.md')).toBe('high');
142
+ expect(readSourceQuality('docs-url.md')).toBe('high');
143
+ });
144
+ test('should default to medium when no heuristic matches', () => {
145
+ writeSource('unknown.md', 'slug: unknown\ntype: source', '# Unknown Source');
146
+ runPopulate();
147
+ expect(readSourceQuality('unknown.md')).toBe('medium');
148
+ });
149
+ test('should report correct counts', () => {
150
+ writeSource('needs-quality.md', 'slug: needs-quality\ntype: source\nsource_type: blog', '# Needs Quality');
151
+ writeSource('has-quality.md', 'slug: has-quality\ntype: source\nquality: low', '# Has Quality');
152
+ const output = runPopulate();
153
+ expect(output).toContain('1 updated');
154
+ expect(output).toContain('1 already set');
155
+ expect(output).toContain('2 total');
156
+ });
157
+ });
158
+ //# sourceMappingURL=quality-populate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-populate.test.js","sourceRoot":"","sources":["../../tests/quality-populate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reflect.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.test.d.ts","sourceRoot":"","sources":["../../tests/reflect.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const db_1 = require("./helpers/db");
9
+ const TEST_DIR = path_1.default.join(__dirname, '..', '.test-reflect');
10
+ const DIARY_DIR = path_1.default.join(TEST_DIR, 'diary');
11
+ const LEARNINGS_DIR = path_1.default.join(TEST_DIR, 'learnings');
12
+ function writeDelta(slug, date, files, opts) {
13
+ const frontmatter = [
14
+ '---',
15
+ `slug: ${slug}`,
16
+ 'type: diary',
17
+ `date: ${date}`,
18
+ ...(opts?.archived ? ['archived: true'] : []),
19
+ '---',
20
+ ];
21
+ const content = [
22
+ ...frontmatter,
23
+ '',
24
+ `# Session Delta — ${slug}`,
25
+ '',
26
+ '## Changed Files',
27
+ ...files.map(f => `- ${f}`),
28
+ ].join('\n');
29
+ fs_1.default.writeFileSync(path_1.default.join(DIARY_DIR, `${slug}.md`), content);
30
+ }
31
+ beforeEach(() => {
32
+ (0, db_1.setupTestDir)(TEST_DIR, ['diary', 'learnings']);
33
+ });
34
+ afterEach(() => {
35
+ (0, db_1.teardownTestDir)(TEST_DIR);
36
+ });
37
+ describe('Reflect — diary scanning and pattern extraction', () => {
38
+ test('diary deltas are readable and parseable', () => {
39
+ writeDelta('delta-2026-04-10-1400', '2026-04-10', ['tests/fts5.test.ts', 'scripts/lib/constants.ts']);
40
+ writeDelta('delta-2026-04-11-0900', '2026-04-11', ['tests/dedup.test.ts', 'scripts/lib/constants.ts']);
41
+ const deltas = fs_1.default.readdirSync(DIARY_DIR)
42
+ .filter(f => f.startsWith('delta-') && f.endsWith('.md'))
43
+ .sort();
44
+ expect(deltas).toHaveLength(2);
45
+ for (const d of deltas) {
46
+ const content = fs_1.default.readFileSync(path_1.default.join(DIARY_DIR, d), 'utf8');
47
+ expect(content).toContain('type: diary');
48
+ expect(content).toContain('## Changed Files');
49
+ }
50
+ });
51
+ test('recurring patterns are detectable across deltas', () => {
52
+ writeDelta('delta-2026-04-10-1000', '2026-04-10', ['scripts/lib/constants.ts', 'tests/fts5.test.ts']);
53
+ writeDelta('delta-2026-04-11-1000', '2026-04-11', ['scripts/lib/constants.ts', 'hooks/mindlore-search.cjs']);
54
+ writeDelta('delta-2026-04-12-1000', '2026-04-12', ['scripts/lib/constants.ts', 'tests/dedup.test.ts']);
55
+ const fileCounts = {};
56
+ const deltaFiles = fs_1.default.readdirSync(DIARY_DIR).filter(f => f.startsWith('delta-'));
57
+ for (const d of deltaFiles) {
58
+ const content = fs_1.default.readFileSync(path_1.default.join(DIARY_DIR, d), 'utf8');
59
+ const changedSection = content.split('## Changed Files')[1] || '';
60
+ for (const line of changedSection.split('\n').filter(l => l.startsWith('- '))) {
61
+ const file = line.replace('- ', '').trim();
62
+ fileCounts[file] = (fileCounts[file] || 0) + 1;
63
+ }
64
+ }
65
+ expect(fileCounts['scripts/lib/constants.ts']).toBe(3);
66
+ });
67
+ test('learnings are written with correct frontmatter format', () => {
68
+ const learning = [
69
+ '---',
70
+ 'type: learning',
71
+ 'slug: testing-patterns',
72
+ 'title: Testing Patterns',
73
+ 'tags: testing, jest',
74
+ '---',
75
+ '',
76
+ '# Testing Patterns',
77
+ '',
78
+ '- YAPMA: Test icinde sleep kullanma — deterministic timer mock kullan',
79
+ '- BEST PRACTICE: Her test kendi temp dizinini olusturup temizlesin',
80
+ ].join('\n');
81
+ fs_1.default.writeFileSync(path_1.default.join(LEARNINGS_DIR, 'testing-patterns.md'), learning);
82
+ const content = fs_1.default.readFileSync(path_1.default.join(LEARNINGS_DIR, 'testing-patterns.md'), 'utf8');
83
+ expect(content).toContain('type: learning');
84
+ expect(content).toContain('YAPMA:');
85
+ expect(content).toContain('BEST PRACTICE:');
86
+ });
87
+ test('archived deltas are excluded from reflect scan', () => {
88
+ writeDelta('delta-2026-04-08-1000', '2026-04-08', ['old-file.ts'], { archived: true });
89
+ writeDelta('delta-2026-04-09-1000', '2026-04-09', ['active-file.ts']);
90
+ const deltas = fs_1.default.readdirSync(DIARY_DIR)
91
+ .filter(f => f.startsWith('delta-') && f.endsWith('.md'))
92
+ .filter(f => !fs_1.default.readFileSync(path_1.default.join(DIARY_DIR, f), 'utf8').includes('archived: true'));
93
+ expect(deltas).toHaveLength(1);
94
+ expect(deltas[0]).toContain('04-09');
95
+ });
96
+ test('learnings append to existing topic file without overwriting', () => {
97
+ const initial = [
98
+ '---',
99
+ 'type: learning',
100
+ 'slug: git-workflow',
101
+ 'title: Git Workflow',
102
+ '---',
103
+ '',
104
+ '# Git Workflow',
105
+ '',
106
+ '- BEST PRACTICE: Atomic commits — bir degisiklik, bir commit',
107
+ ].join('\n');
108
+ fs_1.default.writeFileSync(path_1.default.join(LEARNINGS_DIR, 'git-workflow.md'), initial);
109
+ fs_1.default.appendFileSync(path_1.default.join(LEARNINGS_DIR, 'git-workflow.md'), '\n- YAPMA: Force push to main — her zaman feature branch kullan\n');
110
+ const content = fs_1.default.readFileSync(path_1.default.join(LEARNINGS_DIR, 'git-workflow.md'), 'utf8');
111
+ expect(content).toContain('Atomic commits');
112
+ expect(content).toContain('Force push');
113
+ const ruleCount = (content.match(/^- (YAPMA|BEST PRACTICE|KRITIK):/gm) || []).length;
114
+ expect(ruleCount).toBe(2);
115
+ });
116
+ test('empty diary directory returns no deltas', () => {
117
+ const deltas = fs_1.default.readdirSync(DIARY_DIR)
118
+ .filter(f => f.startsWith('delta-') && f.endsWith('.md'));
119
+ expect(deltas).toHaveLength(0);
120
+ });
121
+ });
122
+ //# sourceMappingURL=reflect.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.test.js","sourceRoot":"","sources":["../../tests/reflect.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schemas.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.test.d.ts","sourceRoot":"","sources":["../../tests/schemas.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const schemas_1 = require("../scripts/lib/schemas");
4
+ describe('Zod frontmatter schemas', () => {
5
+ test('all 9 types have schemas defined', () => {
6
+ const types = ['raw', 'source', 'domain', 'analysis', 'diary', 'decision', 'insight', 'connection', 'learning'];
7
+ for (const t of types) {
8
+ expect(schemas_1.FRONTMATTER_SCHEMAS[t]).toBeDefined();
9
+ }
10
+ });
11
+ test('valid source frontmatter passes', () => {
12
+ const result = (0, schemas_1.validateFrontmatter)({
13
+ type: 'source',
14
+ slug: 'react-hooks',
15
+ title: 'React Hooks Guide',
16
+ quality: 'high',
17
+ tags: 'react, hooks',
18
+ });
19
+ expect(result.valid).toBe(true);
20
+ expect(result.errors).toHaveLength(0);
21
+ });
22
+ test('missing type field fails', () => {
23
+ const result = (0, schemas_1.validateFrontmatter)({ slug: 'test' });
24
+ expect(result.valid).toBe(false);
25
+ expect(result.errors[0]).toContain('type');
26
+ });
27
+ test('unknown type fails', () => {
28
+ const result = (0, schemas_1.validateFrontmatter)({ type: 'unknown', slug: 'test' });
29
+ expect(result.valid).toBe(false);
30
+ expect(result.errors[0]).toContain('unknown');
31
+ });
32
+ test('source missing slug fails', () => {
33
+ const result = (0, schemas_1.validateFrontmatter)({ type: 'source' });
34
+ expect(result.valid).toBe(false);
35
+ });
36
+ test('invalid quality enum fails', () => {
37
+ const result = (0, schemas_1.validateFrontmatter)({
38
+ type: 'source',
39
+ slug: 'test',
40
+ quality: 'excellent',
41
+ });
42
+ expect(result.valid).toBe(false);
43
+ });
44
+ test('valid diary frontmatter passes', () => {
45
+ const result = (0, schemas_1.validateFrontmatter)({
46
+ type: 'diary',
47
+ slug: 'delta-2026-04-12',
48
+ date: '2026-04-12',
49
+ });
50
+ expect(result.valid).toBe(true);
51
+ });
52
+ test('valid connection frontmatter passes', () => {
53
+ const result = (0, schemas_1.validateFrontmatter)({
54
+ type: 'connection',
55
+ slug: 'conn-a-b',
56
+ strength: 'medium',
57
+ sources: ['source-a.md', 'source-b.md'],
58
+ });
59
+ expect(result.valid).toBe(true);
60
+ });
61
+ test('valid decision with supersedes passes', () => {
62
+ const result = (0, schemas_1.validateFrontmatter)({
63
+ type: 'decision',
64
+ slug: 'dec-002',
65
+ status: 'active',
66
+ supersedes: 'dec-001',
67
+ });
68
+ expect(result.valid).toBe(true);
69
+ });
70
+ test('tags as array passes', () => {
71
+ const result = (0, schemas_1.validateFrontmatter)({
72
+ type: 'raw',
73
+ slug: 'test-raw',
74
+ tags: ['tag1', 'tag2'],
75
+ });
76
+ expect(result.valid).toBe(true);
77
+ });
78
+ test('tags as string passes', () => {
79
+ const result = (0, schemas_1.validateFrontmatter)({
80
+ type: 'raw',
81
+ slug: 'test-raw',
82
+ tags: 'tag1, tag2',
83
+ });
84
+ expect(result.valid).toBe(true);
85
+ });
86
+ });
87
+ //# sourceMappingURL=schemas.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.test.js","sourceRoot":"","sources":["../../tests/schemas.test.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,9 @@ const DB_PATH = path_1.default.join(TEST_DIR, 'mindlore.db');
11
11
  beforeEach(() => {
12
12
  (0, db_js_1.setupTestDir)(TEST_DIR, ['sources', 'domains']);
13
13
  const db = (0, db_js_1.createTestDb)(DB_PATH);
14
- (0, db_js_1.insertFts)(db, path_1.default.join(TEST_DIR, 'sources', 'react-hooks.md'), 'react-hooks', 'useEffect cleanup patterns for memory leak prevention', 'source', 'sources', 'React Hooks Guide', '---\nslug: react-hooks\ntype: source\n---\n# React Hooks Guide\n\nuseEffect cleanup patterns for memory leak prevention.', '', null);
15
- (0, db_js_1.insertFts)(db, path_1.default.join(TEST_DIR, 'sources', 'typescript-generics.md'), 'typescript-generics', 'Advanced generic patterns for type-safe APIs', 'source', 'sources', 'TypeScript Generics', '---\nslug: typescript-generics\ntype: source\n---\n# TypeScript Generics\n\nAdvanced generic patterns for type-safe APIs.', '', null);
16
- (0, db_js_1.insertFts)(db, path_1.default.join(TEST_DIR, 'domains', 'security.md'), 'security', 'SSH hardening firewall rules audit checks', 'domain', 'domains', 'Security', '---\nslug: security\ntype: domain\n---\n# Security\n\nSSH hardening, firewall rules, audit checks.', '', null);
14
+ (0, db_js_1.insertFts)(db, { path: path_1.default.join(TEST_DIR, 'sources', 'react-hooks.md'), slug: 'react-hooks', description: 'useEffect cleanup patterns for memory leak prevention', type: 'source', category: 'sources', title: 'React Hooks Guide', content: '---\nslug: react-hooks\ntype: source\n---\n# React Hooks Guide\n\nuseEffect cleanup patterns for memory leak prevention.', tags: '', quality: null });
15
+ (0, db_js_1.insertFts)(db, { path: path_1.default.join(TEST_DIR, 'sources', 'typescript-generics.md'), slug: 'typescript-generics', description: 'Advanced generic patterns for type-safe APIs', type: 'source', category: 'sources', title: 'TypeScript Generics', content: '---\nslug: typescript-generics\ntype: source\n---\n# TypeScript Generics\n\nAdvanced generic patterns for type-safe APIs.', tags: '', quality: null });
16
+ (0, db_js_1.insertFts)(db, { path: path_1.default.join(TEST_DIR, 'domains', 'security.md'), slug: 'security', description: 'SSH hardening firewall rules audit checks', type: 'domain', category: 'domains', title: 'Security', content: '---\nslug: security\ntype: domain\n---\n# Security\n\nSSH hardening, firewall rules, audit checks.', tags: '', quality: null });
17
17
  db.close();
18
18
  });
19
19
  afterEach(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"search-hook.test.js","sourceRoot":"","sources":["../../tests/search-hook.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-hook.test.js","sourceRoot":"","sources":["../../tests/search-hook.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upgrade.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.test.d.ts","sourceRoot":"","sources":["../../tests/upgrade.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const child_process_1 = require("child_process");
9
+ const TEST_PROJECT = path_1.default.join(__dirname, '..', '.test-upgrade');
10
+ const INIT_SCRIPT = path_1.default.join(__dirname, '..', 'dist', 'scripts', 'init.js');
11
+ beforeEach(() => {
12
+ fs_1.default.mkdirSync(TEST_PROJECT, { recursive: true });
13
+ });
14
+ afterEach(() => {
15
+ fs_1.default.rmSync(TEST_PROJECT, { recursive: true, force: true });
16
+ });
17
+ describe('version-aware upgrade', () => {
18
+ test('init writes .version file', () => {
19
+ const env = { ...process.env, HOME: TEST_PROJECT, USERPROFILE: TEST_PROJECT };
20
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
21
+ cwd: TEST_PROJECT,
22
+ stdio: 'pipe',
23
+ env,
24
+ });
25
+ const versionPath = path_1.default.join(TEST_PROJECT, '.mindlore', '.version');
26
+ expect(fs_1.default.existsSync(versionPath)).toBe(true);
27
+ const version = fs_1.default.readFileSync(versionPath, 'utf8').trim();
28
+ expect(version).toMatch(/^\d+\.\d+\.\d+/);
29
+ });
30
+ test('re-running init updates .version file', () => {
31
+ const env = { ...process.env, HOME: TEST_PROJECT, USERPROFILE: TEST_PROJECT };
32
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
33
+ cwd: TEST_PROJECT,
34
+ stdio: 'pipe',
35
+ env,
36
+ });
37
+ // Write old version
38
+ const versionPath = path_1.default.join(TEST_PROJECT, '.mindlore', '.version');
39
+ fs_1.default.writeFileSync(versionPath, '0.1.0', 'utf8');
40
+ // Re-run init
41
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
42
+ cwd: TEST_PROJECT,
43
+ stdio: 'pipe',
44
+ env,
45
+ });
46
+ const version = fs_1.default.readFileSync(versionPath, 'utf8').trim();
47
+ expect(version).not.toBe('0.1.0');
48
+ });
49
+ test('init preserves existing data during upgrade', () => {
50
+ const env = { ...process.env, HOME: TEST_PROJECT, USERPROFILE: TEST_PROJECT };
51
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
52
+ cwd: TEST_PROJECT,
53
+ stdio: 'pipe',
54
+ env,
55
+ });
56
+ // Add custom data
57
+ const testFile = path_1.default.join(TEST_PROJECT, '.mindlore', 'sources', 'test.md');
58
+ fs_1.default.writeFileSync(testFile, '---\nslug: test\ntype: source\n---\n# Test Source\n');
59
+ // Re-run init (upgrade)
60
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
61
+ cwd: TEST_PROJECT,
62
+ stdio: 'pipe',
63
+ env,
64
+ });
65
+ // Custom data preserved
66
+ expect(fs_1.default.existsSync(testFile)).toBe(true);
67
+ expect(fs_1.default.readFileSync(testFile, 'utf8')).toContain('# Test Source');
68
+ });
69
+ test('session-focus injects version warning when mismatch', () => {
70
+ const env = { ...process.env, HOME: TEST_PROJECT, USERPROFILE: TEST_PROJECT };
71
+ // Init first
72
+ (0, child_process_1.execSync)(`node "${INIT_SCRIPT}" init`, {
73
+ cwd: TEST_PROJECT,
74
+ stdio: 'pipe',
75
+ env,
76
+ });
77
+ // Set old version to trigger warning
78
+ const versionPath = path_1.default.join(TEST_PROJECT, '.mindlore', '.version');
79
+ fs_1.default.writeFileSync(versionPath, '0.0.1', 'utf8');
80
+ // Run session-focus hook
81
+ const focusScript = path_1.default.resolve(__dirname, '..', 'hooks', 'mindlore-session-focus.cjs');
82
+ const output = (0, child_process_1.execSync)(`node "${focusScript}"`, {
83
+ cwd: TEST_PROJECT,
84
+ encoding: 'utf8',
85
+ env,
86
+ });
87
+ expect(output).toContain('Guncelleme mevcut');
88
+ expect(output).toContain('0.0.1');
89
+ });
90
+ });
91
+ //# sourceMappingURL=upgrade.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.test.js","sourceRoot":"","sources":["../../tests/upgrade.test.ts"],"names":[],"mappings":"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"}