stellavault 0.4.4 → 0.5.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 (265) hide show
  1. package/README.md +52 -16
  2. package/SECURITY.md +50 -0
  3. package/dist/stellavault.js +8968 -0
  4. package/package.json +70 -33
  5. package/.env.example +0 -12
  6. package/CHANGELOG.md +0 -106
  7. package/CLAUDE.md +0 -42
  8. package/CONTRIBUTING.md +0 -65
  9. package/index.html +0 -509
  10. package/packages/cli/bin/ekh.js +0 -2
  11. package/packages/cli/bin/stellavault.js +0 -2
  12. package/packages/cli/dist/commands/adr-cmd.d.ts +0 -7
  13. package/packages/cli/dist/commands/adr-cmd.js +0 -45
  14. package/packages/cli/dist/commands/ask-cmd.d.ts +0 -5
  15. package/packages/cli/dist/commands/ask-cmd.js +0 -36
  16. package/packages/cli/dist/commands/autopilot-cmd.d.ts +0 -4
  17. package/packages/cli/dist/commands/autopilot-cmd.js +0 -76
  18. package/packages/cli/dist/commands/brief-cmd.d.ts +0 -2
  19. package/packages/cli/dist/commands/brief-cmd.js +0 -82
  20. package/packages/cli/dist/commands/capture-cmd.d.ts +0 -7
  21. package/packages/cli/dist/commands/capture-cmd.js +0 -31
  22. package/packages/cli/dist/commands/card-cmd.d.ts +0 -4
  23. package/packages/cli/dist/commands/card-cmd.js +0 -26
  24. package/packages/cli/dist/commands/clip-cmd.d.ts +0 -4
  25. package/packages/cli/dist/commands/clip-cmd.js +0 -151
  26. package/packages/cli/dist/commands/cloud-cmd.d.ts +0 -4
  27. package/packages/cli/dist/commands/cloud-cmd.js +0 -64
  28. package/packages/cli/dist/commands/compile-cmd.d.ts +0 -6
  29. package/packages/cli/dist/commands/compile-cmd.js +0 -30
  30. package/packages/cli/dist/commands/contradictions-cmd.d.ts +0 -2
  31. package/packages/cli/dist/commands/contradictions-cmd.js +0 -34
  32. package/packages/cli/dist/commands/decay-cmd.d.ts +0 -2
  33. package/packages/cli/dist/commands/decay-cmd.js +0 -48
  34. package/packages/cli/dist/commands/digest-cmd.d.ts +0 -5
  35. package/packages/cli/dist/commands/digest-cmd.js +0 -136
  36. package/packages/cli/dist/commands/draft-cmd.d.ts +0 -6
  37. package/packages/cli/dist/commands/draft-cmd.js +0 -110
  38. package/packages/cli/dist/commands/duplicates-cmd.d.ts +0 -4
  39. package/packages/cli/dist/commands/duplicates-cmd.js +0 -30
  40. package/packages/cli/dist/commands/federate-cmd.d.ts +0 -5
  41. package/packages/cli/dist/commands/federate-cmd.js +0 -247
  42. package/packages/cli/dist/commands/fleeting-cmd.d.ts +0 -4
  43. package/packages/cli/dist/commands/fleeting-cmd.js +0 -45
  44. package/packages/cli/dist/commands/flush-cmd.d.ts +0 -2
  45. package/packages/cli/dist/commands/flush-cmd.js +0 -58
  46. package/packages/cli/dist/commands/gaps-cmd.d.ts +0 -2
  47. package/packages/cli/dist/commands/gaps-cmd.js +0 -33
  48. package/packages/cli/dist/commands/graph-cmd.d.ts +0 -2
  49. package/packages/cli/dist/commands/graph-cmd.js +0 -89
  50. package/packages/cli/dist/commands/index-cmd.d.ts +0 -2
  51. package/packages/cli/dist/commands/index-cmd.js +0 -57
  52. package/packages/cli/dist/commands/ingest-cmd.d.ts +0 -9
  53. package/packages/cli/dist/commands/ingest-cmd.js +0 -195
  54. package/packages/cli/dist/commands/init-cmd.d.ts +0 -2
  55. package/packages/cli/dist/commands/init-cmd.js +0 -161
  56. package/packages/cli/dist/commands/learn-cmd.d.ts +0 -2
  57. package/packages/cli/dist/commands/learn-cmd.js +0 -48
  58. package/packages/cli/dist/commands/lint-cmd.d.ts +0 -2
  59. package/packages/cli/dist/commands/lint-cmd.js +0 -61
  60. package/packages/cli/dist/commands/pack-cmd.d.ts +0 -15
  61. package/packages/cli/dist/commands/pack-cmd.js +0 -93
  62. package/packages/cli/dist/commands/review-cmd.d.ts +0 -4
  63. package/packages/cli/dist/commands/review-cmd.js +0 -107
  64. package/packages/cli/dist/commands/search-cmd.d.ts +0 -4
  65. package/packages/cli/dist/commands/search-cmd.js +0 -38
  66. package/packages/cli/dist/commands/serve-cmd.d.ts +0 -2
  67. package/packages/cli/dist/commands/serve-cmd.js +0 -14
  68. package/packages/cli/dist/commands/session-cmd.d.ts +0 -7
  69. package/packages/cli/dist/commands/session-cmd.js +0 -95
  70. package/packages/cli/dist/commands/status-cmd.d.ts +0 -2
  71. package/packages/cli/dist/commands/status-cmd.js +0 -33
  72. package/packages/cli/dist/commands/sync-cmd.d.ts +0 -5
  73. package/packages/cli/dist/commands/sync-cmd.js +0 -62
  74. package/packages/cli/dist/commands/vault-cmd.d.ts +0 -10
  75. package/packages/cli/dist/commands/vault-cmd.js +0 -54
  76. package/packages/cli/dist/index.d.ts +0 -2
  77. package/packages/cli/dist/index.js +0 -233
  78. package/packages/cli/package.json +0 -24
  79. package/packages/core/dist/api/dashboard.d.ts +0 -3
  80. package/packages/core/dist/api/dashboard.js +0 -135
  81. package/packages/core/dist/api/graph-data.d.ts +0 -11
  82. package/packages/core/dist/api/graph-data.js +0 -255
  83. package/packages/core/dist/api/pwa.d.ts +0 -3
  84. package/packages/core/dist/api/pwa.js +0 -77
  85. package/packages/core/dist/api/server.d.ts +0 -16
  86. package/packages/core/dist/api/server.js +0 -1122
  87. package/packages/core/dist/capture/voice.d.ts +0 -24
  88. package/packages/core/dist/capture/voice.js +0 -135
  89. package/packages/core/dist/cloud/index.d.ts +0 -3
  90. package/packages/core/dist/cloud/index.js +0 -2
  91. package/packages/core/dist/cloud/sync.d.ts +0 -29
  92. package/packages/core/dist/cloud/sync.js +0 -137
  93. package/packages/core/dist/config.d.ts +0 -35
  94. package/packages/core/dist/config.js +0 -63
  95. package/packages/core/dist/federation/credits.d.ts +0 -26
  96. package/packages/core/dist/federation/credits.js +0 -56
  97. package/packages/core/dist/federation/identity.d.ts +0 -14
  98. package/packages/core/dist/federation/identity.js +0 -74
  99. package/packages/core/dist/federation/index.d.ts +0 -7
  100. package/packages/core/dist/federation/index.js +0 -5
  101. package/packages/core/dist/federation/node.d.ts +0 -31
  102. package/packages/core/dist/federation/node.js +0 -216
  103. package/packages/core/dist/federation/privacy.d.ts +0 -8
  104. package/packages/core/dist/federation/privacy.js +0 -40
  105. package/packages/core/dist/federation/reputation.d.ts +0 -37
  106. package/packages/core/dist/federation/reputation.js +0 -139
  107. package/packages/core/dist/federation/search.d.ts +0 -19
  108. package/packages/core/dist/federation/search.js +0 -101
  109. package/packages/core/dist/federation/sharing.d.ts +0 -72
  110. package/packages/core/dist/federation/sharing.js +0 -246
  111. package/packages/core/dist/federation/trust.d.ts +0 -15
  112. package/packages/core/dist/federation/trust.js +0 -60
  113. package/packages/core/dist/federation/types.d.ts +0 -40
  114. package/packages/core/dist/federation/types.js +0 -3
  115. package/packages/core/dist/i18n/index.d.ts +0 -6
  116. package/packages/core/dist/i18n/index.js +0 -81
  117. package/packages/core/dist/i18n/note-strings.d.ts +0 -5
  118. package/packages/core/dist/i18n/note-strings.js +0 -94
  119. package/packages/core/dist/index.d.ts +0 -123
  120. package/packages/core/dist/index.js +0 -74
  121. package/packages/core/dist/indexer/chunker.d.ts +0 -14
  122. package/packages/core/dist/indexer/chunker.js +0 -148
  123. package/packages/core/dist/indexer/embedder.d.ts +0 -8
  124. package/packages/core/dist/indexer/embedder.js +0 -3
  125. package/packages/core/dist/indexer/index.d.ts +0 -28
  126. package/packages/core/dist/indexer/index.js +0 -74
  127. package/packages/core/dist/indexer/local-embedder.d.ts +0 -3
  128. package/packages/core/dist/indexer/local-embedder.js +0 -29
  129. package/packages/core/dist/indexer/scanner.d.ts +0 -11
  130. package/packages/core/dist/indexer/scanner.js +0 -148
  131. package/packages/core/dist/indexer/watcher.d.ts +0 -19
  132. package/packages/core/dist/indexer/watcher.js +0 -49
  133. package/packages/core/dist/intelligence/ask-engine.d.ts +0 -24
  134. package/packages/core/dist/intelligence/ask-engine.js +0 -142
  135. package/packages/core/dist/intelligence/auto-linker.d.ts +0 -19
  136. package/packages/core/dist/intelligence/auto-linker.js +0 -126
  137. package/packages/core/dist/intelligence/code-linker.d.ts +0 -20
  138. package/packages/core/dist/intelligence/code-linker.js +0 -88
  139. package/packages/core/dist/intelligence/contradiction-detector.d.ts +0 -20
  140. package/packages/core/dist/intelligence/contradiction-detector.js +0 -115
  141. package/packages/core/dist/intelligence/decay-engine.d.ts +0 -27
  142. package/packages/core/dist/intelligence/decay-engine.js +0 -190
  143. package/packages/core/dist/intelligence/draft-generator.d.ts +0 -25
  144. package/packages/core/dist/intelligence/draft-generator.js +0 -277
  145. package/packages/core/dist/intelligence/duplicate-detector.d.ts +0 -20
  146. package/packages/core/dist/intelligence/duplicate-detector.js +0 -55
  147. package/packages/core/dist/intelligence/file-extractors.d.ts +0 -13
  148. package/packages/core/dist/intelligence/file-extractors.js +0 -155
  149. package/packages/core/dist/intelligence/fsrs.d.ts +0 -43
  150. package/packages/core/dist/intelligence/fsrs.js +0 -70
  151. package/packages/core/dist/intelligence/gap-detector.d.ts +0 -25
  152. package/packages/core/dist/intelligence/gap-detector.js +0 -78
  153. package/packages/core/dist/intelligence/ingest-pipeline.d.ts +0 -32
  154. package/packages/core/dist/intelligence/ingest-pipeline.js +0 -245
  155. package/packages/core/dist/intelligence/knowledge-lint.d.ts +0 -27
  156. package/packages/core/dist/intelligence/knowledge-lint.js +0 -132
  157. package/packages/core/dist/intelligence/learning-path.d.ts +0 -31
  158. package/packages/core/dist/intelligence/learning-path.js +0 -53
  159. package/packages/core/dist/intelligence/notifications.d.ts +0 -31
  160. package/packages/core/dist/intelligence/notifications.js +0 -65
  161. package/packages/core/dist/intelligence/predictive-gaps.d.ts +0 -14
  162. package/packages/core/dist/intelligence/predictive-gaps.js +0 -74
  163. package/packages/core/dist/intelligence/semantic-versioning.d.ts +0 -37
  164. package/packages/core/dist/intelligence/semantic-versioning.js +0 -68
  165. package/packages/core/dist/intelligence/types.d.ts +0 -28
  166. package/packages/core/dist/intelligence/types.js +0 -3
  167. package/packages/core/dist/intelligence/wiki-compiler.d.ts +0 -30
  168. package/packages/core/dist/intelligence/wiki-compiler.js +0 -222
  169. package/packages/core/dist/intelligence/youtube-extractor.d.ts +0 -29
  170. package/packages/core/dist/intelligence/youtube-extractor.js +0 -321
  171. package/packages/core/dist/intelligence/zettelkasten.d.ts +0 -59
  172. package/packages/core/dist/intelligence/zettelkasten.js +0 -234
  173. package/packages/core/dist/mcp/custom-tools.d.ts +0 -29
  174. package/packages/core/dist/mcp/custom-tools.js +0 -70
  175. package/packages/core/dist/mcp/index.d.ts +0 -2
  176. package/packages/core/dist/mcp/index.js +0 -2
  177. package/packages/core/dist/mcp/server.d.ts +0 -51
  178. package/packages/core/dist/mcp/server.js +0 -174
  179. package/packages/core/dist/mcp/tools/agentic-graph.d.ts +0 -93
  180. package/packages/core/dist/mcp/tools/agentic-graph.js +0 -116
  181. package/packages/core/dist/mcp/tools/ask.d.ts +0 -29
  182. package/packages/core/dist/mcp/tools/ask.js +0 -43
  183. package/packages/core/dist/mcp/tools/brief.d.ts +0 -31
  184. package/packages/core/dist/mcp/tools/brief.js +0 -39
  185. package/packages/core/dist/mcp/tools/decay.d.ts +0 -33
  186. package/packages/core/dist/mcp/tools/decay.js +0 -32
  187. package/packages/core/dist/mcp/tools/decision-journal.d.ts +0 -78
  188. package/packages/core/dist/mcp/tools/decision-journal.js +0 -79
  189. package/packages/core/dist/mcp/tools/detect-gaps.d.ts +0 -24
  190. package/packages/core/dist/mcp/tools/detect-gaps.js +0 -47
  191. package/packages/core/dist/mcp/tools/export.d.ts +0 -29
  192. package/packages/core/dist/mcp/tools/export.js +0 -60
  193. package/packages/core/dist/mcp/tools/federated-search.d.ts +0 -29
  194. package/packages/core/dist/mcp/tools/federated-search.js +0 -36
  195. package/packages/core/dist/mcp/tools/generate-claude-md.d.ts +0 -35
  196. package/packages/core/dist/mcp/tools/generate-claude-md.js +0 -107
  197. package/packages/core/dist/mcp/tools/generate-draft.d.ts +0 -34
  198. package/packages/core/dist/mcp/tools/generate-draft.js +0 -120
  199. package/packages/core/dist/mcp/tools/get-document.d.ts +0 -35
  200. package/packages/core/dist/mcp/tools/get-document.js +0 -25
  201. package/packages/core/dist/mcp/tools/get-evolution.d.ts +0 -28
  202. package/packages/core/dist/mcp/tools/get-evolution.js +0 -70
  203. package/packages/core/dist/mcp/tools/get-related.d.ts +0 -32
  204. package/packages/core/dist/mcp/tools/get-related.js +0 -33
  205. package/packages/core/dist/mcp/tools/learning-path.d.ts +0 -23
  206. package/packages/core/dist/mcp/tools/learning-path.js +0 -45
  207. package/packages/core/dist/mcp/tools/link-code.d.ts +0 -34
  208. package/packages/core/dist/mcp/tools/link-code.js +0 -44
  209. package/packages/core/dist/mcp/tools/list-topics.d.ts +0 -15
  210. package/packages/core/dist/mcp/tools/list-topics.js +0 -18
  211. package/packages/core/dist/mcp/tools/search.d.ts +0 -39
  212. package/packages/core/dist/mcp/tools/search.js +0 -29
  213. package/packages/core/dist/mcp/tools/snapshot.d.ts +0 -47
  214. package/packages/core/dist/mcp/tools/snapshot.js +0 -84
  215. package/packages/core/dist/multi-vault/index.d.ts +0 -26
  216. package/packages/core/dist/multi-vault/index.js +0 -80
  217. package/packages/core/dist/pack/creator.d.ts +0 -21
  218. package/packages/core/dist/pack/creator.js +0 -105
  219. package/packages/core/dist/pack/exporter.d.ts +0 -4
  220. package/packages/core/dist/pack/exporter.js +0 -18
  221. package/packages/core/dist/pack/importer.d.ts +0 -10
  222. package/packages/core/dist/pack/importer.js +0 -55
  223. package/packages/core/dist/pack/index.d.ts +0 -6
  224. package/packages/core/dist/pack/index.js +0 -5
  225. package/packages/core/dist/pack/marketplace.d.ts +0 -14
  226. package/packages/core/dist/pack/marketplace.js +0 -90
  227. package/packages/core/dist/pack/pii-masker.d.ts +0 -7
  228. package/packages/core/dist/pack/pii-masker.js +0 -29
  229. package/packages/core/dist/pack/types.d.ts +0 -36
  230. package/packages/core/dist/pack/types.js +0 -3
  231. package/packages/core/dist/plugins/index.d.ts +0 -35
  232. package/packages/core/dist/plugins/index.js +0 -57
  233. package/packages/core/dist/plugins/webhooks.d.ts +0 -30
  234. package/packages/core/dist/plugins/webhooks.js +0 -79
  235. package/packages/core/dist/search/adaptive.d.ts +0 -16
  236. package/packages/core/dist/search/adaptive.js +0 -67
  237. package/packages/core/dist/search/bm25.d.ts +0 -4
  238. package/packages/core/dist/search/bm25.js +0 -10
  239. package/packages/core/dist/search/index.d.ts +0 -15
  240. package/packages/core/dist/search/index.js +0 -64
  241. package/packages/core/dist/search/rrf.d.ts +0 -7
  242. package/packages/core/dist/search/rrf.js +0 -21
  243. package/packages/core/dist/search/semantic.d.ts +0 -5
  244. package/packages/core/dist/search/semantic.js +0 -6
  245. package/packages/core/dist/store/index.d.ts +0 -3
  246. package/packages/core/dist/store/index.js +0 -2
  247. package/packages/core/dist/store/sqlite-vec.d.ts +0 -6
  248. package/packages/core/dist/store/sqlite-vec.js +0 -251
  249. package/packages/core/dist/store/types.d.ts +0 -20
  250. package/packages/core/dist/store/types.js +0 -3
  251. package/packages/core/dist/team/index.d.ts +0 -25
  252. package/packages/core/dist/team/index.js +0 -97
  253. package/packages/core/dist/types/chunk.d.ts +0 -23
  254. package/packages/core/dist/types/chunk.js +0 -3
  255. package/packages/core/dist/types/document.d.ts +0 -23
  256. package/packages/core/dist/types/document.js +0 -3
  257. package/packages/core/dist/types/graph.d.ts +0 -39
  258. package/packages/core/dist/types/graph.js +0 -3
  259. package/packages/core/dist/types/index.d.ts +0 -5
  260. package/packages/core/dist/types/index.js +0 -2
  261. package/packages/core/dist/types/search.d.ts +0 -39
  262. package/packages/core/dist/types/search.js +0 -3
  263. package/packages/core/dist/utils/retry.d.ts +0 -25
  264. package/packages/core/dist/utils/retry.js +0 -59
  265. package/packages/core/package.json +0 -67
@@ -1,37 +0,0 @@
1
- export interface SemanticVersion {
2
- documentId: string;
3
- timestamp: string;
4
- embeddingHash: string;
5
- drift: number;
6
- }
7
- export interface SemanticChangelog {
8
- documentId: string;
9
- title: string;
10
- versions: SemanticVersion[];
11
- totalDrift: number;
12
- stability: number;
13
- }
14
- /**
15
- * Compute semantic drift between two embedding vectors.
16
- * Returns cosine distance (0 = identical, 1 = orthogonal, 2 = opposite)
17
- */
18
- export declare function computeSemanticDrift(vecA: number[], vecB: number[]): number;
19
- /**
20
- * Hash an embedding vector for quick comparison
21
- */
22
- export declare function hashEmbedding(vec: number[]): string;
23
- /**
24
- * Analyze semantic stability of a document given its embedding history.
25
- * In practice, we compare current embedding vs initial embedding to measure total drift.
26
- */
27
- export declare function analyzeSemanticStability(currentVec: number[], title: string, documentId: string): SemanticChangelog;
28
- /**
29
- * Compare two sets of embeddings to find documents with the most semantic drift.
30
- * Useful for "what changed the most since last index?"
31
- */
32
- export declare function findMostDrifted(previousEmbeddings: Map<string, number[]>, currentEmbeddings: Map<string, number[]>, titles: Map<string, string>, limit?: number): Array<{
33
- documentId: string;
34
- title: string;
35
- drift: number;
36
- }>;
37
- //# sourceMappingURL=semantic-versioning.d.ts.map
@@ -1,68 +0,0 @@
1
- // Knowledge Semantic Versioning (F-A13)
2
- // Track how a note's MEANING changes over time via embedding drift
3
- /**
4
- * Compute semantic drift between two embedding vectors.
5
- * Returns cosine distance (0 = identical, 1 = orthogonal, 2 = opposite)
6
- */
7
- export function computeSemanticDrift(vecA, vecB) {
8
- if (vecA.length !== vecB.length || vecA.length === 0)
9
- return 0;
10
- let dot = 0, na = 0, nb = 0;
11
- for (let i = 0; i < vecA.length; i++) {
12
- dot += vecA[i] * vecB[i];
13
- na += vecA[i] * vecA[i];
14
- nb += vecB[i] * vecB[i];
15
- }
16
- const denom = Math.sqrt(na) * Math.sqrt(nb);
17
- const similarity = denom === 0 ? 0 : dot / denom;
18
- return 1 - similarity; // cosine distance
19
- }
20
- /**
21
- * Hash an embedding vector for quick comparison
22
- */
23
- export function hashEmbedding(vec) {
24
- let hash = 0;
25
- for (let i = 0; i < Math.min(vec.length, 50); i++) {
26
- hash = ((hash << 5) - hash + Math.round(vec[i] * 10000)) | 0;
27
- }
28
- return Math.abs(hash).toString(36).slice(0, 8);
29
- }
30
- /**
31
- * Analyze semantic stability of a document given its embedding history.
32
- * In practice, we compare current embedding vs initial embedding to measure total drift.
33
- */
34
- export function analyzeSemanticStability(currentVec, title, documentId) {
35
- // Single-point analysis (no history yet — foundation for future multi-version tracking)
36
- const now = new Date().toISOString();
37
- const hash = hashEmbedding(currentVec);
38
- return {
39
- documentId,
40
- title,
41
- versions: [{
42
- documentId,
43
- timestamp: now,
44
- embeddingHash: hash,
45
- drift: 0,
46
- }],
47
- totalDrift: 0,
48
- stability: 1.0,
49
- };
50
- }
51
- /**
52
- * Compare two sets of embeddings to find documents with the most semantic drift.
53
- * Useful for "what changed the most since last index?"
54
- */
55
- export function findMostDrifted(previousEmbeddings, currentEmbeddings, titles, limit = 10) {
56
- const drifts = [];
57
- for (const [docId, currentVec] of currentEmbeddings) {
58
- const prevVec = previousEmbeddings.get(docId);
59
- if (!prevVec)
60
- continue;
61
- const drift = computeSemanticDrift(prevVec, currentVec);
62
- if (drift > 0.01) { // ignore trivial changes
63
- drifts.push({ documentId: docId, title: titles.get(docId) ?? docId, drift: Math.round(drift * 1000) / 1000 });
64
- }
65
- }
66
- return drifts.sort((a, b) => b.drift - a.drift).slice(0, limit);
67
- }
68
- //# sourceMappingURL=semantic-versioning.js.map
@@ -1,28 +0,0 @@
1
- export interface DecayState {
2
- documentId: string;
3
- stability: number;
4
- difficulty: number;
5
- lastAccess: string;
6
- retrievability: number;
7
- }
8
- export interface AccessEvent {
9
- documentId: string;
10
- type: 'view' | 'search' | 'mcp_query';
11
- timestamp: string;
12
- }
13
- export interface DecayReport {
14
- totalDocuments: number;
15
- decayingCount: number;
16
- criticalCount: number;
17
- averageR: number;
18
- topDecaying: Array<DecayState & {
19
- title: string;
20
- daysSinceAccess: number;
21
- }>;
22
- clusterHealth: Array<{
23
- label: string;
24
- avgR: number;
25
- count: number;
26
- }>;
27
- }
28
- //# sourceMappingURL=types.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §2.2 — FSRS 감쇠 타입 정의
2
- export {};
3
- //# sourceMappingURL=types.js.map
@@ -1,30 +0,0 @@
1
- export interface CompileResult {
2
- rawDocCount: number;
3
- wikiArticles: string[];
4
- indexFile: string;
5
- concepts: string[];
6
- }
7
- export interface RawDocument {
8
- filePath: string;
9
- title: string;
10
- content: string;
11
- tags: string[];
12
- }
13
- /**
14
- * raw/ 폴더를 스캔하여 문서 목록 반환
15
- */
16
- export declare function scanRawDirectory(rawPath: string): RawDocument[];
17
- /**
18
- * raw 문서들에서 핵심 개념(concepts) 추출
19
- */
20
- export declare function extractConcepts(docs: RawDocument[]): Map<string, string[]>;
21
- /**
22
- * 컴파일: raw/ → wiki/
23
- * - 개념별 문서 생성
24
- * - 인덱스 파일 생성
25
- * - 백링크 추가
26
- */
27
- export declare function compileWiki(rawPath: string, wikiPath: string, options?: {
28
- force?: boolean;
29
- }): CompileResult;
30
- //# sourceMappingURL=wiki-compiler.d.ts.map
@@ -1,222 +0,0 @@
1
- // Feature: stellavault compile — raw → wiki 컴파일
2
- // raw/ 폴더의 문서를 분석하여 구조화된 wiki .md 파일 생성
3
- import { readdirSync, readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'node:fs';
4
- import { join, resolve, basename, extname } from 'node:path';
5
- /**
6
- * raw/ 폴더를 스캔하여 문서 목록 반환
7
- */
8
- export function scanRawDirectory(rawPath) {
9
- if (!existsSync(rawPath))
10
- return [];
11
- const docs = [];
12
- const files = readdirSync(rawPath, { recursive: true });
13
- for (const file of files) {
14
- const fullPath = join(rawPath, file);
15
- if (!statSync(fullPath).isFile())
16
- continue;
17
- const ext = extname(file).toLowerCase();
18
- if (!['.md', '.txt', '.html'].includes(ext))
19
- continue;
20
- const content = readFileSync(fullPath, 'utf-8');
21
- const title = extractTitle(content, file);
22
- const tags = extractTags(content);
23
- docs.push({ filePath: file, title, content, tags });
24
- }
25
- return docs;
26
- }
27
- /**
28
- * 문서에서 제목 추출
29
- */
30
- function extractTitle(content, filename) {
31
- // YAML frontmatter title
32
- const fmMatch = content.match(/^---[\s\S]*?title:\s*["']?(.+?)["']?\s*$/m);
33
- if (fmMatch)
34
- return fmMatch[1];
35
- // First heading
36
- const headingMatch = content.match(/^#\s+(.+)$/m);
37
- if (headingMatch)
38
- return headingMatch[1];
39
- // Filename
40
- return basename(filename, extname(filename));
41
- }
42
- /**
43
- * 문서에서 태그 추출
44
- */
45
- function extractTags(content) {
46
- const tags = new Set();
47
- // YAML tags
48
- const fmMatch = content.match(/^---[\s\S]*?tags:\s*\[([^\]]*)\]/m);
49
- if (fmMatch) {
50
- fmMatch[1].split(',').map(t => t.trim().replace(/["']/g, '')).filter(Boolean).forEach(t => tags.add(t));
51
- }
52
- // Inline #tags
53
- const inlineTags = content.match(/#([a-zA-Z가-힣][a-zA-Z0-9가-힣_-]*)/g) ?? [];
54
- inlineTags.forEach(t => tags.add(t.slice(1)));
55
- return [...tags];
56
- }
57
- /**
58
- * raw 문서들에서 핵심 개념(concepts) 추출
59
- */
60
- export function extractConcepts(docs) {
61
- const conceptMap = new Map(); // concept → [docPaths]
62
- for (const doc of docs) {
63
- // 태그를 개념으로
64
- for (const tag of doc.tags) {
65
- const existing = conceptMap.get(tag) ?? [];
66
- existing.push(doc.filePath);
67
- conceptMap.set(tag, existing);
68
- }
69
- // 제목 키워드를 개념으로
70
- const titleWords = doc.title
71
- .split(/[\s\-_,]+/)
72
- .filter(w => w.length > 3)
73
- .map(w => w.toLowerCase());
74
- for (const word of titleWords) {
75
- const existing = conceptMap.get(word) ?? [];
76
- existing.push(doc.filePath);
77
- conceptMap.set(word, existing);
78
- }
79
- }
80
- // 2개 이상 문서에서 등장하는 개념만
81
- const filtered = new Map();
82
- for (const [concept, docPaths] of conceptMap) {
83
- if (docPaths.length >= 2) {
84
- filtered.set(concept, [...new Set(docPaths)]);
85
- }
86
- }
87
- return filtered;
88
- }
89
- /**
90
- * 컴파일: raw/ → wiki/
91
- * - 개념별 문서 생성
92
- * - 인덱스 파일 생성
93
- * - 백링크 추가
94
- */
95
- export function compileWiki(rawPath, wikiPath, options = {}) {
96
- const docs = scanRawDirectory(rawPath);
97
- if (docs.length === 0) {
98
- return { rawDocCount: 0, wikiArticles: [], indexFile: '', concepts: [] };
99
- }
100
- // wiki 디렉토리 생성
101
- if (!existsSync(wikiPath)) {
102
- mkdirSync(wikiPath, { recursive: true });
103
- }
104
- const concepts = extractConcepts(docs);
105
- const wikiArticles = [];
106
- // 1. 각 raw 문서의 요약 문서 생성
107
- for (const doc of docs) {
108
- const slug = doc.title.replace(/[^a-zA-Z0-9가-힣\s]/g, '').replace(/\s+/g, '-').toLowerCase();
109
- const wikiFile = `${slug}.md`;
110
- const wikiFullPath = resolve(wikiPath, wikiFile);
111
- // path traversal 방지
112
- if (!wikiFullPath.startsWith(resolve(wikiPath)))
113
- continue;
114
- const relatedDocs = findRelatedDocs(doc, docs);
115
- const articleContent = generateArticle(doc, relatedDocs, concepts);
116
- writeFileSync(wikiFullPath, articleContent, 'utf-8');
117
- wikiArticles.push(wikiFile);
118
- }
119
- // 2. 개념별 허브 문서 생성
120
- for (const [concept, docPaths] of concepts) {
121
- const slug = concept.replace(/[^a-zA-Z0-9가-힣]/g, '-').toLowerCase();
122
- const hubFile = `_concept-${slug}.md`;
123
- const hubFullPath = resolve(wikiPath, hubFile);
124
- if (!hubFullPath.startsWith(resolve(wikiPath)))
125
- continue;
126
- const relatedArticles = docPaths.map(p => {
127
- const doc = docs.find(d => d.filePath === p);
128
- return doc?.title ?? p;
129
- });
130
- const hubContent = [
131
- '---',
132
- `title: "Concept: ${concept}"`,
133
- 'type: concept',
134
- `date: ${new Date().toISOString()}`,
135
- '---',
136
- '',
137
- `# ${concept}`,
138
- '',
139
- `This concept appears in ${relatedArticles.length} documents.`,
140
- '',
141
- '## Related Documents',
142
- ...relatedArticles.map(a => `- [[${a}]]`),
143
- '',
144
- '---',
145
- '*Auto-generated by `stellavault compile`*',
146
- ].join('\n');
147
- writeFileSync(hubFullPath, hubContent, 'utf-8');
148
- wikiArticles.push(hubFile);
149
- }
150
- // 3. 인덱스 파일 생성
151
- const indexContent = generateIndex(docs, concepts, wikiArticles);
152
- const indexPath = resolve(wikiPath, '_index.md');
153
- writeFileSync(indexPath, indexContent, 'utf-8');
154
- return {
155
- rawDocCount: docs.length,
156
- wikiArticles,
157
- indexFile: '_index.md',
158
- concepts: [...concepts.keys()],
159
- };
160
- }
161
- function findRelatedDocs(doc, allDocs) {
162
- return allDocs
163
- .filter(d => d.filePath !== doc.filePath)
164
- .filter(d => {
165
- const sharedTags = doc.tags.filter(t => d.tags.includes(t));
166
- return sharedTags.length > 0;
167
- })
168
- .slice(0, 5);
169
- }
170
- function generateArticle(doc, related, concepts) {
171
- const docConcepts = [...concepts.keys()].filter(c => doc.content.toLowerCase().includes(c.toLowerCase()) || doc.tags.includes(c));
172
- return [
173
- '---',
174
- `title: "${doc.title}"`,
175
- `source: "${doc.filePath}"`,
176
- `date: ${new Date().toISOString()}`,
177
- `tags: [${doc.tags.map(t => `"${t}"`).join(', ')}]`,
178
- 'type: wiki-article',
179
- '---',
180
- '',
181
- `# ${doc.title}`,
182
- '',
183
- '## Summary',
184
- doc.content.substring(0, 500).replace(/^#.+$/gm, '').trim() + '...',
185
- '',
186
- docConcepts.length > 0 ? `## Related Concepts\n${docConcepts.map(c => `- [[_concept-${c}|${c}]]`).join('\n')}` : '',
187
- '',
188
- related.length > 0 ? `## 관련 문서\n${related.map(r => `- [[${r.title}]]`).join('\n')}` : '',
189
- '',
190
- `## Source`,
191
- `- Source: \`${doc.filePath}\``,
192
- '',
193
- '---',
194
- '*Compiled by `stellavault compile`*',
195
- ].filter(Boolean).join('\n');
196
- }
197
- function generateIndex(docs, concepts, articles) {
198
- return [
199
- '---',
200
- 'title: "Wiki Index"',
201
- `date: ${new Date().toISOString()}`,
202
- 'type: wiki-index',
203
- '---',
204
- '',
205
- '# Wiki Index',
206
- '',
207
- `Compiled ${articles.length} wiki articles from ${docs.length} source documents.`,
208
- '',
209
- '## Concepts',
210
- ...[...concepts.entries()]
211
- .sort((a, b) => b[1].length - a[1].length)
212
- .map(([c, paths]) => `- [[_concept-${c}|${c}]] (${paths.length})`),
213
- '',
214
- '## Articles',
215
- ...docs.map(d => `- [[${d.title}]] — ${d.tags.map(t => `#${t}`).join(' ')}`),
216
- '',
217
- '---',
218
- `*Last compiled: ${new Date().toISOString()}*`,
219
- '*Generated by `stellavault compile`*',
220
- ].join('\n');
221
- }
222
- //# sourceMappingURL=wiki-compiler.js.map
@@ -1,29 +0,0 @@
1
- export interface YouTubeContent {
2
- title: string;
3
- channelName: string;
4
- description: string;
5
- transcript: TimedSegment[];
6
- rawTranscript: string;
7
- duration: string;
8
- publishDate: string;
9
- tags: string[];
10
- url: string;
11
- videoId: string;
12
- viewCount: string;
13
- thumbnail: string;
14
- summary: string;
15
- }
16
- export interface TimedSegment {
17
- startTime: number;
18
- text: string;
19
- }
20
- /**
21
- * YouTube URL에서 모든 콘텐츠 추출.
22
- * 반환값은 데이터만 — 노트 포맷팅은 별도.
23
- */
24
- export declare function extractYouTubeContent(url: string): Promise<YouTubeContent>;
25
- /**
26
- * 추출된 콘텐츠 → Stellavault .md 노트 (frontmatter 포함하지 않음 — pipeline이 처리).
27
- */
28
- export declare function formatYouTubeNote(content: YouTubeContent): string;
29
- //# sourceMappingURL=youtube-extractor.d.ts.map