mindlore 0.6.9 → 0.7.1

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 (152) hide show
  1. package/README.md +31 -4
  2. package/dist/scripts/bundle-hooks.d.ts +2 -0
  3. package/dist/scripts/bundle-hooks.d.ts.map +1 -0
  4. package/dist/scripts/bundle-hooks.js +68 -0
  5. package/dist/scripts/bundle-hooks.js.map +1 -0
  6. package/dist/scripts/cc-memory-bulk-sync.d.ts.map +1 -1
  7. package/dist/scripts/cc-memory-bulk-sync.js +2 -1
  8. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
  9. package/dist/scripts/cc-session-sync.d.ts.map +1 -1
  10. package/dist/scripts/cc-session-sync.js +3 -2
  11. package/dist/scripts/cc-session-sync.js.map +1 -1
  12. package/dist/scripts/init.js +4 -4
  13. package/dist/scripts/init.js.map +1 -1
  14. package/dist/scripts/lib/constants.d.ts +1 -2
  15. package/dist/scripts/lib/constants.d.ts.map +1 -1
  16. package/dist/scripts/lib/constants.js +2 -22
  17. package/dist/scripts/lib/constants.js.map +1 -1
  18. package/dist/scripts/lib/err-msg.d.ts +2 -0
  19. package/dist/scripts/lib/err-msg.d.ts.map +1 -0
  20. package/dist/scripts/lib/err-msg.js +7 -0
  21. package/dist/scripts/lib/err-msg.js.map +1 -0
  22. package/dist/scripts/lib/mcp-namespace.d.ts +2 -0
  23. package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -0
  24. package/dist/scripts/lib/mcp-namespace.js +21 -0
  25. package/dist/scripts/lib/mcp-namespace.js.map +1 -0
  26. package/dist/scripts/lib/mcp-telemetry.d.ts +11 -0
  27. package/dist/scripts/lib/mcp-telemetry.d.ts.map +1 -0
  28. package/dist/scripts/lib/mcp-telemetry.js +37 -0
  29. package/dist/scripts/lib/mcp-telemetry.js.map +1 -0
  30. package/dist/scripts/lib/mcp-tools.d.ts +10 -0
  31. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -0
  32. package/dist/scripts/lib/mcp-tools.js +121 -0
  33. package/dist/scripts/lib/mcp-tools.js.map +1 -0
  34. package/dist/scripts/lib/rrf.d.ts.map +1 -1
  35. package/dist/scripts/lib/rrf.js +2 -1
  36. package/dist/scripts/lib/rrf.js.map +1 -1
  37. package/dist/scripts/lib/search-engine.d.ts +1 -0
  38. package/dist/scripts/lib/search-engine.d.ts.map +1 -1
  39. package/dist/scripts/lib/search-engine.js +9 -5
  40. package/dist/scripts/lib/search-engine.js.map +1 -1
  41. package/dist/scripts/lib/slugify.d.ts +2 -0
  42. package/dist/scripts/lib/slugify.d.ts.map +1 -0
  43. package/dist/scripts/lib/slugify.js +13 -0
  44. package/dist/scripts/lib/slugify.js.map +1 -0
  45. package/dist/scripts/lib/smart-snippet.d.ts +9 -0
  46. package/dist/scripts/lib/smart-snippet.d.ts.map +1 -0
  47. package/dist/scripts/lib/smart-snippet.js +47 -0
  48. package/dist/scripts/lib/smart-snippet.js.map +1 -0
  49. package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts +15 -0
  50. package/dist/scripts/lib/tool-adapters/brief-adapter.d.ts.map +1 -0
  51. package/dist/scripts/lib/tool-adapters/brief-adapter.js +66 -0
  52. package/dist/scripts/lib/tool-adapters/brief-adapter.js.map +1 -0
  53. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +31 -0
  54. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -0
  55. package/dist/scripts/lib/tool-adapters/decide-adapter.js +71 -0
  56. package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -0
  57. package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts +16 -0
  58. package/dist/scripts/lib/tool-adapters/ingest-adapter.d.ts.map +1 -0
  59. package/dist/scripts/lib/tool-adapters/ingest-adapter.js +58 -0
  60. package/dist/scripts/lib/tool-adapters/ingest-adapter.js.map +1 -0
  61. package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts +20 -0
  62. package/dist/scripts/lib/tool-adapters/recall-adapter.d.ts.map +1 -0
  63. package/dist/scripts/lib/tool-adapters/recall-adapter.js +69 -0
  64. package/dist/scripts/lib/tool-adapters/recall-adapter.js.map +1 -0
  65. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +22 -0
  66. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -0
  67. package/dist/scripts/lib/tool-adapters/search-adapter.js +32 -0
  68. package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -0
  69. package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts +15 -0
  70. package/dist/scripts/lib/tool-adapters/stats-adapter.d.ts.map +1 -0
  71. package/dist/scripts/lib/tool-adapters/stats-adapter.js +66 -0
  72. package/dist/scripts/lib/tool-adapters/stats-adapter.js.map +1 -0
  73. package/dist/scripts/maintain-cleanup.d.ts.map +1 -1
  74. package/dist/scripts/maintain-cleanup.js +3 -2
  75. package/dist/scripts/maintain-cleanup.js.map +1 -1
  76. package/dist/scripts/mcp-server.d.ts +3 -0
  77. package/dist/scripts/mcp-server.d.ts.map +1 -0
  78. package/dist/scripts/mcp-server.js +85 -0
  79. package/dist/scripts/mcp-server.js.map +1 -0
  80. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  81. package/dist/scripts/mindlore-doctor.js +4 -6
  82. package/dist/scripts/mindlore-doctor.js.map +1 -1
  83. package/dist/scripts/mindlore-fts5-index.js +2 -2
  84. package/dist/scripts/mindlore-fts5-index.js.map +1 -1
  85. package/dist/scripts/mindlore-health-check.d.ts.map +1 -1
  86. package/dist/scripts/mindlore-health-check.js +2 -2
  87. package/dist/scripts/mindlore-health-check.js.map +1 -1
  88. package/dist/scripts/validate-manifest-cli.js +2 -2
  89. package/dist/scripts/validate-manifest-cli.js.map +1 -1
  90. package/dist/tests/err-msg.test.d.ts +2 -0
  91. package/dist/tests/err-msg.test.d.ts.map +1 -0
  92. package/dist/tests/err-msg.test.js +24 -0
  93. package/dist/tests/err-msg.test.js.map +1 -0
  94. package/dist/tests/hook-smoke.test.js +1 -1
  95. package/dist/tests/hook-smoke.test.js.map +1 -1
  96. package/dist/tests/manifest-v2.test.js +0 -7
  97. package/dist/tests/manifest-v2.test.js.map +1 -1
  98. package/dist/tests/mcp-server.test.d.ts +2 -0
  99. package/dist/tests/mcp-server.test.d.ts.map +1 -0
  100. package/dist/tests/mcp-server.test.js +118 -0
  101. package/dist/tests/mcp-server.test.js.map +1 -0
  102. package/dist/tests/mcp-tools.test.d.ts +2 -0
  103. package/dist/tests/mcp-tools.test.d.ts.map +1 -0
  104. package/dist/tests/mcp-tools.test.js +243 -0
  105. package/dist/tests/mcp-tools.test.js.map +1 -0
  106. package/dist/tests/search-hook.test.js +1 -1
  107. package/dist/tests/search-hook.test.js.map +1 -1
  108. package/dist/tests/smart-snippet.test.d.ts +2 -0
  109. package/dist/tests/smart-snippet.test.d.ts.map +1 -0
  110. package/dist/tests/smart-snippet.test.js +67 -0
  111. package/dist/tests/smart-snippet.test.js.map +1 -0
  112. package/hooks/cc-memory-bulk-sync.cjs +592 -0
  113. package/hooks/cc-session-sync.cjs +842 -0
  114. package/hooks/hooks.json +149 -0
  115. package/hooks/lib/mindlore-common.cjs +2 -2
  116. package/hooks/lib/secure-io.cjs +17 -0
  117. package/hooks/mindlore-cwd-changed.cjs +19 -34
  118. package/hooks/mindlore-decision-detector.cjs +40 -31
  119. package/hooks/mindlore-dont-repeat.cjs +57 -115
  120. package/hooks/mindlore-fts5-sync.cjs +15 -44
  121. package/hooks/mindlore-index.cjs +100 -101
  122. package/hooks/mindlore-model-router.cjs +20 -32
  123. package/hooks/mindlore-post-compact.cjs +26 -42
  124. package/hooks/mindlore-post-read.cjs +35 -60
  125. package/hooks/mindlore-pre-compact.cjs +55 -73
  126. package/hooks/mindlore-read-guard.cjs +28 -51
  127. package/hooks/mindlore-research-guard.cjs +63 -101
  128. package/hooks/mindlore-search.cjs +1142 -93
  129. package/hooks/mindlore-session-end.cjs +155 -276
  130. package/hooks/mindlore-session-focus.cjs +639 -110
  131. package/hooks/src/lib/constants.cjs +15 -0
  132. package/hooks/src/lib/mindlore-common.cjs +975 -0
  133. package/hooks/src/lib/mindlore-common.d.cts +72 -0
  134. package/hooks/src/lib/secure-io.cjs +17 -0
  135. package/hooks/src/lib/types.d.ts +58 -0
  136. package/hooks/src/mindlore-cwd-changed.cjs +57 -0
  137. package/hooks/src/mindlore-decision-detector.cjs +54 -0
  138. package/hooks/src/mindlore-dont-repeat.cjs +222 -0
  139. package/hooks/src/mindlore-fts5-sync.cjs +98 -0
  140. package/hooks/src/mindlore-index.cjs +230 -0
  141. package/hooks/src/mindlore-model-router.cjs +54 -0
  142. package/hooks/src/mindlore-post-compact.cjs +69 -0
  143. package/hooks/src/mindlore-post-read.cjs +106 -0
  144. package/hooks/src/mindlore-pre-compact.cjs +154 -0
  145. package/hooks/src/mindlore-read-guard.cjs +105 -0
  146. package/hooks/src/mindlore-research-guard.cjs +176 -0
  147. package/hooks/src/mindlore-search.cjs +200 -0
  148. package/hooks/src/mindlore-session-end.cjs +511 -0
  149. package/hooks/src/mindlore-session-focus.cjs +256 -0
  150. package/package.json +8 -3
  151. package/plugin.json +7 -1
  152. package/templates/config.json +1 -1
@@ -0,0 +1,592 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __commonJS = (cb, mod) => function __require() {
10
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+
29
+ // dist/scripts/lib/constants.js
30
+ var require_constants = __commonJS({
31
+ "dist/scripts/lib/constants.js"(exports2) {
32
+ "use strict";
33
+ var __importDefault2 = exports2 && exports2.__importDefault || function(mod) {
34
+ return mod && mod.__esModule ? mod : { "default": mod };
35
+ };
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.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
+ exports2.isKnownHookEvent = isKnownHookEvent;
39
+ exports2.isSessionCategory = isSessionCategory;
40
+ exports2.fixVersionTokens = fixVersionTokens;
41
+ exports2.homedir = homedir;
42
+ exports2.getActiveMindloreDir = getActiveMindloreDir;
43
+ exports2.getAllDbs = getAllDbs;
44
+ exports2.getProjectName = getProjectName;
45
+ exports2.log = log;
46
+ exports2.isContentFile = isContentFile;
47
+ exports2.resolveHookCommon = resolveHookCommon;
48
+ exports2.hasYoutubeTranscript = hasYoutubeTranscript;
49
+ var os_12 = __importDefault2(require("os"));
50
+ var fs_12 = __importDefault2(require("fs"));
51
+ var path_12 = __importDefault2(require("path"));
52
+ exports2.KNOWN_HOOK_EVENTS = [
53
+ "SessionStart",
54
+ "SessionEnd",
55
+ "UserPromptSubmit",
56
+ "FileChanged",
57
+ "PreToolUse",
58
+ "PostToolUse",
59
+ "PreCompact",
60
+ "PostCompact",
61
+ "CwdChanged"
62
+ ];
63
+ function isKnownHookEvent(s) {
64
+ return exports2.KNOWN_HOOK_EVENTS.includes(s);
65
+ }
66
+ exports2.MINDLORE_DIR = ".mindlore";
67
+ exports2.GLOBAL_MINDLORE_DIR = process.env.MINDLORE_HOME ?? path_12.default.join(os_12.default.homedir(), exports2.MINDLORE_DIR);
68
+ exports2.DB_NAME = "mindlore.db";
69
+ exports2.DIRECTORIES = [
70
+ "raw",
71
+ "sources",
72
+ "domains",
73
+ "analyses",
74
+ "insights",
75
+ "connections",
76
+ "learnings",
77
+ "diary",
78
+ "decisions",
79
+ "logs",
80
+ "memory"
81
+ ];
82
+ exports2.SKIP_FILES = /* @__PURE__ */ new Set(["INDEX.md", "SCHEMA.md", "log.md"]);
83
+ exports2.DB_BUSY_TIMEOUT_MS = 2e3;
84
+ exports2.MCP_BUSY_TIMEOUT_MS = 5e3;
85
+ exports2.CONFIG_FILE = "config.json";
86
+ exports2.DEFAULT_MODELS = {
87
+ ingest: "haiku",
88
+ evolve: "sonnet",
89
+ explore: "sonnet",
90
+ default: "haiku"
91
+ };
92
+ exports2.SCHEMA_VERSION = 1;
93
+ exports2.CATEGORIES = ["sources", "analyses", "domains", "episodes", "decisions", "raw", "sessions", "cc_memory", "cc-session", "cc-subagent", "diary", "insights", "connections", "learnings", "memory"];
94
+ exports2.SESSION_CATEGORIES = ["cc-subagent", "cc-session"];
95
+ function isSessionCategory(category) {
96
+ return exports2.SESSION_CATEGORIES.includes(category);
97
+ }
98
+ exports2.STOP_WORDS_MIN_LENGTH = 2;
99
+ exports2.TURKISH_WORD_RE = /[^\w\sçğıöşüÇĞİÖŞÜ-]/g;
100
+ exports2.STOP_WORDS = /* @__PURE__ */ new Set([
101
+ // English
102
+ "the",
103
+ "a",
104
+ "an",
105
+ "is",
106
+ "are",
107
+ "was",
108
+ "were",
109
+ "be",
110
+ "been",
111
+ "being",
112
+ "have",
113
+ "has",
114
+ "had",
115
+ "do",
116
+ "does",
117
+ "did",
118
+ "will",
119
+ "would",
120
+ "could",
121
+ "should",
122
+ "may",
123
+ "might",
124
+ "can",
125
+ "shall",
126
+ "to",
127
+ "of",
128
+ "in",
129
+ "for",
130
+ "on",
131
+ "with",
132
+ "at",
133
+ "by",
134
+ "from",
135
+ "as",
136
+ "into",
137
+ "through",
138
+ "during",
139
+ "it",
140
+ "its",
141
+ "this",
142
+ "that",
143
+ "these",
144
+ "those",
145
+ "what",
146
+ "which",
147
+ "who",
148
+ "whom",
149
+ "how",
150
+ "when",
151
+ "where",
152
+ "why",
153
+ "not",
154
+ "no",
155
+ "nor",
156
+ "so",
157
+ "if",
158
+ "or",
159
+ "but",
160
+ "all",
161
+ "each",
162
+ "every",
163
+ "both",
164
+ "few",
165
+ "more",
166
+ "most",
167
+ "other",
168
+ "some",
169
+ "such",
170
+ "only",
171
+ "own",
172
+ "same",
173
+ "than",
174
+ "and",
175
+ "about",
176
+ "between",
177
+ "after",
178
+ "before",
179
+ "above",
180
+ "below",
181
+ "up",
182
+ "down",
183
+ "out",
184
+ "very",
185
+ "just",
186
+ "also",
187
+ "now",
188
+ "then",
189
+ "here",
190
+ "there",
191
+ "too",
192
+ "yet",
193
+ "my",
194
+ "your",
195
+ "his",
196
+ "her",
197
+ "our",
198
+ "their",
199
+ "me",
200
+ "him",
201
+ "us",
202
+ "them",
203
+ "i",
204
+ "you",
205
+ "he",
206
+ "she",
207
+ "we",
208
+ "they",
209
+ // Turkish
210
+ "bir",
211
+ "bu",
212
+ "su",
213
+ "ne",
214
+ "nas\u0131l",
215
+ "neden",
216
+ "var",
217
+ "yok",
218
+ "mi",
219
+ "mu",
220
+ "m\u0131",
221
+ "ile",
222
+ "i\xE7in",
223
+ "de",
224
+ "da",
225
+ "ve",
226
+ "veya",
227
+ "ama",
228
+ "ise",
229
+ "hem",
230
+ "bakal\u0131m",
231
+ "gel",
232
+ "git",
233
+ "yap",
234
+ "et",
235
+ "al",
236
+ "ver",
237
+ "evet",
238
+ "hay\u0131r",
239
+ "tamam",
240
+ "ok",
241
+ "oldu",
242
+ "olur",
243
+ "dur",
244
+ "\u015Fimdi",
245
+ "sonra",
246
+ "\xF6nce",
247
+ "hemen",
248
+ "biraz",
249
+ "lan",
250
+ "ya",
251
+ "ki",
252
+ "abi",
253
+ "hadi",
254
+ "hey",
255
+ "selam",
256
+ "olarak",
257
+ "olan",
258
+ "gibi",
259
+ "kadar",
260
+ "daha",
261
+ "\xE7ok",
262
+ "en",
263
+ "bunu",
264
+ "buna",
265
+ "i\xE7inde",
266
+ "\xFCzerinde",
267
+ "aras\u0131nda",
268
+ "sonucu",
269
+ "taraf\u0131ndan",
270
+ "zaten",
271
+ "gayet",
272
+ "acaba",
273
+ "nedir",
274
+ "midir",
275
+ "mudur",
276
+ // Generic technical
277
+ "hook",
278
+ "file",
279
+ "dosya",
280
+ "kullan",
281
+ "ekle",
282
+ "yaz",
283
+ "oku",
284
+ "\xE7al\u0131\u015Ft\u0131r",
285
+ "kontrol",
286
+ "test",
287
+ "check",
288
+ "run",
289
+ "add",
290
+ "update",
291
+ "config",
292
+ "setup",
293
+ "install",
294
+ "start",
295
+ "stop",
296
+ "create",
297
+ "delete",
298
+ "remove",
299
+ "set",
300
+ "get",
301
+ "list",
302
+ "show",
303
+ "view",
304
+ "open",
305
+ "close",
306
+ "save",
307
+ "load"
308
+ ]);
309
+ var VERSION_RE = /v(\d+)\.(\d+)(?:\.(\d+))?/g;
310
+ function fixVersionTokens(query) {
311
+ return query.replace(VERSION_RE, (_m, a, b, c) => c ? `"v${a} ${b} ${c}"` : `"v${a} ${b}"`);
312
+ }
313
+ exports2.FTS5_COLUMNS = ["path", "slug", "description", "type", "category", "title", "content", "tags", "quality", "date_captured", "project"];
314
+ exports2.FRONTMATTER_TYPES = ["raw", "source", "domain", "analysis", "diary", "decision", "insight", "connection", "learning", "feedback", "user", "project", "reference", "note"];
315
+ exports2.QUALITY_VALUES = ["high", "medium", "low"];
316
+ exports2.QUALITY_HEURISTICS = {
317
+ "github-repo": "high",
318
+ "docs": "high",
319
+ "blog": "medium",
320
+ "video": "medium",
321
+ "x-thread": "medium",
322
+ "text-paste": "low",
323
+ "snippet": "low",
324
+ "forum": "low",
325
+ "cc-session": "low",
326
+ "cc-subagent": "low"
327
+ };
328
+ exports2.TYPE_TO_DIR = {
329
+ raw: "raw",
330
+ source: "sources",
331
+ domain: "domains",
332
+ analysis: "analyses",
333
+ insight: "insights",
334
+ connection: "connections",
335
+ learning: "learnings",
336
+ decision: "decisions",
337
+ diary: "diary",
338
+ feedback: "memory",
339
+ user: "memory",
340
+ project: "memory",
341
+ reference: "memory",
342
+ note: "memory"
343
+ };
344
+ exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
345
+ exports2.CC_MEMORY_DIR = "memory";
346
+ exports2.CC_MEMORY_CATEGORY = "cc-memory";
347
+ exports2.CC_SESSION_CATEGORY = "cc-session";
348
+ exports2.CC_SUBAGENT_CATEGORY = "cc-subagent";
349
+ exports2.CC_MEMORY_BOOST = 1.2;
350
+ function homedir() {
351
+ return os_12.default.homedir();
352
+ }
353
+ function getActiveMindloreDir() {
354
+ return exports2.GLOBAL_MINDLORE_DIR;
355
+ }
356
+ function getAllDbs() {
357
+ const dbPath = path_12.default.join(exports2.GLOBAL_MINDLORE_DIR, exports2.DB_NAME);
358
+ if (fs_12.default.existsSync(dbPath))
359
+ return [dbPath];
360
+ return [];
361
+ }
362
+ function getProjectName() {
363
+ return path_12.default.basename(process.cwd());
364
+ }
365
+ function log(msg) {
366
+ console.log(` ${msg}`);
367
+ }
368
+ function isContentFile(filePath) {
369
+ return !exports2.SKIP_FILES.has(path_12.default.basename(filePath));
370
+ }
371
+ function resolveHookCommon(callerDir) {
372
+ let dir = callerDir;
373
+ for (let i = 0; i < 5; i++) {
374
+ const target = path_12.default.join(dir, "hooks", "lib", "mindlore-common.cjs");
375
+ if (fs_12.default.existsSync(target))
376
+ return target;
377
+ const parent = path_12.default.dirname(dir);
378
+ if (parent === dir)
379
+ break;
380
+ dir = parent;
381
+ }
382
+ return path_12.default.resolve(callerDir, "..", "..", "hooks", "lib", "mindlore-common.cjs");
383
+ }
384
+ function hasYoutubeTranscript() {
385
+ try {
386
+ require.resolve("youtube-transcript");
387
+ return true;
388
+ } catch (_err) {
389
+ return false;
390
+ }
391
+ }
392
+ exports2.DEFAULT_TOKEN_BUDGET = {
393
+ sessionInject: 2e3,
394
+ searchResults: 1500,
395
+ perResult: 500
396
+ };
397
+ exports2.DECAY_HALF_LIFE_DAYS = 30;
398
+ exports2.STALE_THRESHOLD = 0.3;
399
+ exports2.CONSOLIDATION_THRESHOLD = 50;
400
+ }
401
+ });
402
+
403
+ // dist/scripts/lib/sync-helpers.js
404
+ var require_sync_helpers = __commonJS({
405
+ "dist/scripts/lib/sync-helpers.js"(exports2) {
406
+ "use strict";
407
+ Object.defineProperty(exports2, "__esModule", { value: true });
408
+ exports2.UPSERT_HASH_SQL = void 0;
409
+ exports2.getArg = getArg;
410
+ exports2.UPSERT_HASH_SQL = `
411
+ INSERT INTO file_hashes (path, content_hash, last_indexed, source_type)
412
+ VALUES (?, ?, ?, ?)
413
+ ON CONFLICT(path) DO UPDATE SET
414
+ content_hash = excluded.content_hash,
415
+ last_indexed = excluded.last_indexed,
416
+ source_type = excluded.source_type
417
+ `;
418
+ function getArg(args, flag) {
419
+ const idx = args.indexOf(flag);
420
+ return idx !== -1 ? args[idx + 1] : void 0;
421
+ }
422
+ }
423
+ });
424
+
425
+ // dist/scripts/lib/secure-io.js
426
+ var require_secure_io = __commonJS({
427
+ "dist/scripts/lib/secure-io.js"(exports2) {
428
+ "use strict";
429
+ var __importDefault2 = exports2 && exports2.__importDefault || function(mod) {
430
+ return mod && mod.__esModule ? mod : { "default": mod };
431
+ };
432
+ Object.defineProperty(exports2, "__esModule", { value: true });
433
+ exports2.safeMkdir = safeMkdir;
434
+ exports2.safeWriteFile = safeWriteFile;
435
+ exports2.safeWriteJson = safeWriteJson;
436
+ var fs_12 = __importDefault2(require("fs"));
437
+ function safeMkdir(dirPath) {
438
+ fs_12.default.mkdirSync(dirPath, { recursive: true, mode: 448 });
439
+ }
440
+ function safeWriteFile(filePath, data) {
441
+ fs_12.default.writeFileSync(filePath, data, { encoding: "utf8", mode: 384 });
442
+ }
443
+ function safeWriteJson(filePath, obj) {
444
+ safeWriteFile(filePath, JSON.stringify(obj, null, 2) + "\n");
445
+ }
446
+ }
447
+ });
448
+
449
+ // dist/scripts/lib/err-msg.js
450
+ var require_err_msg = __commonJS({
451
+ "dist/scripts/lib/err-msg.js"(exports2) {
452
+ "use strict";
453
+ Object.defineProperty(exports2, "__esModule", { value: true });
454
+ exports2.errMsg = errMsg;
455
+ function errMsg(err) {
456
+ return err instanceof Error ? err.message : String(err);
457
+ }
458
+ }
459
+ });
460
+
461
+ // dist/scripts/cc-memory-bulk-sync.js
462
+ var __importDefault = exports && exports.__importDefault || function(mod) {
463
+ return mod && mod.__esModule ? mod : { "default": mod };
464
+ };
465
+ Object.defineProperty(exports, "__esModule", { value: true });
466
+ exports.discoverCcMemoryFiles = discoverCcMemoryFiles;
467
+ exports.syncToDb = syncToDb;
468
+ var fs_1 = __importDefault(require("fs"));
469
+ var path_1 = __importDefault(require("path"));
470
+ var os_1 = __importDefault(require("os"));
471
+ var constants_js_1 = require_constants();
472
+ var sync_helpers_js_1 = require_sync_helpers();
473
+ var secure_io_js_1 = require_secure_io();
474
+ var err_msg_js_1 = require_err_msg();
475
+ function discoverCcMemoryFiles(claudeDir) {
476
+ const projectsDir = path_1.default.join(claudeDir, "projects");
477
+ if (!fs_1.default.existsSync(projectsDir))
478
+ return [];
479
+ const results = [];
480
+ let projectEntries;
481
+ try {
482
+ projectEntries = fs_1.default.readdirSync(projectsDir, { withFileTypes: true });
483
+ } catch (_err) {
484
+ return [];
485
+ }
486
+ for (const projectEntry of projectEntries) {
487
+ if (!projectEntry.isDirectory())
488
+ continue;
489
+ const memoryDir = path_1.default.join(projectsDir, projectEntry.name, "memory");
490
+ if (!fs_1.default.existsSync(memoryDir))
491
+ continue;
492
+ let memoryEntries;
493
+ try {
494
+ memoryEntries = fs_1.default.readdirSync(memoryDir, { withFileTypes: true });
495
+ } catch (_err) {
496
+ continue;
497
+ }
498
+ for (const memEntry of memoryEntries) {
499
+ if (!memEntry.isFile())
500
+ continue;
501
+ if (!memEntry.name.endsWith(".md"))
502
+ continue;
503
+ if (memEntry.name === "MEMORY.md")
504
+ continue;
505
+ results.push(path_1.default.join(memoryDir, memEntry.name));
506
+ }
507
+ }
508
+ return results;
509
+ }
510
+ function safePrefix(dirName) {
511
+ return dirName.replace(/[/\\]/g, "_").replace(/\.\./g, "_").replace(/[^\w\-. ]/g, "_").slice(0, 80);
512
+ }
513
+ function syncToDb(dbPath, files, mindloreDir) {
514
+ const result = { synced: 0, skipped: 0, errors: [] };
515
+ if (files.length === 0)
516
+ return result;
517
+ const common = require((0, constants_js_1.resolveHookCommon)(__dirname));
518
+ const { sha256, parseFrontmatter, extractFtsMetadata, insertFtsRow, openDatabase } = common;
519
+ const db = openDatabase(dbPath);
520
+ if (!db) {
521
+ result.errors.push(`Cannot open DB at ${dbPath}`);
522
+ return result;
523
+ }
524
+ const memoryDestDir = path_1.default.join(mindloreDir, "memory");
525
+ (0, secure_io_js_1.safeMkdir)(memoryDestDir);
526
+ const getHash = db.prepare("SELECT content_hash FROM file_hashes WHERE path = ?");
527
+ const upsertHash = db.prepare(sync_helpers_js_1.UPSERT_HASH_SQL);
528
+ const deleteFts = db.prepare("DELETE FROM mindlore_fts WHERE path = ?");
529
+ const now = (/* @__PURE__ */ new Date()).toISOString();
530
+ const ops = [];
531
+ for (const srcPath of files) {
532
+ try {
533
+ const projectName = safePrefix(path_1.default.basename(path_1.default.dirname(path_1.default.dirname(srcPath))));
534
+ const destFileName = `${projectName}_${path_1.default.basename(srcPath)}`;
535
+ const destPath = path_1.default.join(memoryDestDir, destFileName);
536
+ const content = fs_1.default.readFileSync(srcPath, "utf8").replace(/\r\n/g, "\n");
537
+ const hash = sha256(content);
538
+ const existing = getHash.get(destPath);
539
+ if (existing && existing.content_hash === hash) {
540
+ result.skipped++;
541
+ continue;
542
+ }
543
+ const { meta, body } = parseFrontmatter(content);
544
+ const ftsFields = extractFtsMetadata(meta, body, destPath, mindloreDir);
545
+ fs_1.default.copyFileSync(srcPath, destPath);
546
+ ops.push({ srcPath, destPath, hash, ftsFields, body, projectName });
547
+ } catch (err) {
548
+ const msg = (0, err_msg_js_1.errMsg)(err);
549
+ result.errors.push(`${path_1.default.basename(srcPath)}: ${msg}`);
550
+ }
551
+ }
552
+ const transaction = db.transaction(() => {
553
+ for (const op of ops) {
554
+ deleteFts.run(op.destPath);
555
+ insertFtsRow(db, {
556
+ path: op.destPath,
557
+ slug: op.ftsFields.slug,
558
+ description: op.ftsFields.description,
559
+ type: op.ftsFields.type,
560
+ category: constants_js_1.CC_MEMORY_CATEGORY,
561
+ title: op.ftsFields.title,
562
+ content: op.body,
563
+ tags: op.ftsFields.tags,
564
+ quality: op.ftsFields.quality,
565
+ dateCaptured: op.ftsFields.dateCaptured,
566
+ project: op.projectName
567
+ });
568
+ upsertHash.run(op.destPath, op.hash, now, constants_js_1.CC_MEMORY_CATEGORY);
569
+ result.synced++;
570
+ }
571
+ });
572
+ transaction();
573
+ db.close();
574
+ return result;
575
+ }
576
+ var isMain = typeof require !== "undefined" && require.main === module;
577
+ if (isMain) {
578
+ const args = process.argv.slice(2);
579
+ const claudeDir = (0, sync_helpers_js_1.getArg)(args, "--claude-dir") ?? path_1.default.join(os_1.default.homedir(), ".claude");
580
+ const mindloreDir = (0, sync_helpers_js_1.getArg)(args, "--mindlore-dir") ?? constants_js_1.GLOBAL_MINDLORE_DIR;
581
+ const dbPath = (0, sync_helpers_js_1.getArg)(args, "--db") ?? path_1.default.join(mindloreDir, constants_js_1.DB_NAME);
582
+ const files = discoverCcMemoryFiles(claudeDir);
583
+ console.log(` Discovered ${files.length} CC memory file(s)`);
584
+ const result = syncToDb(dbPath, files, mindloreDir);
585
+ console.log(` Synced: ${result.synced}, Skipped: ${result.skipped}, Errors: ${result.errors.length}`);
586
+ if (result.errors.length > 0) {
587
+ for (const e of result.errors) {
588
+ console.error(` ERROR: ${e}`);
589
+ }
590
+ process.exit(1);
591
+ }
592
+ }