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,251 @@
1
+ // Design Ref: §3.3 — SQLite-vec 스키마
2
+ // Design Ref: §3.2 — VectorStore 인터페이스 구현
3
+ import Database from 'better-sqlite3';
4
+ import * as sqliteVec from 'sqlite-vec';
5
+ import { mkdirSync } from 'node:fs';
6
+ import { dirname } from 'node:path';
7
+ export function createSqliteVecStore(dbPath, dimensions = 384) {
8
+ let db;
9
+ return {
10
+ async initialize() {
11
+ mkdirSync(dirname(dbPath), { recursive: true });
12
+ db = new Database(dbPath);
13
+ sqliteVec.load(db);
14
+ db.pragma('journal_mode = WAL');
15
+ db.pragma('foreign_keys = ON');
16
+ createTables(db, dimensions);
17
+ },
18
+ async upsertDocument(doc) {
19
+ db.prepare(`
20
+ INSERT OR REPLACE INTO documents (id, file_path, title, content, frontmatter, tags, last_modified, content_hash, indexed_at, source, type)
21
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
22
+ `).run(doc.id, doc.filePath, doc.title, doc.content, JSON.stringify(doc.frontmatter), JSON.stringify(doc.tags), doc.lastModified, doc.contentHash, new Date().toISOString(), doc.source ?? 'local', doc.type ?? 'note');
23
+ },
24
+ async upsertChunks(chunks) {
25
+ if (chunks.length === 0)
26
+ return;
27
+ const docId = chunks[0].documentId;
28
+ const tx = db.transaction(() => {
29
+ // 기존 청크 삭제 (문서 단위 교체)
30
+ // 새로 삽입할 chunk ID들도 미리 삭제 (다른 문서에서 온 중복 방지)
31
+ const newChunkIds = chunks.map(c => c.id);
32
+ db.prepare('DELETE FROM chunk_embeddings WHERE chunk_id IN (SELECT id FROM chunks WHERE document_id = ?)').run(docId);
33
+ db.prepare('DELETE FROM chunks WHERE document_id = ?').run(docId);
34
+ for (const cid of newChunkIds) {
35
+ db.prepare('DELETE FROM chunk_embeddings WHERE chunk_id = ?').run(cid);
36
+ db.prepare('DELETE FROM chunks WHERE id = ?').run(cid);
37
+ }
38
+ const insertChunk = db.prepare(`
39
+ INSERT INTO chunks (id, document_id, content, heading, start_line, end_line, token_count)
40
+ VALUES (?, ?, ?, ?, ?, ?, ?)
41
+ `);
42
+ const insertEmbedding = db.prepare(`
43
+ INSERT INTO chunk_embeddings (chunk_id, embedding)
44
+ VALUES (?, ?)
45
+ `);
46
+ for (const chunk of chunks) {
47
+ insertChunk.run(chunk.id, chunk.documentId, chunk.content, chunk.heading, chunk.startLine, chunk.endLine, chunk.tokenCount);
48
+ if (chunk.embedding) {
49
+ insertEmbedding.run(chunk.id, float32Buffer(chunk.embedding));
50
+ }
51
+ }
52
+ });
53
+ tx();
54
+ },
55
+ async deleteByDocumentId(documentId) {
56
+ const tx = db.transaction(() => {
57
+ db.prepare('DELETE FROM chunk_embeddings WHERE chunk_id IN (SELECT id FROM chunks WHERE document_id = ?)').run(documentId);
58
+ db.prepare('DELETE FROM chunks WHERE document_id = ?').run(documentId);
59
+ db.prepare('DELETE FROM documents WHERE id = ?').run(documentId);
60
+ });
61
+ tx();
62
+ },
63
+ async searchSemantic(embedding, limit) {
64
+ const rows = db.prepare(`
65
+ SELECT chunk_id, distance
66
+ FROM chunk_embeddings
67
+ WHERE embedding MATCH ?
68
+ ORDER BY distance
69
+ LIMIT ?
70
+ `).all(float32Buffer(embedding), limit);
71
+ return rows.map(r => ({
72
+ chunkId: r.chunk_id,
73
+ score: 1 / (1 + r.distance), // distance → similarity score
74
+ }));
75
+ },
76
+ async searchKeyword(query, limit) {
77
+ const rows = db.prepare(`
78
+ SELECT c.id as chunk_id, rank
79
+ FROM chunks_fts f
80
+ JOIN chunks c ON c.rowid = f.rowid
81
+ WHERE chunks_fts MATCH ?
82
+ ORDER BY rank
83
+ LIMIT ?
84
+ `).all(query, limit);
85
+ return rows.map(r => ({
86
+ chunkId: r.chunk_id,
87
+ score: -r.rank, // FTS5 rank is negative (lower = better)
88
+ }));
89
+ },
90
+ async getDocument(documentId) {
91
+ const row = db.prepare('SELECT * FROM documents WHERE id = ?').get(documentId);
92
+ if (!row)
93
+ return null;
94
+ return rowToDocument(row);
95
+ },
96
+ async getChunk(chunkId) {
97
+ const row = db.prepare('SELECT * FROM chunks WHERE id = ?').get(chunkId);
98
+ if (!row)
99
+ return null;
100
+ return rowToChunk(row);
101
+ },
102
+ async getAllDocuments() {
103
+ const rows = db.prepare('SELECT * FROM documents ORDER BY last_modified DESC').all();
104
+ return rows.map(rowToDocument);
105
+ },
106
+ async getTopics() {
107
+ const rows = db.prepare(`
108
+ SELECT je.value as tag, COUNT(DISTINCT d.id) as count
109
+ FROM documents d, json_each(d.tags) je
110
+ GROUP BY je.value
111
+ ORDER BY count DESC
112
+ `).all();
113
+ return rows.map(r => ({
114
+ topic: r.tag,
115
+ count: r.count,
116
+ recentDocuments: [],
117
+ }));
118
+ },
119
+ async getStats() {
120
+ const docCount = db.prepare('SELECT COUNT(*) as c FROM documents').get().c;
121
+ const chunkCount = db.prepare('SELECT COUNT(*) as c FROM chunks').get().c;
122
+ const lastRow = db.prepare('SELECT indexed_at FROM documents ORDER BY indexed_at DESC LIMIT 1').get();
123
+ return {
124
+ documentCount: docCount,
125
+ chunkCount: chunkCount,
126
+ dbSizeBytes: 0, // 나중에 파일 크기 조회
127
+ lastIndexed: lastRow?.indexed_at ?? null,
128
+ };
129
+ },
130
+ async getDocumentEmbeddings() {
131
+ // 각 문서의 첫 청크 임베딩을 문서 대표 벡터로 사용
132
+ const rows = db.prepare(`
133
+ SELECT c.document_id, ce.embedding
134
+ FROM chunks c
135
+ JOIN chunk_embeddings ce ON ce.chunk_id = c.id
136
+ WHERE c.id IN (
137
+ SELECT MIN(id) FROM chunks GROUP BY document_id
138
+ )
139
+ `).all();
140
+ const result = new Map();
141
+ for (const row of rows) {
142
+ result.set(row.document_id, bufferToFloat32(row.embedding));
143
+ }
144
+ return result;
145
+ },
146
+ async close() {
147
+ db.close();
148
+ },
149
+ getDb() {
150
+ return db;
151
+ },
152
+ };
153
+ }
154
+ function bufferToFloat32(buf) {
155
+ const float32 = new Float32Array(buf.buffer, buf.byteOffset, buf.byteLength / 4);
156
+ return Array.from(float32);
157
+ }
158
+ function createTables(db, dimensions = 384) {
159
+ // 기존 DB 마이그레이션: source/type 컬럼 추가
160
+ try {
161
+ db.exec(`ALTER TABLE documents ADD COLUMN source TEXT DEFAULT 'local'`);
162
+ }
163
+ catch { /* 이미 존재 */ }
164
+ try {
165
+ db.exec(`ALTER TABLE documents ADD COLUMN type TEXT DEFAULT 'note'`);
166
+ }
167
+ catch { /* 이미 존재 */ }
168
+ db.exec(`
169
+ CREATE TABLE IF NOT EXISTS documents (
170
+ id TEXT PRIMARY KEY,
171
+ file_path TEXT NOT NULL UNIQUE,
172
+ title TEXT NOT NULL,
173
+ content TEXT NOT NULL,
174
+ frontmatter TEXT,
175
+ tags TEXT DEFAULT '[]',
176
+ last_modified TEXT NOT NULL,
177
+ content_hash TEXT NOT NULL,
178
+ indexed_at TEXT NOT NULL,
179
+ source TEXT DEFAULT 'local',
180
+ type TEXT DEFAULT 'note'
181
+ );
182
+
183
+ CREATE TABLE IF NOT EXISTS chunks (
184
+ id TEXT PRIMARY KEY,
185
+ document_id TEXT NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
186
+ content TEXT NOT NULL,
187
+ heading TEXT,
188
+ start_line INTEGER,
189
+ end_line INTEGER,
190
+ token_count INTEGER
191
+ );
192
+
193
+ CREATE VIRTUAL TABLE IF NOT EXISTS chunk_embeddings USING vec0(
194
+ chunk_id TEXT PRIMARY KEY,
195
+ embedding FLOAT[${dimensions}]
196
+ );
197
+
198
+ CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts USING fts5(
199
+ content,
200
+ heading,
201
+ content='chunks',
202
+ content_rowid='rowid'
203
+ );
204
+
205
+ CREATE INDEX IF NOT EXISTS idx_chunks_document_id ON chunks(document_id);
206
+ CREATE INDEX IF NOT EXISTS idx_documents_content_hash ON documents(content_hash);
207
+ `);
208
+ // FTS5 트리거: chunks INSERT/DELETE 시 자동 동기화
209
+ db.exec(`
210
+ CREATE TRIGGER IF NOT EXISTS chunks_ai AFTER INSERT ON chunks BEGIN
211
+ INSERT INTO chunks_fts(rowid, content, heading) VALUES (new.rowid, new.content, new.heading);
212
+ END;
213
+ CREATE TRIGGER IF NOT EXISTS chunks_ad AFTER DELETE ON chunks BEGIN
214
+ INSERT INTO chunks_fts(chunks_fts, rowid, content, heading) VALUES('delete', old.rowid, old.content, old.heading);
215
+ END;
216
+ `);
217
+ }
218
+ // Document 헬퍼: upsertDocument는 indexer에서 호출
219
+ export function upsertDocument(db, doc) {
220
+ db.prepare(`
221
+ INSERT OR REPLACE INTO documents (id, file_path, title, content, frontmatter, tags, last_modified, content_hash, indexed_at)
222
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
223
+ `).run(doc.id, doc.filePath, doc.title, doc.content, JSON.stringify(doc.frontmatter), JSON.stringify(doc.tags), doc.lastModified, doc.contentHash, new Date().toISOString());
224
+ }
225
+ function rowToDocument(row) {
226
+ return {
227
+ id: row.id,
228
+ filePath: row.file_path,
229
+ title: row.title,
230
+ content: row.content,
231
+ frontmatter: JSON.parse(row.frontmatter || '{}'),
232
+ tags: JSON.parse(row.tags || '[]'),
233
+ lastModified: row.last_modified,
234
+ contentHash: row.content_hash,
235
+ };
236
+ }
237
+ function rowToChunk(row) {
238
+ return {
239
+ id: row.id,
240
+ documentId: row.document_id,
241
+ content: row.content,
242
+ heading: row.heading ?? '',
243
+ startLine: row.start_line,
244
+ endLine: row.end_line,
245
+ tokenCount: row.token_count,
246
+ };
247
+ }
248
+ function float32Buffer(arr) {
249
+ return Buffer.from(new Float32Array(arr).buffer);
250
+ }
251
+ //# sourceMappingURL=sqlite-vec.js.map
@@ -0,0 +1,20 @@
1
+ import type { Chunk, ScoredChunk, Document, TopicInfo, StoreStats } from '../types/index.js';
2
+ export interface VectorStore {
3
+ initialize(): Promise<void>;
4
+ upsertDocument(doc: Document): Promise<void>;
5
+ upsertChunks(chunks: Chunk[]): Promise<void>;
6
+ deleteByDocumentId(documentId: string): Promise<void>;
7
+ searchSemantic(embedding: number[], limit: number): Promise<ScoredChunk[]>;
8
+ searchKeyword(query: string, limit: number): Promise<ScoredChunk[]>;
9
+ getDocument(documentId: string): Promise<Document | null>;
10
+ getChunk(chunkId: string): Promise<Chunk | null>;
11
+ getAllDocuments(): Promise<Document[]>;
12
+ getTopics(): Promise<TopicInfo[]>;
13
+ getStats(): Promise<StoreStats>;
14
+ /** 각 문서의 첫 청크 임베딩 반환 (graph용) */
15
+ getDocumentEmbeddings(): Promise<Map<string, number[]>>;
16
+ close(): Promise<void>;
17
+ /** 내부 DB 인스턴스 접근 (Intelligence Layer용) */
18
+ getDb(): unknown;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ // Design Ref: §3.2 — 교체 가능 설계 (VectorStore 인터페이스)
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,25 @@
1
+ export type TeamRole = 'admin' | 'editor' | 'viewer';
2
+ export interface TeamMember {
3
+ token: string;
4
+ tokenHash: string;
5
+ displayName: string;
6
+ role: TeamRole;
7
+ createdAt: string;
8
+ lastAccess?: string;
9
+ }
10
+ export interface TeamConfig {
11
+ teamName: string;
12
+ members: TeamMember[];
13
+ }
14
+ export declare function loadTeamConfig(): TeamConfig;
15
+ export declare function generateToken(): string;
16
+ export declare function inviteMember(displayName: string, role?: TeamRole): {
17
+ token: string;
18
+ member: TeamMember;
19
+ };
20
+ export declare function authenticateMember(token: string): TeamMember | null;
21
+ export declare function hasPermission(member: TeamMember, action: 'read' | 'write' | 'admin'): boolean;
22
+ export declare function listMembers(): TeamMember[];
23
+ export declare function removeMember(displayName: string): boolean;
24
+ export declare function createAuthMiddleware(): (req: any, res: any, next: any) => any;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,97 @@
1
+ // Team Vault (F-A06) — Bearer 토큰 인증 + RBAC
2
+ // MCP Streamable HTTP에 인증 레이어 추가
3
+ import { randomBytes, createHash } from 'node:crypto';
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { homedir } from 'node:os';
7
+ const TEAM_DIR = join(homedir(), '.stellavault', 'team');
8
+ const TEAM_FILE = join(TEAM_DIR, 'team.json');
9
+ export function loadTeamConfig() {
10
+ if (existsSync(TEAM_FILE)) {
11
+ return JSON.parse(readFileSync(TEAM_FILE, 'utf-8'));
12
+ }
13
+ return { teamName: 'My Team', members: [] };
14
+ }
15
+ function saveTeamConfig(config) {
16
+ mkdirSync(TEAM_DIR, { recursive: true });
17
+ writeFileSync(TEAM_FILE, JSON.stringify(config, null, 2), 'utf-8');
18
+ }
19
+ // 토큰 생성
20
+ export function generateToken() {
21
+ return `sv_${randomBytes(24).toString('hex')}`;
22
+ }
23
+ function hashToken(token) {
24
+ return createHash('sha256').update(token).digest('hex');
25
+ }
26
+ // 멤버 초대 → 토큰 반환
27
+ export function inviteMember(displayName, role = 'viewer') {
28
+ const config = loadTeamConfig();
29
+ const token = generateToken();
30
+ const member = {
31
+ token: '', // 클리어 토큰은 저장 안 함
32
+ tokenHash: hashToken(token),
33
+ displayName,
34
+ role,
35
+ createdAt: new Date().toISOString(),
36
+ };
37
+ config.members.push(member);
38
+ saveTeamConfig(config);
39
+ return { token, member }; // 토큰은 이때만 보여줌
40
+ }
41
+ // 토큰으로 멤버 인증
42
+ export function authenticateMember(token) {
43
+ const config = loadTeamConfig();
44
+ const hash = hashToken(token);
45
+ const member = config.members.find(m => m.tokenHash === hash);
46
+ if (member) {
47
+ member.lastAccess = new Date().toISOString();
48
+ saveTeamConfig(config);
49
+ }
50
+ return member ?? null;
51
+ }
52
+ // RBAC 권한 확인
53
+ export function hasPermission(member, action) {
54
+ switch (action) {
55
+ case 'read': return true; // 모든 역할 읽기 가능
56
+ case 'write': return member.role === 'admin' || member.role === 'editor';
57
+ case 'admin': return member.role === 'admin';
58
+ }
59
+ }
60
+ // 멤버 목록
61
+ export function listMembers() {
62
+ return loadTeamConfig().members;
63
+ }
64
+ // 멤버 제거
65
+ export function removeMember(displayName) {
66
+ const config = loadTeamConfig();
67
+ const before = config.members.length;
68
+ config.members = config.members.filter(m => m.displayName !== displayName);
69
+ if (config.members.length < before) {
70
+ saveTeamConfig(config);
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ // Express 미들웨어: Bearer 토큰 인증
76
+ export function createAuthMiddleware() {
77
+ return (req, res, next) => {
78
+ const authHeader = req.headers.authorization;
79
+ if (!authHeader?.startsWith('Bearer ')) {
80
+ // HIGH-01: localhost는 editor 권한만 (admin은 토큰 필수)
81
+ const ip = req.ip || req.connection?.remoteAddress;
82
+ if (ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1') {
83
+ req.teamMember = { displayName: 'local', role: 'editor' };
84
+ return next();
85
+ }
86
+ return res.status(401).json({ error: 'Bearer token required' });
87
+ }
88
+ const token = authHeader.slice(7);
89
+ const member = authenticateMember(token);
90
+ if (!member) {
91
+ return res.status(403).json({ error: 'Invalid token' });
92
+ }
93
+ req.teamMember = member;
94
+ next();
95
+ };
96
+ }
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,23 @@
1
+ export interface Chunk {
2
+ /** document.id + "#" + chunkIndex */
3
+ id: string;
4
+ /** 소속 문서 ID */
5
+ documentId: string;
6
+ /** 청크 텍스트 */
7
+ content: string;
8
+ /** 소속 heading (## 제목) */
9
+ heading: string;
10
+ /** 원문 시작 줄 번호 */
11
+ startLine: number;
12
+ /** 원문 끝 줄 번호 */
13
+ endLine: number;
14
+ /** 토큰 수 */
15
+ tokenCount: number;
16
+ /** 768차원 벡터 (로딩 시 선택적) */
17
+ embedding?: number[];
18
+ }
19
+ export interface ScoredChunk {
20
+ chunkId: string;
21
+ score: number;
22
+ }
23
+ //# sourceMappingURL=chunk.d.ts.map
@@ -0,0 +1,3 @@
1
+ // Design Ref: §3.1 — Core Types (Chunk)
2
+ export {};
3
+ //# sourceMappingURL=chunk.js.map
@@ -0,0 +1,23 @@
1
+ export interface Document {
2
+ /** SHA-256 hash of file path */
3
+ id: string;
4
+ /** vault 기준 상대 경로 */
5
+ filePath: string;
6
+ /** frontmatter title 또는 첫 heading */
7
+ title: string;
8
+ /** 전체 마크다운 텍스트 */
9
+ content: string;
10
+ /** YAML frontmatter */
11
+ frontmatter: Record<string, unknown>;
12
+ /** #태그 목록 */
13
+ tags: string[];
14
+ /** ISO 8601 */
15
+ lastModified: string;
16
+ /** SHA-256 of content (증분 인덱싱용) */
17
+ contentHash: string;
18
+ /** 출처: local | notion | clip | bridge | pack */
19
+ source?: string;
20
+ /** 노트 유형: note | clip | sync | bridge | decision | snapshot */
21
+ type?: string;
22
+ }
23
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1,3 @@
1
+ // Design Ref: §3.1 — Core Types (Document)
2
+ export {};
3
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1,39 @@
1
+ export interface GraphNode {
2
+ id: string;
3
+ label: string;
4
+ filePath: string;
5
+ tags: string[];
6
+ clusterId: number;
7
+ position?: [number, number, number];
8
+ size: number;
9
+ source?: string;
10
+ type?: string;
11
+ lastModified?: string;
12
+ }
13
+ export interface GraphEdge {
14
+ source: string;
15
+ target: string;
16
+ weight: number;
17
+ }
18
+ export interface Cluster {
19
+ id: number;
20
+ label: string;
21
+ color: string;
22
+ nodeCount: number;
23
+ }
24
+ export interface GraphData {
25
+ nodes: GraphNode[];
26
+ edges: GraphEdge[];
27
+ clusters: Cluster[];
28
+ stats: {
29
+ nodeCount: number;
30
+ edgeCount: number;
31
+ clusterCount: number;
32
+ };
33
+ }
34
+ export interface GraphResponse {
35
+ data: GraphData;
36
+ generatedAt: string;
37
+ cacheKey: string;
38
+ }
39
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1,3 @@
1
+ // Design Ref: §3.1 — Graph Data Types
2
+ export {};
3
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1,5 @@
1
+ export type { Document } from './document.js';
2
+ export type { Chunk, ScoredChunk } from './chunk.js';
3
+ export type { SearchResult, SearchOptions, TopicInfo, StoreStats, } from './search.js';
4
+ export type { GraphNode, GraphEdge, Cluster, GraphData, GraphResponse, } from './graph.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,39 @@
1
+ import type { Chunk } from './chunk.js';
2
+ import type { Document } from './document.js';
3
+ export interface SearchResult {
4
+ chunk: Chunk;
5
+ document: Document;
6
+ /** RRF 통합 점수 (0~1) */
7
+ score: number;
8
+ /** 매칭 부분 하이라이트 */
9
+ highlights: string[];
10
+ }
11
+ export interface SearchOptions {
12
+ query: string;
13
+ /** default: 10 */
14
+ limit?: number;
15
+ /** minimum score, default: 0.1 */
16
+ threshold?: number;
17
+ /** 태그 필터 */
18
+ tags?: string[];
19
+ /** 날짜 범위 필터 */
20
+ dateRange?: {
21
+ from?: string;
22
+ to?: string;
23
+ };
24
+ }
25
+ export interface TopicInfo {
26
+ topic: string;
27
+ count: number;
28
+ recentDocuments: Array<{
29
+ id: string;
30
+ title: string;
31
+ }>;
32
+ }
33
+ export interface StoreStats {
34
+ documentCount: number;
35
+ chunkCount: number;
36
+ dbSizeBytes: number;
37
+ lastIndexed: string | null;
38
+ }
39
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1,3 @@
1
+ // Design Ref: §3.1 — Core Types (Search)
2
+ export {};
3
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1,25 @@
1
+ export interface RetryOptions {
2
+ maxRetries?: number;
3
+ baseDelayMs?: number;
4
+ maxDelayMs?: number;
5
+ onRetry?: (error: Error, attempt: number, maxRetries: number) => void;
6
+ }
7
+ export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
8
+ export declare class StellavaultError extends Error {
9
+ readonly code: string;
10
+ readonly suggestion?: string | undefined;
11
+ readonly cause?: Error | undefined;
12
+ constructor(message: string, code: string, suggestion?: string | undefined, cause?: Error | undefined);
13
+ format(): string;
14
+ }
15
+ export declare function wrapError(err: unknown, code: string, suggestion?: string): StellavaultError;
16
+ export declare const errors: {
17
+ vaultNotFound: (path: string) => StellavaultError;
18
+ dbInitFailed: (err: unknown) => StellavaultError;
19
+ embedderFailed: (err: unknown) => StellavaultError;
20
+ indexingFailed: (file: string, err: unknown) => StellavaultError;
21
+ searchFailed: (err: unknown) => StellavaultError;
22
+ configInvalid: (field: string) => StellavaultError;
23
+ apiServerFailed: (port: number, err: unknown) => StellavaultError;
24
+ };
25
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1,59 @@
1
+ // Error Recovery System (F-A02) — retry with exponential backoff + meaningful messages
2
+ const DEFAULT_OPTIONS = {
3
+ maxRetries: 3,
4
+ baseDelayMs: 500,
5
+ maxDelayMs: 10000,
6
+ };
7
+ export async function withRetry(fn, options = {}) {
8
+ const { maxRetries, baseDelayMs, maxDelayMs } = { ...DEFAULT_OPTIONS, ...options };
9
+ let lastError;
10
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
11
+ try {
12
+ return await fn();
13
+ }
14
+ catch (err) {
15
+ lastError = err instanceof Error ? err : new Error(String(err));
16
+ if (attempt >= maxRetries)
17
+ break;
18
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt), maxDelayMs);
19
+ options.onRetry?.(lastError, attempt + 1, maxRetries);
20
+ await new Promise((r) => setTimeout(r, delay));
21
+ }
22
+ }
23
+ throw lastError;
24
+ }
25
+ export class StellavaultError extends Error {
26
+ code;
27
+ suggestion;
28
+ cause;
29
+ constructor(message, code, suggestion, cause) {
30
+ super(message);
31
+ this.code = code;
32
+ this.suggestion = suggestion;
33
+ this.cause = cause;
34
+ this.name = 'StellavaultError';
35
+ }
36
+ format() {
37
+ const lines = [`Error [${this.code}]: ${this.message}`];
38
+ if (this.suggestion)
39
+ lines.push(` Fix: ${this.suggestion}`);
40
+ if (this.cause)
41
+ lines.push(` Cause: ${this.cause.message}`);
42
+ return lines.join('\n');
43
+ }
44
+ }
45
+ export function wrapError(err, code, suggestion) {
46
+ const cause = err instanceof Error ? err : new Error(String(err));
47
+ return new StellavaultError(cause.message, code, suggestion, cause);
48
+ }
49
+ // Common error factories
50
+ export const errors = {
51
+ vaultNotFound: (path) => new StellavaultError(`Vault not found: ${path}`, 'VAULT_NOT_FOUND', 'Check the path exists and contains .md files'),
52
+ dbInitFailed: (err) => wrapError(err, 'DB_INIT_FAILED', 'Delete ~/.stellavault/index.db and re-index'),
53
+ embedderFailed: (err) => wrapError(err, 'EMBEDDER_FAILED', 'Check disk space and try again. The model downloads on first run (~80MB)'),
54
+ indexingFailed: (file, err) => wrapError(err, 'INDEX_FAILED', `Skipping "${file}". Re-run indexing to retry failed files`),
55
+ searchFailed: (err) => wrapError(err, 'SEARCH_FAILED', 'Re-index your vault: stellavault index <path>'),
56
+ configInvalid: (field) => new StellavaultError(`Invalid config: ${field}`, 'CONFIG_INVALID', 'Check ~/.stellavault.json format'),
57
+ apiServerFailed: (port, err) => wrapError(err, 'API_SERVER_FAILED', `Port ${port} may be in use. Try: stellavault graph --port ${port + 1}`),
58
+ };
59
+ //# sourceMappingURL=retry.js.map
@@ -1,37 +0,0 @@
1
- name: Deploy Landing Page to GitHub Pages
2
-
3
- on:
4
- push:
5
- branches: [master]
6
- paths: [docs/landing/**]
7
- workflow_dispatch:
8
-
9
- permissions:
10
- contents: read
11
- pages: write
12
- id-token: write
13
-
14
- concurrency:
15
- group: pages
16
- cancel-in-progress: false
17
-
18
- jobs:
19
- deploy:
20
- environment:
21
- name: github-pages
22
- url: ${{ steps.deployment.outputs.page_url }}
23
- runs-on: ubuntu-latest
24
- steps:
25
- - uses: actions/checkout@v4
26
-
27
- - name: Setup Pages
28
- uses: actions/configure-pages@v5
29
-
30
- - name: Upload artifact
31
- uses: actions/upload-pages-artifact@v3
32
- with:
33
- path: docs/landing
34
-
35
- - name: Deploy to GitHub Pages
36
- id: deployment
37
- uses: actions/deploy-pages@v4