mindlore 0.7.1 → 0.7.3
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.
- package/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +30 -0
- package/dist/scripts/bundle-hooks.js +3 -1
- package/dist/scripts/bundle-hooks.js.map +1 -1
- package/dist/scripts/init.js +164 -151
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/all-migrations.d.ts.map +1 -1
- package/dist/scripts/lib/all-migrations.js +3 -0
- package/dist/scripts/lib/all-migrations.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +7 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +17 -1
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/detect-plugin.d.ts +2 -0
- package/dist/scripts/lib/detect-plugin.d.ts.map +1 -0
- package/dist/scripts/lib/detect-plugin.js +14 -0
- package/dist/scripts/lib/detect-plugin.js.map +1 -0
- package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
- package/dist/scripts/lib/mcp-tools.js +63 -78
- package/dist/scripts/lib/mcp-tools.js.map +1 -1
- package/dist/scripts/lib/migrations-v072.d.ts +3 -0
- package/dist/scripts/lib/migrations-v072.d.ts.map +1 -0
- package/dist/scripts/lib/migrations-v072.js +25 -0
- package/dist/scripts/lib/migrations-v072.js.map +1 -0
- package/dist/scripts/lib/relation-helpers.d.ts +15 -0
- package/dist/scripts/lib/relation-helpers.d.ts.map +1 -0
- package/dist/scripts/lib/relation-helpers.js +30 -0
- package/dist/scripts/lib/relation-helpers.js.map +1 -0
- package/dist/scripts/lib/settings-cleanup.d.ts +6 -0
- package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -0
- package/dist/scripts/lib/settings-cleanup.js +61 -0
- package/dist/scripts/lib/settings-cleanup.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/get-adapter.d.ts +21 -0
- package/dist/scripts/lib/tool-adapters/get-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/get-adapter.js +51 -0
- package/dist/scripts/lib/tool-adapters/get-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts +34 -0
- package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/relate-adapter.js +43 -0
- package/dist/scripts/lib/tool-adapters/relate-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +5 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -1
- package/dist/scripts/lib/tool-adapters/search-adapter.js +37 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -1
- package/dist/scripts/mcp-server.js +40 -3
- package/dist/scripts/mcp-server.js.map +1 -1
- package/dist/scripts/mindlore-doctor.d.ts +1 -1
- package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
- package/dist/scripts/mindlore-doctor.js +9 -35
- package/dist/scripts/mindlore-doctor.js.map +1 -1
- package/dist/scripts/uninstall.js +14 -38
- package/dist/scripts/uninstall.js.map +1 -1
- package/dist/tests/db-singleton.test.d.ts +2 -0
- package/dist/tests/db-singleton.test.d.ts.map +1 -0
- package/dist/tests/db-singleton.test.js +22 -0
- package/dist/tests/db-singleton.test.js.map +1 -0
- package/dist/tests/doctor.test.js +6 -15
- package/dist/tests/doctor.test.js.map +1 -1
- package/dist/tests/dont-repeat-dedup.test.d.ts +2 -0
- package/dist/tests/dont-repeat-dedup.test.d.ts.map +1 -0
- package/dist/tests/dont-repeat-dedup.test.js +93 -0
- package/dist/tests/dont-repeat-dedup.test.js.map +1 -0
- package/dist/tests/e2e-kg-pipeline.test.d.ts +2 -0
- package/dist/tests/e2e-kg-pipeline.test.d.ts.map +1 -0
- package/dist/tests/e2e-kg-pipeline.test.js +59 -0
- package/dist/tests/e2e-kg-pipeline.test.js.map +1 -0
- package/dist/tests/helpers/db.d.ts.map +1 -1
- package/dist/tests/helpers/db.js +2 -1
- package/dist/tests/helpers/db.js.map +1 -1
- package/dist/tests/install-matrix.test.d.ts +2 -0
- package/dist/tests/install-matrix.test.d.ts.map +1 -0
- package/dist/tests/install-matrix.test.js +110 -0
- package/dist/tests/install-matrix.test.js.map +1 -0
- package/dist/tests/mcp-get-tool.test.d.ts +2 -0
- package/dist/tests/mcp-get-tool.test.d.ts.map +1 -0
- package/dist/tests/mcp-get-tool.test.js +93 -0
- package/dist/tests/mcp-get-tool.test.js.map +1 -0
- package/dist/tests/mcp-relate-tool.test.d.ts +2 -0
- package/dist/tests/mcp-relate-tool.test.d.ts.map +1 -0
- package/dist/tests/mcp-relate-tool.test.js +85 -0
- package/dist/tests/mcp-relate-tool.test.js.map +1 -0
- package/dist/tests/mcp-server.test.js +3 -1
- package/dist/tests/mcp-server.test.js.map +1 -1
- package/dist/tests/mcp-tools.test.js +20 -0
- package/dist/tests/mcp-tools.test.js.map +1 -1
- package/dist/tests/memory-relate.test.d.ts +2 -0
- package/dist/tests/memory-relate.test.d.ts.map +1 -0
- package/dist/tests/memory-relate.test.js +70 -0
- package/dist/tests/memory-relate.test.js.map +1 -0
- package/dist/tests/migrations-v063.test.js +1 -1
- package/dist/tests/migrations-v072.test.d.ts +2 -0
- package/dist/tests/migrations-v072.test.d.ts.map +1 -0
- package/dist/tests/migrations-v072.test.js +74 -0
- package/dist/tests/migrations-v072.test.js.map +1 -0
- package/dist/tests/plugin-cache-regression.test.d.ts +2 -0
- package/dist/tests/plugin-cache-regression.test.d.ts.map +1 -0
- package/dist/tests/plugin-cache-regression.test.js +19 -0
- package/dist/tests/plugin-cache-regression.test.js.map +1 -0
- package/dist/tests/settings-cleanup.test.d.ts +2 -0
- package/dist/tests/settings-cleanup.test.d.ts.map +1 -0
- package/dist/tests/settings-cleanup.test.js +126 -0
- package/dist/tests/settings-cleanup.test.js.map +1 -0
- package/dist/tests/version-sync.test.d.ts +2 -0
- package/dist/tests/version-sync.test.d.ts.map +1 -0
- package/dist/tests/version-sync.test.js +41 -0
- package/dist/tests/version-sync.test.js.map +1 -0
- package/hooks/cc-memory-bulk-sync.cjs +15 -1
- package/hooks/cc-session-sync.cjs +15 -1
- package/hooks/mindlore-dont-repeat.cjs +18 -0
- package/hooks/mindlore-search.cjs +15 -1
- package/hooks/mindlore-session-focus.cjs +35 -2
- package/hooks/src/mindlore-dont-repeat.cjs +21 -0
- package/package.json +4 -2
- package/plugin.json +7 -3
- package/skills/mindlore-decide/SKILL.md +7 -0
- package/skills/mindlore-log/SKILL.md +7 -0
- package/templates/config.json +1 -1
|
@@ -40,6 +40,14 @@ function createTestContext() {
|
|
|
40
40
|
CREATE TABLE IF NOT EXISTS vocabulary (
|
|
41
41
|
word TEXT PRIMARY KEY
|
|
42
42
|
);
|
|
43
|
+
CREATE TABLE IF NOT EXISTS mindlore_relations (
|
|
44
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
45
|
+
source_a TEXT NOT NULL,
|
|
46
|
+
source_b TEXT NOT NULL,
|
|
47
|
+
relation_type TEXT NOT NULL CHECK(relation_type IN ('cites', 'extends', 'contradicts', 'supersedes')),
|
|
48
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
|
49
|
+
UNIQUE(source_a, source_b, relation_type)
|
|
50
|
+
);
|
|
43
51
|
`);
|
|
44
52
|
return {
|
|
45
53
|
db,
|
|
@@ -85,6 +93,18 @@ describe('search adapter', () => {
|
|
|
85
93
|
ctx.cleanup();
|
|
86
94
|
}
|
|
87
95
|
});
|
|
96
|
+
it('returns related field in search results', () => {
|
|
97
|
+
const ctx = createTestContext();
|
|
98
|
+
try {
|
|
99
|
+
ctx.db.prepare('INSERT INTO mindlore_fts (path, slug, description, type, category, title, content, tags, quality, date_captured, project) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)').run('/test/a.md', 'a', 'desc', 'source', 'sources', 'A', 'content A', 'tag', '5', '2026-05-04', 'mindlore');
|
|
100
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'content A' });
|
|
101
|
+
expect(result.related).toBeDefined();
|
|
102
|
+
expect(Array.isArray(result.related)).toBe(true);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
ctx.cleanup();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
88
108
|
});
|
|
89
109
|
describe('stats adapter', () => {
|
|
90
110
|
it('returns basic stats', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.test.js","sourceRoot":"","sources":["../../tests/mcp-tools.test.ts"],"names":[],"mappings":";;;;;AAAA,oEAAsC;AACtC,gFAA2E;AAC3E,8EAAyE;AACzE,gFAA2E;AAC3E,8EAAyE;AACzE,gFAA2E;AAC3E,gFAA2E;AAE3E,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AAEpB,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC7E,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QAC7E,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"mcp-tools.test.js","sourceRoot":"","sources":["../../tests/mcp-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-relate.test.d.ts","sourceRoot":"","sources":["../../tests/memory-relate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const db_1 = require("./helpers/db");
|
|
10
|
+
const search_adapter_1 = require("../scripts/lib/tool-adapters/search-adapter");
|
|
11
|
+
const relate_adapter_1 = require("../scripts/lib/tool-adapters/relate-adapter");
|
|
12
|
+
describe('Memory Relate — search with related sources', () => {
|
|
13
|
+
let testDir;
|
|
14
|
+
let ctx;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-memrel-'));
|
|
17
|
+
const dbPath = path_1.default.join(testDir, 'test.db');
|
|
18
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
19
|
+
(0, db_1.insertFts)(db, { path: path_1.default.join(testDir, 'sources/react.md'), slug: 'react', title: 'React Framework', content: 'React is a UI library for building user interfaces', category: 'sources', type: 'source' });
|
|
20
|
+
(0, db_1.insertFts)(db, { path: path_1.default.join(testDir, 'sources/vue.md'), slug: 'vue', title: 'Vue Framework', content: 'Vue is a progressive framework', category: 'sources', type: 'source' });
|
|
21
|
+
(0, db_1.insertFts)(db, { path: path_1.default.join(testDir, 'sources/angular.md'), slug: 'angular', title: 'Angular Framework', content: 'Angular is a platform', category: 'sources', type: 'source' });
|
|
22
|
+
ctx = { db, baseDir: testDir };
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
ctx.db.close();
|
|
26
|
+
fs_1.default.rmSync(testDir, { recursive: true, force: true });
|
|
27
|
+
});
|
|
28
|
+
it('includes related sources in search response', () => {
|
|
29
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'react', source_b: 'vue', relation_type: 'extends' });
|
|
30
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'React UI library' });
|
|
31
|
+
expect(result.related).toBeDefined();
|
|
32
|
+
expect(result.related.length).toBeGreaterThan(0);
|
|
33
|
+
expect(result.related[0].source).toBe('vue');
|
|
34
|
+
expect(result.related[0].via).toBe('react');
|
|
35
|
+
});
|
|
36
|
+
it('deduplicates related sources that appear in results', () => {
|
|
37
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'react', source_b: 'vue', relation_type: 'extends' });
|
|
38
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'framework' });
|
|
39
|
+
const resultSlugs = new Set(result.results.map(r => r.slug));
|
|
40
|
+
for (const rel of result.related) {
|
|
41
|
+
expect(resultSlugs.has(rel.source)).toBe(false);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
it('sorts related by priority (supersedes > contradicts > extends > cites)', () => {
|
|
45
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'react', source_b: 'vue', relation_type: 'cites' });
|
|
46
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'react', source_b: 'angular', relation_type: 'supersedes' });
|
|
47
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'React UI library' });
|
|
48
|
+
expect(result.related.length).toBeGreaterThanOrEqual(2);
|
|
49
|
+
const types = result.related.map(r => r.relation_type);
|
|
50
|
+
const supersIdx = types.indexOf('supersedes');
|
|
51
|
+
const citesIdx = types.indexOf('cites');
|
|
52
|
+
if (supersIdx !== -1 && citesIdx !== -1) {
|
|
53
|
+
expect(supersIdx).toBeLessThan(citesIdx);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
it('returns max 5 related sources', () => {
|
|
57
|
+
for (let i = 0; i < 8; i++) {
|
|
58
|
+
const slug = `extra-${i}`;
|
|
59
|
+
(0, db_1.insertFts)(ctx.db, { path: path_1.default.join(testDir, `sources/${slug}.md`), slug, title: `Extra ${i}`, content: `extra content ${i}`, category: 'sources', type: 'source' });
|
|
60
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'react', source_b: slug, relation_type: 'cites' });
|
|
61
|
+
}
|
|
62
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'React UI library' });
|
|
63
|
+
expect(result.related.length).toBeLessThanOrEqual(5);
|
|
64
|
+
});
|
|
65
|
+
it('returns empty related when no relations exist', () => {
|
|
66
|
+
const result = (0, search_adapter_1.handleSearch)(ctx, { query: 'React UI library' });
|
|
67
|
+
expect(result.related).toEqual([]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=memory-relate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-relate.test.js","sourceRoot":"","sources":["../../tests/memory-relate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,7 +68,7 @@ describe('v0.6.3 migrations', () => {
|
|
|
68
68
|
const dir = makeTmpDir();
|
|
69
69
|
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
70
70
|
const row = db.prepare('SELECT MAX(version) as v FROM schema_versions').get();
|
|
71
|
-
expect(row.v).toBe(
|
|
71
|
+
expect(row.v).toBe(20);
|
|
72
72
|
cleanup(dir, db);
|
|
73
73
|
});
|
|
74
74
|
test('vocabulary table accepts inserts and dedup', () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations-v072.test.d.ts","sourceRoot":"","sources":["../../tests/migrations-v072.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const db_1 = require("./helpers/db");
|
|
10
|
+
const db_helpers_js_1 = require("../scripts/lib/db-helpers.js");
|
|
11
|
+
describe('migrations-v072', () => {
|
|
12
|
+
let testDir;
|
|
13
|
+
let dbPath;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-mig072-'));
|
|
16
|
+
dbPath = path_1.default.join(testDir, 'test.db');
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
fs_1.default.rmSync(testDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
it('creates mindlore_relations table with correct schema', () => {
|
|
22
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
23
|
+
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='mindlore_relations'").all();
|
|
24
|
+
expect(tables).toHaveLength(1);
|
|
25
|
+
const cols = (0, db_helpers_js_1.dbAll)(db, "PRAGMA table_info(mindlore_relations)");
|
|
26
|
+
const colNames = cols.map(c => c.name);
|
|
27
|
+
expect(colNames).toContain('id');
|
|
28
|
+
expect(colNames).toContain('source_a');
|
|
29
|
+
expect(colNames).toContain('source_b');
|
|
30
|
+
expect(colNames).toContain('relation_type');
|
|
31
|
+
expect(colNames).toContain('created_at');
|
|
32
|
+
db.close();
|
|
33
|
+
});
|
|
34
|
+
it('enforces CHECK constraint on relation_type', () => {
|
|
35
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
36
|
+
expect(() => {
|
|
37
|
+
db.prepare("INSERT INTO mindlore_relations (source_a, source_b, relation_type) VALUES ('a', 'b', 'invalid')").run();
|
|
38
|
+
}).toThrow();
|
|
39
|
+
db.close();
|
|
40
|
+
});
|
|
41
|
+
it('enforces UNIQUE constraint on (source_a, source_b, relation_type)', () => {
|
|
42
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
43
|
+
db.prepare("INSERT INTO mindlore_relations (source_a, source_b, relation_type) VALUES ('a', 'b', 'cites')").run();
|
|
44
|
+
expect(() => {
|
|
45
|
+
db.prepare("INSERT INTO mindlore_relations (source_a, source_b, relation_type) VALUES ('a', 'b', 'cites')").run();
|
|
46
|
+
}).toThrow();
|
|
47
|
+
db.close();
|
|
48
|
+
});
|
|
49
|
+
it('allows INSERT OR IGNORE for idempotency', () => {
|
|
50
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
51
|
+
db.prepare("INSERT INTO mindlore_relations (source_a, source_b, relation_type) VALUES ('a', 'b', 'cites')").run();
|
|
52
|
+
const result = db.prepare("INSERT OR IGNORE INTO mindlore_relations (source_a, source_b, relation_type) VALUES ('a', 'b', 'cites')").run();
|
|
53
|
+
expect(result.changes).toBe(0);
|
|
54
|
+
db.close();
|
|
55
|
+
});
|
|
56
|
+
it('creates indexes on source_a, source_b, relation_type', () => {
|
|
57
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
58
|
+
const indexes = (0, db_helpers_js_1.dbAll)(db, "SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='mindlore_relations'");
|
|
59
|
+
const names = indexes.map(i => i.name);
|
|
60
|
+
expect(names).toContain('idx_relations_source_a');
|
|
61
|
+
expect(names).toContain('idx_relations_source_b');
|
|
62
|
+
expect(names).toContain('idx_relations_type');
|
|
63
|
+
db.close();
|
|
64
|
+
});
|
|
65
|
+
it('is idempotent on re-run', () => {
|
|
66
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
67
|
+
db.close();
|
|
68
|
+
const db2 = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
69
|
+
const tables = db2.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='mindlore_relations'").all();
|
|
70
|
+
expect(tables).toHaveLength(1);
|
|
71
|
+
db2.close();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=migrations-v072.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations-v072.test.js","sourceRoot":"","sources":["../../tests/migrations-v072.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-cache-regression.test.d.ts","sourceRoot":"","sources":["../../tests/plugin-cache-regression.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
7
|
+
describe('plugin cache regression', () => {
|
|
8
|
+
it('bundled hooks do not reference unbundled build artifacts', () => {
|
|
9
|
+
const hookDir = path_1.default.join(__dirname, '..', 'hooks');
|
|
10
|
+
const fs = require('fs');
|
|
11
|
+
const hookFiles = fs.readdirSync(hookDir).filter((f) => f.endsWith('.cjs'));
|
|
12
|
+
for (const file of hookFiles) {
|
|
13
|
+
const content = fs.readFileSync(path_1.default.join(hookDir, file), 'utf8');
|
|
14
|
+
// Bundled hooks should not require from dist/ (not shipped with plugin)
|
|
15
|
+
expect(content).not.toMatch(/require\(["']\.\.\/dist\//);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=plugin-cache-regression.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-cache-regression.test.js","sourceRoot":"","sources":["../../tests/plugin-cache-regression.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAClE,wEAAwE;YACxE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-cleanup.test.d.ts","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
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 os_1 = __importDefault(require("os"));
|
|
9
|
+
const settings_cleanup_js_1 = require("../scripts/lib/settings-cleanup.js");
|
|
10
|
+
const FIXTURES = path_1.default.join(__dirname, 'fixtures');
|
|
11
|
+
function loadFixture(name) {
|
|
12
|
+
const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-test-'));
|
|
13
|
+
const src = path_1.default.join(FIXTURES, name);
|
|
14
|
+
const dest = path_1.default.join(tmpDir, 'settings.json');
|
|
15
|
+
fs_1.default.copyFileSync(src, dest);
|
|
16
|
+
return dest;
|
|
17
|
+
}
|
|
18
|
+
function readJson(filePath) {
|
|
19
|
+
return JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
// tmpdir cleanup handled by OS
|
|
23
|
+
});
|
|
24
|
+
describe('cleanupLegacyHooks', () => {
|
|
25
|
+
it('removes hooks with node_modules/mindlore/hooks/ path', () => {
|
|
26
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
27
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
28
|
+
expect(result.removed).toBe(4);
|
|
29
|
+
expect(result.backupCreated).toBe(true);
|
|
30
|
+
const settings = readJson(settingsPath);
|
|
31
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
32
|
+
const hooks = settings.hooks;
|
|
33
|
+
// PreToolUse should keep only bash-guard (user hook)
|
|
34
|
+
expect(hooks.PreToolUse).toHaveLength(1);
|
|
35
|
+
// SessionStart had only mindlore hook → event key removed
|
|
36
|
+
expect(hooks.SessionStart).toBeUndefined();
|
|
37
|
+
// UserPromptSubmit had only mindlore hook → event key removed
|
|
38
|
+
expect(hooks.UserPromptSubmit).toBeUndefined();
|
|
39
|
+
});
|
|
40
|
+
it('does nothing on clean settings.json (no mindlore hooks)', () => {
|
|
41
|
+
const settingsPath = loadFixture('settings-clean.json');
|
|
42
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
43
|
+
expect(result.removed).toBe(0);
|
|
44
|
+
expect(result.backupCreated).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
it('preserves user custom hooks with mindlore- prefix but non-node_modules path', () => {
|
|
47
|
+
const settingsPath = loadFixture('settings-mixed-hooks.json');
|
|
48
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
49
|
+
expect(result.removed).toBe(2); // read-guard + session-end
|
|
50
|
+
const settings = readJson(settingsPath);
|
|
51
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
52
|
+
const hooks = settings.hooks;
|
|
53
|
+
// PreToolUse: bash-guard + user custom mindlore hook kept, node_modules one removed
|
|
54
|
+
expect(hooks.PreToolUse).toHaveLength(2);
|
|
55
|
+
// SessionEnd had only node_modules hook → removed
|
|
56
|
+
expect(hooks.SessionEnd).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
it('creates backup file before modifying', () => {
|
|
59
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
60
|
+
const backupPath = settingsPath + '.mindlore-migration-backup';
|
|
61
|
+
(0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
62
|
+
expect(fs_1.default.existsSync(backupPath)).toBe(true);
|
|
63
|
+
// Backup should be the original content
|
|
64
|
+
const backup = readJson(backupPath);
|
|
65
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
66
|
+
const hooks = backup.hooks;
|
|
67
|
+
expect(hooks.PreToolUse).toHaveLength(3);
|
|
68
|
+
});
|
|
69
|
+
it('does not overwrite existing backup', () => {
|
|
70
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
71
|
+
const backupPath = settingsPath + '.mindlore-migration-backup';
|
|
72
|
+
// Create fake backup first
|
|
73
|
+
fs_1.default.writeFileSync(backupPath, '{"fake": true}', 'utf8');
|
|
74
|
+
(0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
75
|
+
// Original fake backup should be preserved
|
|
76
|
+
const backup = readJson(backupPath);
|
|
77
|
+
expect(backup.fake).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it('returns correct result when settings.json does not exist', () => {
|
|
80
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)('/nonexistent/path/settings.json');
|
|
81
|
+
expect(result.removed).toBe(0);
|
|
82
|
+
expect(result.backupCreated).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('is idempotent — second run removes nothing', () => {
|
|
85
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
86
|
+
const first = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
87
|
+
expect(first.removed).toBe(4);
|
|
88
|
+
const second = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
89
|
+
expect(second.removed).toBe(0);
|
|
90
|
+
expect(second.backupCreated).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
it('handles both forward-slash and backslash node_modules paths', () => {
|
|
93
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
94
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
95
|
+
// All fixtures use backslash (Windows) — verify they're caught
|
|
96
|
+
expect(result.removed).toBeGreaterThan(0);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('init.ts plugin gate verification', () => {
|
|
100
|
+
it('init.ts should have detectPluginInstalled gate', () => {
|
|
101
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
102
|
+
expect(initSource).toContain('detectPluginInstalled');
|
|
103
|
+
});
|
|
104
|
+
it('init.ts should have both mergeHooks and cleanupLegacyHooks (gated)', () => {
|
|
105
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
106
|
+
expect(initSource).toContain('mergeHooks');
|
|
107
|
+
expect(initSource).toContain('cleanupLegacyHooks');
|
|
108
|
+
});
|
|
109
|
+
it('init.ts should have registerSkills and registerAgents for npx-only path', () => {
|
|
110
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
111
|
+
expect(initSource).toContain('registerSkills');
|
|
112
|
+
expect(initSource).toContain('registerAgents');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('uninstall.ts shared module usage', () => {
|
|
116
|
+
it('uninstall.ts should not contain inline removeHooks implementation', () => {
|
|
117
|
+
const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
|
|
118
|
+
// Should not have inline hook filtering logic
|
|
119
|
+
expect(uninstallSource).not.toContain("includes('mindlore-')");
|
|
120
|
+
});
|
|
121
|
+
it('uninstall.ts should import from settings-cleanup', () => {
|
|
122
|
+
const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
|
|
123
|
+
expect(uninstallSource).toContain('settings-cleanup');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=settings-cleanup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-cleanup.test.js","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-sync.test.d.ts","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
function readJsonVersion(filePath, ...keys) {
|
|
9
|
+
const content = JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
|
|
10
|
+
let value = content;
|
|
11
|
+
for (const key of keys) {
|
|
12
|
+
value = value[key];
|
|
13
|
+
}
|
|
14
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON traversal returns any */
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
describe('Version Sync', () => {
|
|
18
|
+
const root = path_1.default.resolve(__dirname, '..');
|
|
19
|
+
const versions = () => ({
|
|
20
|
+
packageJson: readJsonVersion(path_1.default.join(root, 'package.json'), 'version'),
|
|
21
|
+
pluginJson: readJsonVersion(path_1.default.join(root, 'plugin.json'), 'version'),
|
|
22
|
+
claudePluginJson: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'plugin.json'), 'version'),
|
|
23
|
+
marketplaceMeta: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'metadata', 'version'),
|
|
24
|
+
marketplacePlugin: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'plugins', '0', 'version'),
|
|
25
|
+
});
|
|
26
|
+
it('all 5 version fields are equal', () => {
|
|
27
|
+
const v = versions();
|
|
28
|
+
const allVersions = Object.values(v);
|
|
29
|
+
const unique = new Set(allVersions);
|
|
30
|
+
expect(unique.size).toBe(1);
|
|
31
|
+
// Extra detail on failure
|
|
32
|
+
if (unique.size !== 1) {
|
|
33
|
+
console.log('Version mismatch:', v);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
it('version matches semver pattern', () => {
|
|
37
|
+
const v = versions();
|
|
38
|
+
expect(v.packageJson).toMatch(/^\d+\.\d+\.\d+$/);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=version-sync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-sync.test.js","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,SAAS,eAAe,CAAC,QAAgB,EAAE,GAAG,IAAc;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,wGAAwG;IACxG,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;QACtB,WAAW,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC;QACxE,UAAU,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QACtE,gBAAgB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QAC9F,eAAe,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;QAC9G,iBAAiB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;KACrH,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,0BAA0B;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -34,10 +34,11 @@ var require_constants = __commonJS({
|
|
|
34
34
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
36
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
37
|
-
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
37
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
38
38
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
39
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
40
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
+
exports2.buildPriorityCase = buildPriorityCase;
|
|
41
42
|
exports2.homedir = homedir;
|
|
42
43
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
43
44
|
exports2.getAllDbs = getAllDbs;
|
|
@@ -325,6 +326,19 @@ var require_constants = __commonJS({
|
|
|
325
326
|
"cc-session": "low",
|
|
326
327
|
"cc-subagent": "low"
|
|
327
328
|
};
|
|
329
|
+
exports2.RELATION_TYPES = ["cites", "extends", "contradicts", "supersedes"];
|
|
330
|
+
exports2.SYMMETRIC_TYPES = /* @__PURE__ */ new Set(["contradicts"]);
|
|
331
|
+
exports2.RELATION_PRIORITY = {
|
|
332
|
+
supersedes: 1,
|
|
333
|
+
contradicts: 2,
|
|
334
|
+
extends: 3,
|
|
335
|
+
cites: 4
|
|
336
|
+
};
|
|
337
|
+
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
|
+
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
+
function buildPriorityCase() {
|
|
340
|
+
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
+
}
|
|
328
342
|
exports2.TYPE_TO_DIR = {
|
|
329
343
|
raw: "raw",
|
|
330
344
|
source: "sources",
|
|
@@ -34,10 +34,11 @@ var require_constants = __commonJS({
|
|
|
34
34
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
36
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
37
|
-
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
37
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
38
38
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
39
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
40
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
+
exports2.buildPriorityCase = buildPriorityCase;
|
|
41
42
|
exports2.homedir = homedir;
|
|
42
43
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
43
44
|
exports2.getAllDbs = getAllDbs;
|
|
@@ -325,6 +326,19 @@ var require_constants = __commonJS({
|
|
|
325
326
|
"cc-session": "low",
|
|
326
327
|
"cc-subagent": "low"
|
|
327
328
|
};
|
|
329
|
+
exports2.RELATION_TYPES = ["cites", "extends", "contradicts", "supersedes"];
|
|
330
|
+
exports2.SYMMETRIC_TYPES = /* @__PURE__ */ new Set(["contradicts"]);
|
|
331
|
+
exports2.RELATION_PRIORITY = {
|
|
332
|
+
supersedes: 1,
|
|
333
|
+
contradicts: 2,
|
|
334
|
+
extends: 3,
|
|
335
|
+
cites: 4
|
|
336
|
+
};
|
|
337
|
+
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
|
+
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
+
function buildPriorityCase() {
|
|
340
|
+
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
+
}
|
|
328
342
|
exports2.TYPE_TO_DIR = {
|
|
329
343
|
raw: "raw",
|
|
330
344
|
source: "sources",
|
|
@@ -74,6 +74,23 @@ function extractNegativePatterns(content) {
|
|
|
74
74
|
}
|
|
75
75
|
return patterns;
|
|
76
76
|
}
|
|
77
|
+
var _lessonsEnforcementCached = null;
|
|
78
|
+
function hasLessonsEnforcementHook() {
|
|
79
|
+
if (_lessonsEnforcementCached !== null) return _lessonsEnforcementCached;
|
|
80
|
+
try {
|
|
81
|
+
const settingsPath = path.join(os.homedir(), ".claude", "settings.json");
|
|
82
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, "utf8"));
|
|
83
|
+
const hooks = settings.hooks || {};
|
|
84
|
+
const preToolUse = hooks.PreToolUse || [];
|
|
85
|
+
_lessonsEnforcementCached = preToolUse.some((entry) => {
|
|
86
|
+
const cmds = (entry.hooks || []).map((h) => h.command || "").concat(entry.command || "");
|
|
87
|
+
return cmds.some((c) => c.includes("lessons-enforcement"));
|
|
88
|
+
});
|
|
89
|
+
} catch (_err) {
|
|
90
|
+
_lessonsEnforcementCached = false;
|
|
91
|
+
}
|
|
92
|
+
return _lessonsEnforcementCached;
|
|
93
|
+
}
|
|
77
94
|
function checkContent(content, patterns) {
|
|
78
95
|
const matches = [];
|
|
79
96
|
for (const p of patterns) {
|
|
@@ -117,6 +134,7 @@ function main() {
|
|
|
117
134
|
toolInput.new_string || ""
|
|
118
135
|
].join("\n");
|
|
119
136
|
if (allContent.trim().length < 10) return process.exit(0);
|
|
137
|
+
if (hasLessonsEnforcementHook()) return process.exit(0);
|
|
120
138
|
const mindloreDir = findMindloreDir();
|
|
121
139
|
const cachePath = mindloreDir ? path.join(mindloreDir, "diary", `_pattern-cache-${getProjectName()}.json`) : null;
|
|
122
140
|
const cache = readCache(cachePath);
|