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,33 +0,0 @@
1
- import type { DecayEngine } from '../../intelligence/decay-engine.js';
2
- export declare const getDecayStatusToolDef: {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: "object";
7
- properties: {
8
- threshold: {
9
- type: string;
10
- description: string;
11
- };
12
- limit: {
13
- type: string;
14
- description: string;
15
- };
16
- };
17
- };
18
- };
19
- export declare function handleGetDecayStatus(decayEngine: DecayEngine, args: {
20
- threshold?: number;
21
- limit?: number;
22
- }): Promise<{
23
- count: number;
24
- threshold: number;
25
- notes: {
26
- title: string;
27
- retrievability: number;
28
- stability: number;
29
- lastAccess: string;
30
- }[];
31
- tip: string;
32
- }>;
33
- //# sourceMappingURL=decay.d.ts.map
@@ -1,32 +0,0 @@
1
- // Design Ref: §4.2 — MCP tool: get-decay-status
2
- // Plan SC: SC-04
3
- export const getDecayStatusToolDef = {
4
- name: 'get-decay-status',
5
- description: '잊어가는 지식 노트를 조회합니다. 기억 강도(retrievability)가 낮은 노트 목록을 반환하여 리마인드합니다.',
6
- inputSchema: {
7
- type: 'object',
8
- properties: {
9
- threshold: { type: 'number', description: '감쇠 임계값 (0~1, default: 0.5). 이 값 이하인 노트를 반환' },
10
- limit: { type: 'number', description: '반환할 최대 노트 수 (default: 20)' },
11
- },
12
- },
13
- };
14
- export async function handleGetDecayStatus(decayEngine, args) {
15
- const threshold = args.threshold ?? 0.5;
16
- const limit = args.limit ?? 20;
17
- const decaying = await decayEngine.getDecaying(threshold, limit);
18
- return {
19
- count: decaying.length,
20
- threshold,
21
- notes: decaying.map(d => ({
22
- title: d.title,
23
- retrievability: Math.round(d.retrievability * 100) / 100,
24
- stability: Math.round(d.stability * 10) / 10,
25
- lastAccess: d.lastAccess,
26
- })),
27
- tip: decaying.length > 0
28
- ? `${decaying.length}개의 노트를 잊어가고 있습니다. 리뷰를 권장합니다.`
29
- : '모든 지식이 건강한 상태입니다!',
30
- };
31
- }
32
- //# sourceMappingURL=decay.js.map
@@ -1,78 +0,0 @@
1
- export declare const logDecisionToolDef: {
2
- name: string;
3
- description: string;
4
- inputSchema: {
5
- type: "object";
6
- properties: {
7
- title: {
8
- type: string;
9
- description: string;
10
- };
11
- context: {
12
- type: string;
13
- description: string;
14
- };
15
- decision: {
16
- type: string;
17
- description: string;
18
- };
19
- alternatives: {
20
- type: string;
21
- items: {
22
- type: string;
23
- };
24
- description: string;
25
- };
26
- reasoning: {
27
- type: string;
28
- description: string;
29
- };
30
- project: {
31
- type: string;
32
- description: string;
33
- };
34
- };
35
- required: string[];
36
- };
37
- };
38
- export declare const findDecisionsToolDef: {
39
- name: string;
40
- description: string;
41
- inputSchema: {
42
- type: "object";
43
- properties: {
44
- query: {
45
- type: string;
46
- description: string;
47
- };
48
- };
49
- required: string[];
50
- };
51
- };
52
- export declare function handleLogDecision(vaultPath: string, args: {
53
- title: string;
54
- context?: string;
55
- decision: string;
56
- alternatives?: string[];
57
- reasoning: string;
58
- project?: string;
59
- }): Promise<{
60
- saved: string;
61
- fileName: string;
62
- }>;
63
- export declare function handleFindDecisions(vaultPath: string, args: {
64
- query: string;
65
- }): Promise<{
66
- decisions: never[];
67
- message: string;
68
- total?: undefined;
69
- } | {
70
- decisions: {
71
- file: string;
72
- content: string;
73
- score: number;
74
- }[];
75
- total: number;
76
- message?: undefined;
77
- }>;
78
- //# sourceMappingURL=decision-journal.d.ts.map
@@ -1,79 +0,0 @@
1
- // Design Ref: §12.1 F14 — 결정 저널 (기술 결정 자동 기록)
2
- import { writeFileSync, existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';
3
- import { join, resolve } from 'node:path';
4
- export const logDecisionToolDef = {
5
- name: 'log-decision',
6
- description: '기술적 결정을 구조화하여 기록합니다. 나중에 "왜 이 선택을 했지?"에 답변할 수 있습니다.',
7
- inputSchema: {
8
- type: 'object',
9
- properties: {
10
- title: { type: 'string', description: '결정 제목 (예: Zustand 대신 Jotai 선택)' },
11
- context: { type: 'string', description: '결정 배경/상황' },
12
- decision: { type: 'string', description: '선택한 내용' },
13
- alternatives: { type: 'array', items: { type: 'string' }, description: '고려한 대안들' },
14
- reasoning: { type: 'string', description: '선택 이유' },
15
- project: { type: 'string', description: '관련 프로젝트명' },
16
- },
17
- required: ['title', 'decision', 'reasoning'],
18
- },
19
- };
20
- export const findDecisionsToolDef = {
21
- name: 'find-decisions',
22
- description: '과거 기술 결정을 검색합니다.',
23
- inputSchema: {
24
- type: 'object',
25
- properties: {
26
- query: { type: 'string', description: '검색 쿼리' },
27
- },
28
- required: ['query'],
29
- },
30
- };
31
- export async function handleLogDecision(vaultPath, args) {
32
- const decisionsDir = join(vaultPath, 'decisions');
33
- mkdirSync(decisionsDir, { recursive: true });
34
- const date = new Date().toISOString().slice(0, 10);
35
- const slug = args.title.replace(/[^a-zA-Z가-힣0-9\s-]/g, '').replace(/\s+/g, '-').slice(0, 50);
36
- if (!slug)
37
- throw new Error('Invalid decision title');
38
- const fileName = `${date}-${slug}.md`;
39
- const content = [
40
- '---',
41
- `title: "${args.title}"`,
42
- `date: ${date}`,
43
- `project: "${args.project ?? ''}"`,
44
- 'type: decision',
45
- '---',
46
- '',
47
- `# ${args.title}`,
48
- '',
49
- args.context ? `## 배경\n\n${args.context}\n` : '',
50
- `## 결정\n\n${args.decision}\n`,
51
- args.alternatives?.length
52
- ? `## 고려한 대안\n\n${args.alternatives.map(a => `- ${a}`).join('\n')}\n`
53
- : '',
54
- `## 이유\n\n${args.reasoning}\n`,
55
- ].filter(Boolean).join('\n');
56
- const filePath = resolve(decisionsDir, fileName);
57
- if (!filePath.startsWith(resolve(decisionsDir))) {
58
- throw new Error('Path traversal detected');
59
- }
60
- writeFileSync(filePath, content, 'utf-8');
61
- return { saved: filePath, fileName };
62
- }
63
- export async function handleFindDecisions(vaultPath, args) {
64
- const decisionsDir = join(vaultPath, 'decisions');
65
- if (!existsSync(decisionsDir))
66
- return { decisions: [], message: 'No decisions directory' };
67
- const files = readdirSync(decisionsDir).filter(f => f.endsWith('.md'));
68
- const query = args.query.toLowerCase();
69
- const matches = files
70
- .map(f => {
71
- const content = readFileSync(join(decisionsDir, f), 'utf-8');
72
- const score = content.toLowerCase().includes(query) ? 1 : 0;
73
- return { file: f, content: content.slice(0, 300), score };
74
- })
75
- .filter(m => m.score > 0)
76
- .slice(0, 10);
77
- return { decisions: matches, total: files.length };
78
- }
79
- //# sourceMappingURL=decision-journal.js.map
@@ -1,24 +0,0 @@
1
- import type { VectorStore } from '../../store/types.js';
2
- export declare function createDetectGapsTool(store: VectorStore): {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: "object";
7
- properties: {
8
- minSeverity: {
9
- type: "string";
10
- description: string;
11
- enum: string[];
12
- };
13
- };
14
- };
15
- handler: (args: {
16
- minSeverity?: string;
17
- }) => Promise<{
18
- content: {
19
- type: "text";
20
- text: string;
21
- }[];
22
- }>;
23
- };
24
- //# sourceMappingURL=detect-gaps.d.ts.map
@@ -1,47 +0,0 @@
1
- // Design Ref: §3.5 — MCP detect-gaps tool
2
- // Plan SC: SC-04 MCP detect-gaps가 클러스터 간 갭 + 고립 노드 반환
3
- import { detectKnowledgeGaps } from '../../intelligence/gap-detector.js';
4
- export function createDetectGapsTool(store) {
5
- return {
6
- name: 'detect-gaps',
7
- description: 'Detect knowledge gaps between topic clusters. Returns gap severity, isolated nodes, and suggested topics to bridge gaps.',
8
- inputSchema: {
9
- type: 'object',
10
- properties: {
11
- minSeverity: {
12
- type: 'string',
13
- description: 'Minimum gap severity to include: high, medium, or low',
14
- enum: ['high', 'medium', 'low'],
15
- },
16
- },
17
- },
18
- handler: async (args) => {
19
- const minSeverity = args.minSeverity ?? 'medium';
20
- const report = await detectKnowledgeGaps(store);
21
- const sevOrder = { high: 0, medium: 1, low: 2 };
22
- const threshold = sevOrder[minSeverity] ?? 1;
23
- const filtered = report.gaps.filter((g) => sevOrder[g.severity] <= threshold);
24
- return {
25
- content: [{
26
- type: 'text',
27
- text: JSON.stringify({
28
- totalClusters: report.totalClusters,
29
- totalGaps: filtered.length,
30
- gaps: filtered.map((g) => ({
31
- clusterA: g.clusterA,
32
- clusterB: g.clusterB,
33
- bridgeCount: g.bridgeCount,
34
- severity: g.severity,
35
- suggestedTopic: g.suggestedTopic,
36
- })),
37
- isolatedNodes: report.isolatedNodes.slice(0, 10),
38
- suggestion: filtered.length > 0
39
- ? `${filtered[0].suggestedTopic} 주제로 노트를 작성하면 지식 갭을 줄일 수 있습니다.`
40
- : '현재 심각한 지식 갭이 없습니다.',
41
- }, null, 2),
42
- }],
43
- };
44
- },
45
- };
46
- }
47
- //# sourceMappingURL=detect-gaps.js.map
@@ -1,29 +0,0 @@
1
- import type { VectorStore } from '../../store/types.js';
2
- export declare const exportToolDef: {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: "object";
7
- properties: {
8
- outputPath: {
9
- type: string;
10
- description: string;
11
- };
12
- format: {
13
- type: string;
14
- enum: string[];
15
- description: string;
16
- };
17
- };
18
- required: string[];
19
- };
20
- };
21
- export declare function handleExport(store: VectorStore, args: {
22
- outputPath: string;
23
- format?: string;
24
- }): Promise<{
25
- exported: number;
26
- path: string;
27
- format: string;
28
- }>;
29
- //# sourceMappingURL=export.d.ts.map
@@ -1,60 +0,0 @@
1
- // Design Ref: §12.1 F20 — 지식 내보내기 포맷 (락인 방지)
2
- import { writeFileSync, mkdirSync } from 'node:fs';
3
- import { dirname, resolve } from 'node:path';
4
- import { homedir } from 'node:os';
5
- const ALLOWED_EXPORT_DIRS = [
6
- resolve(homedir(), '.stellavault'),
7
- resolve('.'),
8
- ];
9
- function validateExportPath(outputPath) {
10
- const resolved = resolve(outputPath);
11
- const isAllowed = ALLOWED_EXPORT_DIRS.some(dir => resolved.startsWith(resolve(dir)));
12
- if (!isAllowed) {
13
- throw new Error(`Export path must be within current directory or ~/.stellavault/. Got: ${resolved}`);
14
- }
15
- return resolved;
16
- }
17
- export const exportToolDef = {
18
- name: 'export',
19
- description: '벡터 DB의 문서와 메타데이터를 JSON 파일로 내보냅니다. 다른 도구로 이전 가능.',
20
- inputSchema: {
21
- type: 'object',
22
- properties: {
23
- outputPath: { type: 'string', description: '출력 파일 경로 (예: ./export.json)' },
24
- format: { type: 'string', enum: ['json', 'csv'], description: '출력 포맷 (기본: json)' },
25
- },
26
- required: ['outputPath'],
27
- },
28
- };
29
- export async function handleExport(store, args) {
30
- const docs = await store.getAllDocuments();
31
- const stats = await store.getStats();
32
- const topics = await store.getTopics();
33
- const safePath = validateExportPath(args.outputPath);
34
- mkdirSync(dirname(safePath), { recursive: true });
35
- if (args.format === 'csv') {
36
- const header = 'id,filePath,title,tags,lastModified,contentHash';
37
- const rows = docs.map(d => `"${d.id}","${d.filePath}","${d.title.replace(/"/g, '""')}","${d.tags.join(';')}","${d.lastModified}","${d.contentHash}"`);
38
- writeFileSync(safePath, [header, ...rows].join('\n'), 'utf-8');
39
- }
40
- else {
41
- const exported = {
42
- exportedAt: new Date().toISOString(),
43
- version: '1.0',
44
- stats,
45
- topics,
46
- documents: docs.map(d => ({
47
- id: d.id,
48
- filePath: d.filePath,
49
- title: d.title,
50
- tags: d.tags,
51
- frontmatter: d.frontmatter,
52
- lastModified: d.lastModified,
53
- contentLength: d.content.length,
54
- })),
55
- };
56
- writeFileSync(safePath, JSON.stringify(exported, null, 2), 'utf-8');
57
- }
58
- return { exported: docs.length, path: safePath, format: args.format ?? 'json' };
59
- }
60
- //# sourceMappingURL=export.js.map
@@ -1,29 +0,0 @@
1
- import type { FederatedSearch } from '../../federation/search.js';
2
- export declare function createFederatedSearchTool(federatedSearch: FederatedSearch | null): {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: "object";
7
- properties: {
8
- query: {
9
- type: string;
10
- description: string;
11
- };
12
- limit: {
13
- type: string;
14
- description: string;
15
- };
16
- };
17
- required: string[];
18
- };
19
- handler(args: {
20
- query: string;
21
- limit?: number;
22
- }): Promise<{
23
- content: {
24
- type: "text";
25
- text: string;
26
- }[];
27
- }>;
28
- };
29
- //# sourceMappingURL=federated-search.d.ts.map
@@ -1,36 +0,0 @@
1
- // MCP Tool: federated-search (Federation Phase 1b)
2
- // AI 에이전트가 연합 네트워크를 검색
3
- export function createFederatedSearchTool(federatedSearch) {
4
- return {
5
- name: 'federated-search',
6
- description: 'Search across all connected Federation peers. Returns results from other Stellavault nodes in the P2P network. Only titles, similarity scores, and 50-char snippets are shared — no raw text leaves any node.',
7
- inputSchema: {
8
- type: 'object',
9
- properties: {
10
- query: { type: 'string', description: 'Search query' },
11
- limit: { type: 'number', description: 'Max results per peer (default: 5)' },
12
- },
13
- required: ['query'],
14
- },
15
- async handler(args) {
16
- if (!federatedSearch) {
17
- return { content: [{ type: 'text', text: 'Federation not active. Run `sv federate join` first.' }] };
18
- }
19
- const results = await federatedSearch.search(args.query, { limit: args.limit ?? 5 });
20
- if (results.length === 0) {
21
- return { content: [{ type: 'text', text: 'No results from federation peers. Either no peers connected or no matching documents.' }] };
22
- }
23
- const lines = [
24
- `🌐 Federation Search: "${args.query}" — ${results.length} results from ${new Set(results.map(r => r.peerId)).size} peers`,
25
- '',
26
- ];
27
- for (const r of results) {
28
- lines.push(`**${r.title}** (${Math.round(r.similarity * 100)}%) [${r.peerName}]`);
29
- lines.push(` ${r.snippet}...`);
30
- lines.push('');
31
- }
32
- return { content: [{ type: 'text', text: lines.join('\n') }] };
33
- },
34
- };
35
- }
36
- //# sourceMappingURL=federated-search.js.map
@@ -1,35 +0,0 @@
1
- import type { SearchEngine } from '../../search/index.js';
2
- import type { VectorStore } from '../../store/types.js';
3
- export declare const generateClaudeMdToolDef: {
4
- name: string;
5
- description: string;
6
- inputSchema: {
7
- type: "object";
8
- properties: {
9
- projectName: {
10
- type: string;
11
- description: string;
12
- };
13
- topics: {
14
- type: string;
15
- items: {
16
- type: string;
17
- };
18
- description: string;
19
- };
20
- };
21
- required: string[];
22
- };
23
- };
24
- export declare function handleGenerateClaudeMd(searchEngine: SearchEngine, store: VectorStore, args: {
25
- projectName: string;
26
- topics?: string[];
27
- }): Promise<{
28
- content: string;
29
- stats: {
30
- queriesRun: number;
31
- uniqueResults: number;
32
- sections: string[];
33
- };
34
- }>;
35
- //# sourceMappingURL=generate-claude-md.d.ts.map
@@ -1,107 +0,0 @@
1
- // Design Ref: §12.1 F13 — CLAUDE.md 자동 생성기 (킬러 유스케이스)
2
- export const generateClaudeMdToolDef = {
3
- name: 'generate-claude-md',
4
- description: '프로젝트명을 기반으로 관련 지식(아키텍처, 패턴, 교훈, 결정사항)을 검색하여 CLAUDE.md 초안을 자동 생성합니다.',
5
- inputSchema: {
6
- type: 'object',
7
- properties: {
8
- projectName: { type: 'string', description: '프로젝트명 또는 주요 키워드' },
9
- topics: {
10
- type: 'array',
11
- items: { type: 'string' },
12
- description: '추가 검색할 토픽 (예: ["인증", "배포", "성능"])',
13
- },
14
- },
15
- required: ['projectName'],
16
- },
17
- };
18
- export async function handleGenerateClaudeMd(searchEngine, store, args) {
19
- const { projectName, topics = [] } = args;
20
- // 프로젝트 관련 지식 검색 (여러 관점)
21
- const queries = [
22
- `${projectName} 아키텍처 설계`,
23
- `${projectName} 패턴 컨벤션`,
24
- `${projectName} 교훈 실수 주의사항`,
25
- `${projectName} 기술 스택 의존성`,
26
- ...topics.map(t => `${projectName} ${t}`),
27
- ];
28
- const allResults = new Map();
29
- for (const query of queries) {
30
- const results = await searchEngine.search({ query, limit: 3 });
31
- const category = query.replace(projectName, '').trim();
32
- for (const r of results) {
33
- const key = r.chunk.id;
34
- if (!allResults.has(key) || (allResults.get(key).score < r.score)) {
35
- allResults.set(key, {
36
- title: `${r.document.title} §${r.chunk.heading}`,
37
- content: r.chunk.content.slice(0, 500),
38
- score: r.score,
39
- category,
40
- });
41
- }
42
- }
43
- }
44
- // 카테고리별 분류
45
- const sorted = [...allResults.values()].sort((a, b) => b.score - a.score);
46
- // CLAUDE.md 초안 생성
47
- const sections = [];
48
- sections.push(`# ${projectName} — CLAUDE.md`);
49
- sections.push('');
50
- sections.push('> 이 파일은 evan-knowledge-hub MCP에서 자동 생성되었습니다.');
51
- sections.push(`> 생성일: ${new Date().toISOString().slice(0, 10)}`);
52
- sections.push(`> 참조 지식: ${sorted.length}건`);
53
- sections.push('');
54
- // 아키텍처 섹션
55
- const archResults = sorted.filter(r => r.category.includes('아키텍처') || r.category.includes('설계'));
56
- if (archResults.length > 0) {
57
- sections.push('## 아키텍처 & 설계');
58
- sections.push('');
59
- for (const r of archResults.slice(0, 3)) {
60
- sections.push(`### ${r.title}`);
61
- sections.push(r.content.trim());
62
- sections.push('');
63
- }
64
- }
65
- // 패턴/컨벤션 섹션
66
- const patternResults = sorted.filter(r => r.category.includes('패턴') || r.category.includes('컨벤션'));
67
- if (patternResults.length > 0) {
68
- sections.push('## 코딩 패턴 & 컨벤션');
69
- sections.push('');
70
- for (const r of patternResults.slice(0, 3)) {
71
- sections.push(`### ${r.title}`);
72
- sections.push(r.content.trim());
73
- sections.push('');
74
- }
75
- }
76
- // 교훈 섹션
77
- const lessonResults = sorted.filter(r => r.category.includes('교훈') || r.category.includes('실수'));
78
- if (lessonResults.length > 0) {
79
- sections.push('## 교훈 & 주의사항');
80
- sections.push('');
81
- for (const r of lessonResults.slice(0, 5)) {
82
- sections.push(`- **${r.title}**: ${r.content.slice(0, 200).replace(/\n/g, ' ').trim()}`);
83
- }
84
- sections.push('');
85
- }
86
- // 기타 관련 지식
87
- const otherResults = sorted.filter(r => !r.category.includes('아키텍처') && !r.category.includes('설계') &&
88
- !r.category.includes('패턴') && !r.category.includes('교훈') && !r.category.includes('실수'));
89
- if (otherResults.length > 0) {
90
- sections.push('## 관련 지식');
91
- sections.push('');
92
- for (const r of otherResults.slice(0, 5)) {
93
- sections.push(`- **${r.title}** (score: ${r.score.toFixed(3)})`);
94
- }
95
- sections.push('');
96
- }
97
- const claudeMd = sections.join('\n');
98
- return {
99
- content: claudeMd,
100
- stats: {
101
- queriesRun: queries.length,
102
- uniqueResults: sorted.length,
103
- sections: ['아키텍처', '패턴', '교훈', '관련 지식'].filter((_, i) => [archResults, patternResults, lessonResults, otherResults][i].length > 0),
104
- },
105
- };
106
- }
107
- //# sourceMappingURL=generate-claude-md.js.map
@@ -1,34 +0,0 @@
1
- import type { SearchEngine } from '../../search/index.js';
2
- export declare function createGenerateDraftTool(searchEngine: SearchEngine, vaultPath: string): {
3
- name: string;
4
- description: string;
5
- inputSchema: {
6
- type: "object";
7
- properties: {
8
- topic: {
9
- type: string;
10
- description: string;
11
- };
12
- format: {
13
- type: string;
14
- enum: string[];
15
- description: string;
16
- };
17
- maxSources: {
18
- type: string;
19
- description: string;
20
- };
21
- };
22
- };
23
- handler: (args: {
24
- topic?: string;
25
- format?: string;
26
- maxSources?: number;
27
- }) => Promise<{
28
- content: {
29
- type: "text";
30
- text: string;
31
- }[];
32
- }>;
33
- };
34
- //# sourceMappingURL=generate-draft.d.ts.map