mindlore 0.6.8 → 0.6.9
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 +2 -1
- 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 +6 -5
- 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 +12 -11
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/consolidation.js +10 -10
- package/dist/scripts/lib/constants.d.ts +2 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +10 -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/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/schema-version.js +6 -6
- package/dist/scripts/lib/search-cache.js +11 -11
- 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/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/mindlore-backup.js +9 -9
- package/dist/scripts/mindlore-fts5-index.js +10 -10
- 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/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 +74 -0
- package/dist/tests/manifest-v2.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/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 +76 -75
- package/plugin.json +2 -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
package/dist/tests/helpers/db.js
CHANGED
|
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.resolveProject = exports.extractFtsMetadata = exports.parseFrontmatter = void 0;
|
|
7
7
|
exports.sha256 = sha256;
|
|
8
8
|
exports.createTestDb = createTestDb;
|
|
9
|
-
exports.createTestDbWithFullSchema = createTestDbWithFullSchema;
|
|
10
9
|
exports.createTestDbAtVersion = createTestDbAtVersion;
|
|
11
|
-
exports.
|
|
10
|
+
exports.createTestDbWithFullSchema = createTestDbWithFullSchema;
|
|
12
11
|
exports.insertFts = insertFts;
|
|
13
12
|
exports.createTestDbWithEpisodes = createTestDbWithEpisodes;
|
|
14
13
|
exports.setupTestDir = setupTestDir;
|
|
@@ -43,20 +42,20 @@ function createTestDb(dbPath) {
|
|
|
43
42
|
const db = new better_sqlite3_1.default(dbPath);
|
|
44
43
|
db.pragma('journal_mode = WAL');
|
|
45
44
|
db.exec(SQL_FTS_CREATE);
|
|
46
|
-
db.exec(`
|
|
47
|
-
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
48
|
-
path TEXT PRIMARY KEY,
|
|
49
|
-
content_hash TEXT NOT NULL,
|
|
50
|
-
last_indexed TEXT NOT NULL,
|
|
51
|
-
created_at TEXT,
|
|
52
|
-
updated_at TEXT,
|
|
53
|
-
source_type TEXT DEFAULT 'mindlore',
|
|
54
|
-
project_scope TEXT,
|
|
55
|
-
recall_count INTEGER DEFAULT 0,
|
|
56
|
-
last_recalled_at TEXT,
|
|
57
|
-
archived_at TEXT,
|
|
58
|
-
importance REAL
|
|
59
|
-
);
|
|
45
|
+
db.exec(`
|
|
46
|
+
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
47
|
+
path TEXT PRIMARY KEY,
|
|
48
|
+
content_hash TEXT NOT NULL,
|
|
49
|
+
last_indexed TEXT NOT NULL,
|
|
50
|
+
created_at TEXT,
|
|
51
|
+
updated_at TEXT,
|
|
52
|
+
source_type TEXT DEFAULT 'mindlore',
|
|
53
|
+
project_scope TEXT,
|
|
54
|
+
recall_count INTEGER DEFAULT 0,
|
|
55
|
+
last_recalled_at TEXT,
|
|
56
|
+
archived_at TEXT,
|
|
57
|
+
importance REAL
|
|
58
|
+
);
|
|
60
59
|
`);
|
|
61
60
|
return db;
|
|
62
61
|
}
|
|
@@ -66,13 +65,6 @@ const ALL_MIGRATIONS = [
|
|
|
66
65
|
...migrations_v063_js_1.V063_MIGRATIONS, ...migrations_v066_js_1.V066_MIGRATIONS, ...migrations_v067_js_1.V067_MIGRATIONS,
|
|
67
66
|
...migrations_v068_js_1.V068_MIGRATIONS,
|
|
68
67
|
];
|
|
69
|
-
function createTestDbWithFullSchema(dbPath) {
|
|
70
|
-
const db = createTestDb(dbPath);
|
|
71
|
-
ensureEpisodesTableCjs(db);
|
|
72
|
-
(0, schema_version_js_1.ensureSchemaTable)(db);
|
|
73
|
-
(0, schema_version_js_1.runMigrations)(db, ALL_MIGRATIONS);
|
|
74
|
-
return db;
|
|
75
|
-
}
|
|
76
68
|
function createTestDbAtVersion(dbPath, maxVersion) {
|
|
77
69
|
const db = createTestDb(dbPath);
|
|
78
70
|
ensureEpisodesTableCjs(db);
|
|
@@ -81,7 +73,7 @@ function createTestDbAtVersion(dbPath, maxVersion) {
|
|
|
81
73
|
(0, schema_version_js_1.runMigrations)(db, filtered);
|
|
82
74
|
return db;
|
|
83
75
|
}
|
|
84
|
-
function
|
|
76
|
+
function createTestDbWithFullSchema(dbPath) {
|
|
85
77
|
const db = createTestDb(dbPath);
|
|
86
78
|
ensureEpisodesTableCjs(db);
|
|
87
79
|
(0, schema_version_js_1.ensureSchemaTable)(db);
|
|
@@ -119,7 +111,7 @@ function destroyEpisodesTestEnv(env) {
|
|
|
119
111
|
function createEpisodesTestEnvWithMigrations(prefix) {
|
|
120
112
|
const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), `mindlore-${prefix}-`));
|
|
121
113
|
const dbPath = path_1.default.join(tmpDir, 'test.db');
|
|
122
|
-
const db =
|
|
114
|
+
const db = createTestDbWithFullSchema(dbPath);
|
|
123
115
|
return { db, tmpDir };
|
|
124
116
|
}
|
|
125
117
|
exports.parseFrontmatter = parseFrontmatterCjs;
|
|
@@ -136,7 +128,7 @@ function insertEpisode(db, overrides = {}) {
|
|
|
136
128
|
created_at: new Date().toISOString(),
|
|
137
129
|
};
|
|
138
130
|
const data = { ...defaults, ...overrides };
|
|
139
|
-
const result = db.prepare(`INSERT INTO episodes (id, kind, status, project, summary, graduated_at, created_at)
|
|
131
|
+
const result = db.prepare(`INSERT INTO episodes (id, kind, status, project, summary, graduated_at, created_at)
|
|
140
132
|
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(data.id, data.kind, data.status, data.project, data.summary, data.graduated_at, data.created_at);
|
|
141
133
|
return Number(result.lastInsertRowid);
|
|
142
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../tests/helpers/db.ts"],"names":[],"mappings":";;;;;;AA2BA,wBAEC;AAED,oCAoBC;AASD,
|
|
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":"manifest-v2.test.d.ts","sourceRoot":"","sources":["../../tests/manifest-v2.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const validate_manifest_js_1 = require("../scripts/lib/validate-manifest.js");
|
|
4
|
+
describe('validate-manifest', () => {
|
|
5
|
+
const validV2 = {
|
|
6
|
+
manifestVersion: 2,
|
|
7
|
+
name: 'mindlore',
|
|
8
|
+
version: '0.6.9',
|
|
9
|
+
description: 'AI-native knowledge system',
|
|
10
|
+
skills: [],
|
|
11
|
+
hooks: [],
|
|
12
|
+
};
|
|
13
|
+
it('accepts valid v2 manifest', () => {
|
|
14
|
+
const result = (0, validate_manifest_js_1.validateManifest)(validV2);
|
|
15
|
+
expect(result.valid).toBe(true);
|
|
16
|
+
expect(result.errors).toHaveLength(0);
|
|
17
|
+
});
|
|
18
|
+
it('accepts v1 manifest (no manifestVersion field)', () => {
|
|
19
|
+
const v1 = { name: 'test', description: 'test plugin', skills: [], hooks: [] };
|
|
20
|
+
const result = (0, validate_manifest_js_1.validateManifest)(v1);
|
|
21
|
+
expect(result.valid).toBe(true);
|
|
22
|
+
expect(result.manifestVersion).toBe(1);
|
|
23
|
+
});
|
|
24
|
+
it('rejects missing name', () => {
|
|
25
|
+
const bad = { ...validV2, name: undefined };
|
|
26
|
+
const result = (0, validate_manifest_js_1.validateManifest)(bad);
|
|
27
|
+
expect(result.valid).toBe(false);
|
|
28
|
+
expect(result.errors[0]).toMatch(/name/i);
|
|
29
|
+
});
|
|
30
|
+
it('rejects invalid version format', () => {
|
|
31
|
+
const bad = { ...validV2, version: 'not-semver' };
|
|
32
|
+
const result = (0, validate_manifest_js_1.validateManifest)(bad);
|
|
33
|
+
expect(result.valid).toBe(false);
|
|
34
|
+
expect(result.errors[0]).toMatch(/version/i);
|
|
35
|
+
});
|
|
36
|
+
it('rejects invalid manifestVersion', () => {
|
|
37
|
+
const bad = { ...validV2, manifestVersion: 99 };
|
|
38
|
+
const result = (0, validate_manifest_js_1.validateManifest)(bad);
|
|
39
|
+
expect(result.valid).toBe(false);
|
|
40
|
+
expect(result.errors[0]).toMatch(/manifestVersion/i);
|
|
41
|
+
});
|
|
42
|
+
it('accepts optional fields when missing', () => {
|
|
43
|
+
const withOptionals = { ...validV2, minCCVersion: '2.1.0', conflicts: ['other'] };
|
|
44
|
+
delete withOptionals.minCCVersion;
|
|
45
|
+
delete withOptionals.conflicts;
|
|
46
|
+
const result = (0, validate_manifest_js_1.validateManifest)(withOptionals);
|
|
47
|
+
expect(result.valid).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
it('validates minCCVersion format when present', () => {
|
|
50
|
+
const withCC = { ...validV2, minCCVersion: '2.1.100' };
|
|
51
|
+
expect((0, validate_manifest_js_1.validateManifest)(withCC).valid).toBe(true);
|
|
52
|
+
const badCC = { ...validV2, minCCVersion: 'abc' };
|
|
53
|
+
expect((0, validate_manifest_js_1.validateManifest)(badCC).valid).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
it('validates conflicts is array of strings', () => {
|
|
56
|
+
const good = { ...validV2, conflicts: ['other-plugin'] };
|
|
57
|
+
expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
|
|
58
|
+
const bad = { ...validV2, conflicts: [123] };
|
|
59
|
+
expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
it('validates skills have name and path', () => {
|
|
62
|
+
const good = { ...validV2, skills: [{ name: 'test', path: 'skills/test/SKILL.md', description: 'desc' }] };
|
|
63
|
+
expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
|
|
64
|
+
const bad = { ...validV2, skills: [{ name: 'test' }] };
|
|
65
|
+
expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
it('validates hooks have event and script', () => {
|
|
68
|
+
const good = { ...validV2, hooks: [{ event: 'SessionStart', script: 'hooks/test.cjs' }] };
|
|
69
|
+
expect((0, validate_manifest_js_1.validateManifest)(good).valid).toBe(true);
|
|
70
|
+
const bad = { ...validV2, hooks: [{ event: 'SessionStart' }] };
|
|
71
|
+
expect((0, validate_manifest_js_1.validateManifest)(bad).valid).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=manifest-v2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-v2.test.js","sourceRoot":"","sources":["../../tests/manifest-v2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,27 +17,27 @@ function createBaseDb(dbPath) {
|
|
|
17
17
|
const db = new better_sqlite3_1.default(dbPath);
|
|
18
18
|
db.pragma('journal_mode = WAL');
|
|
19
19
|
db.exec(SQL_FTS_CREATE);
|
|
20
|
-
db.exec(`
|
|
21
|
-
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
22
|
-
path TEXT PRIMARY KEY,
|
|
23
|
-
content_hash TEXT NOT NULL,
|
|
24
|
-
last_indexed TEXT NOT NULL
|
|
25
|
-
);
|
|
20
|
+
db.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
22
|
+
path TEXT PRIMARY KEY,
|
|
23
|
+
content_hash TEXT NOT NULL,
|
|
24
|
+
last_indexed TEXT NOT NULL
|
|
25
|
+
);
|
|
26
26
|
`);
|
|
27
27
|
(0, schema_version_js_1.ensureSchemaTable)(db);
|
|
28
28
|
return db;
|
|
29
29
|
}
|
|
30
30
|
function addEpisodesTable(db) {
|
|
31
|
-
db.exec(`
|
|
32
|
-
CREATE TABLE IF NOT EXISTS episodes (
|
|
33
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
34
|
-
session_id TEXT NOT NULL,
|
|
35
|
-
timestamp TEXT NOT NULL,
|
|
36
|
-
summary TEXT NOT NULL,
|
|
37
|
-
project TEXT,
|
|
38
|
-
tags TEXT,
|
|
39
|
-
quality REAL DEFAULT 0.5
|
|
40
|
-
);
|
|
31
|
+
db.exec(`
|
|
32
|
+
CREATE TABLE IF NOT EXISTS episodes (
|
|
33
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
34
|
+
session_id TEXT NOT NULL,
|
|
35
|
+
timestamp TEXT NOT NULL,
|
|
36
|
+
summary TEXT NOT NULL,
|
|
37
|
+
project TEXT,
|
|
38
|
+
tags TEXT,
|
|
39
|
+
quality REAL DEFAULT 0.5
|
|
40
|
+
);
|
|
41
41
|
`);
|
|
42
42
|
}
|
|
43
43
|
describe('v0.5.3 Migrations', () => {
|
|
@@ -11,16 +11,16 @@ const migrations_v052_js_1 = require("../scripts/lib/migrations-v052.js");
|
|
|
11
11
|
const migrations_v053_js_1 = require("../scripts/lib/migrations-v053.js");
|
|
12
12
|
function setupDb() {
|
|
13
13
|
const db = new better_sqlite3_1.default(':memory:');
|
|
14
|
-
db.exec(`
|
|
15
|
-
CREATE VIRTUAL TABLE mindlore_fts USING fts5(
|
|
16
|
-
path, slug, description, type, category, title, content, tags,
|
|
17
|
-
quality, date_captured, project
|
|
18
|
-
);
|
|
19
|
-
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
20
|
-
path TEXT PRIMARY KEY, content_hash TEXT, last_indexed TEXT,
|
|
21
|
-
recall_count INTEGER DEFAULT 0, last_recalled_at TEXT,
|
|
22
|
-
archived_at TEXT, importance REAL DEFAULT 1.0
|
|
23
|
-
);
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE VIRTUAL TABLE mindlore_fts USING fts5(
|
|
16
|
+
path, slug, description, type, category, title, content, tags,
|
|
17
|
+
quality, date_captured, project
|
|
18
|
+
);
|
|
19
|
+
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
20
|
+
path TEXT PRIMARY KEY, content_hash TEXT, last_indexed TEXT,
|
|
21
|
+
recall_count INTEGER DEFAULT 0, last_recalled_at TEXT,
|
|
22
|
+
archived_at TEXT, importance REAL DEFAULT 1.0
|
|
23
|
+
);
|
|
24
24
|
`);
|
|
25
25
|
(0, schema_version_js_1.ensureSchemaTable)(db);
|
|
26
26
|
const allPrior = [...migrations_js_1.V050_MIGRATIONS, ...migrations_js_1.V051_MIGRATIONS, ...migrations_v052_js_1.V052_MIGRATIONS, ...migrations_v053_js_1.V053_MIGRATIONS];
|
|
@@ -28,7 +28,7 @@ function cleanup(dir, db) {
|
|
|
28
28
|
describe('v0.6.3 migrations', () => {
|
|
29
29
|
test('migration creates trigram table', () => {
|
|
30
30
|
const dir = makeTmpDir();
|
|
31
|
-
const db = (0, db_js_1.
|
|
31
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
32
32
|
const tables = db.prepare("SELECT name FROM sqlite_master").all();
|
|
33
33
|
const names = tables.map(t => t.name);
|
|
34
34
|
expect(names).toContain('mindlore_fts_trigram');
|
|
@@ -36,7 +36,7 @@ describe('v0.6.3 migrations', () => {
|
|
|
36
36
|
});
|
|
37
37
|
test('migration creates vocabulary table', () => {
|
|
38
38
|
const dir = makeTmpDir();
|
|
39
|
-
const db = (0, db_js_1.
|
|
39
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
40
40
|
const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all();
|
|
41
41
|
const names = tables.map(t => t.name);
|
|
42
42
|
expect(names).toContain('vocabulary');
|
|
@@ -66,14 +66,14 @@ describe('v0.6.3 migrations', () => {
|
|
|
66
66
|
});
|
|
67
67
|
test('schema version is 19 after migration', () => {
|
|
68
68
|
const dir = makeTmpDir();
|
|
69
|
-
const db = (0, db_js_1.
|
|
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
71
|
expect(row.v).toBe(19);
|
|
72
72
|
cleanup(dir, db);
|
|
73
73
|
});
|
|
74
74
|
test('vocabulary table accepts inserts and dedup', () => {
|
|
75
75
|
const dir = makeTmpDir();
|
|
76
|
-
const db = (0, db_js_1.
|
|
76
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
77
77
|
db.prepare('INSERT INTO vocabulary (word) VALUES (?)').run('typescript');
|
|
78
78
|
db.prepare('INSERT OR IGNORE INTO vocabulary (word) VALUES (?)').run('typescript');
|
|
79
79
|
const count = db.prepare('SELECT COUNT(*) as c FROM vocabulary').get().c;
|
|
@@ -12,13 +12,16 @@ const migrations_v068_js_1 = require("../scripts/lib/migrations-v068.js");
|
|
|
12
12
|
const schema_version_js_1 = require("../scripts/lib/schema-version.js");
|
|
13
13
|
describe('V068 Migrations', () => {
|
|
14
14
|
let db;
|
|
15
|
-
|
|
15
|
+
let tmpDir;
|
|
16
|
+
let dbPath;
|
|
16
17
|
beforeEach(() => {
|
|
17
|
-
|
|
18
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-v068-test-'));
|
|
19
|
+
dbPath = path_1.default.join(tmpDir, 'test.db');
|
|
20
|
+
db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
|
|
18
21
|
});
|
|
19
22
|
afterEach(() => {
|
|
20
23
|
db.close();
|
|
21
|
-
fs_1.default.
|
|
24
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
22
25
|
});
|
|
23
26
|
test('v18: creates injected_at index', () => {
|
|
24
27
|
(0, schema_version_js_1.runMigrations)(db, migrations_v068_js_1.V068_MIGRATIONS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations-v068.test.js","sourceRoot":"","sources":["../../tests/migrations-v068.test.ts"],"names":[],"mappings":";AAAA,gEAAgE;;;;;AAGhE,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,2CAA6D;AAC7D,0EAAoE;AACpE,wEAAiE;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,EAAqB,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"migrations-v068.test.js","sourceRoot":"","sources":["../../tests/migrations-v068.test.ts"],"names":[],"mappings":";AAAA,gEAAgE;;;;;AAGhE,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,2CAA6D;AAC7D,0EAAoE;AACpE,wEAAiE;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,EAAqB,CAAC;IAC1B,IAAI,MAAc,CAAC;IACnB,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtC,EAAE,GAAG,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CACxB,qFAAqF,CACtF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACtD,gEAAgE;QAChE,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG;YAChB,oBAAoB,EAAE,sBAAsB;YAC5C,sBAAsB,EAAE,+BAA+B;YACvD,gCAAgC,EAAE,8BAA8B;YAChE,yBAAyB;SAC1B,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,+BAA+B,KAAK,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,kFAAkF,CACnF,CAAC,GAAG,EAA6B,CAAC;QACnC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,iCAAa,EAAC,EAAE,EAAE,oCAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -7,20 +7,20 @@ const path_1 = __importDefault(require("path"));
|
|
|
7
7
|
const os_1 = __importDefault(require("os"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const db_js_1 = require("./helpers/db.js");
|
|
10
|
-
// NOT: createTestDbWithMigrations kullanılıyor (createTestDbWithFullSchema değil)
|
|
11
|
-
// çünkü bu test v18 migration'a bağımlı değil. R5 (Task 16) sonrası
|
|
12
|
-
// createTestDbWithFullSchema'ya geçiş opsiyonel.
|
|
13
10
|
const { getNominationCounts } = require('../hooks/lib/mindlore-common.cjs');
|
|
14
11
|
describe('getNominationCounts', () => {
|
|
15
12
|
let db;
|
|
16
|
-
|
|
13
|
+
let tmpDir;
|
|
14
|
+
let dbPath;
|
|
17
15
|
beforeEach(() => {
|
|
18
|
-
|
|
16
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-nom-counts-'));
|
|
17
|
+
dbPath = path_1.default.join(tmpDir, 'test.db');
|
|
18
|
+
db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
|
|
19
19
|
});
|
|
20
20
|
afterEach(() => {
|
|
21
21
|
db.close();
|
|
22
22
|
try {
|
|
23
|
-
fs_1.default.
|
|
23
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
24
24
|
}
|
|
25
25
|
catch { }
|
|
26
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nomination-counts.test.js","sourceRoot":"","sources":["../../tests/nomination-counts.test.ts"],"names":[],"mappings":";;;;;AACA,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,2CAA4E;AAE5E,
|
|
1
|
+
{"version":3,"file":"nomination-counts.test.js","sourceRoot":"","sources":["../../tests/nomination-counts.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const fs_1 = __importDefault(require("fs"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
8
9
|
const child_process_1 = require("child_process");
|
|
9
10
|
const exec_js_1 = require("./helpers/exec.js");
|
|
10
11
|
const HOOK_PATH = path_1.default.join(__dirname, '..', 'hooks', 'mindlore-pre-compact.cjs');
|
|
@@ -24,7 +25,7 @@ function runHook(cwd) {
|
|
|
24
25
|
describe('mindlore-pre-compact hook', () => {
|
|
25
26
|
let testDir;
|
|
26
27
|
beforeEach(() => {
|
|
27
|
-
testDir = path_1.default.join(
|
|
28
|
+
testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-pre-compact-'));
|
|
28
29
|
const mindloreDir = path_1.default.join(testDir, '.mindlore');
|
|
29
30
|
fs_1.default.mkdirSync(path_1.default.join(mindloreDir, 'episodes'), { recursive: true });
|
|
30
31
|
fs_1.default.writeFileSync(path_1.default.join(mindloreDir, 'log.md'), '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-compact.test.js","sourceRoot":"","sources":["../../tests/pre-compact.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,iDAA6C;AAC7C,+CAAkD;AAElD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;AAElF,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YACvC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACrF,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"pre-compact.test.js","sourceRoot":"","sources":["../../tests/pre-compact.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,iDAA6C;AAC7C,+CAAkD;AAElD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;AAElF,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,4BAAY,EAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YACvC,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YACrF,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,YAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACzD,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -12,22 +12,23 @@ const migrations_js_1 = require("../scripts/lib/migrations.js");
|
|
|
12
12
|
const migrations_v052_js_1 = require("../scripts/lib/migrations-v052.js");
|
|
13
13
|
const migrations_v053_js_1 = require("../scripts/lib/migrations-v053.js");
|
|
14
14
|
describe('Recall Telemetry', () => {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
let tmpDir;
|
|
16
|
+
let dbPath;
|
|
17
17
|
beforeEach(() => {
|
|
18
|
-
fs_1.default.
|
|
18
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-recall-'));
|
|
19
|
+
dbPath = path_1.default.join(tmpDir, 'mindlore.db');
|
|
19
20
|
const db = new better_sqlite3_1.default(dbPath);
|
|
20
|
-
db.exec(`
|
|
21
|
-
CREATE TABLE IF NOT EXISTS file_hashes (path TEXT PRIMARY KEY, hash TEXT, last_indexed TEXT);
|
|
22
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts USING fts5(
|
|
23
|
-
path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
24
|
-
);
|
|
21
|
+
db.exec(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS file_hashes (path TEXT PRIMARY KEY, hash TEXT, last_indexed TEXT);
|
|
23
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS mindlore_fts USING fts5(
|
|
24
|
+
path, slug, description, type, category, title, content, tags, quality, date_captured, project
|
|
25
|
+
);
|
|
25
26
|
`);
|
|
26
27
|
(0, schema_version_js_1.ensureSchemaTable)(db);
|
|
27
28
|
(0, schema_version_js_1.runMigrations)(db, [...migrations_js_1.V050_MIGRATIONS, ...migrations_js_1.V051_MIGRATIONS, ...migrations_v052_js_1.V052_MIGRATIONS, ...migrations_v053_js_1.V053_MIGRATIONS]);
|
|
28
|
-
db.exec(`
|
|
29
|
-
INSERT INTO file_hashes (path, hash, last_indexed, recall_count, last_recalled_at)
|
|
30
|
-
VALUES ('/test/file.md', 'abc123', '2026-01-01', 0, NULL);
|
|
29
|
+
db.exec(`
|
|
30
|
+
INSERT INTO file_hashes (path, hash, last_indexed, recall_count, last_recalled_at)
|
|
31
|
+
VALUES ('/test/file.md', 'abc123', '2026-01-01', 0, NULL);
|
|
31
32
|
`);
|
|
32
33
|
db.close();
|
|
33
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall-telemetry.test.js","sourceRoot":"","sources":["../../tests/recall-telemetry.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,oEAAsC;AACtC,wEAAoF;AACpF,gEAAgF;AAChF,0EAAoE;AACpE,0EAAoE;AAEpE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,
|
|
1
|
+
{"version":3,"file":"recall-telemetry.test.js","sourceRoot":"","sources":["../../tests/recall-telemetry.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,oEAAsC;AACtC,wEAAoF;AACpF,gEAAgF;AAChF,0EAAoE;AACpE,0EAAoE;AAEpE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,MAAc,CAAC;IACnB,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;QACH,IAAA,qCAAiB,EAAC,EAAE,CAAC,CAAC;QACtB,IAAA,iCAAa,EAAC,EAAE,EAAE,CAAC,GAAG,+BAAe,EAAE,GAAG,+BAAe,EAAE,GAAG,oCAAe,EAAE,GAAG,oCAAe,CAAC,CAAC,CAAC;QACpG,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,CAAC,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAChF,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,eAAe,CAA8D,CAAC;QAClL,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,iJAAiJ;QACjJ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,eAAe,CAA6B,CAAC;QAChI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxE,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/tests/rrf.test.js
CHANGED
|
@@ -70,7 +70,7 @@ describe('computeRRF', () => {
|
|
|
70
70
|
describe('searchPorter + searchTrigram', () => {
|
|
71
71
|
test('searchPorter returns ranked results from FTS5', () => {
|
|
72
72
|
const dir = makeTmpDir();
|
|
73
|
-
const db = (0, db_js_1.
|
|
73
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
74
74
|
(0, db_js_1.insertFts)(db, {
|
|
75
75
|
path: '/sources/ts.md',
|
|
76
76
|
slug: 'typescript-guide',
|
|
@@ -89,7 +89,7 @@ describe('searchPorter + searchTrigram', () => {
|
|
|
89
89
|
});
|
|
90
90
|
test('searchTrigram returns results from trigram table', () => {
|
|
91
91
|
const dir = makeTmpDir();
|
|
92
|
-
const db = (0, db_js_1.
|
|
92
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
93
93
|
(0, db_js_1.insertFts)(db, {
|
|
94
94
|
path: '/sources/ts.md',
|
|
95
95
|
slug: 'typescript-guide',
|
|
@@ -106,7 +106,7 @@ describe('searchPorter + searchTrigram', () => {
|
|
|
106
106
|
});
|
|
107
107
|
test('searchPorter returns empty for no match', () => {
|
|
108
108
|
const dir = makeTmpDir();
|
|
109
|
-
const db = (0, db_js_1.
|
|
109
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(path_1.default.join(dir, 'mindlore.db'));
|
|
110
110
|
const results = (0, rrf_js_1.searchPorter)(db, { query: 'nonexistentxyz', limit: 5 });
|
|
111
111
|
expect(results).toEqual([]);
|
|
112
112
|
cleanup(dir, db);
|
|
@@ -19,7 +19,7 @@ function cleanup(dir, db) {
|
|
|
19
19
|
fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
20
20
|
}
|
|
21
21
|
function seedDb(dbPath) {
|
|
22
|
-
const db = (0, db_js_1.
|
|
22
|
+
const db = (0, db_js_1.createTestDbWithFullSchema)(dbPath);
|
|
23
23
|
(0, db_js_1.insertFts)(db, {
|
|
24
24
|
path: '/sources/typescript.md',
|
|
25
25
|
slug: 'typescript',
|
|
@@ -78,8 +78,8 @@ describe('Search Hook — FTS5 Query', () => {
|
|
|
78
78
|
function queryFts(query) {
|
|
79
79
|
const db = new better_sqlite3_1.default(DB_PATH, { readonly: true });
|
|
80
80
|
try {
|
|
81
|
-
return (0, db_helpers_js_1.dbAll)(db, `SELECT path, rank FROM mindlore_fts
|
|
82
|
-
WHERE mindlore_fts MATCH ?
|
|
81
|
+
return (0, db_helpers_js_1.dbAll)(db, `SELECT path, rank FROM mindlore_fts
|
|
82
|
+
WHERE mindlore_fts MATCH ?
|
|
83
83
|
ORDER BY rank LIMIT 3`, query);
|
|
84
84
|
}
|
|
85
85
|
finally {
|
|
@@ -7,7 +7,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const os_1 = __importDefault(require("os"));
|
|
9
9
|
describe('search hook offload+pointer', () => {
|
|
10
|
-
const tmpDir = path_1.default.join(os_1.default.tmpdir(), 'mindlore-offload-'
|
|
10
|
+
const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-offload-'));
|
|
11
11
|
const mindloreDir = path_1.default.join(tmpDir, '.mindlore');
|
|
12
12
|
const tmpSubDir = path_1.default.join(mindloreDir, 'tmp');
|
|
13
13
|
beforeEach(() => { fs_1.default.mkdirSync(tmpSubDir, { recursive: true }); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-offload.test.js","sourceRoot":"","sources":["../../tests/search-offload.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"search-offload.test.js","sourceRoot":"","sources":["../../tests/search-offload.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEhD,UAAU,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,GAAG,YAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACjE,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7C,wBAAwB;QACxB,MAAM,OAAO,GAAG,qBAAqB,YAAY,CAAC,MAAM,uBAAuB,UAAU,eAAe,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,4BAA4B,UAAU,GAAG,CAAC;QACnL,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,uCAAuC;QACvC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-io.test.d.ts","sourceRoot":"","sources":["../../tests/secure-io.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
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 os_1 = __importDefault(require("os"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const secure_io_js_1 = require("../scripts/lib/secure-io.js");
|
|
10
|
+
describe('secure-io', () => {
|
|
11
|
+
let tmpDir;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-secio-'));
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
17
|
+
});
|
|
18
|
+
describe('safeMkdir', () => {
|
|
19
|
+
it('creates directory with 0o700 permissions', () => {
|
|
20
|
+
const dir = path_1.default.join(tmpDir, 'subdir');
|
|
21
|
+
(0, secure_io_js_1.safeMkdir)(dir);
|
|
22
|
+
expect(fs_1.default.existsSync(dir)).toBe(true);
|
|
23
|
+
if (process.platform !== 'win32') {
|
|
24
|
+
const mode = fs_1.default.statSync(dir).mode & 0o777;
|
|
25
|
+
expect(mode).toBe(0o700);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
it('is idempotent — does not throw on existing dir', () => {
|
|
29
|
+
const dir = path_1.default.join(tmpDir, 'subdir');
|
|
30
|
+
(0, secure_io_js_1.safeMkdir)(dir);
|
|
31
|
+
expect(() => (0, secure_io_js_1.safeMkdir)(dir)).not.toThrow();
|
|
32
|
+
});
|
|
33
|
+
it('creates nested directories', () => {
|
|
34
|
+
const dir = path_1.default.join(tmpDir, 'a', 'b', 'c');
|
|
35
|
+
(0, secure_io_js_1.safeMkdir)(dir);
|
|
36
|
+
expect(fs_1.default.existsSync(dir)).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('safeWriteFile', () => {
|
|
40
|
+
it('writes file with 0o600 permissions', () => {
|
|
41
|
+
const fp = path_1.default.join(tmpDir, 'test.txt');
|
|
42
|
+
(0, secure_io_js_1.safeWriteFile)(fp, 'hello');
|
|
43
|
+
expect(fs_1.default.readFileSync(fp, 'utf8')).toBe('hello');
|
|
44
|
+
if (process.platform !== 'win32') {
|
|
45
|
+
const mode = fs_1.default.statSync(fp).mode & 0o777;
|
|
46
|
+
expect(mode).toBe(0o600);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it('overwrites existing file', () => {
|
|
50
|
+
const fp = path_1.default.join(tmpDir, 'test.txt');
|
|
51
|
+
(0, secure_io_js_1.safeWriteFile)(fp, 'first');
|
|
52
|
+
(0, secure_io_js_1.safeWriteFile)(fp, 'second');
|
|
53
|
+
expect(fs_1.default.readFileSync(fp, 'utf8')).toBe('second');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('safeWriteJson', () => {
|
|
57
|
+
it('writes JSON with trailing newline', () => {
|
|
58
|
+
const fp = path_1.default.join(tmpDir, 'data.json');
|
|
59
|
+
(0, secure_io_js_1.safeWriteJson)(fp, { key: 'value' });
|
|
60
|
+
const content = fs_1.default.readFileSync(fp, 'utf8');
|
|
61
|
+
expect(content).toBe('{\n "key": "value"\n}\n');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=secure-io.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-io.test.js","sourceRoot":"","sources":["../../tests/secure-io.test.ts"],"names":[],"mappings":"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"}
|