mindlore 0.7.0 → 0.7.2

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 (120) hide show
  1. package/README.md +30 -3
  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 +70 -0
  5. package/dist/scripts/bundle-hooks.js.map +1 -0
  6. package/dist/scripts/init.js +0 -3
  7. package/dist/scripts/init.js.map +1 -1
  8. package/dist/scripts/lib/all-migrations.d.ts.map +1 -1
  9. package/dist/scripts/lib/all-migrations.js +3 -0
  10. package/dist/scripts/lib/all-migrations.js.map +1 -1
  11. package/dist/scripts/lib/constants.d.ts +7 -2
  12. package/dist/scripts/lib/constants.d.ts.map +1 -1
  13. package/dist/scripts/lib/constants.js +17 -22
  14. package/dist/scripts/lib/constants.js.map +1 -1
  15. package/dist/scripts/lib/mcp-tools.d.ts.map +1 -1
  16. package/dist/scripts/lib/mcp-tools.js +63 -78
  17. package/dist/scripts/lib/mcp-tools.js.map +1 -1
  18. package/dist/scripts/lib/migrations-v072.d.ts +3 -0
  19. package/dist/scripts/lib/migrations-v072.d.ts.map +1 -0
  20. package/dist/scripts/lib/migrations-v072.js +25 -0
  21. package/dist/scripts/lib/migrations-v072.js.map +1 -0
  22. package/dist/scripts/lib/relation-helpers.d.ts +15 -0
  23. package/dist/scripts/lib/relation-helpers.d.ts.map +1 -0
  24. package/dist/scripts/lib/relation-helpers.js +30 -0
  25. package/dist/scripts/lib/relation-helpers.js.map +1 -0
  26. package/dist/scripts/lib/tool-adapters/get-adapter.d.ts +21 -0
  27. package/dist/scripts/lib/tool-adapters/get-adapter.d.ts.map +1 -0
  28. package/dist/scripts/lib/tool-adapters/get-adapter.js +51 -0
  29. package/dist/scripts/lib/tool-adapters/get-adapter.js.map +1 -0
  30. package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts +34 -0
  31. package/dist/scripts/lib/tool-adapters/relate-adapter.d.ts.map +1 -0
  32. package/dist/scripts/lib/tool-adapters/relate-adapter.js +43 -0
  33. package/dist/scripts/lib/tool-adapters/relate-adapter.js.map +1 -0
  34. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts +5 -0
  35. package/dist/scripts/lib/tool-adapters/search-adapter.d.ts.map +1 -1
  36. package/dist/scripts/lib/tool-adapters/search-adapter.js +37 -0
  37. package/dist/scripts/lib/tool-adapters/search-adapter.js.map +1 -1
  38. package/dist/scripts/mcp-server.js +1 -1
  39. package/dist/scripts/mcp-server.js.map +1 -1
  40. package/dist/tests/dont-repeat-dedup.test.d.ts +2 -0
  41. package/dist/tests/dont-repeat-dedup.test.d.ts.map +1 -0
  42. package/dist/tests/dont-repeat-dedup.test.js +93 -0
  43. package/dist/tests/dont-repeat-dedup.test.js.map +1 -0
  44. package/dist/tests/e2e-kg-pipeline.test.d.ts +2 -0
  45. package/dist/tests/e2e-kg-pipeline.test.d.ts.map +1 -0
  46. package/dist/tests/e2e-kg-pipeline.test.js +59 -0
  47. package/dist/tests/e2e-kg-pipeline.test.js.map +1 -0
  48. package/dist/tests/helpers/db.d.ts.map +1 -1
  49. package/dist/tests/helpers/db.js +2 -1
  50. package/dist/tests/helpers/db.js.map +1 -1
  51. package/dist/tests/hook-smoke.test.js +1 -1
  52. package/dist/tests/hook-smoke.test.js.map +1 -1
  53. package/dist/tests/mcp-get-tool.test.d.ts +2 -0
  54. package/dist/tests/mcp-get-tool.test.d.ts.map +1 -0
  55. package/dist/tests/mcp-get-tool.test.js +93 -0
  56. package/dist/tests/mcp-get-tool.test.js.map +1 -0
  57. package/dist/tests/mcp-relate-tool.test.d.ts +2 -0
  58. package/dist/tests/mcp-relate-tool.test.d.ts.map +1 -0
  59. package/dist/tests/mcp-relate-tool.test.js +85 -0
  60. package/dist/tests/mcp-relate-tool.test.js.map +1 -0
  61. package/dist/tests/mcp-server.test.js +3 -1
  62. package/dist/tests/mcp-server.test.js.map +1 -1
  63. package/dist/tests/mcp-tools.test.js +20 -0
  64. package/dist/tests/mcp-tools.test.js.map +1 -1
  65. package/dist/tests/memory-relate.test.d.ts +2 -0
  66. package/dist/tests/memory-relate.test.d.ts.map +1 -0
  67. package/dist/tests/memory-relate.test.js +70 -0
  68. package/dist/tests/memory-relate.test.js.map +1 -0
  69. package/dist/tests/migrations-v063.test.js +1 -1
  70. package/dist/tests/migrations-v072.test.d.ts +2 -0
  71. package/dist/tests/migrations-v072.test.d.ts.map +1 -0
  72. package/dist/tests/migrations-v072.test.js +74 -0
  73. package/dist/tests/migrations-v072.test.js.map +1 -0
  74. package/dist/tests/plugin-cache-regression.test.d.ts +2 -0
  75. package/dist/tests/plugin-cache-regression.test.d.ts.map +1 -0
  76. package/dist/tests/plugin-cache-regression.test.js +19 -0
  77. package/dist/tests/plugin-cache-regression.test.js.map +1 -0
  78. package/dist/tests/search-hook.test.js +1 -1
  79. package/dist/tests/search-hook.test.js.map +1 -1
  80. package/hooks/cc-memory-bulk-sync.cjs +606 -0
  81. package/hooks/cc-session-sync.cjs +856 -0
  82. package/hooks/hooks.json +149 -0
  83. package/hooks/lib/mindlore-common.cjs +2 -2
  84. package/hooks/lib/secure-io.cjs +17 -0
  85. package/hooks/mindlore-cwd-changed.cjs +19 -34
  86. package/hooks/mindlore-decision-detector.cjs +40 -31
  87. package/hooks/mindlore-dont-repeat.cjs +75 -115
  88. package/hooks/mindlore-fts5-sync.cjs +15 -44
  89. package/hooks/mindlore-index.cjs +100 -101
  90. package/hooks/mindlore-model-router.cjs +20 -32
  91. package/hooks/mindlore-post-compact.cjs +26 -42
  92. package/hooks/mindlore-post-read.cjs +35 -60
  93. package/hooks/mindlore-pre-compact.cjs +55 -73
  94. package/hooks/mindlore-read-guard.cjs +28 -51
  95. package/hooks/mindlore-research-guard.cjs +63 -101
  96. package/hooks/mindlore-search.cjs +1156 -93
  97. package/hooks/mindlore-session-end.cjs +155 -276
  98. package/hooks/mindlore-session-focus.cjs +672 -110
  99. package/hooks/src/lib/constants.cjs +15 -0
  100. package/hooks/src/lib/mindlore-common.cjs +975 -0
  101. package/hooks/src/lib/mindlore-common.d.cts +72 -0
  102. package/hooks/src/lib/secure-io.cjs +17 -0
  103. package/hooks/src/lib/types.d.ts +58 -0
  104. package/hooks/src/mindlore-cwd-changed.cjs +57 -0
  105. package/hooks/src/mindlore-decision-detector.cjs +54 -0
  106. package/hooks/src/mindlore-dont-repeat.cjs +243 -0
  107. package/hooks/src/mindlore-fts5-sync.cjs +98 -0
  108. package/hooks/src/mindlore-index.cjs +230 -0
  109. package/hooks/src/mindlore-model-router.cjs +54 -0
  110. package/hooks/src/mindlore-post-compact.cjs +69 -0
  111. package/hooks/src/mindlore-post-read.cjs +106 -0
  112. package/hooks/src/mindlore-pre-compact.cjs +154 -0
  113. package/hooks/src/mindlore-read-guard.cjs +105 -0
  114. package/hooks/src/mindlore-research-guard.cjs +176 -0
  115. package/hooks/src/mindlore-search.cjs +200 -0
  116. package/hooks/src/mindlore-session-end.cjs +511 -0
  117. package/hooks/src/mindlore-session-focus.cjs +256 -0
  118. package/package.json +8 -3
  119. package/plugin.json +5 -4
  120. package/templates/config.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../../scripts/lib/mcp-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../../scripts/lib/mcp-tools.ts"],"names":[],"mappings":";;AAuDA,4CA8GC;AApKD,6BAAwB;AAGxB,yEAAiE;AACjE,uEAA+D;AAC/D,yEAAiE;AACjE,uEAA+D;AAC/D,yEAAiE;AACjE,yEAAiE;AACjE,yEAAiE;AACjE,mEAA2D;AAC3D,yDAAsD;AACtD,6CAAsC;AAOtC,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,iBAAiB;IACzB,GAAG,EAAE,cAAc;CACX,CAAC;AAEX,SAAS,QAAQ,CACf,GAAe,EACf,QAAgB,EAChB,OAAoD;IAEpD,OAAO,KAAK,EAAE,KAAa,EAAE,EAAE;QAC7B,OAAO,IAAA,mCAAgB,EAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxD,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC,IAAA,mBAAM,EAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,GAAe;IACjE,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,MAAM,EACjB,qDAAqD,EACrD;QACE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAChF,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9F,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAClF,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,gCAAY,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,MAAM,EACjB,0CAA0C,EAC1C;QACE,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACzE,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;KACtD,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,gCAAY,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,MAAM,EACjB,4CAA4C,EAC5C;QACE,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/E,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC/D,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,gCAAY,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,KAAK,EAChB,oDAAoD,EACpD;QACE,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACjF,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,8BAAW,CAAC,CAC7C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,MAAM,EACjB,gDAAgD,EAChD;QACE,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACnD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC3E,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC1E,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChF,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACzE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1E,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,IAAA,gCAAY,EAAC,CAAC,EAAE;gBACrB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAA,gCAAY,EAAC,CAAC,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,KAAK,EAChB,sCAAsC,EACtC,EACC,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,8BAAW,EAAC,GAAG,CAAC,CAAC,CAClE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,MAAM,EACjB,qDAAqD,EACrD;QACE,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACjF,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACxF,aAAa,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;aAChF,QAAQ,CAAC,yCAAyC,CAAC;QACtD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACrF,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,gCAAY,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,CAAC,GAAG,EACd,iEAAiE,EACjE;QACE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACpF,iBAAiB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KAC9F,EACD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,0BAAS,CAAC,CACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './schema-version.js';
2
+ export declare const V072_MIGRATIONS: Migration[];
3
+ //# sourceMappingURL=migrations-v072.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-v072.d.ts","sourceRoot":"","sources":["../../../scripts/lib/migrations-v072.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,eAAO,MAAM,eAAe,EAAE,SAAS,EAoBtC,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.V072_MIGRATIONS = void 0;
4
+ exports.V072_MIGRATIONS = [
5
+ {
6
+ version: 20,
7
+ name: 'create_mindlore_relations',
8
+ up: (db) => {
9
+ db.exec(`
10
+ CREATE TABLE IF NOT EXISTS mindlore_relations (
11
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
12
+ source_a TEXT NOT NULL,
13
+ source_b TEXT NOT NULL,
14
+ relation_type TEXT NOT NULL CHECK(relation_type IN ('cites', 'extends', 'contradicts', 'supersedes')),
15
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
16
+ UNIQUE(source_a, source_b, relation_type)
17
+ );
18
+ CREATE INDEX IF NOT EXISTS idx_relations_source_a ON mindlore_relations(source_a);
19
+ CREATE INDEX IF NOT EXISTS idx_relations_source_b ON mindlore_relations(source_b);
20
+ CREATE INDEX IF NOT EXISTS idx_relations_type ON mindlore_relations(relation_type);
21
+ `);
22
+ },
23
+ },
24
+ ];
25
+ //# sourceMappingURL=migrations-v072.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-v072.js","sourceRoot":"","sources":["../../../scripts/lib/migrations-v072.ts"],"names":[],"mappings":";;;AAIa,QAAA,eAAe,GAAgB;IAC1C;QACE,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,2BAA2B;QACjC,EAAE,EAAE,CAAC,EAAY,EAAE,EAAE;YACnB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;OAYP,CAAC,CAAC;QACL,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type BetterSqlite3 from 'better-sqlite3';
2
+ type Database = BetterSqlite3.Database;
3
+ export interface SourceRow {
4
+ path: string;
5
+ title: string;
6
+ }
7
+ export declare function assertSlugExists(db: Database, slug: string): SourceRow;
8
+ export interface RelatedSource {
9
+ source: string;
10
+ relation_type: string;
11
+ direction: 'outgoing' | 'incoming';
12
+ }
13
+ export declare function getRelationsForSlug(db: Database, slug: string, limit?: number): RelatedSource[];
14
+ export {};
15
+ //# sourceMappingURL=relation-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-helpers.d.ts","sourceRoot":"","sources":["../../../scripts/lib/relation-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAKvC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAItE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;CACpC;AAiBD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAoB,GAAG,aAAa,EAAE,CAE1G"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertSlugExists = assertSlugExists;
4
+ exports.getRelationsForSlug = getRelationsForSlug;
5
+ const constants_js_1 = require("./constants.js");
6
+ const db_helpers_js_1 = require("./db-helpers.js");
7
+ function assertSlugExists(db, slug) {
8
+ const row = (0, db_helpers_js_1.dbGet)(db, 'SELECT path, title FROM mindlore_fts WHERE slug = ? LIMIT 1', slug);
9
+ if (!row)
10
+ throw new Error(`Source slug "${slug}" not found in knowledge base`);
11
+ return row;
12
+ }
13
+ const symmetricPlaceholders = Array.from(constants_js_1.SYMMETRIC_TYPES).map(() => '?').join(',');
14
+ const symmetricValues = [...constants_js_1.SYMMETRIC_TYPES];
15
+ const priorityCaseExpr = (0, constants_js_1.buildPriorityCase)();
16
+ const RELATIONS_SQL = `
17
+ SELECT * FROM (
18
+ SELECT source_b AS source, relation_type, 'outgoing' AS direction
19
+ FROM mindlore_relations WHERE source_a = ?
20
+ UNION ALL
21
+ SELECT source_a AS source, relation_type, 'incoming' AS direction
22
+ FROM mindlore_relations WHERE source_b = ? AND relation_type IN (${symmetricPlaceholders})
23
+ )
24
+ ORDER BY CASE relation_type ${priorityCaseExpr} END
25
+ LIMIT ?
26
+ `;
27
+ function getRelationsForSlug(db, slug, limit = constants_js_1.RELATED_OVERFETCH) {
28
+ return (0, db_helpers_js_1.dbAll)(db, RELATIONS_SQL, slug, slug, ...symmetricValues, limit);
29
+ }
30
+ //# sourceMappingURL=relation-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-helpers.js","sourceRoot":"","sources":["../../../scripts/lib/relation-helpers.ts"],"names":[],"mappings":";;AAWA,4CAIC;AAuBD,kDAEC;AArCD,iDAAuF;AACvF,mDAA+C;AAO/C,SAAgB,gBAAgB,CAAC,EAAY,EAAE,IAAY;IACzD,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAY,EAAE,EAAE,6DAA6D,EAAE,IAAI,CAAC,CAAC;IACtG,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,+BAA+B,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC;AACb,CAAC;AAQD,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,8BAAe,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnF,MAAM,eAAe,GAAG,CAAC,GAAG,8BAAe,CAAC,CAAC;AAC7C,MAAM,gBAAgB,GAAG,IAAA,gCAAiB,GAAE,CAAC;AAC7C,MAAM,aAAa,GAAG;;;;;;uEAMiD,qBAAqB;;gCAE5D,gBAAgB;;CAE/C,CAAC;AAEF,SAAgB,mBAAmB,CAAC,EAAY,EAAE,IAAY,EAAE,KAAK,GAAG,gCAAiB;IACvF,OAAO,IAAA,qBAAK,EAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,KAAK,CAAC,CAAC;AACxF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { McpContext } from '../mcp-tools.js';
2
+ import { type RelatedSource } from '../relation-helpers.js';
3
+ export interface GetInput {
4
+ source: string;
5
+ section?: string;
6
+ include_relations?: boolean;
7
+ }
8
+ export interface GetOutput {
9
+ title: string;
10
+ slug: string;
11
+ content: string;
12
+ section?: string;
13
+ available_sections?: string[];
14
+ relations?: RelatedSource[];
15
+ metadata: {
16
+ path: string;
17
+ size: number;
18
+ };
19
+ }
20
+ export declare function handleGet(ctx: McpContext, input: GetInput): GetOutput;
21
+ //# sourceMappingURL=get-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/get-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnG,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,SAAS,CAwCrE"}
@@ -0,0 +1,51 @@
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
+ exports.handleGet = handleGet;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const chunker_js_1 = require("../chunker.js");
9
+ const slugify_js_1 = require("../slugify.js");
10
+ const constants_js_1 = require("../constants.js");
11
+ const relation_helpers_js_1 = require("../relation-helpers.js");
12
+ function handleGet(ctx, input) {
13
+ const { path: sourcePath, title } = (0, relation_helpers_js_1.assertSlugExists)(ctx.db, input.source);
14
+ let raw;
15
+ try {
16
+ raw = fs_1.default.readFileSync(sourcePath, 'utf8').replace(/\r\n/g, '\n');
17
+ }
18
+ catch {
19
+ throw new Error(`Source file not found on disk: ${sourcePath}`);
20
+ }
21
+ const size = Buffer.byteLength(raw, 'utf8');
22
+ const result = {
23
+ title,
24
+ slug: input.source,
25
+ content: raw,
26
+ metadata: { path: sourcePath, size },
27
+ };
28
+ if (input.section) {
29
+ const chunks = (0, chunker_js_1.chunkMarkdown)(raw);
30
+ const targetSlug = (0, slugify_js_1.slugify)(input.section);
31
+ const match = chunks.find(c => c.heading && (0, slugify_js_1.slugify)(c.heading) === targetSlug);
32
+ if (match) {
33
+ result.content = match.content;
34
+ result.section = match.heading.replace(/^#+\s*/, '');
35
+ }
36
+ else {
37
+ result.content = '';
38
+ const sections = chunks.filter(c => c.heading).map(c => c.heading.replace(/^#+\s*/, ''));
39
+ if (sections.length > 0)
40
+ result.available_sections = sections;
41
+ }
42
+ }
43
+ const includeRelations = input.include_relations !== false;
44
+ if (includeRelations) {
45
+ const related = (0, relation_helpers_js_1.getRelationsForSlug)(ctx.db, input.source, constants_js_1.MAX_RELATED_SOURCES);
46
+ if (related.length > 0)
47
+ result.relations = related;
48
+ }
49
+ return result;
50
+ }
51
+ //# sourceMappingURL=get-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/get-adapter.ts"],"names":[],"mappings":";;;;;AAuBA,8BAwCC;AA/DD,4CAAoB;AAEpB,8CAA8C;AAC9C,8CAAwC;AACxC,kDAAsD;AACtD,gEAAmG;AAkBnG,SAAgB,SAAS,CAAC,GAAe,EAAE,KAAe;IACxD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAA,sCAAgB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3E,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAc;QACxB,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;KACrC,CAAC;IAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAA,0BAAa,EAAC,GAAG,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,IAAA,oBAAO,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAA,oBAAO,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC;QAE/E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC;IAC3D,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAA,yCAAmB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,kCAAmB,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { McpContext } from '../mcp-tools.js';
2
+ import { type RelationType } from '../constants.js';
3
+ export interface RelateInput {
4
+ action: 'add' | 'remove' | 'list';
5
+ source_a?: string;
6
+ source_b?: string;
7
+ relation_type?: RelationType;
8
+ source?: string;
9
+ }
10
+ export interface AddResult {
11
+ created: boolean;
12
+ existing: boolean;
13
+ relation: {
14
+ source_a: string;
15
+ source_b: string;
16
+ relation_type: string;
17
+ };
18
+ }
19
+ export interface RemoveResult {
20
+ removed: boolean;
21
+ }
22
+ export interface ListResult {
23
+ relations: Array<{
24
+ id: number;
25
+ source_a: string;
26
+ source_b: string;
27
+ relation_type: string;
28
+ created_at: string;
29
+ }>;
30
+ total: number;
31
+ }
32
+ export type RelateResult = AddResult | RemoveResult | ListResult;
33
+ export declare function handleRelate(ctx: McpContext, input: RelateInput): RelateResult;
34
+ //# sourceMappingURL=relate-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relate-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/relate-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC3I,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,OAAO,CAAA;CAAE;AAClD,MAAM,WAAW,UAAU;IAAG,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC9J,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAQjE,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAyC9E"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRelate = handleRelate;
4
+ const constants_js_1 = require("../constants.js");
5
+ const db_helpers_js_1 = require("../db-helpers.js");
6
+ const relation_helpers_js_1 = require("../relation-helpers.js");
7
+ function validateRelationType(type) {
8
+ if (!constants_js_1.RELATION_TYPES.includes(type)) {
9
+ throw new Error(`Invalid relation_type "${type}". Valid: ${constants_js_1.RELATION_TYPES.join(', ')}`);
10
+ }
11
+ }
12
+ function handleRelate(ctx, input) {
13
+ if (input.action === 'add') {
14
+ if (!input.source_a || !input.source_b || !input.relation_type) {
15
+ throw new Error('add requires source_a, source_b, and relation_type');
16
+ }
17
+ validateRelationType(input.relation_type);
18
+ (0, relation_helpers_js_1.assertSlugExists)(ctx.db, input.source_a);
19
+ (0, relation_helpers_js_1.assertSlugExists)(ctx.db, input.source_b);
20
+ const result = ctx.db.prepare('INSERT OR IGNORE INTO mindlore_relations (source_a, source_b, relation_type) VALUES (?, ?, ?)').run(input.source_a, input.source_b, input.relation_type);
21
+ return {
22
+ created: result.changes > 0,
23
+ existing: result.changes === 0,
24
+ relation: { source_a: input.source_a, source_b: input.source_b, relation_type: input.relation_type },
25
+ };
26
+ }
27
+ if (input.action === 'remove') {
28
+ if (!input.source_a || !input.source_b || !input.relation_type) {
29
+ throw new Error('remove requires source_a, source_b, and relation_type');
30
+ }
31
+ validateRelationType(input.relation_type);
32
+ const result = ctx.db.prepare('DELETE FROM mindlore_relations WHERE source_a = ? AND source_b = ? AND relation_type = ?').run(input.source_a, input.source_b, input.relation_type);
33
+ return { removed: result.changes > 0 };
34
+ }
35
+ // list — both outgoing (source_a) and incoming (source_b) edges
36
+ const query = input.source
37
+ ? 'SELECT id, source_a, source_b, relation_type, created_at FROM mindlore_relations WHERE source_a = ? OR source_b = ? ORDER BY created_at DESC LIMIT 100'
38
+ : 'SELECT id, source_a, source_b, relation_type, created_at FROM mindlore_relations ORDER BY created_at DESC LIMIT 100';
39
+ const params = input.source ? [input.source, input.source] : [];
40
+ const rows = (0, db_helpers_js_1.dbAll)(ctx.db, query, ...params);
41
+ return { relations: rows, total: rows.length };
42
+ }
43
+ //# sourceMappingURL=relate-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relate-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/relate-adapter.ts"],"names":[],"mappings":";;AAwBA,oCAyCC;AAhED,kDAAoE;AACpE,oDAAyC;AACzC,gEAA0D;AAe1D,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,CAAE,6BAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,aAAa,6BAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,GAAe,EAAE,KAAkB;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAA,sCAAgB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAA,sCAAgB,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAC3B,+FAA+F,CAChG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3D,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,CAAC;YAC9B,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;SACrG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAC3B,0FAA0F,CAC3F,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,gEAAgE;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;QACxB,CAAC,CAAC,wJAAwJ;QAC1J,CAAC,CAAC,qHAAqH,CAAC;IAE1H,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAgG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IAE5I,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACjD,CAAC"}
@@ -1,10 +1,14 @@
1
1
  import type { McpContext } from '../mcp-tools.js';
2
+ import { type RelatedSource as BaseRelatedSource } from '../relation-helpers.js';
2
3
  interface SearchInput {
3
4
  query: string;
4
5
  limit?: number;
5
6
  scope?: string;
6
7
  contentType?: string;
7
8
  }
9
+ interface RelatedSource extends BaseRelatedSource {
10
+ via: string;
11
+ }
8
12
  interface SearchOutput {
9
13
  results: Array<{
10
14
  title: string;
@@ -16,6 +20,7 @@ interface SearchOutput {
16
20
  }>;
17
21
  total: number;
18
22
  truncated: boolean;
23
+ related: RelatedSource[];
19
24
  }
20
25
  export declare function handleSearch(ctx: McpContext, input: SearchInput): SearchOutput;
21
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"search-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAyB9E"}
1
+ {"version":3,"file":"search-adapter.d.ts","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAuB,KAAK,aAAa,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEtG,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,aAAc,SAAQ,iBAAiB;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAiCD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAoC9E"}
@@ -3,9 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleSearch = handleSearch;
4
4
  const search_engine_js_1 = require("../search-engine.js");
5
5
  const smart_snippet_js_1 = require("../smart-snippet.js");
6
+ const constants_js_1 = require("../constants.js");
7
+ const relation_helpers_js_1 = require("../relation-helpers.js");
6
8
  const MAX_LIMIT = 20;
7
9
  const DEFAULT_LIMIT = 5;
8
10
  const MAX_SNIPPET_LEN = 500;
11
+ function getRelatedForSlugs(ctx, slugs, excludeSlugs) {
12
+ if (slugs.length === 0)
13
+ return [];
14
+ const all = [];
15
+ for (const slug of slugs) {
16
+ const rows = (0, relation_helpers_js_1.getRelationsForSlug)(ctx.db, slug);
17
+ for (const row of rows) {
18
+ if (!excludeSlugs.has(row.source)) {
19
+ all.push({ ...row, via: slug });
20
+ }
21
+ }
22
+ }
23
+ const seen = new Set();
24
+ const deduped = [];
25
+ for (const item of all) {
26
+ const key = `${item.source}:${item.relation_type}`;
27
+ if (!seen.has(key)) {
28
+ seen.add(key);
29
+ deduped.push(item);
30
+ }
31
+ }
32
+ return deduped.slice(0, constants_js_1.MAX_RELATED_SOURCES);
33
+ }
9
34
  function handleSearch(ctx, input) {
10
35
  const limit = Math.min(input.limit ?? DEFAULT_LIMIT, MAX_LIMIT);
11
36
  const results = (0, search_engine_js_1.search)(ctx.db, input.query, { maxResults: limit });
@@ -23,10 +48,22 @@ function handleSearch(ctx, input) {
23
48
  path: r.path,
24
49
  };
25
50
  });
51
+ const slugList = mapped.map(r => r.slug);
52
+ const resultSlugs = new Set(slugList);
53
+ let related = [];
54
+ try {
55
+ related = getRelatedForSlugs(ctx, slugList, resultSlugs);
56
+ }
57
+ catch (err) {
58
+ const msg = err instanceof Error ? err.message : '';
59
+ if (!msg.includes('no such table'))
60
+ throw err;
61
+ }
26
62
  return {
27
63
  results: mapped,
28
64
  total: mapped.length,
29
65
  truncated: results.length >= limit,
66
+ related,
30
67
  };
31
68
  }
32
69
  //# sourceMappingURL=search-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":";;AA4BA,oCAyBC;AArDD,0DAA8D;AAC9D,0DAA0D;AAuB1D,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,SAAgB,YAAY,CAAC,GAAe,EAAE,KAAkB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,IAAA,yBAAM,EAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAA,kCAAe,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO;YACrB,CAAC,CAAC,IAAA,sCAAmB,EAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC;YAC3E,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEpD,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;KACnC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"search-adapter.js","sourceRoot":"","sources":["../../../../scripts/lib/tool-adapters/search-adapter.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ const mcp_tools_js_1 = require("./lib/mcp-tools.js");
15
15
  const err_msg_js_1 = require("./lib/err-msg.js");
16
16
  const PACKAGE_VERSION = (() => {
17
17
  try {
18
- const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '..', 'package.json'), 'utf8'));
18
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'package.json'), 'utf8'));
19
19
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- package.json structure is known
20
20
  return pkg.version ?? '0.0.0';
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../scripts/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../scripts/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dont-repeat-dedup.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dont-repeat-dedup.test.d.ts","sourceRoot":"","sources":["../../tests/dont-repeat-dedup.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
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 fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const child_process_1 = require("child_process");
10
+ const HOOK_PATH = path_1.default.join(__dirname, '..', 'hooks', 'mindlore-dont-repeat.cjs');
11
+ function runHook(input, settingsContent) {
12
+ const realSettings = path_1.default.join(os_1.default.homedir(), '.claude', 'settings.json');
13
+ let backup = null;
14
+ const claudeDir = path_1.default.dirname(realSettings);
15
+ if (settingsContent !== undefined) {
16
+ if (!fs_1.default.existsSync(claudeDir)) {
17
+ fs_1.default.mkdirSync(claudeDir, { recursive: true });
18
+ }
19
+ if (fs_1.default.existsSync(realSettings)) {
20
+ backup = fs_1.default.readFileSync(realSettings, 'utf8');
21
+ }
22
+ fs_1.default.writeFileSync(realSettings, settingsContent, 'utf8');
23
+ }
24
+ try {
25
+ const result = (0, child_process_1.execFileSync)('node', [HOOK_PATH], {
26
+ input: JSON.stringify(input),
27
+ timeout: 5000,
28
+ encoding: 'utf8',
29
+ env: { ...process.env },
30
+ });
31
+ return result;
32
+ }
33
+ catch (err) {
34
+ if (err !== null && err !== undefined && typeof err === 'object' && 'stdout' in err) {
35
+ const stdout = err.stdout;
36
+ return typeof stdout === 'string' ? stdout : '';
37
+ }
38
+ return '';
39
+ }
40
+ finally {
41
+ if (backup !== null) {
42
+ fs_1.default.writeFileSync(realSettings, backup, 'utf8');
43
+ }
44
+ else if (settingsContent !== undefined) {
45
+ try {
46
+ fs_1.default.unlinkSync(realSettings);
47
+ }
48
+ catch { /* noop */ }
49
+ }
50
+ }
51
+ }
52
+ describe('dont-repeat dedup with lessons-enforcement', () => {
53
+ const editInput = {
54
+ tool_name: 'Edit',
55
+ tool_input: {
56
+ file_path: '/tmp/test-file.ts',
57
+ new_string: 'appendFileSync is dangerous pattern that should trigger',
58
+ },
59
+ };
60
+ it('exits silently when lessons-enforcement hook is registered', () => {
61
+ const settings = JSON.stringify({
62
+ hooks: {
63
+ PreToolUse: [{
64
+ matcher: 'Write|Edit',
65
+ hooks: [{ command: 'node ~/.claude/hooks/lessons-enforcement.cjs' }],
66
+ }],
67
+ },
68
+ });
69
+ const output = runHook(editInput, settings);
70
+ expect(output).toBe('');
71
+ });
72
+ it('runs full scan when lessons-enforcement is NOT registered', () => {
73
+ const settings = JSON.stringify({
74
+ hooks: {
75
+ PreToolUse: [{
76
+ matcher: 'Bash',
77
+ hooks: [{ command: 'node some-other-hook.cjs' }],
78
+ }],
79
+ },
80
+ });
81
+ const output = runHook(editInput, settings);
82
+ // May or may not produce output depending on lessons content,
83
+ // but the hook should NOT exit early — it should process
84
+ // We verify it didn't crash (non-empty or empty is fine)
85
+ expect(typeof output).toBe('string');
86
+ });
87
+ it('runs full scan when settings.json has no hooks at all', () => {
88
+ const settings = JSON.stringify({});
89
+ const output = runHook(editInput, settings);
90
+ expect(typeof output).toBe('string');
91
+ });
92
+ });
93
+ //# sourceMappingURL=dont-repeat-dedup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dont-repeat-dedup.test.js","sourceRoot":"","sources":["../../tests/dont-repeat-dedup.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=e2e-kg-pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-kg-pipeline.test.d.ts","sourceRoot":"","sources":["../../tests/e2e-kg-pipeline.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
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 path_1 = __importDefault(require("path"));
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const db_1 = require("./helpers/db");
10
+ const ingest_adapter_1 = require("../scripts/lib/tool-adapters/ingest-adapter");
11
+ const relate_adapter_1 = require("../scripts/lib/tool-adapters/relate-adapter");
12
+ const search_adapter_1 = require("../scripts/lib/tool-adapters/search-adapter");
13
+ const get_adapter_1 = require("../scripts/lib/tool-adapters/get-adapter");
14
+ describe('E2E: KG pipeline — ingest → relate → search → get', () => {
15
+ let testDir;
16
+ let ctx;
17
+ beforeEach(() => {
18
+ testDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-e2e-kg-'));
19
+ fs_1.default.mkdirSync(path_1.default.join(testDir, 'raw'), { recursive: true });
20
+ fs_1.default.mkdirSync(path_1.default.join(testDir, 'sources'), { recursive: true });
21
+ const dbPath = path_1.default.join(testDir, 'test.db');
22
+ const db = (0, db_1.createTestDbWithFullSchema)(dbPath);
23
+ ctx = { db, baseDir: testDir };
24
+ });
25
+ afterEach(() => {
26
+ ctx.db.close();
27
+ fs_1.default.rmSync(testDir, { recursive: true, force: true });
28
+ });
29
+ it('full pipeline: ingest two sources, relate, search finds related, get retrieves with relations', () => {
30
+ // 1. Ingest source A
31
+ const a = (0, ingest_adapter_1.handleIngest)(ctx, { type: 'text', content: 'React is a UI framework for web apps', title: 'React Guide' });
32
+ expect(a.slug).toBe('react-guide');
33
+ // Manually index into FTS5 (ingest writes to raw/, FTS5 sync is via hook)
34
+ (0, db_1.insertFts)(ctx.db, { path: a.path, slug: a.slug, title: 'React Guide', content: 'React is a UI framework for web apps', category: 'raw', type: 'raw' });
35
+ // 2. Ingest source B
36
+ const b = (0, ingest_adapter_1.handleIngest)(ctx, { type: 'text', content: 'Next.js builds on top of React for SSR', title: 'Next.js Guide' });
37
+ expect(b.slug).toBe('nextjs-guide');
38
+ (0, db_1.insertFts)(ctx.db, { path: b.path, slug: b.slug, title: 'Next.js Guide', content: 'Next.js builds on top of React for SSR', category: 'raw', type: 'raw' });
39
+ // 3. Relate: B extends A
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
41
+ const rel = (0, relate_adapter_1.handleRelate)(ctx, { action: 'add', source_a: 'nextjs-guide', source_b: 'react-guide', relation_type: 'extends' });
42
+ expect(rel.created).toBe(true);
43
+ // 4. Search for "Next.js" → related should include react-guide via KG
44
+ const search = (0, search_adapter_1.handleSearch)(ctx, { query: 'Next.js SSR' });
45
+ const nextResult = search.results.find(r => r.slug === 'nextjs-guide');
46
+ expect(nextResult).toBeDefined();
47
+ expect(search.related.some(r => r.source === 'react-guide' && r.relation_type === 'extends')).toBe(true);
48
+ // 5. Get source with relations
49
+ const got = (0, get_adapter_1.handleGet)(ctx, { source: 'nextjs-guide' });
50
+ expect(got.content).toContain('Next.js builds on top of React');
51
+ expect(got.relations).toBeDefined();
52
+ expect(got.relations.some(r => r.source === 'react-guide')).toBe(true);
53
+ // 6. Remove relation → search should have empty related for this pair
54
+ (0, relate_adapter_1.handleRelate)(ctx, { action: 'remove', source_a: 'nextjs-guide', source_b: 'react-guide', relation_type: 'extends' });
55
+ const got2 = (0, get_adapter_1.handleGet)(ctx, { source: 'nextjs-guide' });
56
+ expect(got2.relations ?? []).toHaveLength(0);
57
+ });
58
+ });
59
+ //# sourceMappingURL=e2e-kg-pipeline.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-kg-pipeline.test.js","sourceRoot":"","sources":["../../tests/e2e-kg-pipeline.test.ts"],"names":[],"mappings":"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"}