mindlore 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +30 -0
- package/dist/scripts/init.js +152 -151
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +1 -1
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +2 -7
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/detect-plugin.d.ts +2 -0
- package/dist/scripts/lib/detect-plugin.d.ts.map +1 -0
- package/dist/scripts/lib/detect-plugin.js +14 -0
- package/dist/scripts/lib/detect-plugin.js.map +1 -0
- package/dist/scripts/lib/hook-helpers.d.ts +8 -0
- package/dist/scripts/lib/hook-helpers.d.ts.map +1 -0
- package/dist/scripts/lib/hook-helpers.js +27 -0
- package/dist/scripts/lib/hook-helpers.js.map +1 -0
- package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -1
- package/dist/scripts/lib/mcp-namespace.js +0 -5
- package/dist/scripts/lib/mcp-namespace.js.map +1 -1
- package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
- package/dist/scripts/lib/mcp-tools.js +3 -19
- package/dist/scripts/lib/mcp-tools.js.map +1 -1
- package/dist/scripts/lib/relation-helpers.js +1 -1
- package/dist/scripts/lib/relation-helpers.js.map +1 -1
- package/dist/scripts/lib/session-payload.d.ts.map +1 -1
- package/dist/scripts/lib/session-payload.js +4 -16
- package/dist/scripts/lib/session-payload.js.map +1 -1
- package/dist/scripts/lib/settings-cleanup.d.ts +6 -0
- package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -0
- package/dist/scripts/lib/settings-cleanup.js +61 -0
- package/dist/scripts/lib/settings-cleanup.js.map +1 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +1 -1
- package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -1
- package/dist/scripts/lib/tool-adapters/decide-adapter.js +5 -0
- package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -1
- package/dist/scripts/mcp-server.js +40 -3
- package/dist/scripts/mcp-server.js.map +1 -1
- package/dist/scripts/mindlore-doctor.d.ts +4 -1
- package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
- package/dist/scripts/mindlore-doctor.js +86 -40
- package/dist/scripts/mindlore-doctor.js.map +1 -1
- package/dist/scripts/mindlore-health-check.js +2 -2
- package/dist/scripts/mindlore-health-check.js.map +1 -1
- package/dist/scripts/mindlore-perf.d.ts +3 -1
- package/dist/scripts/mindlore-perf.d.ts.map +1 -1
- package/dist/scripts/mindlore-perf.js +13 -6
- package/dist/scripts/mindlore-perf.js.map +1 -1
- package/dist/scripts/uninstall.js +14 -38
- package/dist/scripts/uninstall.js.map +1 -1
- package/dist/tests/db-singleton.test.d.ts +2 -0
- package/dist/tests/db-singleton.test.d.ts.map +1 -0
- package/dist/tests/db-singleton.test.js +22 -0
- package/dist/tests/db-singleton.test.js.map +1 -0
- package/dist/tests/doctor.test.js +45 -15
- package/dist/tests/doctor.test.js.map +1 -1
- package/dist/tests/dont-repeat-dedup.test.js +13 -1
- package/dist/tests/dont-repeat-dedup.test.js.map +1 -1
- package/dist/tests/fts5-sync.test.js +11 -117
- package/dist/tests/fts5-sync.test.js.map +1 -1
- package/dist/tests/hook-helpers.test.d.ts +2 -0
- package/dist/tests/hook-helpers.test.d.ts.map +1 -0
- package/dist/tests/hook-helpers.test.js +44 -0
- package/dist/tests/hook-helpers.test.js.map +1 -0
- package/dist/tests/install-matrix.test.d.ts +2 -0
- package/dist/tests/install-matrix.test.d.ts.map +1 -0
- package/dist/tests/install-matrix.test.js +110 -0
- package/dist/tests/install-matrix.test.js.map +1 -0
- package/dist/tests/latency-budget.test.d.ts +2 -0
- package/dist/tests/latency-budget.test.d.ts.map +1 -0
- package/dist/tests/latency-budget.test.js +37 -0
- package/dist/tests/latency-budget.test.js.map +1 -0
- package/dist/tests/mcp-namespace.test.d.ts +2 -0
- package/dist/tests/mcp-namespace.test.d.ts.map +1 -0
- package/dist/tests/mcp-namespace.test.js +41 -0
- package/dist/tests/mcp-namespace.test.js.map +1 -0
- package/dist/tests/session-payload.test.js +13 -5
- package/dist/tests/session-payload.test.js.map +1 -1
- package/dist/tests/settings-cleanup.test.d.ts +2 -0
- package/dist/tests/settings-cleanup.test.d.ts.map +1 -0
- package/dist/tests/settings-cleanup.test.js +126 -0
- package/dist/tests/settings-cleanup.test.js.map +1 -0
- package/dist/tests/telemetry-perf.test.js +9 -8
- package/dist/tests/telemetry-perf.test.js.map +1 -1
- package/dist/tests/version-sync.test.d.ts +2 -0
- package/dist/tests/version-sync.test.d.ts.map +1 -0
- package/dist/tests/version-sync.test.js +41 -0
- package/dist/tests/version-sync.test.js.map +1 -0
- package/hooks/cc-memory-bulk-sync.cjs +2 -5
- package/hooks/cc-session-sync.cjs +2 -5
- package/hooks/lib/mindlore-common.cjs +41 -8
- package/hooks/mindlore-fts5-sync.cjs +5 -1
- package/hooks/mindlore-search.cjs +20 -14
- package/hooks/mindlore-session-focus.cjs +5 -17
- package/hooks/src/mindlore-fts5-sync.cjs +7 -4
- package/hooks/src/mindlore-search.cjs +19 -11
- package/hooks/src/mindlore-session-focus.cjs +1 -1
- package/package.json +3 -2
- package/plugin.json +5 -2
- package/skills/mindlore-decide/SKILL.md +7 -0
- package/skills/mindlore-log/SKILL.md +7 -0
- package/templates/config.json +1 -1
|
@@ -95,12 +95,9 @@ describe('buildSessionPayload', () => {
|
|
|
95
95
|
const expectedTotal = payload.sections.reduce((s, sec) => s + sec.tokens, 0);
|
|
96
96
|
expect(payload.totalTokens).toBe(expectedTotal);
|
|
97
97
|
});
|
|
98
|
-
test('
|
|
99
|
-
|
|
100
|
-
writeDelta('delta-2026-04-19.md', '# Latest\n- Latest stuff');
|
|
101
|
-
const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT });
|
|
98
|
+
test('uses latestDeltaContent parameter for Session section', () => {
|
|
99
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT, latestDeltaContent: '# Latest\n- Latest stuff' });
|
|
102
100
|
expect(payload.sections[0].content).toContain('Latest stuff');
|
|
103
|
-
expect(payload.sections[0].content).not.toContain('Old stuff');
|
|
104
101
|
});
|
|
105
102
|
test('only returns episodes for matching project', () => {
|
|
106
103
|
insertEpisode('decision', 'My project decision', { project: PROJECT });
|
|
@@ -118,5 +115,16 @@ describe('buildSessionPayload', () => {
|
|
|
118
115
|
expect(payload.sections).toHaveLength(1);
|
|
119
116
|
expect(payload.sections[0].label).toBe('Session');
|
|
120
117
|
});
|
|
118
|
+
test('Session section shows "No previous session data" when latestDeltaContent is undefined', () => {
|
|
119
|
+
writeDelta('delta-2026-04-19.md', '---\nproject: other-project\n---\n# Other\n- Kastell stuff');
|
|
120
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT });
|
|
121
|
+
expect(payload.sections[0].content).toContain('No previous session data');
|
|
122
|
+
expect(payload.sections[0].content).not.toContain('Kastell');
|
|
123
|
+
});
|
|
124
|
+
test('Session section uses latestDeltaContent when provided', () => {
|
|
125
|
+
const delta = '# My Project\n- Did feature work\n- Fixed bug';
|
|
126
|
+
const payload = (0, session_payload_js_1.buildSessionPayload)({ db, baseDir, project: PROJECT, latestDeltaContent: delta });
|
|
127
|
+
expect(payload.sections[0].content).toContain('Did feature work');
|
|
128
|
+
});
|
|
121
129
|
});
|
|
122
130
|
//# sourceMappingURL=session-payload.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-payload.test.js","sourceRoot":"","sources":["../../tests/session-payload.test.ts"],"names":[],"mappings":"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
|
|
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":"settings-cleanup.test.d.ts","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
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 settings_cleanup_js_1 = require("../scripts/lib/settings-cleanup.js");
|
|
10
|
+
const FIXTURES = path_1.default.join(__dirname, 'fixtures');
|
|
11
|
+
function loadFixture(name) {
|
|
12
|
+
const tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-test-'));
|
|
13
|
+
const src = path_1.default.join(FIXTURES, name);
|
|
14
|
+
const dest = path_1.default.join(tmpDir, 'settings.json');
|
|
15
|
+
fs_1.default.copyFileSync(src, dest);
|
|
16
|
+
return dest;
|
|
17
|
+
}
|
|
18
|
+
function readJson(filePath) {
|
|
19
|
+
return JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
// tmpdir cleanup handled by OS
|
|
23
|
+
});
|
|
24
|
+
describe('cleanupLegacyHooks', () => {
|
|
25
|
+
it('removes hooks with node_modules/mindlore/hooks/ path', () => {
|
|
26
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
27
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
28
|
+
expect(result.removed).toBe(4);
|
|
29
|
+
expect(result.backupCreated).toBe(true);
|
|
30
|
+
const settings = readJson(settingsPath);
|
|
31
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
32
|
+
const hooks = settings.hooks;
|
|
33
|
+
// PreToolUse should keep only bash-guard (user hook)
|
|
34
|
+
expect(hooks.PreToolUse).toHaveLength(1);
|
|
35
|
+
// SessionStart had only mindlore hook → event key removed
|
|
36
|
+
expect(hooks.SessionStart).toBeUndefined();
|
|
37
|
+
// UserPromptSubmit had only mindlore hook → event key removed
|
|
38
|
+
expect(hooks.UserPromptSubmit).toBeUndefined();
|
|
39
|
+
});
|
|
40
|
+
it('does nothing on clean settings.json (no mindlore hooks)', () => {
|
|
41
|
+
const settingsPath = loadFixture('settings-clean.json');
|
|
42
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
43
|
+
expect(result.removed).toBe(0);
|
|
44
|
+
expect(result.backupCreated).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
it('preserves user custom hooks with mindlore- prefix but non-node_modules path', () => {
|
|
47
|
+
const settingsPath = loadFixture('settings-mixed-hooks.json');
|
|
48
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
49
|
+
expect(result.removed).toBe(2); // read-guard + session-end
|
|
50
|
+
const settings = readJson(settingsPath);
|
|
51
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
52
|
+
const hooks = settings.hooks;
|
|
53
|
+
// PreToolUse: bash-guard + user custom mindlore hook kept, node_modules one removed
|
|
54
|
+
expect(hooks.PreToolUse).toHaveLength(2);
|
|
55
|
+
// SessionEnd had only node_modules hook → removed
|
|
56
|
+
expect(hooks.SessionEnd).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
it('creates backup file before modifying', () => {
|
|
59
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
60
|
+
const backupPath = settingsPath + '.mindlore-migration-backup';
|
|
61
|
+
(0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
62
|
+
expect(fs_1.default.existsSync(backupPath)).toBe(true);
|
|
63
|
+
// Backup should be the original content
|
|
64
|
+
const backup = readJson(backupPath);
|
|
65
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- test fixture shape */
|
|
66
|
+
const hooks = backup.hooks;
|
|
67
|
+
expect(hooks.PreToolUse).toHaveLength(3);
|
|
68
|
+
});
|
|
69
|
+
it('does not overwrite existing backup', () => {
|
|
70
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
71
|
+
const backupPath = settingsPath + '.mindlore-migration-backup';
|
|
72
|
+
// Create fake backup first
|
|
73
|
+
fs_1.default.writeFileSync(backupPath, '{"fake": true}', 'utf8');
|
|
74
|
+
(0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
75
|
+
// Original fake backup should be preserved
|
|
76
|
+
const backup = readJson(backupPath);
|
|
77
|
+
expect(backup.fake).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it('returns correct result when settings.json does not exist', () => {
|
|
80
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)('/nonexistent/path/settings.json');
|
|
81
|
+
expect(result.removed).toBe(0);
|
|
82
|
+
expect(result.backupCreated).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('is idempotent — second run removes nothing', () => {
|
|
85
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
86
|
+
const first = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
87
|
+
expect(first.removed).toBe(4);
|
|
88
|
+
const second = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
89
|
+
expect(second.removed).toBe(0);
|
|
90
|
+
expect(second.backupCreated).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
it('handles both forward-slash and backslash node_modules paths', () => {
|
|
93
|
+
const settingsPath = loadFixture('settings-with-mindlore-hooks.json');
|
|
94
|
+
const result = (0, settings_cleanup_js_1.cleanupLegacyHooks)(settingsPath);
|
|
95
|
+
// All fixtures use backslash (Windows) — verify they're caught
|
|
96
|
+
expect(result.removed).toBeGreaterThan(0);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('init.ts plugin gate verification', () => {
|
|
100
|
+
it('init.ts should have detectPluginInstalled gate', () => {
|
|
101
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
102
|
+
expect(initSource).toContain('detectPluginInstalled');
|
|
103
|
+
});
|
|
104
|
+
it('init.ts should have both mergeHooks and cleanupLegacyHooks (gated)', () => {
|
|
105
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
106
|
+
expect(initSource).toContain('mergeHooks');
|
|
107
|
+
expect(initSource).toContain('cleanupLegacyHooks');
|
|
108
|
+
});
|
|
109
|
+
it('init.ts should have registerSkills and registerAgents for npx-only path', () => {
|
|
110
|
+
const initSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'init.ts'), 'utf8');
|
|
111
|
+
expect(initSource).toContain('registerSkills');
|
|
112
|
+
expect(initSource).toContain('registerAgents');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('uninstall.ts shared module usage', () => {
|
|
116
|
+
it('uninstall.ts should not contain inline removeHooks implementation', () => {
|
|
117
|
+
const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
|
|
118
|
+
// Should not have inline hook filtering logic
|
|
119
|
+
expect(uninstallSource).not.toContain("includes('mindlore-')");
|
|
120
|
+
});
|
|
121
|
+
it('uninstall.ts should import from settings-cleanup', () => {
|
|
122
|
+
const uninstallSource = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'scripts', 'uninstall.ts'), 'utf8');
|
|
123
|
+
expect(uninstallSource).toContain('settings-cleanup');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=settings-cleanup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-cleanup.test.js","sourceRoot":"","sources":["../../tests/settings-cleanup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,23 +26,24 @@ describe('mindlore-perf', () => {
|
|
|
26
26
|
expect(entries).toHaveLength(5);
|
|
27
27
|
});
|
|
28
28
|
it('calculates p50/p95 per hook', () => {
|
|
29
|
-
const { parseTelemetry, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
|
|
29
|
+
const { parseTelemetry, groupByHook, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
|
|
30
30
|
const entries = parseTelemetry(telPath);
|
|
31
|
-
const
|
|
31
|
+
const groups = groupByHook(entries);
|
|
32
|
+
const percs = calculatePercentiles(groups['search'] ?? []);
|
|
32
33
|
expect(percs.p50).toBe(200);
|
|
33
34
|
expect(percs.count).toBe(3);
|
|
34
35
|
});
|
|
35
36
|
it('calculates percentiles for session-focus', () => {
|
|
36
|
-
const { parseTelemetry, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
|
|
37
|
+
const { parseTelemetry, groupByHook, calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
|
|
37
38
|
const entries = parseTelemetry(telPath);
|
|
38
|
-
const
|
|
39
|
+
const groups = groupByHook(entries);
|
|
40
|
+
const percs = calculatePercentiles(groups['session-focus'] ?? []);
|
|
39
41
|
expect(percs.count).toBe(2);
|
|
40
42
|
expect(percs.errorCount).toBe(1);
|
|
41
43
|
});
|
|
42
|
-
it('returns zero percentiles for
|
|
43
|
-
const {
|
|
44
|
-
const
|
|
45
|
-
const percs = calculatePercentiles(entries, 'nonexistent');
|
|
44
|
+
it('returns zero percentiles for empty array', () => {
|
|
45
|
+
const { calculatePercentiles } = require('../dist/scripts/mindlore-perf.js');
|
|
46
|
+
const percs = calculatePercentiles([]);
|
|
46
47
|
expect(percs.count).toBe(0);
|
|
47
48
|
expect(percs.p50).toBe(0);
|
|
48
49
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-perf.test.js","sourceRoot":"","sources":["../../tests/telemetry-perf.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,YAAE,CAAC,WAAW,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;YAC3E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAC5E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAC5E,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YACnF,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;SACrF,CAAC;QACF,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,QAAQ,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;IAEzE,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry-perf.test.js","sourceRoot":"","sources":["../../tests/telemetry-perf.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-sync.test.d.ts","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
function readJsonVersion(filePath, ...keys) {
|
|
9
|
+
const content = JSON.parse(fs_1.default.readFileSync(filePath, 'utf8'));
|
|
10
|
+
let value = content;
|
|
11
|
+
for (const key of keys) {
|
|
12
|
+
value = value[key];
|
|
13
|
+
}
|
|
14
|
+
/* eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON traversal returns any */
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
describe('Version Sync', () => {
|
|
18
|
+
const root = path_1.default.resolve(__dirname, '..');
|
|
19
|
+
const versions = () => ({
|
|
20
|
+
packageJson: readJsonVersion(path_1.default.join(root, 'package.json'), 'version'),
|
|
21
|
+
pluginJson: readJsonVersion(path_1.default.join(root, 'plugin.json'), 'version'),
|
|
22
|
+
claudePluginJson: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'plugin.json'), 'version'),
|
|
23
|
+
marketplaceMeta: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'metadata', 'version'),
|
|
24
|
+
marketplacePlugin: readJsonVersion(path_1.default.join(root, '.claude-plugin', 'marketplace.json'), 'plugins', '0', 'version'),
|
|
25
|
+
});
|
|
26
|
+
it('all 5 version fields are equal', () => {
|
|
27
|
+
const v = versions();
|
|
28
|
+
const allVersions = Object.values(v);
|
|
29
|
+
const unique = new Set(allVersions);
|
|
30
|
+
expect(unique.size).toBe(1);
|
|
31
|
+
// Extra detail on failure
|
|
32
|
+
if (unique.size !== 1) {
|
|
33
|
+
console.log('Version mismatch:', v);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
it('version matches semver pattern', () => {
|
|
37
|
+
const v = versions();
|
|
38
|
+
expect(v.packageJson).toMatch(/^\d+\.\d+\.\d+$/);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=version-sync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-sync.test.js","sourceRoot":"","sources":["../../tests/version-sync.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,SAAS,eAAe,CAAC,QAAgB,EAAE,GAAG,IAAc;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,GAAG,OAAO,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,wGAAwG;IACxG,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;QACtB,WAAW,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC;QACxE,UAAU,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QACtE,gBAAgB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC;QAC9F,eAAe,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;QAC9G,iBAAiB,EAAE,eAAe,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC;KACrH,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,0BAA0B;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -34,11 +34,10 @@ var require_constants = __commonJS({
|
|
|
34
34
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
36
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
37
|
-
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
37
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
38
38
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
39
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
40
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
-
exports2.buildPriorityCase = buildPriorityCase;
|
|
42
41
|
exports2.homedir = homedir;
|
|
43
42
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
44
43
|
exports2.getAllDbs = getAllDbs;
|
|
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
|
|
|
336
335
|
};
|
|
337
336
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
337
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
338
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
339
|
exports2.TYPE_TO_DIR = {
|
|
343
340
|
raw: "raw",
|
|
344
341
|
source: "sources",
|
|
@@ -34,11 +34,10 @@ var require_constants = __commonJS({
|
|
|
34
34
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
36
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
37
|
-
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
37
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
38
38
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
39
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
40
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
-
exports2.buildPriorityCase = buildPriorityCase;
|
|
42
41
|
exports2.homedir = homedir;
|
|
43
42
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
44
43
|
exports2.getAllDbs = getAllDbs;
|
|
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
|
|
|
336
335
|
};
|
|
337
336
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
337
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
338
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
339
|
exports2.TYPE_TO_DIR = {
|
|
343
340
|
raw: "raw",
|
|
344
341
|
source: "sources",
|
|
@@ -663,6 +663,24 @@ const extractSkeleton = (() => {
|
|
|
663
663
|
|
|
664
664
|
const TELEMETRY_KEEP_LINES = 200;
|
|
665
665
|
|
|
666
|
+
const HOOK_LATENCY_BUDGETS = {
|
|
667
|
+
'mindlore-session-focus': 100,
|
|
668
|
+
'mindlore-session-end': 100,
|
|
669
|
+
'mindlore-pre-compact': 100,
|
|
670
|
+
'mindlore-post-compact': 100,
|
|
671
|
+
'mindlore-search': 50,
|
|
672
|
+
'mindlore-decision-detector': 50,
|
|
673
|
+
'mindlore-index': 50,
|
|
674
|
+
'mindlore-fts5-sync': 50,
|
|
675
|
+
'mindlore-cwd-changed': 50,
|
|
676
|
+
'mindlore-read-guard': 30,
|
|
677
|
+
'mindlore-post-read': 30,
|
|
678
|
+
'mindlore-dont-repeat': 30,
|
|
679
|
+
'mindlore-model-router': 30,
|
|
680
|
+
'mindlore-research-guard': 30,
|
|
681
|
+
};
|
|
682
|
+
const DEFAULT_BUDGET_MS = 50;
|
|
683
|
+
|
|
666
684
|
function _rotateFile(filePath, maxBytes, keepLines) {
|
|
667
685
|
try {
|
|
668
686
|
const stat = fs.statSync(filePath);
|
|
@@ -677,16 +695,17 @@ function _rotateFile(filePath, maxBytes, keepLines) {
|
|
|
677
695
|
|
|
678
696
|
let _telDirEnsured = false;
|
|
679
697
|
|
|
680
|
-
function _writeTelemetry({ hookName, duration_ms, ok, extra }) {
|
|
698
|
+
function _writeTelemetry({ hookName, duration_ms, ok, budget_ms, budget_exceeded, extra }) {
|
|
681
699
|
try {
|
|
700
|
+
const telDir = globalDir();
|
|
682
701
|
if (!_telDirEnsured) {
|
|
683
|
-
safeMkdir(
|
|
702
|
+
safeMkdir(telDir);
|
|
684
703
|
_telDirEnsured = true;
|
|
685
704
|
}
|
|
686
|
-
const telPath = path.join(
|
|
687
|
-
const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok };
|
|
705
|
+
const telPath = path.join(telDir, 'telemetry.jsonl');
|
|
706
|
+
const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok, budget_ms, budget_exceeded };
|
|
688
707
|
if (extra && typeof extra === 'object') {
|
|
689
|
-
for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens']) {
|
|
708
|
+
for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens', 'search_ms', 'result_count']) {
|
|
690
709
|
if (typeof extra[key] === 'number') entry[key] = extra[key];
|
|
691
710
|
}
|
|
692
711
|
}
|
|
@@ -707,8 +726,14 @@ async function withTelemetry(hookName, fn) {
|
|
|
707
726
|
ok = false;
|
|
708
727
|
thrown = err;
|
|
709
728
|
}
|
|
729
|
+
const duration = Date.now() - start;
|
|
730
|
+
const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
|
|
731
|
+
const budgetExceeded = duration > budget;
|
|
732
|
+
if (budgetExceeded) {
|
|
733
|
+
process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
|
|
734
|
+
}
|
|
710
735
|
const extra = (result && typeof result === 'object') ? result : undefined;
|
|
711
|
-
_writeTelemetry({ hookName, duration_ms:
|
|
736
|
+
_writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
|
|
712
737
|
if (thrown) throw thrown;
|
|
713
738
|
return result;
|
|
714
739
|
}
|
|
@@ -724,8 +749,14 @@ function withTelemetrySync(hookName, fn) {
|
|
|
724
749
|
ok = false;
|
|
725
750
|
thrown = err;
|
|
726
751
|
}
|
|
752
|
+
const duration = Date.now() - start;
|
|
753
|
+
const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
|
|
754
|
+
const budgetExceeded = duration > budget;
|
|
755
|
+
if (budgetExceeded) {
|
|
756
|
+
process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
|
|
757
|
+
}
|
|
727
758
|
const extra = (result && typeof result === 'object') ? result : undefined;
|
|
728
|
-
_writeTelemetry({ hookName, duration_ms:
|
|
759
|
+
_writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
|
|
729
760
|
if (thrown) throw thrown;
|
|
730
761
|
return result;
|
|
731
762
|
}
|
|
@@ -741,7 +772,7 @@ function withTimeoutDb(db, sql, params = [], { timeoutMs = DB_BUSY_TIMEOUT_MS, m
|
|
|
741
772
|
return params.length > 0 ? stmt.all(...params) : stmt.all();
|
|
742
773
|
} catch (err) {
|
|
743
774
|
hookLog('timeout', 'warn', `DB query timeout/error: ${err.message}`);
|
|
744
|
-
_writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false });
|
|
775
|
+
_writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false, budget_ms: DEFAULT_BUDGET_MS, budget_exceeded: false });
|
|
745
776
|
return mode === 'get' ? undefined : [];
|
|
746
777
|
}
|
|
747
778
|
}
|
|
@@ -837,6 +868,8 @@ module.exports = {
|
|
|
837
868
|
// Telemetry (v0.6.0)
|
|
838
869
|
withTelemetry,
|
|
839
870
|
withTelemetrySync,
|
|
871
|
+
HOOK_LATENCY_BUDGETS,
|
|
872
|
+
DEFAULT_BUDGET_MS,
|
|
840
873
|
// DB timeout wrapper (v0.6.1)
|
|
841
874
|
withTimeoutDb,
|
|
842
875
|
// Raw file helpers (v0.6.3)
|
|
@@ -5,12 +5,15 @@
|
|
|
5
5
|
var fs = require("fs");
|
|
6
6
|
var path = require("path");
|
|
7
7
|
var { DB_NAME, sha256, openDatabase, getAllMdFiles, parseFrontmatter, extractFtsMetadata, insertFtsRow, readHookStdin, getActiveMindloreDir, getProjectName, resolveProject, hookLog, withTelemetry, SQL_FTS_SESSIONS_INSERT, isSessionCategory, isInsideMindloreDir } = require("./lib/mindlore-common.cjs");
|
|
8
|
+
function shouldIndexFile(filePath) {
|
|
9
|
+
return !!(filePath && filePath.endsWith(".md"));
|
|
10
|
+
}
|
|
8
11
|
function main() {
|
|
9
12
|
const filePath = readHookStdin(["path", "file_path"]);
|
|
10
13
|
if (!filePath) return;
|
|
14
|
+
if (!shouldIndexFile(filePath)) return;
|
|
11
15
|
const resolved = path.resolve(filePath);
|
|
12
16
|
if (!isInsideMindloreDir(resolved)) return;
|
|
13
|
-
if (filePath.endsWith(".md")) return;
|
|
14
17
|
const baseDir = getActiveMindloreDir();
|
|
15
18
|
if (!fs.existsSync(baseDir)) return;
|
|
16
19
|
const dbPath = path.join(baseDir, DB_NAME);
|
|
@@ -63,6 +66,7 @@ function main() {
|
|
|
63
66
|
db.close();
|
|
64
67
|
}
|
|
65
68
|
}
|
|
69
|
+
module.exports = { shouldIndexFile };
|
|
66
70
|
withTelemetry("mindlore-fts5-sync", main).catch((err) => {
|
|
67
71
|
hookLog("mindlore-fts5-sync", "error", err?.message ?? String(err));
|
|
68
72
|
process.exit(0);
|
|
@@ -34,11 +34,10 @@ var require_constants = __commonJS({
|
|
|
34
34
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
36
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
37
|
-
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
37
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
|
|
38
38
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
39
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
40
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
-
exports2.buildPriorityCase = buildPriorityCase;
|
|
42
41
|
exports2.homedir = homedir;
|
|
43
42
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
44
43
|
exports2.getAllDbs = getAllDbs2;
|
|
@@ -336,9 +335,7 @@ var require_constants = __commonJS({
|
|
|
336
335
|
};
|
|
337
336
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
337
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
338
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
339
|
exports2.TYPE_TO_DIR = {
|
|
343
340
|
raw: "raw",
|
|
344
341
|
source: "sources",
|
|
@@ -1103,7 +1100,7 @@ var require_search_cache = __commonJS({
|
|
|
1103
1100
|
// hooks/src/mindlore-search.cjs
|
|
1104
1101
|
var fs = require("fs");
|
|
1105
1102
|
var path = require("path");
|
|
1106
|
-
var { getAllDbs, openDatabase, extractHeadings,
|
|
1103
|
+
var { getAllDbs, openDatabase, extractHeadings, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
|
|
1107
1104
|
var MAX_RESULTS = 3;
|
|
1108
1105
|
var MIN_QUERY_WORDS = 3;
|
|
1109
1106
|
var searchEngineMod;
|
|
@@ -1116,9 +1113,22 @@ try {
|
|
|
1116
1113
|
SearchCacheMod = require_search_cache();
|
|
1117
1114
|
} catch (_err) {
|
|
1118
1115
|
}
|
|
1116
|
+
function parseStdin() {
|
|
1117
|
+
try {
|
|
1118
|
+
const raw = fs.readFileSync(0, "utf8").trim();
|
|
1119
|
+
if (!raw) return { userMessage: "", sessionId: "unknown" };
|
|
1120
|
+
const parsed = JSON.parse(raw);
|
|
1121
|
+
const userMessage = parsed.prompt || parsed.content || parsed.message || parsed.query || raw;
|
|
1122
|
+
const sessionId = parsed.session_id || "unknown";
|
|
1123
|
+
return { userMessage, sessionId };
|
|
1124
|
+
} catch (_err) {
|
|
1125
|
+
return { userMessage: "", sessionId: "unknown" };
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1119
1128
|
function main() {
|
|
1120
|
-
const userMessage =
|
|
1129
|
+
const { userMessage, sessionId } = parseStdin();
|
|
1121
1130
|
if (!userMessage || userMessage.length < MIN_QUERY_WORDS) return;
|
|
1131
|
+
let searchMs = 0;
|
|
1122
1132
|
const dbPaths = getAllDbs();
|
|
1123
1133
|
if (dbPaths.length === 0) return;
|
|
1124
1134
|
if (!searchEngineMod) {
|
|
@@ -1128,13 +1138,6 @@ function main() {
|
|
|
1128
1138
|
const project = path.basename(process.cwd());
|
|
1129
1139
|
const config = readConfig(path.dirname(dbPaths[0]));
|
|
1130
1140
|
const synonyms = config && config.synonyms ? config.synonyms : {};
|
|
1131
|
-
let sessionId;
|
|
1132
|
-
try {
|
|
1133
|
-
const stdinData = JSON.parse(process.env.CLAUDE_HOOK_STDIN || "{}");
|
|
1134
|
-
sessionId = stdinData.session_id || "unknown";
|
|
1135
|
-
} catch (_) {
|
|
1136
|
-
sessionId = "unknown";
|
|
1137
|
-
}
|
|
1138
1141
|
const allResults = [];
|
|
1139
1142
|
for (const dbPath of dbPaths) {
|
|
1140
1143
|
const db = openDatabase(dbPath);
|
|
@@ -1160,11 +1163,13 @@ function main() {
|
|
|
1160
1163
|
continue;
|
|
1161
1164
|
}
|
|
1162
1165
|
}
|
|
1166
|
+
const t0 = Date.now();
|
|
1163
1167
|
const results = searchEngineMod.search(db, userMessage, {
|
|
1164
1168
|
project,
|
|
1165
1169
|
maxResults: effectiveMax,
|
|
1166
1170
|
synonyms
|
|
1167
1171
|
});
|
|
1172
|
+
searchMs += Date.now() - t0;
|
|
1168
1173
|
if (cache) cache.set(userMessage, results);
|
|
1169
1174
|
const baseDir = path.dirname(dbPath);
|
|
1170
1175
|
for (const r of results) {
|
|
@@ -1256,6 +1261,7 @@ Summary: ${summary}...
|
|
|
1256
1261
|
}
|
|
1257
1262
|
process.stdout.write(outputStr);
|
|
1258
1263
|
}
|
|
1264
|
+
return { search_ms: searchMs, result_count: relevant.length };
|
|
1259
1265
|
}
|
|
1260
1266
|
withTelemetry("mindlore-search", main).catch((err) => {
|
|
1261
1267
|
hookLog("mindlore-search", "error", err?.message ?? String(err));
|