mindlore 0.5.2 → 0.5.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/README.md +6 -5
- package/dist/scripts/cc-memory-bulk-sync.d.ts +26 -0
- package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -0
- package/dist/scripts/cc-memory-bulk-sync.js +177 -0
- package/dist/scripts/cc-memory-bulk-sync.js.map +1 -0
- package/dist/scripts/fetch-raw.js +14 -7
- package/dist/scripts/fetch-raw.js.map +1 -1
- package/dist/scripts/init.js +38 -1
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/backfill.d.ts +9 -0
- package/dist/scripts/lib/backfill.d.ts.map +1 -0
- package/dist/scripts/lib/backfill.js +74 -0
- package/dist/scripts/lib/backfill.js.map +1 -0
- package/dist/scripts/lib/consolidation.d.ts +17 -0
- package/dist/scripts/lib/consolidation.d.ts.map +1 -0
- package/dist/scripts/lib/consolidation.js +55 -0
- package/dist/scripts/lib/consolidation.js.map +1 -0
- package/dist/scripts/lib/constants.d.ts +4 -1
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +6 -1
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/contradiction.d.ts +7 -0
- package/dist/scripts/lib/contradiction.d.ts.map +1 -0
- package/dist/scripts/lib/contradiction.js +205 -0
- package/dist/scripts/lib/contradiction.js.map +1 -0
- package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
- package/dist/scripts/lib/db-helpers.js +7 -1
- package/dist/scripts/lib/db-helpers.js.map +1 -1
- package/dist/scripts/lib/decay.d.ts +26 -0
- package/dist/scripts/lib/decay.d.ts.map +1 -0
- package/dist/scripts/lib/decay.js +73 -0
- package/dist/scripts/lib/decay.js.map +1 -0
- package/dist/scripts/lib/git-snapshot.d.ts +3 -0
- package/dist/scripts/lib/git-snapshot.d.ts.map +1 -0
- package/dist/scripts/lib/git-snapshot.js +38 -0
- package/dist/scripts/lib/git-snapshot.js.map +1 -0
- package/dist/scripts/lib/migrations-v053.d.ts +3 -0
- package/dist/scripts/lib/migrations-v053.d.ts.map +1 -0
- package/dist/scripts/lib/migrations-v053.js +52 -0
- package/dist/scripts/lib/migrations-v053.js.map +1 -0
- package/dist/scripts/lib/session-payload.d.ts +19 -0
- package/dist/scripts/lib/session-payload.d.ts.map +1 -0
- package/dist/scripts/lib/session-payload.js +85 -0
- package/dist/scripts/lib/session-payload.js.map +1 -0
- package/dist/scripts/mindlore-backup.d.ts +1 -1
- package/dist/scripts/mindlore-backup.d.ts.map +1 -1
- package/dist/scripts/mindlore-backup.js +23 -0
- package/dist/scripts/mindlore-backup.js.map +1 -1
- package/dist/scripts/mindlore-fts5-index.js +20 -7
- 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 +47 -1
- package/dist/scripts/mindlore-health-check.js.map +1 -1
- package/dist/tests/backfill.test.d.ts +2 -0
- package/dist/tests/backfill.test.d.ts.map +1 -0
- package/dist/tests/backfill.test.js +127 -0
- package/dist/tests/backfill.test.js.map +1 -0
- package/dist/tests/cc-memory-bulk-sync.test.d.ts +2 -0
- package/dist/tests/cc-memory-bulk-sync.test.d.ts.map +1 -0
- package/dist/tests/cc-memory-bulk-sync.test.js +116 -0
- package/dist/tests/cc-memory-bulk-sync.test.js.map +1 -0
- package/dist/tests/consolidation.test.d.ts +2 -0
- package/dist/tests/consolidation.test.d.ts.map +1 -0
- package/dist/tests/consolidation.test.js +77 -0
- package/dist/tests/consolidation.test.js.map +1 -0
- package/dist/tests/contradiction-extended.test.d.ts +2 -0
- package/dist/tests/contradiction-extended.test.d.ts.map +1 -0
- package/dist/tests/contradiction-extended.test.js +182 -0
- package/dist/tests/contradiction-extended.test.js.map +1 -0
- package/dist/tests/decay.test.d.ts +2 -0
- package/dist/tests/decay.test.d.ts.map +1 -0
- package/dist/tests/decay.test.js +143 -0
- package/dist/tests/decay.test.js.map +1 -0
- package/dist/tests/fts5.test.js +181 -0
- package/dist/tests/fts5.test.js.map +1 -1
- package/dist/tests/git-snapshot.test.d.ts +2 -0
- package/dist/tests/git-snapshot.test.d.ts.map +1 -0
- package/dist/tests/git-snapshot.test.js +79 -0
- package/dist/tests/git-snapshot.test.js.map +1 -0
- package/dist/tests/helpers/db.d.ts.map +1 -1
- package/dist/tests/helpers/db.js +3 -1
- package/dist/tests/helpers/db.js.map +1 -1
- package/dist/tests/init.test.js +36 -3
- package/dist/tests/init.test.js.map +1 -1
- package/dist/tests/migrations-v053.test.d.ts +2 -0
- package/dist/tests/migrations-v053.test.d.ts.map +1 -0
- package/dist/tests/migrations-v053.test.js +113 -0
- package/dist/tests/migrations-v053.test.js.map +1 -0
- package/dist/tests/recall-telemetry.test.d.ts +2 -0
- package/dist/tests/recall-telemetry.test.d.ts.map +1 -0
- package/dist/tests/recall-telemetry.test.js +56 -0
- package/dist/tests/recall-telemetry.test.js.map +1 -0
- package/dist/tests/research-guard-scope.test.d.ts +2 -0
- package/dist/tests/research-guard-scope.test.d.ts.map +1 -0
- package/dist/tests/research-guard-scope.test.js +154 -0
- package/dist/tests/research-guard-scope.test.js.map +1 -0
- package/dist/tests/research-guard.test.js +60 -0
- package/dist/tests/research-guard.test.js.map +1 -1
- package/dist/tests/search-hook.test.js +37 -0
- package/dist/tests/search-hook.test.js.map +1 -1
- package/dist/tests/session-focus.test.js +86 -0
- package/dist/tests/session-focus.test.js.map +1 -1
- package/dist/tests/session-payload.test.d.ts +5 -0
- package/dist/tests/session-payload.test.d.ts.map +1 -0
- package/dist/tests/session-payload.test.js +135 -0
- package/dist/tests/session-payload.test.js.map +1 -0
- package/dist/tests/skill-path-resolution.test.d.ts +2 -0
- package/dist/tests/skill-path-resolution.test.d.ts.map +1 -0
- package/dist/tests/skill-path-resolution.test.js +42 -0
- package/dist/tests/skill-path-resolution.test.js.map +1 -0
- package/hooks/lib/mindlore-common.cjs +42 -8
- package/hooks/mindlore-research-guard.cjs +25 -2
- package/hooks/mindlore-search.cjs +23 -10
- package/hooks/mindlore-session-end.cjs +35 -0
- package/hooks/mindlore-session-focus.cjs +35 -34
- package/package.json +3 -2
- package/plugin.json +6 -1
- package/skills/mindlore-decide/SKILL.md +9 -0
- package/skills/mindlore-diary/SKILL.md +12 -3
- package/skills/mindlore-evolve/SKILL.md +24 -1
- package/skills/mindlore-health/SKILL.md +10 -1
- package/skills/mindlore-ingest/SKILL.md +26 -6
- package/skills/mindlore-log/SKILL.md +9 -0
- package/skills/mindlore-maintain/SKILL.md +119 -0
- package/skills/mindlore-query/SKILL.md +9 -0
- package/skills/mindlore-reflect/SKILL.md +31 -4
- package/templates/config.json +18 -9
|
@@ -104,6 +104,31 @@ describe('Session Focus Hook', () => {
|
|
|
104
104
|
});
|
|
105
105
|
expect(output).toContain('3 diary entry birikti');
|
|
106
106
|
});
|
|
107
|
+
test('should not inject delta from a different project', () => {
|
|
108
|
+
const mindloreDir = createMindloreDir();
|
|
109
|
+
createDelta(mindloreDir, 'delta-2026-04-10-0900.md', '---\nslug: delta-2026-04-10-0900\ntype: diary\nproject: other-project\n---\n\n# Other Project Delta\n\nCommits from other project.');
|
|
110
|
+
const output = (0, child_process_1.execSync)(`node "${HOOK_PATH}"`, {
|
|
111
|
+
cwd: TEST_DIR,
|
|
112
|
+
encoding: 'utf8',
|
|
113
|
+
timeout: 5000,
|
|
114
|
+
env: { ...process.env, MINDLORE_HOME: path_1.default.join(TEST_DIR, '.mindlore') },
|
|
115
|
+
});
|
|
116
|
+
expect(output).not.toContain('[Mindlore Delta');
|
|
117
|
+
expect(output).not.toContain('Other Project Delta');
|
|
118
|
+
});
|
|
119
|
+
test('should inject delta when project matches cwd basename', () => {
|
|
120
|
+
const mindloreDir = createMindloreDir();
|
|
121
|
+
const cwdBasename = path_1.default.basename(TEST_DIR);
|
|
122
|
+
createDelta(mindloreDir, 'delta-2026-04-10-0900.md', `---\nslug: delta-2026-04-10-0900\ntype: diary\nproject: ${cwdBasename}\n---\n\n# Matching Delta\n\nSame project.`);
|
|
123
|
+
const output = (0, child_process_1.execSync)(`node "${HOOK_PATH}"`, {
|
|
124
|
+
cwd: TEST_DIR,
|
|
125
|
+
encoding: 'utf8',
|
|
126
|
+
timeout: 5000,
|
|
127
|
+
env: { ...process.env, MINDLORE_HOME: path_1.default.join(TEST_DIR, '.mindlore') },
|
|
128
|
+
});
|
|
129
|
+
expect(output).toContain('[Mindlore Delta');
|
|
130
|
+
expect(output).toContain('Matching Delta');
|
|
131
|
+
});
|
|
107
132
|
test('should handle missing diary directory gracefully', () => {
|
|
108
133
|
const mindloreDir = path_1.default.join(TEST_DIR, '.mindlore');
|
|
109
134
|
fs_1.default.mkdirSync(mindloreDir, { recursive: true });
|
|
@@ -118,6 +143,67 @@ describe('Session Focus Hook', () => {
|
|
|
118
143
|
expect(output).not.toContain('[Mindlore Delta');
|
|
119
144
|
});
|
|
120
145
|
});
|
|
146
|
+
describe('session-payload integration', () => {
|
|
147
|
+
test('should still inject INDEX when session-payload module is available', () => {
|
|
148
|
+
createMindloreDir();
|
|
149
|
+
const output = (0, child_process_1.execSync)(`node "${HOOK_PATH}"`, {
|
|
150
|
+
cwd: TEST_DIR,
|
|
151
|
+
encoding: 'utf8',
|
|
152
|
+
timeout: 5000,
|
|
153
|
+
env: { ...process.env, MINDLORE_HOME: path_1.default.join(TEST_DIR, '.mindlore') },
|
|
154
|
+
});
|
|
155
|
+
// INDEX must always be present regardless of session-payload
|
|
156
|
+
expect(output).toContain('[Mindlore INDEX]');
|
|
157
|
+
});
|
|
158
|
+
test('should not inject old-style Episodes or Hook Alerts sections', () => {
|
|
159
|
+
createMindloreDir();
|
|
160
|
+
const output = (0, child_process_1.execSync)(`node "${HOOK_PATH}"`, {
|
|
161
|
+
cwd: TEST_DIR,
|
|
162
|
+
encoding: 'utf8',
|
|
163
|
+
timeout: 5000,
|
|
164
|
+
env: { ...process.env, MINDLORE_HOME: path_1.default.join(TEST_DIR, '.mindlore') },
|
|
165
|
+
});
|
|
166
|
+
// Old scattered sections should no longer appear
|
|
167
|
+
expect(output).not.toContain('[Mindlore Episodes]');
|
|
168
|
+
expect(output).not.toContain('[Mindlore Recent Activity]');
|
|
169
|
+
expect(output).not.toContain('[Mindlore Hook Alerts]');
|
|
170
|
+
});
|
|
171
|
+
test('should produce session-payload sections when DB has episode data', () => {
|
|
172
|
+
const mindloreDir = createMindloreDir();
|
|
173
|
+
// Create a DB with episodes for session-payload to find
|
|
174
|
+
const { createEpisodesTestEnv, destroyEpisodesTestEnv } = require('./helpers/db.js');
|
|
175
|
+
const { createEpisode } = require('../scripts/lib/episodes.js');
|
|
176
|
+
const env = createEpisodesTestEnv('session-payload-hook');
|
|
177
|
+
// Copy the test DB to the .mindlore dir so the hook finds it
|
|
178
|
+
const dbSrcPath = path_1.default.join(env.tmpDir, 'test.db');
|
|
179
|
+
const dbDestPath = path_1.default.join(mindloreDir, 'mindlore.db');
|
|
180
|
+
// Insert test episodes
|
|
181
|
+
createEpisode(env.db, {
|
|
182
|
+
kind: 'decision',
|
|
183
|
+
summary: 'Use session-payload module',
|
|
184
|
+
project: path_1.default.basename(TEST_DIR),
|
|
185
|
+
source: 'test',
|
|
186
|
+
});
|
|
187
|
+
createEpisode(env.db, {
|
|
188
|
+
kind: 'friction',
|
|
189
|
+
summary: 'Scattered injection was messy',
|
|
190
|
+
project: path_1.default.basename(TEST_DIR),
|
|
191
|
+
source: 'test',
|
|
192
|
+
});
|
|
193
|
+
env.db.close();
|
|
194
|
+
fs_1.default.copyFileSync(dbSrcPath, dbDestPath);
|
|
195
|
+
destroyEpisodesTestEnv(env);
|
|
196
|
+
const output = (0, child_process_1.execSync)(`node "${HOOK_PATH}"`, {
|
|
197
|
+
cwd: TEST_DIR,
|
|
198
|
+
encoding: 'utf8',
|
|
199
|
+
timeout: 10000,
|
|
200
|
+
env: { ...process.env, MINDLORE_HOME: mindloreDir },
|
|
201
|
+
});
|
|
202
|
+
expect(output).toContain('[Mindlore INDEX]');
|
|
203
|
+
// Session-payload sections use labels: Session, Decisions, Friction, Learnings
|
|
204
|
+
expect(output).toContain('[Mindlore Session]');
|
|
205
|
+
});
|
|
206
|
+
});
|
|
121
207
|
describe('enriched multi-session inject', () => {
|
|
122
208
|
const { queryMultiSessionEpisodes, formatMultiSessionEpisodes } = require('../hooks/lib/mindlore-common.cjs');
|
|
123
209
|
const { createEpisodesTestEnv, destroyEpisodesTestEnv } = require('./helpers/db.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-focus.test.js","sourceRoot":"","sources":["../../tests/session-focus.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-focus.test.js","sourceRoot":"","sources":["../../tests/session-focus.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-payload.test.d.ts","sourceRoot":"","sources":["../../tests/session-payload.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* session-payload tests — 4-section builder with token budget + cache-lock.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const db_js_1 = require("./helpers/db.js");
|
|
12
|
+
const session_payload_js_1 = require("../scripts/lib/session-payload.js");
|
|
13
|
+
let env;
|
|
14
|
+
let db;
|
|
15
|
+
let baseDir;
|
|
16
|
+
const PROJECT = 'test-project';
|
|
17
|
+
function insertEpisode(kind, summary, opts = {}) {
|
|
18
|
+
const id = `ep-${Math.random().toString(36).slice(2, 10)}`;
|
|
19
|
+
db.prepare(`INSERT INTO episodes (id, kind, scope, project, summary, status, created_at)
|
|
20
|
+
VALUES (?, ?, 'project', ?, ?, ?, ?)`).run(id, kind, opts.project ?? PROJECT, summary, opts.status ?? 'active', opts.created_at ?? new Date().toISOString());
|
|
21
|
+
}
|
|
22
|
+
function writeDelta(filename, content) {
|
|
23
|
+
const diaryDir = path_1.default.join(baseDir, 'diary');
|
|
24
|
+
fs_1.default.mkdirSync(diaryDir, { recursive: true });
|
|
25
|
+
fs_1.default.writeFileSync(path_1.default.join(diaryDir, filename), content, 'utf8');
|
|
26
|
+
}
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
env = (0, db_js_1.createEpisodesTestEnv)('session-payload');
|
|
29
|
+
db = env.db;
|
|
30
|
+
baseDir = env.tmpDir;
|
|
31
|
+
(0, session_payload_js_1.resetCache)();
|
|
32
|
+
});
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
(0, db_js_1.destroyEpisodesTestEnv)(env);
|
|
35
|
+
});
|
|
36
|
+
describe('buildSessionPayload', () => {
|
|
37
|
+
test('produces 4 sections for a full DB', () => {
|
|
38
|
+
writeDelta('delta-2026-04-19.md', '# Session\n- Did X\n- Did Y');
|
|
39
|
+
insertEpisode('decision', 'Use TypeScript for all scripts');
|
|
40
|
+
insertEpisode('friction', 'CI pipeline is slow');
|
|
41
|
+
insertEpisode('learning', 'Always build before test');
|
|
42
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
43
|
+
expect(payload.sections).toHaveLength(4);
|
|
44
|
+
expect(payload.sections[0].label).toBe('Session');
|
|
45
|
+
expect(payload.sections[1].label).toBe('Decisions');
|
|
46
|
+
expect(payload.sections[2].label).toBe('Friction');
|
|
47
|
+
expect(payload.sections[3].label).toBe('Learnings');
|
|
48
|
+
expect(payload.totalTokens).toBeGreaterThan(0);
|
|
49
|
+
expect(payload.skipInjection).toBe(false);
|
|
50
|
+
expect(payload.contentHash).toMatch(/^[0-9a-f]{8}$/);
|
|
51
|
+
});
|
|
52
|
+
test('trims sections from end when over budget', () => {
|
|
53
|
+
writeDelta('delta-2026-04-19.md', '# Session\n- Short');
|
|
54
|
+
insertEpisode('decision', 'Short decision');
|
|
55
|
+
insertEpisode('friction', 'Short friction');
|
|
56
|
+
insertEpisode('learning', 'Short learning');
|
|
57
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT, 20);
|
|
58
|
+
expect(payload.sections.length).toBeLessThan(4);
|
|
59
|
+
expect(payload.sections[0].label).toBe('Session');
|
|
60
|
+
expect(payload.totalTokens).toBeLessThanOrEqual(20);
|
|
61
|
+
});
|
|
62
|
+
test('trim order: Learnings dropped first, then Friction, then Decisions', () => {
|
|
63
|
+
writeDelta('delta-2026-04-19.md', '# Session\n- Work');
|
|
64
|
+
insertEpisode('decision', 'Dec');
|
|
65
|
+
insertEpisode('friction', 'Fric');
|
|
66
|
+
insertEpisode('learning', 'Learn');
|
|
67
|
+
const full = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT, 99999);
|
|
68
|
+
const sessionTokens = full.sections[0].tokens;
|
|
69
|
+
const decisionTokens = full.sections[1].tokens;
|
|
70
|
+
(0, session_payload_js_1.resetCache)();
|
|
71
|
+
const budgetFor2 = sessionTokens + decisionTokens + 1;
|
|
72
|
+
const trimmed = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT, budgetFor2);
|
|
73
|
+
expect(trimmed.sections.map(s => s.label)).toEqual(['Session', 'Decisions']);
|
|
74
|
+
});
|
|
75
|
+
test('skips injection when content unchanged (cache-lock)', () => {
|
|
76
|
+
writeDelta('delta-2026-04-19.md', '# Session\n- Same content');
|
|
77
|
+
insertEpisode('decision', 'Same decision');
|
|
78
|
+
const first = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
79
|
+
expect(first.skipInjection).toBe(false);
|
|
80
|
+
const second = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
81
|
+
expect(second.skipInjection).toBe(true);
|
|
82
|
+
expect(second.contentHash).toBe(first.contentHash);
|
|
83
|
+
});
|
|
84
|
+
test('handles empty DB gracefully', () => {
|
|
85
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
86
|
+
expect(payload.sections).toHaveLength(4);
|
|
87
|
+
expect(payload.sections[0].content).toContain('No previous session data');
|
|
88
|
+
expect(payload.sections[1].content).toContain('No recent decisions');
|
|
89
|
+
expect(payload.sections[2].content).toContain('No active friction');
|
|
90
|
+
expect(payload.sections[3].content).toContain('No recent learnings');
|
|
91
|
+
expect(payload.skipInjection).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
test('handles missing diary directory', () => {
|
|
94
|
+
insertEpisode('decision', 'A decision');
|
|
95
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
96
|
+
expect(payload.sections[0].label).toBe('Session');
|
|
97
|
+
expect(payload.sections[0].content).toContain('No previous session data');
|
|
98
|
+
expect(payload.sections).toHaveLength(4);
|
|
99
|
+
});
|
|
100
|
+
test('token estimation is reasonable', () => {
|
|
101
|
+
const text = 'abcd'; // 4 chars = 1 token
|
|
102
|
+
writeDelta('delta-2026-04-19.md', `# H\n- ${text}`);
|
|
103
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
104
|
+
for (const section of payload.sections) {
|
|
105
|
+
const expectedTokens = Math.ceil(section.content.length / 4);
|
|
106
|
+
expect(section.tokens).toBe(expectedTokens);
|
|
107
|
+
}
|
|
108
|
+
const expectedTotal = payload.sections.reduce((s, sec) => s + sec.tokens, 0);
|
|
109
|
+
expect(payload.totalTokens).toBe(expectedTotal);
|
|
110
|
+
});
|
|
111
|
+
test('reads latest delta file when multiple exist', () => {
|
|
112
|
+
writeDelta('delta-2026-04-18.md', '# Old\n- Old stuff');
|
|
113
|
+
writeDelta('delta-2026-04-19.md', '# Latest\n- Latest stuff');
|
|
114
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
115
|
+
expect(payload.sections[0].content).toContain('Latest stuff');
|
|
116
|
+
expect(payload.sections[0].content).not.toContain('Old stuff');
|
|
117
|
+
});
|
|
118
|
+
test('only returns episodes for matching project', () => {
|
|
119
|
+
insertEpisode('decision', 'My project decision', { project: PROJECT });
|
|
120
|
+
insertEpisode('decision', 'Other project decision', { project: 'other-project' });
|
|
121
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT);
|
|
122
|
+
expect(payload.sections[1].content).toContain('My project decision');
|
|
123
|
+
expect(payload.sections[1].content).not.toContain('Other project decision');
|
|
124
|
+
});
|
|
125
|
+
test('Session section is always kept even when over budget', () => {
|
|
126
|
+
writeDelta('delta-2026-04-19.md', '# Session\n- Important context');
|
|
127
|
+
insertEpisode('decision', 'Dec');
|
|
128
|
+
insertEpisode('friction', 'Fric');
|
|
129
|
+
insertEpisode('learning', 'Learn');
|
|
130
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)(db, baseDir, PROJECT, 1);
|
|
131
|
+
expect(payload.sections).toHaveLength(1);
|
|
132
|
+
expect(payload.sections[0].label).toBe('Session');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=session-payload.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-payload.test.js","sourceRoot":"","sources":["../../tests/session-payload.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-path-resolution.test.d.ts","sourceRoot":"","sources":["../../tests/skill-path-resolution.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
describe('Skill script path resolution', () => {
|
|
11
|
+
const mindlorePkg = path_1.default.resolve(__dirname, '..');
|
|
12
|
+
const tmpDir = path_1.default.join(os_1.default.tmpdir(), `mindlore-path-res-${Date.now()}`);
|
|
13
|
+
beforeEach(() => fs_1.default.mkdirSync(tmpDir, { recursive: true }));
|
|
14
|
+
afterEach(() => fs_1.default.rmSync(tmpDir, { recursive: true, force: true }));
|
|
15
|
+
test('scripts are reachable from a different CWD via MINDLORE_PKG', () => {
|
|
16
|
+
const healthScript = path_1.default.join(mindlorePkg, 'dist', 'scripts', 'mindlore-health-check.js');
|
|
17
|
+
expect(fs_1.default.existsSync(healthScript)).toBe(true);
|
|
18
|
+
const result = (0, child_process_1.execSync)(`node "${healthScript}" "${path_1.default.join(os_1.default.homedir(), '.mindlore')}" 2>&1 || true`, { cwd: tmpDir, encoding: 'utf8', timeout: 15000 });
|
|
19
|
+
expect(result).not.toContain('Cannot find module');
|
|
20
|
+
});
|
|
21
|
+
test('skill preamble pattern resolves correctly', () => {
|
|
22
|
+
const skillBase = path_1.default.join(mindlorePkg, 'skills', 'mindlore-diary');
|
|
23
|
+
const resolvedPkg = path_1.default.resolve(skillBase, '..', '..');
|
|
24
|
+
expect(resolvedPkg).toBe(mindlorePkg);
|
|
25
|
+
expect(fs_1.default.existsSync(path_1.default.join(resolvedPkg, 'dist', 'scripts'))).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
test('no bare "node dist/" or "node scripts/" references in skill files', () => {
|
|
28
|
+
const skillsDir = path_1.default.join(mindlorePkg, 'skills');
|
|
29
|
+
const skillDirs = fs_1.default.readdirSync(skillsDir).filter(d => fs_1.default.statSync(path_1.default.join(skillsDir, d)).isDirectory());
|
|
30
|
+
for (const dir of skillDirs) {
|
|
31
|
+
const skillFile = path_1.default.join(skillsDir, dir, 'SKILL.md');
|
|
32
|
+
if (!fs_1.default.existsSync(skillFile))
|
|
33
|
+
continue;
|
|
34
|
+
const content = fs_1.default.readFileSync(skillFile, 'utf8');
|
|
35
|
+
const bareNodeDist = content.match(/node dist\//g) ?? [];
|
|
36
|
+
const bareNodeScripts = content.match(/node scripts\//g) ?? [];
|
|
37
|
+
expect(bareNodeDist).toEqual([]);
|
|
38
|
+
expect(bareNodeScripts).toEqual([]);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=skill-path-resolution.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-path-resolution.test.js","sourceRoot":"","sources":["../../tests/skill-path-resolution.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,14 +186,20 @@ function requireDatabase() {
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
function openDatabase(dbPath, opts) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
db
|
|
189
|
+
try {
|
|
190
|
+
const Database = requireDatabase();
|
|
191
|
+
if (!Database) return null;
|
|
192
|
+
if (!fs.existsSync(dbPath)) return null;
|
|
193
|
+
const readonly = opts?.readonly ?? false;
|
|
194
|
+
const db = new Database(dbPath, { readonly });
|
|
195
|
+
if (!readonly) {
|
|
196
|
+
db.pragma('journal_mode = WAL');
|
|
197
|
+
db.pragma('busy_timeout = 5000');
|
|
198
|
+
}
|
|
199
|
+
return db;
|
|
200
|
+
} catch (_err) {
|
|
201
|
+
return null;
|
|
195
202
|
}
|
|
196
|
-
return db;
|
|
197
203
|
}
|
|
198
204
|
|
|
199
205
|
function getAllMdFiles(dir, skip) {
|
|
@@ -398,7 +404,9 @@ function queryRecentEpisodes(db, opts) {
|
|
|
398
404
|
const project = opts.project || null;
|
|
399
405
|
const limit = opts.limit || 3;
|
|
400
406
|
|
|
401
|
-
|
|
407
|
+
const hasConsolCol = db.pragma('table_info(episodes)').some(c => c.name === 'consolidation_status');
|
|
408
|
+
const consolFilter = hasConsolCol ? " AND (consolidation_status IS NULL OR consolidation_status != 'consolidated')" : '';
|
|
409
|
+
let sql = `SELECT kind, summary, created_at FROM episodes WHERE status = 'active'${consolFilter}`;
|
|
402
410
|
const params = [];
|
|
403
411
|
|
|
404
412
|
if (project) {
|
|
@@ -675,6 +683,8 @@ module.exports = {
|
|
|
675
683
|
resolveWin32Bin,
|
|
676
684
|
// Skeleton compression (v0.5.2)
|
|
677
685
|
extractSkeleton,
|
|
686
|
+
// Recall telemetry (v0.5.3)
|
|
687
|
+
incrementRecallCount,
|
|
678
688
|
};
|
|
679
689
|
|
|
680
690
|
/**
|
|
@@ -706,6 +716,30 @@ function hasVecTableCjs(db) {
|
|
|
706
716
|
}
|
|
707
717
|
}
|
|
708
718
|
|
|
719
|
+
/**
|
|
720
|
+
* Increment recall_count and update last_recalled_at for a file in file_hashes.
|
|
721
|
+
* No-op if column missing (old DB without v0.5.3 migration).
|
|
722
|
+
* @param {import('better-sqlite3').Database} db
|
|
723
|
+
* @param {string} filePath
|
|
724
|
+
*/
|
|
725
|
+
const _recallColCache = new WeakMap();
|
|
726
|
+
function incrementRecallCount(db, filePath) {
|
|
727
|
+
try {
|
|
728
|
+
let hasCol = _recallColCache.get(db);
|
|
729
|
+
if (hasCol === undefined) {
|
|
730
|
+
hasCol = db.pragma('table_info(file_hashes)').some(c => c.name === 'recall_count');
|
|
731
|
+
_recallColCache.set(db, hasCol);
|
|
732
|
+
}
|
|
733
|
+
if (!hasCol) return;
|
|
734
|
+
db.prepare(`
|
|
735
|
+
UPDATE file_hashes
|
|
736
|
+
SET recall_count = COALESCE(recall_count, 0) + 1,
|
|
737
|
+
last_recalled_at = ?
|
|
738
|
+
WHERE path = ?
|
|
739
|
+
`).run(new Date().toISOString(), filePath);
|
|
740
|
+
} catch (_err) { /* graceful — old DB without columns */ }
|
|
741
|
+
}
|
|
742
|
+
|
|
709
743
|
// --- Hook Logging (v0.5.1) ---
|
|
710
744
|
|
|
711
745
|
function hookLogPath() { return path.join(globalDir(), 'diary', '_hook-log.jsonl'); }
|
|
@@ -103,13 +103,36 @@ function main() {
|
|
|
103
103
|
if (toolName !== 'Agent') return;
|
|
104
104
|
|
|
105
105
|
const toolInput = input.tool_input || {};
|
|
106
|
+
|
|
107
|
+
// Only block agents with web access — let local-only agents pass
|
|
108
|
+
const WEB_CAPABLE_TYPES = ['researcher', 'general-purpose'];
|
|
109
|
+
const LOCAL_ONLY_TYPES = [
|
|
110
|
+
'Explore', 'coder', 'code-reviewer', 'Plan',
|
|
111
|
+
'bug-analyzer', 'security-reviewer', 'contrarian',
|
|
112
|
+
'scope-guardian', 'quality-gate', 'test-runner',
|
|
113
|
+
];
|
|
114
|
+
const subagentType = toolInput.subagent_type || '';
|
|
115
|
+
const description = (toolInput.description || '').toLowerCase();
|
|
116
|
+
|
|
117
|
+
// Known local-only agent → always pass
|
|
118
|
+
if (LOCAL_ONLY_TYPES.includes(subagentType)) return;
|
|
119
|
+
|
|
120
|
+
// Known web-capable agent → continue to FTS5 check
|
|
121
|
+
// Unknown or empty subagent_type → check description for research intent
|
|
122
|
+
if (subagentType && !WEB_CAPABLE_TYPES.includes(subagentType)) return;
|
|
123
|
+
|
|
124
|
+
// If no subagent_type, check description for web research intent (reuse RESEARCH_REGEX)
|
|
125
|
+
if (!subagentType && !RESEARCH_REGEX.test(description)) return;
|
|
126
|
+
|
|
106
127
|
const prompt = (toolInput.prompt || '') + ' ' + (toolInput.description || '');
|
|
107
128
|
|
|
108
129
|
// Skip mindlore internal operations and explicit overrides
|
|
109
130
|
if (EXCLUDE_REGEX.test(prompt)) return;
|
|
110
131
|
|
|
111
|
-
//
|
|
112
|
-
|
|
132
|
+
// If subagent_type is a known research type, skip prompt-level regex check
|
|
133
|
+
// Otherwise require research signals in the prompt text
|
|
134
|
+
const isKnownResearchType = WEB_CAPABLE_TYPES.includes(subagentType);
|
|
135
|
+
if (!isKnownResearchType && !RESEARCH_REGEX.test(prompt)) return;
|
|
113
136
|
|
|
114
137
|
const keywords = extractKeywords(prompt, 10);
|
|
115
138
|
if (keywords.length < 2) return;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
const fs = require('fs');
|
|
12
12
|
const path = require('path');
|
|
13
|
-
const { getAllDbs,
|
|
13
|
+
const { getAllDbs, openDatabase, extractHeadings, readHookStdin, extractKeywords, sanitizeKeyword, readConfig, loadSqliteVecCjs, hasVecTableCjs, hookLog, incrementRecallCount } = require('./lib/mindlore-common.cjs');
|
|
14
14
|
|
|
15
15
|
const MAX_RESULTS = 3;
|
|
16
16
|
const MIN_QUERY_WORDS = 3;
|
|
@@ -26,12 +26,16 @@ try {
|
|
|
26
26
|
/**
|
|
27
27
|
* Search a single DB and return scored results with their baseDir.
|
|
28
28
|
*/
|
|
29
|
-
function searchDb(dbPath, keywords
|
|
29
|
+
function searchDb(dbPath, keywords) {
|
|
30
30
|
const baseDir = path.dirname(dbPath);
|
|
31
|
-
const db =
|
|
31
|
+
const db = openDatabase(dbPath, { readonly: true });
|
|
32
|
+
if (!db) return [];
|
|
32
33
|
const results = [];
|
|
33
34
|
|
|
34
35
|
// v0.5.0: Try hybrid search with synonym expansion (no embedding — hooks are sync)
|
|
36
|
+
if (!hybridSearchMod) {
|
|
37
|
+
hookLog('search', 'info', 'No hybridSearchMod — FTS5-only mode');
|
|
38
|
+
}
|
|
35
39
|
if (hybridSearchMod && loadSqliteVecCjs(db) && hasVecTableCjs(db)) {
|
|
36
40
|
try {
|
|
37
41
|
const config = readConfig(baseDir);
|
|
@@ -75,8 +79,8 @@ function searchDb(dbPath, keywords, Database) {
|
|
|
75
79
|
db.close();
|
|
76
80
|
return results;
|
|
77
81
|
}
|
|
78
|
-
} catch (
|
|
79
|
-
|
|
82
|
+
} catch (hybridErr) {
|
|
83
|
+
hookLog('search', 'warn', `Hybrid search fallback to FTS5: ${hybridErr?.message || hybridErr}`);
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
86
|
|
|
@@ -145,12 +149,9 @@ function main() {
|
|
|
145
149
|
const keywords = extractKeywords(userMessage);
|
|
146
150
|
if (keywords.length < MIN_QUERY_WORDS) return;
|
|
147
151
|
|
|
148
|
-
const Database = requireDatabase();
|
|
149
|
-
if (!Database) return;
|
|
150
|
-
|
|
151
152
|
const allScores = [];
|
|
152
153
|
for (const dbPath of dbPaths) {
|
|
153
|
-
allScores.push(...searchDb(dbPath, keywords
|
|
154
|
+
allScores.push(...searchDb(dbPath, keywords));
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
// Sort: most keyword hits first, then best rank
|
|
@@ -170,6 +171,17 @@ function main() {
|
|
|
170
171
|
const relevant = unique.slice(0, MAX_RESULTS);
|
|
171
172
|
if (relevant.length === 0) return;
|
|
172
173
|
|
|
174
|
+
try {
|
|
175
|
+
const db = openDatabase(dbPaths[0]);
|
|
176
|
+
if (db) {
|
|
177
|
+
const txn = db.transaction(() => {
|
|
178
|
+
for (const r of relevant) incrementRecallCount(db, r.path);
|
|
179
|
+
});
|
|
180
|
+
txn();
|
|
181
|
+
db.close();
|
|
182
|
+
}
|
|
183
|
+
} catch (_e) { /* graceful — never block search output */ }
|
|
184
|
+
|
|
173
185
|
// Populate headings only for final results (avoid reading extra files)
|
|
174
186
|
for (const r of relevant) {
|
|
175
187
|
if (r.path && r.headings.length === 0 && fs.existsSync(r.path)) {
|
|
@@ -213,7 +225,8 @@ function main() {
|
|
|
213
225
|
if (relevant.length < MAX_RESULTS) {
|
|
214
226
|
for (const dbPath of dbPaths) {
|
|
215
227
|
try {
|
|
216
|
-
const db =
|
|
228
|
+
const db = openDatabase(dbPath, { readonly: true });
|
|
229
|
+
if (!db) continue;
|
|
217
230
|
const episodeResults = searchEpisodesFts(db, keywords);
|
|
218
231
|
db.close();
|
|
219
232
|
if (episodeResults.length > 0) {
|
|
@@ -46,6 +46,41 @@ if (process.argv.includes('--worker')) {
|
|
|
46
46
|
await safeRunAsync(() => writeBareEpisode(baseDir, project, commits, changedFiles, reads), 'episode');
|
|
47
47
|
await safeRunAsync(() => writeEpisodeFile(baseDir, project, commits, changedFiles, reads), 'episode-file');
|
|
48
48
|
|
|
49
|
+
// CC memory bulk sync — synchronous with timeout
|
|
50
|
+
await safeRunAsync(async () => {
|
|
51
|
+
const syncScript = path.join(__dirname, '..', 'dist', 'scripts', 'cc-memory-bulk-sync.js');
|
|
52
|
+
if (fs.existsSync(syncScript)) {
|
|
53
|
+
const nodeExe = resolveWin32Bin('node') || process.execPath;
|
|
54
|
+
const { execFileSync } = require('child_process');
|
|
55
|
+
try {
|
|
56
|
+
execFileSync(nodeExe, [syncScript, '--auto'], {
|
|
57
|
+
timeout: 10000,
|
|
58
|
+
env: { ...process.env, MINDLORE_HOME: baseDir },
|
|
59
|
+
});
|
|
60
|
+
hookLog('session-end', 'info', 'CC memory sync completed');
|
|
61
|
+
} catch (syncErr) {
|
|
62
|
+
hookLog('session-end', 'warn', `CC memory sync failed: ${syncErr?.message || syncErr}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}, 'cc-memory-sync');
|
|
66
|
+
|
|
67
|
+
// Embed trigger — detached, fire-and-forget
|
|
68
|
+
await safeRunAsync(async () => {
|
|
69
|
+
const indexScript = path.join(__dirname, '..', 'dist', 'scripts', 'mindlore-fts5-index.js');
|
|
70
|
+
if (fs.existsSync(indexScript)) {
|
|
71
|
+
const nodeExe = resolveWin32Bin('node') || process.execPath;
|
|
72
|
+
const { spawn: spawnChild } = require('child_process');
|
|
73
|
+
const embedProc = spawnChild(nodeExe, [indexScript, '--embed'], {
|
|
74
|
+
detached: true,
|
|
75
|
+
stdio: 'ignore',
|
|
76
|
+
windowsHide: true,
|
|
77
|
+
env: { ...process.env, MINDLORE_HOME: baseDir },
|
|
78
|
+
});
|
|
79
|
+
embedProc.unref();
|
|
80
|
+
hookLog('session-end', 'info', 'embed subprocess spawned, pid=' + embedProc.pid);
|
|
81
|
+
}
|
|
82
|
+
}, 'embed-trigger');
|
|
83
|
+
|
|
49
84
|
// Obsidian + git-sync are independent — run in parallel
|
|
50
85
|
await Promise.allSettled([
|
|
51
86
|
safeRunAsync(() => syncObsidian(baseDir), 'obsidian'),
|