mindlore 0.7.2 → 0.7.4
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/init.js +152 -151
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +1 -1
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +2 -7
- 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/hook-helpers.d.ts +8 -0
- package/dist/scripts/lib/hook-helpers.d.ts.map +1 -0
- package/dist/scripts/lib/hook-helpers.js +27 -0
- package/dist/scripts/lib/hook-helpers.js.map +1 -0
- package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -1
- package/dist/scripts/lib/mcp-namespace.js +0 -5
- package/dist/scripts/lib/mcp-namespace.js.map +1 -1
- package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
- package/dist/scripts/lib/mcp-tools.js +3 -19
- package/dist/scripts/lib/mcp-tools.js.map +1 -1
- package/dist/scripts/lib/relation-helpers.js +1 -1
- package/dist/scripts/lib/relation-helpers.js.map +1 -1
- package/dist/scripts/lib/session-payload.d.ts.map +1 -1
- package/dist/scripts/lib/session-payload.js +4 -16
- package/dist/scripts/lib/session-payload.js.map +1 -1
- 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/decide-adapter.d.ts +1 -1
- package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -1
- package/dist/scripts/lib/tool-adapters/decide-adapter.js +5 -0
- package/dist/scripts/lib/tool-adapters/decide-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 +4 -1
- package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
- package/dist/scripts/mindlore-doctor.js +86 -40
- package/dist/scripts/mindlore-doctor.js.map +1 -1
- package/dist/scripts/mindlore-health-check.js +2 -2
- package/dist/scripts/mindlore-health-check.js.map +1 -1
- package/dist/scripts/mindlore-perf.d.ts +3 -1
- package/dist/scripts/mindlore-perf.d.ts.map +1 -1
- package/dist/scripts/mindlore-perf.js +13 -6
- package/dist/scripts/mindlore-perf.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 +45 -15
- package/dist/tests/doctor.test.js.map +1 -1
- package/dist/tests/dont-repeat-dedup.test.js +13 -1
- package/dist/tests/dont-repeat-dedup.test.js.map +1 -1
- package/dist/tests/fts5-sync.test.js +11 -117
- package/dist/tests/fts5-sync.test.js.map +1 -1
- package/dist/tests/hook-helpers.test.d.ts +2 -0
- package/dist/tests/hook-helpers.test.d.ts.map +1 -0
- package/dist/tests/hook-helpers.test.js +44 -0
- package/dist/tests/hook-helpers.test.js.map +1 -0
- 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/latency-budget.test.d.ts +2 -0
- package/dist/tests/latency-budget.test.d.ts.map +1 -0
- package/dist/tests/latency-budget.test.js +37 -0
- package/dist/tests/latency-budget.test.js.map +1 -0
- package/dist/tests/mcp-namespace.test.d.ts +2 -0
- package/dist/tests/mcp-namespace.test.d.ts.map +1 -0
- package/dist/tests/mcp-namespace.test.js +41 -0
- package/dist/tests/mcp-namespace.test.js.map +1 -0
- package/dist/tests/session-payload.test.js +13 -5
- package/dist/tests/session-payload.test.js.map +1 -1
- 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/telemetry-perf.test.js +9 -8
- package/dist/tests/telemetry-perf.test.js.map +1 -1
- 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 +2 -5
- package/hooks/cc-session-sync.cjs +2 -5
- package/hooks/lib/mindlore-common.cjs +41 -8
- package/hooks/mindlore-fts5-sync.cjs +5 -1
- package/hooks/mindlore-search.cjs +20 -14
- package/hooks/mindlore-session-focus.cjs +5 -17
- package/hooks/src/mindlore-fts5-sync.cjs +7 -4
- package/hooks/src/mindlore-search.cjs +19 -11
- package/hooks/src/mindlore-session-focus.cjs +1 -1
- package/package.json +3 -2
- package/plugin.json +5 -2
- package/skills/mindlore-decide/SKILL.md +7 -0
- package/skills/mindlore-log/SKILL.md +7 -0
- package/templates/config.json +1 -1
|
@@ -14,28 +14,16 @@ var require_session_payload = __commonJS({
|
|
|
14
14
|
};
|
|
15
15
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16
16
|
exports2.buildSessionPayload = buildSessionPayload;
|
|
17
|
-
var fs_1 = __importDefault(require("fs"));
|
|
18
|
-
var path_1 = __importDefault(require("path"));
|
|
19
17
|
var crypto_1 = __importDefault(require("crypto"));
|
|
20
18
|
var CHARS_PER_TOKEN = 4;
|
|
21
19
|
function estimateTokens(text) {
|
|
22
20
|
return Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
23
21
|
}
|
|
24
|
-
function buildSessionSummary(
|
|
25
|
-
if (latestDeltaContent)
|
|
26
|
-
const lines2 = latestDeltaContent.split("\n").filter((l) => l.startsWith("- ") || l.startsWith("# "));
|
|
27
|
-
return lines2.slice(0, 10).join("\n") || "No previous session data.";
|
|
28
|
-
}
|
|
29
|
-
const diaryDir = path_1.default.join(baseDir, "diary");
|
|
30
|
-
if (!fs_1.default.existsSync(diaryDir))
|
|
31
|
-
return "No previous session data.";
|
|
32
|
-
const deltas = fs_1.default.readdirSync(diaryDir).filter((f) => f.startsWith("delta-")).sort();
|
|
33
|
-
if (deltas.length === 0)
|
|
22
|
+
function buildSessionSummary(_baseDir, latestDeltaContent) {
|
|
23
|
+
if (!latestDeltaContent)
|
|
34
24
|
return "No previous session data.";
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
const lines = latest.split("\n").filter((l) => l.startsWith("- ") || l.startsWith("# "));
|
|
38
|
-
return lines.slice(0, 10).join("\n");
|
|
25
|
+
const lines = latestDeltaContent.split("\n").filter((l) => l.startsWith("- ") || l.startsWith("# "));
|
|
26
|
+
return lines.slice(0, 10).join("\n") || "No previous session data.";
|
|
39
27
|
}
|
|
40
28
|
function buildEpisodeSections(db, project, sessionId) {
|
|
41
29
|
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3).toISOString();
|
|
@@ -725,11 +713,11 @@ ${content}`);
|
|
|
725
713
|
const latestPath = path.join(diaryDir, latestName);
|
|
726
714
|
const deltaContent = fs.readFileSync(latestPath, "utf8").trim();
|
|
727
715
|
sourceChars += deltaContent.length;
|
|
728
|
-
latestDeltaContent = deltaContent;
|
|
729
716
|
const { meta } = parseFrontmatter(deltaContent);
|
|
730
717
|
const deltaProject = meta.project || null;
|
|
731
718
|
const currentProject = getProjectName();
|
|
732
719
|
if (!deltaProject || deltaProject.toLowerCase() === currentProject.toLowerCase()) {
|
|
720
|
+
latestDeltaContent = deltaContent;
|
|
733
721
|
output.push(`[Mindlore Delta: ${latestName}]
|
|
734
722
|
${truncateChangedFiles(truncateCommits(deltaContent))}`);
|
|
735
723
|
}
|
|
@@ -15,17 +15,18 @@ const fs = require('fs');
|
|
|
15
15
|
const path = require('path');
|
|
16
16
|
const { DB_NAME, sha256, openDatabase, getAllMdFiles, parseFrontmatter, extractFtsMetadata, insertFtsRow, readHookStdin, getActiveMindloreDir, getProjectName, resolveProject, hookLog, withTelemetry, SQL_FTS_SESSIONS_INSERT, isSessionCategory, isInsideMindloreDir } = require('./lib/mindlore-common.cjs');
|
|
17
17
|
|
|
18
|
+
function shouldIndexFile(filePath) {
|
|
19
|
+
return !!(filePath && filePath.endsWith('.md'));
|
|
20
|
+
}
|
|
21
|
+
|
|
18
22
|
function main() {
|
|
19
23
|
const filePath = readHookStdin(['path', 'file_path']);
|
|
20
24
|
|
|
21
25
|
if (!filePath) return;
|
|
26
|
+
if (!shouldIndexFile(filePath)) return;
|
|
22
27
|
const resolved = path.resolve(filePath);
|
|
23
28
|
if (!isInsideMindloreDir(resolved)) return;
|
|
24
29
|
|
|
25
|
-
// Skip if this is a single .md file change — mindlore-index.cjs handles those.
|
|
26
|
-
// This hook is for bulk changes (git pull, manual batch edits).
|
|
27
|
-
if (filePath.endsWith('.md')) return;
|
|
28
|
-
|
|
29
30
|
const baseDir = getActiveMindloreDir();
|
|
30
31
|
if (!fs.existsSync(baseDir)) return;
|
|
31
32
|
|
|
@@ -92,6 +93,8 @@ function main() {
|
|
|
92
93
|
|
|
93
94
|
}
|
|
94
95
|
|
|
96
|
+
module.exports = { shouldIndexFile };
|
|
97
|
+
|
|
95
98
|
withTelemetry('mindlore-fts5-sync', main).catch(err => {
|
|
96
99
|
hookLog('mindlore-fts5-sync', 'error', err?.message ?? String(err));
|
|
97
100
|
process.exit(0);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
const fs = require('fs');
|
|
13
13
|
const path = require('path');
|
|
14
|
-
const { getAllDbs, openDatabase, extractHeadings,
|
|
14
|
+
const { getAllDbs, openDatabase, extractHeadings, readConfig, hookLog, incrementRecallCount, withTelemetry } = require('./lib/mindlore-common.cjs');
|
|
15
15
|
|
|
16
16
|
const MAX_RESULTS = 3;
|
|
17
17
|
const MIN_QUERY_WORDS = 3;
|
|
@@ -30,9 +30,23 @@ try {
|
|
|
30
30
|
// search-cache not built yet
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
function parseStdin() {
|
|
34
|
+
try {
|
|
35
|
+
const raw = fs.readFileSync(0, 'utf8').trim();
|
|
36
|
+
if (!raw) return { userMessage: '', sessionId: 'unknown' };
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
const userMessage = parsed.prompt || parsed.content || parsed.message || parsed.query || raw;
|
|
39
|
+
const sessionId = parsed.session_id || 'unknown';
|
|
40
|
+
return { userMessage, sessionId };
|
|
41
|
+
} catch (_err) {
|
|
42
|
+
return { userMessage: '', sessionId: 'unknown' };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
33
46
|
function main() {
|
|
34
|
-
const userMessage =
|
|
47
|
+
const { userMessage, sessionId } = parseStdin();
|
|
35
48
|
if (!userMessage || userMessage.length < MIN_QUERY_WORDS) return;
|
|
49
|
+
let searchMs = 0;
|
|
36
50
|
|
|
37
51
|
const dbPaths = getAllDbs();
|
|
38
52
|
if (dbPaths.length === 0) return;
|
|
@@ -46,15 +60,6 @@ function main() {
|
|
|
46
60
|
const config = readConfig(path.dirname(dbPaths[0]));
|
|
47
61
|
const synonyms = (config && config.synonyms) ? config.synonyms : {};
|
|
48
62
|
|
|
49
|
-
// Read session_id from stdin for throttling
|
|
50
|
-
let sessionId;
|
|
51
|
-
try {
|
|
52
|
-
const stdinData = JSON.parse(process.env.CLAUDE_HOOK_STDIN || '{}');
|
|
53
|
-
sessionId = stdinData.session_id || 'unknown';
|
|
54
|
-
} catch (_) {
|
|
55
|
-
sessionId = 'unknown';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
63
|
const allResults = [];
|
|
59
64
|
for (const dbPath of dbPaths) {
|
|
60
65
|
const db = openDatabase(dbPath);
|
|
@@ -82,11 +87,13 @@ function main() {
|
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
|
|
90
|
+
const t0 = Date.now();
|
|
85
91
|
const results = searchEngineMod.search(db, userMessage, {
|
|
86
92
|
project,
|
|
87
93
|
maxResults: effectiveMax,
|
|
88
94
|
synonyms,
|
|
89
95
|
});
|
|
96
|
+
searchMs += Date.now() - t0;
|
|
90
97
|
|
|
91
98
|
if (cache) cache.set(userMessage, results);
|
|
92
99
|
|
|
@@ -192,6 +199,7 @@ function main() {
|
|
|
192
199
|
|
|
193
200
|
process.stdout.write(outputStr);
|
|
194
201
|
}
|
|
202
|
+
return { search_ms: searchMs, result_count: relevant.length };
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
withTelemetry('mindlore-search', main).catch(err => {
|
|
@@ -150,11 +150,11 @@ function main() {
|
|
|
150
150
|
const latestPath = path.join(diaryDir, latestName);
|
|
151
151
|
const deltaContent = fs.readFileSync(latestPath, 'utf8').trim();
|
|
152
152
|
sourceChars += deltaContent.length;
|
|
153
|
-
latestDeltaContent = deltaContent;
|
|
154
153
|
const { meta } = parseFrontmatter(deltaContent);
|
|
155
154
|
const deltaProject = meta.project || null;
|
|
156
155
|
const currentProject = getProjectName();
|
|
157
156
|
if (!deltaProject || deltaProject.toLowerCase() === currentProject.toLowerCase()) {
|
|
157
|
+
latestDeltaContent = deltaContent;
|
|
158
158
|
output.push(`[Mindlore Delta: ${latestName}]\n${truncateChangedFiles(truncateCommits(deltaContent))}`);
|
|
159
159
|
}
|
|
160
160
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mindlore",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "AI-native knowledge system for Claude Code",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"bundle:hooks": "npx tsx scripts/bundle-hooks.ts",
|
|
28
28
|
"bundle:mcp": "npx esbuild scripts/mcp-server.ts --bundle --platform=node --target=node20 --format=cjs --outfile=mcp-server.cjs --external:better-sqlite3",
|
|
29
29
|
"bundle": "npm run bundle:hooks && npm run bundle:mcp",
|
|
30
|
-
"postinstall": "npm rebuild better-sqlite3"
|
|
30
|
+
"postinstall": "npm run build && npm rebuild better-sqlite3"
|
|
31
31
|
},
|
|
32
32
|
"keywords": [
|
|
33
33
|
"claude-code",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"typescript": "^6.0.2"
|
|
72
72
|
},
|
|
73
73
|
"files": [
|
|
74
|
+
".claude-plugin/",
|
|
74
75
|
"agents/",
|
|
75
76
|
"dist/",
|
|
76
77
|
"hooks/",
|
package/plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifestVersion": 2,
|
|
3
3
|
"name": "mindlore",
|
|
4
4
|
"description": "AI-native knowledge system for Claude Code. Persistent, searchable, evolving knowledge base with FTS5 and Knowledge Graph.",
|
|
5
|
-
"version": "0.7.
|
|
5
|
+
"version": "0.7.4",
|
|
6
6
|
"skills": [
|
|
7
7
|
{
|
|
8
8
|
"name": "mindlore-ingest",
|
|
@@ -80,10 +80,13 @@
|
|
|
80
80
|
"mcpServers": {
|
|
81
81
|
"mindlore": {
|
|
82
82
|
"command": "node",
|
|
83
|
-
"args": [
|
|
83
|
+
"args": [
|
|
84
|
+
"${CLAUDE_PLUGIN_ROOT}/mcp-server.cjs"
|
|
85
|
+
],
|
|
84
86
|
"description": "Mindlore MCP server: FTS5 search, episodic memory, knowledge graph relations, and KB management"
|
|
85
87
|
}
|
|
86
88
|
},
|
|
89
|
+
"_hooks_note": "Hooks loaded by CC plugin auto-discovery from hooks/ directory. This array is metadata only — not read by CC or init.",
|
|
87
90
|
"hooks": [
|
|
88
91
|
{
|
|
89
92
|
"event": "SessionStart",
|
package/templates/config.json
CHANGED