mindlore 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -2
- package/dist/scripts/cc-memory-bulk-sync.d.ts +26 -0
- package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -0
- package/dist/scripts/cc-memory-bulk-sync.js +177 -0
- package/dist/scripts/cc-memory-bulk-sync.js.map +1 -0
- package/dist/scripts/fetch-raw.d.ts +2 -0
- package/dist/scripts/fetch-raw.d.ts.map +1 -0
- package/dist/scripts/fetch-raw.js +124 -0
- package/dist/scripts/fetch-raw.js.map +1 -0
- package/dist/scripts/lib/consolidation.d.ts +17 -0
- package/dist/scripts/lib/consolidation.d.ts.map +1 -0
- package/dist/scripts/lib/consolidation.js +55 -0
- package/dist/scripts/lib/consolidation.js.map +1 -0
- package/dist/scripts/lib/constants.d.ts +5 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +16 -4
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/db-helpers.d.ts +12 -2
- package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
- package/dist/scripts/lib/db-helpers.js +36 -0
- package/dist/scripts/lib/db-helpers.js.map +1 -1
- package/dist/scripts/lib/decay.d.ts +21 -0
- package/dist/scripts/lib/decay.d.ts.map +1 -0
- package/dist/scripts/lib/decay.js +50 -0
- package/dist/scripts/lib/decay.js.map +1 -0
- package/dist/scripts/lib/hybrid-search.d.ts +0 -2
- package/dist/scripts/lib/hybrid-search.d.ts.map +1 -1
- package/dist/scripts/lib/hybrid-search.js +7 -1
- package/dist/scripts/lib/hybrid-search.js.map +1 -1
- package/dist/scripts/lib/migrations-v052.d.ts +3 -0
- package/dist/scripts/lib/migrations-v052.d.ts.map +1 -0
- package/dist/scripts/lib/migrations-v052.js +23 -0
- package/dist/scripts/lib/migrations-v052.js.map +1 -0
- package/dist/scripts/lib/migrations-v053.d.ts +3 -0
- package/dist/scripts/lib/migrations-v053.d.ts.map +1 -0
- package/dist/scripts/lib/migrations-v053.js +52 -0
- package/dist/scripts/lib/migrations-v053.js.map +1 -0
- package/dist/scripts/lib/skeleton.d.ts +2 -0
- package/dist/scripts/lib/skeleton.d.ts.map +1 -0
- package/dist/scripts/lib/skeleton.js +99 -0
- package/dist/scripts/lib/skeleton.js.map +1 -0
- package/dist/scripts/lib/skill-memory.d.ts +13 -0
- package/dist/scripts/lib/skill-memory.d.ts.map +1 -0
- package/dist/scripts/lib/skill-memory.js +94 -0
- package/dist/scripts/lib/skill-memory.js.map +1 -0
- package/dist/scripts/mindlore-backup.d.ts +1 -1
- package/dist/scripts/mindlore-backup.d.ts.map +1 -1
- package/dist/scripts/mindlore-backup.js +23 -0
- package/dist/scripts/mindlore-backup.js.map +1 -1
- package/dist/scripts/mindlore-fts5-index.js +3 -1
- package/dist/scripts/mindlore-fts5-index.js.map +1 -1
- package/dist/scripts/mindlore-health-check.d.ts +1 -1
- package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
- package/dist/scripts/mindlore-health-check.js +138 -136
- package/dist/scripts/mindlore-health-check.js.map +1 -1
- package/dist/tests/catch-up.test.d.ts +2 -0
- package/dist/tests/catch-up.test.d.ts.map +1 -0
- package/dist/tests/catch-up.test.js +88 -0
- package/dist/tests/catch-up.test.js.map +1 -0
- package/dist/tests/cc-memory-bulk-sync.test.d.ts +2 -0
- package/dist/tests/cc-memory-bulk-sync.test.d.ts.map +1 -0
- package/dist/tests/cc-memory-bulk-sync.test.js +116 -0
- package/dist/tests/cc-memory-bulk-sync.test.js.map +1 -0
- package/dist/tests/consolidation.test.d.ts +2 -0
- package/dist/tests/consolidation.test.d.ts.map +1 -0
- package/dist/tests/consolidation.test.js +77 -0
- package/dist/tests/consolidation.test.js.map +1 -0
- package/dist/tests/decay.test.d.ts +2 -0
- package/dist/tests/decay.test.d.ts.map +1 -0
- package/dist/tests/decay.test.js +92 -0
- package/dist/tests/decay.test.js.map +1 -0
- package/dist/tests/episode-file.test.js +9 -6
- package/dist/tests/episode-file.test.js.map +1 -1
- package/dist/tests/fetch-raw.test.d.ts +2 -0
- package/dist/tests/fetch-raw.test.d.ts.map +1 -0
- package/dist/tests/fetch-raw.test.js +43 -0
- package/dist/tests/fetch-raw.test.js.map +1 -0
- package/dist/tests/git-snapshot.test.d.ts +2 -0
- package/dist/tests/git-snapshot.test.d.ts.map +1 -0
- package/dist/tests/git-snapshot.test.js +36 -0
- package/dist/tests/git-snapshot.test.js.map +1 -0
- package/dist/tests/migrations-v053.test.d.ts +2 -0
- package/dist/tests/migrations-v053.test.d.ts.map +1 -0
- package/dist/tests/migrations-v053.test.js +113 -0
- package/dist/tests/migrations-v053.test.js.map +1 -0
- package/dist/tests/recall-telemetry.test.d.ts +2 -0
- package/dist/tests/recall-telemetry.test.d.ts.map +1 -0
- package/dist/tests/recall-telemetry.test.js +56 -0
- package/dist/tests/recall-telemetry.test.js.map +1 -0
- package/dist/tests/resolve-hook-common.test.d.ts +2 -0
- package/dist/tests/resolve-hook-common.test.d.ts.map +1 -0
- package/dist/tests/resolve-hook-common.test.js +30 -0
- package/dist/tests/resolve-hook-common.test.js.map +1 -0
- package/dist/tests/search-offload.test.d.ts +2 -0
- package/dist/tests/search-offload.test.d.ts.map +1 -0
- package/dist/tests/search-offload.test.js +34 -0
- package/dist/tests/search-offload.test.js.map +1 -0
- package/dist/tests/skeleton.test.d.ts +2 -0
- package/dist/tests/skeleton.test.d.ts.map +1 -0
- package/dist/tests/skeleton.test.js +116 -0
- package/dist/tests/skeleton.test.js.map +1 -0
- package/dist/tests/skill-memory-api.test.d.ts +2 -0
- package/dist/tests/skill-memory-api.test.d.ts.map +1 -0
- package/dist/tests/skill-memory-api.test.js +62 -0
- package/dist/tests/skill-memory-api.test.js.map +1 -0
- package/dist/tests/skill-memory.test.d.ts +2 -0
- package/dist/tests/skill-memory.test.d.ts.map +1 -0
- package/dist/tests/skill-memory.test.js +67 -0
- package/dist/tests/skill-memory.test.js.map +1 -0
- package/dist/tests/skill-path-resolution.test.d.ts +2 -0
- package/dist/tests/skill-path-resolution.test.d.ts.map +1 -0
- package/dist/tests/skill-path-resolution.test.js +42 -0
- package/dist/tests/skill-path-resolution.test.js.map +1 -0
- package/dist/tests/wiki-lint.test.d.ts +2 -0
- package/dist/tests/wiki-lint.test.d.ts.map +1 -0
- package/dist/tests/wiki-lint.test.js +47 -0
- package/dist/tests/wiki-lint.test.js.map +1 -0
- package/hooks/lib/mindlore-common.cjs +53 -6
- package/hooks/mindlore-cwd-changed.cjs +2 -2
- package/hooks/mindlore-decision-detector.cjs +2 -2
- package/hooks/mindlore-dont-repeat.cjs +2 -2
- package/hooks/mindlore-fts5-sync.cjs +2 -2
- package/hooks/mindlore-index.cjs +60 -2
- package/hooks/mindlore-model-router.cjs +2 -2
- package/hooks/mindlore-post-compact.cjs +2 -2
- package/hooks/mindlore-post-read.cjs +2 -2
- package/hooks/mindlore-pre-compact.cjs +2 -2
- package/hooks/mindlore-read-guard.cjs +15 -3
- package/hooks/mindlore-research-guard.cjs +2 -2
- package/hooks/mindlore-search.cjs +30 -3
- package/hooks/mindlore-session-end.cjs +1 -1
- package/hooks/mindlore-session-focus.cjs +12 -0
- package/package.json +4 -2
- package/plugin.json +34 -2
- package/skills/mindlore-decide/SKILL.md +9 -0
- package/skills/mindlore-diary/SKILL.md +85 -0
- package/skills/mindlore-evolve/SKILL.md +24 -1
- package/skills/mindlore-health/SKILL.md +10 -1
- package/skills/mindlore-ingest/SKILL.md +64 -52
- package/skills/mindlore-log/SKILL.md +12 -143
- package/skills/mindlore-maintain/SKILL.md +119 -0
- package/skills/mindlore-query/SKILL.md +9 -0
- package/skills/mindlore-reflect/SKILL.md +131 -0
- package/templates/config.json +8 -1
package/README.md
CHANGED
|
@@ -65,10 +65,13 @@ npx mindlore episodes count # Episode count per project
|
|
|
65
65
|
| `/mindlore-ingest` | Add knowledge sources (URL, text, file, PDF) + 6-point quality gate |
|
|
66
66
|
| `/mindlore-health` | 16-point structural health check |
|
|
67
67
|
| `/mindlore-query` | Search, ask, stats, brief — compounding knowledge pipeline |
|
|
68
|
-
| `/mindlore-log` | Session logging
|
|
68
|
+
| `/mindlore-log` | Session logging and status |
|
|
69
|
+
| `/mindlore-diary` | Session diary — decisions, challenges, solutions |
|
|
70
|
+
| `/mindlore-reflect` | Pattern extraction from accumulated diaries |
|
|
69
71
|
| `/mindlore-decide` | Decision records with supersedes chain |
|
|
70
72
|
| `/mindlore-evolve` | Schema co-evolution and structural updates |
|
|
71
73
|
| `/mindlore-explore` | Cross-reference discovery between sources |
|
|
74
|
+
| `/mindlore-maintain` | KB maintenance: decay reports, consolidation, contradiction detection |
|
|
72
75
|
|
|
73
76
|
## Architecture
|
|
74
77
|
|
|
@@ -166,6 +169,17 @@ SESSION START DURING SESSION SESSIO
|
|
|
166
169
|
- **Hybrid search** — RRF fusion combining FTS5 keyword + sqlite-vec vector results with synonym expansion
|
|
167
170
|
- **Content-hash dedup** — SHA256 prevents re-indexing unchanged files
|
|
168
171
|
|
|
172
|
+
## Daily Usage
|
|
173
|
+
|
|
174
|
+
Mindlore is invisible by design — hooks handle everything automatically:
|
|
175
|
+
|
|
176
|
+
1. **Just work** — hooks inject relevant context as you type
|
|
177
|
+
2. **Add knowledge** — `/mindlore-ingest` when you find something worth keeping
|
|
178
|
+
3. **Search** — `npm run search "query"` or `/mindlore-query search "query"`
|
|
179
|
+
4. **Record decisions** — `/mindlore-decide` when making architectural choices
|
|
180
|
+
5. **Health check** — `npm run health` periodically to verify integrity
|
|
181
|
+
6. **Explore connections** — `/mindlore-explore` to discover links between sources
|
|
182
|
+
|
|
169
183
|
## Configuration
|
|
170
184
|
|
|
171
185
|
Mindlore creates `.mindlore/config.json` with model defaults for cost-optimized agent delegation:
|
|
@@ -185,7 +199,7 @@ Skills spawn subagents with `[mindlore:SKILL]` markers — the model-router hook
|
|
|
185
199
|
|
|
186
200
|
## Hooks
|
|
187
201
|
|
|
188
|
-
14 Claude Code lifecycle hooks (v0.5.
|
|
202
|
+
14 Claude Code lifecycle hooks (v0.5.3):
|
|
189
203
|
|
|
190
204
|
| Event | Hook | What it does |
|
|
191
205
|
|-------|------|-------------|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* cc-memory-bulk-sync — One-shot sync of Claude Code memory files into Mindlore FTS5.
|
|
4
|
+
*
|
|
5
|
+
* Discovers ~/.claude/projects/*\/memory\/*.md, copies to .mindlore/memory/, and
|
|
6
|
+
* indexes with category='cc-memory'. Idempotent via SHA256 content-hash.
|
|
7
|
+
*
|
|
8
|
+
* Usage: node dist/scripts/cc-memory-bulk-sync.js [--claude-dir <path>] [--db <path>] [--mindlore-dir <path>]
|
|
9
|
+
*/
|
|
10
|
+
export interface SyncResult {
|
|
11
|
+
synced: number;
|
|
12
|
+
skipped: number;
|
|
13
|
+
errors: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Discover CC memory files under {claudeDir}/projects\/*\/memory\/*.md.
|
|
17
|
+
* Skips MEMORY.md (index files).
|
|
18
|
+
*/
|
|
19
|
+
export declare function discoverCcMemoryFiles(claudeDir: string): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Sync discovered CC memory files into Mindlore FTS5 DB.
|
|
22
|
+
* Copies files to {mindloreDir}/memory/ with prefix {projectName}_.
|
|
23
|
+
* Idempotent: skips files whose content hash already matches.
|
|
24
|
+
*/
|
|
25
|
+
export declare function syncToDb(dbPath: string, files: string[], mindloreDir: string): SyncResult;
|
|
26
|
+
//# sourceMappingURL=cc-memory-bulk-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cc-memory-bulk-sync.d.ts","sourceRoot":"","sources":["../../scripts/cc-memory-bulk-sync.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAmDH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAkCjE;AAkBD;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,GAClB,UAAU,CAyFZ"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* cc-memory-bulk-sync — One-shot sync of Claude Code memory files into Mindlore FTS5.
|
|
5
|
+
*
|
|
6
|
+
* Discovers ~/.claude/projects/*\/memory\/*.md, copies to .mindlore/memory/, and
|
|
7
|
+
* indexes with category='cc-memory'. Idempotent via SHA256 content-hash.
|
|
8
|
+
*
|
|
9
|
+
* Usage: node dist/scripts/cc-memory-bulk-sync.js [--claude-dir <path>] [--db <path>] [--mindlore-dir <path>]
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.discoverCcMemoryFiles = discoverCcMemoryFiles;
|
|
16
|
+
exports.syncToDb = syncToDb;
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const os_1 = __importDefault(require("os"));
|
|
20
|
+
const constants_js_1 = require("./lib/constants.js");
|
|
21
|
+
// ── Discovery ─────────────────────────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Discover CC memory files under {claudeDir}/projects\/*\/memory\/*.md.
|
|
24
|
+
* Skips MEMORY.md (index files).
|
|
25
|
+
*/
|
|
26
|
+
function discoverCcMemoryFiles(claudeDir) {
|
|
27
|
+
const projectsDir = path_1.default.join(claudeDir, 'projects');
|
|
28
|
+
if (!fs_1.default.existsSync(projectsDir))
|
|
29
|
+
return [];
|
|
30
|
+
const results = [];
|
|
31
|
+
let projectEntries;
|
|
32
|
+
try {
|
|
33
|
+
projectEntries = fs_1.default.readdirSync(projectsDir, { withFileTypes: true });
|
|
34
|
+
}
|
|
35
|
+
catch (_err) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
for (const projectEntry of projectEntries) {
|
|
39
|
+
if (!projectEntry.isDirectory())
|
|
40
|
+
continue;
|
|
41
|
+
const memoryDir = path_1.default.join(projectsDir, projectEntry.name, 'memory');
|
|
42
|
+
if (!fs_1.default.existsSync(memoryDir))
|
|
43
|
+
continue;
|
|
44
|
+
let memoryEntries;
|
|
45
|
+
try {
|
|
46
|
+
memoryEntries = fs_1.default.readdirSync(memoryDir, { withFileTypes: true });
|
|
47
|
+
}
|
|
48
|
+
catch (_err) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
for (const memEntry of memoryEntries) {
|
|
52
|
+
if (!memEntry.isFile())
|
|
53
|
+
continue;
|
|
54
|
+
if (!memEntry.name.endsWith('.md'))
|
|
55
|
+
continue;
|
|
56
|
+
if (memEntry.name === 'MEMORY.md')
|
|
57
|
+
continue;
|
|
58
|
+
results.push(path_1.default.join(memoryDir, memEntry.name));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return results;
|
|
62
|
+
}
|
|
63
|
+
// ── Safe prefix ───────────────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* Sanitize a CC project dir name for use as a filename prefix.
|
|
66
|
+
* Strips path separators and dots sequences to prevent traversal.
|
|
67
|
+
*/
|
|
68
|
+
function safePrefix(dirName) {
|
|
69
|
+
return dirName
|
|
70
|
+
.replace(/[/\\]/g, '_')
|
|
71
|
+
.replace(/\.\./g, '_')
|
|
72
|
+
.replace(/[^\w\-. ]/g, '_')
|
|
73
|
+
.slice(0, 80);
|
|
74
|
+
}
|
|
75
|
+
// ── Sync ──────────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Sync discovered CC memory files into Mindlore FTS5 DB.
|
|
78
|
+
* Copies files to {mindloreDir}/memory/ with prefix {projectName}_.
|
|
79
|
+
* Idempotent: skips files whose content hash already matches.
|
|
80
|
+
*/
|
|
81
|
+
function syncToDb(dbPath, files, mindloreDir) {
|
|
82
|
+
const result = { synced: 0, skipped: 0, errors: [] };
|
|
83
|
+
if (files.length === 0)
|
|
84
|
+
return result;
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- resolveHookCommon validated at startup
|
|
86
|
+
const common = require((0, constants_js_1.resolveHookCommon)(__dirname));
|
|
87
|
+
const { sha256, parseFrontmatter, extractFtsMetadata, insertFtsRow, openDatabase } = common;
|
|
88
|
+
const db = openDatabase(dbPath);
|
|
89
|
+
if (!db) {
|
|
90
|
+
result.errors.push(`Cannot open DB at ${dbPath}`);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
// Ensure memory dest dir exists
|
|
94
|
+
const memoryDestDir = path_1.default.join(mindloreDir, 'memory');
|
|
95
|
+
fs_1.default.mkdirSync(memoryDestDir, { recursive: true });
|
|
96
|
+
const getHash = db.prepare('SELECT content_hash FROM file_hashes WHERE path = ?');
|
|
97
|
+
const upsertHash = db.prepare(`
|
|
98
|
+
INSERT INTO file_hashes (path, content_hash, last_indexed)
|
|
99
|
+
VALUES (?, ?, ?)
|
|
100
|
+
ON CONFLICT(path) DO UPDATE SET
|
|
101
|
+
content_hash = excluded.content_hash,
|
|
102
|
+
last_indexed = excluded.last_indexed
|
|
103
|
+
`);
|
|
104
|
+
const deleteFts = db.prepare('DELETE FROM mindlore_fts WHERE path = ?');
|
|
105
|
+
const now = new Date().toISOString();
|
|
106
|
+
const transaction = db.transaction(() => {
|
|
107
|
+
for (const srcPath of files) {
|
|
108
|
+
try {
|
|
109
|
+
// Extract project name from grandparent dir of memory/
|
|
110
|
+
// Structure: .../projects/{projectName}/memory/{file}.md
|
|
111
|
+
const projectName = safePrefix(path_1.default.basename(path_1.default.dirname(path_1.default.dirname(srcPath))));
|
|
112
|
+
const destFileName = `${projectName}_${path_1.default.basename(srcPath)}`;
|
|
113
|
+
const destPath = path_1.default.join(memoryDestDir, destFileName);
|
|
114
|
+
const content = fs_1.default.readFileSync(srcPath, 'utf8').replace(/\r\n/g, '\n');
|
|
115
|
+
const hash = sha256(content);
|
|
116
|
+
// Idempotency check: use dest path as the canonical key
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- get() returns unknown
|
|
118
|
+
const existing = getHash.get(destPath);
|
|
119
|
+
if (existing && existing.content_hash === hash) {
|
|
120
|
+
result.skipped++;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const { meta, body } = parseFrontmatter(content);
|
|
124
|
+
const ftsFields = extractFtsMetadata(meta, body, destPath, mindloreDir);
|
|
125
|
+
// Override category — extractFtsMetadata would return 'memory', we need 'cc-memory'
|
|
126
|
+
deleteFts.run(destPath);
|
|
127
|
+
insertFtsRow(db, {
|
|
128
|
+
path: destPath,
|
|
129
|
+
slug: ftsFields.slug,
|
|
130
|
+
description: ftsFields.description,
|
|
131
|
+
type: ftsFields.type,
|
|
132
|
+
category: constants_js_1.CC_MEMORY_CATEGORY,
|
|
133
|
+
title: ftsFields.title,
|
|
134
|
+
content: body,
|
|
135
|
+
tags: ftsFields.tags,
|
|
136
|
+
quality: ftsFields.quality,
|
|
137
|
+
dateCaptured: ftsFields.dateCaptured,
|
|
138
|
+
project: projectName,
|
|
139
|
+
});
|
|
140
|
+
// Copy file before DB write — if copy fails, DB stays clean
|
|
141
|
+
fs_1.default.copyFileSync(srcPath, destPath);
|
|
142
|
+
upsertHash.run(destPath, hash, now);
|
|
143
|
+
result.synced++;
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
147
|
+
result.errors.push(`${path_1.default.basename(srcPath)}: ${msg}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
transaction();
|
|
152
|
+
db.close();
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
// ── CLI ───────────────────────────────────────────────────────────────
|
|
156
|
+
const isMain = typeof require !== 'undefined' && require.main === module;
|
|
157
|
+
if (isMain) {
|
|
158
|
+
const args = process.argv.slice(2);
|
|
159
|
+
function getArg(flag) {
|
|
160
|
+
const idx = args.indexOf(flag);
|
|
161
|
+
return idx !== -1 ? args[idx + 1] : undefined;
|
|
162
|
+
}
|
|
163
|
+
const claudeDir = getArg('--claude-dir') ?? path_1.default.join(os_1.default.homedir(), '.claude');
|
|
164
|
+
const mindloreDir = getArg('--mindlore-dir') ?? constants_js_1.GLOBAL_MINDLORE_DIR;
|
|
165
|
+
const dbPath = getArg('--db') ?? path_1.default.join(mindloreDir, constants_js_1.DB_NAME);
|
|
166
|
+
const files = discoverCcMemoryFiles(claudeDir);
|
|
167
|
+
console.log(` Discovered ${files.length} CC memory file(s)`);
|
|
168
|
+
const result = syncToDb(dbPath, files, mindloreDir);
|
|
169
|
+
console.log(` Synced: ${result.synced}, Skipped: ${result.skipped}, Errors: ${result.errors.length}`);
|
|
170
|
+
if (result.errors.length > 0) {
|
|
171
|
+
for (const e of result.errors) {
|
|
172
|
+
console.error(` ERROR: ${e}`);
|
|
173
|
+
}
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=cc-memory-bulk-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cc-memory-bulk-sync.js","sourceRoot":"","sources":["../../scripts/cc-memory-bulk-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-raw.d.ts","sourceRoot":"","sources":["../../scripts/fetch-raw.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,124 @@
|
|
|
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 child_process_1 = require("child_process");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
+
const os_1 = __importDefault(require("os"));
|
|
11
|
+
function validateUrl(raw) {
|
|
12
|
+
const u = new URL(raw);
|
|
13
|
+
if (!['http:', 'https:'].includes(u.protocol)) {
|
|
14
|
+
throw new Error(`Unsupported protocol: ${u.protocol}`);
|
|
15
|
+
}
|
|
16
|
+
return u.href;
|
|
17
|
+
}
|
|
18
|
+
function slugFromUrl(url) {
|
|
19
|
+
return crypto_1.default.createHash('sha256').update(url).digest('hex').slice(0, 12);
|
|
20
|
+
}
|
|
21
|
+
function fetchGitHubReadme(url) {
|
|
22
|
+
const match = url.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/?$/);
|
|
23
|
+
if (!match)
|
|
24
|
+
return null;
|
|
25
|
+
const [, owner, repo] = match;
|
|
26
|
+
try {
|
|
27
|
+
const result = (0, child_process_1.execSync)(`gh api repos/${owner}/${repo}/readme --jq .content`, { encoding: 'utf8', timeout: 15000, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
28
|
+
return Buffer.from(result.trim(), 'base64').toString('utf8');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function fetchCurl(url) {
|
|
35
|
+
try {
|
|
36
|
+
const raw = (0, child_process_1.execFileSync)('curl', ['-sL', '--max-time', '20', '--max-filesize', '5242880', url], { encoding: 'utf8', timeout: 25000, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
37
|
+
if (raw.includes('<html') || raw.includes('<!DOCTYPE')) {
|
|
38
|
+
return raw
|
|
39
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
|
|
40
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
|
|
41
|
+
.replace(/<[^>]+>/g, ' ')
|
|
42
|
+
.replace(/\s{2,}/g, ' ')
|
|
43
|
+
.trim();
|
|
44
|
+
}
|
|
45
|
+
return raw;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function fetchJina(url) {
|
|
52
|
+
try {
|
|
53
|
+
const result = (0, child_process_1.execFileSync)('curl', ['-sL', '--max-time', '30', `https://r.jina.ai/${url}`], { encoding: 'utf8', timeout: 35000, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function generateFrontmatter(url, slug, content) {
|
|
61
|
+
const titleMatch = content.match(/^#\s+(.+)/m);
|
|
62
|
+
const title = titleMatch?.[1]?.trim() ?? slug;
|
|
63
|
+
const now = new Date().toISOString().split('T')[0];
|
|
64
|
+
return [
|
|
65
|
+
'---',
|
|
66
|
+
`slug: ${slug}`,
|
|
67
|
+
'type: raw',
|
|
68
|
+
`title: "${title.replace(/"/g, '\\"')}"`,
|
|
69
|
+
`source_url: ${url}`,
|
|
70
|
+
`date_captured: ${now}`,
|
|
71
|
+
'quality: unreviewed',
|
|
72
|
+
'---',
|
|
73
|
+
'',
|
|
74
|
+
].join('\n');
|
|
75
|
+
}
|
|
76
|
+
function main() {
|
|
77
|
+
const args = process.argv.slice(2);
|
|
78
|
+
const outDirFlag = args.indexOf('--out-dir');
|
|
79
|
+
const skipIndices = new Set();
|
|
80
|
+
if (outDirFlag >= 0) {
|
|
81
|
+
skipIndices.add(outDirFlag);
|
|
82
|
+
skipIndices.add(outDirFlag + 1);
|
|
83
|
+
}
|
|
84
|
+
const url = args.find((a, i) => !a.startsWith('--') && !skipIndices.has(i));
|
|
85
|
+
const outDir = (outDirFlag >= 0 && args[outDirFlag + 1])
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guarded by args[outDirFlag + 1] truthiness check above
|
|
87
|
+
? args[outDirFlag + 1]
|
|
88
|
+
: path_1.default.join(process.env.MINDLORE_HOME ?? path_1.default.join(os_1.default.homedir(), '.mindlore'), 'raw');
|
|
89
|
+
if (!url) {
|
|
90
|
+
console.error('Usage: node fetch-raw.js <URL> [--out-dir <path>]');
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
const safeUrl = validateUrl(url);
|
|
94
|
+
let content = null;
|
|
95
|
+
let method = 'curl';
|
|
96
|
+
if (safeUrl.includes('github.com')) {
|
|
97
|
+
content = fetchGitHubReadme(safeUrl);
|
|
98
|
+
if (content)
|
|
99
|
+
method = 'github-api';
|
|
100
|
+
}
|
|
101
|
+
if (!content) {
|
|
102
|
+
content = fetchCurl(safeUrl);
|
|
103
|
+
method = 'curl';
|
|
104
|
+
}
|
|
105
|
+
if (!content || content.length < 100) {
|
|
106
|
+
content = fetchJina(safeUrl);
|
|
107
|
+
method = 'jina';
|
|
108
|
+
}
|
|
109
|
+
if (!content || content.length < 50) {
|
|
110
|
+
console.error(JSON.stringify({ error: 'All fetch methods failed', url: safeUrl }));
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const slug = slugFromUrl(safeUrl);
|
|
114
|
+
const frontmatter = generateFrontmatter(safeUrl, slug, content);
|
|
115
|
+
const fullContent = frontmatter + content;
|
|
116
|
+
fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
117
|
+
const fileName = `${new Date().toISOString().split('T')[0]}-${slug}.md`;
|
|
118
|
+
const filePath = path_1.default.join(outDir, fileName);
|
|
119
|
+
fs_1.default.writeFileSync(filePath, fullContent, 'utf8');
|
|
120
|
+
const result = { saved: filePath, chars: content.length, method };
|
|
121
|
+
console.log(JSON.stringify(result));
|
|
122
|
+
}
|
|
123
|
+
main();
|
|
124
|
+
//# sourceMappingURL=fetch-raw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-raw.js","sourceRoot":"","sources":["../../scripts/fetch-raw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type BetterSqlite3 from 'better-sqlite3';
|
|
2
|
+
type Database = BetterSqlite3.Database;
|
|
3
|
+
interface RawEpisode {
|
|
4
|
+
id: string;
|
|
5
|
+
kind: string;
|
|
6
|
+
summary: string;
|
|
7
|
+
body: string | null;
|
|
8
|
+
tags: string | null;
|
|
9
|
+
created_at: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function countRawEpisodes(db: Database): number;
|
|
12
|
+
export declare function needsConsolidation(db: Database, threshold?: number): boolean;
|
|
13
|
+
export declare function groupEpisodesByKind(db: Database): Map<string, RawEpisode[]>;
|
|
14
|
+
export declare function resolveTargetDir(kind: string): string;
|
|
15
|
+
export declare function markConsolidated(db: Database, episodeIds: string[], targetFile: string): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=consolidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation.d.ts","sourceRoot":"","sources":["../../../scripts/lib/consolidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAIhD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAEvC,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAGrD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,GAAE,MAAgC,GAAG,OAAO,CAErG;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAe3E;AASD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAc7F"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.countRawEpisodes = countRawEpisodes;
|
|
4
|
+
exports.needsConsolidation = needsConsolidation;
|
|
5
|
+
exports.groupEpisodesByKind = groupEpisodesByKind;
|
|
6
|
+
exports.resolveTargetDir = resolveTargetDir;
|
|
7
|
+
exports.markConsolidated = markConsolidated;
|
|
8
|
+
const db_helpers_js_1 = require("./db-helpers.js");
|
|
9
|
+
const constants_js_1 = require("./constants.js");
|
|
10
|
+
function countRawEpisodes(db) {
|
|
11
|
+
const row = (0, db_helpers_js_1.dbGet)(db, "SELECT COUNT(*) as cnt FROM episodes WHERE consolidation_status = 'raw' OR consolidation_status IS NULL");
|
|
12
|
+
return row?.cnt ?? 0;
|
|
13
|
+
}
|
|
14
|
+
function needsConsolidation(db, threshold = constants_js_1.CONSOLIDATION_THRESHOLD) {
|
|
15
|
+
return countRawEpisodes(db) >= threshold;
|
|
16
|
+
}
|
|
17
|
+
function groupEpisodesByKind(db) {
|
|
18
|
+
const rows = (0, db_helpers_js_1.dbAll)(db, `
|
|
19
|
+
SELECT id, kind, summary, body, tags, created_at
|
|
20
|
+
FROM episodes
|
|
21
|
+
WHERE (consolidation_status = 'raw' OR consolidation_status IS NULL) AND status = 'active'
|
|
22
|
+
ORDER BY kind, created_at
|
|
23
|
+
`);
|
|
24
|
+
const groups = new Map();
|
|
25
|
+
for (const row of rows) {
|
|
26
|
+
const list = groups.get(row.kind) ?? [];
|
|
27
|
+
list.push(row);
|
|
28
|
+
groups.set(row.kind, list);
|
|
29
|
+
}
|
|
30
|
+
return groups;
|
|
31
|
+
}
|
|
32
|
+
const KIND_DIR_MAP = {
|
|
33
|
+
learning: 'learnings',
|
|
34
|
+
discovery: 'insights',
|
|
35
|
+
friction: 'analyses',
|
|
36
|
+
decision: 'decisions',
|
|
37
|
+
};
|
|
38
|
+
function resolveTargetDir(kind) {
|
|
39
|
+
return KIND_DIR_MAP[kind] ?? 'learnings';
|
|
40
|
+
}
|
|
41
|
+
function markConsolidated(db, episodeIds, targetFile) {
|
|
42
|
+
const stmt = db.prepare(`
|
|
43
|
+
UPDATE episodes
|
|
44
|
+
SET consolidation_status = 'consolidated',
|
|
45
|
+
consolidated_into = ?
|
|
46
|
+
WHERE id = ?
|
|
47
|
+
`);
|
|
48
|
+
const transaction = db.transaction(() => {
|
|
49
|
+
for (const id of episodeIds) {
|
|
50
|
+
stmt.run(targetFile, id);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
transaction();
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=consolidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation.js","sourceRoot":"","sources":["../../../scripts/lib/consolidation.ts"],"names":[],"mappings":";;AAeA,4CAGC;AAED,gDAEC;AAED,kDAeC;AASD,4CAEC;AAED,4CAcC;AAjED,mDAA+C;AAC/C,iDAAyD;AAazD,SAAgB,gBAAgB,CAAC,EAAY;IAC3C,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAkB,EAAE,EAAE,yGAAyG,CAAC,CAAC;IAClJ,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,kBAAkB,CAAC,EAAY,EAAE,YAAoB,sCAAuB;IAC1F,OAAO,gBAAgB,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC;AAC3C,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAAY;IAC9C,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAa,EAAE,EAAE;;;;;GAKlC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;AAC3C,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAAY,EAAE,UAAoB,EAAE,UAAkB;IACrF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -27,6 +27,8 @@ export declare const TYPE_TO_DIR: Record<string, string>;
|
|
|
27
27
|
*/
|
|
28
28
|
export declare const CC_MEMORY_PATH_MARKER: string;
|
|
29
29
|
export declare const CC_MEMORY_DIR = "memory";
|
|
30
|
+
export declare const CC_MEMORY_CATEGORY = "cc-memory";
|
|
31
|
+
export declare const CC_MEMORY_BOOST = 1.2;
|
|
30
32
|
export declare function homedir(): string;
|
|
31
33
|
/**
|
|
32
34
|
* Always returns the global ~/.mindlore/ path.
|
|
@@ -80,4 +82,7 @@ export declare const DEFAULT_TOKEN_BUDGET: {
|
|
|
80
82
|
readonly searchResults: 1500;
|
|
81
83
|
readonly perResult: 500;
|
|
82
84
|
};
|
|
85
|
+
export declare const DECAY_HALF_LIFE_DAYS = 30;
|
|
86
|
+
export declare const STALE_THRESHOLD = 0.3;
|
|
87
|
+
export declare const CONSOLIDATION_THRESHOLD = 50;
|
|
83
88
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAqE,CAAC;AACtG,eAAO,MAAM,OAAO,gBAAgB,CAAC;AAErC,eAAO,MAAM,WAAW,kHAUd,CAAC;AAEX,eAAO,MAAM,UAAU,aAA+C,CAAC;AAEvE,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKxC,CAAC;AAEX,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,YAAY,iIAAkI,CAAC;AAC5J,MAAM,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB,4GAA6G,CAAC;AAC5I,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,cAAc,oCAAqC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAS3D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAmC,CAAC;AACtE,eAAO,MAAM,aAAa,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAqE,CAAC;AACtG,eAAO,MAAM,OAAO,gBAAgB,CAAC;AAErC,eAAO,MAAM,WAAW,kHAUd,CAAC;AAEX,eAAO,MAAM,UAAU,aAA+C,CAAC;AAEvE,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKxC,CAAC;AAEX,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,YAAY,iIAAkI,CAAC;AAC5J,MAAM,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB,4GAA6G,CAAC;AAC5I,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE/D,eAAO,MAAM,cAAc,oCAAqC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAS3D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAmC,CAAC;AACtE,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAIpC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC;AAID,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU3D;AAOD,wBAAgB,aAAa,IAAI,OAAO,CAWvC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAED,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,uBAAuB,KAAK,CAAC"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DEFAULT_TOKEN_BUDGET = exports.CC_MEMORY_DIR = exports.CC_MEMORY_PATH_MARKER = exports.TYPE_TO_DIR = exports.QUALITY_HEURISTICS = exports.QUALITY_VALUES = exports.FRONTMATTER_TYPES = exports.FTS5_COLUMNS = exports.EMBEDDING_DIM_CONST = exports.EMBEDDING_MODEL_NAME = exports.SCHEMA_VERSION = exports.VEC_TABLE_NAME = exports.DEFAULT_MODELS = exports.CONFIG_FILE = exports.SKIP_FILES = exports.DIRECTORIES = exports.DB_NAME = exports.GLOBAL_MINDLORE_DIR = exports.MINDLORE_DIR = void 0;
|
|
6
|
+
exports.CONSOLIDATION_THRESHOLD = exports.STALE_THRESHOLD = exports.DECAY_HALF_LIFE_DAYS = exports.DEFAULT_TOKEN_BUDGET = exports.CC_MEMORY_BOOST = exports.CC_MEMORY_CATEGORY = exports.CC_MEMORY_DIR = exports.CC_MEMORY_PATH_MARKER = exports.TYPE_TO_DIR = exports.QUALITY_HEURISTICS = exports.QUALITY_VALUES = exports.FRONTMATTER_TYPES = exports.FTS5_COLUMNS = exports.EMBEDDING_DIM_CONST = exports.EMBEDDING_MODEL_NAME = exports.SCHEMA_VERSION = exports.VEC_TABLE_NAME = exports.DEFAULT_MODELS = exports.CONFIG_FILE = exports.SKIP_FILES = exports.DIRECTORIES = exports.DB_NAME = exports.GLOBAL_MINDLORE_DIR = exports.MINDLORE_DIR = void 0;
|
|
7
7
|
exports.homedir = homedir;
|
|
8
8
|
exports.getActiveMindloreDir = getActiveMindloreDir;
|
|
9
9
|
exports.getAllDbs = getAllDbs;
|
|
@@ -76,6 +76,8 @@ exports.TYPE_TO_DIR = {
|
|
|
76
76
|
*/
|
|
77
77
|
exports.CC_MEMORY_PATH_MARKER = path_1.default.join('.claude', 'projects');
|
|
78
78
|
exports.CC_MEMORY_DIR = 'memory';
|
|
79
|
+
exports.CC_MEMORY_CATEGORY = 'cc-memory';
|
|
80
|
+
exports.CC_MEMORY_BOOST = 1.2;
|
|
79
81
|
function homedir() {
|
|
80
82
|
return os_1.default.homedir();
|
|
81
83
|
}
|
|
@@ -121,9 +123,16 @@ function isContentFile(filePath) {
|
|
|
121
123
|
* From dist/scripts/: ../../hooks/lib/mindlore-common.cjs
|
|
122
124
|
*/
|
|
123
125
|
function resolveHookCommon(callerDir) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
let dir = callerDir;
|
|
127
|
+
for (let i = 0; i < 5; i++) {
|
|
128
|
+
const target = path_1.default.join(dir, 'hooks', 'lib', 'mindlore-common.cjs');
|
|
129
|
+
if (fs_1.default.existsSync(target))
|
|
130
|
+
return target;
|
|
131
|
+
const parent = path_1.default.dirname(dir);
|
|
132
|
+
if (parent === dir)
|
|
133
|
+
break;
|
|
134
|
+
dir = parent;
|
|
135
|
+
}
|
|
127
136
|
return path_1.default.resolve(callerDir, '..', '..', 'hooks', 'lib', 'mindlore-common.cjs');
|
|
128
137
|
}
|
|
129
138
|
/**
|
|
@@ -163,4 +172,7 @@ exports.DEFAULT_TOKEN_BUDGET = {
|
|
|
163
172
|
searchResults: 1500,
|
|
164
173
|
perResult: 500,
|
|
165
174
|
};
|
|
175
|
+
exports.DECAY_HALF_LIFE_DAYS = 30;
|
|
176
|
+
exports.STALE_THRESHOLD = 0.3;
|
|
177
|
+
exports.CONSOLIDATION_THRESHOLD = 50;
|
|
166
178
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,11 @@ type Database = BetterSqlite3.Database;
|
|
|
9
9
|
* Typed wrapper for Statement.get().
|
|
10
10
|
* Returns undefined if no row matches.
|
|
11
11
|
*/
|
|
12
|
-
export declare function dbGet<T extends
|
|
12
|
+
export declare function dbGet<T extends object>(db: Database, sql: string, ...params: unknown[]): T | undefined;
|
|
13
13
|
/**
|
|
14
14
|
* Typed wrapper for Statement.all().
|
|
15
15
|
*/
|
|
16
|
-
export declare function dbAll<T extends
|
|
16
|
+
export declare function dbAll<T extends object>(db: Database, sql: string, ...params: unknown[]): T[];
|
|
17
17
|
/**
|
|
18
18
|
* Typed wrapper for Database.pragma().
|
|
19
19
|
*/
|
|
@@ -33,5 +33,15 @@ export declare function ensureVecTable(db: Database): boolean;
|
|
|
33
33
|
* Check if documents_vec table exists and is functional.
|
|
34
34
|
*/
|
|
35
35
|
export declare function hasVecTable(db: Database): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Open a readonly DB, run fn, close DB. Returns undefined on error.
|
|
38
|
+
*/
|
|
39
|
+
export declare function withReadonlyDb<T>(dbPath: string, fn: (db: Database) => T): T | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Open a database with existence check. Returns null if file missing or error.
|
|
42
|
+
*/
|
|
43
|
+
export declare function openDatabaseTs(dbPath: string, options?: {
|
|
44
|
+
readonly?: boolean;
|
|
45
|
+
}): Database | null;
|
|
36
46
|
export {};
|
|
37
47
|
//# sourceMappingURL=db-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-helpers.d.ts","sourceRoot":"","sources":["../../../scripts/lib/db-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"db-helpers.d.ts","sourceRoot":"","sources":["../../../scripts/lib/db-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAMvC;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,CAAC,GAAG,SAAS,CAQf;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,EAAE,EAAE,QAAQ,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,CAAC,EAAE,CAIL;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAI7D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAQnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAcpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAOjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,CAAC,GACtB,CAAC,GAAG,SAAS,CAUf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/B,QAAQ,GAAG,IAAI,CAOjB"}
|