@sunub/obsidian-mcp-server 0.3.1 → 0.3.2

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 (154) hide show
  1. package/build/cli/app.d.ts +1 -0
  2. package/build/cli/app.js +7 -0
  3. package/build/cli/app.js.map +1 -0
  4. package/build/cli/colors.d.ts +15 -0
  5. package/build/cli/colors.js +15 -0
  6. package/build/cli/colors.js.map +1 -0
  7. package/build/cli/commands/types.d.ts +19 -0
  8. package/build/cli/commands/types.js +11 -0
  9. package/build/cli/commands/types.js.map +1 -0
  10. package/build/cli/config/mcpServersConfig.d.ts +15 -3
  11. package/build/cli/config/mcpServersConfig.js +2 -2
  12. package/build/cli/config/mcpServersConfig.js.map +1 -1
  13. package/build/cli/constants.d.ts +47 -0
  14. package/build/cli/constants.js +101 -0
  15. package/build/cli/constants.js.map +1 -0
  16. package/build/cli/hooks/useMcpClient.js +1 -1
  17. package/build/cli/index.d.ts +1 -0
  18. package/build/cli/index.js +16 -4
  19. package/build/cli/index.js.map +1 -1
  20. package/build/cli/key/input.d.ts +5 -0
  21. package/build/cli/key/input.js +9 -0
  22. package/build/cli/key/input.js.map +1 -0
  23. package/build/cli/key/mouse.d.ts +23 -0
  24. package/build/cli/key/mouse.js +155 -0
  25. package/build/cli/key/mouse.js.map +1 -0
  26. package/build/cli/key/text-buffer-bestcase.d.ts +867 -0
  27. package/build/cli/key/text-buffer-bestcase.js +2754 -0
  28. package/build/cli/key/text-buffer-bestcase.js.map +1 -0
  29. package/build/cli/key/text-buffer.d.ts +509 -0
  30. package/build/cli/main.d.ts +1 -0
  31. package/build/cli/main.js +20 -0
  32. package/build/cli/main.js.map +1 -0
  33. package/build/cli/reference/text-buffer.d.ts +867 -0
  34. package/build/cli/reference/text-buffer.js +2754 -0
  35. package/build/cli/reference/text-buffer.js.map +1 -0
  36. package/build/cli/theme/builtin/default-dark.d.ts +7 -0
  37. package/build/cli/theme/builtin/default-dark.js +143 -0
  38. package/build/cli/theme/builtin/default-dark.js.map +1 -0
  39. package/build/cli/theme/builtin/no-color.d.ts +7 -0
  40. package/build/cli/theme/builtin/no-color.js +125 -0
  41. package/build/cli/theme/builtin/no-color.js.map +1 -0
  42. package/build/cli/theme/builtin/tokyonight-dark.d.ts +7 -0
  43. package/build/cli/theme/builtin/tokyonight-dark.js +146 -0
  44. package/build/cli/theme/builtin/tokyonight-dark.js.map +1 -0
  45. package/build/cli/theme/semantic-colors.d.ts +2 -0
  46. package/build/cli/theme/semantic-colors.js +19 -0
  47. package/build/cli/theme/semantic-colors.js.map +1 -0
  48. package/build/cli/theme/semantic-tokens.d.ts +42 -0
  49. package/build/cli/theme/semantic-tokens.js +77 -0
  50. package/build/cli/theme/semantic-tokens.js.map +1 -0
  51. package/build/cli/theme/theme-manager.d.ts +32 -0
  52. package/build/cli/theme/theme-manager.js +150 -0
  53. package/build/cli/theme/theme-manager.js.map +1 -0
  54. package/build/cli/theme/theme.d.ts +107 -0
  55. package/build/cli/theme/theme.js +333 -0
  56. package/build/cli/theme/theme.js.map +1 -0
  57. package/build/cli/tmp.d.ts +1 -0
  58. package/build/cli/types.d.ts +72 -0
  59. package/build/cli/types.js +8 -0
  60. package/build/cli/types.js.map +1 -0
  61. package/build/cli/utils/cache.d.ts +21 -0
  62. package/build/cli/utils/cache.js +56 -0
  63. package/build/cli/utils/cache.js.map +1 -0
  64. package/build/cli/utils/debugLogger.js +5 -5
  65. package/build/cli/utils/debugLogger.js.map +1 -1
  66. package/build/config.d.ts +30 -0
  67. package/build/config.js +81 -0
  68. package/build/config.js.map +1 -0
  69. package/build/db.d.ts +1 -0
  70. package/build/index.d.ts +2 -0
  71. package/build/index.js +4 -2
  72. package/build/index.js.map +1 -1
  73. package/build/server.d.ts +2 -0
  74. package/build/server.js +39 -0
  75. package/build/server.js.map +1 -0
  76. package/build/tools/create_document_with_properties/index.js +1 -1
  77. package/build/tools/create_document_with_properties/params.d.ts +3 -3
  78. package/build/tools/create_document_with_properties/params.js +33 -0
  79. package/build/tools/create_document_with_properties/params.js.map +1 -0
  80. package/build/tools/generate_property/index.d.ts +34 -0
  81. package/build/tools/generate_property/params.d.ts +48 -0
  82. package/build/tools/generate_property/params.js +55 -0
  83. package/build/tools/generate_property/params.js.map +1 -0
  84. package/build/tools/index.js +13 -0
  85. package/build/tools/index.js.map +1 -0
  86. package/build/tools/organize_attachments/index.d.ts +32 -0
  87. package/build/tools/organize_attachments/index.js +1 -1
  88. package/build/tools/organize_attachments/params.d.ts +16 -16
  89. package/build/tools/organize_attachments/params.js +61 -0
  90. package/build/tools/organize_attachments/params.js.map +1 -0
  91. package/build/tools/organize_attachments/utils.d.ts +22 -0
  92. package/build/tools/organize_attachments/utils.js +66 -0
  93. package/build/tools/organize_attachments/utils.js.map +1 -0
  94. package/build/tools/vault/index.d.ts +50 -0
  95. package/build/tools/vault/index.js +1 -1
  96. package/build/tools/vault/metrics.d.ts +25 -0
  97. package/build/tools/vault/metrics.js +130 -0
  98. package/build/tools/vault/metrics.js.map +1 -0
  99. package/build/tools/vault/params.d.ts +12 -12
  100. package/build/tools/vault/params.js +148 -0
  101. package/build/tools/vault/params.js.map +1 -0
  102. package/build/tools/vault/types/collect_context.d.ts +249 -249
  103. package/build/tools/vault/types/collect_context.js +103 -0
  104. package/build/tools/vault/types/collect_context.js.map +1 -0
  105. package/build/tools/vault/types/list_all.d.ts +14 -14
  106. package/build/tools/vault/types/list_all.js +53 -0
  107. package/build/tools/vault/types/list_all.js.map +1 -0
  108. package/build/tools/vault/types/read_specific.d.ts +18 -18
  109. package/build/tools/vault/types/read_specific.js +41 -0
  110. package/build/tools/vault/types/read_specific.js.map +1 -0
  111. package/build/tools/vault/types/search.d.ts +22 -22
  112. package/build/tools/vault/types/search.js +59 -0
  113. package/build/tools/vault/types/search.js.map +1 -0
  114. package/build/tools/vault/utils/actions/collect_context.d.ts +4 -0
  115. package/build/tools/vault/utils/actions/index_rag.d.ts +2 -0
  116. package/build/tools/vault/utils/actions/index_rag.js +1 -1
  117. package/build/tools/vault/utils/actions/list_all.d.ts +4 -0
  118. package/build/tools/vault/utils/actions/load_memory.d.ts +4 -0
  119. package/build/tools/vault/utils/actions/read.d.ts +4 -0
  120. package/build/tools/vault/utils/actions/search.d.ts +4 -0
  121. package/build/tools/vault/utils/actions/search_semantic.d.ts +3 -0
  122. package/build/tools/vault/utils/actions/search_semantic.js +23 -6
  123. package/build/tools/vault/utils/actions/search_semantic.js.map +1 -1
  124. package/build/tools/vault/utils/actions/stats.d.ts +3 -0
  125. package/build/tools/vault/utils/constants.d.ts +2 -0
  126. package/build/tools/vault/utils/constants.js +3 -0
  127. package/build/tools/vault/utils/constants.js.map +1 -0
  128. package/build/tools/vault/utils/document.d.ts +35 -0
  129. package/build/tools/vault/utils/shared.d.ts +29 -0
  130. package/build/tools/vault/utils/shared.js +75 -0
  131. package/build/tools/vault/utils/shared.js.map +1 -0
  132. package/build/tools/vault/utils.d.ts +8 -0
  133. package/build/tools/vault/utils.js +9 -0
  134. package/build/tools/vault/utils.js.map +1 -0
  135. package/build/tools/write_property/index.js +1 -1
  136. package/build/tools/write_property/params.d.ts +60 -0
  137. package/build/tools/write_property/params.js +52 -0
  138. package/build/tools/write_property/params.js.map +1 -0
  139. package/build/utils/LLMClient.d.ts +1 -3
  140. package/build/utils/LLMClient.js +18 -4
  141. package/build/utils/LLMClient.js.map +1 -1
  142. package/build/utils/RerankerClient.d.ts +38 -4
  143. package/build/utils/RerankerClient.js +2 -1
  144. package/build/utils/RerankerClient.js.map +1 -1
  145. package/build/utils/VaultWatcher.js +35 -28
  146. package/build/utils/VaultWatcher.js.map +1 -1
  147. package/build/utils/getVaultManager.js +1 -1
  148. package/build/utils/processor/types.d.ts +2 -2
  149. package/build/utils/processor/types.js +21 -0
  150. package/build/utils/processor/types.js.map +1 -0
  151. package/build/utils/semaphore.d.ts +7 -0
  152. package/build/utils/semaphore.js +26 -0
  153. package/build/utils/semaphore.js.map +1 -0
  154. package/package.json +3 -2
@@ -0,0 +1,66 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, join } from "node:path";
4
+ export function genreateOrganizationTasks(documents, vaultDirPath) {
5
+ return documents.map((doc) => async () => {
6
+ const docTitle = doc.frontmatter?.title || basename(doc.filePath, ".md");
7
+ const sanitizedTitle = docTitle.replace(/[\\?%*:|"<>]/g, "-");
8
+ const imageLinks = doc.imageLinks || [];
9
+ if (imageLinks.length === 0) {
10
+ return {
11
+ document: doc.filePath,
12
+ status: "skipped",
13
+ message: "No image links found.",
14
+ movedFiles: [],
15
+ };
16
+ }
17
+ const destinationFolder = "images";
18
+ const targetDir = join(destinationFolder, sanitizedTitle);
19
+ const targetDirFullPath = join(vaultDirPath, targetDir);
20
+ await mkdir(targetDirFullPath, { recursive: true });
21
+ const docDir = dirname(doc.filePath);
22
+ const movePromises = imageLinks.map(async (imageName) => {
23
+ const originalImagePath = join(vaultDirPath, imageName);
24
+ const originalImagePathInDocDir = join(docDir, imageName);
25
+ let sourcePath;
26
+ if (existsSync(originalImagePath)) {
27
+ sourcePath = originalImagePath;
28
+ }
29
+ else if (existsSync(originalImagePathInDocDir)) {
30
+ sourcePath = originalImagePathInDocDir;
31
+ }
32
+ else {
33
+ return { imageName, status: "error", reason: "File not found" };
34
+ }
35
+ const newImageName = basename(imageName);
36
+ const newImagePath = join(targetDirFullPath, newImageName);
37
+ const newLinkPath = join(targetDir, newImageName).replace(/\\/g, "/");
38
+ try {
39
+ await rename(sourcePath, newImagePath);
40
+ return {
41
+ originalLink: `![[${imageName}]]`,
42
+ newLink: `![[${newLinkPath}]]`,
43
+ status: "moved",
44
+ };
45
+ }
46
+ catch (e) {
47
+ return { imageName, status: "error", reason: e.message };
48
+ }
49
+ });
50
+ const moveResults = await Promise.all(movePromises);
51
+ let content = await readFile(doc.filePath, "utf-8");
52
+ const successfullyMoved = moveResults.filter((result) => result.status === "moved");
53
+ for (const result of successfullyMoved) {
54
+ content = content.replace(result.originalLink, result.newLink);
55
+ }
56
+ await writeFile(doc.filePath, content, "utf-8");
57
+ return {
58
+ document: doc.filePath,
59
+ status: "success",
60
+ targetDirectory: targetDir,
61
+ movedFiles: successfullyMoved.length,
62
+ errors: moveResults.filter((r) => r.status === "error"),
63
+ };
64
+ });
65
+ }
66
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/organize_attachments/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { CallToolResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
3
+ import { type ObsidianContentQueryParams } from "./params.js";
4
+ export declare const name = "vault";
5
+ export declare const annotations: ToolAnnotations;
6
+ export declare const description = "\n Retrieves and searches the content of Markdown (.md, .mdx) documents stored in an Obsidian vault. Use this tool to find notes related to a specific topic or keyword and understand their core content.\n\n When to use:\n - When you need to find a specific note by its title or a keyword to check its content.\n - When you want to synthesize and summarize information scattered across multiple notes.\n - When looking for answers to questions based on your saved records, such as \"What was the project deadline?\"\n - To discover connections by finding all notes that link to a specific note.\n - When you need to retrieve a list of unfinished tasks (- [ ]) from daily notes or meeting minutes.\n - Use \"search_vault_by_semantic\" for natural language queries that require understanding of the meaning rather than exact keyword matches.\n - Use \"index_vault_to_vectordb\" to manually trigger a full re-indexing of the vault for the vector database.\n\n Returns the content of the most relevant document(s) in text format. It can also include metadata such as the document's title, tags, and creation date.\n\n Requirements: The user's Obsidian Vault path must be correctly configured in an environment variable or a similar setting. For searches, use the exact filename or include core keywords for content-based queries.\n";
7
+ export declare const register: (mcpServer: McpServer) => void;
8
+ export declare const execute: (params: ObsidianContentQueryParams) => Promise<CallToolResult>;
9
+ export declare const shorthandDescription: {
10
+ ko: string;
11
+ en: string;
12
+ };
13
+ declare const _default: {
14
+ name: string;
15
+ description: string;
16
+ annotations: {
17
+ title?: string | undefined;
18
+ readOnlyHint?: boolean | undefined;
19
+ destructiveHint?: boolean | undefined;
20
+ idempotentHint?: boolean | undefined;
21
+ openWorldHint?: boolean | undefined;
22
+ };
23
+ inputSchema: {
24
+ action: import("zod").ZodEnum<["search", "read", "list_all", "stats", "collect_context", "load_memory", "search_vault_by_semantic", "index_vault_to_vectordb"]>;
25
+ keyword: import("zod").ZodOptional<import("zod").ZodString>;
26
+ query: import("zod").ZodOptional<import("zod").ZodString>;
27
+ filename: import("zod").ZodOptional<import("zod").ZodString>;
28
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
29
+ includeContent: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodBoolean>>;
30
+ includeFrontmatter: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodBoolean>>;
31
+ excerptLength: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodNumber>>;
32
+ topic: import("zod").ZodOptional<import("zod").ZodString>;
33
+ scope: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodEnum<["topic", "all"]>>>;
34
+ maxDocs: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodNumber>>;
35
+ maxCharsPerDoc: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodNumber>>;
36
+ memoryMode: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodEnum<["response_only", "vault_note", "both"]>>>;
37
+ continuationToken: import("zod").ZodOptional<import("zod").ZodString>;
38
+ memoryPath: import("zod").ZodOptional<import("zod").ZodString>;
39
+ compressionMode: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodEnum<["aggressive", "balanced", "none"]>>>;
40
+ maxOutputChars: import("zod").ZodOptional<import("zod").ZodNumber>;
41
+ quiet: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodBoolean>>;
42
+ };
43
+ execute: (params: ObsidianContentQueryParams) => Promise<CallToolResult>;
44
+ register: (mcpServer: McpServer) => void;
45
+ shorthandDescription: {
46
+ ko: string;
47
+ en: string;
48
+ };
49
+ };
50
+ export default _default;
@@ -1,4 +1,4 @@
1
- import state from "@/config.js";
1
+ import state from "../../config.js";
2
2
  import { createToolError } from "../../utils/createToolError.js";
3
3
  import { getGlobalVaultManager } from "../../utils/getVaultManager.js";
4
4
  import { recordVaultResponseMetric } from "./metrics.js";
@@ -0,0 +1,25 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ type VaultAction = "search" | "read" | "list_all" | "stats" | "collect_context" | "load_memory" | "search_vault_by_semantic" | "index_vault_to_vectordb";
3
+ type CompressionSummary = {
4
+ mode: "aggressive" | "balanced" | "none";
5
+ estimated_tokens: number;
6
+ truncated: boolean;
7
+ output_chars: number;
8
+ source_chars: number;
9
+ max_output_chars: number | null;
10
+ };
11
+ export type VaultResponseMetric = {
12
+ timestamp: string;
13
+ action: VaultAction;
14
+ mode: CompressionSummary["mode"];
15
+ estimated_tokens: number;
16
+ truncated: boolean;
17
+ doc_count: number;
18
+ output_chars: number;
19
+ source_chars: number;
20
+ max_output_chars: number | null;
21
+ cache_hit?: boolean;
22
+ };
23
+ export declare function buildVaultResponseMetric(action: VaultAction, result: CallToolResult): VaultResponseMetric | null;
24
+ export declare function recordVaultResponseMetric(action: VaultAction, result: CallToolResult): Promise<void>;
25
+ export {};
@@ -0,0 +1,130 @@
1
+ import { appendFile, mkdir } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ function isJsonObject(value) {
4
+ return !!value && typeof value === "object" && !Array.isArray(value);
5
+ }
6
+ function parseFirstTextPayload(result) {
7
+ if (!Array.isArray(result.content)) {
8
+ return null;
9
+ }
10
+ let textPayload = null;
11
+ for (const chunk of result.content) {
12
+ if (chunk.type !== "text") {
13
+ continue;
14
+ }
15
+ if (!("text" in chunk) || typeof chunk.text !== "string") {
16
+ continue;
17
+ }
18
+ textPayload = chunk.text;
19
+ break;
20
+ }
21
+ if (!textPayload)
22
+ return null;
23
+ try {
24
+ const parsed = JSON.parse(textPayload);
25
+ return isJsonObject(parsed) ? parsed : null;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function parseCompression(compression) {
32
+ if (!isJsonObject(compression)) {
33
+ return null;
34
+ }
35
+ const mode = compression["mode"];
36
+ const estimatedTokens = compression["estimated_tokens"];
37
+ const truncated = compression["truncated"];
38
+ const outputChars = compression["output_chars"];
39
+ const sourceChars = compression["source_chars"];
40
+ const maxOutputChars = compression["max_output_chars"];
41
+ if ((mode !== "aggressive" && mode !== "balanced" && mode !== "none") ||
42
+ typeof estimatedTokens !== "number" ||
43
+ typeof truncated !== "boolean" ||
44
+ typeof outputChars !== "number" ||
45
+ typeof sourceChars !== "number" ||
46
+ (maxOutputChars !== null && typeof maxOutputChars !== "number")) {
47
+ return null;
48
+ }
49
+ return {
50
+ mode: mode,
51
+ estimated_tokens: Math.max(0, Math.floor(estimatedTokens)),
52
+ truncated: truncated,
53
+ output_chars: Math.max(0, Math.floor(outputChars)),
54
+ source_chars: Math.max(0, Math.floor(sourceChars)),
55
+ max_output_chars: maxOutputChars === null
56
+ ? null
57
+ : Math.max(0, Math.floor(maxOutputChars)),
58
+ };
59
+ }
60
+ function inferDocCount(action, payload) {
61
+ if (Array.isArray(payload["documents"])) {
62
+ return payload["documents"].length;
63
+ }
64
+ if (typeof payload["documents_count"] === "number") {
65
+ return Math.max(0, Math.floor(payload["documents_count"]));
66
+ }
67
+ if (action === "search" && typeof payload["found"] === "number") {
68
+ return Math.max(0, Math.floor(payload["found"]));
69
+ }
70
+ if (action === "read" &&
71
+ (typeof payload["filename"] === "string" ||
72
+ typeof payload["fullPath"] === "string" ||
73
+ typeof payload["filePath"] === "string")) {
74
+ return 1;
75
+ }
76
+ return 0;
77
+ }
78
+ function parseCacheHit(payload) {
79
+ const cache = payload["cache"];
80
+ if (!isJsonObject(cache)) {
81
+ return undefined;
82
+ }
83
+ if (typeof cache["hit"] !== "boolean") {
84
+ return undefined;
85
+ }
86
+ return cache["hit"];
87
+ }
88
+ export function buildVaultResponseMetric(action, result) {
89
+ if (result.isError) {
90
+ return null;
91
+ }
92
+ const payload = parseFirstTextPayload(result);
93
+ if (!payload) {
94
+ return null;
95
+ }
96
+ const compression = parseCompression(payload["compression"]);
97
+ if (!compression) {
98
+ return null;
99
+ }
100
+ return {
101
+ timestamp: new Date().toISOString(),
102
+ action,
103
+ mode: compression.mode,
104
+ estimated_tokens: compression.estimated_tokens,
105
+ truncated: compression.truncated,
106
+ doc_count: inferDocCount(action, payload),
107
+ output_chars: compression.output_chars,
108
+ source_chars: compression.source_chars,
109
+ max_output_chars: compression.max_output_chars,
110
+ cache_hit: parseCacheHit(payload),
111
+ };
112
+ }
113
+ export async function recordVaultResponseMetric(action, result) {
114
+ const logPath = process.env["VAULT_METRICS_LOG_PATH"]?.trim();
115
+ if (!logPath) {
116
+ return;
117
+ }
118
+ const metric = buildVaultResponseMetric(action, result);
119
+ if (!metric) {
120
+ return;
121
+ }
122
+ try {
123
+ await mkdir(dirname(logPath), { recursive: true });
124
+ await appendFile(logPath, `${JSON.stringify(metric)}\n`, "utf8");
125
+ }
126
+ catch {
127
+ // Metrics logging should never fail tool execution.
128
+ }
129
+ }
130
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/tools/vault/metrics.ts"],"names":[],"mappings":"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"}
@@ -36,39 +36,39 @@ export declare const obsidianContentQueryParamsZod: z.ZodObject<{
36
36
  maxOutputChars: z.ZodOptional<z.ZodNumber>;
37
37
  quiet: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
38
38
  }, "strip", z.ZodTypeAny, {
39
- action: "search" | "collect_context" | "stats" | "read" | "list_all" | "load_memory" | "search_vault_by_semantic" | "index_vault_to_vectordb";
39
+ action: "search" | "read" | "list_all" | "stats" | "collect_context" | "load_memory" | "search_vault_by_semantic" | "index_vault_to_vectordb";
40
40
  quiet?: boolean | undefined;
41
41
  filename?: string | undefined;
42
42
  keyword?: string | undefined;
43
43
  topic?: string | undefined;
44
- scope?: "topic" | "all" | undefined;
45
- maxDocs?: number | undefined;
46
- maxCharsPerDoc?: number | undefined;
47
- memoryMode?: "response_only" | "vault_note" | "both" | undefined;
48
44
  query?: string | undefined;
49
45
  limit?: number | undefined;
50
46
  includeContent?: boolean | undefined;
51
47
  includeFrontmatter?: boolean | undefined;
52
48
  excerptLength?: number | undefined;
49
+ scope?: "topic" | "all" | undefined;
50
+ maxDocs?: number | undefined;
51
+ maxCharsPerDoc?: number | undefined;
52
+ memoryMode?: "response_only" | "vault_note" | "both" | undefined;
53
53
  continuationToken?: string | undefined;
54
54
  memoryPath?: string | undefined;
55
55
  compressionMode?: "aggressive" | "balanced" | "none" | undefined;
56
56
  maxOutputChars?: number | undefined;
57
57
  }, {
58
- action: "search" | "collect_context" | "stats" | "read" | "list_all" | "load_memory" | "search_vault_by_semantic" | "index_vault_to_vectordb";
58
+ action: "search" | "read" | "list_all" | "stats" | "collect_context" | "load_memory" | "search_vault_by_semantic" | "index_vault_to_vectordb";
59
59
  quiet?: boolean | undefined;
60
60
  filename?: string | undefined;
61
61
  keyword?: string | undefined;
62
62
  topic?: string | undefined;
63
- scope?: "topic" | "all" | undefined;
64
- maxDocs?: number | undefined;
65
- maxCharsPerDoc?: number | undefined;
66
- memoryMode?: "response_only" | "vault_note" | "both" | undefined;
67
63
  query?: string | undefined;
68
64
  limit?: number | undefined;
69
65
  includeContent?: boolean | undefined;
70
66
  includeFrontmatter?: boolean | undefined;
71
67
  excerptLength?: number | undefined;
68
+ scope?: "topic" | "all" | undefined;
69
+ maxDocs?: number | undefined;
70
+ maxCharsPerDoc?: number | undefined;
71
+ memoryMode?: "response_only" | "vault_note" | "both" | undefined;
72
72
  continuationToken?: string | undefined;
73
73
  memoryPath?: string | undefined;
74
74
  compressionMode?: "aggressive" | "balanced" | "none" | undefined;
@@ -80,12 +80,12 @@ export declare const aiInstructionsSchema: z.ZodObject<{
80
80
  usage: z.ZodString;
81
81
  content_type: z.ZodString;
82
82
  }, "strip", z.ZodTypeAny, {
83
- usage: string;
84
83
  purpose: string;
84
+ usage: string;
85
85
  content_type: string;
86
86
  }, {
87
- usage: string;
88
87
  purpose: string;
88
+ usage: string;
89
89
  content_type: string;
90
90
  }>;
91
91
  export declare const metadataSchema: z.ZodObject<{
@@ -0,0 +1,148 @@
1
+ import { z } from "zod";
2
+ export const responseTypeSchema = z
3
+ .enum(["text", "audio", "image", "resource", "resource_link"])
4
+ .describe("The type of content being returned");
5
+ export const compressionModeSchema = z
6
+ .enum(["aggressive", "balanced", "none"])
7
+ .default("balanced")
8
+ .describe("Compression strategy for tool output. aggressive: smallest output, balanced: default, none: keep as much original content as possible.");
9
+ const maxOutputCharsSchema = z
10
+ .number()
11
+ .min(500)
12
+ .max(12000)
13
+ .describe("Optional hard cap for output size in characters. Helps control token cost in long responses.");
14
+ const quietMode = z
15
+ .boolean()
16
+ .default(true)
17
+ .describe("If true, suppresses non-error output messages. Default is false.");
18
+ // input properties schema
19
+ export const obsidianContentActions = z
20
+ .enum([
21
+ "search",
22
+ "read",
23
+ "list_all",
24
+ "stats",
25
+ "collect_context",
26
+ "load_memory",
27
+ "search_vault_by_semantic",
28
+ "index_vault_to_vectordb",
29
+ ])
30
+ .describe("The action to perform: search documents, read specific file, list all content, get stats, collect contextual memory packets, load stored memory, semantic search, or trigger indexing");
31
+ export const obsidianContentKeyword = z
32
+ .string()
33
+ .describe("Keyword to search for in documents (required for search action)");
34
+ export const obsidianContentQuery = z
35
+ .string()
36
+ .describe("Natural language query for semantic search (required for search_vault_by_semantic action)");
37
+ export const obsidianContentFilename = z
38
+ .string()
39
+ .describe("Specific filename to read (required for read action)");
40
+ export const obsidianContentLimit = z
41
+ .number()
42
+ .min(1)
43
+ .max(100)
44
+ .describe("Maximum number of results to return (default: 10 for search, unlimited for others)");
45
+ export const obsidianContentIncludeContent = z
46
+ .boolean()
47
+ .default(true)
48
+ .describe("Whether to include document content in search results (default: true)");
49
+ export const obsidianContentIncludeFrontmatter = z
50
+ .boolean()
51
+ .default(false)
52
+ .describe("Whether to include frontmatter metadata in results (default: false)");
53
+ export const obsidianContentExcerptLength = z
54
+ .number()
55
+ .min(100)
56
+ .max(2000)
57
+ .default(500)
58
+ .describe("Length of content excerpt to include in search results (default: 500)");
59
+ export const obsidianContentTopic = z
60
+ .string()
61
+ .min(1)
62
+ .describe("Topic to collect contextual memory for (collect_context action)");
63
+ export const obsidianContentScope = z
64
+ .enum(["topic", "all"])
65
+ .default("topic")
66
+ .describe("Scope for collect_context. topic: collect docs relevant to topic, all: collect from the entire vault.");
67
+ export const obsidianContentMaxDocs = z
68
+ .number()
69
+ .int()
70
+ .min(1)
71
+ .max(100)
72
+ .default(20)
73
+ .describe("Maximum number of documents to process for collect_context");
74
+ export const obsidianContentMaxCharsPerDoc = z
75
+ .number()
76
+ .int()
77
+ .min(200)
78
+ .max(8000)
79
+ .default(1800)
80
+ .describe("Maximum number of characters extracted per document for collect_context");
81
+ export const obsidianContentMemoryMode = z
82
+ .enum(["response_only", "vault_note", "both"])
83
+ .default("response_only")
84
+ .describe("Memory output mode for collect_context. response_only: return packet only, vault_note: save to vault note only, both: return and save.");
85
+ export const obsidianContentContinuationToken = z
86
+ .string()
87
+ .min(1)
88
+ .describe("Continuation token to resume a previous collect_context batch operation");
89
+ export const obsidianContentMemoryPath = z
90
+ .string()
91
+ .describe("Path to a stored memory note for load_memory (default: memory/context_memory_snapshot.v1.md)");
92
+ // input schema
93
+ export const obsidianContentQueryParamsZod = z.object({
94
+ action: obsidianContentActions,
95
+ keyword: obsidianContentKeyword.optional(),
96
+ query: obsidianContentQuery.optional(),
97
+ filename: obsidianContentFilename.optional(),
98
+ limit: obsidianContentLimit.optional(),
99
+ includeContent: obsidianContentIncludeContent.optional(),
100
+ includeFrontmatter: obsidianContentIncludeFrontmatter.optional(),
101
+ excerptLength: obsidianContentExcerptLength.optional(),
102
+ topic: obsidianContentTopic.optional(),
103
+ scope: obsidianContentScope.optional(),
104
+ maxDocs: obsidianContentMaxDocs.optional(),
105
+ maxCharsPerDoc: obsidianContentMaxCharsPerDoc.optional(),
106
+ memoryMode: obsidianContentMemoryMode.optional(),
107
+ continuationToken: obsidianContentContinuationToken.optional(),
108
+ memoryPath: obsidianContentMemoryPath.optional(),
109
+ compressionMode: compressionModeSchema.optional(),
110
+ maxOutputChars: maxOutputCharsSchema.optional(),
111
+ quiet: quietMode.optional(),
112
+ });
113
+ export const aiInstructionsSchema = z
114
+ .object({
115
+ purpose: z
116
+ .string()
117
+ .describe("The purpose of providing this content to the AI"),
118
+ usage: z.string().describe("How the AI should use this content"),
119
+ content_type: z
120
+ .string()
121
+ .describe("The format of the content, e.g., markdown"),
122
+ })
123
+ .describe("Instructions for AI on how to process the document content");
124
+ export const metadataSchema = z
125
+ .object({
126
+ fullPath: z.string().describe("The full path to the file in the vault"),
127
+ title: z
128
+ .string()
129
+ .nullable()
130
+ .describe("The title of the document, if available"),
131
+ tags: z
132
+ .array(z.string())
133
+ .describe("List of tags associated with the document"),
134
+ category: z.string().describe("Category of the document, if available"),
135
+ date: z
136
+ .string()
137
+ .nullable()
138
+ .describe("Creation date of the document in ISO 8601 format, if available"),
139
+ summary: z
140
+ .string()
141
+ .nullable()
142
+ .describe("Brief summary or abstract of the document, if available"),
143
+ completed: z
144
+ .boolean()
145
+ .describe("Indicates whether a task or item is completed"),
146
+ })
147
+ .describe("Metadata extracted from the document frontmatter, if available");
148
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/tools/vault/params.ts"],"names":[],"mappings":"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"}