mindlore 0.7.1 → 0.7.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 (117) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +30 -0
  3. package/dist/scripts/bundle-hooks.js +3 -1
  4. package/dist/scripts/bundle-hooks.js.map +1 -1
  5. package/dist/scripts/init.js +164 -151
  6. package/dist/scripts/init.js.map +1 -1
  7. package/dist/scripts/lib/all-migrations.d.ts.map +1 -1
  8. package/dist/scripts/lib/all-migrations.js +3 -0
  9. package/dist/scripts/lib/all-migrations.js.map +1 -1
  10. package/dist/scripts/lib/constants.d.ts +7 -0
  11. package/dist/scripts/lib/constants.d.ts.map +1 -1
  12. package/dist/scripts/lib/constants.js +17 -1
  13. package/dist/scripts/lib/constants.js.map +1 -1
  14. package/dist/scripts/lib/detect-plugin.d.ts +2 -0
  15. package/dist/scripts/lib/detect-plugin.d.ts.map +1 -0
  16. package/dist/scripts/lib/detect-plugin.js +14 -0
  17. package/dist/scripts/lib/detect-plugin.js.map +1 -0
  18. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
  19. package/dist/scripts/lib/mcp-tools.js +63 -78
  20. package/dist/scripts/lib/mcp-tools.js.map +1 -1
  21. package/dist/scripts/lib/migrations-v072.d.ts +3 -0
  22. package/dist/scripts/lib/migrations-v072.d.ts.map +1 -0
  23. package/dist/scripts/lib/migrations-v072.js +25 -0
  24. package/dist/scripts/lib/migrations-v072.js.map +1 -0
  25. package/dist/scripts/lib/relation-helpers.d.ts +15 -0
  26. package/dist/scripts/lib/relation-helpers.d.ts.map +1 -0
  27. package/dist/scripts/lib/relation-helpers.js +30 -0
  28. package/dist/scripts/lib/relation-helpers.js.map +1 -0
  29. package/dist/scripts/lib/settings-cleanup.d.ts +6 -0
  30. package/dist/scripts/lib/settings-cleanup.d.ts.map +1 -0
  31. package/dist/scripts/lib/settings-cleanup.js +61 -0
  32. package/dist/scripts/lib/settings-cleanup.js.map +1 -0
  33. package/dist/scripts/lib/tool-adapters/get-adapter.d.ts +21 -0
  34. package/dist/scripts/lib/tool-adapters/get-adapter.d.ts.map +1 -0
  35. package/dist/scripts/lib/tool-adapters/get-adapter.js +51 -0
  36. package/dist/scripts/lib/tool-adapters/get-adapter.js.map +1 -0
  37. package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts +34 -0
  38. package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts.map +1 -0
  39. package/dist/scripts/lib/tool-adapters/relate-adapter.js +43 -0
  40. package/dist/scripts/lib/tool-adapters/relate-adapter.js.map +1 -0
  41. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +5 -0
  42. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -1
  43. package/dist/scripts/lib/tool-adapters/search-adapter.js +37 -0
  44. package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -1
  45. package/dist/scripts/mcp-server.js +40 -3
  46. package/dist/scripts/mcp-server.js.map +1 -1
  47. package/dist/scripts/mindlore-doctor.d.ts +1 -1
  48. package/dist/scripts/mindlore-doctor.d.ts.map +1 -1
  49. package/dist/scripts/mindlore-doctor.js +9 -35
  50. package/dist/scripts/mindlore-doctor.js.map +1 -1
  51. package/dist/scripts/uninstall.js +14 -38
  52. package/dist/scripts/uninstall.js.map +1 -1
  53. package/dist/tests/db-singleton.test.d.ts +2 -0
  54. package/dist/tests/db-singleton.test.d.ts.map +1 -0
  55. package/dist/tests/db-singleton.test.js +22 -0
  56. package/dist/tests/db-singleton.test.js.map +1 -0
  57. package/dist/tests/doctor.test.js +6 -15
  58. package/dist/tests/doctor.test.js.map +1 -1
  59. package/dist/tests/dont-repeat-dedup.test.d.ts +2 -0
  60. package/dist/tests/dont-repeat-dedup.test.d.ts.map +1 -0
  61. package/dist/tests/dont-repeat-dedup.test.js +93 -0
  62. package/dist/tests/dont-repeat-dedup.test.js.map +1 -0
  63. package/dist/tests/e2e-kg-pipeline.test.d.ts +2 -0
  64. package/dist/tests/e2e-kg-pipeline.test.d.ts.map +1 -0
  65. package/dist/tests/e2e-kg-pipeline.test.js +59 -0
  66. package/dist/tests/e2e-kg-pipeline.test.js.map +1 -0
  67. package/dist/tests/helpers/db.d.ts.map +1 -1
  68. package/dist/tests/helpers/db.js +2 -1
  69. package/dist/tests/helpers/db.js.map +1 -1
  70. package/dist/tests/install-matrix.test.d.ts +2 -0
  71. package/dist/tests/install-matrix.test.d.ts.map +1 -0
  72. package/dist/tests/install-matrix.test.js +110 -0
  73. package/dist/tests/install-matrix.test.js.map +1 -0
  74. package/dist/tests/mcp-get-tool.test.d.ts +2 -0
  75. package/dist/tests/mcp-get-tool.test.d.ts.map +1 -0
  76. package/dist/tests/mcp-get-tool.test.js +93 -0
  77. package/dist/tests/mcp-get-tool.test.js.map +1 -0
  78. package/dist/tests/mcp-relate-tool.test.d.ts +2 -0
  79. package/dist/tests/mcp-relate-tool.test.d.ts.map +1 -0
  80. package/dist/tests/mcp-relate-tool.test.js +85 -0
  81. package/dist/tests/mcp-relate-tool.test.js.map +1 -0
  82. package/dist/tests/mcp-server.test.js +3 -1
  83. package/dist/tests/mcp-server.test.js.map +1 -1
  84. package/dist/tests/mcp-tools.test.js +20 -0
  85. package/dist/tests/mcp-tools.test.js.map +1 -1
  86. package/dist/tests/memory-relate.test.d.ts +2 -0
  87. package/dist/tests/memory-relate.test.d.ts.map +1 -0
  88. package/dist/tests/memory-relate.test.js +70 -0
  89. package/dist/tests/memory-relate.test.js.map +1 -0
  90. package/dist/tests/migrations-v063.test.js +1 -1
  91. package/dist/tests/migrations-v072.test.d.ts +2 -0
  92. package/dist/tests/migrations-v072.test.d.ts.map +1 -0
  93. package/dist/tests/migrations-v072.test.js +74 -0
  94. package/dist/tests/migrations-v072.test.js.map +1 -0
  95. package/dist/tests/plugin-cache-regression.test.d.ts +2 -0
  96. package/dist/tests/plugin-cache-regression.test.d.ts.map +1 -0
  97. package/dist/tests/plugin-cache-regression.test.js +19 -0
  98. package/dist/tests/plugin-cache-regression.test.js.map +1 -0
  99. package/dist/tests/settings-cleanup.test.d.ts +2 -0
  100. package/dist/tests/settings-cleanup.test.d.ts.map +1 -0
  101. package/dist/tests/settings-cleanup.test.js +126 -0
  102. package/dist/tests/settings-cleanup.test.js.map +1 -0
  103. package/dist/tests/version-sync.test.d.ts +2 -0
  104. package/dist/tests/version-sync.test.d.ts.map +1 -0
  105. package/dist/tests/version-sync.test.js +41 -0
  106. package/dist/tests/version-sync.test.js.map +1 -0
  107. package/hooks/cc-memory-bulk-sync.cjs +15 -1
  108. package/hooks/cc-session-sync.cjs +15 -1
  109. package/hooks/mindlore-dont-repeat.cjs +18 -0
  110. package/hooks/mindlore-search.cjs +15 -1
  111. package/hooks/mindlore-session-focus.cjs +35 -2
  112. package/hooks/src/mindlore-dont-repeat.cjs +21 -0
  113. package/package.json +4 -2
  114. package/plugin.json +7 -3
  115. package/skills/mindlore-decide/SKILL.md +7 -0
  116. package/skills/mindlore-log/SKILL.md +7 -0
  117. package/templates/config.json +1 -1
@@ -34,10 +34,11 @@ 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.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.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;
38
38
  exports2.isKnownHookEvent = isKnownHookEvent;
39
39
  exports2.isSessionCategory = isSessionCategory;
40
40
  exports2.fixVersionTokens = fixVersionTokens;
41
+ exports2.buildPriorityCase = buildPriorityCase;
41
42
  exports2.homedir = homedir;
42
43
  exports2.getActiveMindloreDir = getActiveMindloreDir;
43
44
  exports2.getAllDbs = getAllDbs2;
@@ -325,6 +326,19 @@ var require_constants = __commonJS({
325
326
  "cc-session": "low",
326
327
  "cc-subagent": "low"
327
328
  };
329
+ exports2.RELATION_TYPES = ["cites", "extends", "contradicts", "supersedes"];
330
+ exports2.SYMMETRIC_TYPES = /* @__PURE__ */ new Set(["contradicts"]);
331
+ exports2.RELATION_PRIORITY = {
332
+ supersedes: 1,
333
+ contradicts: 2,
334
+ extends: 3,
335
+ cites: 4
336
+ };
337
+ exports2.MAX_RELATED_SOURCES = 5;
338
+ exports2.RELATED_OVERFETCH = 10;
339
+ function buildPriorityCase() {
340
+ return Object.entries(exports2.RELATION_PRIORITY).map(([type, priority]) => `WHEN '${type}' THEN ${priority}`).join(" ");
341
+ }
328
342
  exports2.TYPE_TO_DIR = {
329
343
  raw: "raw",
330
344
  source: "sources",
@@ -521,6 +521,36 @@ var require_migrations_v068 = __commonJS({
521
521
  }
522
522
  });
523
523
 
524
+ // dist/scripts/lib/migrations-v072.js
525
+ var require_migrations_v072 = __commonJS({
526
+ "dist/scripts/lib/migrations-v072.js"(exports2) {
527
+ "use strict";
528
+ Object.defineProperty(exports2, "__esModule", { value: true });
529
+ exports2.V072_MIGRATIONS = void 0;
530
+ exports2.V072_MIGRATIONS = [
531
+ {
532
+ version: 20,
533
+ name: "create_mindlore_relations",
534
+ up: (db) => {
535
+ db.exec(`
536
+ CREATE TABLE IF NOT EXISTS mindlore_relations (
537
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
538
+ source_a TEXT NOT NULL,
539
+ source_b TEXT NOT NULL,
540
+ relation_type TEXT NOT NULL CHECK(relation_type IN ('cites', 'extends', 'contradicts', 'supersedes')),
541
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
542
+ UNIQUE(source_a, source_b, relation_type)
543
+ );
544
+ CREATE INDEX IF NOT EXISTS idx_relations_source_a ON mindlore_relations(source_a);
545
+ CREATE INDEX IF NOT EXISTS idx_relations_source_b ON mindlore_relations(source_b);
546
+ CREATE INDEX IF NOT EXISTS idx_relations_type ON mindlore_relations(relation_type);
547
+ `);
548
+ }
549
+ }
550
+ ];
551
+ }
552
+ });
553
+
524
554
  // dist/scripts/lib/all-migrations.js
525
555
  var require_all_migrations = __commonJS({
526
556
  "dist/scripts/lib/all-migrations.js"(exports2) {
@@ -536,6 +566,7 @@ var require_all_migrations = __commonJS({
536
566
  var migrations_v066_js_1 = require_migrations_v066();
537
567
  var migrations_v067_js_1 = require_migrations_v067();
538
568
  var migrations_v068_js_1 = require_migrations_v068();
569
+ var migrations_v072_js_1 = require_migrations_v072();
539
570
  exports2.ALL_MIGRATIONS = [
540
571
  ...migrations_js_1.V050_MIGRATIONS,
541
572
  ...migrations_js_1.V051_MIGRATIONS,
@@ -546,7 +577,8 @@ var require_all_migrations = __commonJS({
546
577
  ...migrations_v063_js_1.V063_MIGRATIONS,
547
578
  ...migrations_v066_js_1.V066_MIGRATIONS,
548
579
  ...migrations_v067_js_1.V067_MIGRATIONS,
549
- ...migrations_v068_js_1.V068_MIGRATIONS
580
+ ...migrations_v068_js_1.V068_MIGRATIONS,
581
+ ...migrations_v072_js_1.V072_MIGRATIONS
550
582
  ];
551
583
  var EPISODES_DEPENDENT = /* @__PURE__ */ new Set([9, 14, 15, 16, 17, 18]);
552
584
  exports2.FTS_DB_MIGRATIONS = exports2.ALL_MIGRATIONS.filter((m) => !EPISODES_DEPENDENT.has(m.version));
@@ -555,7 +587,8 @@ var require_all_migrations = __commonJS({
555
587
  ...migrations_v063_js_1.V063_MIGRATIONS,
556
588
  ...migrations_v066_js_1.V066_MIGRATIONS,
557
589
  ...migrations_v067_js_1.V067_MIGRATIONS,
558
- ...migrations_v068_js_1.V068_MIGRATIONS
590
+ ...migrations_v068_js_1.V068_MIGRATIONS,
591
+ ...migrations_v072_js_1.V072_MIGRATIONS
559
592
  ];
560
593
  exports2.EXPECTED_SCHEMA_VERSION = Math.max(...exports2.ALL_MIGRATIONS.map((m) => m.version));
561
594
  }
@@ -112,6 +112,24 @@ function extractNegativePatterns(content) {
112
112
  return patterns;
113
113
  }
114
114
 
115
+ let _lessonsEnforcementCached = null;
116
+ function hasLessonsEnforcementHook() {
117
+ if (_lessonsEnforcementCached !== null) return _lessonsEnforcementCached;
118
+ try {
119
+ const settingsPath = path.join(os.homedir(), '.claude', 'settings.json');
120
+ const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
121
+ const hooks = settings.hooks || {};
122
+ const preToolUse = hooks.PreToolUse || [];
123
+ _lessonsEnforcementCached = preToolUse.some(entry => {
124
+ const cmds = (entry.hooks || []).map(h => h.command || '').concat(entry.command || '');
125
+ return cmds.some(c => c.includes('lessons-enforcement'));
126
+ });
127
+ } catch (_err) {
128
+ _lessonsEnforcementCached = false;
129
+ }
130
+ return _lessonsEnforcementCached;
131
+ }
132
+
115
133
  function checkContent(content, patterns) {
116
134
  const matches = [];
117
135
  for (const p of patterns) {
@@ -165,6 +183,9 @@ function main() {
165
183
 
166
184
  if (allContent.trim().length < 10) return process.exit(0);
167
185
 
186
+ // Full dedup: lessons-enforcement hook scans identical sources — skip entirely
187
+ if (hasLessonsEnforcementHook()) return process.exit(0);
188
+
168
189
  // Load patterns from all sources (file-persisted mtime cache)
169
190
  const mindloreDir = findMindloreDir();
170
191
  const cachePath = mindloreDir ? path.join(mindloreDir, 'diary', `_pattern-cache-${getProjectName()}.json`) : null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindlore",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "AI-native knowledge system for Claude Code",
5
5
  "type": "commonjs",
6
6
  "bin": {
@@ -26,7 +26,8 @@
26
26
  "validate-manifest": "node dist/scripts/validate-manifest-cli.js",
27
27
  "bundle:hooks": "npx tsx scripts/bundle-hooks.ts",
28
28
  "bundle:mcp": "npx esbuild scripts/mcp-server.ts --bundle --platform=node --target=node20 --format=cjs --outfile=mcp-server.cjs --external:better-sqlite3",
29
- "bundle": "npm run bundle:hooks && npm run bundle:mcp"
29
+ "bundle": "npm run bundle:hooks && npm run bundle:mcp",
30
+ "postinstall": "npm rebuild better-sqlite3"
30
31
  },
31
32
  "keywords": [
32
33
  "claude-code",
@@ -70,6 +71,7 @@
70
71
  "typescript": "^6.0.2"
71
72
  },
72
73
  "files": [
74
+ ".claude-plugin/",
73
75
  "agents/",
74
76
  "dist/",
75
77
  "hooks/",
package/plugin.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "manifestVersion": 2,
3
3
  "name": "mindlore",
4
- "description": "AI-native knowledge system for Claude Code. Persistent, searchable, evolving knowledge base with FTS5.",
5
- "version": "0.7.1",
4
+ "description": "AI-native knowledge system for Claude Code. Persistent, searchable, evolving knowledge base with FTS5 and Knowledge Graph.",
5
+ "version": "0.7.3",
6
6
  "skills": [
7
7
  {
8
8
  "name": "mindlore-ingest",
@@ -80,9 +80,13 @@
80
80
  "mcpServers": {
81
81
  "mindlore": {
82
82
  "command": "node",
83
- "args": ["${CLAUDE_PLUGIN_ROOT}/mcp-server.cjs"]
83
+ "args": [
84
+ "${CLAUDE_PLUGIN_ROOT}/mcp-server.cjs"
85
+ ],
86
+ "description": "Mindlore MCP server: FTS5 search, episodic memory, knowledge graph relations, and KB management"
84
87
  }
85
88
  },
89
+ "_hooks_note": "Hooks loaded by CC plugin auto-discovery from hooks/ directory. This array is metadata only — not read by CC or init.",
86
90
  "hooks": [
87
91
  {
88
92
  "event": "SessionStart",
@@ -1,3 +1,10 @@
1
+ ---
2
+ name: mindlore-decide
3
+ description: Record or list decisions with supersedes chain
4
+ effort: low
5
+ context: fork
6
+ ---
7
+
1
8
  # Skill: Mindlore Decide
2
9
 
3
10
  Record and list decisions in the `.mindlore/decisions/` directory.
@@ -1,3 +1,10 @@
1
+ ---
2
+ name: mindlore-log
3
+ description: Session logging, reflect, status, and wiki save
4
+ effort: low
5
+ context: fork
6
+ ---
7
+
1
8
  # Skill: Mindlore Log
2
9
 
3
10
  Session logging, pattern extraction, and wiki updates.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.1",
2
+ "version": "0.7.3",
3
3
  "models": {
4
4
  "ingest": "haiku",
5
5
  "evolve": "sonnet",