mindlore 0.7.1 → 0.7.2
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/dist/scripts/bundle-hooks.js +3 -1
- package/dist/scripts/bundle-hooks.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/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/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 +1 -1
- package/dist/scripts/mcp-server.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/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/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 +3 -2
- package/plugin.json +4 -3
- package/templates/config.json +1 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleRelate = handleRelate;
|
|
4
|
+
const constants_js_1 = require("../constants.js");
|
|
5
|
+
const db_helpers_js_1 = require("../db-helpers.js");
|
|
6
|
+
const relation_helpers_js_1 = require("../relation-helpers.js");
|
|
7
|
+
function validateRelationType(type) {
|
|
8
|
+
if (!constants_js_1.RELATION_TYPES.includes(type)) {
|
|
9
|
+
throw new Error(`Invalid relation_type "${type}". Valid: ${constants_js_1.RELATION_TYPES.join(', ')}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function handleRelate(ctx, input) {
|
|
13
|
+
if (input.action === 'add') {
|
|
14
|
+
if (!input.source_a || !input.source_b || !input.relation_type) {
|
|
15
|
+
throw new Error('add requires source_a, source_b, and relation_type');
|
|
16
|
+
}
|
|
17
|
+
validateRelationType(input.relation_type);
|
|
18
|
+
(0, relation_helpers_js_1.assertSlugExists)(ctx.db, input.source_a);
|
|
19
|
+
(0, relation_helpers_js_1.assertSlugExists)(ctx.db, input.source_b);
|
|
20
|
+
const result = ctx.db.prepare('INSERT OR IGNORE INTO mindlore_relations (source_a, source_b, relation_type) VALUES (?, ?, ?)').run(input.source_a, input.source_b, input.relation_type);
|
|
21
|
+
return {
|
|
22
|
+
created: result.changes > 0,
|
|
23
|
+
existing: result.changes === 0,
|
|
24
|
+
relation: { source_a: input.source_a, source_b: input.source_b, relation_type: input.relation_type },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (input.action === 'remove') {
|
|
28
|
+
if (!input.source_a || !input.source_b || !input.relation_type) {
|
|
29
|
+
throw new Error('remove requires source_a, source_b, and relation_type');
|
|
30
|
+
}
|
|
31
|
+
validateRelationType(input.relation_type);
|
|
32
|
+
const result = ctx.db.prepare('DELETE FROM mindlore_relations WHERE source_a = ? AND source_b = ? AND relation_type = ?').run(input.source_a, input.source_b, input.relation_type);
|
|
33
|
+
return { removed: result.changes > 0 };
|
|
34
|
+
}
|
|
35
|
+
// list — both outgoing (source_a) and incoming (source_b) edges
|
|
36
|
+
const query = input.source
|
|
37
|
+
? 'SELECT id, source_a, source_b, relation_type, created_at FROM mindlore_relations WHERE source_a = ? OR source_b = ? ORDER BY created_at DESC LIMIT 100'
|
|
38
|
+
: 'SELECT id, source_a, source_b, relation_type, created_at FROM mindlore_relations ORDER BY created_at DESC LIMIT 100';
|
|
39
|
+
const params = input.source ? [input.source, input.source] : [];
|
|
40
|
+
const rows = (0, db_helpers_js_1.dbAll)(ctx.db, query, ...params);
|
|
41
|
+
return { relations: rows, total: rows.length };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=relate-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relate-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/relate-adapter.ts"],"names":[],"mappings":";;AAwBA,oCAyCC;AAhED,kDAAoE;AACpE,oDAAyC;AACzC,gEAA0D;AAe1D,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,CAAE,6BAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,aAAa,6BAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,GAAe,EAAE,KAAkB;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAA,sCAAgB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAA,sCAAgB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAC3B,+FAA+F,CAChG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,CAAC;YAC9B,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;SACrG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAC3B,0FAA0F,CAC3F,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,gEAAgE;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;QACxB,CAAC,CAAC,wJAAwJ;QAC1J,CAAC,CAAC,qHAAqH,CAAC;IAE1H,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAgG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IAE5I,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { McpContext } from '../mcp-tools.js';
|
|
2
|
+
import { type RelatedSource as BaseRelatedSource } from '../relation-helpers.js';
|
|
2
3
|
interface SearchInput {
|
|
3
4
|
query: string;
|
|
4
5
|
limit?: number;
|
|
5
6
|
scope?: string;
|
|
6
7
|
contentType?: string;
|
|
7
8
|
}
|
|
9
|
+
interface RelatedSource extends BaseRelatedSource {
|
|
10
|
+
via: string;
|
|
11
|
+
}
|
|
8
12
|
interface SearchOutput {
|
|
9
13
|
results: Array<{
|
|
10
14
|
title: string;
|
|
@@ -16,6 +20,7 @@ interface SearchOutput {
|
|
|
16
20
|
}>;
|
|
17
21
|
total: number;
|
|
18
22
|
truncated: boolean;
|
|
23
|
+
related: RelatedSource[];
|
|
19
24
|
}
|
|
20
25
|
export declare function handleSearch(ctx: McpContext, input: SearchInput): SearchOutput;
|
|
21
26
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"search-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAuB,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEtG,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,aAAc,SAAQ,iBAAiB;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAiCD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAoC9E"}
|
|
@@ -3,9 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleSearch = handleSearch;
|
|
4
4
|
const search_engine_js_1 = require("../search-engine.js");
|
|
5
5
|
const smart_snippet_js_1 = require("../smart-snippet.js");
|
|
6
|
+
const constants_js_1 = require("../constants.js");
|
|
7
|
+
const relation_helpers_js_1 = require("../relation-helpers.js");
|
|
6
8
|
const MAX_LIMIT = 20;
|
|
7
9
|
const DEFAULT_LIMIT = 5;
|
|
8
10
|
const MAX_SNIPPET_LEN = 500;
|
|
11
|
+
function getRelatedForSlugs(ctx, slugs, excludeSlugs) {
|
|
12
|
+
if (slugs.length === 0)
|
|
13
|
+
return [];
|
|
14
|
+
const all = [];
|
|
15
|
+
for (const slug of slugs) {
|
|
16
|
+
const rows = (0, relation_helpers_js_1.getRelationsForSlug)(ctx.db, slug);
|
|
17
|
+
for (const row of rows) {
|
|
18
|
+
if (!excludeSlugs.has(row.source)) {
|
|
19
|
+
all.push({ ...row, via: slug });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
const deduped = [];
|
|
25
|
+
for (const item of all) {
|
|
26
|
+
const key = `${item.source}:${item.relation_type}`;
|
|
27
|
+
if (!seen.has(key)) {
|
|
28
|
+
seen.add(key);
|
|
29
|
+
deduped.push(item);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return deduped.slice(0, constants_js_1.MAX_RELATED_SOURCES);
|
|
33
|
+
}
|
|
9
34
|
function handleSearch(ctx, input) {
|
|
10
35
|
const limit = Math.min(input.limit ?? DEFAULT_LIMIT, MAX_LIMIT);
|
|
11
36
|
const results = (0, search_engine_js_1.search)(ctx.db, input.query, { maxResults: limit });
|
|
@@ -23,10 +48,22 @@ function handleSearch(ctx, input) {
|
|
|
23
48
|
path: r.path,
|
|
24
49
|
};
|
|
25
50
|
});
|
|
51
|
+
const slugList = mapped.map(r => r.slug);
|
|
52
|
+
const resultSlugs = new Set(slugList);
|
|
53
|
+
let related = [];
|
|
54
|
+
try {
|
|
55
|
+
related = getRelatedForSlugs(ctx, slugList, resultSlugs);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const msg = err instanceof Error ? err.message : '';
|
|
59
|
+
if (!msg.includes('no such table'))
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
26
62
|
return {
|
|
27
63
|
results: mapped,
|
|
28
64
|
total: mapped.length,
|
|
29
65
|
truncated: results.length >= limit,
|
|
66
|
+
related,
|
|
30
67
|
};
|
|
31
68
|
}
|
|
32
69
|
//# sourceMappingURL=search-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"search-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ const mcp_tools_js_1 = require("./lib/mcp-tools.js");
|
|
|
15
15
|
const err_msg_js_1 = require("./lib/err-msg.js");
|
|
16
16
|
const PACKAGE_VERSION = (() => {
|
|
17
17
|
try {
|
|
18
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '
|
|
18
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'package.json'), 'utf8'));
|
|
19
19
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- package.json structure is known
|
|
20
20
|
return pkg.version ?? '0.0.0';
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../scripts/mcp-server.ts"],"names":[],"mappings":";;;;;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,oEAAsC;AACtC,4CAAoB;AACpB,gDAAwB;AACxB,6DAA6D;AAC7D,qDAAkE;AAClE,qDAAsD;AACtD,iDAA0C;AAE1C,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../scripts/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dont-repeat-dedup.test.d.ts","sourceRoot":"","sources":["../../tests/dont-repeat-dedup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 child_process_1 = require("child_process");
|
|
10
|
+
const HOOK_PATH = path_1.default.join(__dirname, '..', 'hooks', 'mindlore-dont-repeat.cjs');
|
|
11
|
+
function runHook(input, settingsContent) {
|
|
12
|
+
const realSettings = path_1.default.join(os_1.default.homedir(), '.claude', 'settings.json');
|
|
13
|
+
let backup = null;
|
|
14
|
+
const claudeDir = path_1.default.dirname(realSettings);
|
|
15
|
+
if (settingsContent !== undefined) {
|
|
16
|
+
if (!fs_1.default.existsSync(claudeDir)) {
|
|
17
|
+
fs_1.default.mkdirSync(claudeDir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
if (fs_1.default.existsSync(realSettings)) {
|
|
20
|
+
backup = fs_1.default.readFileSync(realSettings, 'utf8');
|
|
21
|
+
}
|
|
22
|
+
fs_1.default.writeFileSync(realSettings, settingsContent, 'utf8');
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const result = (0, child_process_1.execFileSync)('node', [HOOK_PATH], {
|
|
26
|
+
input: JSON.stringify(input),
|
|
27
|
+
timeout: 5000,
|
|
28
|
+
encoding: 'utf8',
|
|
29
|
+
env: { ...process.env },
|
|
30
|
+
});
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
if (err !== null && err !== undefined && typeof err === 'object' && 'stdout' in err) {
|
|
35
|
+
const stdout = err.stdout;
|
|
36
|
+
return typeof stdout === 'string' ? stdout : '';
|
|
37
|
+
}
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
if (backup !== null) {
|
|
42
|
+
fs_1.default.writeFileSync(realSettings, backup, 'utf8');
|
|
43
|
+
}
|
|
44
|
+
else if (settingsContent !== undefined) {
|
|
45
|
+
try {
|
|
46
|
+
fs_1.default.unlinkSync(realSettings);
|
|
47
|
+
}
|
|
48
|
+
catch { /* noop */ }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
describe('dont-repeat dedup with lessons-enforcement', () => {
|
|
53
|
+
const editInput = {
|
|
54
|
+
tool_name: 'Edit',
|
|
55
|
+
tool_input: {
|
|
56
|
+
file_path: '/tmp/test-file.ts',
|
|
57
|
+
new_string: 'appendFileSync is dangerous pattern that should trigger',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
it('exits silently when lessons-enforcement hook is registered', () => {
|
|
61
|
+
const settings = JSON.stringify({
|
|
62
|
+
hooks: {
|
|
63
|
+
PreToolUse: [{
|
|
64
|
+
matcher: 'Write|Edit',
|
|
65
|
+
hooks: [{ command: 'node ~/.claude/hooks/lessons-enforcement.cjs' }],
|
|
66
|
+
}],
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const output = runHook(editInput, settings);
|
|
70
|
+
expect(output).toBe('');
|
|
71
|
+
});
|
|
72
|
+
it('runs full scan when lessons-enforcement is NOT registered', () => {
|
|
73
|
+
const settings = JSON.stringify({
|
|
74
|
+
hooks: {
|
|
75
|
+
PreToolUse: [{
|
|
76
|
+
matcher: 'Bash',
|
|
77
|
+
hooks: [{ command: 'node some-other-hook.cjs' }],
|
|
78
|
+
}],
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
const output = runHook(editInput, settings);
|
|
82
|
+
// May or may not produce output depending on lessons content,
|
|
83
|
+
// but the hook should NOT exit early — it should process
|
|
84
|
+
// We verify it didn't crash (non-empty or empty is fine)
|
|
85
|
+
expect(typeof output).toBe('string');
|
|
86
|
+
});
|
|
87
|
+
it('runs full scan when settings.json has no hooks at all', () => {
|
|
88
|
+
const settings = JSON.stringify({});
|
|
89
|
+
const output = runHook(editInput, settings);
|
|
90
|
+
expect(typeof output).toBe('string');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=dont-repeat-dedup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dont-repeat-dedup.test.js","sourceRoot":"","sources":["../../tests/dont-repeat-dedup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-kg-pipeline.test.d.ts","sourceRoot":"","sources":["../../tests/e2e-kg-pipeline.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 ingest_adapter_1 = require("../scripts/lib/tool-adapters/ingest-adapter");
|
|
11
|
+
const relate_adapter_1 = require("../scripts/lib/tool-adapters/relate-adapter");
|
|
12
|
+
const search_adapter_1 = require("../scripts/lib/tool-adapters/search-adapter");
|
|
13
|
+
const get_adapter_1 = require("../scripts/lib/tool-adapters/get-adapter");
|
|
14
|
+
describe('E2E: KG pipeline — ingest → relate → search → get', () => {
|
|
15
|
+
let testDir;
|
|
16
|
+
let ctx;
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-e2e-kg-'));
|
|
19
|
+
fs_1.default.mkdirSync(path_1.default.join(testDir, 'raw'), { recursive: true });
|
|
20
|
+
fs_1.default.mkdirSync(path_1.default.join(testDir, 'sources'), { recursive: true });
|
|
21
|
+
const dbPath = path_1.default.join(testDir, 'test.db');
|
|
22
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
23
|
+
ctx = { db, baseDir: testDir };
|
|
24
|
+
});
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
ctx.db.close();
|
|
27
|
+
fs_1.default.rmSync(testDir, { recursive: true, force: true });
|
|
28
|
+
});
|
|
29
|
+
it('full pipeline: ingest two sources, relate, search finds related, get retrieves with relations', () => {
|
|
30
|
+
// 1. Ingest source A
|
|
31
|
+
const a = (0, ingest_adapter_1.handleIngest)(ctx, { type: 'text', content: 'React is a UI framework for web apps', title: 'React Guide' });
|
|
32
|
+
expect(a.slug).toBe('react-guide');
|
|
33
|
+
// Manually index into FTS5 (ingest writes to raw/, FTS5 sync is via hook)
|
|
34
|
+
(0, db_1.insertFts)(ctx.db, { path: a.path, slug: a.slug, title: 'React Guide', content: 'React is a UI framework for web apps', category: 'raw', type: 'raw' });
|
|
35
|
+
// 2. Ingest source B
|
|
36
|
+
const b = (0, ingest_adapter_1.handleIngest)(ctx, { type: 'text', content: 'Next.js builds on top of React for SSR', title: 'Next.js Guide' });
|
|
37
|
+
expect(b.slug).toBe('nextjs-guide');
|
|
38
|
+
(0, db_1.insertFts)(ctx.db, { path: b.path, slug: b.slug, title: 'Next.js Guide', content: 'Next.js builds on top of React for SSR', category: 'raw', type: 'raw' });
|
|
39
|
+
// 3. Relate: B extends A
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
41
|
+
const rel = (0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'nextjs-guide', source_b: 'react-guide', relation_type: 'extends' });
|
|
42
|
+
expect(rel.created).toBe(true);
|
|
43
|
+
// 4. Search for "Next.js" → related should include react-guide via KG
|
|
44
|
+
const search = (0, search_adapter_1.handleSearch)(ctx, { query: 'Next.js SSR' });
|
|
45
|
+
const nextResult = search.results.find(r => r.slug === 'nextjs-guide');
|
|
46
|
+
expect(nextResult).toBeDefined();
|
|
47
|
+
expect(search.related.some(r => r.source === 'react-guide' && r.relation_type === 'extends')).toBe(true);
|
|
48
|
+
// 5. Get source with relations
|
|
49
|
+
const got = (0, get_adapter_1.handleGet)(ctx, { source: 'nextjs-guide' });
|
|
50
|
+
expect(got.content).toContain('Next.js builds on top of React');
|
|
51
|
+
expect(got.relations).toBeDefined();
|
|
52
|
+
expect(got.relations.some(r => r.source === 'react-guide')).toBe(true);
|
|
53
|
+
// 6. Remove relation → search should have empty related for this pair
|
|
54
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'remove', source_a: 'nextjs-guide', source_b: 'react-guide', relation_type: 'extends' });
|
|
55
|
+
const got2 = (0, get_adapter_1.handleGet)(ctx, { source: 'nextjs-guide' });
|
|
56
|
+
expect(got2.relations ?? []).toHaveLength(0);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=e2e-kg-pipeline.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-kg-pipeline.test.js","sourceRoot":"","sources":["../../tests/e2e-kg-pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/helpers/db.js
CHANGED
|
@@ -33,6 +33,7 @@ const migrations_v063_js_1 = require("../../scripts/lib/migrations-v063.js");
|
|
|
33
33
|
const migrations_v066_js_1 = require("../../scripts/lib/migrations-v066.js");
|
|
34
34
|
const migrations_v067_js_1 = require("../../scripts/lib/migrations-v067.js");
|
|
35
35
|
const migrations_v068_js_1 = require("../../scripts/lib/migrations-v068.js");
|
|
36
|
+
const migrations_v072_js_1 = require("../../scripts/lib/migrations-v072.js");
|
|
36
37
|
// Hook'lar .cjs kalıyor — SQL constants'ları oradan import ediyoruz
|
|
37
38
|
const { SQL_FTS_CREATE, insertFtsRow, ensureEpisodesTable: ensureEpisodesTableCjs, parseFrontmatter: parseFrontmatterCjs, extractFtsMetadata: extractFtsMetadataCjs, resolveProject: resolveProjectCjs } = require('../../hooks/lib/mindlore-common.cjs');
|
|
38
39
|
function sha256(content) {
|
|
@@ -63,7 +64,7 @@ const ALL_MIGRATIONS = [
|
|
|
63
64
|
...migrations_js_1.V050_MIGRATIONS, ...migrations_v051_js_1.V051_MIGRATIONS, ...migrations_v052_js_1.V052_MIGRATIONS,
|
|
64
65
|
...migrations_v053_js_1.V053_MIGRATIONS, ...migrations_v061_js_1.V061_MIGRATIONS, ...migrations_v062_js_1.V062_MIGRATIONS,
|
|
65
66
|
...migrations_v063_js_1.V063_MIGRATIONS, ...migrations_v066_js_1.V066_MIGRATIONS, ...migrations_v067_js_1.V067_MIGRATIONS,
|
|
66
|
-
...migrations_v068_js_1.V068_MIGRATIONS,
|
|
67
|
+
...migrations_v068_js_1.V068_MIGRATIONS, ...migrations_v072_js_1.V072_MIGRATIONS,
|
|
67
68
|
];
|
|
68
69
|
function createTestDbAtVersion(dbPath, maxVersion) {
|
|
69
70
|
const db = createTestDb(dbPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-get-tool.test.d.ts","sourceRoot":"","sources":["../../tests/mcp-get-tool.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 get_adapter_1 = require("../scripts/lib/tool-adapters/get-adapter");
|
|
11
|
+
const relate_adapter_1 = require("../scripts/lib/tool-adapters/relate-adapter");
|
|
12
|
+
describe('mindlore_get tool', () => {
|
|
13
|
+
let testDir;
|
|
14
|
+
let ctx;
|
|
15
|
+
const sourceContent = `---
|
|
16
|
+
slug: alpha-source
|
|
17
|
+
type: source
|
|
18
|
+
title: Alpha Source
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Architecture
|
|
22
|
+
|
|
23
|
+
This is the architecture section.
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
This is the usage section.
|
|
28
|
+
`;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-get-'));
|
|
31
|
+
const sourcesDir = path_1.default.join(testDir, 'sources');
|
|
32
|
+
fs_1.default.mkdirSync(sourcesDir, { recursive: true });
|
|
33
|
+
const sourcePath = path_1.default.join(sourcesDir, 'alpha-source.md');
|
|
34
|
+
fs_1.default.writeFileSync(sourcePath, sourceContent);
|
|
35
|
+
const dbPath = path_1.default.join(testDir, 'test.db');
|
|
36
|
+
const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
|
|
37
|
+
(0, db_1.insertFts)(db, { path: sourcePath, slug: 'alpha-source', title: 'Alpha Source', content: sourceContent, category: 'sources', type: 'source' });
|
|
38
|
+
(0, db_1.insertFts)(db, { path: path_1.default.join(sourcesDir, 'beta.md'), slug: 'beta', title: 'Beta', content: 'beta content', category: 'sources', type: 'source' });
|
|
39
|
+
ctx = { db, baseDir: testDir };
|
|
40
|
+
});
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
ctx.db.close();
|
|
43
|
+
fs_1.default.rmSync(testDir, { recursive: true, force: true });
|
|
44
|
+
});
|
|
45
|
+
it('returns full content for a source slug', () => {
|
|
46
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source' });
|
|
47
|
+
expect(result.title).toBe('Alpha Source');
|
|
48
|
+
expect(result.slug).toBe('alpha-source');
|
|
49
|
+
expect(result.content).toContain('Architecture');
|
|
50
|
+
expect(result.content).toContain('Usage');
|
|
51
|
+
expect(result.metadata.size).toBeGreaterThan(0);
|
|
52
|
+
});
|
|
53
|
+
it('returns section content when section param given', () => {
|
|
54
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source', section: 'Architecture' });
|
|
55
|
+
expect(result.content).toContain('architecture section');
|
|
56
|
+
expect(result.content).not.toContain('usage section');
|
|
57
|
+
expect(result.section).toBe('Architecture');
|
|
58
|
+
});
|
|
59
|
+
it('returns section via case-insensitive slug match', () => {
|
|
60
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source', section: 'architecture' });
|
|
61
|
+
expect(result.content).toContain('architecture section');
|
|
62
|
+
expect(result.section).toBe('Architecture');
|
|
63
|
+
});
|
|
64
|
+
it('returns available_sections when section not found', () => {
|
|
65
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source', section: 'nonexistent' });
|
|
66
|
+
expect(result.content).toBe('');
|
|
67
|
+
expect(result.section).toBeUndefined();
|
|
68
|
+
expect(result.available_sections).toContain('Architecture');
|
|
69
|
+
expect(result.available_sections).toContain('Usage');
|
|
70
|
+
});
|
|
71
|
+
it('includes relations when include_relations is true', () => {
|
|
72
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'alpha-source', source_b: 'beta', relation_type: 'extends' });
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
74
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source', include_relations: true });
|
|
75
|
+
expect(result.relations).toHaveLength(1);
|
|
76
|
+
expect(result.relations[0].source).toBe('beta');
|
|
77
|
+
expect(result.relations[0].relation_type).toBe('extends');
|
|
78
|
+
expect(result.relations[0].direction).toBe('outgoing');
|
|
79
|
+
});
|
|
80
|
+
it('excludes relations when include_relations is false', () => {
|
|
81
|
+
(0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'alpha-source', source_b: 'beta', relation_type: 'extends' });
|
|
82
|
+
const result = (0, get_adapter_1.handleGet)(ctx, { source: 'alpha-source', include_relations: false });
|
|
83
|
+
expect(result.relations).toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
it('throws when source slug not found', () => {
|
|
86
|
+
expect(() => (0, get_adapter_1.handleGet)(ctx, { source: 'nonexistent' })).toThrow(/not found/);
|
|
87
|
+
});
|
|
88
|
+
it('throws when source file missing from disk', () => {
|
|
89
|
+
(0, db_1.insertFts)(ctx.db, { path: path_1.default.join(testDir, 'sources/ghost.md'), slug: 'ghost', title: 'Ghost', content: 'x', category: 'sources', type: 'source' });
|
|
90
|
+
expect(() => (0, get_adapter_1.handleGet)(ctx, { source: 'ghost' })).toThrow();
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=mcp-get-tool.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-get-tool.test.js","sourceRoot":"","sources":["../../tests/mcp-get-tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-relate-tool.test.d.ts","sourceRoot":"","sources":["../../tests/mcp-relate-tool.test.ts"],"names":[],"mappings":""}
|