stellavault 0.1.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 (294) hide show
  1. package/.env.example +12 -0
  2. package/CLAUDE.md +39 -0
  3. package/CONTRIBUTING.md +65 -0
  4. package/LICENSE +21 -0
  5. package/README.md +182 -0
  6. package/memory/MEMORY.md +25 -0
  7. package/package.json +33 -0
  8. package/packages/cli/bin/ekh.js +2 -0
  9. package/packages/cli/bin/stellavault.js +2 -0
  10. package/packages/cli/dist/commands/brief-cmd.d.ts +2 -0
  11. package/packages/cli/dist/commands/brief-cmd.d.ts.map +1 -0
  12. package/packages/cli/dist/commands/brief-cmd.js +82 -0
  13. package/packages/cli/dist/commands/brief-cmd.js.map +1 -0
  14. package/packages/cli/dist/commands/capture-cmd.d.ts +7 -0
  15. package/packages/cli/dist/commands/capture-cmd.d.ts.map +1 -0
  16. package/packages/cli/dist/commands/capture-cmd.js +31 -0
  17. package/packages/cli/dist/commands/capture-cmd.js.map +1 -0
  18. package/packages/cli/dist/commands/card-cmd.d.ts +4 -0
  19. package/packages/cli/dist/commands/card-cmd.d.ts.map +1 -0
  20. package/packages/cli/dist/commands/card-cmd.js +26 -0
  21. package/packages/cli/dist/commands/card-cmd.js.map +1 -0
  22. package/packages/cli/dist/commands/clip-cmd.d.ts +4 -0
  23. package/packages/cli/dist/commands/clip-cmd.d.ts.map +1 -0
  24. package/packages/cli/dist/commands/clip-cmd.js +151 -0
  25. package/packages/cli/dist/commands/clip-cmd.js.map +1 -0
  26. package/packages/cli/dist/commands/cloud-cmd.d.ts +4 -0
  27. package/packages/cli/dist/commands/cloud-cmd.d.ts.map +1 -0
  28. package/packages/cli/dist/commands/cloud-cmd.js +64 -0
  29. package/packages/cli/dist/commands/cloud-cmd.js.map +1 -0
  30. package/packages/cli/dist/commands/contradictions-cmd.d.ts +2 -0
  31. package/packages/cli/dist/commands/contradictions-cmd.d.ts.map +1 -0
  32. package/packages/cli/dist/commands/contradictions-cmd.js +34 -0
  33. package/packages/cli/dist/commands/contradictions-cmd.js.map +1 -0
  34. package/packages/cli/dist/commands/decay-cmd.d.ts +2 -0
  35. package/packages/cli/dist/commands/decay-cmd.d.ts.map +1 -0
  36. package/packages/cli/dist/commands/decay-cmd.js +48 -0
  37. package/packages/cli/dist/commands/decay-cmd.js.map +1 -0
  38. package/packages/cli/dist/commands/digest-cmd.d.ts +4 -0
  39. package/packages/cli/dist/commands/digest-cmd.d.ts.map +1 -0
  40. package/packages/cli/dist/commands/digest-cmd.js +79 -0
  41. package/packages/cli/dist/commands/digest-cmd.js.map +1 -0
  42. package/packages/cli/dist/commands/duplicates-cmd.d.ts +4 -0
  43. package/packages/cli/dist/commands/duplicates-cmd.d.ts.map +1 -0
  44. package/packages/cli/dist/commands/duplicates-cmd.js +30 -0
  45. package/packages/cli/dist/commands/duplicates-cmd.js.map +1 -0
  46. package/packages/cli/dist/commands/federate-cmd.d.ts +5 -0
  47. package/packages/cli/dist/commands/federate-cmd.d.ts.map +1 -0
  48. package/packages/cli/dist/commands/federate-cmd.js +217 -0
  49. package/packages/cli/dist/commands/federate-cmd.js.map +1 -0
  50. package/packages/cli/dist/commands/gaps-cmd.d.ts +2 -0
  51. package/packages/cli/dist/commands/gaps-cmd.d.ts.map +1 -0
  52. package/packages/cli/dist/commands/gaps-cmd.js +33 -0
  53. package/packages/cli/dist/commands/gaps-cmd.js.map +1 -0
  54. package/packages/cli/dist/commands/graph-cmd.d.ts +2 -0
  55. package/packages/cli/dist/commands/graph-cmd.d.ts.map +1 -0
  56. package/packages/cli/dist/commands/graph-cmd.js +77 -0
  57. package/packages/cli/dist/commands/graph-cmd.js.map +1 -0
  58. package/packages/cli/dist/commands/index-cmd.d.ts +2 -0
  59. package/packages/cli/dist/commands/index-cmd.d.ts.map +1 -0
  60. package/packages/cli/dist/commands/index-cmd.js +57 -0
  61. package/packages/cli/dist/commands/index-cmd.js.map +1 -0
  62. package/packages/cli/dist/commands/init-cmd.d.ts +2 -0
  63. package/packages/cli/dist/commands/init-cmd.d.ts.map +1 -0
  64. package/packages/cli/dist/commands/init-cmd.js +123 -0
  65. package/packages/cli/dist/commands/init-cmd.js.map +1 -0
  66. package/packages/cli/dist/commands/learn-cmd.d.ts +2 -0
  67. package/packages/cli/dist/commands/learn-cmd.d.ts.map +1 -0
  68. package/packages/cli/dist/commands/learn-cmd.js +48 -0
  69. package/packages/cli/dist/commands/learn-cmd.js.map +1 -0
  70. package/packages/cli/dist/commands/pack-cmd.d.ts +15 -0
  71. package/packages/cli/dist/commands/pack-cmd.d.ts.map +1 -0
  72. package/packages/cli/dist/commands/pack-cmd.js +93 -0
  73. package/packages/cli/dist/commands/pack-cmd.js.map +1 -0
  74. package/packages/cli/dist/commands/review-cmd.d.ts +4 -0
  75. package/packages/cli/dist/commands/review-cmd.d.ts.map +1 -0
  76. package/packages/cli/dist/commands/review-cmd.js +107 -0
  77. package/packages/cli/dist/commands/review-cmd.js.map +1 -0
  78. package/packages/cli/dist/commands/search-cmd.d.ts +4 -0
  79. package/packages/cli/dist/commands/search-cmd.d.ts.map +1 -0
  80. package/packages/cli/dist/commands/search-cmd.js +38 -0
  81. package/packages/cli/dist/commands/search-cmd.js.map +1 -0
  82. package/packages/cli/dist/commands/serve-cmd.d.ts +2 -0
  83. package/packages/cli/dist/commands/serve-cmd.d.ts.map +1 -0
  84. package/packages/cli/dist/commands/serve-cmd.js +14 -0
  85. package/packages/cli/dist/commands/serve-cmd.js.map +1 -0
  86. package/packages/cli/dist/commands/status-cmd.d.ts +2 -0
  87. package/packages/cli/dist/commands/status-cmd.d.ts.map +1 -0
  88. package/packages/cli/dist/commands/status-cmd.js +33 -0
  89. package/packages/cli/dist/commands/status-cmd.js.map +1 -0
  90. package/packages/cli/dist/commands/sync-cmd.d.ts +5 -0
  91. package/packages/cli/dist/commands/sync-cmd.d.ts.map +1 -0
  92. package/packages/cli/dist/commands/sync-cmd.js +62 -0
  93. package/packages/cli/dist/commands/sync-cmd.js.map +1 -0
  94. package/packages/cli/dist/commands/vault-cmd.d.ts +10 -0
  95. package/packages/cli/dist/commands/vault-cmd.d.ts.map +1 -0
  96. package/packages/cli/dist/commands/vault-cmd.js +54 -0
  97. package/packages/cli/dist/commands/vault-cmd.js.map +1 -0
  98. package/packages/cli/dist/index.d.ts +2 -0
  99. package/packages/cli/dist/index.d.ts.map +1 -0
  100. package/packages/cli/dist/index.js +156 -0
  101. package/packages/cli/dist/index.js.map +1 -0
  102. package/packages/cli/package.json +24 -0
  103. package/packages/cli/src/commands/brief-cmd.ts +87 -0
  104. package/packages/cli/src/commands/capture-cmd.ts +34 -0
  105. package/packages/cli/src/commands/card-cmd.ts +29 -0
  106. package/packages/cli/src/commands/clip-cmd.ts +172 -0
  107. package/packages/cli/src/commands/cloud-cmd.ts +75 -0
  108. package/packages/cli/src/commands/contradictions-cmd.ts +41 -0
  109. package/packages/cli/src/commands/decay-cmd.ts +57 -0
  110. package/packages/cli/src/commands/digest-cmd.ts +89 -0
  111. package/packages/cli/src/commands/duplicates-cmd.ts +38 -0
  112. package/packages/cli/src/commands/federate-cmd.ts +236 -0
  113. package/packages/cli/src/commands/gaps-cmd.ts +40 -0
  114. package/packages/cli/src/commands/graph-cmd.ts +88 -0
  115. package/packages/cli/src/commands/index-cmd.ts +65 -0
  116. package/packages/cli/src/commands/init-cmd.ts +145 -0
  117. package/packages/cli/src/commands/learn-cmd.ts +56 -0
  118. package/packages/cli/src/commands/pack-cmd.ts +121 -0
  119. package/packages/cli/src/commands/review-cmd.ts +125 -0
  120. package/packages/cli/src/commands/search-cmd.ts +45 -0
  121. package/packages/cli/src/commands/serve-cmd.ts +17 -0
  122. package/packages/cli/src/commands/status-cmd.ts +37 -0
  123. package/packages/cli/src/commands/sync-cmd.ts +68 -0
  124. package/packages/cli/src/commands/vault-cmd.ts +64 -0
  125. package/packages/cli/src/index.ts +187 -0
  126. package/packages/core/package.json +40 -0
  127. package/packages/core/src/api/dashboard.ts +138 -0
  128. package/packages/core/src/api/graph-data.ts +286 -0
  129. package/packages/core/src/api/pwa.ts +82 -0
  130. package/packages/core/src/api/server.ts +660 -0
  131. package/packages/core/src/capture/voice.ts +168 -0
  132. package/packages/core/src/cloud/index.ts +2 -0
  133. package/packages/core/src/cloud/sync.ts +167 -0
  134. package/packages/core/src/config.ts +82 -0
  135. package/packages/core/src/federation/credits.ts +80 -0
  136. package/packages/core/src/federation/hyperswarm.d.ts +19 -0
  137. package/packages/core/src/federation/identity.ts +90 -0
  138. package/packages/core/src/federation/index.ts +8 -0
  139. package/packages/core/src/federation/node.ts +235 -0
  140. package/packages/core/src/federation/privacy.ts +52 -0
  141. package/packages/core/src/federation/reputation.ts +202 -0
  142. package/packages/core/src/federation/search.ts +129 -0
  143. package/packages/core/src/federation/sharing.ts +165 -0
  144. package/packages/core/src/federation/trust.ts +76 -0
  145. package/packages/core/src/federation/types.ts +25 -0
  146. package/packages/core/src/i18n/index.ts +85 -0
  147. package/packages/core/src/index.ts +133 -0
  148. package/packages/core/src/indexer/chunker.ts +180 -0
  149. package/packages/core/src/indexer/embedder.ts +9 -0
  150. package/packages/core/src/indexer/index.ts +113 -0
  151. package/packages/core/src/indexer/local-embedder.ts +35 -0
  152. package/packages/core/src/indexer/scanner.ts +142 -0
  153. package/packages/core/src/indexer/watcher.ts +62 -0
  154. package/packages/core/src/intelligence/contradiction-detector.ts +134 -0
  155. package/packages/core/src/intelligence/decay-engine.ts +229 -0
  156. package/packages/core/src/intelligence/duplicate-detector.ts +71 -0
  157. package/packages/core/src/intelligence/fsrs.ts +79 -0
  158. package/packages/core/src/intelligence/gap-detector.ts +109 -0
  159. package/packages/core/src/intelligence/learning-path.ts +86 -0
  160. package/packages/core/src/intelligence/notifications.ts +106 -0
  161. package/packages/core/src/intelligence/predictive-gaps.ts +94 -0
  162. package/packages/core/src/intelligence/semantic-versioning.ts +97 -0
  163. package/packages/core/src/intelligence/types.ts +28 -0
  164. package/packages/core/src/mcp/custom-tools.ts +97 -0
  165. package/packages/core/src/mcp/index.ts +1 -0
  166. package/packages/core/src/mcp/server.ts +142 -0
  167. package/packages/core/src/mcp/tools/agentic-graph.ts +96 -0
  168. package/packages/core/src/mcp/tools/brief.ts +49 -0
  169. package/packages/core/src/mcp/tools/decay.ts +40 -0
  170. package/packages/core/src/mcp/tools/decision-journal.ts +95 -0
  171. package/packages/core/src/mcp/tools/export.ts +72 -0
  172. package/packages/core/src/mcp/tools/federated-search.ts +43 -0
  173. package/packages/core/src/mcp/tools/generate-claude-md.ts +130 -0
  174. package/packages/core/src/mcp/tools/get-document.ts +26 -0
  175. package/packages/core/src/mcp/tools/get-related.ts +41 -0
  176. package/packages/core/src/mcp/tools/learning-path.ts +52 -0
  177. package/packages/core/src/mcp/tools/list-topics.ts +20 -0
  178. package/packages/core/src/mcp/tools/search.ts +35 -0
  179. package/packages/core/src/mcp/tools/snapshot.ts +98 -0
  180. package/packages/core/src/multi-vault/index.ts +118 -0
  181. package/packages/core/src/pack/creator.ts +127 -0
  182. package/packages/core/src/pack/exporter.ts +21 -0
  183. package/packages/core/src/pack/importer.ts +82 -0
  184. package/packages/core/src/pack/index.ts +5 -0
  185. package/packages/core/src/pack/marketplace.ts +103 -0
  186. package/packages/core/src/pack/pii-masker.ts +38 -0
  187. package/packages/core/src/pack/types.ts +39 -0
  188. package/packages/core/src/plugins/index.ts +100 -0
  189. package/packages/core/src/plugins/webhooks.ts +110 -0
  190. package/packages/core/src/search/bm25.ts +16 -0
  191. package/packages/core/src/search/index.ts +83 -0
  192. package/packages/core/src/search/rrf.ts +31 -0
  193. package/packages/core/src/search/semantic.ts +15 -0
  194. package/packages/core/src/store/index.ts +2 -0
  195. package/packages/core/src/store/sqlite-vec.ts +290 -0
  196. package/packages/core/src/store/types.ts +22 -0
  197. package/packages/core/src/team/index.ts +126 -0
  198. package/packages/core/src/types/chunk.ts +25 -0
  199. package/packages/core/src/types/document.ts +24 -0
  200. package/packages/core/src/types/graph.ts +44 -0
  201. package/packages/core/src/types/index.ts +15 -0
  202. package/packages/core/src/types/search.ts +38 -0
  203. package/packages/core/src/utils/retry.ts +85 -0
  204. package/packages/core/tests/api-card.test.ts +60 -0
  205. package/packages/core/tests/api-routes.test.ts +98 -0
  206. package/packages/core/tests/bm25.test.ts +87 -0
  207. package/packages/core/tests/chunker.test.ts +48 -0
  208. package/packages/core/tests/cluster.test.ts +75 -0
  209. package/packages/core/tests/constellation.test.ts +77 -0
  210. package/packages/core/tests/export-utils.test.ts +97 -0
  211. package/packages/core/tests/fsrs.test.ts +96 -0
  212. package/packages/core/tests/gesture-detector.test.ts +45 -0
  213. package/packages/core/tests/graph-data.test.ts +87 -0
  214. package/packages/core/tests/layout.test.ts +83 -0
  215. package/packages/core/tests/mcp.test.ts +148 -0
  216. package/packages/core/tests/pack.test.ts +127 -0
  217. package/packages/core/tests/pii-masker.test.ts +42 -0
  218. package/packages/core/tests/profile-card.test.ts +62 -0
  219. package/packages/core/tests/rrf.test.ts +29 -0
  220. package/packages/core/tests/search-integration.test.ts +139 -0
  221. package/packages/core/tests/store.test.ts +80 -0
  222. package/packages/graph/click-result.png +0 -0
  223. package/packages/graph/index.html +17 -0
  224. package/packages/graph/package.json +32 -0
  225. package/packages/graph/src/App.tsx +7 -0
  226. package/packages/graph/src/api/client.ts +39 -0
  227. package/packages/graph/src/components/ClusterFilter.tsx +73 -0
  228. package/packages/graph/src/components/ConstellationView.tsx +232 -0
  229. package/packages/graph/src/components/ExportPanel.tsx +177 -0
  230. package/packages/graph/src/components/Graph3D.tsx +230 -0
  231. package/packages/graph/src/components/GraphEdges.tsx +100 -0
  232. package/packages/graph/src/components/GraphNodes.tsx +386 -0
  233. package/packages/graph/src/components/HealthDashboard.tsx +173 -0
  234. package/packages/graph/src/components/Layout.tsx +214 -0
  235. package/packages/graph/src/components/MotionOverlay.tsx +81 -0
  236. package/packages/graph/src/components/MotionToggle.tsx +33 -0
  237. package/packages/graph/src/components/MultiverseView.tsx +286 -0
  238. package/packages/graph/src/components/NodeDetail.tsx +232 -0
  239. package/packages/graph/src/components/PulseParticle.tsx +232 -0
  240. package/packages/graph/src/components/SearchBar.tsx +107 -0
  241. package/packages/graph/src/components/StarField.tsx +197 -0
  242. package/packages/graph/src/components/StatusBar.tsx +53 -0
  243. package/packages/graph/src/components/Timeline.tsx +148 -0
  244. package/packages/graph/src/components/ToolsPanel.tsx +512 -0
  245. package/packages/graph/src/components/Tooltip.tsx +100 -0
  246. package/packages/graph/src/components/TypeFilter.tsx +131 -0
  247. package/packages/graph/src/embed/EmbedGraph.tsx +144 -0
  248. package/packages/graph/src/hooks/useConstellationLOD.ts +76 -0
  249. package/packages/graph/src/hooks/useDecay.ts +37 -0
  250. package/packages/graph/src/hooks/useExport.ts +165 -0
  251. package/packages/graph/src/hooks/useGraph.ts +69 -0
  252. package/packages/graph/src/hooks/useKeyboardNav.ts +122 -0
  253. package/packages/graph/src/hooks/useLayout.ts +45 -0
  254. package/packages/graph/src/hooks/useMotion.ts +120 -0
  255. package/packages/graph/src/hooks/usePulse.ts +58 -0
  256. package/packages/graph/src/hooks/useSearch.ts +71 -0
  257. package/packages/graph/src/lib/constellation.ts +107 -0
  258. package/packages/graph/src/lib/export-utils.ts +48 -0
  259. package/packages/graph/src/lib/gesture-detector.ts +123 -0
  260. package/packages/graph/src/lib/layout.worker.ts +153 -0
  261. package/packages/graph/src/lib/motion-controller.ts +83 -0
  262. package/packages/graph/src/lib/profile-card.ts +122 -0
  263. package/packages/graph/src/main.tsx +4 -0
  264. package/packages/graph/src/stores/graph-store.ts +155 -0
  265. package/packages/graph/success.png +0 -0
  266. package/packages/graph/test-click.mjs +49 -0
  267. package/packages/graph/test-explore.mjs +102 -0
  268. package/packages/graph/test-final.mjs +61 -0
  269. package/packages/graph/test-graph.mjs +139 -0
  270. package/packages/graph/test-hover.mjs +48 -0
  271. package/packages/graph/test-pulse.mjs +68 -0
  272. package/packages/graph/test-screenshot.mjs +56 -0
  273. package/packages/graph/test-v2.mjs +97 -0
  274. package/packages/graph/vite.config.ts +15 -0
  275. package/packages/sync/.env.example +11 -0
  276. package/packages/sync/.sync-state.json +317 -0
  277. package/packages/sync/.upload-state.json +1009 -0
  278. package/packages/sync/create-stella-network-notion.mjs +151 -0
  279. package/packages/sync/create-stellavault-project-notion.mjs +322 -0
  280. package/packages/sync/logs/sync-2026-03-28.log +6 -0
  281. package/packages/sync/logs/sync-2026-03-29.log +12 -0
  282. package/packages/sync/logs/sync-2026-03-30.log +6 -0
  283. package/packages/sync/logs/sync-2026-03-31.log +6 -0
  284. package/packages/sync/logs/sync-2026-04-01.log +6 -0
  285. package/packages/sync/logs/sync-2026-04-02.log +6 -0
  286. package/packages/sync/package-lock.json +373 -0
  287. package/packages/sync/package.json +16 -0
  288. package/packages/sync/run-sync.bat +18 -0
  289. package/packages/sync/run-sync.mjs +46 -0
  290. package/packages/sync/setup-scheduler.mjs +119 -0
  291. package/packages/sync/structured-sync.mjs +187 -0
  292. package/packages/sync/sync-to-obsidian.mjs +264 -0
  293. package/packages/sync/upload-pdca-to-notion.mjs +495 -0
  294. package/tsconfig.base.json +18 -0
package/.env.example ADDED
@@ -0,0 +1,12 @@
1
+ # Stellavault - Environment Variables
2
+ # Copy this file to .env and fill in your values
3
+
4
+ # Required: Path to your Obsidian vault
5
+ OBSIDIAN_PATH=/path/to/your/obsidian/vault
6
+
7
+ # Optional: Custom database path (default: ~/.stellavault/index.db)
8
+ # STELLAVAULT_DB_PATH=/custom/path/to/index.db
9
+
10
+ # Optional: Notion integration (for sync feature)
11
+ # NOTION_TOKEN=your_notion_integration_token
12
+ # NOTION_DATABASE_ID=your_database_id
package/CLAUDE.md ADDED
@@ -0,0 +1,39 @@
1
+ # Stellavault β€” Project Rules
2
+
3
+ ## Project Info
4
+ - **Name**: Stellavault (λΆ„μ‚° 지식 μΈν…”λ¦¬μ „μŠ€ ν”Œλž«νΌ)
5
+ - **GitHub**: https://github.com/Evanciel/stellavault
6
+ - **Stack**: Node.js 20+, TypeScript, ESM, Monorepo (npm workspaces)
7
+ - **Packages**: core, cli, graph, sync
8
+
9
+ ## Autopilot μΆ”κ°€ κ·œμΉ™
10
+
11
+ ### Threat Model Gate (Phase 6 ν•„μˆ˜)
12
+
13
+ λͺ¨λ“  κΈ°λŠ₯ κ΅¬ν˜„ ν›„ Quality Gateμ—μ„œ λ°˜λ“œμ‹œ μ•„λž˜ μ§ˆλ¬Έμ„ 검증할 것:
14
+
15
+ 1. **μ•…μ˜μ  μž…λ ₯**: 이 κΈ°λŠ₯에 κ°€μ§œ/μ˜€μ—Όλœ 데이터λ₯Ό λ„£μœΌλ©΄ μ–΄λ–»κ²Œ λ˜λŠ”κ°€?
16
+ 2. **μ„œλΉ„μŠ€ κ±°λΆ€**: 이 κΈ°λŠ₯을 λŒ€λŸ‰μœΌλ‘œ ν˜ΈμΆœν•˜λ©΄ μ‹œμŠ€ν…œμ΄ λ©ˆμΆ”λŠ”κ°€?
17
+ 3. **ν”„λΌμ΄λ²„μ‹œ 유좜**: 이 κΈ°λŠ₯이 μ˜λ„μΉ˜ μ•Šκ²Œ 개인 정보λ₯Ό λ…ΈμΆœν•˜λŠ”κ°€?
18
+ 4. **μ‹ λ’° μ•…μš©**: 이 κΈ°λŠ₯의 μ‹ λ’° λ©”μ»€λ‹ˆμ¦˜μ„ μš°νšŒν•  수 μžˆλŠ”κ°€?
19
+ 5. **데이터 무결성**: 이 κΈ°λŠ₯이 κΈ°μ‘΄ 데이터λ₯Ό μ†μƒμ‹œν‚¬ 수 μžˆλŠ”κ°€?
20
+
21
+ μœ„ν˜‘ 발견 μ‹œ:
22
+ - Critical β†’ κ΅¬ν˜„ 쀑단, λ°©μ–΄ 둜직 μΆ”κ°€ ν›„ μž¬κ²€μ¦
23
+ - Medium β†’ Phase 7(Iterate)μ—μ„œ λ°©μ–΄ μΆ”κ°€
24
+ - Low β†’ 이슈둜 기둝, λ‹€μŒ μ‚¬μ΄ν΄μ—μ„œ 처리
25
+
26
+ ### Federation λ³΄μ•ˆ 원칙
27
+
28
+ - 원문 ν…μŠ€νŠΈλŠ” μ ˆλŒ€ λ„€νŠΈμ›Œν¬ 전솑 κΈˆμ§€
29
+ - 검색 κ²°κ³Ό: 제λͺ© + μœ μ‚¬λ„ + 50자 μŠ€λ‹ˆνŽ«λ§Œ
30
+ - blocked λ…Έλ“œ(reputation=0)의 κ²°κ³ΌλŠ” 필터링
31
+ - μƒˆ λ…Έλ“œλŠ” neutral(40점)μ—μ„œ μ‹œμž‘, μžλ™ ν‰νŒ 적립
32
+
33
+ ### μ½”λ“œ μ»¨λ²€μ…˜
34
+
35
+ - Design reference: `// Design Ref: Β§{section} β€” {rationale}`
36
+ - Success criteria: `// Plan SC: {criteria being addressed}`
37
+ - Federation λ©”μ‹œμ§€: JSON + newline delimiter
38
+ - μ—λŸ¬ 처리: StellavaultError with code + suggestion
39
+ - i18n: μ‚¬μš©μž λ…ΈμΆœ λ¬Έμžμ—΄μ€ t() ν•¨μˆ˜ μ‚¬μš© ꢌμž₯
@@ -0,0 +1,65 @@
1
+ # Contributing to Evan Knowledge Hub
2
+
3
+ Thank you for your interest in contributing!
4
+
5
+ ## Development Setup
6
+
7
+ ```bash
8
+ # Clone the repository
9
+ git clone https://github.com/your-username/evan-knowledge-hub.git
10
+ cd evan-knowledge-hub
11
+
12
+ # Install dependencies
13
+ npm install
14
+
15
+ # Run tests
16
+ npm test
17
+
18
+ # Start the graph visualization (requires indexed vault)
19
+ npm run dev:core
20
+ ```
21
+
22
+ ## Project Structure
23
+
24
+ ```
25
+ packages/
26
+ core/ Core engine (indexer, search, MCP server, API)
27
+ cli/ CLI commands (ekh index/search/serve/graph/card/pack)
28
+ graph/ 3D Knowledge Graph (React Three Fiber)
29
+ sync/ Notion-Obsidian sync
30
+ ```
31
+
32
+ ## Code Conventions
33
+
34
+ - **Language**: TypeScript strict mode, ESM modules
35
+ - **File naming**: kebab-case.ts
36
+ - **Components**: PascalCase.tsx, functional + hooks
37
+ - **Testing**: Vitest
38
+ - **Import order**: node: builtins > external > internal
39
+
40
+ ## Pull Request Process
41
+
42
+ 1. Fork the repo and create your branch from `main`
43
+ 2. Write tests for new functionality
44
+ 3. Ensure all 92+ tests pass (`npm test`)
45
+ 4. Keep PRs focused on a single change
46
+ 5. Add Design Ref comments for architectural decisions:
47
+ ```typescript
48
+ // Design Ref: SS{section} - {rationale}
49
+ ```
50
+
51
+ ## Architecture
52
+
53
+ The project follows **Option C (Pragmatic Split)**:
54
+ - `core/` = engine + MCP (Clean Architecture layers)
55
+ - `cli/` = user-facing commands
56
+ - `graph/` = React Three Fiber visualization
57
+
58
+ Key patterns:
59
+ - Dependency Injection via `createKnowledgeHub()` factory
60
+ - Zustand for graph state management
61
+ - BM25 + Cosine + RRF hybrid search
62
+
63
+ ## License
64
+
65
+ MIT
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Evan (KHS)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,182 @@
1
+ # Stellavault
2
+
3
+ > **Notes die in folders. Stellavault keeps your knowledge alive.**
4
+
5
+ Your Obsidian vault is more than files. It's a living network β€” connections emerge, memories fade, gaps appear. Stellavault turns it into a knowledge system that **discovers hidden connections**, **detects fading memories**, **finds blind spots**, and **gives AI agents direct access to everything you know**.
6
+
7
+ ## 30-Second Setup
8
+
9
+ ```bash
10
+ # Install globally
11
+ npm install -g stellavault
12
+
13
+ # Interactive setup wizard
14
+ stellavault init
15
+
16
+ # Or manually: index your vault + launch 3D graph
17
+ stellavault index /path/to/obsidian/vault
18
+ stellavault graph
19
+ ```
20
+
21
+ That's it. Open `http://localhost:5173` to see your knowledge come alive in 3D.
22
+
23
+ ## Give Your AI Agent Memory
24
+
25
+ ```bash
26
+ claude mcp add stellavault -- stellavault serve
27
+ ```
28
+
29
+ Now Claude Code can search your notes, track your decisions, tell you what's fading, and give you a daily knowledge briefing β€” using 17+ MCP tools.
30
+
31
+ ## What It Does
32
+
33
+ **Understands** β€” Vectorizes every note locally (no API keys needed). Hybrid search combines BM25 + cosine similarity + RRF fusion.
34
+
35
+ **Remembers** β€” FSRS spaced repetition tracks what you're forgetting. `stellavault decay` shows what's fading. `stellavault review` runs a review session.
36
+
37
+ **Discovers** β€” Gap detector finds missing connections. Duplicate finder catches redundancy. Contradiction detector spots conflicting statements. Learning path tells you what to study next.
38
+
39
+ **Visualizes** β€” Interactive 3D neural graph with constellation view, timeline slider, type filters, health dashboard, and keyboard navigation.
40
+
41
+ **Connects** β€” Federation protocol links your vault to other Stellavault nodes via P2P. Search across the network without sharing your raw text. Multiverse UI shows your universe alongside connected peers.
42
+
43
+ ## Key Features
44
+
45
+ | Category | Features |
46
+ |----------|----------|
47
+ | **Search** | Hybrid BM25+Vector+RRF, semantic search, search history |
48
+ | **Intelligence** | FSRS decay, gap detection, duplicates, contradictions, predictive gaps, learning paths |
49
+ | **Visualization** | 3D graph, constellation view, timeline, type filter, health dashboard, embed widget |
50
+ | **AI Integration** | 17+ MCP tools, custom MCP tool builder (YAML), agentic graph construction |
51
+ | **Federation** | P2P search, multiverse UI, reputation system, trust scoring, differential privacy |
52
+ | **Security** | E2E cloud sync (AES-256-GCM), team auth (RBAC), sharing controls, SSRF/XSS protection |
53
+ | **Platform** | Web dashboard, PWA, voice capture (Whisper), Notion sync, multi-vault, i18n (en/ko/ja/zh) |
54
+ | **Extensibility** | Plugin SDK, webhook system, Knowledge Pack marketplace |
55
+
56
+ ## CLI (28+ commands)
57
+
58
+ ```bash
59
+ # Core
60
+ stellavault init # Interactive setup wizard
61
+ stellavault index <vault-path> # Vectorize your vault
62
+ stellavault search <query> # Semantic search
63
+ stellavault graph # Launch 3D graph
64
+ stellavault serve # MCP server for AI agents
65
+ stellavault status # Index stats
66
+
67
+ # Intelligence
68
+ stellavault decay # What's fading?
69
+ stellavault learn # AI learning path
70
+ stellavault brief # Daily knowledge briefing
71
+ stellavault digest # Weekly report
72
+ stellavault review # FSRS review session
73
+ stellavault gaps # Knowledge gap detection
74
+ stellavault duplicates # Duplicate detection
75
+ stellavault contradictions # Contradiction detection
76
+
77
+ # Federation
78
+ stellavault federate join # Join P2P network
79
+ stellavault federate status # Node identity
80
+
81
+ # Multi-Vault
82
+ stellavault vault add <id> <path> # Register a vault
83
+ stellavault vault search-all <q> # Search across all vaults
84
+
85
+ # Cloud
86
+ stellavault cloud sync # E2E encrypted backup
87
+ stellavault cloud restore # Restore from cloud
88
+
89
+ # More
90
+ stellavault clip <url> # Web/YouTube clipper
91
+ stellavault sync # Notion β†’ Obsidian
92
+ stellavault capture <audio> # Voice β†’ knowledge (Whisper)
93
+ stellavault card # SVG profile card
94
+ stellavault pack <cmd> # Knowledge Pack management
95
+ ```
96
+
97
+ Use short alias `sv` for all commands: `sv graph`, `sv decay`, `sv learn`
98
+
99
+ ## MCP Tools (17+)
100
+
101
+ | Tool | What it does |
102
+ |------|-------------|
103
+ | `search` | Hybrid search (BM25 + vector + RRF) |
104
+ | `get-document` | Full document with metadata |
105
+ | `get-related` | Semantically similar documents |
106
+ | `list-topics` | Topic cloud |
107
+ | `get-decay-status` | Memory decay report |
108
+ | `get-morning-brief` | Daily knowledge briefing |
109
+ | `get-learning-path` | AI learning recommendations |
110
+ | `federated-search` | Search across P2P network |
111
+ | `create-knowledge-node` | AI creates notes during conversation |
112
+ | `create-knowledge-link` | AI creates links between notes |
113
+ | `log-decision` / `find-decisions` | Technical decision journal |
114
+ | `create-snapshot` / `load-snapshot` | Context snapshots |
115
+ | `generate-claude-md` | Auto-generate CLAUDE.md |
116
+ | `export` | JSON/CSV export |
117
+
118
+ ## Federation β€” P2P Knowledge Network
119
+
120
+ Each Stellavault is a node. Connect to discover knowledge across the network β€” without sharing your raw text.
121
+
122
+ ```bash
123
+ stellavault federate join --name "my-node"
124
+ # Interactive mode:
125
+ federation> search kubernetes deployment
126
+ # 87% "K8s Rolling Update Guide" [peer-alice]
127
+ # Kubernetesμ—μ„œ 무쀑단 배포λ₯Ό μœ„ν•΄...
128
+ federation> peers
129
+ # alice (1,209 docs) [trust: 88]
130
+ # bob (47 docs) [trust: 72]
131
+ ```
132
+
133
+ **Privacy**: Only titles + similarity scores + 50-char masked snippets cross the network. Never raw text. Differential privacy noise on embeddings. Sharing controls per tag/folder.
134
+
135
+ **Trust**: Web of Trust + automatic reputation scoring (consistency, consensus, helpfulness).
136
+
137
+ ## Architecture
138
+
139
+ ```
140
+ stellavault/
141
+ β”œβ”€β”€ packages/
142
+ β”‚ β”œβ”€β”€ core/ Search, MCP, API, Intelligence, Federation, Cloud, Team, i18n
143
+ β”‚ β”œβ”€β”€ cli/ 28+ commands
144
+ β”‚ β”œβ”€β”€ graph/ 3D visualization + Multiverse UI (React Three Fiber)
145
+ β”‚ └── sync/ Notion ↔ Obsidian sync
146
+ ```
147
+
148
+ ## Tech Stack
149
+
150
+ | Layer | Tech |
151
+ |-------|------|
152
+ | Runtime | Node.js 20+ (ESM, TypeScript) |
153
+ | Vector Store | SQLite-vec (local, no server) |
154
+ | Embedding | all-MiniLM-L6-v2 (local, no API key) |
155
+ | Search | BM25 + Cosine + RRF Fusion |
156
+ | 3D | React Three Fiber + Three.js + Zustand |
157
+ | Memory | FSRS (Free Spaced Repetition Scheduler) |
158
+ | P2P | Hyperswarm (NAT traversal + DHT) |
159
+ | AI | MCP (Model Context Protocol) |
160
+ | Security | AES-256-GCM, HMAC-SHA256, Differential Privacy |
161
+
162
+ ## Configuration
163
+
164
+ ```json
165
+ {
166
+ "vaultPath": "/path/to/obsidian/vault",
167
+ "dbPath": "~/.stellavault/index.db",
168
+ "embedding": { "model": "local", "localModel": "all-MiniLM-L6-v2" },
169
+ "search": { "defaultLimit": 10, "rrfK": 60 },
170
+ "mcp": { "mode": "stdio", "port": 3333 }
171
+ }
172
+ ```
173
+
174
+ ## License
175
+
176
+ MIT
177
+
178
+ ## Links
179
+
180
+ - [Wiki: Vault Structure Guide](docs/wiki/vault-structure.md)
181
+ - [Wiki: Notion Setup](docs/wiki/notion-setup.md)
182
+ - [Wiki: Federation Guide](docs/wiki/federation-guide.md)
@@ -0,0 +1,25 @@
1
+ # Stellavault Project Memory
2
+
3
+ ## ν”„λ‘œμ νŠΈ κ°œμš”
4
+ - 개인 지식 관리 도ꡬ (Obsidian vault 기반)
5
+ - 핡심: 벑터 검색, 지식 κ·Έλž˜ν”„, MCP 도ꡬ, Federation P2P, ν΄λΌμš°λ“œ 동기화
6
+ - 경둜: packages/core/src/
7
+
8
+ ## 2026-04-02 Red Team λ³΄μ•ˆ 감사 κ²°κ³Ό
9
+
10
+ ### CRITICAL (4건)
11
+ 1. federation/identity.ts β€” verifySignatureκ°€ κ°€μ§œ (length===32만 확인)
12
+ 2. federation/node.ts β€” ν•Έλ“œμ…°μ΄ν¬ 미인증, peerId μŠ€ν‘Έν•‘ κ°€λŠ₯
13
+ 3. capture/voice.ts β€” execSync에 unsanitized μž…λ ₯ (command injection)
14
+ 4. cloud/sync.ts β€” μ•”ν˜Έν™” ν‚€ 파일 κΆŒν•œ λ―Έμ„€μ • (0o644 κΈ°λ³Έκ°’)
15
+
16
+ ### HIGH (7건)
17
+ 1. team/index.ts β€” localhost둜 admin 인증 우회
18
+ 2. api/server.ts β€” /api/duplicates/merge path traversal
19
+ 3. api/server.ts β€” /api/clip SSRF (URL 미검증)
20
+ 4. federation/node.ts β€” 버퍼 크기 μ œν•œ μ—†μŒ (OOM)
21
+ 5. cloud/sync.ts β€” S3 endpoint둜 secretAccessKey 유좜
22
+ 6. api/dashboard.ts β€” innerHTML XSS
23
+ 7. api/server.ts β€” SVG injection (esc ν•¨μˆ˜ λΆˆμ™„μ „)
24
+
25
+ ### λ―Έμˆ˜μ • μƒνƒœ β€” λ‹€μŒ μ„Έμ…˜μ—μ„œ CRITICALλΆ€ν„° 순차 μˆ˜μ • ν•„μš”
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "stellavault",
3
+ "version": "0.1.0",
4
+ "description": "Turn your Obsidian vault into a 3D neural knowledge graph with AI-powered search, memory decay tracking, and MCP integration.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/Evanciel/stellavault"
8
+ },
9
+ "homepage": "https://github.com/Evanciel/stellavault",
10
+ "bugs": "https://github.com/Evanciel/stellavault/issues",
11
+ "keywords": ["obsidian", "knowledge-graph", "3d-visualization", "vector-search", "mcp", "fsrs", "ai"],
12
+ "license": "MIT",
13
+ "author": "Evan",
14
+ "type": "module",
15
+ "workspaces": [
16
+ "packages/sync",
17
+ "packages/core",
18
+ "packages/cli",
19
+ "packages/graph"
20
+ ],
21
+ "scripts": {
22
+ "build": "npm run build --workspaces --if-present",
23
+ "test": "npm run test --workspaces --if-present",
24
+ "sync": "npm run sync --workspace=@stellavault/sync",
25
+ "dev:core": "npm run dev --workspace=@stellavault/core"
26
+ },
27
+ "engines": {
28
+ "node": ">=20.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "playwright": "^1.58.2"
32
+ }
33
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/index.js';
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/index.js';
@@ -0,0 +1,2 @@
1
+ export declare function briefCommand(): Promise<void>;
2
+ //# sourceMappingURL=brief-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/brief-cmd.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,kBAiFjC"}
@@ -0,0 +1,82 @@
1
+ // stellavault brief β€” μ•„μΉ¨ λΈŒλ¦¬ν•‘ (decay + gaps + streak 톡합)
2
+ import chalk from 'chalk';
3
+ import { loadConfig, createKnowledgeHub, DecayEngine, detectKnowledgeGaps } from '@stellavault/core';
4
+ export async function briefCommand() {
5
+ const config = loadConfig();
6
+ const hub = createKnowledgeHub(config);
7
+ await hub.store.initialize();
8
+ await hub.embedder.initialize();
9
+ const db = hub.store.getDb();
10
+ if (!db) {
11
+ console.error(chalk.red('❌ DB μ ‘κ·Ό λΆˆκ°€'));
12
+ process.exit(1);
13
+ }
14
+ const decayEngine = new DecayEngine(db);
15
+ const stats = await hub.store.getStats();
16
+ console.log(chalk.green('\nβ˜€οΈ Good morning! 였늘의 지식 λΈŒλ¦¬ν•‘'));
17
+ console.log(chalk.dim('─'.repeat(50)));
18
+ // 1. 전체 μƒνƒœ
19
+ console.log(`\nπŸ“š ${chalk.bold(String(stats.documentCount))}개 λ…ΈνŠΈ | ${stats.chunkCount} 청크`);
20
+ // 2. 감쇠 μš”μ•½
21
+ const report = await decayEngine.computeAll();
22
+ const avgRColor = report.averageR >= 0.7 ? chalk.green : report.averageR >= 0.5 ? chalk.yellow : chalk.red;
23
+ console.log(`🧠 전체 건강도: ${avgRColor('R=' + report.averageR)} | 감쇠 ${chalk.yellow(String(report.decayingCount))}개 | μœ„ν—˜ ${chalk.red(String(report.criticalCount))}개`);
24
+ // 3. 리뷰 λŒ€μƒ Top 5
25
+ if (report.topDecaying.length > 0) {
26
+ console.log(chalk.yellow('\nπŸ“‹ 리뷰 μΆ”μ²œ:'));
27
+ for (const d of report.topDecaying.slice(0, 5)) {
28
+ const bar = 'β–ˆ'.repeat(Math.round(d.retrievability * 10)) + 'β–‘'.repeat(10 - Math.round(d.retrievability * 10));
29
+ console.log(` ${chalk.dim(bar)} R=${d.retrievability.toFixed(2)} ${d.title}`);
30
+ }
31
+ console.log(chalk.dim(' β†’ stellavault review 둜 리뷰 μ‹œμž‘'));
32
+ }
33
+ // 4. κ°­ μš”μ•½
34
+ try {
35
+ const gapReport = await detectKnowledgeGaps(hub.store);
36
+ const highGaps = gapReport.gaps.filter(g => g.severity === 'high');
37
+ if (highGaps.length > 0) {
38
+ console.log(chalk.yellow(`\nπŸ•³οΈ 지식 κ°­ ${highGaps.length}개:`));
39
+ for (const g of highGaps.slice(0, 3)) {
40
+ console.log(` πŸ”΄ ${g.clusterA.replace(/\s*\(\d+\)$/, '')} ↔ ${g.clusterB.replace(/\s*\(\d+\)$/, '')}`);
41
+ }
42
+ }
43
+ }
44
+ catch { /* gaps μ‹€νŒ¨ν•΄λ„ λ¬΄μ‹œ */ }
45
+ // 5. Streak
46
+ try {
47
+ const days = db.prepare(`
48
+ SELECT DISTINCT date(accessed_at) as d FROM access_log
49
+ WHERE access_type = 'view' ORDER BY d DESC LIMIT 30
50
+ `).all();
51
+ let streak = 0;
52
+ for (let i = 0; i < days.length; i++) {
53
+ const expected = new Date(Date.now() - i * 86400000).toISOString().slice(0, 10);
54
+ if (days[i]?.d === expected)
55
+ streak++;
56
+ else
57
+ break;
58
+ }
59
+ if (streak > 0)
60
+ console.log(chalk.yellow(`\nπŸ”₯ ${streak}일 연속 리뷰!`));
61
+ }
62
+ catch { }
63
+ // 6. 졜근 ν™œλ™
64
+ try {
65
+ const recent = db.prepare(`
66
+ SELECT document_id, COUNT(*) as cnt FROM access_log
67
+ WHERE accessed_at > datetime('now', '-7 days')
68
+ GROUP BY document_id ORDER BY cnt DESC LIMIT 3
69
+ `).all();
70
+ if (recent.length > 0) {
71
+ console.log(chalk.dim('\nπŸ“Š 이번 μ£Ό κ°€μž₯ 많이 λ³Έ λ…ΈνŠΈ:'));
72
+ for (const r of recent) {
73
+ const doc = db.prepare('SELECT title FROM documents WHERE id = ?').get(r.document_id);
74
+ console.log(` ${r.cnt}회 β€” ${doc?.title ?? r.document_id}`);
75
+ }
76
+ }
77
+ }
78
+ catch { }
79
+ console.log('\n' + chalk.dim('─'.repeat(50)));
80
+ console.log(chalk.dim('πŸ’‘ stellavault review | stellavault gaps | stellavault graph'));
81
+ }
82
+ //# sourceMappingURL=brief-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-cmd.js","sourceRoot":"","sources":["../../src/commands/brief-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function captureCommand(audioFile: string, options: {
2
+ model?: string;
3
+ language?: string;
4
+ tags?: string;
5
+ folder?: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=capture-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/capture-cmd.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,iBA4BrI"}
@@ -0,0 +1,31 @@
1
+ // sv capture <audio-file> β€” Voice Knowledge Capture (P3)
2
+ import chalk from 'chalk';
3
+ import { loadConfig, captureVoice, isWhisperAvailable } from '@stellavault/core';
4
+ export async function captureCommand(audioFile, options) {
5
+ if (!isWhisperAvailable()) {
6
+ console.log(chalk.red('\n Whisper not installed.'));
7
+ console.log(chalk.dim(' Install: pip install openai-whisper'));
8
+ console.log(chalk.dim(' Or: brew install whisper-cpp\n'));
9
+ return;
10
+ }
11
+ const config = loadConfig();
12
+ console.log(chalk.dim(`\n Transcribing ${audioFile}...`));
13
+ const result = await captureVoice(audioFile, {
14
+ vaultPath: config.vaultPath,
15
+ model: options.model,
16
+ language: options.language,
17
+ tags: options.tags?.split(',').map(t => t.trim()),
18
+ folder: options.folder,
19
+ });
20
+ if (result.success) {
21
+ console.log(chalk.green(`\n βœ… Captured: "${result.title}"`));
22
+ console.log(` Tags: ${result.tags.join(', ')}`);
23
+ console.log(` File: ${result.filePath}`);
24
+ console.log(chalk.dim(` Transcript: ${result.transcript.slice(0, 100)}...`));
25
+ console.log(chalk.dim('\n πŸ’‘ Run stellavault index to add to the graph\n'));
26
+ }
27
+ else {
28
+ console.log(chalk.red(`\n ❌ Capture failed: ${result.error}\n`));
29
+ }
30
+ }
31
+ //# sourceMappingURL=capture-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-cmd.js","sourceRoot":"","sources":["../../src/commands/capture-cmd.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,OAA8E;IACpI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function cardCommand(options: {
2
+ output?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=card-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/card-cmd.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,iBAsB7D"}
@@ -0,0 +1,26 @@
1
+ // stellavault card β€” SVG ν”„λ‘œν•„ μΉ΄λ“œ 생성
2
+ import chalk from 'chalk';
3
+ import { writeFileSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
5
+ export async function cardCommand(options) {
6
+ const output = options.output ?? 'knowledge-card.svg';
7
+ const outPath = resolve(process.cwd(), output);
8
+ console.error(chalk.dim('⏳ Generating profile card...'));
9
+ try {
10
+ // API μ„œλ²„μ—μ„œ SVG κ°€μ Έμ˜€κΈ° (μ„œλ²„κ°€ μ‹€ν–‰ 쀑이어야 함)
11
+ const res = await fetch('http://127.0.0.1:3333/api/profile-card');
12
+ if (!res.ok)
13
+ throw new Error(`API error: ${res.status}. Is 'stellavault graph' running?`);
14
+ const svg = await res.text();
15
+ writeFileSync(outPath, svg, 'utf-8');
16
+ console.error(chalk.green(`βœ… Profile card saved: ${outPath}`));
17
+ console.error(chalk.dim(' Embed in GitHub README:'));
18
+ console.error(chalk.dim(` ![Knowledge Card](${output})`));
19
+ }
20
+ catch (err) {
21
+ console.error(chalk.red(`❌ Failed: ${err}`));
22
+ console.error(chalk.dim(' Make sure API server is running: stellavault graph'));
23
+ process.exit(1);
24
+ }
25
+ }
26
+ //# sourceMappingURL=card-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-cmd.js","sourceRoot":"","sources":["../../src/commands/card-cmd.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,MAAM,mCAAmC,CAAC,CAAC;QAE1F,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAErC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function clipCommand(url: string, options: {
2
+ folder?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=clip-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/clip-cmd.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,iBA2E1E"}