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,20 +0,0 @@
1
- import type { Chunk, ScoredChunk, Document, TopicInfo, StoreStats } from '../types/index.js';
2
- export interface VectorStore {
3
- initialize(): Promise<void>;
4
- upsertDocument(doc: Document): Promise<void>;
5
- upsertChunks(chunks: Chunk[]): Promise<void>;
6
- deleteByDocumentId(documentId: string): Promise<void>;
7
- searchSemantic(embedding: number[], limit: number): Promise<ScoredChunk[]>;
8
- searchKeyword(query: string, limit: number): Promise<ScoredChunk[]>;
9
- getDocument(documentId: string): Promise<Document | null>;
10
- getChunk(chunkId: string): Promise<Chunk | null>;
11
- getAllDocuments(): Promise<Document[]>;
12
- getTopics(): Promise<TopicInfo[]>;
13
- getStats(): Promise<StoreStats>;
14
- /** 각 문서의 첫 청크 임베딩 반환 (graph용) */
15
- getDocumentEmbeddings(): Promise<Map<string, number[]>>;
16
- close(): Promise<void>;
17
- /** 내부 DB 인스턴스 접근 (Intelligence Layer용) */
18
- getDb(): unknown;
19
- }
20
- //# sourceMappingURL=types.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §3.2 — 교체 가능 설계 (VectorStore 인터페이스)
2
- export {};
3
- //# sourceMappingURL=types.js.map
@@ -1,25 +0,0 @@
1
- export type TeamRole = 'admin' | 'editor' | 'viewer';
2
- export interface TeamMember {
3
- token: string;
4
- tokenHash: string;
5
- displayName: string;
6
- role: TeamRole;
7
- createdAt: string;
8
- lastAccess?: string;
9
- }
10
- export interface TeamConfig {
11
- teamName: string;
12
- members: TeamMember[];
13
- }
14
- export declare function loadTeamConfig(): TeamConfig;
15
- export declare function generateToken(): string;
16
- export declare function inviteMember(displayName: string, role?: TeamRole): {
17
- token: string;
18
- member: TeamMember;
19
- };
20
- export declare function authenticateMember(token: string): TeamMember | null;
21
- export declare function hasPermission(member: TeamMember, action: 'read' | 'write' | 'admin'): boolean;
22
- export declare function listMembers(): TeamMember[];
23
- export declare function removeMember(displayName: string): boolean;
24
- export declare function createAuthMiddleware(): (req: any, res: any, next: any) => any;
25
- //# sourceMappingURL=index.d.ts.map
@@ -1,97 +0,0 @@
1
- // Team Vault (F-A06) — Bearer 토큰 인증 + RBAC
2
- // MCP Streamable HTTP에 인증 레이어 추가
3
- import { randomBytes, createHash } from 'node:crypto';
4
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
5
- import { join } from 'node:path';
6
- import { homedir } from 'node:os';
7
- const TEAM_DIR = join(homedir(), '.stellavault', 'team');
8
- const TEAM_FILE = join(TEAM_DIR, 'team.json');
9
- export function loadTeamConfig() {
10
- if (existsSync(TEAM_FILE)) {
11
- return JSON.parse(readFileSync(TEAM_FILE, 'utf-8'));
12
- }
13
- return { teamName: 'My Team', members: [] };
14
- }
15
- function saveTeamConfig(config) {
16
- mkdirSync(TEAM_DIR, { recursive: true });
17
- writeFileSync(TEAM_FILE, JSON.stringify(config, null, 2), 'utf-8');
18
- }
19
- // 토큰 생성
20
- export function generateToken() {
21
- return `sv_${randomBytes(24).toString('hex')}`;
22
- }
23
- function hashToken(token) {
24
- return createHash('sha256').update(token).digest('hex');
25
- }
26
- // 멤버 초대 → 토큰 반환
27
- export function inviteMember(displayName, role = 'viewer') {
28
- const config = loadTeamConfig();
29
- const token = generateToken();
30
- const member = {
31
- token: '', // 클리어 토큰은 저장 안 함
32
- tokenHash: hashToken(token),
33
- displayName,
34
- role,
35
- createdAt: new Date().toISOString(),
36
- };
37
- config.members.push(member);
38
- saveTeamConfig(config);
39
- return { token, member }; // 토큰은 이때만 보여줌
40
- }
41
- // 토큰으로 멤버 인증
42
- export function authenticateMember(token) {
43
- const config = loadTeamConfig();
44
- const hash = hashToken(token);
45
- const member = config.members.find(m => m.tokenHash === hash);
46
- if (member) {
47
- member.lastAccess = new Date().toISOString();
48
- saveTeamConfig(config);
49
- }
50
- return member ?? null;
51
- }
52
- // RBAC 권한 확인
53
- export function hasPermission(member, action) {
54
- switch (action) {
55
- case 'read': return true; // 모든 역할 읽기 가능
56
- case 'write': return member.role === 'admin' || member.role === 'editor';
57
- case 'admin': return member.role === 'admin';
58
- }
59
- }
60
- // 멤버 목록
61
- export function listMembers() {
62
- return loadTeamConfig().members;
63
- }
64
- // 멤버 제거
65
- export function removeMember(displayName) {
66
- const config = loadTeamConfig();
67
- const before = config.members.length;
68
- config.members = config.members.filter(m => m.displayName !== displayName);
69
- if (config.members.length < before) {
70
- saveTeamConfig(config);
71
- return true;
72
- }
73
- return false;
74
- }
75
- // Express 미들웨어: Bearer 토큰 인증
76
- export function createAuthMiddleware() {
77
- return (req, res, next) => {
78
- const authHeader = req.headers.authorization;
79
- if (!authHeader?.startsWith('Bearer ')) {
80
- // HIGH-01: localhost는 editor 권한만 (admin은 토큰 필수)
81
- const ip = req.ip || req.connection?.remoteAddress;
82
- if (ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1') {
83
- req.teamMember = { displayName: 'local', role: 'editor' };
84
- return next();
85
- }
86
- return res.status(401).json({ error: 'Bearer token required' });
87
- }
88
- const token = authHeader.slice(7);
89
- const member = authenticateMember(token);
90
- if (!member) {
91
- return res.status(403).json({ error: 'Invalid token' });
92
- }
93
- req.teamMember = member;
94
- next();
95
- };
96
- }
97
- //# sourceMappingURL=index.js.map
@@ -1,23 +0,0 @@
1
- export interface Chunk {
2
- /** document.id + "#" + chunkIndex */
3
- id: string;
4
- /** 소속 문서 ID */
5
- documentId: string;
6
- /** 청크 텍스트 */
7
- content: string;
8
- /** 소속 heading (## 제목) */
9
- heading: string;
10
- /** 원문 시작 줄 번호 */
11
- startLine: number;
12
- /** 원문 끝 줄 번호 */
13
- endLine: number;
14
- /** 토큰 수 */
15
- tokenCount: number;
16
- /** 768차원 벡터 (로딩 시 선택적) */
17
- embedding?: number[];
18
- }
19
- export interface ScoredChunk {
20
- chunkId: string;
21
- score: number;
22
- }
23
- //# sourceMappingURL=chunk.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §3.1 — Core Types (Chunk)
2
- export {};
3
- //# sourceMappingURL=chunk.js.map
@@ -1,23 +0,0 @@
1
- export interface Document {
2
- /** SHA-256 hash of file path */
3
- id: string;
4
- /** vault 기준 상대 경로 */
5
- filePath: string;
6
- /** frontmatter title 또는 첫 heading */
7
- title: string;
8
- /** 전체 마크다운 텍스트 */
9
- content: string;
10
- /** YAML frontmatter */
11
- frontmatter: Record<string, unknown>;
12
- /** #태그 목록 */
13
- tags: string[];
14
- /** ISO 8601 */
15
- lastModified: string;
16
- /** SHA-256 of content (증분 인덱싱용) */
17
- contentHash: string;
18
- /** 출처: local | notion | clip | bridge | pack */
19
- source?: string;
20
- /** 노트 유형: note | clip | sync | bridge | decision | snapshot */
21
- type?: string;
22
- }
23
- //# sourceMappingURL=document.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §3.1 — Core Types (Document)
2
- export {};
3
- //# sourceMappingURL=document.js.map
@@ -1,39 +0,0 @@
1
- export interface GraphNode {
2
- id: string;
3
- label: string;
4
- filePath: string;
5
- tags: string[];
6
- clusterId: number;
7
- position?: [number, number, number];
8
- size: number;
9
- source?: string;
10
- type?: string;
11
- lastModified?: string;
12
- }
13
- export interface GraphEdge {
14
- source: string;
15
- target: string;
16
- weight: number;
17
- }
18
- export interface Cluster {
19
- id: number;
20
- label: string;
21
- color: string;
22
- nodeCount: number;
23
- }
24
- export interface GraphData {
25
- nodes: GraphNode[];
26
- edges: GraphEdge[];
27
- clusters: Cluster[];
28
- stats: {
29
- nodeCount: number;
30
- edgeCount: number;
31
- clusterCount: number;
32
- };
33
- }
34
- export interface GraphResponse {
35
- data: GraphData;
36
- generatedAt: string;
37
- cacheKey: string;
38
- }
39
- //# sourceMappingURL=graph.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §3.1 — Graph Data Types
2
- export {};
3
- //# sourceMappingURL=graph.js.map
@@ -1,5 +0,0 @@
1
- export type { Document } from './document.js';
2
- export type { Chunk, ScoredChunk } from './chunk.js';
3
- export type { SearchResult, SearchOptions, TopicInfo, StoreStats, } from './search.js';
4
- export type { GraphNode, GraphEdge, Cluster, GraphData, GraphResponse, } from './graph.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.js.map
@@ -1,39 +0,0 @@
1
- import type { Chunk } from './chunk.js';
2
- import type { Document } from './document.js';
3
- export interface SearchResult {
4
- chunk: Chunk;
5
- document: Document;
6
- /** RRF 통합 점수 (0~1) */
7
- score: number;
8
- /** 매칭 부분 하이라이트 */
9
- highlights: string[];
10
- }
11
- export interface SearchOptions {
12
- query: string;
13
- /** default: 10 */
14
- limit?: number;
15
- /** minimum score, default: 0.1 */
16
- threshold?: number;
17
- /** 태그 필터 */
18
- tags?: string[];
19
- /** 날짜 범위 필터 */
20
- dateRange?: {
21
- from?: string;
22
- to?: string;
23
- };
24
- }
25
- export interface TopicInfo {
26
- topic: string;
27
- count: number;
28
- recentDocuments: Array<{
29
- id: string;
30
- title: string;
31
- }>;
32
- }
33
- export interface StoreStats {
34
- documentCount: number;
35
- chunkCount: number;
36
- dbSizeBytes: number;
37
- lastIndexed: string | null;
38
- }
39
- //# sourceMappingURL=search.d.ts.map
@@ -1,3 +0,0 @@
1
- // Design Ref: §3.1 — Core Types (Search)
2
- export {};
3
- //# sourceMappingURL=search.js.map
@@ -1,25 +0,0 @@
1
- export interface RetryOptions {
2
- maxRetries?: number;
3
- baseDelayMs?: number;
4
- maxDelayMs?: number;
5
- onRetry?: (error: Error, attempt: number, maxRetries: number) => void;
6
- }
7
- export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
8
- export declare class StellavaultError extends Error {
9
- readonly code: string;
10
- readonly suggestion?: string | undefined;
11
- readonly cause?: Error | undefined;
12
- constructor(message: string, code: string, suggestion?: string | undefined, cause?: Error | undefined);
13
- format(): string;
14
- }
15
- export declare function wrapError(err: unknown, code: string, suggestion?: string): StellavaultError;
16
- export declare const errors: {
17
- vaultNotFound: (path: string) => StellavaultError;
18
- dbInitFailed: (err: unknown) => StellavaultError;
19
- embedderFailed: (err: unknown) => StellavaultError;
20
- indexingFailed: (file: string, err: unknown) => StellavaultError;
21
- searchFailed: (err: unknown) => StellavaultError;
22
- configInvalid: (field: string) => StellavaultError;
23
- apiServerFailed: (port: number, err: unknown) => StellavaultError;
24
- };
25
- //# sourceMappingURL=retry.d.ts.map
@@ -1,59 +0,0 @@
1
- // Error Recovery System (F-A02) — retry with exponential backoff + meaningful messages
2
- const DEFAULT_OPTIONS = {
3
- maxRetries: 3,
4
- baseDelayMs: 500,
5
- maxDelayMs: 10000,
6
- };
7
- export async function withRetry(fn, options = {}) {
8
- const { maxRetries, baseDelayMs, maxDelayMs } = { ...DEFAULT_OPTIONS, ...options };
9
- let lastError;
10
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
11
- try {
12
- return await fn();
13
- }
14
- catch (err) {
15
- lastError = err instanceof Error ? err : new Error(String(err));
16
- if (attempt >= maxRetries)
17
- break;
18
- const delay = Math.min(baseDelayMs * Math.pow(2, attempt), maxDelayMs);
19
- options.onRetry?.(lastError, attempt + 1, maxRetries);
20
- await new Promise((r) => setTimeout(r, delay));
21
- }
22
- }
23
- throw lastError;
24
- }
25
- export class StellavaultError extends Error {
26
- code;
27
- suggestion;
28
- cause;
29
- constructor(message, code, suggestion, cause) {
30
- super(message);
31
- this.code = code;
32
- this.suggestion = suggestion;
33
- this.cause = cause;
34
- this.name = 'StellavaultError';
35
- }
36
- format() {
37
- const lines = [`Error [${this.code}]: ${this.message}`];
38
- if (this.suggestion)
39
- lines.push(` Fix: ${this.suggestion}`);
40
- if (this.cause)
41
- lines.push(` Cause: ${this.cause.message}`);
42
- return lines.join('\n');
43
- }
44
- }
45
- export function wrapError(err, code, suggestion) {
46
- const cause = err instanceof Error ? err : new Error(String(err));
47
- return new StellavaultError(cause.message, code, suggestion, cause);
48
- }
49
- // Common error factories
50
- export const errors = {
51
- vaultNotFound: (path) => new StellavaultError(`Vault not found: ${path}`, 'VAULT_NOT_FOUND', 'Check the path exists and contains .md files'),
52
- dbInitFailed: (err) => wrapError(err, 'DB_INIT_FAILED', 'Delete ~/.stellavault/index.db and re-index'),
53
- embedderFailed: (err) => wrapError(err, 'EMBEDDER_FAILED', 'Check disk space and try again. The model downloads on first run (~80MB)'),
54
- indexingFailed: (file, err) => wrapError(err, 'INDEX_FAILED', `Skipping "${file}". Re-run indexing to retry failed files`),
55
- searchFailed: (err) => wrapError(err, 'SEARCH_FAILED', 'Re-index your vault: stellavault index <path>'),
56
- configInvalid: (field) => new StellavaultError(`Invalid config: ${field}`, 'CONFIG_INVALID', 'Check ~/.stellavault.json format'),
57
- apiServerFailed: (port, err) => wrapError(err, 'API_SERVER_FAILED', `Port ${port} may be in use. Try: stellavault graph --port ${port + 1}`),
58
- };
59
- //# sourceMappingURL=retry.js.map
@@ -1,67 +0,0 @@
1
- {
2
- "name": "@stellavault/core",
3
- "version": "0.4.0",
4
- "description": "Stellavault core engine — indexer, hybrid search, vector store, MCP server",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "types": "./dist/index.d.ts"
12
- },
13
- "./intelligence/youtube-extractor": {
14
- "import": "./dist/intelligence/youtube-extractor.js",
15
- "types": "./dist/intelligence/youtube-extractor.d.ts"
16
- },
17
- "./intelligence/file-extractors": {
18
- "import": "./dist/intelligence/file-extractors.js",
19
- "types": "./dist/intelligence/file-extractors.d.ts"
20
- },
21
- "./intelligence/draft-generator": {
22
- "import": "./dist/intelligence/draft-generator.js",
23
- "types": "./dist/intelligence/draft-generator.d.ts"
24
- },
25
- "./intelligence/wiki-compiler": {
26
- "import": "./dist/intelligence/wiki-compiler.js",
27
- "types": "./dist/intelligence/wiki-compiler.d.ts"
28
- },
29
- "./intelligence/knowledge-lint": {
30
- "import": "./dist/intelligence/knowledge-lint.js",
31
- "types": "./dist/intelligence/knowledge-lint.d.ts"
32
- }
33
- },
34
- "scripts": {
35
- "build": "tsc",
36
- "dev": "tsc --watch",
37
- "test": "vitest run",
38
- "test:watch": "vitest"
39
- },
40
- "devDependencies": {
41
- "@types/better-sqlite3": "^7.6.13",
42
- "@types/cors": "^2.8.19",
43
- "@types/express": "^5.0.6",
44
- "@types/node": "^25.5.0",
45
- "typescript": "^5.7.0",
46
- "vitest": "^3.0.0"
47
- },
48
- "dependencies": {
49
- "@anthropic-ai/sdk": "^0.82.0",
50
- "@modelcontextprotocol/sdk": "^1.28.0",
51
- "@types/multer": "^2.1.0",
52
- "@xenova/transformers": "^2.17.2",
53
- "b4a": "^1.8.0",
54
- "better-sqlite3": "^12.8.0",
55
- "chokidar": "^5.0.0",
56
- "cors": "^2.8.6",
57
- "express": "^5.2.1",
58
- "gray-matter": "^4.0.3",
59
- "hyperswarm": "^4.17.0",
60
- "mammoth": "^1.12.0",
61
- "multer": "^2.1.1",
62
- "officeparser": "^6.0.7",
63
- "sqlite-vec": "^0.1.7",
64
- "unpdf": "^1.4.0",
65
- "xlsx": "^0.18.5"
66
- }
67
- }