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.
- package/.env.example +12 -0
- package/CLAUDE.md +39 -0
- package/CONTRIBUTING.md +65 -0
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/memory/MEMORY.md +25 -0
- package/package.json +33 -0
- package/packages/cli/bin/ekh.js +2 -0
- package/packages/cli/bin/stellavault.js +2 -0
- package/packages/cli/dist/commands/brief-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/brief-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/brief-cmd.js +82 -0
- package/packages/cli/dist/commands/brief-cmd.js.map +1 -0
- package/packages/cli/dist/commands/capture-cmd.d.ts +7 -0
- package/packages/cli/dist/commands/capture-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/capture-cmd.js +31 -0
- package/packages/cli/dist/commands/capture-cmd.js.map +1 -0
- package/packages/cli/dist/commands/card-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/card-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/card-cmd.js +26 -0
- package/packages/cli/dist/commands/card-cmd.js.map +1 -0
- package/packages/cli/dist/commands/clip-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/clip-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/clip-cmd.js +151 -0
- package/packages/cli/dist/commands/clip-cmd.js.map +1 -0
- package/packages/cli/dist/commands/cloud-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/cloud-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/cloud-cmd.js +64 -0
- package/packages/cli/dist/commands/cloud-cmd.js.map +1 -0
- package/packages/cli/dist/commands/contradictions-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/contradictions-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/contradictions-cmd.js +34 -0
- package/packages/cli/dist/commands/contradictions-cmd.js.map +1 -0
- package/packages/cli/dist/commands/decay-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/decay-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/decay-cmd.js +48 -0
- package/packages/cli/dist/commands/decay-cmd.js.map +1 -0
- package/packages/cli/dist/commands/digest-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/digest-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/digest-cmd.js +79 -0
- package/packages/cli/dist/commands/digest-cmd.js.map +1 -0
- package/packages/cli/dist/commands/duplicates-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/duplicates-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/duplicates-cmd.js +30 -0
- package/packages/cli/dist/commands/duplicates-cmd.js.map +1 -0
- package/packages/cli/dist/commands/federate-cmd.d.ts +5 -0
- package/packages/cli/dist/commands/federate-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/federate-cmd.js +217 -0
- package/packages/cli/dist/commands/federate-cmd.js.map +1 -0
- package/packages/cli/dist/commands/gaps-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/gaps-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/gaps-cmd.js +33 -0
- package/packages/cli/dist/commands/gaps-cmd.js.map +1 -0
- package/packages/cli/dist/commands/graph-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/graph-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/graph-cmd.js +77 -0
- package/packages/cli/dist/commands/graph-cmd.js.map +1 -0
- package/packages/cli/dist/commands/index-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/index-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/index-cmd.js +57 -0
- package/packages/cli/dist/commands/index-cmd.js.map +1 -0
- package/packages/cli/dist/commands/init-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/init-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/init-cmd.js +123 -0
- package/packages/cli/dist/commands/init-cmd.js.map +1 -0
- package/packages/cli/dist/commands/learn-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/learn-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/learn-cmd.js +48 -0
- package/packages/cli/dist/commands/learn-cmd.js.map +1 -0
- package/packages/cli/dist/commands/pack-cmd.d.ts +15 -0
- package/packages/cli/dist/commands/pack-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/pack-cmd.js +93 -0
- package/packages/cli/dist/commands/pack-cmd.js.map +1 -0
- package/packages/cli/dist/commands/review-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/review-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/review-cmd.js +107 -0
- package/packages/cli/dist/commands/review-cmd.js.map +1 -0
- package/packages/cli/dist/commands/search-cmd.d.ts +4 -0
- package/packages/cli/dist/commands/search-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/search-cmd.js +38 -0
- package/packages/cli/dist/commands/search-cmd.js.map +1 -0
- package/packages/cli/dist/commands/serve-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/serve-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/serve-cmd.js +14 -0
- package/packages/cli/dist/commands/serve-cmd.js.map +1 -0
- package/packages/cli/dist/commands/status-cmd.d.ts +2 -0
- package/packages/cli/dist/commands/status-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/status-cmd.js +33 -0
- package/packages/cli/dist/commands/status-cmd.js.map +1 -0
- package/packages/cli/dist/commands/sync-cmd.d.ts +5 -0
- package/packages/cli/dist/commands/sync-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/sync-cmd.js +62 -0
- package/packages/cli/dist/commands/sync-cmd.js.map +1 -0
- package/packages/cli/dist/commands/vault-cmd.d.ts +10 -0
- package/packages/cli/dist/commands/vault-cmd.d.ts.map +1 -0
- package/packages/cli/dist/commands/vault-cmd.js +54 -0
- package/packages/cli/dist/commands/vault-cmd.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +156 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/package.json +24 -0
- package/packages/cli/src/commands/brief-cmd.ts +87 -0
- package/packages/cli/src/commands/capture-cmd.ts +34 -0
- package/packages/cli/src/commands/card-cmd.ts +29 -0
- package/packages/cli/src/commands/clip-cmd.ts +172 -0
- package/packages/cli/src/commands/cloud-cmd.ts +75 -0
- package/packages/cli/src/commands/contradictions-cmd.ts +41 -0
- package/packages/cli/src/commands/decay-cmd.ts +57 -0
- package/packages/cli/src/commands/digest-cmd.ts +89 -0
- package/packages/cli/src/commands/duplicates-cmd.ts +38 -0
- package/packages/cli/src/commands/federate-cmd.ts +236 -0
- package/packages/cli/src/commands/gaps-cmd.ts +40 -0
- package/packages/cli/src/commands/graph-cmd.ts +88 -0
- package/packages/cli/src/commands/index-cmd.ts +65 -0
- package/packages/cli/src/commands/init-cmd.ts +145 -0
- package/packages/cli/src/commands/learn-cmd.ts +56 -0
- package/packages/cli/src/commands/pack-cmd.ts +121 -0
- package/packages/cli/src/commands/review-cmd.ts +125 -0
- package/packages/cli/src/commands/search-cmd.ts +45 -0
- package/packages/cli/src/commands/serve-cmd.ts +17 -0
- package/packages/cli/src/commands/status-cmd.ts +37 -0
- package/packages/cli/src/commands/sync-cmd.ts +68 -0
- package/packages/cli/src/commands/vault-cmd.ts +64 -0
- package/packages/cli/src/index.ts +187 -0
- package/packages/core/package.json +40 -0
- package/packages/core/src/api/dashboard.ts +138 -0
- package/packages/core/src/api/graph-data.ts +286 -0
- package/packages/core/src/api/pwa.ts +82 -0
- package/packages/core/src/api/server.ts +660 -0
- package/packages/core/src/capture/voice.ts +168 -0
- package/packages/core/src/cloud/index.ts +2 -0
- package/packages/core/src/cloud/sync.ts +167 -0
- package/packages/core/src/config.ts +82 -0
- package/packages/core/src/federation/credits.ts +80 -0
- package/packages/core/src/federation/hyperswarm.d.ts +19 -0
- package/packages/core/src/federation/identity.ts +90 -0
- package/packages/core/src/federation/index.ts +8 -0
- package/packages/core/src/federation/node.ts +235 -0
- package/packages/core/src/federation/privacy.ts +52 -0
- package/packages/core/src/federation/reputation.ts +202 -0
- package/packages/core/src/federation/search.ts +129 -0
- package/packages/core/src/federation/sharing.ts +165 -0
- package/packages/core/src/federation/trust.ts +76 -0
- package/packages/core/src/federation/types.ts +25 -0
- package/packages/core/src/i18n/index.ts +85 -0
- package/packages/core/src/index.ts +133 -0
- package/packages/core/src/indexer/chunker.ts +180 -0
- package/packages/core/src/indexer/embedder.ts +9 -0
- package/packages/core/src/indexer/index.ts +113 -0
- package/packages/core/src/indexer/local-embedder.ts +35 -0
- package/packages/core/src/indexer/scanner.ts +142 -0
- package/packages/core/src/indexer/watcher.ts +62 -0
- package/packages/core/src/intelligence/contradiction-detector.ts +134 -0
- package/packages/core/src/intelligence/decay-engine.ts +229 -0
- package/packages/core/src/intelligence/duplicate-detector.ts +71 -0
- package/packages/core/src/intelligence/fsrs.ts +79 -0
- package/packages/core/src/intelligence/gap-detector.ts +109 -0
- package/packages/core/src/intelligence/learning-path.ts +86 -0
- package/packages/core/src/intelligence/notifications.ts +106 -0
- package/packages/core/src/intelligence/predictive-gaps.ts +94 -0
- package/packages/core/src/intelligence/semantic-versioning.ts +97 -0
- package/packages/core/src/intelligence/types.ts +28 -0
- package/packages/core/src/mcp/custom-tools.ts +97 -0
- package/packages/core/src/mcp/index.ts +1 -0
- package/packages/core/src/mcp/server.ts +142 -0
- package/packages/core/src/mcp/tools/agentic-graph.ts +96 -0
- package/packages/core/src/mcp/tools/brief.ts +49 -0
- package/packages/core/src/mcp/tools/decay.ts +40 -0
- package/packages/core/src/mcp/tools/decision-journal.ts +95 -0
- package/packages/core/src/mcp/tools/export.ts +72 -0
- package/packages/core/src/mcp/tools/federated-search.ts +43 -0
- package/packages/core/src/mcp/tools/generate-claude-md.ts +130 -0
- package/packages/core/src/mcp/tools/get-document.ts +26 -0
- package/packages/core/src/mcp/tools/get-related.ts +41 -0
- package/packages/core/src/mcp/tools/learning-path.ts +52 -0
- package/packages/core/src/mcp/tools/list-topics.ts +20 -0
- package/packages/core/src/mcp/tools/search.ts +35 -0
- package/packages/core/src/mcp/tools/snapshot.ts +98 -0
- package/packages/core/src/multi-vault/index.ts +118 -0
- package/packages/core/src/pack/creator.ts +127 -0
- package/packages/core/src/pack/exporter.ts +21 -0
- package/packages/core/src/pack/importer.ts +82 -0
- package/packages/core/src/pack/index.ts +5 -0
- package/packages/core/src/pack/marketplace.ts +103 -0
- package/packages/core/src/pack/pii-masker.ts +38 -0
- package/packages/core/src/pack/types.ts +39 -0
- package/packages/core/src/plugins/index.ts +100 -0
- package/packages/core/src/plugins/webhooks.ts +110 -0
- package/packages/core/src/search/bm25.ts +16 -0
- package/packages/core/src/search/index.ts +83 -0
- package/packages/core/src/search/rrf.ts +31 -0
- package/packages/core/src/search/semantic.ts +15 -0
- package/packages/core/src/store/index.ts +2 -0
- package/packages/core/src/store/sqlite-vec.ts +290 -0
- package/packages/core/src/store/types.ts +22 -0
- package/packages/core/src/team/index.ts +126 -0
- package/packages/core/src/types/chunk.ts +25 -0
- package/packages/core/src/types/document.ts +24 -0
- package/packages/core/src/types/graph.ts +44 -0
- package/packages/core/src/types/index.ts +15 -0
- package/packages/core/src/types/search.ts +38 -0
- package/packages/core/src/utils/retry.ts +85 -0
- package/packages/core/tests/api-card.test.ts +60 -0
- package/packages/core/tests/api-routes.test.ts +98 -0
- package/packages/core/tests/bm25.test.ts +87 -0
- package/packages/core/tests/chunker.test.ts +48 -0
- package/packages/core/tests/cluster.test.ts +75 -0
- package/packages/core/tests/constellation.test.ts +77 -0
- package/packages/core/tests/export-utils.test.ts +97 -0
- package/packages/core/tests/fsrs.test.ts +96 -0
- package/packages/core/tests/gesture-detector.test.ts +45 -0
- package/packages/core/tests/graph-data.test.ts +87 -0
- package/packages/core/tests/layout.test.ts +83 -0
- package/packages/core/tests/mcp.test.ts +148 -0
- package/packages/core/tests/pack.test.ts +127 -0
- package/packages/core/tests/pii-masker.test.ts +42 -0
- package/packages/core/tests/profile-card.test.ts +62 -0
- package/packages/core/tests/rrf.test.ts +29 -0
- package/packages/core/tests/search-integration.test.ts +139 -0
- package/packages/core/tests/store.test.ts +80 -0
- package/packages/graph/click-result.png +0 -0
- package/packages/graph/index.html +17 -0
- package/packages/graph/package.json +32 -0
- package/packages/graph/src/App.tsx +7 -0
- package/packages/graph/src/api/client.ts +39 -0
- package/packages/graph/src/components/ClusterFilter.tsx +73 -0
- package/packages/graph/src/components/ConstellationView.tsx +232 -0
- package/packages/graph/src/components/ExportPanel.tsx +177 -0
- package/packages/graph/src/components/Graph3D.tsx +230 -0
- package/packages/graph/src/components/GraphEdges.tsx +100 -0
- package/packages/graph/src/components/GraphNodes.tsx +386 -0
- package/packages/graph/src/components/HealthDashboard.tsx +173 -0
- package/packages/graph/src/components/Layout.tsx +214 -0
- package/packages/graph/src/components/MotionOverlay.tsx +81 -0
- package/packages/graph/src/components/MotionToggle.tsx +33 -0
- package/packages/graph/src/components/MultiverseView.tsx +286 -0
- package/packages/graph/src/components/NodeDetail.tsx +232 -0
- package/packages/graph/src/components/PulseParticle.tsx +232 -0
- package/packages/graph/src/components/SearchBar.tsx +107 -0
- package/packages/graph/src/components/StarField.tsx +197 -0
- package/packages/graph/src/components/StatusBar.tsx +53 -0
- package/packages/graph/src/components/Timeline.tsx +148 -0
- package/packages/graph/src/components/ToolsPanel.tsx +512 -0
- package/packages/graph/src/components/Tooltip.tsx +100 -0
- package/packages/graph/src/components/TypeFilter.tsx +131 -0
- package/packages/graph/src/embed/EmbedGraph.tsx +144 -0
- package/packages/graph/src/hooks/useConstellationLOD.ts +76 -0
- package/packages/graph/src/hooks/useDecay.ts +37 -0
- package/packages/graph/src/hooks/useExport.ts +165 -0
- package/packages/graph/src/hooks/useGraph.ts +69 -0
- package/packages/graph/src/hooks/useKeyboardNav.ts +122 -0
- package/packages/graph/src/hooks/useLayout.ts +45 -0
- package/packages/graph/src/hooks/useMotion.ts +120 -0
- package/packages/graph/src/hooks/usePulse.ts +58 -0
- package/packages/graph/src/hooks/useSearch.ts +71 -0
- package/packages/graph/src/lib/constellation.ts +107 -0
- package/packages/graph/src/lib/export-utils.ts +48 -0
- package/packages/graph/src/lib/gesture-detector.ts +123 -0
- package/packages/graph/src/lib/layout.worker.ts +153 -0
- package/packages/graph/src/lib/motion-controller.ts +83 -0
- package/packages/graph/src/lib/profile-card.ts +122 -0
- package/packages/graph/src/main.tsx +4 -0
- package/packages/graph/src/stores/graph-store.ts +155 -0
- package/packages/graph/success.png +0 -0
- package/packages/graph/test-click.mjs +49 -0
- package/packages/graph/test-explore.mjs +102 -0
- package/packages/graph/test-final.mjs +61 -0
- package/packages/graph/test-graph.mjs +139 -0
- package/packages/graph/test-hover.mjs +48 -0
- package/packages/graph/test-pulse.mjs +68 -0
- package/packages/graph/test-screenshot.mjs +56 -0
- package/packages/graph/test-v2.mjs +97 -0
- package/packages/graph/vite.config.ts +15 -0
- package/packages/sync/.env.example +11 -0
- package/packages/sync/.sync-state.json +317 -0
- package/packages/sync/.upload-state.json +1009 -0
- package/packages/sync/create-stella-network-notion.mjs +151 -0
- package/packages/sync/create-stellavault-project-notion.mjs +322 -0
- package/packages/sync/logs/sync-2026-03-28.log +6 -0
- package/packages/sync/logs/sync-2026-03-29.log +12 -0
- package/packages/sync/logs/sync-2026-03-30.log +6 -0
- package/packages/sync/logs/sync-2026-03-31.log +6 -0
- package/packages/sync/logs/sync-2026-04-01.log +6 -0
- package/packages/sync/logs/sync-2026-04-02.log +6 -0
- package/packages/sync/package-lock.json +373 -0
- package/packages/sync/package.json +16 -0
- package/packages/sync/run-sync.bat +18 -0
- package/packages/sync/run-sync.mjs +46 -0
- package/packages/sync/setup-scheduler.mjs +119 -0
- package/packages/sync/structured-sync.mjs +187 -0
- package/packages/sync/sync-to-obsidian.mjs +264 -0
- package/packages/sync/upload-pdca-to-notion.mjs +495 -0
- 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() ν¨μ μ¬μ© κΆμ₯
|
package/CONTRIBUTING.md
ADDED
|
@@ -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)
|
package/memory/MEMORY.md
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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(` `));
|
|
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 @@
|
|
|
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"}
|