stellavault 0.2.0 → 0.3.0

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 (400) hide show
  1. package/package.json +1 -1
  2. package/packages/core/dist/api/dashboard.d.ts +3 -0
  3. package/packages/core/{src/api/dashboard.ts → dist/api/dashboard.js} +8 -11
  4. package/packages/core/dist/api/graph-data.d.ts +11 -0
  5. package/packages/core/dist/api/graph-data.js +255 -0
  6. package/packages/core/dist/api/pwa.d.ts +3 -0
  7. package/packages/core/{src/api/pwa.ts → dist/api/pwa.js} +27 -32
  8. package/packages/core/dist/api/server.d.ts +16 -0
  9. package/packages/core/dist/api/server.js +718 -0
  10. package/packages/core/dist/capture/voice.d.ts +24 -0
  11. package/packages/core/dist/capture/voice.js +135 -0
  12. package/packages/core/{src/cloud/index.ts → dist/cloud/index.d.ts} +1 -0
  13. package/packages/core/dist/cloud/index.js +2 -0
  14. package/packages/core/dist/cloud/sync.d.ts +29 -0
  15. package/packages/core/dist/cloud/sync.js +137 -0
  16. package/packages/core/dist/config.d.ts +27 -0
  17. package/packages/core/dist/config.js +55 -0
  18. package/packages/core/dist/federation/credits.d.ts +26 -0
  19. package/packages/core/dist/federation/credits.js +56 -0
  20. package/packages/core/dist/federation/identity.d.ts +14 -0
  21. package/packages/core/dist/federation/identity.js +74 -0
  22. package/packages/core/{src/federation/index.ts → dist/federation/index.d.ts} +1 -2
  23. package/packages/core/dist/federation/index.js +5 -0
  24. package/packages/core/dist/federation/node.d.ts +31 -0
  25. package/packages/core/dist/federation/node.js +216 -0
  26. package/packages/core/dist/federation/privacy.d.ts +8 -0
  27. package/packages/core/dist/federation/privacy.js +40 -0
  28. package/packages/core/dist/federation/reputation.d.ts +37 -0
  29. package/packages/core/dist/federation/reputation.js +139 -0
  30. package/packages/core/dist/federation/search.d.ts +19 -0
  31. package/packages/core/dist/federation/search.js +101 -0
  32. package/packages/core/dist/federation/sharing.d.ts +72 -0
  33. package/packages/core/dist/federation/sharing.js +246 -0
  34. package/packages/core/dist/federation/trust.d.ts +15 -0
  35. package/packages/core/dist/federation/trust.js +60 -0
  36. package/packages/core/dist/federation/types.d.ts +40 -0
  37. package/packages/core/dist/federation/types.js +3 -0
  38. package/packages/core/dist/i18n/index.d.ts +6 -0
  39. package/packages/core/dist/i18n/index.js +81 -0
  40. package/packages/core/{src/index.ts → dist/index.d.ts} +46 -65
  41. package/packages/core/dist/index.js +69 -0
  42. package/packages/core/dist/indexer/chunker.d.ts +14 -0
  43. package/packages/core/dist/indexer/chunker.js +148 -0
  44. package/packages/core/dist/indexer/embedder.d.ts +8 -0
  45. package/packages/core/dist/indexer/embedder.js +3 -0
  46. package/packages/core/dist/indexer/index.d.ts +28 -0
  47. package/packages/core/dist/indexer/index.js +74 -0
  48. package/packages/core/dist/indexer/local-embedder.d.ts +3 -0
  49. package/packages/core/dist/indexer/local-embedder.js +29 -0
  50. package/packages/core/dist/indexer/scanner.d.ts +11 -0
  51. package/packages/core/dist/indexer/scanner.js +137 -0
  52. package/packages/core/dist/indexer/watcher.d.ts +19 -0
  53. package/packages/core/dist/indexer/watcher.js +49 -0
  54. package/packages/core/dist/intelligence/code-linker.d.ts +20 -0
  55. package/packages/core/dist/intelligence/code-linker.js +88 -0
  56. package/packages/core/dist/intelligence/contradiction-detector.d.ts +20 -0
  57. package/packages/core/dist/intelligence/contradiction-detector.js +115 -0
  58. package/packages/core/dist/intelligence/decay-engine.d.ts +27 -0
  59. package/packages/core/dist/intelligence/decay-engine.js +190 -0
  60. package/packages/core/dist/intelligence/duplicate-detector.d.ts +20 -0
  61. package/packages/core/dist/intelligence/duplicate-detector.js +55 -0
  62. package/packages/core/dist/intelligence/fsrs.d.ts +43 -0
  63. package/packages/core/dist/intelligence/fsrs.js +70 -0
  64. package/packages/core/dist/intelligence/gap-detector.d.ts +25 -0
  65. package/packages/core/dist/intelligence/gap-detector.js +78 -0
  66. package/packages/core/dist/intelligence/learning-path.d.ts +31 -0
  67. package/packages/core/dist/intelligence/learning-path.js +53 -0
  68. package/packages/core/dist/intelligence/notifications.d.ts +31 -0
  69. package/packages/core/dist/intelligence/notifications.js +65 -0
  70. package/packages/core/dist/intelligence/predictive-gaps.d.ts +14 -0
  71. package/packages/core/dist/intelligence/predictive-gaps.js +74 -0
  72. package/packages/core/dist/intelligence/semantic-versioning.d.ts +37 -0
  73. package/packages/core/dist/intelligence/semantic-versioning.js +68 -0
  74. package/packages/core/dist/intelligence/types.d.ts +28 -0
  75. package/packages/core/dist/intelligence/types.js +3 -0
  76. package/packages/core/dist/mcp/custom-tools.d.ts +29 -0
  77. package/packages/core/dist/mcp/custom-tools.js +70 -0
  78. package/packages/core/{src/mcp/index.ts → dist/mcp/index.d.ts} +1 -0
  79. package/packages/core/dist/mcp/index.js +2 -0
  80. package/packages/core/dist/mcp/server.d.ts +49 -0
  81. package/packages/core/dist/mcp/server.js +151 -0
  82. package/packages/core/dist/mcp/tools/agentic-graph.d.ts +87 -0
  83. package/packages/core/dist/mcp/tools/agentic-graph.js +88 -0
  84. package/packages/core/dist/mcp/tools/brief.d.ts +31 -0
  85. package/packages/core/dist/mcp/tools/brief.js +39 -0
  86. package/packages/core/dist/mcp/tools/decay.d.ts +33 -0
  87. package/packages/core/dist/mcp/tools/decay.js +32 -0
  88. package/packages/core/dist/mcp/tools/decision-journal.d.ts +78 -0
  89. package/packages/core/dist/mcp/tools/decision-journal.js +79 -0
  90. package/packages/core/dist/mcp/tools/detect-gaps.d.ts +24 -0
  91. package/packages/core/dist/mcp/tools/detect-gaps.js +47 -0
  92. package/packages/core/dist/mcp/tools/export.d.ts +29 -0
  93. package/packages/core/dist/mcp/tools/export.js +60 -0
  94. package/packages/core/dist/mcp/tools/federated-search.d.ts +29 -0
  95. package/packages/core/dist/mcp/tools/federated-search.js +36 -0
  96. package/packages/core/dist/mcp/tools/generate-claude-md.d.ts +35 -0
  97. package/packages/core/dist/mcp/tools/generate-claude-md.js +107 -0
  98. package/packages/core/dist/mcp/tools/get-document.d.ts +35 -0
  99. package/packages/core/dist/mcp/tools/get-document.js +25 -0
  100. package/packages/core/dist/mcp/tools/get-evolution.d.ts +28 -0
  101. package/packages/core/dist/mcp/tools/get-evolution.js +70 -0
  102. package/packages/core/dist/mcp/tools/get-related.d.ts +32 -0
  103. package/packages/core/dist/mcp/tools/get-related.js +33 -0
  104. package/packages/core/dist/mcp/tools/learning-path.d.ts +23 -0
  105. package/packages/core/dist/mcp/tools/learning-path.js +45 -0
  106. package/packages/core/dist/mcp/tools/link-code.d.ts +34 -0
  107. package/packages/core/dist/mcp/tools/link-code.js +44 -0
  108. package/packages/core/dist/mcp/tools/list-topics.d.ts +15 -0
  109. package/packages/core/dist/mcp/tools/list-topics.js +18 -0
  110. package/packages/core/dist/mcp/tools/search.d.ts +39 -0
  111. package/packages/core/dist/mcp/tools/search.js +29 -0
  112. package/packages/core/dist/mcp/tools/snapshot.d.ts +47 -0
  113. package/packages/core/dist/mcp/tools/snapshot.js +84 -0
  114. package/packages/core/dist/multi-vault/index.d.ts +26 -0
  115. package/packages/core/dist/multi-vault/index.js +80 -0
  116. package/packages/core/dist/pack/creator.d.ts +21 -0
  117. package/packages/core/dist/pack/creator.js +105 -0
  118. package/packages/core/dist/pack/exporter.d.ts +4 -0
  119. package/packages/core/dist/pack/exporter.js +18 -0
  120. package/packages/core/dist/pack/importer.d.ts +10 -0
  121. package/packages/core/dist/pack/importer.js +55 -0
  122. package/packages/core/{src/pack/index.ts → dist/pack/index.d.ts} +1 -0
  123. package/packages/core/dist/pack/index.js +5 -0
  124. package/packages/core/dist/pack/marketplace.d.ts +14 -0
  125. package/packages/core/dist/pack/marketplace.js +90 -0
  126. package/packages/core/dist/pack/pii-masker.d.ts +7 -0
  127. package/packages/core/dist/pack/pii-masker.js +29 -0
  128. package/packages/core/dist/pack/types.d.ts +36 -0
  129. package/packages/core/dist/pack/types.js +3 -0
  130. package/packages/core/dist/plugins/index.d.ts +35 -0
  131. package/packages/core/dist/plugins/index.js +57 -0
  132. package/packages/core/dist/plugins/webhooks.d.ts +30 -0
  133. package/packages/core/dist/plugins/webhooks.js +79 -0
  134. package/packages/core/dist/search/adaptive.d.ts +16 -0
  135. package/packages/core/dist/search/adaptive.js +67 -0
  136. package/packages/core/dist/search/bm25.d.ts +4 -0
  137. package/packages/core/dist/search/bm25.js +10 -0
  138. package/packages/core/dist/search/index.d.ts +15 -0
  139. package/packages/core/dist/search/index.js +64 -0
  140. package/packages/core/dist/search/rrf.d.ts +7 -0
  141. package/packages/core/dist/search/rrf.js +21 -0
  142. package/packages/core/dist/search/semantic.d.ts +5 -0
  143. package/packages/core/dist/search/semantic.js +6 -0
  144. package/packages/core/{src/store/index.ts → dist/store/index.d.ts} +1 -0
  145. package/packages/core/dist/store/index.js +2 -0
  146. package/packages/core/dist/store/sqlite-vec.d.ts +6 -0
  147. package/packages/core/dist/store/sqlite-vec.js +251 -0
  148. package/packages/core/dist/store/types.d.ts +20 -0
  149. package/packages/core/dist/store/types.js +3 -0
  150. package/packages/core/dist/team/index.d.ts +25 -0
  151. package/packages/core/dist/team/index.js +97 -0
  152. package/packages/core/dist/types/chunk.d.ts +23 -0
  153. package/packages/core/dist/types/chunk.js +3 -0
  154. package/packages/core/dist/types/document.d.ts +23 -0
  155. package/packages/core/dist/types/document.js +3 -0
  156. package/packages/core/dist/types/graph.d.ts +39 -0
  157. package/packages/core/dist/types/graph.js +3 -0
  158. package/packages/core/dist/types/index.d.ts +5 -0
  159. package/packages/core/dist/types/index.js +2 -0
  160. package/packages/core/dist/types/search.d.ts +39 -0
  161. package/packages/core/dist/types/search.js +3 -0
  162. package/packages/core/dist/utils/retry.d.ts +25 -0
  163. package/packages/core/dist/utils/retry.js +59 -0
  164. package/.github/workflows/pages.yml +0 -37
  165. package/memory/MEMORY.md +0 -25
  166. package/packages/cli/dist/commands/brief-cmd.d.ts.map +0 -1
  167. package/packages/cli/dist/commands/brief-cmd.js.map +0 -1
  168. package/packages/cli/dist/commands/capture-cmd.d.ts.map +0 -1
  169. package/packages/cli/dist/commands/capture-cmd.js.map +0 -1
  170. package/packages/cli/dist/commands/card-cmd.d.ts.map +0 -1
  171. package/packages/cli/dist/commands/card-cmd.js.map +0 -1
  172. package/packages/cli/dist/commands/clip-cmd.d.ts.map +0 -1
  173. package/packages/cli/dist/commands/clip-cmd.js.map +0 -1
  174. package/packages/cli/dist/commands/cloud-cmd.d.ts.map +0 -1
  175. package/packages/cli/dist/commands/cloud-cmd.js.map +0 -1
  176. package/packages/cli/dist/commands/contradictions-cmd.d.ts.map +0 -1
  177. package/packages/cli/dist/commands/contradictions-cmd.js.map +0 -1
  178. package/packages/cli/dist/commands/decay-cmd.d.ts.map +0 -1
  179. package/packages/cli/dist/commands/decay-cmd.js.map +0 -1
  180. package/packages/cli/dist/commands/digest-cmd.d.ts.map +0 -1
  181. package/packages/cli/dist/commands/digest-cmd.js.map +0 -1
  182. package/packages/cli/dist/commands/duplicates-cmd.d.ts.map +0 -1
  183. package/packages/cli/dist/commands/duplicates-cmd.js.map +0 -1
  184. package/packages/cli/dist/commands/federate-cmd.d.ts.map +0 -1
  185. package/packages/cli/dist/commands/federate-cmd.js.map +0 -1
  186. package/packages/cli/dist/commands/gaps-cmd.d.ts.map +0 -1
  187. package/packages/cli/dist/commands/gaps-cmd.js.map +0 -1
  188. package/packages/cli/dist/commands/graph-cmd.d.ts.map +0 -1
  189. package/packages/cli/dist/commands/graph-cmd.js.map +0 -1
  190. package/packages/cli/dist/commands/index-cmd.d.ts.map +0 -1
  191. package/packages/cli/dist/commands/index-cmd.js.map +0 -1
  192. package/packages/cli/dist/commands/init-cmd.d.ts.map +0 -1
  193. package/packages/cli/dist/commands/init-cmd.js.map +0 -1
  194. package/packages/cli/dist/commands/learn-cmd.d.ts.map +0 -1
  195. package/packages/cli/dist/commands/learn-cmd.js.map +0 -1
  196. package/packages/cli/dist/commands/pack-cmd.d.ts.map +0 -1
  197. package/packages/cli/dist/commands/pack-cmd.js.map +0 -1
  198. package/packages/cli/dist/commands/review-cmd.d.ts.map +0 -1
  199. package/packages/cli/dist/commands/review-cmd.js.map +0 -1
  200. package/packages/cli/dist/commands/search-cmd.d.ts.map +0 -1
  201. package/packages/cli/dist/commands/search-cmd.js.map +0 -1
  202. package/packages/cli/dist/commands/serve-cmd.d.ts.map +0 -1
  203. package/packages/cli/dist/commands/serve-cmd.js.map +0 -1
  204. package/packages/cli/dist/commands/status-cmd.d.ts.map +0 -1
  205. package/packages/cli/dist/commands/status-cmd.js.map +0 -1
  206. package/packages/cli/dist/commands/sync-cmd.d.ts.map +0 -1
  207. package/packages/cli/dist/commands/sync-cmd.js.map +0 -1
  208. package/packages/cli/dist/commands/vault-cmd.d.ts.map +0 -1
  209. package/packages/cli/dist/commands/vault-cmd.js.map +0 -1
  210. package/packages/cli/dist/index.d.ts.map +0 -1
  211. package/packages/cli/dist/index.js.map +0 -1
  212. package/packages/cli/src/commands/brief-cmd.ts +0 -87
  213. package/packages/cli/src/commands/capture-cmd.ts +0 -34
  214. package/packages/cli/src/commands/card-cmd.ts +0 -29
  215. package/packages/cli/src/commands/clip-cmd.ts +0 -172
  216. package/packages/cli/src/commands/cloud-cmd.ts +0 -75
  217. package/packages/cli/src/commands/contradictions-cmd.ts +0 -41
  218. package/packages/cli/src/commands/decay-cmd.ts +0 -57
  219. package/packages/cli/src/commands/digest-cmd.ts +0 -89
  220. package/packages/cli/src/commands/duplicates-cmd.ts +0 -38
  221. package/packages/cli/src/commands/federate-cmd.ts +0 -256
  222. package/packages/cli/src/commands/gaps-cmd.ts +0 -40
  223. package/packages/cli/src/commands/graph-cmd.ts +0 -88
  224. package/packages/cli/src/commands/index-cmd.ts +0 -65
  225. package/packages/cli/src/commands/init-cmd.ts +0 -145
  226. package/packages/cli/src/commands/learn-cmd.ts +0 -56
  227. package/packages/cli/src/commands/pack-cmd.ts +0 -121
  228. package/packages/cli/src/commands/review-cmd.ts +0 -125
  229. package/packages/cli/src/commands/search-cmd.ts +0 -45
  230. package/packages/cli/src/commands/serve-cmd.ts +0 -17
  231. package/packages/cli/src/commands/status-cmd.ts +0 -37
  232. package/packages/cli/src/commands/sync-cmd.ts +0 -68
  233. package/packages/cli/src/commands/vault-cmd.ts +0 -64
  234. package/packages/cli/src/index.ts +0 -187
  235. package/packages/core/src/api/graph-data.ts +0 -286
  236. package/packages/core/src/api/server.ts +0 -660
  237. package/packages/core/src/capture/voice.ts +0 -168
  238. package/packages/core/src/cloud/sync.ts +0 -167
  239. package/packages/core/src/config.ts +0 -82
  240. package/packages/core/src/federation/credits.ts +0 -80
  241. package/packages/core/src/federation/hyperswarm.d.ts +0 -19
  242. package/packages/core/src/federation/identity.ts +0 -90
  243. package/packages/core/src/federation/node.ts +0 -235
  244. package/packages/core/src/federation/privacy.ts +0 -52
  245. package/packages/core/src/federation/reputation.ts +0 -202
  246. package/packages/core/src/federation/search.ts +0 -129
  247. package/packages/core/src/federation/sharing.ts +0 -315
  248. package/packages/core/src/federation/trust.ts +0 -76
  249. package/packages/core/src/federation/types.ts +0 -25
  250. package/packages/core/src/i18n/index.ts +0 -85
  251. package/packages/core/src/indexer/chunker.ts +0 -180
  252. package/packages/core/src/indexer/embedder.ts +0 -9
  253. package/packages/core/src/indexer/index.ts +0 -113
  254. package/packages/core/src/indexer/local-embedder.ts +0 -35
  255. package/packages/core/src/indexer/scanner.ts +0 -142
  256. package/packages/core/src/indexer/watcher.ts +0 -62
  257. package/packages/core/src/intelligence/contradiction-detector.ts +0 -134
  258. package/packages/core/src/intelligence/decay-engine.ts +0 -229
  259. package/packages/core/src/intelligence/duplicate-detector.ts +0 -71
  260. package/packages/core/src/intelligence/fsrs.ts +0 -79
  261. package/packages/core/src/intelligence/gap-detector.ts +0 -109
  262. package/packages/core/src/intelligence/learning-path.ts +0 -86
  263. package/packages/core/src/intelligence/notifications.ts +0 -106
  264. package/packages/core/src/intelligence/predictive-gaps.ts +0 -94
  265. package/packages/core/src/intelligence/semantic-versioning.ts +0 -97
  266. package/packages/core/src/intelligence/types.ts +0 -28
  267. package/packages/core/src/mcp/custom-tools.ts +0 -97
  268. package/packages/core/src/mcp/server.ts +0 -142
  269. package/packages/core/src/mcp/tools/agentic-graph.ts +0 -96
  270. package/packages/core/src/mcp/tools/brief.ts +0 -49
  271. package/packages/core/src/mcp/tools/decay.ts +0 -40
  272. package/packages/core/src/mcp/tools/decision-journal.ts +0 -95
  273. package/packages/core/src/mcp/tools/export.ts +0 -72
  274. package/packages/core/src/mcp/tools/federated-search.ts +0 -43
  275. package/packages/core/src/mcp/tools/generate-claude-md.ts +0 -130
  276. package/packages/core/src/mcp/tools/get-document.ts +0 -26
  277. package/packages/core/src/mcp/tools/get-related.ts +0 -41
  278. package/packages/core/src/mcp/tools/learning-path.ts +0 -52
  279. package/packages/core/src/mcp/tools/list-topics.ts +0 -20
  280. package/packages/core/src/mcp/tools/search.ts +0 -35
  281. package/packages/core/src/mcp/tools/snapshot.ts +0 -98
  282. package/packages/core/src/multi-vault/index.ts +0 -118
  283. package/packages/core/src/pack/creator.ts +0 -127
  284. package/packages/core/src/pack/exporter.ts +0 -21
  285. package/packages/core/src/pack/importer.ts +0 -82
  286. package/packages/core/src/pack/marketplace.ts +0 -103
  287. package/packages/core/src/pack/pii-masker.ts +0 -38
  288. package/packages/core/src/pack/types.ts +0 -39
  289. package/packages/core/src/plugins/index.ts +0 -100
  290. package/packages/core/src/plugins/webhooks.ts +0 -110
  291. package/packages/core/src/search/bm25.ts +0 -16
  292. package/packages/core/src/search/index.ts +0 -83
  293. package/packages/core/src/search/rrf.ts +0 -31
  294. package/packages/core/src/search/semantic.ts +0 -15
  295. package/packages/core/src/store/sqlite-vec.ts +0 -290
  296. package/packages/core/src/store/types.ts +0 -22
  297. package/packages/core/src/team/index.ts +0 -126
  298. package/packages/core/src/types/chunk.ts +0 -25
  299. package/packages/core/src/types/document.ts +0 -24
  300. package/packages/core/src/types/graph.ts +0 -44
  301. package/packages/core/src/types/index.ts +0 -15
  302. package/packages/core/src/types/search.ts +0 -38
  303. package/packages/core/src/utils/retry.ts +0 -85
  304. package/packages/core/tests/api-card.test.ts +0 -60
  305. package/packages/core/tests/api-routes.test.ts +0 -98
  306. package/packages/core/tests/bm25.test.ts +0 -87
  307. package/packages/core/tests/chunker.test.ts +0 -48
  308. package/packages/core/tests/cluster.test.ts +0 -75
  309. package/packages/core/tests/constellation.test.ts +0 -77
  310. package/packages/core/tests/export-utils.test.ts +0 -97
  311. package/packages/core/tests/fsrs.test.ts +0 -96
  312. package/packages/core/tests/gesture-detector.test.ts +0 -45
  313. package/packages/core/tests/graph-data.test.ts +0 -87
  314. package/packages/core/tests/layout.test.ts +0 -83
  315. package/packages/core/tests/mcp.test.ts +0 -148
  316. package/packages/core/tests/pack.test.ts +0 -127
  317. package/packages/core/tests/pii-masker.test.ts +0 -42
  318. package/packages/core/tests/profile-card.test.ts +0 -62
  319. package/packages/core/tests/rrf.test.ts +0 -29
  320. package/packages/core/tests/search-integration.test.ts +0 -139
  321. package/packages/core/tests/store.test.ts +0 -80
  322. package/packages/graph/click-result.png +0 -0
  323. package/packages/graph/dist/assets/camera_utils-BMxqtvoZ.js +0 -1
  324. package/packages/graph/dist/assets/hands-DXA01_mx.js +0 -18
  325. package/packages/graph/dist/assets/index-DMEe2diW.js +0 -4192
  326. package/packages/graph/dist/assets/layout.worker-DbKCEFTz.js +0 -1
  327. package/packages/graph/dist/index.html +0 -17
  328. package/packages/graph/index.html +0 -17
  329. package/packages/graph/package.json +0 -32
  330. package/packages/graph/src/App.tsx +0 -7
  331. package/packages/graph/src/api/client.ts +0 -39
  332. package/packages/graph/src/components/ClusterFilter.tsx +0 -73
  333. package/packages/graph/src/components/ConstellationView.tsx +0 -232
  334. package/packages/graph/src/components/ExportPanel.tsx +0 -177
  335. package/packages/graph/src/components/Graph3D.tsx +0 -230
  336. package/packages/graph/src/components/GraphEdges.tsx +0 -100
  337. package/packages/graph/src/components/GraphNodes.tsx +0 -386
  338. package/packages/graph/src/components/HealthDashboard.tsx +0 -173
  339. package/packages/graph/src/components/Layout.tsx +0 -214
  340. package/packages/graph/src/components/MotionOverlay.tsx +0 -81
  341. package/packages/graph/src/components/MotionToggle.tsx +0 -33
  342. package/packages/graph/src/components/MultiverseView.tsx +0 -286
  343. package/packages/graph/src/components/NodeDetail.tsx +0 -232
  344. package/packages/graph/src/components/PulseParticle.tsx +0 -232
  345. package/packages/graph/src/components/SearchBar.tsx +0 -107
  346. package/packages/graph/src/components/StarField.tsx +0 -197
  347. package/packages/graph/src/components/StatusBar.tsx +0 -53
  348. package/packages/graph/src/components/Timeline.tsx +0 -148
  349. package/packages/graph/src/components/ToolsPanel.tsx +0 -512
  350. package/packages/graph/src/components/Tooltip.tsx +0 -100
  351. package/packages/graph/src/components/TypeFilter.tsx +0 -131
  352. package/packages/graph/src/embed/EmbedGraph.tsx +0 -144
  353. package/packages/graph/src/hooks/useConstellationLOD.ts +0 -76
  354. package/packages/graph/src/hooks/useDecay.ts +0 -37
  355. package/packages/graph/src/hooks/useExport.ts +0 -165
  356. package/packages/graph/src/hooks/useGraph.ts +0 -69
  357. package/packages/graph/src/hooks/useKeyboardNav.ts +0 -122
  358. package/packages/graph/src/hooks/useLayout.ts +0 -45
  359. package/packages/graph/src/hooks/useMotion.ts +0 -120
  360. package/packages/graph/src/hooks/usePulse.ts +0 -58
  361. package/packages/graph/src/hooks/useSearch.ts +0 -71
  362. package/packages/graph/src/lib/constellation.ts +0 -107
  363. package/packages/graph/src/lib/export-utils.ts +0 -48
  364. package/packages/graph/src/lib/gesture-detector.ts +0 -123
  365. package/packages/graph/src/lib/layout.worker.ts +0 -153
  366. package/packages/graph/src/lib/motion-controller.ts +0 -83
  367. package/packages/graph/src/lib/profile-card.ts +0 -122
  368. package/packages/graph/src/main.tsx +0 -4
  369. package/packages/graph/src/stores/graph-store.ts +0 -155
  370. package/packages/graph/success.png +0 -0
  371. package/packages/graph/test-click.mjs +0 -49
  372. package/packages/graph/test-explore.mjs +0 -102
  373. package/packages/graph/test-final.mjs +0 -61
  374. package/packages/graph/test-graph.mjs +0 -139
  375. package/packages/graph/test-hover.mjs +0 -48
  376. package/packages/graph/test-pulse.mjs +0 -68
  377. package/packages/graph/test-screenshot.mjs +0 -56
  378. package/packages/graph/test-v2.mjs +0 -97
  379. package/packages/graph/tsconfig.tsbuildinfo +0 -1
  380. package/packages/graph/vite.config.ts +0 -15
  381. package/packages/sync/.env.example +0 -11
  382. package/packages/sync/.sync-state.json +0 -317
  383. package/packages/sync/.upload-state.json +0 -1009
  384. package/packages/sync/create-stella-network-notion.mjs +0 -151
  385. package/packages/sync/create-stellavault-project-notion.mjs +0 -322
  386. package/packages/sync/logs/sync-2026-03-28.log +0 -6
  387. package/packages/sync/logs/sync-2026-03-29.log +0 -12
  388. package/packages/sync/logs/sync-2026-03-30.log +0 -6
  389. package/packages/sync/logs/sync-2026-03-31.log +0 -6
  390. package/packages/sync/logs/sync-2026-04-01.log +0 -6
  391. package/packages/sync/logs/sync-2026-04-02.log +0 -6
  392. package/packages/sync/package-lock.json +0 -373
  393. package/packages/sync/package.json +0 -16
  394. package/packages/sync/run-sync.bat +0 -18
  395. package/packages/sync/run-sync.mjs +0 -46
  396. package/packages/sync/setup-scheduler.mjs +0 -119
  397. package/packages/sync/structured-sync.mjs +0 -187
  398. package/packages/sync/sync-to-obsidian.mjs +0 -264
  399. package/packages/sync/upload-pdca-to-notion.mjs +0 -495
  400. package/tsconfig.base.json +0 -18
@@ -0,0 +1,47 @@
1
+ // Design Ref: §3.5 — MCP detect-gaps tool
2
+ // Plan SC: SC-04 MCP detect-gaps가 클러스터 간 갭 + 고립 노드 반환
3
+ import { detectKnowledgeGaps } from '../../intelligence/gap-detector.js';
4
+ export function createDetectGapsTool(store) {
5
+ return {
6
+ name: 'detect-gaps',
7
+ description: 'Detect knowledge gaps between topic clusters. Returns gap severity, isolated nodes, and suggested topics to bridge gaps.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ minSeverity: {
12
+ type: 'string',
13
+ description: 'Minimum gap severity to include: high, medium, or low',
14
+ enum: ['high', 'medium', 'low'],
15
+ },
16
+ },
17
+ },
18
+ handler: async (args) => {
19
+ const minSeverity = args.minSeverity ?? 'medium';
20
+ const report = await detectKnowledgeGaps(store);
21
+ const sevOrder = { high: 0, medium: 1, low: 2 };
22
+ const threshold = sevOrder[minSeverity] ?? 1;
23
+ const filtered = report.gaps.filter((g) => sevOrder[g.severity] <= threshold);
24
+ return {
25
+ content: [{
26
+ type: 'text',
27
+ text: JSON.stringify({
28
+ totalClusters: report.totalClusters,
29
+ totalGaps: filtered.length,
30
+ gaps: filtered.map((g) => ({
31
+ clusterA: g.clusterA,
32
+ clusterB: g.clusterB,
33
+ bridgeCount: g.bridgeCount,
34
+ severity: g.severity,
35
+ suggestedTopic: g.suggestedTopic,
36
+ })),
37
+ isolatedNodes: report.isolatedNodes.slice(0, 10),
38
+ suggestion: filtered.length > 0
39
+ ? `${filtered[0].suggestedTopic} 주제로 노트를 작성하면 지식 갭을 줄일 수 있습니다.`
40
+ : '현재 심각한 지식 갭이 없습니다.',
41
+ }, null, 2),
42
+ }],
43
+ };
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=detect-gaps.js.map
@@ -0,0 +1,29 @@
1
+ import type { VectorStore } from '../../store/types.js';
2
+ export declare const exportToolDef: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ outputPath: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ format: {
13
+ type: string;
14
+ enum: string[];
15
+ description: string;
16
+ };
17
+ };
18
+ required: string[];
19
+ };
20
+ };
21
+ export declare function handleExport(store: VectorStore, args: {
22
+ outputPath: string;
23
+ format?: string;
24
+ }): Promise<{
25
+ exported: number;
26
+ path: string;
27
+ format: string;
28
+ }>;
29
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1,60 @@
1
+ // Design Ref: §12.1 F20 — 지식 내보내기 포맷 (락인 방지)
2
+ import { writeFileSync, mkdirSync } from 'node:fs';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ const ALLOWED_EXPORT_DIRS = [
6
+ resolve(homedir(), '.stellavault'),
7
+ resolve('.'),
8
+ ];
9
+ function validateExportPath(outputPath) {
10
+ const resolved = resolve(outputPath);
11
+ const isAllowed = ALLOWED_EXPORT_DIRS.some(dir => resolved.startsWith(resolve(dir)));
12
+ if (!isAllowed) {
13
+ throw new Error(`Export path must be within current directory or ~/.stellavault/. Got: ${resolved}`);
14
+ }
15
+ return resolved;
16
+ }
17
+ export const exportToolDef = {
18
+ name: 'export',
19
+ description: '벡터 DB의 문서와 메타데이터를 JSON 파일로 내보냅니다. 다른 도구로 이전 가능.',
20
+ inputSchema: {
21
+ type: 'object',
22
+ properties: {
23
+ outputPath: { type: 'string', description: '출력 파일 경로 (예: ./export.json)' },
24
+ format: { type: 'string', enum: ['json', 'csv'], description: '출력 포맷 (기본: json)' },
25
+ },
26
+ required: ['outputPath'],
27
+ },
28
+ };
29
+ export async function handleExport(store, args) {
30
+ const docs = await store.getAllDocuments();
31
+ const stats = await store.getStats();
32
+ const topics = await store.getTopics();
33
+ const safePath = validateExportPath(args.outputPath);
34
+ mkdirSync(dirname(safePath), { recursive: true });
35
+ if (args.format === 'csv') {
36
+ const header = 'id,filePath,title,tags,lastModified,contentHash';
37
+ const rows = docs.map(d => `"${d.id}","${d.filePath}","${d.title.replace(/"/g, '""')}","${d.tags.join(';')}","${d.lastModified}","${d.contentHash}"`);
38
+ writeFileSync(safePath, [header, ...rows].join('\n'), 'utf-8');
39
+ }
40
+ else {
41
+ const exported = {
42
+ exportedAt: new Date().toISOString(),
43
+ version: '1.0',
44
+ stats,
45
+ topics,
46
+ documents: docs.map(d => ({
47
+ id: d.id,
48
+ filePath: d.filePath,
49
+ title: d.title,
50
+ tags: d.tags,
51
+ frontmatter: d.frontmatter,
52
+ lastModified: d.lastModified,
53
+ contentLength: d.content.length,
54
+ })),
55
+ };
56
+ writeFileSync(safePath, JSON.stringify(exported, null, 2), 'utf-8');
57
+ }
58
+ return { exported: docs.length, path: safePath, format: args.format ?? 'json' };
59
+ }
60
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1,29 @@
1
+ import type { FederatedSearch } from '../../federation/search.js';
2
+ export declare function createFederatedSearchTool(federatedSearch: FederatedSearch | null): {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ query: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ limit: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ };
17
+ required: string[];
18
+ };
19
+ handler(args: {
20
+ query: string;
21
+ limit?: number;
22
+ }): Promise<{
23
+ content: {
24
+ type: "text";
25
+ text: string;
26
+ }[];
27
+ }>;
28
+ };
29
+ //# sourceMappingURL=federated-search.d.ts.map
@@ -0,0 +1,36 @@
1
+ // MCP Tool: federated-search (Federation Phase 1b)
2
+ // AI 에이전트가 연합 네트워크를 검색
3
+ export function createFederatedSearchTool(federatedSearch) {
4
+ return {
5
+ name: 'federated-search',
6
+ description: 'Search across all connected Federation peers. Returns results from other Stellavault nodes in the P2P network. Only titles, similarity scores, and 50-char snippets are shared — no raw text leaves any node.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ query: { type: 'string', description: 'Search query' },
11
+ limit: { type: 'number', description: 'Max results per peer (default: 5)' },
12
+ },
13
+ required: ['query'],
14
+ },
15
+ async handler(args) {
16
+ if (!federatedSearch) {
17
+ return { content: [{ type: 'text', text: 'Federation not active. Run `sv federate join` first.' }] };
18
+ }
19
+ const results = await federatedSearch.search(args.query, { limit: args.limit ?? 5 });
20
+ if (results.length === 0) {
21
+ return { content: [{ type: 'text', text: 'No results from federation peers. Either no peers connected or no matching documents.' }] };
22
+ }
23
+ const lines = [
24
+ `🌐 Federation Search: "${args.query}" — ${results.length} results from ${new Set(results.map(r => r.peerId)).size} peers`,
25
+ '',
26
+ ];
27
+ for (const r of results) {
28
+ lines.push(`**${r.title}** (${Math.round(r.similarity * 100)}%) [${r.peerName}]`);
29
+ lines.push(` ${r.snippet}...`);
30
+ lines.push('');
31
+ }
32
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=federated-search.js.map
@@ -0,0 +1,35 @@
1
+ import type { SearchEngine } from '../../search/index.js';
2
+ import type { VectorStore } from '../../store/types.js';
3
+ export declare const generateClaudeMdToolDef: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ projectName: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ topics: {
14
+ type: string;
15
+ items: {
16
+ type: string;
17
+ };
18
+ description: string;
19
+ };
20
+ };
21
+ required: string[];
22
+ };
23
+ };
24
+ export declare function handleGenerateClaudeMd(searchEngine: SearchEngine, store: VectorStore, args: {
25
+ projectName: string;
26
+ topics?: string[];
27
+ }): Promise<{
28
+ content: string;
29
+ stats: {
30
+ queriesRun: number;
31
+ uniqueResults: number;
32
+ sections: string[];
33
+ };
34
+ }>;
35
+ //# sourceMappingURL=generate-claude-md.d.ts.map
@@ -0,0 +1,107 @@
1
+ // Design Ref: §12.1 F13 — CLAUDE.md 자동 생성기 (킬러 유스케이스)
2
+ export const generateClaudeMdToolDef = {
3
+ name: 'generate-claude-md',
4
+ description: '프로젝트명을 기반으로 관련 지식(아키텍처, 패턴, 교훈, 결정사항)을 검색하여 CLAUDE.md 초안을 자동 생성합니다.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ projectName: { type: 'string', description: '프로젝트명 또는 주요 키워드' },
9
+ topics: {
10
+ type: 'array',
11
+ items: { type: 'string' },
12
+ description: '추가 검색할 토픽 (예: ["인증", "배포", "성능"])',
13
+ },
14
+ },
15
+ required: ['projectName'],
16
+ },
17
+ };
18
+ export async function handleGenerateClaudeMd(searchEngine, store, args) {
19
+ const { projectName, topics = [] } = args;
20
+ // 프로젝트 관련 지식 검색 (여러 관점)
21
+ const queries = [
22
+ `${projectName} 아키텍처 설계`,
23
+ `${projectName} 패턴 컨벤션`,
24
+ `${projectName} 교훈 실수 주의사항`,
25
+ `${projectName} 기술 스택 의존성`,
26
+ ...topics.map(t => `${projectName} ${t}`),
27
+ ];
28
+ const allResults = new Map();
29
+ for (const query of queries) {
30
+ const results = await searchEngine.search({ query, limit: 3 });
31
+ const category = query.replace(projectName, '').trim();
32
+ for (const r of results) {
33
+ const key = r.chunk.id;
34
+ if (!allResults.has(key) || (allResults.get(key).score < r.score)) {
35
+ allResults.set(key, {
36
+ title: `${r.document.title} §${r.chunk.heading}`,
37
+ content: r.chunk.content.slice(0, 500),
38
+ score: r.score,
39
+ category,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ // 카테고리별 분류
45
+ const sorted = [...allResults.values()].sort((a, b) => b.score - a.score);
46
+ // CLAUDE.md 초안 생성
47
+ const sections = [];
48
+ sections.push(`# ${projectName} — CLAUDE.md`);
49
+ sections.push('');
50
+ sections.push('> 이 파일은 evan-knowledge-hub MCP에서 자동 생성되었습니다.');
51
+ sections.push(`> 생성일: ${new Date().toISOString().slice(0, 10)}`);
52
+ sections.push(`> 참조 지식: ${sorted.length}건`);
53
+ sections.push('');
54
+ // 아키텍처 섹션
55
+ const archResults = sorted.filter(r => r.category.includes('아키텍처') || r.category.includes('설계'));
56
+ if (archResults.length > 0) {
57
+ sections.push('## 아키텍처 & 설계');
58
+ sections.push('');
59
+ for (const r of archResults.slice(0, 3)) {
60
+ sections.push(`### ${r.title}`);
61
+ sections.push(r.content.trim());
62
+ sections.push('');
63
+ }
64
+ }
65
+ // 패턴/컨벤션 섹션
66
+ const patternResults = sorted.filter(r => r.category.includes('패턴') || r.category.includes('컨벤션'));
67
+ if (patternResults.length > 0) {
68
+ sections.push('## 코딩 패턴 & 컨벤션');
69
+ sections.push('');
70
+ for (const r of patternResults.slice(0, 3)) {
71
+ sections.push(`### ${r.title}`);
72
+ sections.push(r.content.trim());
73
+ sections.push('');
74
+ }
75
+ }
76
+ // 교훈 섹션
77
+ const lessonResults = sorted.filter(r => r.category.includes('교훈') || r.category.includes('실수'));
78
+ if (lessonResults.length > 0) {
79
+ sections.push('## 교훈 & 주의사항');
80
+ sections.push('');
81
+ for (const r of lessonResults.slice(0, 5)) {
82
+ sections.push(`- **${r.title}**: ${r.content.slice(0, 200).replace(/\n/g, ' ').trim()}`);
83
+ }
84
+ sections.push('');
85
+ }
86
+ // 기타 관련 지식
87
+ const otherResults = sorted.filter(r => !r.category.includes('아키텍처') && !r.category.includes('설계') &&
88
+ !r.category.includes('패턴') && !r.category.includes('교훈') && !r.category.includes('실수'));
89
+ if (otherResults.length > 0) {
90
+ sections.push('## 관련 지식');
91
+ sections.push('');
92
+ for (const r of otherResults.slice(0, 5)) {
93
+ sections.push(`- **${r.title}** (score: ${r.score.toFixed(3)})`);
94
+ }
95
+ sections.push('');
96
+ }
97
+ const claudeMd = sections.join('\n');
98
+ return {
99
+ content: claudeMd,
100
+ stats: {
101
+ queriesRun: queries.length,
102
+ uniqueResults: sorted.length,
103
+ sections: ['아키텍처', '패턴', '교훈', '관련 지식'].filter((_, i) => [archResults, patternResults, lessonResults, otherResults][i].length > 0),
104
+ },
105
+ };
106
+ }
107
+ //# sourceMappingURL=generate-claude-md.js.map
@@ -0,0 +1,35 @@
1
+ import type { VectorStore } from '../../store/types.js';
2
+ export declare const getDocumentToolDef: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ id: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ };
13
+ required: string[];
14
+ };
15
+ };
16
+ export declare function handleGetDocument(store: VectorStore, args: {
17
+ id: string;
18
+ }): Promise<{
19
+ error: string;
20
+ title?: undefined;
21
+ filePath?: undefined;
22
+ content?: undefined;
23
+ tags?: undefined;
24
+ frontmatter?: undefined;
25
+ lastModified?: undefined;
26
+ } | {
27
+ title: string;
28
+ filePath: string;
29
+ content: string;
30
+ tags: string[];
31
+ frontmatter: Record<string, unknown>;
32
+ lastModified: string;
33
+ error?: undefined;
34
+ }>;
35
+ //# sourceMappingURL=get-document.d.ts.map
@@ -0,0 +1,25 @@
1
+ export const getDocumentToolDef = {
2
+ name: 'get-document',
3
+ description: '문서 ID 또는 파일 경로로 전체 문서 내용을 가져옵니다.',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {
7
+ id: { type: 'string', description: '문서 ID 또는 파일 경로' },
8
+ },
9
+ required: ['id'],
10
+ },
11
+ };
12
+ export async function handleGetDocument(store, args) {
13
+ const doc = await store.getDocument(args.id);
14
+ if (!doc)
15
+ return { error: `Document not found: ${args.id}` };
16
+ return {
17
+ title: doc.title,
18
+ filePath: doc.filePath,
19
+ content: doc.content,
20
+ tags: doc.tags,
21
+ frontmatter: doc.frontmatter,
22
+ lastModified: doc.lastModified,
23
+ };
24
+ }
25
+ //# sourceMappingURL=get-document.js.map
@@ -0,0 +1,28 @@
1
+ import type { VectorStore } from '../../store/types.js';
2
+ export declare function createGetEvolutionTool(store: VectorStore): {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ topic: {
9
+ type: "string";
10
+ description: string;
11
+ };
12
+ limit: {
13
+ type: "number";
14
+ description: string;
15
+ };
16
+ };
17
+ };
18
+ handler: (args: {
19
+ topic?: string;
20
+ limit?: number;
21
+ }) => Promise<{
22
+ content: {
23
+ type: "text";
24
+ text: string;
25
+ }[];
26
+ }>;
27
+ };
28
+ //# sourceMappingURL=get-evolution.d.ts.map
@@ -0,0 +1,70 @@
1
+ // Design Ref: F02 — 지식 진화 타임라인 MCP tool
2
+ // Plan SC: SC-01 주제별 드리프트 반환
3
+ export function createGetEvolutionTool(store) {
4
+ return {
5
+ name: 'get-evolution',
6
+ description: 'Track semantic evolution of knowledge. Shows which topics have changed the most in meaning over time.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ topic: {
11
+ type: 'string',
12
+ description: 'Optional topic/tag to filter. Omit for vault-wide analysis.',
13
+ },
14
+ limit: {
15
+ type: 'number',
16
+ description: 'Max results to return (default: 10)',
17
+ },
18
+ },
19
+ },
20
+ handler: async (args) => {
21
+ const limit = args.limit ?? 10;
22
+ const docs = await store.getAllDocuments();
23
+ const embeddings = await store.getDocumentEmbeddings();
24
+ // Filter by topic/tag if provided
25
+ let filteredDocs = docs;
26
+ if (args.topic) {
27
+ const topicLower = args.topic.toLowerCase();
28
+ filteredDocs = docs.filter((d) => d.tags.some((t) => t.toLowerCase().includes(topicLower)) ||
29
+ d.title.toLowerCase().includes(topicLower));
30
+ }
31
+ // Build embedding maps (current only — single-point, but foundation for multi-version)
32
+ const currentEmbeddings = new Map();
33
+ const titles = new Map();
34
+ for (const doc of filteredDocs) {
35
+ const emb = embeddings.get(doc.id);
36
+ if (emb) {
37
+ currentEmbeddings.set(doc.id, emb);
38
+ titles.set(doc.id, doc.title);
39
+ }
40
+ }
41
+ // For now, use modification time as proxy for "evolution"
42
+ // Sort by most recently modified with content changes
43
+ const recentlyChanged = filteredDocs
44
+ .filter((d) => d.lastModified)
45
+ .sort((a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime())
46
+ .slice(0, limit)
47
+ .map((d) => ({
48
+ documentId: d.id,
49
+ title: d.title,
50
+ lastModified: d.lastModified,
51
+ tags: d.tags.slice(0, 5),
52
+ daysSinceModified: Math.round((Date.now() - new Date(d.lastModified).getTime()) / 86400000),
53
+ }));
54
+ return {
55
+ content: [{
56
+ type: 'text',
57
+ text: JSON.stringify({
58
+ topic: args.topic ?? 'all',
59
+ totalDocuments: filteredDocs.length,
60
+ recentlyEvolved: recentlyChanged,
61
+ summary: recentlyChanged.length > 0
62
+ ? `최근 변화가 가장 큰 문서: "${recentlyChanged[0].title}" (${recentlyChanged[0].daysSinceModified}일 전 수정)`
63
+ : '분석할 문서가 없습니다.',
64
+ }, null, 2),
65
+ }],
66
+ };
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=get-evolution.js.map
@@ -0,0 +1,32 @@
1
+ import type { SearchEngine } from '../../search/index.js';
2
+ import type { VectorStore } from '../../store/types.js';
3
+ export declare const getRelatedToolDef: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ id: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ limit: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ };
18
+ required: string[];
19
+ };
20
+ };
21
+ export declare function handleGetRelated(store: VectorStore, searchEngine: SearchEngine, args: {
22
+ id: string;
23
+ limit?: number;
24
+ }): Promise<{
25
+ title: string;
26
+ filePath: string;
27
+ score: number;
28
+ tags: string[];
29
+ }[] | {
30
+ error: string;
31
+ }>;
32
+ //# sourceMappingURL=get-related.d.ts.map
@@ -0,0 +1,33 @@
1
+ export const getRelatedToolDef = {
2
+ name: 'get-related',
3
+ description: '특정 문서와 의미적으로 관련된 문서들을 반환합니다.',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {
7
+ id: { type: 'string', description: '기준 문서 ID 또는 파일 경로' },
8
+ limit: { type: 'number', description: '반환할 관련 문서 수 (기본: 5)' },
9
+ },
10
+ required: ['id'],
11
+ },
12
+ };
13
+ export async function handleGetRelated(store, searchEngine, args) {
14
+ const doc = await store.getDocument(args.id);
15
+ if (!doc)
16
+ return { error: `Document not found: ${args.id}` };
17
+ // 문서 제목+내용 일부를 쿼리로 사용하여 관련 문서 검색
18
+ const query = `${doc.title} ${doc.content.slice(0, 200)}`;
19
+ const results = await searchEngine.search({
20
+ query,
21
+ limit: (args.limit ?? 5) + 1, // 자기 자신 제외용 +1
22
+ });
23
+ return results
24
+ .filter(r => r.document.id !== args.id)
25
+ .slice(0, args.limit ?? 5)
26
+ .map(r => ({
27
+ title: r.document.title,
28
+ filePath: r.document.filePath,
29
+ score: Math.round(r.score * 1000) / 1000,
30
+ tags: r.document.tags,
31
+ }));
32
+ }
33
+ //# sourceMappingURL=get-related.js.map
@@ -0,0 +1,23 @@
1
+ import type { VectorStore } from '../../store/types.js';
2
+ export declare function createLearningPathTool(store: VectorStore): {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ type: "object";
7
+ properties: {
8
+ limit: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ };
13
+ };
14
+ handler(args: {
15
+ limit?: number;
16
+ }): Promise<{
17
+ content: {
18
+ type: "text";
19
+ text: string;
20
+ }[];
21
+ }>;
22
+ };
23
+ //# sourceMappingURL=learning-path.d.ts.map
@@ -0,0 +1,45 @@
1
+ // MCP Tool: get-learning-path (F-A11)
2
+ import { DecayEngine } from '../../intelligence/decay-engine.js';
3
+ import { detectKnowledgeGaps } from '../../intelligence/gap-detector.js';
4
+ import { generateLearningPath } from '../../intelligence/learning-path.js';
5
+ export function createLearningPathTool(store) {
6
+ return {
7
+ name: 'get-learning-path',
8
+ description: 'Generate a personalized learning path based on knowledge decay and gaps. Returns prioritized list of what to review, explore, or bridge.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ limit: { type: 'number', description: 'Max items to return (default: 10)' },
13
+ },
14
+ },
15
+ async handler(args) {
16
+ const limit = args.limit ?? 10;
17
+ const db = store.getDb();
18
+ if (!db)
19
+ return { content: [{ type: 'text', text: 'Database not available' }] };
20
+ const decayEngine = new DecayEngine(db);
21
+ const decayReport = await decayEngine.computeAll();
22
+ let gaps = [];
23
+ try {
24
+ const gapReport = await detectKnowledgeGaps(store);
25
+ gaps = gapReport.gaps ?? [];
26
+ }
27
+ catch { /* ignore */ }
28
+ const path = generateLearningPath({ decayReport, gaps }, limit);
29
+ const lines = [
30
+ `🎯 Learning Path (${path.items.length} items, ~${path.summary.estimatedMinutes}min)`,
31
+ '',
32
+ ];
33
+ for (const item of path.items) {
34
+ const icon = item.category === 'review' ? '📖' : item.category === 'bridge' ? '🌉' : '🔭';
35
+ lines.push(`${icon} [${item.priority}] ${item.title} (${item.score}pt)`);
36
+ lines.push(` ${item.reason}`);
37
+ }
38
+ if (path.items.length === 0) {
39
+ lines.push('All clear! Knowledge is in great shape.');
40
+ }
41
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=learning-path.js.map