mindlore 0.6.8 → 0.7.0
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/README.md +259 -259
- package/SCHEMA.md +292 -292
- package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -1
- package/dist/scripts/cc-memory-bulk-sync.js +4 -2
- package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
- package/dist/scripts/cc-session-sync.d.ts.map +1 -1
- package/dist/scripts/cc-session-sync.js +9 -7
- package/dist/scripts/cc-session-sync.js.map +1 -1
- package/dist/scripts/fetch-raw.js +5 -4
- package/dist/scripts/fetch-raw.js.map +1 -1
- package/dist/scripts/init.js +16 -12
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/consolidation.js +10 -10
- package/dist/scripts/lib/constants.d.ts +3 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +11 -1
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/decay.js +9 -9
- package/dist/scripts/lib/episodes.js +23 -23
- package/dist/scripts/lib/err-msg.d.ts +2 -0
- package/dist/scripts/lib/err-msg.d.ts.map +1 -0
- package/dist/scripts/lib/err-msg.js +7 -0
- package/dist/scripts/lib/err-msg.js.map +1 -0
- package/dist/scripts/lib/mcp-namespace.d.ts +2 -0
- package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -0
- package/dist/scripts/lib/mcp-namespace.js +21 -0
- package/dist/scripts/lib/mcp-namespace.js.map +1 -0
- package/dist/scripts/lib/mcp-telemetry.d.ts +11 -0
- package/dist/scripts/lib/mcp-telemetry.d.ts.map +1 -0
- package/dist/scripts/lib/mcp-telemetry.js +37 -0
- package/dist/scripts/lib/mcp-telemetry.js.map +1 -0
- package/dist/scripts/lib/mcp-tools.d.ts +10 -0
- package/dist/scripts/lib/mcp-tools.d.ts.map +1 -0
- package/dist/scripts/lib/mcp-tools.js +121 -0
- package/dist/scripts/lib/mcp-tools.js.map +1 -0
- package/dist/scripts/lib/migrations-v061.js +21 -21
- package/dist/scripts/lib/migrations-v062.js +11 -11
- package/dist/scripts/lib/migrations-v063.js +14 -14
- package/dist/scripts/lib/migrations-v067.js +11 -11
- package/dist/scripts/lib/rrf.d.ts.map +1 -1
- package/dist/scripts/lib/rrf.js +2 -1
- package/dist/scripts/lib/rrf.js.map +1 -1
- package/dist/scripts/lib/schema-version.js +6 -6
- package/dist/scripts/lib/search-cache.js +11 -11
- package/dist/scripts/lib/search-engine.d.ts +1 -0
- package/dist/scripts/lib/search-engine.d.ts.map +1 -1
- package/dist/scripts/lib/search-engine.js +9 -5
- package/dist/scripts/lib/search-engine.js.map +1 -1
- package/dist/scripts/lib/secure-io.d.ts +11 -0
- package/dist/scripts/lib/secure-io.d.ts.map +1 -0
- package/dist/scripts/lib/secure-io.js +26 -0
- package/dist/scripts/lib/secure-io.js.map +1 -0
- package/dist/scripts/lib/session-payload.js +7 -7
- package/dist/scripts/lib/slugify.d.ts +2 -0
- package/dist/scripts/lib/slugify.d.ts.map +1 -0
- package/dist/scripts/lib/slugify.js +13 -0
- package/dist/scripts/lib/slugify.js.map +1 -0
- package/dist/scripts/lib/smart-snippet.d.ts +9 -0
- package/dist/scripts/lib/smart-snippet.d.ts.map +1 -0
- package/dist/scripts/lib/smart-snippet.js +47 -0
- package/dist/scripts/lib/smart-snippet.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts +15 -0
- package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/brief-adapter.js +66 -0
- package/dist/scripts/lib/tool-adapters/brief-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +31 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.js +71 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts +16 -0
- package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/ingest-adapter.js +58 -0
- package/dist/scripts/lib/tool-adapters/ingest-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts +20 -0
- package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/recall-adapter.js +69 -0
- package/dist/scripts/lib/tool-adapters/recall-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +22 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.js +32 -0
- package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts +15 -0
- package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts.map +1 -0
- package/dist/scripts/lib/tool-adapters/stats-adapter.js +66 -0
- package/dist/scripts/lib/tool-adapters/stats-adapter.js.map +1 -0
- package/dist/scripts/lib/triage.js +3 -3
- package/dist/scripts/lib/validate-manifest.d.ts +8 -0
- package/dist/scripts/lib/validate-manifest.d.ts.map +1 -0
- package/dist/scripts/lib/validate-manifest.js +80 -0
- package/dist/scripts/lib/validate-manifest.js.map +1 -0
- package/dist/scripts/maintain-cleanup.d.ts.map +1 -1
- package/dist/scripts/maintain-cleanup.js +3 -2
- package/dist/scripts/maintain-cleanup.js.map +1 -1
- package/dist/scripts/mcp-server.d.ts +3 -0
- package/dist/scripts/mcp-server.d.ts.map +1 -0
- package/dist/scripts/mcp-server.js +85 -0
- package/dist/scripts/mcp-server.js.map +1 -0
- package/dist/scripts/mindlore-backup.js +9 -9
- package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
- package/dist/scripts/mindlore-doctor.js +4 -6
- package/dist/scripts/mindlore-doctor.js.map +1 -1
- package/dist/scripts/mindlore-fts5-index.js +12 -12
- package/dist/scripts/mindlore-fts5-index.js.map +1 -1
- package/dist/scripts/mindlore-health-check.d.ts.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/validate-manifest-cli.d.ts +2 -0
- package/dist/scripts/validate-manifest-cli.d.ts.map +1 -0
- package/dist/scripts/validate-manifest-cli.js +38 -0
- package/dist/scripts/validate-manifest-cli.js.map +1 -0
- package/dist/tests/cc-memory-sync.test.js +3 -3
- package/dist/tests/chunks-migration.test.js +1 -1
- package/dist/tests/compaction-snapshot.test.js +2 -2
- package/dist/tests/consolidation.test.js +3 -3
- package/dist/tests/decay.test.js +9 -9
- package/dist/tests/diary.test.js +4 -4
- package/dist/tests/episode-file.test.js +2 -1
- package/dist/tests/episode-file.test.js.map +1 -1
- package/dist/tests/episodes-inject.test.js +9 -9
- package/dist/tests/err-msg.test.d.ts +2 -0
- package/dist/tests/err-msg.test.d.ts.map +1 -0
- package/dist/tests/err-msg.test.js +24 -0
- package/dist/tests/err-msg.test.js.map +1 -0
- package/dist/tests/fetch-raw.test.js +1 -2
- package/dist/tests/fetch-raw.test.js.map +1 -1
- package/dist/tests/fts5.test.js +75 -75
- package/dist/tests/fuzzy.test.js +1 -1
- package/dist/tests/git-snapshot.test.js +3 -5
- package/dist/tests/git-snapshot.test.js.map +1 -1
- package/dist/tests/helpers/db.d.ts +1 -2
- package/dist/tests/helpers/db.d.ts.map +1 -1
- package/dist/tests/helpers/db.js +18 -26
- package/dist/tests/helpers/db.js.map +1 -1
- package/dist/tests/manifest-v2.test.d.ts +2 -0
- package/dist/tests/manifest-v2.test.d.ts.map +1 -0
- package/dist/tests/manifest-v2.test.js +67 -0
- package/dist/tests/manifest-v2.test.js.map +1 -0
- package/dist/tests/mcp-server.test.d.ts +2 -0
- package/dist/tests/mcp-server.test.d.ts.map +1 -0
- package/dist/tests/mcp-server.test.js +118 -0
- package/dist/tests/mcp-server.test.js.map +1 -0
- package/dist/tests/mcp-tools.test.d.ts +2 -0
- package/dist/tests/mcp-tools.test.d.ts.map +1 -0
- package/dist/tests/mcp-tools.test.js +243 -0
- package/dist/tests/mcp-tools.test.js.map +1 -0
- package/dist/tests/migrations-v053.test.js +16 -16
- package/dist/tests/migrations-v061.test.js +10 -10
- package/dist/tests/migrations-v063.test.js +4 -4
- package/dist/tests/migrations-v068.test.js +6 -3
- package/dist/tests/migrations-v068.test.js.map +1 -1
- package/dist/tests/nomination-counts.test.js +6 -6
- package/dist/tests/nomination-counts.test.js.map +1 -1
- package/dist/tests/pre-compact.test.js +2 -1
- package/dist/tests/pre-compact.test.js.map +1 -1
- package/dist/tests/recall-telemetry.test.js +12 -11
- package/dist/tests/recall-telemetry.test.js.map +1 -1
- package/dist/tests/rrf.test.js +3 -3
- package/dist/tests/search-engine.test.js +1 -1
- package/dist/tests/search-hook.test.js +2 -2
- package/dist/tests/search-offload.test.js +1 -1
- package/dist/tests/search-offload.test.js.map +1 -1
- package/dist/tests/secure-io.test.d.ts +2 -0
- package/dist/tests/secure-io.test.d.ts.map +1 -0
- package/dist/tests/secure-io.test.js +65 -0
- package/dist/tests/secure-io.test.js.map +1 -0
- package/dist/tests/session-payload.test.js +1 -1
- package/dist/tests/session-summary.test.js +1 -1
- package/dist/tests/similarity.test.js +1 -1
- package/dist/tests/skill-path-resolution.test.js +22 -3
- package/dist/tests/skill-path-resolution.test.js.map +1 -1
- package/dist/tests/smart-snippet.test.d.ts +2 -0
- package/dist/tests/smart-snippet.test.d.ts.map +1 -0
- package/dist/tests/smart-snippet.test.js +67 -0
- package/dist/tests/smart-snippet.test.js.map +1 -0
- package/dist/tests/triage.test.js +1 -1
- package/hooks/lib/constants.cjs +15 -15
- package/hooks/lib/mindlore-common.cjs +975 -974
- package/hooks/mindlore-cwd-changed.cjs +57 -57
- package/hooks/mindlore-decision-detector.cjs +54 -54
- package/hooks/mindlore-dont-repeat.cjs +222 -222
- package/hooks/mindlore-fts5-sync.cjs +98 -97
- package/hooks/mindlore-index.cjs +230 -229
- package/hooks/mindlore-model-router.cjs +54 -54
- package/hooks/mindlore-post-compact.cjs +69 -69
- package/hooks/mindlore-post-read.cjs +106 -106
- package/hooks/mindlore-pre-compact.cjs +154 -154
- package/hooks/mindlore-read-guard.cjs +105 -105
- package/hooks/mindlore-research-guard.cjs +176 -176
- package/hooks/mindlore-search.cjs +200 -200
- package/hooks/mindlore-session-end.cjs +510 -509
- package/hooks/mindlore-session-focus.cjs +256 -256
- package/package.json +77 -75
- package/plugin.json +8 -1
- package/skills/mindlore-diary/SKILL.md +85 -85
- package/skills/mindlore-evolve/SKILL.md +126 -126
- package/skills/mindlore-explore/SKILL.md +109 -109
- package/skills/mindlore-ingest/SKILL.md +195 -195
- package/skills/mindlore-maintain/SKILL.md +125 -125
- package/skills/mindlore-query/SKILL.md +151 -151
- package/skills/mindlore-reflect/SKILL.md +141 -141
- package/skills/mindlore-stats/SKILL.md +106 -106
- package/templates/INDEX.md +14 -14
- package/templates/SCHEMA.md +292 -292
- package/templates/config.json +1 -1
- package/templates/extraction/article.md +15 -15
- package/templates/extraction/changelog.md +15 -15
- package/templates/extraction/default.md +15 -15
- package/templates/extraction/docs.md +15 -15
- package/templates/extraction/github-repo.md +17 -17
|
@@ -30,26 +30,26 @@ exports.EPISODE_SOURCES = ['hook', 'diary', 'reflect', 'decide', 'manual'];
|
|
|
30
30
|
// ── SQL ──────────────────────────────────────────────────────────────
|
|
31
31
|
// CO-EVOLUTION: Schema mirrors SQL_EPISODES_CREATE + SQL_EPISODES_INDEXES in hooks/lib/mindlore-common.cjs
|
|
32
32
|
// CJS hooks cannot import TS modules; keep both in sync on schema changes.
|
|
33
|
-
exports.SQL_EPISODES_CREATE = `
|
|
34
|
-
CREATE TABLE IF NOT EXISTS episodes (
|
|
35
|
-
id TEXT PRIMARY KEY,
|
|
36
|
-
kind TEXT NOT NULL,
|
|
37
|
-
scope TEXT NOT NULL DEFAULT 'project',
|
|
38
|
-
project TEXT,
|
|
39
|
-
summary TEXT NOT NULL,
|
|
40
|
-
body TEXT,
|
|
41
|
-
tags TEXT,
|
|
42
|
-
entities TEXT,
|
|
43
|
-
parent_id TEXT,
|
|
44
|
-
status TEXT NOT NULL DEFAULT 'active',
|
|
45
|
-
supersedes TEXT,
|
|
46
|
-
source TEXT,
|
|
47
|
-
created_at TEXT NOT NULL
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_kind ON episodes(kind, status);
|
|
51
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_project ON episodes(project, status);
|
|
52
|
-
CREATE INDEX IF NOT EXISTS idx_episodes_created ON episodes(created_at DESC);
|
|
33
|
+
exports.SQL_EPISODES_CREATE = `
|
|
34
|
+
CREATE TABLE IF NOT EXISTS episodes (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
kind TEXT NOT NULL,
|
|
37
|
+
scope TEXT NOT NULL DEFAULT 'project',
|
|
38
|
+
project TEXT,
|
|
39
|
+
summary TEXT NOT NULL,
|
|
40
|
+
body TEXT,
|
|
41
|
+
tags TEXT,
|
|
42
|
+
entities TEXT,
|
|
43
|
+
parent_id TEXT,
|
|
44
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
45
|
+
supersedes TEXT,
|
|
46
|
+
source TEXT,
|
|
47
|
+
created_at TEXT NOT NULL
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_episodes_kind ON episodes(kind, status);
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_episodes_project ON episodes(project, status);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_episodes_created ON episodes(created_at DESC);
|
|
53
53
|
`;
|
|
54
54
|
// ── Helpers ──────────────────────────────────────────────────────────
|
|
55
55
|
// CO-EVOLUTION: generateId mirrors generateEpisodeId in hooks/lib/mindlore-common.cjs
|
|
@@ -64,9 +64,9 @@ function createEpisode(db, input) {
|
|
|
64
64
|
const id = generateId();
|
|
65
65
|
const now = new Date().toISOString();
|
|
66
66
|
const entities = input.entities ? JSON.stringify(input.entities) : null;
|
|
67
|
-
db.prepare(`
|
|
68
|
-
INSERT INTO episodes (id, kind, scope, project, summary, body, tags, entities, parent_id, status, supersedes, source, created_at)
|
|
69
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', ?, ?, ?)
|
|
67
|
+
db.prepare(`
|
|
68
|
+
INSERT INTO episodes (id, kind, scope, project, summary, body, tags, entities, parent_id, status, supersedes, source, created_at)
|
|
69
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', ?, ?, ?)
|
|
70
70
|
`).run(id, input.kind, input.scope ?? 'project', input.project ?? null, input.summary, input.body ?? null, input.tags ?? null, entities, input.parent_id ?? null, input.supersedes ?? null, input.source ?? 'manual', now);
|
|
71
71
|
// If superseding, mark old episode
|
|
72
72
|
if (input.supersedes) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"err-msg.d.ts","sourceRoot":"","sources":["../../../scripts/lib/err-msg.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"err-msg.js","sourceRoot":"","sources":["../../../scripts/lib/err-msg.ts"],"names":[],"mappings":";;AAAA,wBAEC;AAFD,SAAgB,MAAM,CAAC,GAAY;IACjC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-namespace.d.ts","sourceRoot":"","sources":["../../../scripts/lib/mcp-namespace.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
exports.resolveMindloreHome = resolveMindloreHome;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const constants_js_1 = require("./constants.js");
|
|
11
|
+
function resolveMindloreHome() {
|
|
12
|
+
if (process.env.MINDLORE_HOME) {
|
|
13
|
+
return path_1.default.resolve(process.env.MINDLORE_HOME);
|
|
14
|
+
}
|
|
15
|
+
const cwdLocal = path_1.default.join(process.cwd(), constants_js_1.MINDLORE_DIR);
|
|
16
|
+
if (fs_1.default.existsSync(cwdLocal)) {
|
|
17
|
+
return cwdLocal;
|
|
18
|
+
}
|
|
19
|
+
return path_1.default.join(os_1.default.homedir(), constants_js_1.MINDLORE_DIR);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mcp-namespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-namespace.js","sourceRoot":"","sources":["../../../scripts/lib/mcp-namespace.ts"],"names":[],"mappings":";;;;;AAKA,kDASC;AAdD,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,iDAA8C;AAE9C,SAAgB,mBAAmB;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAAY,CAAC,CAAC;IACxD,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,2BAAY,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface TelemetryEntry {
|
|
2
|
+
ts: string;
|
|
3
|
+
tool: string;
|
|
4
|
+
durationMs: number;
|
|
5
|
+
success: boolean;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function writeMcpTelemetry(baseDir: string, entry: TelemetryEntry): void;
|
|
9
|
+
export declare function withMcpTelemetry<T>(baseDir: string, toolName: string, fn: () => Promise<T>): Promise<T>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=mcp-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-telemetry.d.ts","sourceRoot":"","sources":["../../../scripts/lib/mcp-telemetry.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAO9E;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAeZ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
exports.writeMcpTelemetry = writeMcpTelemetry;
|
|
7
|
+
exports.withMcpTelemetry = withMcpTelemetry;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const err_msg_js_1 = require("./err-msg.js");
|
|
11
|
+
function writeMcpTelemetry(baseDir, entry) {
|
|
12
|
+
try {
|
|
13
|
+
const telemetryPath = path_1.default.join(baseDir, 'telemetry.jsonl');
|
|
14
|
+
fs_1.default.appendFileSync(telemetryPath, JSON.stringify(entry) + '\n');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// telemetry write failure is non-fatal
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function withMcpTelemetry(baseDir, toolName, fn) {
|
|
21
|
+
const start = Date.now();
|
|
22
|
+
const ts = new Date().toISOString();
|
|
23
|
+
try {
|
|
24
|
+
const result = await fn();
|
|
25
|
+
writeMcpTelemetry(baseDir, {
|
|
26
|
+
ts, tool: toolName, durationMs: Date.now() - start, success: true,
|
|
27
|
+
});
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
writeMcpTelemetry(baseDir, {
|
|
32
|
+
ts, tool: toolName, durationMs: Date.now() - start, success: false, error: (0, err_msg_js_1.errMsg)(err),
|
|
33
|
+
});
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=mcp-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-telemetry.js","sourceRoot":"","sources":["../../../scripts/lib/mcp-telemetry.ts"],"names":[],"mappings":";;;;;AAYA,8CAOC;AAED,4CAmBC;AAxCD,4CAAoB;AACpB,gDAAwB;AACxB,6CAAsC;AAUtC,SAAgB,iBAAiB,CAAC,OAAe,EAAE,KAAqB;IACtE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC5D,YAAE,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,QAAgB,EAChB,EAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,iBAAiB,CAAC,OAAO,EAAE;YACzB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI;SAClE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iBAAiB,CAAC,OAAO,EAAE;YACzB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAA,mBAAM,EAAC,GAAG,CAAC;SACvF,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type BetterSqlite3 from 'better-sqlite3';
|
|
3
|
+
type Database = BetterSqlite3.Database;
|
|
4
|
+
export interface McpContext {
|
|
5
|
+
db: Database;
|
|
6
|
+
baseDir: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function registerAllTools(server: McpServer, ctx: McpContext): void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=mcp-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../../scripts/lib/mcp-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAUvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAmIzE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAllTools = registerAllTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const search_adapter_js_1 = require("./tool-adapters/search-adapter.js");
|
|
6
|
+
const stats_adapter_js_1 = require("./tool-adapters/stats-adapter.js");
|
|
7
|
+
const recall_adapter_js_1 = require("./tool-adapters/recall-adapter.js");
|
|
8
|
+
const brief_adapter_js_1 = require("./tool-adapters/brief-adapter.js");
|
|
9
|
+
const ingest_adapter_js_1 = require("./tool-adapters/ingest-adapter.js");
|
|
10
|
+
const decide_adapter_js_1 = require("./tool-adapters/decide-adapter.js");
|
|
11
|
+
const mcp_telemetry_js_1 = require("./mcp-telemetry.js");
|
|
12
|
+
const err_msg_js_1 = require("./err-msg.js");
|
|
13
|
+
function toolResult(data) {
|
|
14
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
15
|
+
}
|
|
16
|
+
function toolError(message) {
|
|
17
|
+
return { content: [{ type: 'text', text: message }], isError: true };
|
|
18
|
+
}
|
|
19
|
+
function registerAllTools(server, ctx) {
|
|
20
|
+
server.tool('mindlore_search', 'FTS5 + hybrid search across Mindlore knowledge base', {
|
|
21
|
+
query: zod_1.z.string().describe('Search query'),
|
|
22
|
+
limit: zod_1.z.number().min(1).max(20).optional().describe('Max results (default: 5)'),
|
|
23
|
+
scope: zod_1.z.enum(['sources', 'episodes', 'decisions', 'all']).optional().describe('Filter scope'),
|
|
24
|
+
contentType: zod_1.z.enum(['code', 'prose']).optional().describe('Content type filter'),
|
|
25
|
+
}, async (input) => {
|
|
26
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_search', async () => {
|
|
27
|
+
try {
|
|
28
|
+
return toolResult((0, search_adapter_js_1.handleSearch)(ctx, input));
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
server.tool('mindlore_ingest', 'Add knowledge to Mindlore (text or file)', {
|
|
36
|
+
type: zod_1.z.enum(['text', 'file']).describe('Source type'),
|
|
37
|
+
content: zod_1.z.string().describe('Text content, URL, or file path'),
|
|
38
|
+
title: zod_1.z.string().optional().describe('Title (auto-detected if omitted)'),
|
|
39
|
+
tags: zod_1.z.array(zod_1.z.string()).optional().describe('Tags'),
|
|
40
|
+
}, async (input) => {
|
|
41
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_ingest', async () => {
|
|
42
|
+
try {
|
|
43
|
+
return toolResult((0, ingest_adapter_js_1.handleIngest)(ctx, input));
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
server.tool('mindlore_recall', 'Retrieve decisions, episodes, or learnings', {
|
|
51
|
+
type: zod_1.z.enum(['decisions', 'episodes', 'learnings', 'all']).describe('What to recall'),
|
|
52
|
+
limit: zod_1.z.number().min(1).max(50).optional().describe('Max items (default: 10)'),
|
|
53
|
+
since: zod_1.z.string().optional().describe('ISO date filter (UTC)'),
|
|
54
|
+
}, async (input) => {
|
|
55
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_recall', async () => {
|
|
56
|
+
try {
|
|
57
|
+
return toolResult((0, recall_adapter_js_1.handleRecall)(ctx, input));
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
server.tool('mindlore_brief', 'Project briefing — summary of knowledge base state', {
|
|
65
|
+
scope: zod_1.z.enum(['full', 'recent']).optional().describe('Scope (default: recent)'),
|
|
66
|
+
}, async (input) => {
|
|
67
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_brief', async () => {
|
|
68
|
+
try {
|
|
69
|
+
return toolResult((0, brief_adapter_js_1.handleBrief)(ctx, input));
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
server.tool('mindlore_decide', 'Record or list decisions with supersedes chain', {
|
|
77
|
+
action: zod_1.z.enum(['save', 'list']).describe('Action'),
|
|
78
|
+
title: zod_1.z.string().optional().describe('Decision title (required for save)'),
|
|
79
|
+
rationale: zod_1.z.string().optional().describe('Rationale (required for save)'),
|
|
80
|
+
alternatives: zod_1.z.array(zod_1.z.string()).optional().describe('Alternatives considered'),
|
|
81
|
+
supersedes: zod_1.z.string().optional().describe('Slug of superseded decision'),
|
|
82
|
+
limit: zod_1.z.number().min(1).max(50).optional().describe('Max items for list'),
|
|
83
|
+
since: zod_1.z.string().optional().describe('ISO date filter for list'),
|
|
84
|
+
}, async (input) => {
|
|
85
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_decide', async () => {
|
|
86
|
+
try {
|
|
87
|
+
if (input.action === 'save') {
|
|
88
|
+
if (!input.title || !input.rationale) {
|
|
89
|
+
return toolError('title and rationale are required for save action');
|
|
90
|
+
}
|
|
91
|
+
return toolResult((0, decide_adapter_js_1.handleDecide)(ctx, {
|
|
92
|
+
action: 'save',
|
|
93
|
+
title: input.title,
|
|
94
|
+
rationale: input.rationale,
|
|
95
|
+
alternatives: input.alternatives,
|
|
96
|
+
supersedes: input.supersedes,
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
return toolResult((0, decide_adapter_js_1.handleDecide)(ctx, {
|
|
100
|
+
action: 'list',
|
|
101
|
+
limit: input.limit,
|
|
102
|
+
since: input.since,
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
server.tool('mindlore_stats', 'Health check and database statistics', {}, async () => {
|
|
111
|
+
return (0, mcp_telemetry_js_1.withMcpTelemetry)(ctx.baseDir, 'mindlore_stats', async () => {
|
|
112
|
+
try {
|
|
113
|
+
return toolResult((0, stats_adapter_js_1.handleStats)(ctx));
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return toolError((0, err_msg_js_1.errMsg)(err));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=mcp-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../../scripts/lib/mcp-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,17 +6,17 @@ exports.V061_MIGRATIONS = [
|
|
|
6
6
|
version: 6,
|
|
7
7
|
name: 'cleanup_project_category',
|
|
8
8
|
up: (db) => {
|
|
9
|
-
db.exec(`
|
|
10
|
-
UPDATE mindlore_fts SET project = 'unknown'
|
|
11
|
-
WHERE project LIKE '.mindlore%' OR project LIKE 'C--%'
|
|
9
|
+
db.exec(`
|
|
10
|
+
UPDATE mindlore_fts SET project = 'unknown'
|
|
11
|
+
WHERE project LIKE '.mindlore%' OR project LIKE 'C--%'
|
|
12
12
|
`);
|
|
13
|
-
db.exec(`
|
|
14
|
-
UPDATE mindlore_fts SET category = 'cc-subagent'
|
|
15
|
-
WHERE category IN ('subagent', 'cc_subagent')
|
|
13
|
+
db.exec(`
|
|
14
|
+
UPDATE mindlore_fts SET category = 'cc-subagent'
|
|
15
|
+
WHERE category IN ('subagent', 'cc_subagent')
|
|
16
16
|
`);
|
|
17
|
-
db.exec(`
|
|
18
|
-
UPDATE mindlore_fts SET category = 'cc-session'
|
|
19
|
-
WHERE category IN ('session', 'cc_session')
|
|
17
|
+
db.exec(`
|
|
18
|
+
UPDATE mindlore_fts SET category = 'cc-session'
|
|
19
|
+
WHERE category IN ('session', 'cc_session')
|
|
20
20
|
`);
|
|
21
21
|
},
|
|
22
22
|
},
|
|
@@ -24,22 +24,22 @@ exports.V061_MIGRATIONS = [
|
|
|
24
24
|
version: 7,
|
|
25
25
|
name: 'split_fts_sessions',
|
|
26
26
|
up: (db) => {
|
|
27
|
-
db.exec(`
|
|
28
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts_sessions USING fts5(
|
|
29
|
-
path, slug, description, type, category, title, content, tags,
|
|
30
|
-
quality, date_captured, project
|
|
31
|
-
)
|
|
27
|
+
db.exec(`
|
|
28
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts_sessions USING fts5(
|
|
29
|
+
path, slug, description, type, category, title, content, tags,
|
|
30
|
+
quality, date_captured, project
|
|
31
|
+
)
|
|
32
32
|
`);
|
|
33
33
|
db.exec('BEGIN');
|
|
34
34
|
try {
|
|
35
|
-
db.exec(`
|
|
36
|
-
INSERT INTO mindlore_fts_sessions (path, slug, description, type, category, title, content, tags, quality, date_captured, project)
|
|
37
|
-
SELECT path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
38
|
-
FROM mindlore_fts
|
|
39
|
-
WHERE category IN ('cc-subagent', 'cc-session')
|
|
35
|
+
db.exec(`
|
|
36
|
+
INSERT INTO mindlore_fts_sessions (path, slug, description, type, category, title, content, tags, quality, date_captured, project)
|
|
37
|
+
SELECT path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
38
|
+
FROM mindlore_fts
|
|
39
|
+
WHERE category IN ('cc-subagent', 'cc-session')
|
|
40
40
|
`);
|
|
41
|
-
db.exec(`
|
|
42
|
-
DELETE FROM mindlore_fts WHERE category IN ('cc-subagent', 'cc-session')
|
|
41
|
+
db.exec(`
|
|
42
|
+
DELETE FROM mindlore_fts WHERE category IN ('cc-subagent', 'cc-session')
|
|
43
43
|
`);
|
|
44
44
|
db.exec('COMMIT');
|
|
45
45
|
}
|
|
@@ -6,17 +6,17 @@ exports.V062_MIGRATIONS = [
|
|
|
6
6
|
version: 8,
|
|
7
7
|
name: 'raw_metadata_table',
|
|
8
8
|
up: (db) => {
|
|
9
|
-
db.exec(`
|
|
10
|
-
CREATE TABLE IF NOT EXISTS raw_metadata (
|
|
11
|
-
path TEXT PRIMARY KEY,
|
|
12
|
-
title TEXT,
|
|
13
|
-
url TEXT,
|
|
14
|
-
date_captured TEXT,
|
|
15
|
-
headings TEXT,
|
|
16
|
-
file_size INTEGER,
|
|
17
|
-
line_count INTEGER,
|
|
18
|
-
extracted_at TEXT NOT NULL
|
|
19
|
-
)
|
|
9
|
+
db.exec(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS raw_metadata (
|
|
11
|
+
path TEXT PRIMARY KEY,
|
|
12
|
+
title TEXT,
|
|
13
|
+
url TEXT,
|
|
14
|
+
date_captured TEXT,
|
|
15
|
+
headings TEXT,
|
|
16
|
+
file_size INTEGER,
|
|
17
|
+
line_count INTEGER,
|
|
18
|
+
extracted_at TEXT NOT NULL
|
|
19
|
+
)
|
|
20
20
|
`);
|
|
21
21
|
},
|
|
22
22
|
},
|
|
@@ -14,10 +14,10 @@ exports.V063_MIGRATIONS = [
|
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
|
|
15
15
|
const porterCount = db.prepare('SELECT COUNT(*) as c FROM mindlore_fts').get().c;
|
|
16
16
|
if (porterCount > 0) {
|
|
17
|
-
db.exec(`
|
|
18
|
-
INSERT INTO mindlore_fts_trigram(path, slug, description, type, category, title, content, tags, quality, date_captured, project)
|
|
19
|
-
SELECT path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
20
|
-
FROM mindlore_fts
|
|
17
|
+
db.exec(`
|
|
18
|
+
INSERT INTO mindlore_fts_trigram(path, slug, description, type, category, title, content, tags, quality, date_captured, project)
|
|
19
|
+
SELECT path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
20
|
+
FROM mindlore_fts
|
|
21
21
|
`);
|
|
22
22
|
}
|
|
23
23
|
},
|
|
@@ -33,16 +33,16 @@ exports.V063_MIGRATIONS = [
|
|
|
33
33
|
version: 12,
|
|
34
34
|
name: 'chunks_table',
|
|
35
35
|
up: (db) => {
|
|
36
|
-
db.exec(`
|
|
37
|
-
CREATE TABLE IF NOT EXISTS chunks (
|
|
38
|
-
id INTEGER PRIMARY KEY,
|
|
39
|
-
source_path TEXT NOT NULL,
|
|
40
|
-
chunk_index INTEGER NOT NULL,
|
|
41
|
-
heading TEXT,
|
|
42
|
-
breadcrumb TEXT,
|
|
43
|
-
char_count INTEGER,
|
|
44
|
-
UNIQUE(source_path, chunk_index)
|
|
45
|
-
)
|
|
36
|
+
db.exec(`
|
|
37
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
38
|
+
id INTEGER PRIMARY KEY,
|
|
39
|
+
source_path TEXT NOT NULL,
|
|
40
|
+
chunk_index INTEGER NOT NULL,
|
|
41
|
+
heading TEXT,
|
|
42
|
+
breadcrumb TEXT,
|
|
43
|
+
char_count INTEGER,
|
|
44
|
+
UNIQUE(source_path, chunk_index)
|
|
45
|
+
)
|
|
46
46
|
`);
|
|
47
47
|
},
|
|
48
48
|
},
|
|
@@ -22,18 +22,18 @@ exports.V067_MIGRATIONS = [
|
|
|
22
22
|
version: 16,
|
|
23
23
|
name: 'episode_inject_log_integer_fix',
|
|
24
24
|
up: (db) => {
|
|
25
|
-
db.exec(`
|
|
26
|
-
CREATE TABLE episode_inject_log_new (
|
|
27
|
-
session_id TEXT NOT NULL,
|
|
28
|
-
episode_id INTEGER NOT NULL,
|
|
29
|
-
injected_at TEXT NOT NULL,
|
|
30
|
-
PRIMARY KEY (session_id, episode_id)
|
|
31
|
-
)
|
|
25
|
+
db.exec(`
|
|
26
|
+
CREATE TABLE episode_inject_log_new (
|
|
27
|
+
session_id TEXT NOT NULL,
|
|
28
|
+
episode_id INTEGER NOT NULL,
|
|
29
|
+
injected_at TEXT NOT NULL,
|
|
30
|
+
PRIMARY KEY (session_id, episode_id)
|
|
31
|
+
)
|
|
32
32
|
`);
|
|
33
|
-
db.exec(`
|
|
34
|
-
INSERT INTO episode_inject_log_new (session_id, episode_id, injected_at)
|
|
35
|
-
SELECT session_id, CAST(episode_id AS INTEGER), injected_at
|
|
36
|
-
FROM episode_inject_log
|
|
33
|
+
db.exec(`
|
|
34
|
+
INSERT INTO episode_inject_log_new (session_id, episode_id, injected_at)
|
|
35
|
+
SELECT session_id, CAST(episode_id AS INTEGER), injected_at
|
|
36
|
+
FROM episode_inject_log
|
|
37
37
|
`);
|
|
38
38
|
db.exec('DROP TABLE episode_inject_log');
|
|
39
39
|
db.exec('ALTER TABLE episode_inject_log_new RENAME TO episode_inject_log');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrf.d.ts","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"rrf.d.ts","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAIvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,UAAU,CACxB,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,EAC9B,OAAO,GAAE,UAAe,GACvB,YAAY,EAAE,CA4BhB;AAUD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAIhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAYhB"}
|
package/dist/scripts/lib/rrf.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.computeRRF = computeRRF;
|
|
|
5
5
|
exports.searchPorter = searchPorter;
|
|
6
6
|
exports.searchTrigram = searchTrigram;
|
|
7
7
|
const db_helpers_js_1 = require("./db-helpers.js");
|
|
8
|
+
const err_msg_js_1 = require("./err-msg.js");
|
|
8
9
|
function sanitizeFtsQuery(query) {
|
|
9
10
|
return query.replace(/["*(){}[\]^~:-]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
10
11
|
}
|
|
@@ -57,7 +58,7 @@ function searchTrigram(db, options) {
|
|
|
57
58
|
return _searchFts(db, { table: 'mindlore_fts_trigram', rankExpr: 'rank', orderBy: 'rank', query: sanitized, project: options.project, limit: options.limit });
|
|
58
59
|
}
|
|
59
60
|
catch (err) {
|
|
60
|
-
const msg =
|
|
61
|
+
const msg = (0, err_msg_js_1.errMsg)(err);
|
|
61
62
|
if (!msg.includes('no such table')) {
|
|
62
63
|
console.warn(`searchTrigram: ${msg}`);
|
|
63
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@ exports.getSchemaVersion = getSchemaVersion;
|
|
|
5
5
|
exports.setSchemaVersion = setSchemaVersion;
|
|
6
6
|
exports.runMigrations = runMigrations;
|
|
7
7
|
function ensureSchemaTable(db) {
|
|
8
|
-
db.exec(`
|
|
9
|
-
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
10
|
-
version INTEGER PRIMARY KEY,
|
|
11
|
-
name TEXT NOT NULL,
|
|
12
|
-
applied_at TEXT NOT NULL
|
|
13
|
-
)
|
|
8
|
+
db.exec(`
|
|
9
|
+
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
10
|
+
version INTEGER PRIMARY KEY,
|
|
11
|
+
name TEXT NOT NULL,
|
|
12
|
+
applied_at TEXT NOT NULL
|
|
13
|
+
)
|
|
14
14
|
`);
|
|
15
15
|
}
|
|
16
16
|
function getSchemaVersion(db) {
|
|
@@ -23,12 +23,12 @@ class SearchCache {
|
|
|
23
23
|
ensureStatsTable() {
|
|
24
24
|
if (this.statsReady)
|
|
25
25
|
return;
|
|
26
|
-
this.db.exec(`
|
|
27
|
-
CREATE TABLE IF NOT EXISTS search_cache_stats (
|
|
28
|
-
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
29
|
-
hits INTEGER NOT NULL DEFAULT 0,
|
|
30
|
-
misses INTEGER NOT NULL DEFAULT 0
|
|
31
|
-
)
|
|
26
|
+
this.db.exec(`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS search_cache_stats (
|
|
28
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
29
|
+
hits INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
misses INTEGER NOT NULL DEFAULT 0
|
|
31
|
+
)
|
|
32
32
|
`);
|
|
33
33
|
this.db.prepare('INSERT OR IGNORE INTO search_cache_stats (id, hits, misses) VALUES (1, 0, 0)').run();
|
|
34
34
|
this.stmtHit = this.db.prepare('UPDATE search_cache_stats SET hits = hits + 1 WHERE id = 1');
|
|
@@ -88,11 +88,11 @@ class SearchThrottle {
|
|
|
88
88
|
incrementCallCount(sessionId) {
|
|
89
89
|
const now = new Date().toISOString();
|
|
90
90
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
|
|
91
|
-
const row = this.db.prepare(`
|
|
92
|
-
INSERT INTO search_throttle (session_id, call_count, last_call)
|
|
93
|
-
VALUES (?, 1, ?)
|
|
94
|
-
ON CONFLICT(session_id) DO UPDATE SET call_count = call_count + 1, last_call = ?
|
|
95
|
-
RETURNING call_count
|
|
91
|
+
const row = this.db.prepare(`
|
|
92
|
+
INSERT INTO search_throttle (session_id, call_count, last_call)
|
|
93
|
+
VALUES (?, 1, ?)
|
|
94
|
+
ON CONFLICT(session_id) DO UPDATE SET call_count = call_count + 1, last_call = ?
|
|
95
|
+
RETURNING call_count
|
|
96
96
|
`).get(sessionId, now, now);
|
|
97
97
|
return row?.call_count ?? 1;
|
|
98
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAOvC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5E;AAwDD,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAOvC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5E;AAwDD,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,CA4D1F"}
|
|
@@ -5,7 +5,7 @@ exports.search = search;
|
|
|
5
5
|
const rrf_js_1 = require("./rrf.js");
|
|
6
6
|
const fuzzy_js_1 = require("./fuzzy.js");
|
|
7
7
|
const proximity_js_1 = require("./proximity.js");
|
|
8
|
-
const
|
|
8
|
+
const smart_snippet_js_1 = require("./smart-snippet.js");
|
|
9
9
|
const constants_js_1 = require("./constants.js");
|
|
10
10
|
function extractKeywords(text, maxKeywords) {
|
|
11
11
|
const keywords = text
|
|
@@ -97,9 +97,13 @@ function search(db, query, options) {
|
|
|
97
97
|
score: r.score,
|
|
98
98
|
content: r.content,
|
|
99
99
|
})), keywords);
|
|
100
|
-
return ranked.slice(0, maxResults).map(r =>
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
return ranked.slice(0, maxResults).map(r => {
|
|
101
|
+
const smart = r.content ? (0, smart_snippet_js_1.extractSmartSnippet)(db, r.path, r.content, keywords) : undefined;
|
|
102
|
+
return {
|
|
103
|
+
...r,
|
|
104
|
+
snippet: smart?.snippet,
|
|
105
|
+
heading: smart?.heading ?? null,
|
|
106
|
+
};
|
|
107
|
+
});
|
|
104
108
|
}
|
|
105
109
|
//# sourceMappingURL=search-engine.js.map
|