mindlore 0.7.4 → 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 +69 -3
- package/dist/scripts/init.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +20 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +32 -1
- 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/session-payload.d.ts.map +1 -1
- package/dist/scripts/lib/session-payload.js +3 -5
- package/dist/scripts/lib/session-payload.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/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.map +1 -1
- package/dist/scripts/mindlore-doctor.js +10 -13
- package/dist/scripts/mindlore-doctor.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/episodes-inject.test.js +5 -5
- package/dist/tests/episodes-inject.test.js.map +1 -1
- 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/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/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 +6 -12
- 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-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 +19 -1
- package/hooks/cc-session-sync.cjs +19 -1
- package/hooks/lib/constants.cjs +1 -1
- package/hooks/lib/learnings-loader.cjs +70 -0
- package/hooks/lib/mindlore-common.cjs +5 -0
- package/hooks/lib/reflect-trigger.cjs +29 -0
- package/hooks/lib/sync-scripts.cjs +12 -0
- package/hooks/mindlore-search.cjs +97 -1
- package/hooks/mindlore-session-focus.cjs +76 -10
- package/hooks/src/lib/mindlore-common.cjs +5 -0
- package/hooks/src/mindlore-session-focus.cjs +47 -5
- package/package.json +4 -2
- 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,32 @@
|
|
|
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 path_1 = __importDefault(require("path"));
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const telemetry_scan_1 = require("../scripts/lib/telemetry-scan");
|
|
10
|
+
const tmpTelemetry = path_1.default.join(os_1.default.tmpdir(), `scan-test-${Date.now()}.jsonl`);
|
|
11
|
+
afterEach(() => { if (fs_1.default.existsSync(tmpTelemetry))
|
|
12
|
+
fs_1.default.unlinkSync(tmpTelemetry); });
|
|
13
|
+
function writeLines(...lines) {
|
|
14
|
+
fs_1.default.writeFileSync(tmpTelemetry, lines.map(l => JSON.stringify(l)).join('\n') + '\n');
|
|
15
|
+
}
|
|
16
|
+
test('scanFailures returns only entries with ok:false AND failure regex match', () => {
|
|
17
|
+
writeLines({ ts: '2026-05-15T10:00:00Z', skill: 's', script: 'a', ok: true, exit_code: 0, output: 'all good' }, { ts: '2026-05-15T10:01:00Z', skill: 's', script: 'b', ok: false, exit_code: 1, output: 'Error: missing file' }, { ts: '2026-05-15T10:02:00Z', skill: 's', script: 'c', ok: false, exit_code: 124, output: 'killed' }, { ts: '2026-05-15T10:03:00Z', skill: 's', script: 'd', ok: true, exit_code: 0, output: 'Error: not found, falling back' }, { ts: '2026-05-15T10:04:00Z', skill: 's', script: 'e', ok: false, exit_code: 1, output: ' at someFunc (/path/file.js:10)' }, { ts: '2026-05-15T10:05:00Z', skill: 's', script: 'f', ok: false, exit_code: 1, output: 'Traceback (most recent call last)\n File "x"' });
|
|
18
|
+
const failures = (0, telemetry_scan_1.scanFailures)(tmpTelemetry);
|
|
19
|
+
expect(failures).toHaveLength(3);
|
|
20
|
+
expect(failures.map(f => f.script)).toEqual(['b', 'e', 'f']);
|
|
21
|
+
});
|
|
22
|
+
test('scanFailures respects sinceDate filter', () => {
|
|
23
|
+
writeLines({ ts: '2026-05-10T00:00:00Z', skill: 's', script: 'old', ok: false, exit_code: 1, output: 'Error: x' }, { ts: '2026-05-15T00:00:00Z', skill: 's', script: 'new', ok: false, exit_code: 1, output: 'Error: y' });
|
|
24
|
+
const failures = (0, telemetry_scan_1.scanFailures)(tmpTelemetry, new Date('2026-05-12T00:00:00Z'));
|
|
25
|
+
expect(failures).toHaveLength(1);
|
|
26
|
+
expect(failures[0]?.script).toBe('new');
|
|
27
|
+
});
|
|
28
|
+
test('scanFailures handles missing file gracefully', () => {
|
|
29
|
+
const failures = (0, telemetry_scan_1.scanFailures)('/nonexistent/path.jsonl');
|
|
30
|
+
expect(failures).toEqual([]);
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=telemetry-scan.test.js.map
|
|
@@ -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,7 +34,7 @@ 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.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;
|
|
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;
|
|
@@ -42,6 +42,9 @@ var require_constants = __commonJS({
|
|
|
42
42
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
43
43
|
exports2.getAllDbs = getAllDbs;
|
|
44
44
|
exports2.getProjectName = getProjectName;
|
|
45
|
+
exports2.resolveProject = resolveProject;
|
|
46
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
47
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
45
48
|
exports2.log = log;
|
|
46
49
|
exports2.isContentFile = isContentFile;
|
|
47
50
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -352,6 +355,7 @@ var require_constants = __commonJS({
|
|
|
352
355
|
reference: "memory",
|
|
353
356
|
note: "memory"
|
|
354
357
|
};
|
|
358
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
|
|
355
359
|
exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
|
|
356
360
|
exports2.CC_MEMORY_DIR = "memory";
|
|
357
361
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -373,6 +377,20 @@ var require_constants = __commonJS({
|
|
|
373
377
|
function getProjectName() {
|
|
374
378
|
return path_12.default.basename(process.cwd());
|
|
375
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
|
+
}
|
|
376
394
|
function log(msg) {
|
|
377
395
|
console.log(` ${msg}`);
|
|
378
396
|
}
|
|
@@ -34,7 +34,7 @@ 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.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;
|
|
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;
|
|
@@ -42,6 +42,9 @@ var require_constants = __commonJS({
|
|
|
42
42
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
43
43
|
exports2.getAllDbs = getAllDbs;
|
|
44
44
|
exports2.getProjectName = getProjectName;
|
|
45
|
+
exports2.resolveProject = resolveProject;
|
|
46
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
47
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
45
48
|
exports2.log = log;
|
|
46
49
|
exports2.isContentFile = isContentFile;
|
|
47
50
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -352,6 +355,7 @@ var require_constants = __commonJS({
|
|
|
352
355
|
reference: "memory",
|
|
353
356
|
note: "memory"
|
|
354
357
|
};
|
|
358
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
|
|
355
359
|
exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
|
|
356
360
|
exports2.CC_MEMORY_DIR = "memory";
|
|
357
361
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -373,6 +377,20 @@ var require_constants = __commonJS({
|
|
|
373
377
|
function getProjectName() {
|
|
374
378
|
return path_12.default.basename(process.cwd());
|
|
375
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
|
+
}
|
|
376
394
|
function log(msg) {
|
|
377
395
|
console.log(` ${msg}`);
|
|
378
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
|
|
|
@@ -804,6 +808,7 @@ module.exports = {
|
|
|
804
808
|
MINDLORE_DIR,
|
|
805
809
|
GLOBAL_MINDLORE_DIR,
|
|
806
810
|
globalDir,
|
|
811
|
+
resolveMindloreHome,
|
|
807
812
|
DB_NAME,
|
|
808
813
|
SKIP_FILES,
|
|
809
814
|
findMindloreDir,
|
|
@@ -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 };
|
|
@@ -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,7 +71,7 @@ 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.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;
|
|
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;
|
|
@@ -42,6 +79,9 @@ var require_constants = __commonJS({
|
|
|
42
79
|
exports2.getActiveMindloreDir = getActiveMindloreDir;
|
|
43
80
|
exports2.getAllDbs = getAllDbs2;
|
|
44
81
|
exports2.getProjectName = getProjectName;
|
|
82
|
+
exports2.resolveProject = resolveProject;
|
|
83
|
+
exports2.resolveMindloreHome = resolveMindloreHome;
|
|
84
|
+
exports2.resolveTelemetryPath = resolveTelemetryPath;
|
|
45
85
|
exports2.log = log;
|
|
46
86
|
exports2.isContentFile = isContentFile;
|
|
47
87
|
exports2.resolveHookCommon = resolveHookCommon;
|
|
@@ -352,6 +392,7 @@ var require_constants = __commonJS({
|
|
|
352
392
|
reference: "memory",
|
|
353
393
|
note: "memory"
|
|
354
394
|
};
|
|
395
|
+
exports2.CC_PLUGIN_CACHE_DIR = path_1.default.join(os_1.default.homedir(), ".claude", "plugins", "cache");
|
|
355
396
|
exports2.CC_MEMORY_PATH_MARKER = path_1.default.join(".claude", "projects");
|
|
356
397
|
exports2.CC_MEMORY_DIR = "memory";
|
|
357
398
|
exports2.CC_MEMORY_CATEGORY = "cc-memory";
|
|
@@ -373,6 +414,20 @@ var require_constants = __commonJS({
|
|
|
373
414
|
function getProjectName() {
|
|
374
415
|
return path_1.default.basename(process.cwd());
|
|
375
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
|
+
}
|
|
376
431
|
function log(msg) {
|
|
377
432
|
console.log(` ${msg}`);
|
|
378
433
|
}
|
|
@@ -415,6 +470,43 @@ var require_constants = __commonJS({
|
|
|
415
470
|
var require_db_helpers = __commonJS({
|
|
416
471
|
"dist/scripts/lib/db-helpers.js"(exports2) {
|
|
417
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
|
+
})();
|
|
418
510
|
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
419
511
|
return mod && mod.__esModule ? mod : { "default": mod };
|
|
420
512
|
};
|
|
@@ -426,6 +518,7 @@ var require_db_helpers = __commonJS({
|
|
|
426
518
|
exports2.openDatabaseTs = openDatabaseTs;
|
|
427
519
|
var better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
428
520
|
var fs_1 = __importDefault(require("fs"));
|
|
521
|
+
var vec = __importStar(require_sqlite_vec());
|
|
429
522
|
var constants_js_1 = require_constants();
|
|
430
523
|
function dbGet(db, sql, ...params) {
|
|
431
524
|
const result = db.prepare(sql).get(...params);
|
|
@@ -465,6 +558,9 @@ var require_db_helpers = __commonJS({
|
|
|
465
558
|
db.pragma("journal_mode = WAL");
|
|
466
559
|
db.pragma(`busy_timeout = ${constants_js_1.DB_BUSY_TIMEOUT_MS}`);
|
|
467
560
|
}
|
|
561
|
+
if (options?.loadVec) {
|
|
562
|
+
vec.load(db);
|
|
563
|
+
}
|
|
468
564
|
return db;
|
|
469
565
|
} catch {
|
|
470
566
|
return null;
|
|
@@ -5,6 +5,38 @@ var __commonJS = (cb, mod) => function __require() {
|
|
|
5
5
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
+
// hooks/lib/reflect-trigger.cjs
|
|
9
|
+
var require_reflect_trigger = __commonJS({
|
|
10
|
+
"hooks/lib/reflect-trigger.cjs"(exports2, module2) {
|
|
11
|
+
"use strict";
|
|
12
|
+
var REFLECT_THRESHOLD_DAYS = 7;
|
|
13
|
+
var NUDGE_COOLDOWN_HOURS = 24;
|
|
14
|
+
function isValidDate(iso) {
|
|
15
|
+
if (!iso) return false;
|
|
16
|
+
const d = new Date(iso);
|
|
17
|
+
return !isNaN(d.getTime());
|
|
18
|
+
}
|
|
19
|
+
function shouldNudgeReflect2(lastReflectIso, lastNudgeIso, now = /* @__PURE__ */ new Date()) {
|
|
20
|
+
let needsReflect;
|
|
21
|
+
if (!lastReflectIso) {
|
|
22
|
+
needsReflect = true;
|
|
23
|
+
} else if (!isValidDate(lastReflectIso)) {
|
|
24
|
+
return false;
|
|
25
|
+
} else {
|
|
26
|
+
const daysSince = (now.getTime() - new Date(lastReflectIso).getTime()) / 864e5;
|
|
27
|
+
needsReflect = daysSince >= REFLECT_THRESHOLD_DAYS;
|
|
28
|
+
}
|
|
29
|
+
if (!needsReflect) return false;
|
|
30
|
+
if (lastNudgeIso && isValidDate(lastNudgeIso)) {
|
|
31
|
+
const hoursSinceNudge = (now.getTime() - new Date(lastNudgeIso).getTime()) / 36e5;
|
|
32
|
+
if (hoursSinceNudge < NUDGE_COOLDOWN_HOURS) return false;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
module2.exports = { shouldNudgeReflect: shouldNudgeReflect2, REFLECT_THRESHOLD_DAYS, NUDGE_COOLDOWN_HOURS };
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
8
40
|
// dist/scripts/lib/session-payload.js
|
|
9
41
|
var require_session_payload = __commonJS({
|
|
10
42
|
"dist/scripts/lib/session-payload.js"(exports2) {
|
|
@@ -30,7 +62,7 @@ var require_session_payload = __commonJS({
|
|
|
30
62
|
const dedupClause = sessionId ? "AND rowid NOT IN (SELECT episode_id FROM episode_inject_log WHERE session_id = ?)" : "";
|
|
31
63
|
const query = `SELECT rowid, kind, summary, created_at FROM episodes
|
|
32
64
|
WHERE status = 'active' AND project = ?
|
|
33
|
-
AND kind IN ('decision', 'friction'
|
|
65
|
+
AND kind IN ('decision', 'friction')
|
|
34
66
|
AND created_at >= ?
|
|
35
67
|
${dedupClause}
|
|
36
68
|
ORDER BY kind, created_at DESC`;
|
|
@@ -46,18 +78,17 @@ var require_session_payload = __commonJS({
|
|
|
46
78
|
}
|
|
47
79
|
})();
|
|
48
80
|
}
|
|
49
|
-
const grouped = { decision: [], friction: []
|
|
81
|
+
const grouped = { decision: [], friction: [] };
|
|
50
82
|
for (const row of rows) {
|
|
51
83
|
const kind = row.kind;
|
|
52
|
-
if (kind === "decision" || kind === "friction"
|
|
84
|
+
if (kind === "decision" || kind === "friction") {
|
|
53
85
|
grouped[kind].push(row);
|
|
54
86
|
}
|
|
55
87
|
}
|
|
56
88
|
const fmt = (items, limit) => items.slice(0, limit).map((r) => `- ${r.summary} (${r.created_at.slice(0, 10)})`).join("\n");
|
|
57
89
|
return {
|
|
58
90
|
decisions: grouped.decision.length > 0 ? fmt(grouped.decision, 5) : "No recent decisions.",
|
|
59
|
-
friction: grouped.friction.length > 0 ? fmt(grouped.friction, 3) : "No active friction points."
|
|
60
|
-
learnings: grouped.learning.length > 0 ? fmt(grouped.learning, 5) : "No recent learnings."
|
|
91
|
+
friction: grouped.friction.length > 0 ? fmt(grouped.friction, 3) : "No active friction points."
|
|
61
92
|
};
|
|
62
93
|
}
|
|
63
94
|
function buildSessionPayload(opts) {
|
|
@@ -68,7 +99,6 @@ var require_session_payload = __commonJS({
|
|
|
68
99
|
const episodes = buildEpisodeSections(db, project, sessionId);
|
|
69
100
|
sections.push({ label: "Decisions", content: episodes.decisions, tokens: estimateTokens(episodes.decisions) });
|
|
70
101
|
sections.push({ label: "Friction", content: episodes.friction, tokens: estimateTokens(episodes.friction) });
|
|
71
|
-
sections.push({ label: "Learnings", content: episodes.learnings, tokens: estimateTokens(episodes.learnings) });
|
|
72
102
|
try {
|
|
73
103
|
const summaries = db.prepare(`SELECT session_summary, created_at FROM episodes
|
|
74
104
|
WHERE kind = 'session-summary' AND project = ? AND session_summary IS NOT NULL
|
|
@@ -585,7 +615,9 @@ var require_all_migrations = __commonJS({
|
|
|
585
615
|
// hooks/src/mindlore-session-focus.cjs
|
|
586
616
|
var fs = require("fs");
|
|
587
617
|
var path = require("path");
|
|
588
|
-
var { findMindloreDir, readConfig, openDatabase, hasEpisodesTable, querySupersededChains, formatSupersededChains, hookLog, getProjectName, parseFrontmatter, withTelemetry, withTimeoutDb, listSnapshots, isCorruptionError, recoverCorruptDb, getNominationCounts } = require("./lib/mindlore-common.cjs");
|
|
618
|
+
var { findMindloreDir, readConfig, openDatabase, hasEpisodesTable, querySupersededChains, formatSupersededChains, hookLog, getProjectName, parseFrontmatter, withTelemetry, withTimeoutDb, listSnapshots, isCorruptionError, recoverCorruptDb, getNominationCounts, resolveMindloreHome } = require("./lib/mindlore-common.cjs");
|
|
619
|
+
var { loadLearningsBlock } = require("./lib/learnings-loader.cjs");
|
|
620
|
+
var { shouldNudgeReflect } = require_reflect_trigger();
|
|
589
621
|
function truncateSection(content, sectionRegex, keepCount, label) {
|
|
590
622
|
const match = content.match(sectionRegex);
|
|
591
623
|
if (!match) return content;
|
|
@@ -602,7 +634,7 @@ function truncateChangedFiles(content) {
|
|
|
602
634
|
return truncateSection(content, /(## Changed Files\n)((?:- [^\n]+\n?)+)/, 10, "dosya");
|
|
603
635
|
}
|
|
604
636
|
function tryOpenDb(dbPath) {
|
|
605
|
-
return openDatabase(dbPath, { readonly: true });
|
|
637
|
+
return openDatabase(dbPath, { readonly: false }) || openDatabase(dbPath, { readonly: true });
|
|
606
638
|
}
|
|
607
639
|
function getEpisodeStats(db, config, project) {
|
|
608
640
|
const chains = querySupersededChains(db, { project, days: 7, limit: 5 });
|
|
@@ -610,8 +642,11 @@ function getEpisodeStats(db, config, project) {
|
|
|
610
642
|
try {
|
|
611
643
|
const rawCount = withTimeoutDb(
|
|
612
644
|
db,
|
|
613
|
-
|
|
614
|
-
|
|
645
|
+
`SELECT COUNT(*) as cnt FROM episodes
|
|
646
|
+
WHERE (consolidation_status = 'raw' OR consolidation_status IS NULL)
|
|
647
|
+
AND kind IN ('learning','discovery','friction','decision','nomination')
|
|
648
|
+
AND project = ?`,
|
|
649
|
+
[project],
|
|
615
650
|
{ mode: "get" }
|
|
616
651
|
);
|
|
617
652
|
const cnt = rawCount?.cnt ?? 0;
|
|
@@ -669,6 +704,9 @@ ${formatSupersededChains(chains)}`);
|
|
|
669
704
|
timings.db_stale = Date.now() - tStale;
|
|
670
705
|
try {
|
|
671
706
|
const counts = getNominationCounts(db, project);
|
|
707
|
+
if (counts.staged > 0) {
|
|
708
|
+
output.push(`[Mindlore Nomination] ${counts.staged} karar bekliyor \u2014 /mindlore-reflect ile onayla`);
|
|
709
|
+
}
|
|
672
710
|
if (counts.staged >= (config?.graduation?.reflectThreshold ?? 5)) {
|
|
673
711
|
output.push(`[Mindlore] ${counts.staged} bekleyen nomination var \u2014 \`/mindlore-reflect\` \xE7al\u0131\u015Ft\u0131r`);
|
|
674
712
|
}
|
|
@@ -766,6 +804,24 @@ ${truncateChangedFiles(truncateCommits(deltaContent))}`);
|
|
|
766
804
|
}
|
|
767
805
|
timings.schema_check = Date.now() - tSchema;
|
|
768
806
|
loadDbContent({ db, baseDir, config, output, timings, latestDeltaContent, sessionId });
|
|
807
|
+
try {
|
|
808
|
+
const reflectRow = db.prepare(
|
|
809
|
+
"SELECT value FROM skill_memory WHERE skill_name = 'mindlore-reflect' AND key = 'last_reflect_date'"
|
|
810
|
+
).get();
|
|
811
|
+
const nudgeRow = db.prepare(
|
|
812
|
+
"SELECT value FROM skill_memory WHERE skill_name = 'mindlore-reflect' AND key = 'last_nudge_date'"
|
|
813
|
+
).get();
|
|
814
|
+
if (shouldNudgeReflect(reflectRow?.value ?? null, nudgeRow?.value ?? null, /* @__PURE__ */ new Date())) {
|
|
815
|
+
output.push("[Mindlore] 7+ g\xFCn reflect yap\u0131lmad\u0131 \u2014 `/mindlore-reflect` \xE7al\u0131\u015Ft\u0131r");
|
|
816
|
+
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
817
|
+
db.prepare(`
|
|
818
|
+
INSERT INTO skill_memory (skill_name, key, value, updated_at)
|
|
819
|
+
VALUES ('mindlore-reflect', 'last_nudge_date', ?, ?)
|
|
820
|
+
ON CONFLICT(skill_name, key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at
|
|
821
|
+
`).run(nowIso, nowIso);
|
|
822
|
+
}
|
|
823
|
+
} catch (_err) {
|
|
824
|
+
}
|
|
769
825
|
} catch (err) {
|
|
770
826
|
if (isCorruptionError(err)) {
|
|
771
827
|
recoverCorruptDb(db, dbPath, "session-focus");
|
|
@@ -782,6 +838,16 @@ ${truncateChangedFiles(truncateCommits(deltaContent))}`);
|
|
|
782
838
|
const outputLenAfterDb = output.reduce((s, o) => s + o.length, 0);
|
|
783
839
|
sourceChars += outputLenAfterDb - outputLenBeforeDb;
|
|
784
840
|
timings.db_total = Date.now() - tDb;
|
|
841
|
+
try {
|
|
842
|
+
const mindloreDir = resolveMindloreHome();
|
|
843
|
+
const project = getProjectName();
|
|
844
|
+
const learningsBlock = loadLearningsBlock(mindloreDir, project);
|
|
845
|
+
if (learningsBlock) {
|
|
846
|
+
output.push(learningsBlock);
|
|
847
|
+
sourceChars += learningsBlock.length;
|
|
848
|
+
}
|
|
849
|
+
} catch (_err) {
|
|
850
|
+
}
|
|
785
851
|
timings.total = Date.now() - t0;
|
|
786
852
|
hookLog("session-focus", "info", `timings: ${JSON.stringify(timings)}`);
|
|
787
853
|
const budgetConfig = config?.tokenBudget ?? {};
|
|
@@ -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
|
|
|
@@ -773,6 +777,7 @@ module.exports = {
|
|
|
773
777
|
MINDLORE_DIR,
|
|
774
778
|
GLOBAL_MINDLORE_DIR,
|
|
775
779
|
globalDir,
|
|
780
|
+
resolveMindloreHome,
|
|
776
781
|
DB_NAME,
|
|
777
782
|
SKIP_FILES,
|
|
778
783
|
findMindloreDir,
|