@sunub/obsidian-mcp-server 0.1.1 → 0.3.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 (284) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +392 -153
  3. package/build/cli/AppContainer.d.ts +1 -0
  4. package/build/cli/AppContainer.js +197 -0
  5. package/build/cli/AppContainer.js.map +1 -0
  6. package/build/cli/app.js +7 -0
  7. package/build/cli/app.js.map +1 -0
  8. package/build/cli/config/SettingContext.d.ts +1 -0
  9. package/build/cli/config/SettingContext.js +2 -0
  10. package/build/cli/config/SettingContext.js.map +1 -0
  11. package/build/cli/config/mcpServersConfig.d.ts +18 -0
  12. package/build/cli/config/mcpServersConfig.js +119 -0
  13. package/build/cli/config/mcpServersConfig.js.map +1 -0
  14. package/build/cli/config/settingSchema.d.ts +180 -0
  15. package/build/cli/config/settingSchema.js +128 -0
  16. package/build/cli/config/settingSchema.js.map +1 -0
  17. package/build/cli/context/InputContext.d.ts +12 -0
  18. package/build/cli/context/InputContext.js +10 -0
  19. package/build/cli/context/InputContext.js.map +1 -0
  20. package/build/cli/context/KeypressContext.d.ts +30 -0
  21. package/build/cli/context/KeypressContext.js +200 -0
  22. package/build/cli/context/KeypressContext.js.map +1 -0
  23. package/build/cli/context/KeypressContext.util.d.ts +7 -0
  24. package/build/cli/context/KeypressContext.util.js +474 -0
  25. package/build/cli/context/KeypressContext.util.js.map +1 -0
  26. package/build/cli/hooks/useAtCompletion.d.ts +12 -0
  27. package/build/cli/hooks/useAtCompletion.js +5 -0
  28. package/build/cli/hooks/useAtCompletion.js.map +1 -0
  29. package/build/cli/hooks/useCommandCompletion.d.ts +59 -0
  30. package/build/cli/hooks/useCommandCompletion.js +344 -0
  31. package/build/cli/hooks/useCommandCompletion.js.map +1 -0
  32. package/build/cli/hooks/useCompletion.d.ts +22 -0
  33. package/build/cli/hooks/useCompletion.js +84 -0
  34. package/build/cli/hooks/useCompletion.js.map +1 -0
  35. package/build/cli/hooks/useDispatcher.d.ts +6 -0
  36. package/build/cli/hooks/useDispatcher.js +286 -0
  37. package/build/cli/hooks/useDispatcher.js.map +1 -0
  38. package/build/cli/hooks/useFocus.d.ts +2 -0
  39. package/build/cli/hooks/useFocus.js +3 -0
  40. package/build/cli/hooks/useFocus.js.map +1 -0
  41. package/build/cli/hooks/useInputHistory.d.ts +24 -0
  42. package/build/cli/hooks/useInputHistory.js +159 -0
  43. package/build/cli/hooks/useInputHistory.js.map +1 -0
  44. package/build/cli/hooks/useKeyMatchers.d.ts +17 -0
  45. package/build/cli/hooks/useKeyMatchers.js +13 -0
  46. package/build/cli/hooks/useKeyMatchers.js.map +1 -0
  47. package/build/cli/hooks/useKeypress.d.ts +19 -0
  48. package/build/cli/hooks/useKeypress.js +28 -0
  49. package/build/cli/hooks/useKeypress.js.map +1 -0
  50. package/build/cli/hooks/useLlmStream.d.ts +12 -0
  51. package/build/cli/hooks/useLlmStream.js +365 -0
  52. package/build/cli/hooks/useLlmStream.js.map +1 -0
  53. package/build/cli/hooks/useMcpClient.d.ts +10 -0
  54. package/build/cli/hooks/useMcpClient.js +100 -0
  55. package/build/cli/hooks/useMcpClient.js.map +1 -0
  56. package/build/cli/hooks/useMcpManager.d.ts +22 -0
  57. package/build/cli/hooks/useMcpManager.js +86 -0
  58. package/build/cli/hooks/useMcpManager.js.map +1 -0
  59. package/build/cli/hooks/usePromptCompletion.d.ts +19 -0
  60. package/build/cli/hooks/usePromptCompletion.js +13 -0
  61. package/build/cli/hooks/usePromptCompletion.js.map +1 -0
  62. package/build/cli/hooks/useRagContext.d.ts +6 -0
  63. package/build/cli/hooks/useRagContext.js +83 -0
  64. package/build/cli/hooks/useRagContext.js.map +1 -0
  65. package/build/cli/hooks/useShellCompletion.d.ts +18 -0
  66. package/build/cli/hooks/useShellCompletion.js +10 -0
  67. package/build/cli/hooks/useShellCompletion.js.map +1 -0
  68. package/build/cli/hooks/useSlashCompletion.d.ts +21 -0
  69. package/build/cli/hooks/useSlashCompletion.js +11 -0
  70. package/build/cli/hooks/useSlashCompletion.js.map +1 -0
  71. package/build/cli/hooks/useTerminalSize.d.ts +9 -0
  72. package/build/cli/hooks/useTerminalSize.js +26 -0
  73. package/build/cli/hooks/useTerminalSize.js.map +1 -0
  74. package/build/cli/index.js +27 -0
  75. package/build/cli/index.js.map +1 -0
  76. package/build/cli/key/keyBindings.d.ts +152 -0
  77. package/build/cli/key/keyBindings.js +630 -0
  78. package/build/cli/key/keyBindings.js.map +1 -0
  79. package/build/cli/key/keyMatchers.d.ts +27 -0
  80. package/build/cli/key/keyMatchers.js +33 -0
  81. package/build/cli/key/keyMatchers.js.map +1 -0
  82. package/build/cli/key/text-buffer-bestcase.js +2754 -0
  83. package/build/cli/key/text-buffer-bestcase.js.map +1 -0
  84. package/build/cli/key/text-buffer.js +918 -0
  85. package/build/cli/key/text-buffer.js.map +1 -0
  86. package/build/cli/reference/HistoryItemDisplay.d.ts +23 -0
  87. package/build/cli/reference/HistoryItemDisplay.js +63 -0
  88. package/build/cli/reference/HistoryItemDisplay.js.map +1 -0
  89. package/build/cli/reference/InputContext.d.ts +17 -0
  90. package/build/cli/reference/InputContext.js +16 -0
  91. package/build/cli/reference/InputContext.js.map +1 -0
  92. package/build/cli/reference/KerypressContext.d.ts +37 -0
  93. package/build/cli/reference/KerypressContext.js +791 -0
  94. package/build/cli/reference/KerypressContext.js.map +1 -0
  95. package/build/cli/reference/MainContent.d.ts +6 -0
  96. package/build/cli/reference/MainContent.js +207 -0
  97. package/build/cli/reference/MainContent.js.map +1 -0
  98. package/build/cli/reference/UIStateContext.d.ts +188 -0
  99. package/build/cli/reference/UIStateContext.js +16 -0
  100. package/build/cli/reference/UIStateContext.js.map +1 -0
  101. package/build/cli/reference/useGeminiStream.d.ts +42 -0
  102. package/build/cli/reference/useGeminiStream.js +1404 -0
  103. package/build/cli/reference/useGeminiStream.js.map +1 -0
  104. package/build/cli/services/McpClientService.d.ts +32 -0
  105. package/build/cli/services/McpClientService.js +123 -0
  106. package/build/cli/services/McpClientService.js.map +1 -0
  107. package/build/cli/services/McpManager.d.ts +28 -0
  108. package/build/cli/services/McpManager.js +146 -0
  109. package/build/cli/services/McpManager.js.map +1 -0
  110. package/build/cli/theme/builtin/no-color.js +125 -0
  111. package/build/cli/theme/builtin/no-color.js.map +1 -0
  112. package/build/cli/theme/builtin/tokyonight-dark.js +146 -0
  113. package/build/cli/theme/builtin/tokyonight-dark.js.map +1 -0
  114. package/build/cli/theme/semantic-colors.js +19 -0
  115. package/build/cli/theme/semantic-colors.js.map +1 -0
  116. package/build/cli/theme/semantic-tokens.js +77 -0
  117. package/build/cli/theme/semantic-tokens.js.map +1 -0
  118. package/build/cli/theme/theme-manager.d.ts +32 -0
  119. package/build/cli/theme/theme-manager.js +150 -0
  120. package/build/cli/theme/theme-manager.js.map +1 -0
  121. package/build/cli/theme/theme.js +333 -0
  122. package/build/cli/theme/theme.js.map +1 -0
  123. package/build/cli/tmp.js +27 -0
  124. package/build/cli/tmp.js.map +1 -0
  125. package/build/cli/types.d.ts +72 -0
  126. package/build/cli/types.js +8 -0
  127. package/build/cli/types.js.map +1 -0
  128. package/build/cli/ui/ConnectionStatus.d.ts +13 -0
  129. package/build/cli/ui/ConnectionStatus.js +24 -0
  130. package/build/cli/ui/ConnectionStatus.js.map +1 -0
  131. package/build/cli/ui/HelpCommands.d.ts +5 -0
  132. package/build/cli/ui/HelpCommands.js +11 -0
  133. package/build/cli/ui/HelpCommands.js.map +1 -0
  134. package/build/cli/ui/HistoryItemDisplay.d.ts +9 -0
  135. package/build/cli/ui/HistoryItemDisplay.js +38 -0
  136. package/build/cli/ui/HistoryItemDisplay.js.map +1 -0
  137. package/build/cli/ui/InputPrompt-bestcase.d.ts +63 -0
  138. package/build/cli/ui/InputPrompt-bestcase.js +1301 -0
  139. package/build/cli/ui/InputPrompt-bestcase.js.map +1 -0
  140. package/build/cli/ui/InputPrompt.d.ts +12 -0
  141. package/build/cli/ui/InputPrompt.js +145 -0
  142. package/build/cli/ui/InputPrompt.js.map +1 -0
  143. package/build/cli/ui/InputPrompt.tmp.d.ts +7 -0
  144. package/build/cli/ui/InputPrompt.tmp.js +215 -0
  145. package/build/cli/ui/InputPrompt.tmp.js.map +1 -0
  146. package/build/cli/ui/MainContent.d.ts +10 -0
  147. package/build/cli/ui/MainContent.js +24 -0
  148. package/build/cli/ui/MainContent.js.map +1 -0
  149. package/build/cli/ui/MouseContext.d.ts +1 -0
  150. package/build/cli/ui/MouseContext.js +2 -0
  151. package/build/cli/ui/MouseContext.js.map +1 -0
  152. package/build/cli/ui/SuggestionsDisplay.d.ts +25 -0
  153. package/build/cli/ui/SuggestionsDisplay.js +45 -0
  154. package/build/cli/ui/SuggestionsDisplay.js.map +1 -0
  155. package/build/cli/ui/ThinkingIndicator.d.ts +2 -0
  156. package/build/cli/ui/ThinkingIndicator.js +16 -0
  157. package/build/cli/ui/ThinkingIndicator.js.map +1 -0
  158. package/build/cli/ui/layout/DefaultAppLayout.d.ts +2 -0
  159. package/build/cli/ui/layout/DefaultAppLayout.js +6 -0
  160. package/build/cli/ui/layout/DefaultAppLayout.js.map +1 -0
  161. package/build/cli/ui/shared/ExpandableText.d.ts +14 -0
  162. package/build/cli/ui/shared/ExpandableText.js +19 -0
  163. package/build/cli/ui/shared/ExpandableText.js.map +1 -0
  164. package/build/cli/utils/commandUtils.d.ts +11 -0
  165. package/build/cli/utils/commandUtils.js +16 -0
  166. package/build/cli/utils/commandUtils.js.map +1 -0
  167. package/build/cli/utils/debugLogger.d.ts +12 -0
  168. package/build/cli/utils/debugLogger.js +52 -0
  169. package/build/cli/utils/debugLogger.js.map +1 -0
  170. package/build/cli/utils/historyStorage.d.ts +13 -0
  171. package/build/cli/utils/historyStorage.js +64 -0
  172. package/build/cli/utils/historyStorage.js.map +1 -0
  173. package/build/cli/utils/textUtil.d.ts +68 -0
  174. package/build/cli/utils/textUtil.js +236 -0
  175. package/build/cli/utils/textUtil.js.map +1 -0
  176. package/build/config.js +31 -5
  177. package/build/config.js.map +1 -0
  178. package/build/db.js +55 -0
  179. package/build/db.js.map +1 -0
  180. package/build/index.js +4 -4
  181. package/build/index.js.map +1 -0
  182. package/build/tools/create_document_with_properties/index.d.ts +60 -0
  183. package/build/tools/create_document_with_properties/index.js +6 -0
  184. package/build/tools/create_document_with_properties/index.js.map +1 -0
  185. package/build/tools/create_document_with_properties/params.d.ts +66 -0
  186. package/build/tools/generate_property/index.js +6 -0
  187. package/build/tools/generate_property/index.js.map +1 -0
  188. package/build/tools/index.d.ts +184 -0
  189. package/build/tools/organize_attachments/index.js +6 -0
  190. package/build/tools/organize_attachments/index.js.map +1 -0
  191. package/build/tools/organize_attachments/params.d.ts +122 -0
  192. package/build/tools/vault/index.js +16 -2
  193. package/build/tools/vault/index.js.map +1 -0
  194. package/build/tools/vault/params.d.ts +115 -0
  195. package/build/tools/vault/types/collect_context.d.ts +1340 -0
  196. package/build/tools/vault/types/list_all.d.ts +387 -0
  197. package/build/tools/vault/types/read_specific.d.ts +297 -0
  198. package/build/tools/vault/types/search.d.ts +598 -0
  199. package/build/tools/vault/utils/actions/collect_context.js +26 -1
  200. package/build/tools/vault/utils/actions/collect_context.js.map +1 -0
  201. package/build/tools/vault/utils/actions/index_rag.js +27 -0
  202. package/build/tools/vault/utils/actions/index_rag.js.map +1 -0
  203. package/build/tools/vault/utils/actions/list_all.js +1 -0
  204. package/build/tools/vault/utils/actions/list_all.js.map +1 -0
  205. package/build/tools/vault/utils/actions/load_memory.js +23 -13
  206. package/build/tools/vault/utils/actions/load_memory.js.map +1 -0
  207. package/build/tools/vault/utils/actions/read.js +2 -1
  208. package/build/tools/vault/utils/actions/read.js.map +1 -0
  209. package/build/tools/vault/utils/actions/search.js +2 -1
  210. package/build/tools/vault/utils/actions/search.js.map +1 -0
  211. package/build/tools/vault/utils/actions/search_semantic.js +54 -0
  212. package/build/tools/vault/utils/actions/search_semantic.js.map +1 -0
  213. package/build/tools/vault/utils/actions/stats.js +1 -0
  214. package/build/tools/vault/utils/actions/stats.js.map +1 -0
  215. package/build/tools/vault/utils/document.js +1 -0
  216. package/build/tools/vault/utils/document.js.map +1 -0
  217. package/build/tools/write_property/index.d.ts +58 -0
  218. package/build/tools/write_property/index.js +6 -0
  219. package/build/tools/write_property/index.js.map +1 -0
  220. package/build/utils/DirectoryWalker.d.ts +6 -0
  221. package/build/utils/DirectoryWalker.js +7 -0
  222. package/build/utils/DirectoryWalker.js.map +1 -0
  223. package/build/utils/Indexer.d.ts +18 -0
  224. package/build/utils/Indexer.js +5 -9
  225. package/build/utils/Indexer.js.map +1 -0
  226. package/build/utils/LLMClient.d.ts +37 -0
  227. package/build/utils/LLMClient.js +82 -0
  228. package/build/utils/LLMClient.js.map +1 -0
  229. package/build/utils/RAGIndexer.d.ts +22 -0
  230. package/build/utils/RAGIndexer.js +206 -0
  231. package/build/utils/RAGIndexer.js.map +1 -0
  232. package/build/utils/RerankerClient.d.ts +27 -0
  233. package/build/utils/RerankerClient.js +69 -0
  234. package/build/utils/RerankerClient.js.map +1 -0
  235. package/build/utils/VaultManger/VaultManager.d.ts +34 -0
  236. package/build/utils/VaultManger/VaultManager.js +1 -0
  237. package/build/utils/VaultManger/VaultManager.js.map +1 -0
  238. package/build/utils/VaultManger/VaultPathError.d.ts +6 -0
  239. package/build/utils/VaultManger/VaultPathError.js +1 -0
  240. package/build/utils/VaultManger/VaultPathError.js.map +1 -0
  241. package/build/utils/VaultManger/index.d.ts +3 -0
  242. package/build/utils/VaultManger/index.js +1 -0
  243. package/build/utils/VaultManger/index.js.map +1 -0
  244. package/build/utils/VaultManger/types.d.ts +16 -0
  245. package/build/utils/VaultManger/types.js +1 -0
  246. package/build/utils/VaultManger/types.js.map +1 -0
  247. package/build/utils/VaultWatcher.d.ts +8 -0
  248. package/build/utils/VaultWatcher.js +96 -0
  249. package/build/utils/VaultWatcher.js.map +1 -0
  250. package/build/utils/VectorDB.d.ts +53 -0
  251. package/build/utils/VectorDB.js +243 -0
  252. package/build/utils/VectorDB.js.map +1 -0
  253. package/build/utils/createToolError.d.ts +2 -0
  254. package/build/utils/createToolError.js +1 -0
  255. package/build/utils/createToolError.js.map +1 -0
  256. package/build/utils/getVaultManager.d.ts +2 -0
  257. package/build/utils/getVaultManager.js +1 -0
  258. package/build/utils/getVaultManager.js.map +1 -0
  259. package/build/utils/processor/LinkExtractor.d.ts +2 -0
  260. package/build/utils/processor/LinkExtractor.js +1 -0
  261. package/build/utils/processor/LinkExtractor.js.map +1 -0
  262. package/build/utils/processor/MatterParser.d.ts +2 -0
  263. package/build/utils/processor/MatterParser.js +12 -3
  264. package/build/utils/processor/MatterParser.js.map +1 -0
  265. package/build/utils/processor/types.d.ts +100 -0
  266. package/package.json +28 -7
  267. package/build/server.js +0 -32
  268. package/build/tools/create_document_with_properties/params.js +0 -32
  269. package/build/tools/generate_property/params.js +0 -54
  270. package/build/tools/index.js +0 -12
  271. package/build/tools/organize_attachments/params.js +0 -60
  272. package/build/tools/organize_attachments/utils.js +0 -65
  273. package/build/tools/vault/metrics.js +0 -126
  274. package/build/tools/vault/params.js +0 -141
  275. package/build/tools/vault/types/collect_context.js +0 -102
  276. package/build/tools/vault/types/list_all.js +0 -52
  277. package/build/tools/vault/types/read_specific.js +0 -40
  278. package/build/tools/vault/types/search.js +0 -58
  279. package/build/tools/vault/utils/constants.js +0 -2
  280. package/build/tools/vault/utils/shared.js +0 -74
  281. package/build/tools/vault/utils.js +0 -6
  282. package/build/tools/write_property/params.js +0 -51
  283. package/build/utils/processor/types.js +0 -27
  284. package/build/utils/semaphore.js +0 -25
@@ -0,0 +1,243 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { connect, Index } from "@lancedb/lancedb";
4
+ import * as arrow from "apache-arrow";
5
+ import { debugLogger } from "../cli/utils/debugLogger.js";
6
+ import state from "../config.js";
7
+ export const INDEX_VERSION = 5;
8
+ const VECTOR_DIM = 768;
9
+ const VaultDocumentSchema = new arrow.Schema([
10
+ new arrow.Field("id", new arrow.Utf8()),
11
+ new arrow.Field("filePath", new arrow.Utf8()),
12
+ new arrow.Field("fileName", new arrow.Utf8()),
13
+ new arrow.Field("chunkIndex", new arrow.Int32()),
14
+ new arrow.Field("content", new arrow.Utf8()),
15
+ new arrow.Field("context", new arrow.Utf8(), true),
16
+ new arrow.Field("vector", new arrow.FixedSizeList(VECTOR_DIM, new arrow.Field("item", new arrow.Float32(), true))),
17
+ new arrow.Field("metadata", new arrow.Struct([
18
+ new arrow.Field("title", new arrow.Utf8()),
19
+ new arrow.Field("date", new arrow.Utf8()),
20
+ new arrow.Field("tags", new arrow.Utf8()),
21
+ new arrow.Field("summary", new arrow.Utf8()),
22
+ new arrow.Field("slug", new arrow.Utf8()),
23
+ new arrow.Field("category", new arrow.Utf8()),
24
+ new arrow.Field("completed", new arrow.Bool()),
25
+ ])),
26
+ ]);
27
+ export class VectorDB {
28
+ dbPath;
29
+ tableName = "obsidian_chunks";
30
+ metaTableName = "obsidian_meta";
31
+ fileMetaTableName = "obsidian_file_meta";
32
+ db = null;
33
+ constructor() {
34
+ const vaultDotObsidian = path.join(state.vaultPath, ".obsidian");
35
+ this.dbPath = path.join(vaultDotObsidian, "vector_cache");
36
+ }
37
+ async ensureDir() {
38
+ try {
39
+ await fs.mkdir(this.dbPath, { recursive: true });
40
+ }
41
+ catch (error) {
42
+ debugLogger.error("Error creating vector cache directory:", error);
43
+ }
44
+ }
45
+ async connect() {
46
+ await this.ensureDir();
47
+ return await connect(this.dbPath);
48
+ }
49
+ async getDb() {
50
+ if (!this.db) {
51
+ this.db = await this.connect();
52
+ }
53
+ return this.db;
54
+ }
55
+ async getTable() {
56
+ const db = await this.getDb();
57
+ const tableNames = await db.tableNames();
58
+ if (!tableNames.includes(this.tableName)) {
59
+ return null;
60
+ }
61
+ return await db.openTable(this.tableName);
62
+ }
63
+ async checkAndMigrateIfNeeded() {
64
+ const db = await this.connect();
65
+ const tableNames = await db.tableNames();
66
+ const currentEmbedModel = state.llmEmbeddingModel;
67
+ if (!tableNames.includes(this.metaTableName)) {
68
+ const tablesToDrop = [this.tableName, this.fileMetaTableName];
69
+ for (const t of tablesToDrop) {
70
+ if (tableNames.includes(t)) {
71
+ debugLogger.error(`[VectorDB] No meta table found but ${t} exists — dropping stale index.`);
72
+ await db.dropTable(t);
73
+ }
74
+ }
75
+ await this.writeMetadata(db);
76
+ this.db = null;
77
+ return true;
78
+ }
79
+ const meta = await this.readMetadata(db);
80
+ const storedVersion = Number.parseInt(meta["index_version"] ?? "0", 10);
81
+ const storedModel = meta["embed_model"] ?? "";
82
+ if (storedVersion !== INDEX_VERSION || storedModel !== currentEmbedModel) {
83
+ debugLogger.error(`[VectorDB] Index version mismatch (stored: v${storedVersion}/${storedModel}, current: v${INDEX_VERSION}/${currentEmbedModel}) — rebuilding index.`);
84
+ const tablesToDrop = [
85
+ this.tableName,
86
+ this.metaTableName,
87
+ this.fileMetaTableName,
88
+ ];
89
+ for (const t of tablesToDrop) {
90
+ if (tableNames.includes(t)) {
91
+ await db.dropTable(t);
92
+ }
93
+ }
94
+ await this.writeMetadata(db);
95
+ this.db = null;
96
+ return true;
97
+ }
98
+ debugLogger.info(`[VectorDB] Index is up-to-date (v${INDEX_VERSION}, ${currentEmbedModel}).`);
99
+ return false;
100
+ }
101
+ async readMetadata(db) {
102
+ try {
103
+ const table = await db.openTable(this.metaTableName);
104
+ const rows = (await table.query().toArray());
105
+ const result = {};
106
+ for (const row of rows) {
107
+ result[row.key] = row.value;
108
+ }
109
+ return result;
110
+ }
111
+ catch {
112
+ return {};
113
+ }
114
+ }
115
+ async writeMetadata(db) {
116
+ const records = [
117
+ { key: "index_version", value: String(INDEX_VERSION) },
118
+ { key: "embed_model", value: state.llmEmbeddingModel },
119
+ ];
120
+ await db.createTable(this.metaTableName, records, { mode: "overwrite" });
121
+ }
122
+ async createVectorIndex() {
123
+ const table = await this.getTable();
124
+ if (!table) {
125
+ return;
126
+ }
127
+ const rowCount = await table.countRows();
128
+ if (rowCount < 256) {
129
+ console.error(`[VectorDB] Skipping index creation: only ${rowCount} rows (need 256+)`);
130
+ return;
131
+ }
132
+ const numPartitions = Math.max(2, Math.floor(Math.sqrt(rowCount)));
133
+ await table.createIndex("vector", {
134
+ config: Index.ivfPq({
135
+ numPartitions,
136
+ numSubVectors: 96,
137
+ distanceType: "cosine",
138
+ }),
139
+ });
140
+ debugLogger.info(`[VectorDB] Created vector index with ${numPartitions} partitions for ${rowCount} rows.`);
141
+ }
142
+ async upsertChunks(records) {
143
+ if (!this.db) {
144
+ this.db = await this.connect();
145
+ }
146
+ const tableNames = await this.db.tableNames();
147
+ if (!tableNames.includes(this.tableName)) {
148
+ await this.db.createEmptyTable(this.tableName, VaultDocumentSchema);
149
+ }
150
+ const table = await this.db.openTable(this.tableName);
151
+ const filePaths = Array.from(new Set(records.map((r) => r.filePath)));
152
+ const inClause = filePaths
153
+ .map((fp) => `'${fp.replace(/'/g, "''")}'`)
154
+ .join(", ");
155
+ await table.delete(`filePath IN (${inClause})`);
156
+ await table.add(records);
157
+ }
158
+ async updateFileMeta(filePath, mtime) {
159
+ if (!this.db) {
160
+ this.db = await this.connect();
161
+ }
162
+ const tableNames = await this.db.tableNames();
163
+ if (!tableNames.includes(this.fileMetaTableName)) {
164
+ await this.db.createTable(this.fileMetaTableName, [{ filePath, mtime }]);
165
+ return;
166
+ }
167
+ const table = await this.db.openTable(this.fileMetaTableName);
168
+ await table.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
169
+ await table.add([{ filePath, mtime }]);
170
+ }
171
+ async updateFileMetaBatch(entries) {
172
+ if (entries.length === 0)
173
+ return;
174
+ if (!this.db) {
175
+ this.db = await this.connect();
176
+ }
177
+ const tableNames = await this.db.tableNames();
178
+ if (!tableNames.includes(this.fileMetaTableName)) {
179
+ await this.db.createTable(this.fileMetaTableName, entries);
180
+ return;
181
+ }
182
+ const table = await this.db.openTable(this.fileMetaTableName);
183
+ const inClause = entries
184
+ .map((e) => `'${e.filePath.replace(/'/g, "''")}'`)
185
+ .join(", ");
186
+ await table.delete(`filePath IN (${inClause})`);
187
+ await table.add(entries);
188
+ }
189
+ async getFileMtime(filePath) {
190
+ if (!this.db) {
191
+ this.db = await this.connect();
192
+ }
193
+ const tableNames = await this.db.tableNames();
194
+ if (!tableNames.includes(this.fileMetaTableName))
195
+ return null;
196
+ const table = await this.db.openTable(this.fileMetaTableName);
197
+ const rows = (await table
198
+ .query()
199
+ .where(`filePath = '${filePath.replace(/'/g, "''")}'`)
200
+ .toArray());
201
+ return rows.length > 0 ? rows[0].mtime : null;
202
+ }
203
+ async deleteByFilePath(filePath) {
204
+ const table = await this.getTable();
205
+ if (table) {
206
+ await table.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
207
+ }
208
+ if (!this.db) {
209
+ this.db = await this.connect();
210
+ }
211
+ if ((await this.db.tableNames()).includes(this.fileMetaTableName)) {
212
+ const fileMetaTable = await this.db.openTable(this.fileMetaTableName);
213
+ await fileMetaTable.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
214
+ }
215
+ }
216
+ async hasFile(filePath) {
217
+ const table = await this.getTable();
218
+ if (!table)
219
+ return false;
220
+ try {
221
+ const count = await table.countRows(`filePath = '${filePath.replace(/'/g, "''")}'`);
222
+ return count > 0;
223
+ }
224
+ catch {
225
+ return false;
226
+ }
227
+ }
228
+ async search(queryVector, limit = 5) {
229
+ const table = await this.getTable();
230
+ if (!table)
231
+ return [];
232
+ const results = await table
233
+ .vectorSearch(queryVector)
234
+ .distanceType("cosine")
235
+ .nprobes(20)
236
+ .refineFactor(1)
237
+ .limit(limit)
238
+ .toArray();
239
+ return results;
240
+ }
241
+ }
242
+ export const vectorDB = new VectorDB();
243
+ //# sourceMappingURL=VectorDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorDB.js","sourceRoot":"","sources":["../../src/utils/VectorDB.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare function createToolError(error: string, suggestion?: string): CallToolResult;
@@ -13,3 +13,4 @@ export function createToolError(error, suggestion) {
13
13
  ],
14
14
  };
15
15
  }
16
+ //# sourceMappingURL=createToolError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToolError.js","sourceRoot":"","sources":["../../src/utils/createToolError.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC9B,KAAa,EACb,UAAmB;IAEnB,MAAM,OAAO,GAA2C,EAAE,KAAK,EAAE,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,OAAO;QACN,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACD;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { VaultManager } from "./VaultManger/VaultManager.js";
2
+ export declare function getGlobalVaultManager(): VaultManager;
@@ -12,3 +12,4 @@ export function getGlobalVaultManager() {
12
12
  instance = new VaultManager(vaultPath, 20);
13
13
  return instance;
14
14
  }
15
+ //# sourceMappingURL=getVaultManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVaultManager.js","sourceRoot":"","sources":["../../src/utils/getVaultManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,IAAI,QAAQ,GAAwB,IAAI,CAAC;AAEzC,MAAM,UAAU,qBAAqB;IACpC,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function extractImageLinks(content: string): string[];
2
+ export declare function extractDocumentLinks(content: string): string[];
@@ -28,3 +28,4 @@ export function extractDocumentLinks(content) {
28
28
  }
29
29
  return docLinks;
30
30
  }
31
+ //# sourceMappingURL=LinkExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkExtractor.js","sourceRoot":"","sources":["../../../src/utils/processor/LinkExtractor.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,oBAAoB,CAAC;IAC3C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;IAE/C,IAAI,KAA6B,CAAC;IAClC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,yBAAyB,CAAC;IAEhD,IAAI,KAA6B,CAAC;IAClC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,gDAAgD;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ParsedMatter } from "./types.js";
2
+ export declare function parse(filePath: string, birthTime: string, text: string): ParsedMatter;
@@ -1,6 +1,7 @@
1
+ import { basename } from "node:path";
1
2
  import matter from "gray-matter";
2
3
  import { FrontMatterSchema } from "./types.js";
3
- export function parse(text) {
4
+ export function parse(filePath, birthTime, text) {
4
5
  try {
5
6
  const parsed = matter(text);
6
7
  const frontmatter = FrontMatterSchema.parse(parsed.data);
@@ -10,10 +11,18 @@ export function parse(text) {
10
11
  };
11
12
  }
12
13
  catch {
13
- console.warn("Frontmatter 파싱에 실패했습니다. 전체를 내용으로 간주합니다.");
14
14
  return {
15
- frontmatter: FrontMatterSchema.parse({}),
15
+ frontmatter: FrontMatterSchema.parse({
16
+ title: basename(filePath, ".md"),
17
+ date: birthTime,
18
+ category: "any",
19
+ tags: [""],
20
+ summary: text.slice(0, 200).replace(/\n/g, " "),
21
+ slug: basename(filePath, ".md").toLowerCase().replace(/\s+/g, "-"),
22
+ completed: false,
23
+ }),
16
24
  content: text,
17
25
  };
18
26
  }
19
27
  }
28
+ //# sourceMappingURL=MatterParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatterParser.js","sourceRoot":"","sources":["../../../src/utils/processor/MatterParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,KAAK,CACpB,QAAgB,EAChB,SAAiB,EACjB,IAAY;IAEZ,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO;YACN,WAAW;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO;YACN,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC;gBACpC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAChC,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,CAAC,EAAE,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC/C,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;gBAClE,SAAS,EAAE,KAAK;aAChB,CAAC;YACF,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { z } from "zod";
2
+ declare const PostCategorySchema: z.ZodOptional<z.ZodString>;
3
+ export declare const FrontMatterSchema: z.ZodObject<{
4
+ title: z.ZodString;
5
+ date: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate]>>;
6
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
+ summary: z.ZodOptional<z.ZodString>;
8
+ slug: z.ZodOptional<z.ZodString>;
9
+ category: z.ZodOptional<z.ZodString>;
10
+ completed: z.ZodOptional<z.ZodBoolean>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ title: string;
13
+ date?: string | Date | undefined;
14
+ tags?: string[] | undefined;
15
+ summary?: string | undefined;
16
+ slug?: string | undefined;
17
+ category?: string | undefined;
18
+ completed?: boolean | undefined;
19
+ }, {
20
+ title: string;
21
+ date?: string | Date | undefined;
22
+ tags?: string[] | undefined;
23
+ summary?: string | undefined;
24
+ slug?: string | undefined;
25
+ category?: string | undefined;
26
+ completed?: boolean | undefined;
27
+ }>;
28
+ type FrontMatter = z.infer<typeof FrontMatterSchema>;
29
+ export interface ParsedMatter {
30
+ frontmatter: FrontMatter;
31
+ content: string;
32
+ }
33
+ export interface DocumentIndex {
34
+ filePath: string;
35
+ frontmatter: FrontMatter;
36
+ contentLength: number;
37
+ imageLinks: string[];
38
+ documentLinks: string[];
39
+ }
40
+ export declare const DocumentIndexSchema: z.ZodObject<{
41
+ filePath: z.ZodString;
42
+ frontmatter: z.ZodObject<{
43
+ title: z.ZodString;
44
+ date: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate]>>;
45
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
46
+ summary: z.ZodOptional<z.ZodString>;
47
+ slug: z.ZodOptional<z.ZodString>;
48
+ category: z.ZodOptional<z.ZodString>;
49
+ completed: z.ZodOptional<z.ZodBoolean>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ title: string;
52
+ date?: string | Date | undefined;
53
+ tags?: string[] | undefined;
54
+ summary?: string | undefined;
55
+ slug?: string | undefined;
56
+ category?: string | undefined;
57
+ completed?: boolean | undefined;
58
+ }, {
59
+ title: string;
60
+ date?: string | Date | undefined;
61
+ tags?: string[] | undefined;
62
+ summary?: string | undefined;
63
+ slug?: string | undefined;
64
+ category?: string | undefined;
65
+ completed?: boolean | undefined;
66
+ }>;
67
+ contentLength: z.ZodNumber;
68
+ imageLinks: z.ZodArray<z.ZodString, "many">;
69
+ documentLinks: z.ZodArray<z.ZodString, "many">;
70
+ }, "strip", z.ZodTypeAny, {
71
+ frontmatter: {
72
+ title: string;
73
+ date?: string | Date | undefined;
74
+ tags?: string[] | undefined;
75
+ summary?: string | undefined;
76
+ slug?: string | undefined;
77
+ category?: string | undefined;
78
+ completed?: boolean | undefined;
79
+ };
80
+ contentLength: number;
81
+ filePath: string;
82
+ imageLinks: string[];
83
+ documentLinks: string[];
84
+ }, {
85
+ frontmatter: {
86
+ title: string;
87
+ date?: string | Date | undefined;
88
+ tags?: string[] | undefined;
89
+ summary?: string | undefined;
90
+ slug?: string | undefined;
91
+ category?: string | undefined;
92
+ completed?: boolean | undefined;
93
+ };
94
+ contentLength: number;
95
+ filePath: string;
96
+ imageLinks: string[];
97
+ documentLinks: string[];
98
+ }>;
99
+ export { PostCategorySchema };
100
+ export type { FrontMatter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunub/obsidian-mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "A server for the Obsidian Model Context Protocol.",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -22,10 +22,7 @@
22
22
  "exports": {
23
23
  ".": "./build/index.js"
24
24
  },
25
- "module": "build/index.ts",
26
25
  "scripts": {
27
- "smithery:dev": "npx @smithery/cli dev",
28
- "smithery:build": "npx @smithery/cli build",
29
26
  "test": "vitest",
30
27
  "test:watch": "vitest --watch",
31
28
  "metrics:report": "node scripts/vault-metrics-report.mjs",
@@ -39,20 +36,44 @@
39
36
  "author": "sunub",
40
37
  "license": "ISC",
41
38
  "dependencies": {
39
+ "@lancedb/lancedb": "^0.27.2",
40
+ "@langchain/core": "^1.1.39",
41
+ "@langchain/textsplitters": "^1.0.1",
42
42
  "@modelcontextprotocol/sdk": "^1.17.5",
43
+ "@types/tinycolor2": "^1.4.6",
44
+ "ansi-regex": "^6.2.2",
45
+ "apache-arrow": "^18.1.0",
46
+ "chalk": "^5.6.2",
47
+ "chokidar": "^5.0.0",
48
+ "clipboardy": "^5.3.1",
43
49
  "commander": "^14.0.2",
44
- "dotenv": "^17.2.2",
50
+ "comment-json": "^5.0.0",
51
+ "dotenv": "^17.4.2",
45
52
  "gray-matter": "^4.0.3",
53
+ "ink": "^7.0.0",
54
+ "js-tiktoken": "^1.0.21",
55
+ "mnemonist": "^0.40.3",
56
+ "ollama": "^0.6.3",
57
+ "ora": "^9.3.0",
58
+ "prompts": "^2.4.2",
59
+ "react": "^19.2.5",
60
+ "string-width": "^8.2.0",
61
+ "strip-ansi": "^7.2.0",
62
+ "tinycolor2": "^1.6.0",
63
+ "tinygradient": "^2.0.1",
64
+ "wrap-ansi": "^10.0.0",
65
+ "yargs": "^18.0.0",
46
66
  "zod": "^3.25.76"
47
67
  },
48
68
  "devDependencies": {
49
69
  "@biomejs/biome": "2.3.8",
50
- "@smithery/cli": "^1.2.31",
51
70
  "@types/node": "^24.3.1",
71
+ "@types/react": "^19.2.14",
72
+ "@types/yargs": "^17.0.35",
52
73
  "jsdom": "^27.0.0",
53
74
  "shx": "^0.4.0",
54
75
  "tsc-alias": "^1.8.16",
55
- "tsx": "^4.20.5",
76
+ "tsx": "^4.21.0",
56
77
  "typescript": "^5.9.2",
57
78
  "vite-tsconfig-paths": "^5.1.4",
58
79
  "vitest": "^3.2.4"
package/build/server.js DELETED
@@ -1,32 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import pkg from "../package.json" with { type: "json" };
3
- import tools from "./tools/index.js";
4
- export default function createMcpServer() {
5
- const mcpServer = new McpServer({
6
- version: pkg.version,
7
- name: "obsidian-mcp-server",
8
- title: "Obsidian MCP Server",
9
- }, {
10
- capabilities: {
11
- logging: {},
12
- tools: { listChanged: false },
13
- },
14
- instructions: `
15
- This server provides access to Obsidian vault documents and related tools.
16
-
17
- Available tools:
18
- - vault: Search, read, and list markdown documents in the vault
19
- - generate_property: Generate frontmatter property suggestions from document content
20
- - write_property: Write frontmatter properties to a markdown file
21
- - create_document_with_properties: Two-step workflow for AI-generated properties and write
22
- - organize_attachments: Move linked attachments and update markdown links
23
-
24
- Environment requirements:
25
- - VAULT_DIR_PATH: Path to your Obsidian vault directory
26
- `,
27
- });
28
- for (const tool of Object.values(tools)) {
29
- tool.register(mcpServer);
30
- }
31
- return mcpServer;
32
- }
@@ -1,32 +0,0 @@
1
- import { z } from "zod";
2
- import { obsidianPropertyOutputSchema } from "../generate_property/params.js";
3
- // input properties
4
- const sourcePath = z
5
- .string()
6
- .describe('The path to the source markdown file to read and analyze (e.g., "draft/my-article.md")');
7
- const outputPath = z
8
- .string()
9
- .optional()
10
- .describe("The path where the processed file with properties will be saved. If not provided, the source file will be updated in place.");
11
- const overwrite = z
12
- .boolean()
13
- .default(false)
14
- .describe("If set to true, existing properties will be overwritten by the AI-generated content. Default: false.");
15
- const aiGeneratedProperties = obsidianPropertyOutputSchema
16
- .optional()
17
- .describe("AI-generated properties based on content analysis. If provided, these will be used instead of internal analysis.");
18
- const quiet = z
19
- .boolean()
20
- .optional()
21
- .default(false)
22
- .describe("If true, the final write operation will return a minimal success message.");
23
- // input schema
24
- export const createDocumentWithPropertiesParamsSchema = z
25
- .object({
26
- sourcePath: sourcePath,
27
- outputPath: outputPath,
28
- overwrite: overwrite.optional(),
29
- aiGeneratedProperties: aiGeneratedProperties.optional(),
30
- quiet: quiet,
31
- })
32
- .describe("Parameters for creating or updating a document with automatically generated properties");
@@ -1,54 +0,0 @@
1
- import { z } from "zod";
2
- // input properties
3
- const obsidianGenerateInputFilename = z
4
- .string()
5
- .describe('The name or path of the file to analyze and add properties to (e.g., "my-first-post.md")');
6
- const obsidianGenerateInputOverwrite = z
7
- .boolean()
8
- .default(true)
9
- .describe("If set to true, existing properties will be overwritten by the AI-generated content. Default: false.");
10
- // input schema
11
- export const obsidianPropertyQueryParamsSchema = z
12
- .object({
13
- filename: obsidianGenerateInputFilename,
14
- overwrite: obsidianGenerateInputOverwrite.optional(),
15
- })
16
- .describe("Parameters for generating or updating Obsidian document properties");
17
- // output properties
18
- export const obsidianCssClassesProperty = z
19
- .array(z.string())
20
- .describe("List of CSS classes associated with the document");
21
- export const obsidianTagsProperty = z
22
- .array(z.string())
23
- .describe("List of tags associated with the document");
24
- export const obsidianTitleProperty = z
25
- .string()
26
- .describe("Title of the document");
27
- export const obsidianDateProperty = z
28
- .string()
29
- .describe("Creation date of the document in ISO 8601 format");
30
- export const obsidianSummaryProperty = z
31
- .string()
32
- .describe("Brief summary or abstract of the document");
33
- export const obsidianSlugProperty = z
34
- .string()
35
- .describe("URL-friendly identifier for the document");
36
- export const obsidianCategoryProperty = z
37
- .string()
38
- .describe("Category or classification of the document");
39
- export const obsidianCompletedProperty = z
40
- .boolean()
41
- .describe("Indicates whether a task or item is completed");
42
- // output schema
43
- export const obsidianPropertyOutputSchema = z
44
- .object({
45
- cssclasses: obsidianCssClassesProperty.optional(),
46
- tags: obsidianTagsProperty.optional(),
47
- title: obsidianTitleProperty.optional(),
48
- date: obsidianDateProperty.optional(),
49
- summary: obsidianSummaryProperty.optional(),
50
- slug: obsidianSlugProperty.optional(),
51
- category: obsidianCategoryProperty.optional(),
52
- completed: obsidianCompletedProperty.optional(),
53
- })
54
- .describe("Extracted properties from the Obsidian document content");
@@ -1,12 +0,0 @@
1
- import CreateDocumentWithPropertyTool from "./create_document_with_properties/index.js";
2
- import GenerateObsidianVaultPropertiesTool from "./generate_property/index.js";
3
- import OrganizeAttachmentsTool from "./organize_attachments/index.js";
4
- import ObsidianVaultTool from "./vault/index.js";
5
- import WriteObsidianPropertyTool from "./write_property/index.js";
6
- export default {
7
- ObsidianVaultTool,
8
- GenerateObsidianVaultPropertiesTool,
9
- WriteObsidianPropertyTool,
10
- CreateDocumentWithPropertyTool,
11
- OrganizeAttachmentsTool,
12
- };