mindlore 0.7.3 → 0.7.5
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 +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +18 -0
- package/dist/scripts/bundle-hooks.js +3 -4
- package/dist/scripts/bundle-hooks.js.map +1 -1
- package/dist/scripts/init.js +74 -20
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +21 -1
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +33 -7
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/db-helpers.d.ts +1 -0
- package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
- package/dist/scripts/lib/db-helpers.js +37 -0
- package/dist/scripts/lib/db-helpers.js.map +1 -1
- package/dist/scripts/lib/detect-plugin.js +1 -1
- package/dist/scripts/lib/detect-plugin.js.map +1 -1
- package/dist/scripts/lib/episodes.d.ts +1 -1
- package/dist/scripts/lib/episodes.d.ts.map +1 -1
- package/dist/scripts/lib/episodes.js +1 -1
- package/dist/scripts/lib/episodes.js.map +1 -1
- 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 +7 -21
- package/dist/scripts/lib/session-payload.js.map +1 -1
- package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -1
- package/dist/scripts/lib/settings-cleanup.js +2 -2
- package/dist/scripts/lib/settings-cleanup.js.map +1 -1
- package/dist/scripts/lib/skill-runner.d.ts +3 -0
- package/dist/scripts/lib/skill-runner.d.ts.map +1 -0
- package/dist/scripts/lib/skill-runner.js +78 -0
- package/dist/scripts/lib/skill-runner.js.map +1 -0
- package/dist/scripts/lib/telemetry-scan.d.ts +19 -0
- package/dist/scripts/lib/telemetry-scan.d.ts.map +1 -0
- package/dist/scripts/lib/telemetry-scan.js +42 -0
- package/dist/scripts/lib/telemetry-scan.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/mindlore-clean-cache.d.ts +3 -0
- package/dist/scripts/mindlore-clean-cache.d.ts.map +1 -0
- package/dist/scripts/mindlore-clean-cache.js +65 -0
- package/dist/scripts/mindlore-clean-cache.js.map +1 -0
- package/dist/scripts/mindlore-doctor.d.ts +3 -0
- package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
- package/dist/scripts/mindlore-doctor.js +84 -15
- 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/reflect-failure-scan.d.ts +3 -0
- package/dist/scripts/reflect-failure-scan.d.ts.map +1 -0
- package/dist/scripts/reflect-failure-scan.js +41 -0
- package/dist/scripts/reflect-failure-scan.js.map +1 -0
- package/dist/tests/clean-cache.test.d.ts +2 -0
- package/dist/tests/clean-cache.test.d.ts.map +1 -0
- package/dist/tests/clean-cache.test.js +59 -0
- package/dist/tests/clean-cache.test.js.map +1 -0
- package/dist/tests/db-helpers-vec.test.d.ts +2 -0
- package/dist/tests/db-helpers-vec.test.d.ts.map +1 -0
- package/dist/tests/db-helpers-vec.test.js +32 -0
- package/dist/tests/db-helpers-vec.test.js.map +1 -0
- package/dist/tests/db-helpers.test.d.ts +2 -0
- package/dist/tests/db-helpers.test.d.ts.map +1 -0
- package/dist/tests/db-helpers.test.js +30 -0
- package/dist/tests/db-helpers.test.js.map +1 -0
- package/dist/tests/diary.test.js +3 -3
- package/dist/tests/diary.test.js.map +1 -1
- package/dist/tests/doctor.test.js +39 -0
- 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/episodes-inject.test.js +5 -5
- package/dist/tests/episodes-inject.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/init-spawn-cleanup.test.d.ts +2 -0
- package/dist/tests/init-spawn-cleanup.test.d.ts.map +1 -0
- package/dist/tests/init-spawn-cleanup.test.js +21 -0
- package/dist/tests/init-spawn-cleanup.test.js.map +1 -0
- package/dist/tests/install-matrix.test.js +39 -0
- package/dist/tests/install-matrix.test.js.map +1 -1
- 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/learnings-loader.test.d.ts +2 -0
- package/dist/tests/learnings-loader.test.d.ts.map +1 -0
- package/dist/tests/learnings-loader.test.js +64 -0
- package/dist/tests/learnings-loader.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/mindlore-home-env.test.d.ts +2 -0
- package/dist/tests/mindlore-home-env.test.d.ts.map +1 -0
- package/dist/tests/mindlore-home-env.test.js +33 -0
- package/dist/tests/mindlore-home-env.test.js.map +1 -0
- package/dist/tests/no-hardcoded-cache.test.d.ts +2 -0
- package/dist/tests/no-hardcoded-cache.test.d.ts.map +1 -0
- package/dist/tests/no-hardcoded-cache.test.js +40 -0
- package/dist/tests/no-hardcoded-cache.test.js.map +1 -0
- package/dist/tests/nomination.test.js +1 -1
- package/dist/tests/nomination.test.js.map +1 -1
- package/dist/tests/reflect-failure-scan.test.d.ts +2 -0
- package/dist/tests/reflect-failure-scan.test.d.ts.map +1 -0
- package/dist/tests/reflect-failure-scan.test.js +49 -0
- package/dist/tests/reflect-failure-scan.test.js.map +1 -0
- package/dist/tests/reflect-trigger.test.d.ts +2 -0
- package/dist/tests/reflect-trigger.test.d.ts.map +1 -0
- package/dist/tests/reflect-trigger.test.js +31 -0
- package/dist/tests/reflect-trigger.test.js.map +1 -0
- package/dist/tests/session-focus-episode-counter.test.d.ts +2 -0
- package/dist/tests/session-focus-episode-counter.test.d.ts.map +1 -0
- package/dist/tests/session-focus-episode-counter.test.js +41 -0
- package/dist/tests/session-focus-episode-counter.test.js.map +1 -0
- package/dist/tests/session-focus-learnings-inject.test.d.ts +2 -0
- package/dist/tests/session-focus-learnings-inject.test.d.ts.map +1 -0
- package/dist/tests/session-focus-learnings-inject.test.js +29 -0
- package/dist/tests/session-focus-learnings-inject.test.js.map +1 -0
- package/dist/tests/session-focus-nomination-inject.test.d.ts +2 -0
- package/dist/tests/session-focus-nomination-inject.test.d.ts.map +1 -0
- package/dist/tests/session-focus-nomination-inject.test.js +50 -0
- package/dist/tests/session-focus-nomination-inject.test.js.map +1 -0
- package/dist/tests/session-focus-reflect-nudge.test.d.ts +2 -0
- package/dist/tests/session-focus-reflect-nudge.test.d.ts.map +1 -0
- package/dist/tests/session-focus-reflect-nudge.test.js +62 -0
- package/dist/tests/session-focus-reflect-nudge.test.js.map +1 -0
- package/dist/tests/session-payload.test.js +19 -17
- package/dist/tests/session-payload.test.js.map +1 -1
- package/dist/tests/skill-md-uses-runner.test.d.ts +2 -0
- package/dist/tests/skill-md-uses-runner.test.d.ts.map +1 -0
- package/dist/tests/skill-md-uses-runner.test.js +31 -0
- package/dist/tests/skill-md-uses-runner.test.js.map +1 -0
- package/dist/tests/skill-runner-failure-e2e.test.d.ts +10 -0
- package/dist/tests/skill-runner-failure-e2e.test.d.ts.map +1 -0
- package/dist/tests/skill-runner-failure-e2e.test.js +64 -0
- package/dist/tests/skill-runner-failure-e2e.test.js.map +1 -0
- package/dist/tests/skill-runner.test.d.ts +2 -0
- package/dist/tests/skill-runner.test.d.ts.map +1 -0
- package/dist/tests/skill-runner.test.js +55 -0
- package/dist/tests/skill-runner.test.js.map +1 -0
- package/dist/tests/sync-scripts.test.d.ts +2 -0
- package/dist/tests/sync-scripts.test.d.ts.map +1 -0
- package/dist/tests/sync-scripts.test.js +26 -0
- package/dist/tests/sync-scripts.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/telemetry-scan.test.d.ts +2 -0
- package/dist/tests/telemetry-scan.test.d.ts.map +1 -0
- package/dist/tests/telemetry-scan.test.js +32 -0
- package/dist/tests/telemetry-scan.test.js.map +1 -0
- package/hooks/cc-memory-bulk-sync.cjs +20 -5
- package/hooks/cc-session-sync.cjs +20 -5
- package/hooks/lib/constants.cjs +1 -1
- package/hooks/lib/learnings-loader.cjs +70 -0
- package/hooks/lib/mindlore-common.cjs +46 -8
- package/hooks/lib/reflect-trigger.cjs +29 -0
- package/hooks/lib/sync-scripts.cjs +12 -0
- package/hooks/mindlore-fts5-sync.cjs +5 -1
- package/hooks/mindlore-search.cjs +116 -14
- package/hooks/mindlore-session-focus.cjs +81 -27
- package/hooks/src/lib/mindlore-common.cjs +5 -0
- package/hooks/src/mindlore-fts5-sync.cjs +7 -4
- package/hooks/src/mindlore-search.cjs +19 -11
- package/hooks/src/mindlore-session-focus.cjs +48 -6
- package/package.json +5 -3
- package/plugin.json +1 -1
- package/skills/mindlore-decide/SKILL.md +1 -1
- package/skills/mindlore-diary/SKILL.md +4 -4
- package/skills/mindlore-evolve/SKILL.md +2 -2
- package/skills/mindlore-health/SKILL.md +2 -2
- package/skills/mindlore-ingest/SKILL.md +7 -7
- package/skills/mindlore-log/SKILL.md +1 -1
- package/skills/mindlore-maintain/SKILL.md +2 -2
- package/skills/mindlore-query/SKILL.md +1 -1
- package/skills/mindlore-reflect/SKILL.md +30 -16
- package/templates/config.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-scan.test.js","sourceRoot":"","sources":["../../tests/telemetry-scan.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,15 +34,17 @@ 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.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = 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.CC_PLUGIN_CACHE_DIR = 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;
|
|
45
44
|
exports2.getProjectName = getProjectName;
|
|
45
|
+
exports2.resolveProject = resolveProject;
|
|
46
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
47
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
46
48
|
exports2.log = log;
|
|
47
49
|
exports2.isContentFile = isContentFile;
|
|
48
50
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -336,9 +338,7 @@ var require_constants = __commonJS({
|
|
|
336
338
|
};
|
|
337
339
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
340
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
341
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
342
|
exports2.TYPE_TO_DIR = {
|
|
343
343
|
raw: "raw",
|
|
344
344
|
source: "sources",
|
|
@@ -355,6 +355,7 @@ var require_constants = __commonJS({
|
|
|
355
355
|
reference: "memory",
|
|
356
356
|
note: "memory"
|
|
357
357
|
};
|
|
358
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
|
|
358
359
|
exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
|
|
359
360
|
exports2.CC_MEMORY_DIR = "memory";
|
|
360
361
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -376,6 +377,20 @@ var require_constants = __commonJS({
|
|
|
376
377
|
function getProjectName() {
|
|
377
378
|
return path_12.default.basename(process.cwd());
|
|
378
379
|
}
|
|
380
|
+
function resolveProject() {
|
|
381
|
+
if (process.env.MINDLORE_PROJECT)
|
|
382
|
+
return process.env.MINDLORE_PROJECT;
|
|
383
|
+
return getProjectName().toLowerCase();
|
|
384
|
+
}
|
|
385
|
+
function resolveMindloreHome() {
|
|
386
|
+
return process.env.MINDLORE_HOME ?? path_12.default.join(os_12.default.homedir(), exports2.MINDLORE_DIR);
|
|
387
|
+
}
|
|
388
|
+
exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
|
|
389
|
+
exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
|
|
390
|
+
exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
|
|
391
|
+
function resolveTelemetryPath() {
|
|
392
|
+
return process.env.MINDLORE_TELEMETRY_PATH ?? path_12.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
|
|
393
|
+
}
|
|
379
394
|
function log(msg) {
|
|
380
395
|
console.log(` ${msg}`);
|
|
381
396
|
}
|
|
@@ -34,15 +34,17 @@ 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.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = 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.CC_PLUGIN_CACHE_DIR = 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;
|
|
45
44
|
exports2.getProjectName = getProjectName;
|
|
45
|
+
exports2.resolveProject = resolveProject;
|
|
46
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
47
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
46
48
|
exports2.log = log;
|
|
47
49
|
exports2.isContentFile = isContentFile;
|
|
48
50
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -336,9 +338,7 @@ var require_constants = __commonJS({
|
|
|
336
338
|
};
|
|
337
339
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
340
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
341
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
342
|
exports2.TYPE_TO_DIR = {
|
|
343
343
|
raw: "raw",
|
|
344
344
|
source: "sources",
|
|
@@ -355,6 +355,7 @@ var require_constants = __commonJS({
|
|
|
355
355
|
reference: "memory",
|
|
356
356
|
note: "memory"
|
|
357
357
|
};
|
|
358
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
|
|
358
359
|
exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
|
|
359
360
|
exports2.CC_MEMORY_DIR = "memory";
|
|
360
361
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -376,6 +377,20 @@ var require_constants = __commonJS({
|
|
|
376
377
|
function getProjectName() {
|
|
377
378
|
return path_12.default.basename(process.cwd());
|
|
378
379
|
}
|
|
380
|
+
function resolveProject() {
|
|
381
|
+
if (process.env.MINDLORE_PROJECT)
|
|
382
|
+
return process.env.MINDLORE_PROJECT;
|
|
383
|
+
return getProjectName().toLowerCase();
|
|
384
|
+
}
|
|
385
|
+
function resolveMindloreHome() {
|
|
386
|
+
return process.env.MINDLORE_HOME ?? path_12.default.join(os_12.default.homedir(), exports2.MINDLORE_DIR);
|
|
387
|
+
}
|
|
388
|
+
exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
|
|
389
|
+
exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
|
|
390
|
+
exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
|
|
391
|
+
function resolveTelemetryPath() {
|
|
392
|
+
return process.env.MINDLORE_TELEMETRY_PATH ?? path_12.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
|
|
393
|
+
}
|
|
379
394
|
function log(msg) {
|
|
380
395
|
console.log(` ${msg}`);
|
|
381
396
|
}
|
package/hooks/lib/constants.cjs
CHANGED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const { parseFrontmatter, hookLog } = require('./mindlore-common.cjs');
|
|
4
|
+
|
|
5
|
+
const MAX_LESSONS = 10;
|
|
6
|
+
const MAX_LINES_PER_LESSON = 5;
|
|
7
|
+
const TOTAL_CHAR_BUDGET = 6000;
|
|
8
|
+
|
|
9
|
+
function summarizeLesson(body, relPath) {
|
|
10
|
+
const lines = body.split('\n');
|
|
11
|
+
const h2Idx = lines.findIndex(l => l.startsWith('## '));
|
|
12
|
+
const start = h2Idx >= 0 ? h2Idx : 0;
|
|
13
|
+
const slice = lines.slice(start, start + MAX_LINES_PER_LESSON).join('\n');
|
|
14
|
+
const rest = lines.slice(start + MAX_LINES_PER_LESSON).length > 0
|
|
15
|
+
? `\n… (full: ${relPath})`
|
|
16
|
+
: '';
|
|
17
|
+
return slice + rest;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function loadLearningsBlock(mindloreDir, currentProject) {
|
|
21
|
+
const learningsDir = path.join(mindloreDir, 'learnings');
|
|
22
|
+
if (!fs.existsSync(learningsDir)) return '';
|
|
23
|
+
const files = fs.readdirSync(learningsDir).filter(f => f.endsWith('.md'));
|
|
24
|
+
if (files.length === 0) return '';
|
|
25
|
+
|
|
26
|
+
const stats = [];
|
|
27
|
+
for (const f of files) {
|
|
28
|
+
const abs = path.join(learningsDir, f);
|
|
29
|
+
try {
|
|
30
|
+
const stat = fs.statSync(abs);
|
|
31
|
+
stats.push({ file: f, abs, mtime: stat.mtimeMs });
|
|
32
|
+
} catch (err) {
|
|
33
|
+
hookLog('learnings-loader', 'warn', `stat skipped ${f}: ${err.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
stats.sort((a, b) => b.mtime - a.mtime);
|
|
37
|
+
|
|
38
|
+
const candidates = [];
|
|
39
|
+
for (const s of stats) {
|
|
40
|
+
if (candidates.length >= MAX_LESSONS) break;
|
|
41
|
+
let raw;
|
|
42
|
+
try { raw = fs.readFileSync(s.abs, 'utf8'); } catch (err) {
|
|
43
|
+
hookLog('learnings-loader', 'warn', `read skipped ${s.file}: ${err.message}`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const { meta, body } = parseFrontmatter(raw);
|
|
47
|
+
const project = meta.project || 'global';
|
|
48
|
+
if (project !== 'global' && project !== currentProject) continue;
|
|
49
|
+
candidates.push({
|
|
50
|
+
relPath: `.mindlore/learnings/${s.file}`,
|
|
51
|
+
body,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (candidates.length === 0) return '';
|
|
56
|
+
|
|
57
|
+
let block = '[Mindlore Learnings]\n';
|
|
58
|
+
let used = block.length;
|
|
59
|
+
let count = 0;
|
|
60
|
+
for (const c of candidates) {
|
|
61
|
+
const piece = summarizeLesson(c.body, c.relPath) + '\n\n';
|
|
62
|
+
if (used + piece.length > TOTAL_CHAR_BUDGET && count > 0) break;
|
|
63
|
+
block += piece;
|
|
64
|
+
used += piece.length;
|
|
65
|
+
count++;
|
|
66
|
+
}
|
|
67
|
+
return block.trimEnd();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports = { loadLearningsBlock };
|
|
@@ -26,6 +26,10 @@ function globalDir() {
|
|
|
26
26
|
return path.join(os.homedir(), MINDLORE_DIR);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
function resolveMindloreHome() {
|
|
30
|
+
return globalDir();
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
// Convenience export — snapshot at load time for simple references.
|
|
30
34
|
const GLOBAL_MINDLORE_DIR = globalDir();
|
|
31
35
|
|
|
@@ -663,6 +667,24 @@ const extractSkeleton = (() => {
|
|
|
663
667
|
|
|
664
668
|
const TELEMETRY_KEEP_LINES = 200;
|
|
665
669
|
|
|
670
|
+
const HOOK_LATENCY_BUDGETS = {
|
|
671
|
+
'mindlore-session-focus': 100,
|
|
672
|
+
'mindlore-session-end': 100,
|
|
673
|
+
'mindlore-pre-compact': 100,
|
|
674
|
+
'mindlore-post-compact': 100,
|
|
675
|
+
'mindlore-search': 50,
|
|
676
|
+
'mindlore-decision-detector': 50,
|
|
677
|
+
'mindlore-index': 50,
|
|
678
|
+
'mindlore-fts5-sync': 50,
|
|
679
|
+
'mindlore-cwd-changed': 50,
|
|
680
|
+
'mindlore-read-guard': 30,
|
|
681
|
+
'mindlore-post-read': 30,
|
|
682
|
+
'mindlore-dont-repeat': 30,
|
|
683
|
+
'mindlore-model-router': 30,
|
|
684
|
+
'mindlore-research-guard': 30,
|
|
685
|
+
};
|
|
686
|
+
const DEFAULT_BUDGET_MS = 50;
|
|
687
|
+
|
|
666
688
|
function _rotateFile(filePath, maxBytes, keepLines) {
|
|
667
689
|
try {
|
|
668
690
|
const stat = fs.statSync(filePath);
|
|
@@ -677,16 +699,17 @@ function _rotateFile(filePath, maxBytes, keepLines) {
|
|
|
677
699
|
|
|
678
700
|
let _telDirEnsured = false;
|
|
679
701
|
|
|
680
|
-
function _writeTelemetry({ hookName, duration_ms, ok, extra }) {
|
|
702
|
+
function _writeTelemetry({ hookName, duration_ms, ok, budget_ms, budget_exceeded, extra }) {
|
|
681
703
|
try {
|
|
704
|
+
const telDir = globalDir();
|
|
682
705
|
if (!_telDirEnsured) {
|
|
683
|
-
safeMkdir(
|
|
706
|
+
safeMkdir(telDir);
|
|
684
707
|
_telDirEnsured = true;
|
|
685
708
|
}
|
|
686
|
-
const telPath = path.join(
|
|
687
|
-
const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok };
|
|
709
|
+
const telPath = path.join(telDir, 'telemetry.jsonl');
|
|
710
|
+
const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok, budget_ms, budget_exceeded };
|
|
688
711
|
if (extra && typeof extra === 'object') {
|
|
689
|
-
for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens']) {
|
|
712
|
+
for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens', 'search_ms', 'result_count']) {
|
|
690
713
|
if (typeof extra[key] === 'number') entry[key] = extra[key];
|
|
691
714
|
}
|
|
692
715
|
}
|
|
@@ -707,8 +730,14 @@ async function withTelemetry(hookName, fn) {
|
|
|
707
730
|
ok = false;
|
|
708
731
|
thrown = err;
|
|
709
732
|
}
|
|
733
|
+
const duration = Date.now() - start;
|
|
734
|
+
const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
|
|
735
|
+
const budgetExceeded = duration > budget;
|
|
736
|
+
if (budgetExceeded) {
|
|
737
|
+
process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
|
|
738
|
+
}
|
|
710
739
|
const extra = (result && typeof result === 'object') ? result : undefined;
|
|
711
|
-
_writeTelemetry({ hookName, duration_ms:
|
|
740
|
+
_writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
|
|
712
741
|
if (thrown) throw thrown;
|
|
713
742
|
return result;
|
|
714
743
|
}
|
|
@@ -724,8 +753,14 @@ function withTelemetrySync(hookName, fn) {
|
|
|
724
753
|
ok = false;
|
|
725
754
|
thrown = err;
|
|
726
755
|
}
|
|
756
|
+
const duration = Date.now() - start;
|
|
757
|
+
const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
|
|
758
|
+
const budgetExceeded = duration > budget;
|
|
759
|
+
if (budgetExceeded) {
|
|
760
|
+
process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
|
|
761
|
+
}
|
|
727
762
|
const extra = (result && typeof result === 'object') ? result : undefined;
|
|
728
|
-
_writeTelemetry({ hookName, duration_ms:
|
|
763
|
+
_writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
|
|
729
764
|
if (thrown) throw thrown;
|
|
730
765
|
return result;
|
|
731
766
|
}
|
|
@@ -741,7 +776,7 @@ function withTimeoutDb(db, sql, params = [], { timeoutMs = DB_BUSY_TIMEOUT_MS, m
|
|
|
741
776
|
return params.length > 0 ? stmt.all(...params) : stmt.all();
|
|
742
777
|
} catch (err) {
|
|
743
778
|
hookLog('timeout', 'warn', `DB query timeout/error: ${err.message}`);
|
|
744
|
-
_writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false });
|
|
779
|
+
_writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false, budget_ms: DEFAULT_BUDGET_MS, budget_exceeded: false });
|
|
745
780
|
return mode === 'get' ? undefined : [];
|
|
746
781
|
}
|
|
747
782
|
}
|
|
@@ -773,6 +808,7 @@ module.exports = {
|
|
|
773
808
|
MINDLORE_DIR,
|
|
774
809
|
GLOBAL_MINDLORE_DIR,
|
|
775
810
|
globalDir,
|
|
811
|
+
resolveMindloreHome,
|
|
776
812
|
DB_NAME,
|
|
777
813
|
SKIP_FILES,
|
|
778
814
|
findMindloreDir,
|
|
@@ -837,6 +873,8 @@ module.exports = {
|
|
|
837
873
|
// Telemetry (v0.6.0)
|
|
838
874
|
withTelemetry,
|
|
839
875
|
withTelemetrySync,
|
|
876
|
+
HOOK_LATENCY_BUDGETS,
|
|
877
|
+
DEFAULT_BUDGET_MS,
|
|
840
878
|
// DB timeout wrapper (v0.6.1)
|
|
841
879
|
withTimeoutDb,
|
|
842
880
|
// Raw file helpers (v0.6.3)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const REFLECT_THRESHOLD_DAYS = 7;
|
|
2
|
+
const NUDGE_COOLDOWN_HOURS = 24;
|
|
3
|
+
|
|
4
|
+
function isValidDate(iso) {
|
|
5
|
+
if (!iso) return false;
|
|
6
|
+
const d = new Date(iso);
|
|
7
|
+
return !isNaN(d.getTime());
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function shouldNudgeReflect(lastReflectIso, lastNudgeIso, now = new Date()) {
|
|
11
|
+
let needsReflect;
|
|
12
|
+
if (!lastReflectIso) {
|
|
13
|
+
needsReflect = true;
|
|
14
|
+
} else if (!isValidDate(lastReflectIso)) {
|
|
15
|
+
return false;
|
|
16
|
+
} else {
|
|
17
|
+
const daysSince = (now.getTime() - new Date(lastReflectIso).getTime()) / 86400000;
|
|
18
|
+
needsReflect = daysSince >= REFLECT_THRESHOLD_DAYS;
|
|
19
|
+
}
|
|
20
|
+
if (!needsReflect) return false;
|
|
21
|
+
|
|
22
|
+
if (lastNudgeIso && isValidDate(lastNudgeIso)) {
|
|
23
|
+
const hoursSinceNudge = (now.getTime() - new Date(lastNudgeIso).getTime()) / 3600000;
|
|
24
|
+
if (hoursSinceNudge < NUDGE_COOLDOWN_HOURS) return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = { shouldNudgeReflect, REFLECT_THRESHOLD_DAYS, NUDGE_COOLDOWN_HOURS };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
function getSyncScripts(hooksDir) {
|
|
5
|
+
if (!fs.existsSync(hooksDir)) return [];
|
|
6
|
+
return fs.readdirSync(hooksDir)
|
|
7
|
+
.filter(f => f.startsWith('mindlore-') && f.endsWith('.cjs'))
|
|
8
|
+
.map(f => path.join(hooksDir, f))
|
|
9
|
+
.sort();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
module.exports = { getSyncScripts };
|
|
@@ -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);
|
|
@@ -26,6 +26,43 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
|
|
29
|
+
// node_modules/sqlite-vec/index.cjs
|
|
30
|
+
var require_sqlite_vec = __commonJS({
|
|
31
|
+
"node_modules/sqlite-vec/index.cjs"(exports2, module2) {
|
|
32
|
+
var { arch, platform } = require("node:process");
|
|
33
|
+
var BASE_PACKAGE_NAME = "sqlite-vec";
|
|
34
|
+
var ENTRYPOINT_BASE_NAME = "vec0";
|
|
35
|
+
var supportedPlatforms = [["darwin", "x64"], ["linux", "x64"], ["darwin", "arm64"], ["win32", "x64"], ["linux", "arm64"]];
|
|
36
|
+
var invalidPlatformErrorMessage = `Unsupported platform for ${BASE_PACKAGE_NAME}, on a ${platform}-${arch} machine. Supported platforms are (${supportedPlatforms.map(([p, a]) => `${p}-${a}`).join(",")}). Consult the ${BASE_PACKAGE_NAME} NPM package README for details.`;
|
|
37
|
+
function validPlatform(platform2, arch2) {
|
|
38
|
+
return supportedPlatforms.find(([p, a]) => platform2 === p && arch2 === a) !== void 0;
|
|
39
|
+
}
|
|
40
|
+
function extensionSuffix(platform2) {
|
|
41
|
+
if (platform2 === "win32") return "dll";
|
|
42
|
+
if (platform2 === "darwin") return "dylib";
|
|
43
|
+
return "so";
|
|
44
|
+
}
|
|
45
|
+
function platformPackageName(platform2, arch2) {
|
|
46
|
+
const os = platform2 === "win32" ? "windows" : platform2;
|
|
47
|
+
return `${BASE_PACKAGE_NAME}-${os}-${arch2}`;
|
|
48
|
+
}
|
|
49
|
+
function getLoadablePath() {
|
|
50
|
+
if (!validPlatform(platform, arch)) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
invalidPlatformErrorMessage
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
const packageName = platformPackageName(platform, arch);
|
|
56
|
+
const loadablePath = require.resolve(packageName + "/" + ENTRYPOINT_BASE_NAME + "." + extensionSuffix(platform));
|
|
57
|
+
return loadablePath;
|
|
58
|
+
}
|
|
59
|
+
function load(db) {
|
|
60
|
+
db.loadExtension(getLoadablePath());
|
|
61
|
+
}
|
|
62
|
+
module2.exports = { getLoadablePath, load };
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
29
66
|
// dist/scripts/lib/constants.js
|
|
30
67
|
var require_constants = __commonJS({
|
|
31
68
|
"dist/scripts/lib/constants.js"(exports2) {
|
|
@@ -34,15 +71,17 @@ var require_constants = __commonJS({
|
|
|
34
71
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
35
72
|
};
|
|
36
73
|
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;
|
|
74
|
+
exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = 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.CC_PLUGIN_CACHE_DIR = 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
75
|
exports2.isKnownHookEvent = isKnownHookEvent;
|
|
39
76
|
exports2.isSessionCategory = isSessionCategory;
|
|
40
77
|
exports2.fixVersionTokens = fixVersionTokens;
|
|
41
|
-
exports2.buildPriorityCase = buildPriorityCase;
|
|
42
78
|
exports2.homedir = homedir;
|
|
43
79
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
44
80
|
exports2.getAllDbs = getAllDbs2;
|
|
45
81
|
exports2.getProjectName = getProjectName;
|
|
82
|
+
exports2.resolveProject = resolveProject;
|
|
83
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
84
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
46
85
|
exports2.log = log;
|
|
47
86
|
exports2.isContentFile = isContentFile;
|
|
48
87
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -336,9 +375,7 @@ var require_constants = __commonJS({
|
|
|
336
375
|
};
|
|
337
376
|
exports2.MAX_RELATED_SOURCES = 5;
|
|
338
377
|
exports2.RELATED_OVERFETCH = 10;
|
|
339
|
-
|
|
340
|
-
return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
|
|
341
|
-
}
|
|
378
|
+
exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
|
|
342
379
|
exports2.TYPE_TO_DIR = {
|
|
343
380
|
raw: "raw",
|
|
344
381
|
source: "sources",
|
|
@@ -355,6 +392,7 @@ var require_constants = __commonJS({
|
|
|
355
392
|
reference: "memory",
|
|
356
393
|
note: "memory"
|
|
357
394
|
};
|
|
395
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_1.default.join(os_1.default.homedir(), ".claude", "plugins", "cache");
|
|
358
396
|
exports2.CC_MEMORY_PATH_MARKER = path_1.default.join(".claude", "projects");
|
|
359
397
|
exports2.CC_MEMORY_DIR = "memory";
|
|
360
398
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -376,6 +414,20 @@ var require_constants = __commonJS({
|
|
|
376
414
|
function getProjectName() {
|
|
377
415
|
return path_1.default.basename(process.cwd());
|
|
378
416
|
}
|
|
417
|
+
function resolveProject() {
|
|
418
|
+
if (process.env.MINDLORE_PROJECT)
|
|
419
|
+
return process.env.MINDLORE_PROJECT;
|
|
420
|
+
return getProjectName().toLowerCase();
|
|
421
|
+
}
|
|
422
|
+
function resolveMindloreHome() {
|
|
423
|
+
return process.env.MINDLORE_HOME ?? path_1.default.join(os_1.default.homedir(), exports2.MINDLORE_DIR);
|
|
424
|
+
}
|
|
425
|
+
exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
|
|
426
|
+
exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
|
|
427
|
+
exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
|
|
428
|
+
function resolveTelemetryPath() {
|
|
429
|
+
return process.env.MINDLORE_TELEMETRY_PATH ?? path_1.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
|
|
430
|
+
}
|
|
379
431
|
function log(msg) {
|
|
380
432
|
console.log(` ${msg}`);
|
|
381
433
|
}
|
|
@@ -418,6 +470,43 @@ var require_constants = __commonJS({
|
|
|
418
470
|
var require_db_helpers = __commonJS({
|
|
419
471
|
"dist/scripts/lib/db-helpers.js"(exports2) {
|
|
420
472
|
"use strict";
|
|
473
|
+
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
474
|
+
if (k2 === void 0) k2 = k;
|
|
475
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
476
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
477
|
+
desc = { enumerable: true, get: function() {
|
|
478
|
+
return m[k];
|
|
479
|
+
} };
|
|
480
|
+
}
|
|
481
|
+
Object.defineProperty(o, k2, desc);
|
|
482
|
+
}) : (function(o, m, k, k2) {
|
|
483
|
+
if (k2 === void 0) k2 = k;
|
|
484
|
+
o[k2] = m[k];
|
|
485
|
+
}));
|
|
486
|
+
var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
|
|
487
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
488
|
+
}) : function(o, v) {
|
|
489
|
+
o["default"] = v;
|
|
490
|
+
});
|
|
491
|
+
var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
|
|
492
|
+
var ownKeys = function(o) {
|
|
493
|
+
ownKeys = Object.getOwnPropertyNames || function(o2) {
|
|
494
|
+
var ar = [];
|
|
495
|
+
for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
|
|
496
|
+
return ar;
|
|
497
|
+
};
|
|
498
|
+
return ownKeys(o);
|
|
499
|
+
};
|
|
500
|
+
return function(mod) {
|
|
501
|
+
if (mod && mod.__esModule) return mod;
|
|
502
|
+
var result = {};
|
|
503
|
+
if (mod != null) {
|
|
504
|
+
for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
505
|
+
}
|
|
506
|
+
__setModuleDefault(result, mod);
|
|
507
|
+
return result;
|
|
508
|
+
};
|
|
509
|
+
})();
|
|
421
510
|
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
422
511
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
423
512
|
};
|
|
@@ -429,6 +518,7 @@ var require_db_helpers = __commonJS({
|
|
|
429
518
|
exports2.openDatabaseTs = openDatabaseTs;
|
|
430
519
|
var better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
431
520
|
var fs_1 = __importDefault(require("fs"));
|
|
521
|
+
var vec = __importStar(require_sqlite_vec());
|
|
432
522
|
var constants_js_1 = require_constants();
|
|
433
523
|
function dbGet(db, sql, ...params) {
|
|
434
524
|
const result = db.prepare(sql).get(...params);
|
|
@@ -468,6 +558,9 @@ var require_db_helpers = __commonJS({
|
|
|
468
558
|
db.pragma("journal_mode = WAL");
|
|
469
559
|
db.pragma(`busy_timeout = ${constants_js_1.DB_BUSY_TIMEOUT_MS}`);
|
|
470
560
|
}
|
|
561
|
+
if (options?.loadVec) {
|
|
562
|
+
vec.load(db);
|
|
563
|
+
}
|
|
471
564
|
return db;
|
|
472
565
|
} catch {
|
|
473
566
|
return null;
|
|
@@ -1103,7 +1196,7 @@ var require_search_cache = __commonJS({
|
|
|
1103
1196
|
// hooks/src/mindlore-search.cjs
|
|
1104
1197
|
var fs = require("fs");
|
|
1105
1198
|
var path = require("path");
|
|
1106
|
-
var { getAllDbs, openDatabase, extractHeadings,
|
|
1199
|
+
var { getAllDbs, openDatabase, extractHeadings, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
|
|
1107
1200
|
var MAX_RESULTS = 3;
|
|
1108
1201
|
var MIN_QUERY_WORDS = 3;
|
|
1109
1202
|
var searchEngineMod;
|
|
@@ -1116,9 +1209,22 @@ try {
|
|
|
1116
1209
|
SearchCacheMod = require_search_cache();
|
|
1117
1210
|
} catch (_err) {
|
|
1118
1211
|
}
|
|
1212
|
+
function parseStdin() {
|
|
1213
|
+
try {
|
|
1214
|
+
const raw = fs.readFileSync(0, "utf8").trim();
|
|
1215
|
+
if (!raw) return { userMessage: "", sessionId: "unknown" };
|
|
1216
|
+
const parsed = JSON.parse(raw);
|
|
1217
|
+
const userMessage = parsed.prompt || parsed.content || parsed.message || parsed.query || raw;
|
|
1218
|
+
const sessionId = parsed.session_id || "unknown";
|
|
1219
|
+
return { userMessage, sessionId };
|
|
1220
|
+
} catch (_err) {
|
|
1221
|
+
return { userMessage: "", sessionId: "unknown" };
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1119
1224
|
function main() {
|
|
1120
|
-
const userMessage =
|
|
1225
|
+
const { userMessage, sessionId } = parseStdin();
|
|
1121
1226
|
if (!userMessage || userMessage.length < MIN_QUERY_WORDS) return;
|
|
1227
|
+
let searchMs = 0;
|
|
1122
1228
|
const dbPaths = getAllDbs();
|
|
1123
1229
|
if (dbPaths.length === 0) return;
|
|
1124
1230
|
if (!searchEngineMod) {
|
|
@@ -1128,13 +1234,6 @@ function main() {
|
|
|
1128
1234
|
const project = path.basename(process.cwd());
|
|
1129
1235
|
const config = readConfig(path.dirname(dbPaths[0]));
|
|
1130
1236
|
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
1237
|
const allResults = [];
|
|
1139
1238
|
for (const dbPath of dbPaths) {
|
|
1140
1239
|
const db = openDatabase(dbPath);
|
|
@@ -1160,11 +1259,13 @@ function main() {
|
|
|
1160
1259
|
continue;
|
|
1161
1260
|
}
|
|
1162
1261
|
}
|
|
1262
|
+
const t0 = Date.now();
|
|
1163
1263
|
const results = searchEngineMod.search(db, userMessage, {
|
|
1164
1264
|
project,
|
|
1165
1265
|
maxResults: effectiveMax,
|
|
1166
1266
|
synonyms
|
|
1167
1267
|
});
|
|
1268
|
+
searchMs += Date.now() - t0;
|
|
1168
1269
|
if (cache) cache.set(userMessage, results);
|
|
1169
1270
|
const baseDir = path.dirname(dbPath);
|
|
1170
1271
|
for (const r of results) {
|
|
@@ -1256,6 +1357,7 @@ Summary: ${summary}...
|
|
|
1256
1357
|
}
|
|
1257
1358
|
process.stdout.write(outputStr);
|
|
1258
1359
|
}
|
|
1360
|
+
return { search_ms: searchMs, result_count: relevant.length };
|
|
1259
1361
|
}
|
|
1260
1362
|
withTelemetry("mindlore-search", main).catch((err) => {
|
|
1261
1363
|
hookLog("mindlore-search", "error", err?.message ?? String(err));
|