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
@@ -1,256 +0,0 @@
1
- // Design Ref: §6 — sv federate CLI (대화형 모드)
2
- // Plan SC: SC1-SC5
3
-
4
- import { createInterface } from 'node:readline';
5
- import chalk from 'chalk';
6
- import {
7
- loadConfig, createSqliteVecStore, createLocalEmbedder,
8
- FederationNode, FederatedSearch, getOrCreateIdentity,
9
- getSharingSummary, setTagLevel, setFolderLevel, setNodeLevel, getPendingRequests, approveRequest, denyRequest,
10
- } from '@stellavault/core';
11
- import type { SharingLevel } from '@stellavault/core';
12
-
13
- export async function federateJoinCommand(options: { name?: string }) {
14
- const config = loadConfig();
15
- const identity = getOrCreateIdentity(options.name);
16
-
17
- console.log('');
18
- console.log(chalk.bold(' ✦ Stellavault Federation'));
19
- console.log(chalk.dim(` Node: ${identity.displayName} (${identity.peerId})`));
20
- console.log('');
21
-
22
- // 로컬 스토어 초기화 (검색 응답용)
23
- const store = createSqliteVecStore(config.dbPath);
24
- await store.initialize();
25
-
26
- const embedder = createLocalEmbedder(config.embedding.localModel);
27
- await embedder.initialize();
28
-
29
- // 통계 수집
30
- const stats = await store.getStats();
31
- const topics = await store.getTopics();
32
-
33
- // Federation 노드 시작
34
- const node = new FederationNode(options.name);
35
- node.setLocalStats(stats.documentCount, topics.slice(0, 5).map((t: any) => t.topic));
36
-
37
- const search = new FederatedSearch(node, store, embedder);
38
- search.startResponder();
39
-
40
- // 이벤트 리스너
41
- node.on('joined', (info: any) => {
42
- console.log(chalk.green(` ✦ Joined federation network`));
43
- console.log(chalk.dim(` Topic: ${info.topic}`));
44
- console.log(chalk.dim(` Waiting for peers...\n`));
45
- });
46
-
47
- node.on('peer_joined', (peer: any) => {
48
- console.log(chalk.cyan(` → Peer found: ${peer.displayName} (${peer.documentCount} docs) [${peer.peerId}]`));
49
- });
50
-
51
- node.on('peer_left', (info: any) => {
52
- console.log(chalk.yellow(` ← Peer left: ${info.peerId}`));
53
- });
54
-
55
- node.on('search_request', () => {
56
- // 검색 요청 수신 로깅 (응답은 FederatedSearch.startResponder가 처리)
57
- });
58
-
59
- await node.join();
60
-
61
- // 대화형 모드
62
- const rl = createInterface({ input: process.stdin, output: process.stdout });
63
- const prompt = () => rl.question(chalk.dim('federation> '), handleInput);
64
-
65
- async function handleInput(line: string) {
66
- const parts = line.trim().split(/\s+/);
67
- const cmd = parts[0];
68
-
69
- switch (cmd) {
70
- case 'search': {
71
- const query = parts.slice(1).join(' ');
72
- if (!query) { console.log(chalk.yellow(' Usage: search <query>')); break; }
73
-
74
- const start = Date.now();
75
- console.log(chalk.dim(` Searching ${node.peerCount} peers...`));
76
-
77
- const results = await search.search(query, { limit: 5, timeout: 5000 });
78
- const elapsed = Date.now() - start;
79
-
80
- if (results.length === 0) {
81
- console.log(chalk.yellow(` No results from peers. (${elapsed}ms)`));
82
- } else {
83
- console.log('');
84
- for (const r of results) {
85
- const simColor = r.similarity >= 0.7 ? chalk.green : r.similarity >= 0.4 ? chalk.yellow : chalk.dim;
86
- console.log(` ${simColor(`${Math.round(r.similarity * 100)}%`)} ${chalk.bold(r.title)} ${chalk.dim(`[${r.peerName}]`)}`);
87
- console.log(` ${chalk.dim(r.snippet)}...`);
88
- }
89
- console.log(chalk.dim(`\n ${results.length} results from ${new Set(results.map(r => r.peerId)).size} peers (${elapsed}ms)`));
90
- }
91
- break;
92
- }
93
-
94
- case 'peers': {
95
- const peers = node.getPeers();
96
- if (peers.length === 0) {
97
- console.log(chalk.yellow(' No peers connected'));
98
- } else {
99
- console.log('');
100
- for (const p of peers) {
101
- console.log(` ${chalk.cyan(p.displayName)} ${chalk.dim(`(${p.documentCount} docs)`)} [${p.peerId}]`);
102
- if (p.topTopics.length > 0) {
103
- console.log(` ${chalk.dim(p.topTopics.map(t => `#${t}`).join(' '))}`);
104
- }
105
- }
106
- console.log(chalk.dim(`\n ${peers.length} peer(s) connected`));
107
- }
108
- break;
109
- }
110
-
111
- case 'status': {
112
- console.log('');
113
- console.log(` ${chalk.bold('Node:')} ${identity.displayName} (${identity.peerId})`);
114
- console.log(` ${chalk.bold('Docs:')} ${stats.documentCount}`);
115
- console.log(` ${chalk.bold('Peers:')} ${node.peerCount}`);
116
- console.log(` ${chalk.bold('Running:')} ${node.isRunning ? chalk.green('yes') : chalk.red('no')}`);
117
- break;
118
- }
119
-
120
- case 'connect': {
121
- const addr = parts[1];
122
- if (!addr || !addr.includes(':')) { console.log(chalk.yellow(' Usage: connect <host:port>')); break; }
123
- const [host, portStr] = addr.split(':');
124
- try {
125
- console.log(chalk.dim(` Connecting to ${addr}...`));
126
- await node.joinDirect(host, parseInt(portStr, 10));
127
- console.log(chalk.green(` Connected to ${addr}`));
128
- } catch (err) {
129
- console.log(chalk.red(` Failed: ${err instanceof Error ? err.message : err}`));
130
- }
131
- break;
132
- }
133
-
134
- case 'sharing': {
135
- console.log('\n' + chalk.bold(' Sharing Settings'));
136
- console.log(' ' + getSharingSummary().split('\n').join('\n '));
137
- console.log('');
138
- break;
139
- }
140
-
141
- case 'set-tag': {
142
- const tag = parts[1];
143
- const lvl = parseInt(parts[2], 10) as SharingLevel;
144
- if (!tag || isNaN(lvl) || lvl < 0 || lvl > 4) { console.log(chalk.yellow(' Usage: set-tag <tag> <0-4>')); break; }
145
- setTagLevel(tag, lvl);
146
- console.log(chalk.green(` #${tag} → Level ${lvl}`));
147
- break;
148
- }
149
-
150
- case 'set-folder': {
151
- const folder = parts[1];
152
- const lvl = parseInt(parts[2], 10) as SharingLevel;
153
- if (!folder || isNaN(lvl) || lvl < 0 || lvl > 4) { console.log(chalk.yellow(' Usage: set-folder <folder> <0-4>')); break; }
154
- setFolderLevel(folder, lvl);
155
- console.log(chalk.green(` ${folder} → Level ${lvl}`));
156
- break;
157
- }
158
-
159
- case 'set-level': {
160
- const lvl = parseInt(parts[1], 10) as SharingLevel;
161
- if (isNaN(lvl) || lvl < 0 || lvl > 4) { console.log(chalk.yellow(' Usage: set-level <0-4> (your node sharing level)')); break; }
162
- setNodeLevel(lvl);
163
- console.log(chalk.green(` My node level → ${lvl}`));
164
- break;
165
- }
166
-
167
- case 'requests': {
168
- const pending = getPendingRequests();
169
- if (pending.length === 0) { console.log(chalk.dim(' No pending requests')); break; }
170
- console.log(`\n ${pending.length} pending full-text requests:`);
171
- for (const r of pending) {
172
- console.log(` ${r.requestId.slice(0, 8)} — "${r.documentTitle}" from ${r.fromName} (${r.requestedAt.slice(0, 10)})`);
173
- }
174
- break;
175
- }
176
-
177
- case 'approve': {
178
- const reqId = parts[1];
179
- if (!reqId) { console.log(chalk.yellow(' Usage: approve <request-id>')); break; }
180
- const match = getPendingRequests().find(r => r.requestId.startsWith(reqId));
181
- if (match && approveRequest(match.requestId)) console.log(chalk.green(` Approved: ${match.documentTitle}`));
182
- else console.log(chalk.red(' Request not found'));
183
- break;
184
- }
185
-
186
- case 'deny': {
187
- const reqId = parts[1];
188
- if (!reqId) { console.log(chalk.yellow(' Usage: deny <request-id>')); break; }
189
- const match = getPendingRequests().find(r => r.requestId.startsWith(reqId));
190
- if (match && denyRequest(match.requestId)) console.log(chalk.green(` Denied: ${match.documentTitle}`));
191
- else console.log(chalk.red(' Request not found'));
192
- break;
193
- }
194
-
195
- case 'leave':
196
- case 'quit':
197
- case 'exit': {
198
- console.log(chalk.dim(' Leaving federation...'));
199
- await node.leave();
200
- await store.close();
201
- rl.close();
202
- process.exit(0);
203
- return; // don't re-prompt
204
- }
205
-
206
- case 'help': {
207
- console.log('');
208
- console.log(' Commands:');
209
- console.log(` ${chalk.cyan('search <query>')} Search across all connected peers`);
210
- console.log(` ${chalk.cyan('peers')} List connected peers`);
211
- console.log(` ${chalk.cyan('status')} Show node info`);
212
- console.log(` ${chalk.cyan('connect <ip:port>')} Connect to peer directly`);
213
- console.log(` ${chalk.cyan('sharing')} Show sharing settings`);
214
- console.log(` ${chalk.cyan('set-tag <t> <0-4>')} Set tag sharing level`);
215
- console.log(` ${chalk.cyan('set-folder <f> <0-4>')} Set folder sharing level`);
216
- console.log(` ${chalk.cyan('set-level <0-4>')} Set your node level`);
217
- console.log(` ${chalk.cyan('requests')} Show pending full-text requests`);
218
- console.log(` ${chalk.cyan('approve <id>')} Approve a request`);
219
- console.log(` ${chalk.cyan('deny <id>')} Deny a request`);
220
- console.log(` ${chalk.cyan('leave')} Disconnect and exit`);
221
- break;
222
- }
223
-
224
- default: {
225
- if (cmd) console.log(chalk.dim(` Unknown command: ${cmd}. Type 'help' for commands.`));
226
- break;
227
- }
228
- }
229
-
230
- prompt(); // 다음 입력 대기
231
- }
232
-
233
- // Ctrl+C 처리
234
- process.on('SIGINT', async () => {
235
- console.log(chalk.dim('\n Leaving federation...'));
236
- await node.leave();
237
- await store.close();
238
- process.exit(0);
239
- });
240
-
241
- prompt();
242
- }
243
-
244
- // 단순 상태 조회 (join 없이)
245
- export async function federateStatusCommand() {
246
- const identity = getOrCreateIdentity();
247
- const config = loadConfig();
248
-
249
- console.log('');
250
- console.log(chalk.bold(' ✦ Federation Identity'));
251
- console.log(` PeerID: ${identity.peerId}`);
252
- console.log(` Name: ${identity.displayName}`);
253
- console.log(` Since: ${identity.createdAt}`);
254
- console.log(` DB: ${config.dbPath}`);
255
- console.log('');
256
- }
@@ -1,40 +0,0 @@
1
- // Design Ref: stellavault gaps — 지식 갭 탐지 CLI
2
-
3
- import chalk from 'chalk';
4
- import { loadConfig, createKnowledgeHub, detectKnowledgeGaps } from '@stellavault/core';
5
-
6
- export async function gapsCommand() {
7
- const config = loadConfig();
8
- const hub = createKnowledgeHub(config);
9
-
10
- console.error(chalk.dim('⏳ Analyzing knowledge gaps...'));
11
- await hub.store.initialize();
12
- await hub.embedder.initialize();
13
-
14
- const report = await detectKnowledgeGaps(hub.store);
15
-
16
- console.log(chalk.green('\n🕳️ Knowledge Gap Report'));
17
- console.log(chalk.dim('─'.repeat(50)));
18
- console.log(` 클러스터: ${report.totalClusters}개`);
19
- console.log(` 갭: ${chalk.yellow(String(report.totalGaps))}개 (High+Medium)`);
20
- console.log(` 고립 노드: ${report.isolatedNodes.length}개`);
21
- console.log(chalk.dim('─'.repeat(50)));
22
-
23
- if (report.gaps.length > 0) {
24
- console.log(chalk.yellow('\n📊 클러스터 간 갭:'));
25
- for (const gap of report.gaps) {
26
- const icon = gap.severity === 'high' ? '🔴' : gap.severity === 'medium' ? '🟡' : '🟢';
27
- console.log(` ${icon} ${gap.clusterA} ↔ ${gap.clusterB}`);
28
- console.log(` 연결: ${gap.bridgeCount}개 | 제안: ${chalk.cyan(gap.suggestedTopic)}`);
29
- }
30
- }
31
-
32
- if (report.isolatedNodes.length > 0) {
33
- console.log(chalk.dim('\n🏝️ 고립된 노트 (연결 ≤1):'));
34
- for (const n of report.isolatedNodes.slice(0, 10)) {
35
- console.log(` • ${n.title} (${n.connections}개 연결)`);
36
- }
37
- }
38
-
39
- console.log(chalk.dim('\n💡 갭 영역의 지식을 보강하면 지식 그래프가 더 촘촘해집니다'));
40
- }
@@ -1,88 +0,0 @@
1
- // Design Ref: §11.1 — CLI graph-cmd
2
- // Plan SC: SC-04 — stellavault graph → 브라우저 3초
3
-
4
- import chalk from 'chalk';
5
- import { loadConfig, createKnowledgeHub, createApiServer } from '@stellavault/core';
6
- import { spawn } from 'node:child_process';
7
- import { resolve } from 'node:path';
8
- import { existsSync } from 'node:fs';
9
-
10
- export async function graphCommand() {
11
- const config = loadConfig();
12
- const hub = createKnowledgeHub(config);
13
-
14
- console.error(chalk.dim('⏳ Initializing...'));
15
- await hub.store.initialize();
16
- await hub.embedder.initialize();
17
-
18
- const stats = await hub.store.getStats();
19
- if (stats.documentCount === 0) {
20
- console.error(chalk.yellow('⚠ No documents indexed. Run `stellavault index <vault-path>` first.'));
21
- process.exit(1);
22
- }
23
-
24
- // API 서버 시작
25
- const port = config.mcp.port || 3333;
26
- // vault 이름 추출 (경로의 마지막 디렉토리명)
27
- const vaultName = config.vaultPath
28
- ? config.vaultPath.replace(/\\/g, '/').replace(/\/$/, '').split('/').pop() ?? ''
29
- : '';
30
- const api = createApiServer({
31
- store: hub.store,
32
- searchEngine: hub.searchEngine,
33
- port,
34
- vaultName,
35
- });
36
- await api.start();
37
-
38
- console.error(chalk.green('🧠 Stellavault — Neural Knowledge Graph'));
39
- console.error(` 📚 ${stats.documentCount} documents | ${stats.chunkCount} chunks`);
40
- console.error(` 🌐 API: http://127.0.0.1:${port}`);
41
-
42
- // Vite dev 서버 시작 시도
43
- const graphDir = resolve(process.cwd(), 'packages/graph');
44
- const hasGraph = existsSync(resolve(graphDir, 'package.json'));
45
-
46
- if (hasGraph) {
47
- console.error(chalk.dim(' 🚀 Starting Vite dev server...'));
48
-
49
- const vite = spawn('npx', ['vite', '--host'], {
50
- cwd: graphDir,
51
- stdio: ['ignore', 'pipe', 'pipe'],
52
- shell: true,
53
- });
54
-
55
- vite.stderr.on('data', (data: Buffer) => {
56
- const line = data.toString();
57
- // Vite ready 메시지 감지 → 브라우저 열기
58
- if (line.includes('Local:')) {
59
- const match = line.match(/http:\/\/localhost:\d+/);
60
- const url = match?.[0] ?? 'http://localhost:5173';
61
- console.error(chalk.green(` 🔮 Graph: ${url}`));
62
- openBrowser(url);
63
- }
64
- });
65
-
66
- vite.on('close', () => {
67
- console.error(chalk.dim(' Vite server stopped'));
68
- });
69
-
70
- process.on('SIGINT', () => {
71
- vite.kill();
72
- process.exit(0);
73
- });
74
- } else {
75
- console.error(chalk.dim(' 💡 Graph UI not found. Open http://127.0.0.1:' + port + '/api/graph'));
76
- }
77
-
78
- console.error(chalk.dim(' Press Ctrl+C to stop'));
79
- }
80
-
81
- async function openBrowser(url: string) {
82
- try {
83
- const open = await import('open');
84
- await open.default(url);
85
- } catch {
86
- // open 패키지 없으면 무시
87
- }
88
- }
@@ -1,65 +0,0 @@
1
- import ora from 'ora';
2
- import chalk from 'chalk';
3
- import { createHash } from 'node:crypto';
4
- import { join } from 'node:path';
5
- import { homedir } from 'node:os';
6
- import { mkdirSync } from 'node:fs';
7
- import { loadConfig, createSqliteVecStore, createLocalEmbedder, indexVault, addVault, listVaults } from '@stellavault/core';
8
-
9
- // vault 경로 → 고유 DB 경로 생성
10
- function getVaultDbPath(vaultPath: string): string {
11
- const hash = createHash('sha256').update(vaultPath).digest('hex').slice(0, 8);
12
- const dir = join(homedir(), '.stellavault', 'vaults');
13
- mkdirSync(dir, { recursive: true });
14
- return join(dir, `${hash}.db`);
15
- }
16
-
17
- export async function indexCommand(vaultPath?: string) {
18
- const config = loadConfig();
19
- const vault = vaultPath ?? config.vaultPath;
20
- if (!vault) {
21
- console.error(chalk.red('Error: vault 경로가 필요합니다. stellavault index <path> 또는 .stellavault.json에 vaultPath 설정'));
22
- process.exit(1);
23
- }
24
-
25
- // vault별 고유 DB 경로 (multi-vault 지원)
26
- const dbPath = vaultPath ? getVaultDbPath(vault) : config.dbPath;
27
-
28
- // Cross-Vault에 자동 등록
29
- const existingVaults = listVaults();
30
- const vaultName = vault.split(/[/\\]/).filter(Boolean).pop() ?? 'vault';
31
- if (!existingVaults.some(v => v.path === vault)) {
32
- try {
33
- addVault(vaultName.toLowerCase(), vaultName, vault, dbPath);
34
- console.log(chalk.dim(` Auto-registered vault: ${vaultName} (${dbPath})`));
35
- } catch { /* 이미 등록됨 */ }
36
- }
37
-
38
- const spinner = ora('초기화 중...').start();
39
-
40
- const store = createSqliteVecStore(dbPath);
41
- await store.initialize();
42
-
43
- spinner.text = '임베딩 모델 로딩 중...';
44
- const embedder = createLocalEmbedder(config.embedding.localModel);
45
- await embedder.initialize();
46
-
47
- spinner.text = '인덱싱 시작...';
48
- const result = await indexVault(vault, {
49
- store,
50
- embedder,
51
- chunkOptions: config.chunking,
52
- onProgress(current, total, doc) {
53
- spinner.text = `[${current}/${total}] ${doc.title}`;
54
- },
55
- });
56
-
57
- await store.close();
58
- spinner.stop();
59
-
60
- console.log('');
61
- console.log(chalk.green('✅ 인덱싱 완료'));
62
- console.log(` 📄 인덱싱: ${result.indexed}건 | ⏭️ 스킵: ${result.skipped}건 | 🗑️ 삭제: ${result.deleted}건${result.failed ? ` | ❌ 실패: ${result.failed}건` : ''}`);
63
- console.log(` 🧩 청크: ${result.totalChunks}개 | ⏱ ${(result.elapsedMs / 1000).toFixed(1)}초`);
64
- console.log(` 💾 DB: ${dbPath}`);
65
- }
@@ -1,145 +0,0 @@
1
- // stellavault init — 인터랙티브 온보딩 위저드 (F-A01)
2
-
3
- import { createInterface } from 'node:readline';
4
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
5
- import { join } from 'node:path';
6
- import { homedir } from 'node:os';
7
- import ora from 'ora';
8
- import chalk from 'chalk';
9
- import { loadConfig, createSqliteVecStore, createLocalEmbedder, indexVault, createSearchEngine } from '@stellavault/core';
10
-
11
- function ask(rl: ReturnType<typeof createInterface>, question: string, defaultVal?: string): Promise<string> {
12
- const suffix = defaultVal ? ` ${chalk.dim(`(${defaultVal})`)}` : '';
13
- return new Promise((resolve) => {
14
- rl.question(`${question}${suffix}: `, (answer) => {
15
- resolve(answer.trim() || defaultVal || '');
16
- });
17
- });
18
- }
19
-
20
- export async function initCommand() {
21
- console.log('');
22
- console.log(chalk.bold(' ✦ Stellavault Setup Wizard'));
23
- console.log(chalk.dim(' Notes die in folders. Let\'s bring yours to life.\n'));
24
-
25
- const rl = createInterface({ input: process.stdin, output: process.stdout });
26
-
27
- try {
28
- // Step 1: Vault Path
29
- console.log(chalk.cyan(' Step 1/3') + ' — Where is your Obsidian vault?');
30
- console.log(chalk.dim(' This is the folder containing your .md files.\n'));
31
-
32
- let vaultPath = '';
33
- while (!vaultPath) {
34
- const input = await ask(rl, ' Vault path');
35
- if (!input) {
36
- console.log(chalk.yellow(' Please enter your vault path.'));
37
- continue;
38
- }
39
- const resolved = input.replace(/^~/, homedir());
40
- if (!existsSync(resolved)) {
41
- console.log(chalk.yellow(` Path not found: ${resolved}`));
42
- continue;
43
- }
44
- vaultPath = resolved;
45
- }
46
-
47
- console.log(chalk.green(` ✓ Vault: ${vaultPath}\n`));
48
-
49
- // Save config
50
- const configDir = join(homedir(), '.stellavault');
51
- mkdirSync(configDir, { recursive: true });
52
- const dbPath = join(configDir, 'index.db');
53
-
54
- const configData = {
55
- vaultPath,
56
- dbPath,
57
- embedding: { model: 'local', localModel: 'all-MiniLM-L6-v2' },
58
- chunking: { maxTokens: 300, overlap: 50, minTokens: 50 },
59
- search: { defaultLimit: 10, rrfK: 60 },
60
- mcp: { mode: 'stdio', port: 3333 },
61
- };
62
- writeFileSync(join(homedir(), '.stellavault.json'), JSON.stringify(configData, null, 2), 'utf-8');
63
- console.log(chalk.dim(` Config saved: ~/.stellavault.json`));
64
-
65
- // Step 2: Indexing
66
- console.log('');
67
- console.log(chalk.cyan(' Step 2/3') + ' — Indexing your vault');
68
- console.log(chalk.dim(' Vectorizing notes with local AI (no data leaves your machine).\n'));
69
-
70
- const spinner = ora({ text: ' Loading embedding model...', indent: 2 }).start();
71
-
72
- const store = createSqliteVecStore(dbPath);
73
- await store.initialize();
74
-
75
- const embedder = createLocalEmbedder('all-MiniLM-L6-v2');
76
- await embedder.initialize();
77
- spinner.text = ' Scanning vault...';
78
-
79
- const result = await indexVault(vaultPath, {
80
- store,
81
- embedder,
82
- chunkOptions: { maxTokens: 300, overlap: 50, minTokens: 50 },
83
- onProgress(current, total, doc) {
84
- const pct = Math.round((current / total) * 100);
85
- const bar = '█'.repeat(Math.floor(pct / 4)) + '░'.repeat(25 - Math.floor(pct / 4));
86
- spinner.text = ` [${bar}] ${pct}% (${current}/${total}) ${doc.title.slice(0, 30)}`;
87
- },
88
- });
89
-
90
- spinner.succeed(chalk.green(` Indexed ${result.indexed} docs, ${result.totalChunks} chunks (${(result.elapsedMs / 1000).toFixed(1)}s)`));
91
-
92
- // Step 3: First Search
93
- console.log('');
94
- console.log(chalk.cyan(' Step 3/3') + ' — Try your first search');
95
- console.log(chalk.dim(' Type a topic you know about. Stellavault finds connections.\n'));
96
-
97
- const searchEngine = createSearchEngine({ store, embedder, rrfK: 60 });
98
-
99
- let searchDone = false;
100
- while (!searchDone) {
101
- const query = await ask(rl, ' Search');
102
- if (!query) {
103
- console.log(chalk.dim(' Type something, or press Ctrl+C to skip.'));
104
- continue;
105
- }
106
-
107
- const searchSpinner = ora({ text: ' Searching...', indent: 2 }).start();
108
- const results = await searchEngine.search({ query, limit: 5 });
109
- searchSpinner.stop();
110
-
111
- if (results.length === 0) {
112
- console.log(chalk.yellow(' No results. Try a different topic.'));
113
- continue;
114
- }
115
-
116
- console.log('');
117
- for (const r of results) {
118
- const score = Math.round(r.score * 100);
119
- const bar = score >= 70 ? chalk.green('●') : score >= 40 ? chalk.yellow('●') : chalk.dim('●');
120
- console.log(` ${bar} ${chalk.bold(r.document.title)} ${chalk.dim(`(${score}%)`)}`);
121
- if (r.highlights[0]) {
122
- console.log(` ${chalk.dim(r.highlights[0].slice(0, 80))}...`);
123
- }
124
- }
125
- console.log('');
126
- searchDone = true;
127
- }
128
-
129
- await store.close();
130
-
131
- // Done!
132
- console.log(chalk.bold.green(' ✦ Setup complete!\n'));
133
- console.log(' What\'s next:');
134
- console.log(` ${chalk.cyan('stellavault graph')} Launch 3D knowledge graph`);
135
- console.log(` ${chalk.cyan('stellavault decay')} See what knowledge is fading`);
136
- console.log(` ${chalk.cyan('stellavault brief')} Get your daily knowledge briefing`);
137
- console.log(` ${chalk.cyan('stellavault serve')} Connect AI agents via MCP`);
138
- console.log('');
139
- console.log(chalk.dim(' Your knowledge is now alive. ✦'));
140
- console.log('');
141
-
142
- } finally {
143
- rl.close();
144
- }
145
- }
@@ -1,56 +0,0 @@
1
- // stellavault learn — AI learning path recommendations (F-A11)
2
-
3
- import chalk from 'chalk';
4
- import { loadConfig, createKnowledgeHub, DecayEngine, detectKnowledgeGaps, generateLearningPath } from '@stellavault/core';
5
-
6
- export async function learnCommand(_opts: any, cmd: any) {
7
- const globalOpts = cmd?.parent?.opts?.() ?? {};
8
- const jsonMode = globalOpts.json;
9
- const config = loadConfig();
10
- const hub = createKnowledgeHub(config);
11
-
12
- await hub.store.initialize();
13
- await hub.embedder.initialize();
14
-
15
- const db = hub.store.getDb() as any;
16
- if (!db) { console.error(chalk.red('Cannot access database')); process.exit(1); }
17
-
18
- const decayEngine = new DecayEngine(db);
19
- const decayReport = await decayEngine.computeAll();
20
-
21
- let gaps: any[] = [];
22
- try {
23
- const gapReport = await detectKnowledgeGaps(hub.store);
24
- gaps = gapReport.gaps ?? [];
25
- } catch { /* gaps may fail without enough data */ }
26
-
27
- const path = generateLearningPath({ decayReport, gaps }, 15);
28
- await hub.store.close();
29
-
30
- if (jsonMode) {
31
- console.log(JSON.stringify(path, null, 2));
32
- return;
33
- }
34
-
35
- console.log('');
36
- console.log(chalk.bold(' 🎯 Your Learning Path'));
37
- console.log(chalk.dim(` ${path.summary.reviewCount} to review · ${path.summary.bridgeCount} gaps to bridge · ~${path.summary.estimatedMinutes}min`));
38
- console.log('');
39
-
40
- for (const item of path.items) {
41
- const icon = item.category === 'review' ? '📖' : item.category === 'bridge' ? '🌉' : '🔭';
42
- const prioColor = item.priority === 'critical' ? chalk.red : item.priority === 'important' ? chalk.yellow : chalk.dim;
43
- const prioLabel = prioColor(item.priority.toUpperCase());
44
-
45
- console.log(` ${icon} ${prioLabel} ${chalk.bold(item.title)} ${chalk.dim(`(${item.score}pt)`)}`);
46
- console.log(` ${chalk.dim(item.reason)}`);
47
- }
48
-
49
- if (path.items.length === 0) {
50
- console.log(chalk.green(' All clear! Your knowledge is in great shape.'));
51
- }
52
-
53
- console.log('');
54
- console.log(chalk.dim(' 💡 stellavault review — start reviewing decaying notes'));
55
- console.log('');
56
- }