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.
Files changed (144) hide show
  1. package/README.md +16 -2
  2. package/dist/scripts/cc-memory-bulk-sync.d.ts +26 -0
  3. package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -0
  4. package/dist/scripts/cc-memory-bulk-sync.js +177 -0
  5. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -0
  6. package/dist/scripts/fetch-raw.d.ts +2 -0
  7. package/dist/scripts/fetch-raw.d.ts.map +1 -0
  8. package/dist/scripts/fetch-raw.js +124 -0
  9. package/dist/scripts/fetch-raw.js.map +1 -0
  10. package/dist/scripts/lib/consolidation.d.ts +17 -0
  11. package/dist/scripts/lib/consolidation.d.ts.map +1 -0
  12. package/dist/scripts/lib/consolidation.js +55 -0
  13. package/dist/scripts/lib/consolidation.js.map +1 -0
  14. package/dist/scripts/lib/constants.d.ts +5 -0
  15. package/dist/scripts/lib/constants.d.ts.map +1 -1
  16. package/dist/scripts/lib/constants.js +16 -4
  17. package/dist/scripts/lib/constants.js.map +1 -1
  18. package/dist/scripts/lib/db-helpers.d.ts +12 -2
  19. package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
  20. package/dist/scripts/lib/db-helpers.js +36 -0
  21. package/dist/scripts/lib/db-helpers.js.map +1 -1
  22. package/dist/scripts/lib/decay.d.ts +21 -0
  23. package/dist/scripts/lib/decay.d.ts.map +1 -0
  24. package/dist/scripts/lib/decay.js +50 -0
  25. package/dist/scripts/lib/decay.js.map +1 -0
  26. package/dist/scripts/lib/hybrid-search.d.ts +0 -2
  27. package/dist/scripts/lib/hybrid-search.d.ts.map +1 -1
  28. package/dist/scripts/lib/hybrid-search.js +7 -1
  29. package/dist/scripts/lib/hybrid-search.js.map +1 -1
  30. package/dist/scripts/lib/migrations-v052.d.ts +3 -0
  31. package/dist/scripts/lib/migrations-v052.d.ts.map +1 -0
  32. package/dist/scripts/lib/migrations-v052.js +23 -0
  33. package/dist/scripts/lib/migrations-v052.js.map +1 -0
  34. package/dist/scripts/lib/migrations-v053.d.ts +3 -0
  35. package/dist/scripts/lib/migrations-v053.d.ts.map +1 -0
  36. package/dist/scripts/lib/migrations-v053.js +52 -0
  37. package/dist/scripts/lib/migrations-v053.js.map +1 -0
  38. package/dist/scripts/lib/skeleton.d.ts +2 -0
  39. package/dist/scripts/lib/skeleton.d.ts.map +1 -0
  40. package/dist/scripts/lib/skeleton.js +99 -0
  41. package/dist/scripts/lib/skeleton.js.map +1 -0
  42. package/dist/scripts/lib/skill-memory.d.ts +13 -0
  43. package/dist/scripts/lib/skill-memory.d.ts.map +1 -0
  44. package/dist/scripts/lib/skill-memory.js +94 -0
  45. package/dist/scripts/lib/skill-memory.js.map +1 -0
  46. package/dist/scripts/mindlore-backup.d.ts +1 -1
  47. package/dist/scripts/mindlore-backup.d.ts.map +1 -1
  48. package/dist/scripts/mindlore-backup.js +23 -0
  49. package/dist/scripts/mindlore-backup.js.map +1 -1
  50. package/dist/scripts/mindlore-fts5-index.js +3 -1
  51. package/dist/scripts/mindlore-fts5-index.js.map +1 -1
  52. package/dist/scripts/mindlore-health-check.d.ts +1 -1
  53. package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
  54. package/dist/scripts/mindlore-health-check.js +138 -136
  55. package/dist/scripts/mindlore-health-check.js.map +1 -1
  56. package/dist/tests/catch-up.test.d.ts +2 -0
  57. package/dist/tests/catch-up.test.d.ts.map +1 -0
  58. package/dist/tests/catch-up.test.js +88 -0
  59. package/dist/tests/catch-up.test.js.map +1 -0
  60. package/dist/tests/cc-memory-bulk-sync.test.d.ts +2 -0
  61. package/dist/tests/cc-memory-bulk-sync.test.d.ts.map +1 -0
  62. package/dist/tests/cc-memory-bulk-sync.test.js +116 -0
  63. package/dist/tests/cc-memory-bulk-sync.test.js.map +1 -0
  64. package/dist/tests/consolidation.test.d.ts +2 -0
  65. package/dist/tests/consolidation.test.d.ts.map +1 -0
  66. package/dist/tests/consolidation.test.js +77 -0
  67. package/dist/tests/consolidation.test.js.map +1 -0
  68. package/dist/tests/decay.test.d.ts +2 -0
  69. package/dist/tests/decay.test.d.ts.map +1 -0
  70. package/dist/tests/decay.test.js +92 -0
  71. package/dist/tests/decay.test.js.map +1 -0
  72. package/dist/tests/episode-file.test.js +9 -6
  73. package/dist/tests/episode-file.test.js.map +1 -1
  74. package/dist/tests/fetch-raw.test.d.ts +2 -0
  75. package/dist/tests/fetch-raw.test.d.ts.map +1 -0
  76. package/dist/tests/fetch-raw.test.js +43 -0
  77. package/dist/tests/fetch-raw.test.js.map +1 -0
  78. package/dist/tests/git-snapshot.test.d.ts +2 -0
  79. package/dist/tests/git-snapshot.test.d.ts.map +1 -0
  80. package/dist/tests/git-snapshot.test.js +36 -0
  81. package/dist/tests/git-snapshot.test.js.map +1 -0
  82. package/dist/tests/migrations-v053.test.d.ts +2 -0
  83. package/dist/tests/migrations-v053.test.d.ts.map +1 -0
  84. package/dist/tests/migrations-v053.test.js +113 -0
  85. package/dist/tests/migrations-v053.test.js.map +1 -0
  86. package/dist/tests/recall-telemetry.test.d.ts +2 -0
  87. package/dist/tests/recall-telemetry.test.d.ts.map +1 -0
  88. package/dist/tests/recall-telemetry.test.js +56 -0
  89. package/dist/tests/recall-telemetry.test.js.map +1 -0
  90. package/dist/tests/resolve-hook-common.test.d.ts +2 -0
  91. package/dist/tests/resolve-hook-common.test.d.ts.map +1 -0
  92. package/dist/tests/resolve-hook-common.test.js +30 -0
  93. package/dist/tests/resolve-hook-common.test.js.map +1 -0
  94. package/dist/tests/search-offload.test.d.ts +2 -0
  95. package/dist/tests/search-offload.test.d.ts.map +1 -0
  96. package/dist/tests/search-offload.test.js +34 -0
  97. package/dist/tests/search-offload.test.js.map +1 -0
  98. package/dist/tests/skeleton.test.d.ts +2 -0
  99. package/dist/tests/skeleton.test.d.ts.map +1 -0
  100. package/dist/tests/skeleton.test.js +116 -0
  101. package/dist/tests/skeleton.test.js.map +1 -0
  102. package/dist/tests/skill-memory-api.test.d.ts +2 -0
  103. package/dist/tests/skill-memory-api.test.d.ts.map +1 -0
  104. package/dist/tests/skill-memory-api.test.js +62 -0
  105. package/dist/tests/skill-memory-api.test.js.map +1 -0
  106. package/dist/tests/skill-memory.test.d.ts +2 -0
  107. package/dist/tests/skill-memory.test.d.ts.map +1 -0
  108. package/dist/tests/skill-memory.test.js +67 -0
  109. package/dist/tests/skill-memory.test.js.map +1 -0
  110. package/dist/tests/skill-path-resolution.test.d.ts +2 -0
  111. package/dist/tests/skill-path-resolution.test.d.ts.map +1 -0
  112. package/dist/tests/skill-path-resolution.test.js +42 -0
  113. package/dist/tests/skill-path-resolution.test.js.map +1 -0
  114. package/dist/tests/wiki-lint.test.d.ts +2 -0
  115. package/dist/tests/wiki-lint.test.d.ts.map +1 -0
  116. package/dist/tests/wiki-lint.test.js +47 -0
  117. package/dist/tests/wiki-lint.test.js.map +1 -0
  118. package/hooks/lib/mindlore-common.cjs +53 -6
  119. package/hooks/mindlore-cwd-changed.cjs +2 -2
  120. package/hooks/mindlore-decision-detector.cjs +2 -2
  121. package/hooks/mindlore-dont-repeat.cjs +2 -2
  122. package/hooks/mindlore-fts5-sync.cjs +2 -2
  123. package/hooks/mindlore-index.cjs +60 -2
  124. package/hooks/mindlore-model-router.cjs +2 -2
  125. package/hooks/mindlore-post-compact.cjs +2 -2
  126. package/hooks/mindlore-post-read.cjs +2 -2
  127. package/hooks/mindlore-pre-compact.cjs +2 -2
  128. package/hooks/mindlore-read-guard.cjs +15 -3
  129. package/hooks/mindlore-research-guard.cjs +2 -2
  130. package/hooks/mindlore-search.cjs +30 -3
  131. package/hooks/mindlore-session-end.cjs +1 -1
  132. package/hooks/mindlore-session-focus.cjs +12 -0
  133. package/package.json +4 -2
  134. package/plugin.json +34 -2
  135. package/skills/mindlore-decide/SKILL.md +9 -0
  136. package/skills/mindlore-diary/SKILL.md +85 -0
  137. package/skills/mindlore-evolve/SKILL.md +24 -1
  138. package/skills/mindlore-health/SKILL.md +10 -1
  139. package/skills/mindlore-ingest/SKILL.md +64 -52
  140. package/skills/mindlore-log/SKILL.md +12 -143
  141. package/skills/mindlore-maintain/SKILL.md +119 -0
  142. package/skills/mindlore-query/SKILL.md +9 -0
  143. package/skills/mindlore-reflect/SKILL.md +131 -0
  144. 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, diary analysis, reflect pattern extraction |
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.1):
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fetch-raw.d.ts.map
@@ -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;AAEtC,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,CAI3D;AAOD,wBAAgB,aAAa,IAAI,OAAO,CAWvC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAED,eAAO,MAAM,oBAAoB;;;;CAIvB,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
- const candidate = path_1.default.resolve(callerDir, '..', 'hooks', 'lib', 'mindlore-common.cjs');
125
- if (fs_1.default.existsSync(candidate))
126
- return candidate;
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":"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"}
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 Record<string, unknown>>(db: Database, sql: string, ...params: unknown[]): T | undefined;
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 Record<string, unknown>>(db: Database, sql: string, ...params: unknown[]): T[];
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;AAIvC;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrD,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,CAAC,MAAM,EAAE,OAAO,CAAC,EACrD,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"}
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"}