mindlore 0.7.3 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +18 -0
  4. package/dist/scripts/bundle-hooks.js +3 -4
  5. package/dist/scripts/bundle-hooks.js.map +1 -1
  6. package/dist/scripts/init.js +74 -20
  7. package/dist/scripts/init.js.map +1 -1
  8. package/dist/scripts/lib/constants.d.ts +21 -1
  9. package/dist/scripts/lib/constants.d.ts.map +1 -1
  10. package/dist/scripts/lib/constants.js +33 -7
  11. package/dist/scripts/lib/constants.js.map +1 -1
  12. package/dist/scripts/lib/db-helpers.d.ts +1 -0
  13. package/dist/scripts/lib/db-helpers.d.ts.map +1 -1
  14. package/dist/scripts/lib/db-helpers.js +37 -0
  15. package/dist/scripts/lib/db-helpers.js.map +1 -1
  16. package/dist/scripts/lib/detect-plugin.js +1 -1
  17. package/dist/scripts/lib/detect-plugin.js.map +1 -1
  18. package/dist/scripts/lib/episodes.d.ts +1 -1
  19. package/dist/scripts/lib/episodes.d.ts.map +1 -1
  20. package/dist/scripts/lib/episodes.js +1 -1
  21. package/dist/scripts/lib/episodes.js.map +1 -1
  22. package/dist/scripts/lib/hook-helpers.d.ts +8 -0
  23. package/dist/scripts/lib/hook-helpers.d.ts.map +1 -0
  24. package/dist/scripts/lib/hook-helpers.js +27 -0
  25. package/dist/scripts/lib/hook-helpers.js.map +1 -0
  26. package/dist/scripts/lib/mcp-namespace.d.ts.map +1 -1
  27. package/dist/scripts/lib/mcp-namespace.js +0 -5
  28. package/dist/scripts/lib/mcp-namespace.js.map +1 -1
  29. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
  30. package/dist/scripts/lib/mcp-tools.js +3 -19
  31. package/dist/scripts/lib/mcp-tools.js.map +1 -1
  32. package/dist/scripts/lib/relation-helpers.js +1 -1
  33. package/dist/scripts/lib/relation-helpers.js.map +1 -1
  34. package/dist/scripts/lib/session-payload.d.ts.map +1 -1
  35. package/dist/scripts/lib/session-payload.js +7 -21
  36. package/dist/scripts/lib/session-payload.js.map +1 -1
  37. package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -1
  38. package/dist/scripts/lib/settings-cleanup.js +2 -2
  39. package/dist/scripts/lib/settings-cleanup.js.map +1 -1
  40. package/dist/scripts/lib/skill-runner.d.ts +3 -0
  41. package/dist/scripts/lib/skill-runner.d.ts.map +1 -0
  42. package/dist/scripts/lib/skill-runner.js +78 -0
  43. package/dist/scripts/lib/skill-runner.js.map +1 -0
  44. package/dist/scripts/lib/telemetry-scan.d.ts +19 -0
  45. package/dist/scripts/lib/telemetry-scan.d.ts.map +1 -0
  46. package/dist/scripts/lib/telemetry-scan.js +42 -0
  47. package/dist/scripts/lib/telemetry-scan.js.map +1 -0
  48. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts +1 -1
  49. package/dist/scripts/lib/tool-adapters/decide-adapter.d.ts.map +1 -1
  50. package/dist/scripts/lib/tool-adapters/decide-adapter.js +5 -0
  51. package/dist/scripts/lib/tool-adapters/decide-adapter.js.map +1 -1
  52. package/dist/scripts/mindlore-clean-cache.d.ts +3 -0
  53. package/dist/scripts/mindlore-clean-cache.d.ts.map +1 -0
  54. package/dist/scripts/mindlore-clean-cache.js +65 -0
  55. package/dist/scripts/mindlore-clean-cache.js.map +1 -0
  56. package/dist/scripts/mindlore-doctor.d.ts +3 -0
  57. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  58. package/dist/scripts/mindlore-doctor.js +84 -15
  59. package/dist/scripts/mindlore-doctor.js.map +1 -1
  60. package/dist/scripts/mindlore-health-check.js +2 -2
  61. package/dist/scripts/mindlore-health-check.js.map +1 -1
  62. package/dist/scripts/mindlore-perf.d.ts +3 -1
  63. package/dist/scripts/mindlore-perf.d.ts.map +1 -1
  64. package/dist/scripts/mindlore-perf.js +13 -6
  65. package/dist/scripts/mindlore-perf.js.map +1 -1
  66. package/dist/scripts/reflect-failure-scan.d.ts +3 -0
  67. package/dist/scripts/reflect-failure-scan.d.ts.map +1 -0
  68. package/dist/scripts/reflect-failure-scan.js +41 -0
  69. package/dist/scripts/reflect-failure-scan.js.map +1 -0
  70. package/dist/tests/clean-cache.test.d.ts +2 -0
  71. package/dist/tests/clean-cache.test.d.ts.map +1 -0
  72. package/dist/tests/clean-cache.test.js +59 -0
  73. package/dist/tests/clean-cache.test.js.map +1 -0
  74. package/dist/tests/db-helpers-vec.test.d.ts +2 -0
  75. package/dist/tests/db-helpers-vec.test.d.ts.map +1 -0
  76. package/dist/tests/db-helpers-vec.test.js +32 -0
  77. package/dist/tests/db-helpers-vec.test.js.map +1 -0
  78. package/dist/tests/db-helpers.test.d.ts +2 -0
  79. package/dist/tests/db-helpers.test.d.ts.map +1 -0
  80. package/dist/tests/db-helpers.test.js +30 -0
  81. package/dist/tests/db-helpers.test.js.map +1 -0
  82. package/dist/tests/diary.test.js +3 -3
  83. package/dist/tests/diary.test.js.map +1 -1
  84. package/dist/tests/doctor.test.js +39 -0
  85. package/dist/tests/doctor.test.js.map +1 -1
  86. package/dist/tests/dont-repeat-dedup.test.js +13 -1
  87. package/dist/tests/dont-repeat-dedup.test.js.map +1 -1
  88. package/dist/tests/episodes-inject.test.js +5 -5
  89. package/dist/tests/episodes-inject.test.js.map +1 -1
  90. package/dist/tests/fts5-sync.test.js +11 -117
  91. package/dist/tests/fts5-sync.test.js.map +1 -1
  92. package/dist/tests/hook-helpers.test.d.ts +2 -0
  93. package/dist/tests/hook-helpers.test.d.ts.map +1 -0
  94. package/dist/tests/hook-helpers.test.js +44 -0
  95. package/dist/tests/hook-helpers.test.js.map +1 -0
  96. package/dist/tests/init-spawn-cleanup.test.d.ts +2 -0
  97. package/dist/tests/init-spawn-cleanup.test.d.ts.map +1 -0
  98. package/dist/tests/init-spawn-cleanup.test.js +21 -0
  99. package/dist/tests/init-spawn-cleanup.test.js.map +1 -0
  100. package/dist/tests/install-matrix.test.js +39 -0
  101. package/dist/tests/install-matrix.test.js.map +1 -1
  102. package/dist/tests/latency-budget.test.d.ts +2 -0
  103. package/dist/tests/latency-budget.test.d.ts.map +1 -0
  104. package/dist/tests/latency-budget.test.js +37 -0
  105. package/dist/tests/latency-budget.test.js.map +1 -0
  106. package/dist/tests/learnings-loader.test.d.ts +2 -0
  107. package/dist/tests/learnings-loader.test.d.ts.map +1 -0
  108. package/dist/tests/learnings-loader.test.js +64 -0
  109. package/dist/tests/learnings-loader.test.js.map +1 -0
  110. package/dist/tests/mcp-namespace.test.d.ts +2 -0
  111. package/dist/tests/mcp-namespace.test.d.ts.map +1 -0
  112. package/dist/tests/mcp-namespace.test.js +41 -0
  113. package/dist/tests/mcp-namespace.test.js.map +1 -0
  114. package/dist/tests/mindlore-home-env.test.d.ts +2 -0
  115. package/dist/tests/mindlore-home-env.test.d.ts.map +1 -0
  116. package/dist/tests/mindlore-home-env.test.js +33 -0
  117. package/dist/tests/mindlore-home-env.test.js.map +1 -0
  118. package/dist/tests/no-hardcoded-cache.test.d.ts +2 -0
  119. package/dist/tests/no-hardcoded-cache.test.d.ts.map +1 -0
  120. package/dist/tests/no-hardcoded-cache.test.js +40 -0
  121. package/dist/tests/no-hardcoded-cache.test.js.map +1 -0
  122. package/dist/tests/nomination.test.js +1 -1
  123. package/dist/tests/nomination.test.js.map +1 -1
  124. package/dist/tests/reflect-failure-scan.test.d.ts +2 -0
  125. package/dist/tests/reflect-failure-scan.test.d.ts.map +1 -0
  126. package/dist/tests/reflect-failure-scan.test.js +49 -0
  127. package/dist/tests/reflect-failure-scan.test.js.map +1 -0
  128. package/dist/tests/reflect-trigger.test.d.ts +2 -0
  129. package/dist/tests/reflect-trigger.test.d.ts.map +1 -0
  130. package/dist/tests/reflect-trigger.test.js +31 -0
  131. package/dist/tests/reflect-trigger.test.js.map +1 -0
  132. package/dist/tests/session-focus-episode-counter.test.d.ts +2 -0
  133. package/dist/tests/session-focus-episode-counter.test.d.ts.map +1 -0
  134. package/dist/tests/session-focus-episode-counter.test.js +41 -0
  135. package/dist/tests/session-focus-episode-counter.test.js.map +1 -0
  136. package/dist/tests/session-focus-learnings-inject.test.d.ts +2 -0
  137. package/dist/tests/session-focus-learnings-inject.test.d.ts.map +1 -0
  138. package/dist/tests/session-focus-learnings-inject.test.js +29 -0
  139. package/dist/tests/session-focus-learnings-inject.test.js.map +1 -0
  140. package/dist/tests/session-focus-nomination-inject.test.d.ts +2 -0
  141. package/dist/tests/session-focus-nomination-inject.test.d.ts.map +1 -0
  142. package/dist/tests/session-focus-nomination-inject.test.js +50 -0
  143. package/dist/tests/session-focus-nomination-inject.test.js.map +1 -0
  144. package/dist/tests/session-focus-reflect-nudge.test.d.ts +2 -0
  145. package/dist/tests/session-focus-reflect-nudge.test.d.ts.map +1 -0
  146. package/dist/tests/session-focus-reflect-nudge.test.js +62 -0
  147. package/dist/tests/session-focus-reflect-nudge.test.js.map +1 -0
  148. package/dist/tests/session-payload.test.js +19 -17
  149. package/dist/tests/session-payload.test.js.map +1 -1
  150. package/dist/tests/skill-md-uses-runner.test.d.ts +2 -0
  151. package/dist/tests/skill-md-uses-runner.test.d.ts.map +1 -0
  152. package/dist/tests/skill-md-uses-runner.test.js +31 -0
  153. package/dist/tests/skill-md-uses-runner.test.js.map +1 -0
  154. package/dist/tests/skill-runner-failure-e2e.test.d.ts +10 -0
  155. package/dist/tests/skill-runner-failure-e2e.test.d.ts.map +1 -0
  156. package/dist/tests/skill-runner-failure-e2e.test.js +64 -0
  157. package/dist/tests/skill-runner-failure-e2e.test.js.map +1 -0
  158. package/dist/tests/skill-runner.test.d.ts +2 -0
  159. package/dist/tests/skill-runner.test.d.ts.map +1 -0
  160. package/dist/tests/skill-runner.test.js +55 -0
  161. package/dist/tests/skill-runner.test.js.map +1 -0
  162. package/dist/tests/sync-scripts.test.d.ts +2 -0
  163. package/dist/tests/sync-scripts.test.d.ts.map +1 -0
  164. package/dist/tests/sync-scripts.test.js +26 -0
  165. package/dist/tests/sync-scripts.test.js.map +1 -0
  166. package/dist/tests/telemetry-perf.test.js +9 -8
  167. package/dist/tests/telemetry-perf.test.js.map +1 -1
  168. package/dist/tests/telemetry-scan.test.d.ts +2 -0
  169. package/dist/tests/telemetry-scan.test.d.ts.map +1 -0
  170. package/dist/tests/telemetry-scan.test.js +32 -0
  171. package/dist/tests/telemetry-scan.test.js.map +1 -0
  172. package/hooks/cc-memory-bulk-sync.cjs +20 -5
  173. package/hooks/cc-session-sync.cjs +20 -5
  174. package/hooks/lib/constants.cjs +1 -1
  175. package/hooks/lib/learnings-loader.cjs +70 -0
  176. package/hooks/lib/mindlore-common.cjs +46 -8
  177. package/hooks/lib/reflect-trigger.cjs +29 -0
  178. package/hooks/lib/sync-scripts.cjs +12 -0
  179. package/hooks/mindlore-fts5-sync.cjs +5 -1
  180. package/hooks/mindlore-search.cjs +116 -14
  181. package/hooks/mindlore-session-focus.cjs +81 -27
  182. package/hooks/src/lib/mindlore-common.cjs +5 -0
  183. package/hooks/src/mindlore-fts5-sync.cjs +7 -4
  184. package/hooks/src/mindlore-search.cjs +19 -11
  185. package/hooks/src/mindlore-session-focus.cjs +48 -6
  186. package/package.json +5 -3
  187. package/plugin.json +1 -1
  188. package/skills/mindlore-decide/SKILL.md +1 -1
  189. package/skills/mindlore-diary/SKILL.md +4 -4
  190. package/skills/mindlore-evolve/SKILL.md +2 -2
  191. package/skills/mindlore-health/SKILL.md +2 -2
  192. package/skills/mindlore-ingest/SKILL.md +7 -7
  193. package/skills/mindlore-log/SKILL.md +1 -1
  194. package/skills/mindlore-maintain/SKILL.md +2 -2
  195. package/skills/mindlore-query/SKILL.md +1 -1
  196. package/skills/mindlore-reflect/SKILL.md +30 -16
  197. package/templates/config.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-scan.test.js","sourceRoot":"","sources":["../../tests/telemetry-scan.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,kEAA6D;AAE7D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAE7E,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC;IAAE,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,SAAS,UAAU,CAAC,GAAG,KAAe;IACpC,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACtF,CAAC;AAED,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACnF,UAAU,CACR,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EACnG,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAC/G,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpG,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,gCAAgC,EAAE,EACzH,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,EAC9H,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAC1I,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,6BAAY,EAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,UAAU,CACR,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EACtG,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CACvG,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,6BAAY,EAAC,YAAY,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,QAAQ,GAAG,IAAA,6BAAY,EAAC,yBAAyB,CAAC,CAAC;IACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
@@ -34,15 +34,17 @@ var require_constants = __commonJS({
34
34
  return mod && mod.__esModule ? mod : { "default": mod };
35
35
  };
36
36
  Object.defineProperty(exports2, "__esModule", { value: true });
37
- exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
37
+ exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.CC_PLUGIN_CACHE_DIR = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
38
38
  exports2.isKnownHookEvent = isKnownHookEvent;
39
39
  exports2.isSessionCategory = isSessionCategory;
40
40
  exports2.fixVersionTokens = fixVersionTokens;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
41
  exports2.homedir = homedir;
43
42
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
43
  exports2.getAllDbs = getAllDbs;
45
44
  exports2.getProjectName = getProjectName;
45
+ exports2.resolveProject = resolveProject;
46
+ exports2.resolveMindloreHome = resolveMindloreHome;
47
+ exports2.resolveTelemetryPath = resolveTelemetryPath;
46
48
  exports2.log = log;
47
49
  exports2.isContentFile = isContentFile;
48
50
  exports2.resolveHookCommon = resolveHookCommon;
@@ -336,9 +338,7 @@ var require_constants = __commonJS({
336
338
  };
337
339
  exports2.MAX_RELATED_SOURCES = 5;
338
340
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
341
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
342
  exports2.TYPE_TO_DIR = {
343
343
  raw: "raw",
344
344
  source: "sources",
@@ -355,6 +355,7 @@ var require_constants = __commonJS({
355
355
  reference: "memory",
356
356
  note: "memory"
357
357
  };
358
+ exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
358
359
  exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
359
360
  exports2.CC_MEMORY_DIR = "memory";
360
361
  exports2.CC_MEMORY_CATEGORY = "cc-memory";
@@ -376,6 +377,20 @@ var require_constants = __commonJS({
376
377
  function getProjectName() {
377
378
  return path_12.default.basename(process.cwd());
378
379
  }
380
+ function resolveProject() {
381
+ if (process.env.MINDLORE_PROJECT)
382
+ return process.env.MINDLORE_PROJECT;
383
+ return getProjectName().toLowerCase();
384
+ }
385
+ function resolveMindloreHome() {
386
+ return process.env.MINDLORE_HOME ?? path_12.default.join(os_12.default.homedir(), exports2.MINDLORE_DIR);
387
+ }
388
+ exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
389
+ exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
390
+ exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
391
+ function resolveTelemetryPath() {
392
+ return process.env.MINDLORE_TELEMETRY_PATH ?? path_12.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
393
+ }
379
394
  function log(msg) {
380
395
  console.log(` ${msg}`);
381
396
  }
@@ -34,15 +34,17 @@ var require_constants = __commonJS({
34
34
  return mod && mod.__esModule ? mod : { "default": mod };
35
35
  };
36
36
  Object.defineProperty(exports2, "__esModule", { value: true });
37
- exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
37
+ exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.CC_PLUGIN_CACHE_DIR = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
38
38
  exports2.isKnownHookEvent = isKnownHookEvent;
39
39
  exports2.isSessionCategory = isSessionCategory;
40
40
  exports2.fixVersionTokens = fixVersionTokens;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
41
  exports2.homedir = homedir;
43
42
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
43
  exports2.getAllDbs = getAllDbs;
45
44
  exports2.getProjectName = getProjectName;
45
+ exports2.resolveProject = resolveProject;
46
+ exports2.resolveMindloreHome = resolveMindloreHome;
47
+ exports2.resolveTelemetryPath = resolveTelemetryPath;
46
48
  exports2.log = log;
47
49
  exports2.isContentFile = isContentFile;
48
50
  exports2.resolveHookCommon = resolveHookCommon;
@@ -336,9 +338,7 @@ var require_constants = __commonJS({
336
338
  };
337
339
  exports2.MAX_RELATED_SOURCES = 5;
338
340
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
341
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
342
  exports2.TYPE_TO_DIR = {
343
343
  raw: "raw",
344
344
  source: "sources",
@@ -355,6 +355,7 @@ var require_constants = __commonJS({
355
355
  reference: "memory",
356
356
  note: "memory"
357
357
  };
358
+ exports2.CC_PLUGIN_CACHE_DIR = path_12.default.join(os_12.default.homedir(), ".claude", "plugins", "cache");
358
359
  exports2.CC_MEMORY_PATH_MARKER = path_12.default.join(".claude", "projects");
359
360
  exports2.CC_MEMORY_DIR = "memory";
360
361
  exports2.CC_MEMORY_CATEGORY = "cc-memory";
@@ -376,6 +377,20 @@ var require_constants = __commonJS({
376
377
  function getProjectName() {
377
378
  return path_12.default.basename(process.cwd());
378
379
  }
380
+ function resolveProject() {
381
+ if (process.env.MINDLORE_PROJECT)
382
+ return process.env.MINDLORE_PROJECT;
383
+ return getProjectName().toLowerCase();
384
+ }
385
+ function resolveMindloreHome() {
386
+ return process.env.MINDLORE_HOME ?? path_12.default.join(os_12.default.homedir(), exports2.MINDLORE_DIR);
387
+ }
388
+ exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
389
+ exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
390
+ exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
391
+ function resolveTelemetryPath() {
392
+ return process.env.MINDLORE_TELEMETRY_PATH ?? path_12.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
393
+ }
379
394
  function log(msg) {
380
395
  console.log(` ${msg}`);
381
396
  }
@@ -3,7 +3,7 @@
3
3
  const EPISODE_KINDS = [
4
4
  'session', 'decision', 'event', 'preference',
5
5
  'learning', 'friction', 'discovery', 'nomination',
6
- 'session-summary'
6
+ 'session-summary', 'skill_failure'
7
7
  ];
8
8
 
9
9
  function isValidKind(kind) {
@@ -0,0 +1,70 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+ const { parseFrontmatter, hookLog } = require('./mindlore-common.cjs');
4
+
5
+ const MAX_LESSONS = 10;
6
+ const MAX_LINES_PER_LESSON = 5;
7
+ const TOTAL_CHAR_BUDGET = 6000;
8
+
9
+ function summarizeLesson(body, relPath) {
10
+ const lines = body.split('\n');
11
+ const h2Idx = lines.findIndex(l => l.startsWith('## '));
12
+ const start = h2Idx >= 0 ? h2Idx : 0;
13
+ const slice = lines.slice(start, start + MAX_LINES_PER_LESSON).join('\n');
14
+ const rest = lines.slice(start + MAX_LINES_PER_LESSON).length > 0
15
+ ? `\n… (full: ${relPath})`
16
+ : '';
17
+ return slice + rest;
18
+ }
19
+
20
+ function loadLearningsBlock(mindloreDir, currentProject) {
21
+ const learningsDir = path.join(mindloreDir, 'learnings');
22
+ if (!fs.existsSync(learningsDir)) return '';
23
+ const files = fs.readdirSync(learningsDir).filter(f => f.endsWith('.md'));
24
+ if (files.length === 0) return '';
25
+
26
+ const stats = [];
27
+ for (const f of files) {
28
+ const abs = path.join(learningsDir, f);
29
+ try {
30
+ const stat = fs.statSync(abs);
31
+ stats.push({ file: f, abs, mtime: stat.mtimeMs });
32
+ } catch (err) {
33
+ hookLog('learnings-loader', 'warn', `stat skipped ${f}: ${err.message}`);
34
+ }
35
+ }
36
+ stats.sort((a, b) => b.mtime - a.mtime);
37
+
38
+ const candidates = [];
39
+ for (const s of stats) {
40
+ if (candidates.length >= MAX_LESSONS) break;
41
+ let raw;
42
+ try { raw = fs.readFileSync(s.abs, 'utf8'); } catch (err) {
43
+ hookLog('learnings-loader', 'warn', `read skipped ${s.file}: ${err.message}`);
44
+ continue;
45
+ }
46
+ const { meta, body } = parseFrontmatter(raw);
47
+ const project = meta.project || 'global';
48
+ if (project !== 'global' && project !== currentProject) continue;
49
+ candidates.push({
50
+ relPath: `.mindlore/learnings/${s.file}`,
51
+ body,
52
+ });
53
+ }
54
+
55
+ if (candidates.length === 0) return '';
56
+
57
+ let block = '[Mindlore Learnings]\n';
58
+ let used = block.length;
59
+ let count = 0;
60
+ for (const c of candidates) {
61
+ const piece = summarizeLesson(c.body, c.relPath) + '\n\n';
62
+ if (used + piece.length > TOTAL_CHAR_BUDGET && count > 0) break;
63
+ block += piece;
64
+ used += piece.length;
65
+ count++;
66
+ }
67
+ return block.trimEnd();
68
+ }
69
+
70
+ module.exports = { loadLearningsBlock };
@@ -26,6 +26,10 @@ function globalDir() {
26
26
  return path.join(os.homedir(), MINDLORE_DIR);
27
27
  }
28
28
 
29
+ function resolveMindloreHome() {
30
+ return globalDir();
31
+ }
32
+
29
33
  // Convenience export — snapshot at load time for simple references.
30
34
  const GLOBAL_MINDLORE_DIR = globalDir();
31
35
 
@@ -663,6 +667,24 @@ const extractSkeleton = (() => {
663
667
 
664
668
  const TELEMETRY_KEEP_LINES = 200;
665
669
 
670
+ const HOOK_LATENCY_BUDGETS = {
671
+ 'mindlore-session-focus': 100,
672
+ 'mindlore-session-end': 100,
673
+ 'mindlore-pre-compact': 100,
674
+ 'mindlore-post-compact': 100,
675
+ 'mindlore-search': 50,
676
+ 'mindlore-decision-detector': 50,
677
+ 'mindlore-index': 50,
678
+ 'mindlore-fts5-sync': 50,
679
+ 'mindlore-cwd-changed': 50,
680
+ 'mindlore-read-guard': 30,
681
+ 'mindlore-post-read': 30,
682
+ 'mindlore-dont-repeat': 30,
683
+ 'mindlore-model-router': 30,
684
+ 'mindlore-research-guard': 30,
685
+ };
686
+ const DEFAULT_BUDGET_MS = 50;
687
+
666
688
  function _rotateFile(filePath, maxBytes, keepLines) {
667
689
  try {
668
690
  const stat = fs.statSync(filePath);
@@ -677,16 +699,17 @@ function _rotateFile(filePath, maxBytes, keepLines) {
677
699
 
678
700
  let _telDirEnsured = false;
679
701
 
680
- function _writeTelemetry({ hookName, duration_ms, ok, extra }) {
702
+ function _writeTelemetry({ hookName, duration_ms, ok, budget_ms, budget_exceeded, extra }) {
681
703
  try {
704
+ const telDir = globalDir();
682
705
  if (!_telDirEnsured) {
683
- safeMkdir(GLOBAL_MINDLORE_DIR);
706
+ safeMkdir(telDir);
684
707
  _telDirEnsured = true;
685
708
  }
686
- const telPath = path.join(GLOBAL_MINDLORE_DIR, 'telemetry.jsonl');
687
- const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok };
709
+ const telPath = path.join(telDir, 'telemetry.jsonl');
710
+ const entry = { ts: new Date().toISOString(), hook: hookName, duration_ms, ok, budget_ms, budget_exceeded };
688
711
  if (extra && typeof extra === 'object') {
689
- for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens']) {
712
+ for (const key of ['inject_tokens', 'source_tokens', 'injected_tokens', 'full_read_tokens', 'search_ms', 'result_count']) {
690
713
  if (typeof extra[key] === 'number') entry[key] = extra[key];
691
714
  }
692
715
  }
@@ -707,8 +730,14 @@ async function withTelemetry(hookName, fn) {
707
730
  ok = false;
708
731
  thrown = err;
709
732
  }
733
+ const duration = Date.now() - start;
734
+ const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
735
+ const budgetExceeded = duration > budget;
736
+ if (budgetExceeded) {
737
+ process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
738
+ }
710
739
  const extra = (result && typeof result === 'object') ? result : undefined;
711
- _writeTelemetry({ hookName, duration_ms: Date.now() - start, ok, extra });
740
+ _writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
712
741
  if (thrown) throw thrown;
713
742
  return result;
714
743
  }
@@ -724,8 +753,14 @@ function withTelemetrySync(hookName, fn) {
724
753
  ok = false;
725
754
  thrown = err;
726
755
  }
756
+ const duration = Date.now() - start;
757
+ const budget = HOOK_LATENCY_BUDGETS[hookName] ?? DEFAULT_BUDGET_MS;
758
+ const budgetExceeded = duration > budget;
759
+ if (budgetExceeded) {
760
+ process.stderr.write(`[Mindlore] hook ${hookName} took ${duration}ms (budget: ${budget}ms)\n`);
761
+ }
727
762
  const extra = (result && typeof result === 'object') ? result : undefined;
728
- _writeTelemetry({ hookName, duration_ms: Date.now() - start, ok, extra });
763
+ _writeTelemetry({ hookName, duration_ms: duration, ok, budget_ms: budget, budget_exceeded: budgetExceeded, extra });
729
764
  if (thrown) throw thrown;
730
765
  return result;
731
766
  }
@@ -741,7 +776,7 @@ function withTimeoutDb(db, sql, params = [], { timeoutMs = DB_BUSY_TIMEOUT_MS, m
741
776
  return params.length > 0 ? stmt.all(...params) : stmt.all();
742
777
  } catch (err) {
743
778
  hookLog('timeout', 'warn', `DB query timeout/error: ${err.message}`);
744
- _writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false });
779
+ _writeTelemetry({ hookName: 'db_timeout', duration_ms: 0, ok: false, budget_ms: DEFAULT_BUDGET_MS, budget_exceeded: false });
745
780
  return mode === 'get' ? undefined : [];
746
781
  }
747
782
  }
@@ -773,6 +808,7 @@ module.exports = {
773
808
  MINDLORE_DIR,
774
809
  GLOBAL_MINDLORE_DIR,
775
810
  globalDir,
811
+ resolveMindloreHome,
776
812
  DB_NAME,
777
813
  SKIP_FILES,
778
814
  findMindloreDir,
@@ -837,6 +873,8 @@ module.exports = {
837
873
  // Telemetry (v0.6.0)
838
874
  withTelemetry,
839
875
  withTelemetrySync,
876
+ HOOK_LATENCY_BUDGETS,
877
+ DEFAULT_BUDGET_MS,
840
878
  // DB timeout wrapper (v0.6.1)
841
879
  withTimeoutDb,
842
880
  // Raw file helpers (v0.6.3)
@@ -0,0 +1,29 @@
1
+ const REFLECT_THRESHOLD_DAYS = 7;
2
+ const NUDGE_COOLDOWN_HOURS = 24;
3
+
4
+ function isValidDate(iso) {
5
+ if (!iso) return false;
6
+ const d = new Date(iso);
7
+ return !isNaN(d.getTime());
8
+ }
9
+
10
+ function shouldNudgeReflect(lastReflectIso, lastNudgeIso, now = new Date()) {
11
+ let needsReflect;
12
+ if (!lastReflectIso) {
13
+ needsReflect = true;
14
+ } else if (!isValidDate(lastReflectIso)) {
15
+ return false;
16
+ } else {
17
+ const daysSince = (now.getTime() - new Date(lastReflectIso).getTime()) / 86400000;
18
+ needsReflect = daysSince >= REFLECT_THRESHOLD_DAYS;
19
+ }
20
+ if (!needsReflect) return false;
21
+
22
+ if (lastNudgeIso && isValidDate(lastNudgeIso)) {
23
+ const hoursSinceNudge = (now.getTime() - new Date(lastNudgeIso).getTime()) / 3600000;
24
+ if (hoursSinceNudge < NUDGE_COOLDOWN_HOURS) return false;
25
+ }
26
+ return true;
27
+ }
28
+
29
+ module.exports = { shouldNudgeReflect, REFLECT_THRESHOLD_DAYS, NUDGE_COOLDOWN_HOURS };
@@ -0,0 +1,12 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ function getSyncScripts(hooksDir) {
5
+ if (!fs.existsSync(hooksDir)) return [];
6
+ return fs.readdirSync(hooksDir)
7
+ .filter(f => f.startsWith('mindlore-') && f.endsWith('.cjs'))
8
+ .map(f => path.join(hooksDir, f))
9
+ .sort();
10
+ }
11
+
12
+ module.exports = { getSyncScripts };
@@ -5,12 +5,15 @@
5
5
  var fs = require("fs");
6
6
  var path = require("path");
7
7
  var { DB_NAME, sha256, openDatabase, getAllMdFiles, parseFrontmatter, extractFtsMetadata, insertFtsRow, readHookStdin, getActiveMindloreDir, getProjectName, resolveProject, hookLog, withTelemetry, SQL_FTS_SESSIONS_INSERT, isSessionCategory, isInsideMindloreDir } = require("./lib/mindlore-common.cjs");
8
+ function shouldIndexFile(filePath) {
9
+ return !!(filePath && filePath.endsWith(".md"));
10
+ }
8
11
  function main() {
9
12
  const filePath = readHookStdin(["path", "file_path"]);
10
13
  if (!filePath) return;
14
+ if (!shouldIndexFile(filePath)) return;
11
15
  const resolved = path.resolve(filePath);
12
16
  if (!isInsideMindloreDir(resolved)) return;
13
- if (filePath.endsWith(".md")) return;
14
17
  const baseDir = getActiveMindloreDir();
15
18
  if (!fs.existsSync(baseDir)) return;
16
19
  const dbPath = path.join(baseDir, DB_NAME);
@@ -63,6 +66,7 @@ function main() {
63
66
  db.close();
64
67
  }
65
68
  }
69
+ module.exports = { shouldIndexFile };
66
70
  withTelemetry("mindlore-fts5-sync", main).catch((err) => {
67
71
  hookLog("mindlore-fts5-sync", "error", err?.message ?? String(err));
68
72
  process.exit(0);
@@ -26,6 +26,43 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
 
29
+ // node_modules/sqlite-vec/index.cjs
30
+ var require_sqlite_vec = __commonJS({
31
+ "node_modules/sqlite-vec/index.cjs"(exports2, module2) {
32
+ var { arch, platform } = require("node:process");
33
+ var BASE_PACKAGE_NAME = "sqlite-vec";
34
+ var ENTRYPOINT_BASE_NAME = "vec0";
35
+ var supportedPlatforms = [["darwin", "x64"], ["linux", "x64"], ["darwin", "arm64"], ["win32", "x64"], ["linux", "arm64"]];
36
+ var invalidPlatformErrorMessage = `Unsupported platform for ${BASE_PACKAGE_NAME}, on a ${platform}-${arch} machine. Supported platforms are (${supportedPlatforms.map(([p, a]) => `${p}-${a}`).join(",")}). Consult the ${BASE_PACKAGE_NAME} NPM package README for details.`;
37
+ function validPlatform(platform2, arch2) {
38
+ return supportedPlatforms.find(([p, a]) => platform2 === p && arch2 === a) !== void 0;
39
+ }
40
+ function extensionSuffix(platform2) {
41
+ if (platform2 === "win32") return "dll";
42
+ if (platform2 === "darwin") return "dylib";
43
+ return "so";
44
+ }
45
+ function platformPackageName(platform2, arch2) {
46
+ const os = platform2 === "win32" ? "windows" : platform2;
47
+ return `${BASE_PACKAGE_NAME}-${os}-${arch2}`;
48
+ }
49
+ function getLoadablePath() {
50
+ if (!validPlatform(platform, arch)) {
51
+ throw new Error(
52
+ invalidPlatformErrorMessage
53
+ );
54
+ }
55
+ const packageName = platformPackageName(platform, arch);
56
+ const loadablePath = require.resolve(packageName + "/" + ENTRYPOINT_BASE_NAME + "." + extensionSuffix(platform));
57
+ return loadablePath;
58
+ }
59
+ function load(db) {
60
+ db.loadExtension(getLoadablePath());
61
+ }
62
+ module2.exports = { getLoadablePath, load };
63
+ }
64
+ });
65
+
29
66
  // dist/scripts/lib/constants.js
30
67
  var require_constants = __commonJS({
31
68
  "dist/scripts/lib/constants.js"(exports2) {
@@ -34,15 +71,17 @@ var require_constants = __commonJS({
34
71
  return mod && mod.__esModule ? mod : { "default": mod };
35
72
  };
36
73
  Object.defineProperty(exports2, "__esModule", { value: true });
37
- exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.TYPE_TO_DIR = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
74
+ exports2.CONSOLIDATION_THRESHOLD = exports2.STALE_THRESHOLD = exports2.DECAY_HALF_LIFE_DAYS = exports2.DEFAULT_TOKEN_BUDGET = exports2.TELEMETRY_FILE_ROTATE_BYTES = exports2.TELEMETRY_OUTPUT_MAX_BYTES = exports2.TELEMETRY_FILENAME = exports2.CC_MEMORY_BOOST = exports2.CC_SUBAGENT_CATEGORY = exports2.CC_SESSION_CATEGORY = exports2.CC_MEMORY_CATEGORY = exports2.CC_MEMORY_DIR = exports2.CC_MEMORY_PATH_MARKER = exports2.CC_PLUGIN_CACHE_DIR = exports2.TYPE_TO_DIR = exports2.PRIORITY_CASE = exports2.RELATED_OVERFETCH = exports2.MAX_RELATED_SOURCES = exports2.RELATION_PRIORITY = exports2.SYMMETRIC_TYPES = exports2.RELATION_TYPES = exports2.QUALITY_HEURISTICS = exports2.QUALITY_VALUES = exports2.FRONTMATTER_TYPES = exports2.FTS5_COLUMNS = exports2.STOP_WORDS = exports2.TURKISH_WORD_RE = exports2.STOP_WORDS_MIN_LENGTH = exports2.SESSION_CATEGORIES = exports2.CATEGORIES = exports2.SCHEMA_VERSION = exports2.DEFAULT_MODELS = exports2.CONFIG_FILE = exports2.MCP_BUSY_TIMEOUT_MS = exports2.DB_BUSY_TIMEOUT_MS = exports2.SKIP_FILES = exports2.DIRECTORIES = exports2.DB_NAME = exports2.GLOBAL_MINDLORE_DIR = exports2.MINDLORE_DIR = exports2.KNOWN_HOOK_EVENTS = void 0;
38
75
  exports2.isKnownHookEvent = isKnownHookEvent;
39
76
  exports2.isSessionCategory = isSessionCategory;
40
77
  exports2.fixVersionTokens = fixVersionTokens;
41
- exports2.buildPriorityCase = buildPriorityCase;
42
78
  exports2.homedir = homedir;
43
79
  exports2.getActiveMindloreDir = getActiveMindloreDir;
44
80
  exports2.getAllDbs = getAllDbs2;
45
81
  exports2.getProjectName = getProjectName;
82
+ exports2.resolveProject = resolveProject;
83
+ exports2.resolveMindloreHome = resolveMindloreHome;
84
+ exports2.resolveTelemetryPath = resolveTelemetryPath;
46
85
  exports2.log = log;
47
86
  exports2.isContentFile = isContentFile;
48
87
  exports2.resolveHookCommon = resolveHookCommon;
@@ -336,9 +375,7 @@ var require_constants = __commonJS({
336
375
  };
337
376
  exports2.MAX_RELATED_SOURCES = 5;
338
377
  exports2.RELATED_OVERFETCH = 10;
339
- function buildPriorityCase() {
340
- return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
- }
378
+ exports2.PRIORITY_CASE = "WHEN 'supersedes' THEN 1 WHEN 'contradicts' THEN 2 WHEN 'extends' THEN 3 WHEN 'cites' THEN 4";
342
379
  exports2.TYPE_TO_DIR = {
343
380
  raw: "raw",
344
381
  source: "sources",
@@ -355,6 +392,7 @@ var require_constants = __commonJS({
355
392
  reference: "memory",
356
393
  note: "memory"
357
394
  };
395
+ exports2.CC_PLUGIN_CACHE_DIR = path_1.default.join(os_1.default.homedir(), ".claude", "plugins", "cache");
358
396
  exports2.CC_MEMORY_PATH_MARKER = path_1.default.join(".claude", "projects");
359
397
  exports2.CC_MEMORY_DIR = "memory";
360
398
  exports2.CC_MEMORY_CATEGORY = "cc-memory";
@@ -376,6 +414,20 @@ var require_constants = __commonJS({
376
414
  function getProjectName() {
377
415
  return path_1.default.basename(process.cwd());
378
416
  }
417
+ function resolveProject() {
418
+ if (process.env.MINDLORE_PROJECT)
419
+ return process.env.MINDLORE_PROJECT;
420
+ return getProjectName().toLowerCase();
421
+ }
422
+ function resolveMindloreHome() {
423
+ return process.env.MINDLORE_HOME ?? path_1.default.join(os_1.default.homedir(), exports2.MINDLORE_DIR);
424
+ }
425
+ exports2.TELEMETRY_FILENAME = "telemetry.jsonl";
426
+ exports2.TELEMETRY_OUTPUT_MAX_BYTES = 4e3;
427
+ exports2.TELEMETRY_FILE_ROTATE_BYTES = 10 * 1024 * 1024;
428
+ function resolveTelemetryPath() {
429
+ return process.env.MINDLORE_TELEMETRY_PATH ?? path_1.default.join(resolveMindloreHome(), exports2.TELEMETRY_FILENAME);
430
+ }
379
431
  function log(msg) {
380
432
  console.log(` ${msg}`);
381
433
  }
@@ -418,6 +470,43 @@ var require_constants = __commonJS({
418
470
  var require_db_helpers = __commonJS({
419
471
  "dist/scripts/lib/db-helpers.js"(exports2) {
420
472
  "use strict";
473
+ var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
474
+ if (k2 === void 0) k2 = k;
475
+ var desc = Object.getOwnPropertyDescriptor(m, k);
476
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
477
+ desc = { enumerable: true, get: function() {
478
+ return m[k];
479
+ } };
480
+ }
481
+ Object.defineProperty(o, k2, desc);
482
+ }) : (function(o, m, k, k2) {
483
+ if (k2 === void 0) k2 = k;
484
+ o[k2] = m[k];
485
+ }));
486
+ var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
487
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
488
+ }) : function(o, v) {
489
+ o["default"] = v;
490
+ });
491
+ var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
492
+ var ownKeys = function(o) {
493
+ ownKeys = Object.getOwnPropertyNames || function(o2) {
494
+ var ar = [];
495
+ for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
496
+ return ar;
497
+ };
498
+ return ownKeys(o);
499
+ };
500
+ return function(mod) {
501
+ if (mod && mod.__esModule) return mod;
502
+ var result = {};
503
+ if (mod != null) {
504
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
505
+ }
506
+ __setModuleDefault(result, mod);
507
+ return result;
508
+ };
509
+ })();
421
510
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
422
511
  return mod && mod.__esModule ? mod : { "default": mod };
423
512
  };
@@ -429,6 +518,7 @@ var require_db_helpers = __commonJS({
429
518
  exports2.openDatabaseTs = openDatabaseTs;
430
519
  var better_sqlite3_1 = __importDefault(require("better-sqlite3"));
431
520
  var fs_1 = __importDefault(require("fs"));
521
+ var vec = __importStar(require_sqlite_vec());
432
522
  var constants_js_1 = require_constants();
433
523
  function dbGet(db, sql, ...params) {
434
524
  const result = db.prepare(sql).get(...params);
@@ -468,6 +558,9 @@ var require_db_helpers = __commonJS({
468
558
  db.pragma("journal_mode = WAL");
469
559
  db.pragma(`busy_timeout = ${constants_js_1.DB_BUSY_TIMEOUT_MS}`);
470
560
  }
561
+ if (options?.loadVec) {
562
+ vec.load(db);
563
+ }
471
564
  return db;
472
565
  } catch {
473
566
  return null;
@@ -1103,7 +1196,7 @@ var require_search_cache = __commonJS({
1103
1196
  // hooks/src/mindlore-search.cjs
1104
1197
  var fs = require("fs");
1105
1198
  var path = require("path");
1106
- var { getAllDbs, openDatabase, extractHeadings, readHookStdin, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
1199
+ var { getAllDbs, openDatabase, extractHeadings, readConfig, hookLog, incrementRecallCount, withTelemetry } = require("./lib/mindlore-common.cjs");
1107
1200
  var MAX_RESULTS = 3;
1108
1201
  var MIN_QUERY_WORDS = 3;
1109
1202
  var searchEngineMod;
@@ -1116,9 +1209,22 @@ try {
1116
1209
  SearchCacheMod = require_search_cache();
1117
1210
  } catch (_err) {
1118
1211
  }
1212
+ function parseStdin() {
1213
+ try {
1214
+ const raw = fs.readFileSync(0, "utf8").trim();
1215
+ if (!raw) return { userMessage: "", sessionId: "unknown" };
1216
+ const parsed = JSON.parse(raw);
1217
+ const userMessage = parsed.prompt || parsed.content || parsed.message || parsed.query || raw;
1218
+ const sessionId = parsed.session_id || "unknown";
1219
+ return { userMessage, sessionId };
1220
+ } catch (_err) {
1221
+ return { userMessage: "", sessionId: "unknown" };
1222
+ }
1223
+ }
1119
1224
  function main() {
1120
- const userMessage = readHookStdin(["prompt", "content", "message", "query"]);
1225
+ const { userMessage, sessionId } = parseStdin();
1121
1226
  if (!userMessage || userMessage.length < MIN_QUERY_WORDS) return;
1227
+ let searchMs = 0;
1122
1228
  const dbPaths = getAllDbs();
1123
1229
  if (dbPaths.length === 0) return;
1124
1230
  if (!searchEngineMod) {
@@ -1128,13 +1234,6 @@ function main() {
1128
1234
  const project = path.basename(process.cwd());
1129
1235
  const config = readConfig(path.dirname(dbPaths[0]));
1130
1236
  const synonyms = config && config.synonyms ? config.synonyms : {};
1131
- let sessionId;
1132
- try {
1133
- const stdinData = JSON.parse(process.env.CLAUDE_HOOK_STDIN || "{}");
1134
- sessionId = stdinData.session_id || "unknown";
1135
- } catch (_) {
1136
- sessionId = "unknown";
1137
- }
1138
1237
  const allResults = [];
1139
1238
  for (const dbPath of dbPaths) {
1140
1239
  const db = openDatabase(dbPath);
@@ -1160,11 +1259,13 @@ function main() {
1160
1259
  continue;
1161
1260
  }
1162
1261
  }
1262
+ const t0 = Date.now();
1163
1263
  const results = searchEngineMod.search(db, userMessage, {
1164
1264
  project,
1165
1265
  maxResults: effectiveMax,
1166
1266
  synonyms
1167
1267
  });
1268
+ searchMs += Date.now() - t0;
1168
1269
  if (cache) cache.set(userMessage, results);
1169
1270
  const baseDir = path.dirname(dbPath);
1170
1271
  for (const r of results) {
@@ -1256,6 +1357,7 @@ Summary: ${summary}...
1256
1357
  }
1257
1358
  process.stdout.write(outputStr);
1258
1359
  }
1360
+ return { search_ms: searchMs, result_count: relevant.length };
1259
1361
  }
1260
1362
  withTelemetry("mindlore-search", main).catch((err) => {
1261
1363
  hookLog("mindlore-search", "error", err?.message ?? String(err));