@sunub/obsidian-mcp-server 0.3.0 → 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 (128) hide show
  1. package/README.md +21 -5
  2. package/build/cli/app.d.ts +1 -0
  3. package/build/cli/colors.d.ts +15 -0
  4. package/build/cli/colors.js +15 -0
  5. package/build/cli/colors.js.map +1 -0
  6. package/build/cli/commands/types.d.ts +19 -0
  7. package/build/cli/commands/types.js +11 -0
  8. package/build/cli/commands/types.js.map +1 -0
  9. package/build/cli/config/mcpServersConfig.d.ts +15 -3
  10. package/build/cli/config/mcpServersConfig.js +1 -1
  11. package/build/cli/config/mcpServersConfig.js.map +1 -1
  12. package/build/cli/constants.d.ts +47 -0
  13. package/build/cli/constants.js +101 -0
  14. package/build/cli/constants.js.map +1 -0
  15. package/build/cli/index.d.ts +1 -0
  16. package/build/cli/index.js +16 -4
  17. package/build/cli/index.js.map +1 -1
  18. package/build/cli/key/input.d.ts +5 -0
  19. package/build/cli/key/input.js +9 -0
  20. package/build/cli/key/input.js.map +1 -0
  21. package/build/cli/key/mouse.d.ts +23 -0
  22. package/build/cli/key/mouse.js +155 -0
  23. package/build/cli/key/mouse.js.map +1 -0
  24. package/build/cli/key/text-buffer-bestcase.d.ts +867 -0
  25. package/build/cli/key/text-buffer.d.ts +509 -0
  26. package/build/cli/main.d.ts +1 -0
  27. package/build/cli/main.js +20 -0
  28. package/build/cli/main.js.map +1 -0
  29. package/build/cli/reference/text-buffer.d.ts +867 -0
  30. package/build/cli/reference/text-buffer.js +2754 -0
  31. package/build/cli/reference/text-buffer.js.map +1 -0
  32. package/build/cli/theme/builtin/default-dark.d.ts +7 -0
  33. package/build/cli/theme/builtin/default-dark.js +143 -0
  34. package/build/cli/theme/builtin/default-dark.js.map +1 -0
  35. package/build/cli/theme/builtin/no-color.d.ts +7 -0
  36. package/build/cli/theme/builtin/tokyonight-dark.d.ts +7 -0
  37. package/build/cli/theme/semantic-colors.d.ts +2 -0
  38. package/build/cli/theme/semantic-tokens.d.ts +42 -0
  39. package/build/cli/theme/theme.d.ts +107 -0
  40. package/build/cli/tmp.d.ts +1 -0
  41. package/build/cli/utils/cache.d.ts +21 -0
  42. package/build/cli/utils/cache.js +56 -0
  43. package/build/cli/utils/cache.js.map +1 -0
  44. package/build/cli/utils/debugLogger.js +5 -5
  45. package/build/cli/utils/debugLogger.js.map +1 -1
  46. package/build/config.d.ts +30 -0
  47. package/build/config.js +1 -1
  48. package/build/config.js.map +1 -1
  49. package/build/db.d.ts +1 -0
  50. package/build/index.d.ts +2 -0
  51. package/build/index.js +4 -2
  52. package/build/index.js.map +1 -1
  53. package/build/server.d.ts +2 -0
  54. package/build/server.js +39 -0
  55. package/build/server.js.map +1 -0
  56. package/build/tools/create_document_with_properties/params.d.ts +2 -2
  57. package/build/tools/create_document_with_properties/params.js +33 -0
  58. package/build/tools/create_document_with_properties/params.js.map +1 -0
  59. package/build/tools/generate_property/index.d.ts +34 -0
  60. package/build/tools/generate_property/params.d.ts +48 -0
  61. package/build/tools/generate_property/params.js +55 -0
  62. package/build/tools/generate_property/params.js.map +1 -0
  63. package/build/tools/index.js +13 -0
  64. package/build/tools/index.js.map +1 -0
  65. package/build/tools/organize_attachments/index.d.ts +32 -0
  66. package/build/tools/organize_attachments/params.d.ts +16 -16
  67. package/build/tools/organize_attachments/params.js +61 -0
  68. package/build/tools/organize_attachments/params.js.map +1 -0
  69. package/build/tools/organize_attachments/utils.d.ts +22 -0
  70. package/build/tools/organize_attachments/utils.js +66 -0
  71. package/build/tools/organize_attachments/utils.js.map +1 -0
  72. package/build/tools/vault/index.d.ts +50 -0
  73. package/build/tools/vault/metrics.d.ts +25 -0
  74. package/build/tools/vault/metrics.js +130 -0
  75. package/build/tools/vault/metrics.js.map +1 -0
  76. package/build/tools/vault/params.d.ts +12 -12
  77. package/build/tools/vault/params.js +148 -0
  78. package/build/tools/vault/params.js.map +1 -0
  79. package/build/tools/vault/types/collect_context.d.ts +249 -249
  80. package/build/tools/vault/types/collect_context.js +103 -0
  81. package/build/tools/vault/types/collect_context.js.map +1 -0
  82. package/build/tools/vault/types/list_all.d.ts +14 -14
  83. package/build/tools/vault/types/list_all.js +53 -0
  84. package/build/tools/vault/types/list_all.js.map +1 -0
  85. package/build/tools/vault/types/read_specific.d.ts +18 -18
  86. package/build/tools/vault/types/read_specific.js +41 -0
  87. package/build/tools/vault/types/read_specific.js.map +1 -0
  88. package/build/tools/vault/types/search.d.ts +22 -22
  89. package/build/tools/vault/types/search.js +59 -0
  90. package/build/tools/vault/types/search.js.map +1 -0
  91. package/build/tools/vault/utils/actions/collect_context.d.ts +4 -0
  92. package/build/tools/vault/utils/actions/index_rag.d.ts +2 -0
  93. package/build/tools/vault/utils/actions/list_all.d.ts +4 -0
  94. package/build/tools/vault/utils/actions/load_memory.d.ts +4 -0
  95. package/build/tools/vault/utils/actions/read.d.ts +4 -0
  96. package/build/tools/vault/utils/actions/search.d.ts +4 -0
  97. package/build/tools/vault/utils/actions/search_semantic.d.ts +3 -0
  98. package/build/tools/vault/utils/actions/search_semantic.js +23 -6
  99. package/build/tools/vault/utils/actions/search_semantic.js.map +1 -1
  100. package/build/tools/vault/utils/actions/stats.d.ts +3 -0
  101. package/build/tools/vault/utils/constants.d.ts +2 -0
  102. package/build/tools/vault/utils/constants.js +3 -0
  103. package/build/tools/vault/utils/constants.js.map +1 -0
  104. package/build/tools/vault/utils/document.d.ts +35 -0
  105. package/build/tools/vault/utils/shared.d.ts +29 -0
  106. package/build/tools/vault/utils/shared.js +75 -0
  107. package/build/tools/vault/utils/shared.js.map +1 -0
  108. package/build/tools/vault/utils.d.ts +8 -0
  109. package/build/tools/vault/utils.js +9 -0
  110. package/build/tools/vault/utils.js.map +1 -0
  111. package/build/tools/write_property/params.d.ts +60 -0
  112. package/build/tools/write_property/params.js +52 -0
  113. package/build/tools/write_property/params.js.map +1 -0
  114. package/build/utils/LLMClient.d.ts +1 -3
  115. package/build/utils/LLMClient.js +18 -4
  116. package/build/utils/LLMClient.js.map +1 -1
  117. package/build/utils/RerankerClient.d.ts +38 -4
  118. package/build/utils/RerankerClient.js +2 -1
  119. package/build/utils/RerankerClient.js.map +1 -1
  120. package/build/utils/VaultWatcher.js +35 -28
  121. package/build/utils/VaultWatcher.js.map +1 -1
  122. package/build/utils/processor/types.d.ts +2 -2
  123. package/build/utils/processor/types.js +21 -0
  124. package/build/utils/processor/types.js.map +1 -0
  125. package/build/utils/semaphore.d.ts +7 -0
  126. package/build/utils/semaphore.js +26 -0
  127. package/build/utils/semaphore.js.map +1 -0
  128. package/package.json +4 -2
package/README.md CHANGED
@@ -251,7 +251,8 @@ npx -y @sunub/obsidian-mcp-server@latest --vault-path /abs/path/to/your/vault --
251
251
  "LLM_API_URL": "http://127.0.0.1:8080",
252
252
  "LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
253
253
  "LLM_EMBEDDING_MODEL": "nomic-embed-text",
254
- "LLM_CHAT_MODEL": "llama3"
254
+ "LLM_CHAT_MODEL": "llama3",
255
+ "LLM_RERANKER_API_URL": "http://127.0.0.1:8082"
255
256
  }
256
257
  }
257
258
  }
@@ -307,12 +308,27 @@ pm2 start ecosystem.config.cjs --only llama-embedding-server
307
308
 
308
309
  내부 동작:
309
310
 
311
+
310
312
  ```json
311
313
  {
312
- "method": "tools/call",
313
- "params": {
314
- "name": "vault",
315
- "arguments": { "action": "index_vault_to_vectordb" }
314
+ "mcpServers": {
315
+ "obsidian": {
316
+ "command": "npx",
317
+ "args": [
318
+ "-y",
319
+ "@sunub/obsidian-mcp-server@latest"
320
+ ],
321
+ "env": {
322
+ "VAULT_DIR_PATH": "/path/to/obsidian-vault",
323
+ "VAULT_METRICS_LOG_PATH": "/path/to/vault-metrics.ndjson",
324
+ "LOGGING_LEVEL": "info",
325
+ "LLM_API_URL": "http://127.0.0.1:8080",
326
+ "LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
327
+ "LLM_EMBEDDING_MODEL": "nomic-embed-text",
328
+ "LLM_CHAT_MODEL": "llama3",
329
+ "LLM_RERANKER_API_URL": "http://127.0.0.1:8082"
330
+ }
331
+ }
316
332
  }
317
333
  }
318
334
  ```
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Shared color constants for the CLI UI.
3
+ */
4
+ export declare const Colors: {
5
+ readonly Gray: "#808080";
6
+ readonly DimGray: "#696969";
7
+ readonly LightGray: "#d3d3d3";
8
+ readonly Cyan: "#00bcd4";
9
+ readonly Green: "#4caf50";
10
+ readonly Yellow: "#ffeb3b";
11
+ readonly Red: "#f44336";
12
+ readonly White: "#ffffff";
13
+ readonly Black: "#000000";
14
+ };
15
+ export type ColorKey = keyof typeof Colors;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Shared color constants for the CLI UI.
3
+ */
4
+ export const Colors = {
5
+ Gray: "#808080",
6
+ DimGray: "#696969",
7
+ LightGray: "#d3d3d3",
8
+ Cyan: "#00bcd4",
9
+ Green: "#4caf50",
10
+ Yellow: "#ffeb3b",
11
+ Red: "#f44336",
12
+ White: "#ffffff",
13
+ Black: "#000000",
14
+ };
15
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;CACP,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare enum CommandKind {
2
+ BUILT_IN = "built-in",
3
+ USER_FILE = "user-file",
4
+ WORKSPACE_FILE = "workspace-file",
5
+ EXTENSION_FILE = "extension-file",
6
+ MCP_PROMPT = "mcp-prompt",
7
+ AGENT = "agent",
8
+ SKILL = "skill"
9
+ }
10
+ export interface SlashCommand {
11
+ name: string;
12
+ description?: string;
13
+ action?: (args: string) => void | Promise<void>;
14
+ completion?: (query: string) => Promise<string[]>;
15
+ subcommands?: SlashCommand[];
16
+ }
17
+ export interface CommandContext {
18
+ [key: string]: unknown;
19
+ }
@@ -0,0 +1,11 @@
1
+ export var CommandKind;
2
+ (function (CommandKind) {
3
+ CommandKind["BUILT_IN"] = "built-in";
4
+ CommandKind["USER_FILE"] = "user-file";
5
+ CommandKind["WORKSPACE_FILE"] = "workspace-file";
6
+ CommandKind["EXTENSION_FILE"] = "extension-file";
7
+ CommandKind["MCP_PROMPT"] = "mcp-prompt";
8
+ CommandKind["AGENT"] = "agent";
9
+ CommandKind["SKILL"] = "skill";
10
+ })(CommandKind || (CommandKind = {}));
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAQX;AARD,WAAY,WAAW;IACtB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,gDAAiC,CAAA;IACjC,gDAAiC,CAAA;IACjC,wCAAyB,CAAA;IACzB,8BAAe,CAAA;IACf,8BAAe,CAAA;AAChB,CAAC,EARW,WAAW,KAAX,WAAW,QAQtB"}
@@ -1,11 +1,23 @@
1
- import { z } from "zod/v4";
1
+ import { z } from "zod";
2
2
  declare const mcpServerEntrySchema: z.ZodObject<{
3
3
  command: z.ZodString;
4
- args: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
4
+ args: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
5
5
  env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
6
6
  cwd: z.ZodOptional<z.ZodString>;
7
7
  disabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
- }, z.core.$strip>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ command: string;
10
+ args: string[];
11
+ env: Record<string, string>;
12
+ disabled: boolean;
13
+ cwd?: string | undefined;
14
+ }, {
15
+ command: string;
16
+ cwd?: string | undefined;
17
+ args?: string[] | undefined;
18
+ env?: Record<string, string> | undefined;
19
+ disabled?: boolean | undefined;
20
+ }>;
9
21
  export type McpServerEntry = z.infer<typeof mcpServerEntrySchema>;
10
22
  export interface McpServerConfig {
11
23
  name: string;
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { join, resolve } from "node:path";
3
- import { z } from "zod/v4";
3
+ import { z } from "zod";
4
4
  import { configSchema } from "../../config.js";
5
5
  import { debugLogger } from "../utils/debugLogger.js";
6
6
  const mcpServerEntrySchema = z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"mcpServersConfig.js","sourceRoot":"","sources":["../../../src/cli/config/mcpServersConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpServersConfig.js","sourceRoot":"","sources":["../../../src/cli/config/mcpServersConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const SHELL_COMMAND_NAME = "Shell Command";
7
+ export declare const SHELL_NAME = "Shell";
8
+ export declare const MAX_GEMINI_MESSAGE_LINES = 65536;
9
+ export declare const SHELL_FOCUS_HINT_DELAY_MS = 5000;
10
+ export declare const TOOL_STATUS: {
11
+ readonly SUCCESS: "✓";
12
+ readonly PENDING: "o";
13
+ readonly EXECUTING: "⊷";
14
+ readonly CONFIRMING: "?";
15
+ readonly CANCELED: "-";
16
+ readonly ERROR: "x";
17
+ };
18
+ export declare const MAX_MCP_RESOURCES_TO_SHOW = 10;
19
+ export declare const WARNING_PROMPT_DURATION_MS = 3000;
20
+ export declare const QUEUE_ERROR_DISPLAY_DURATION_MS = 3000;
21
+ export declare const SHELL_ACTION_REQUIRED_TITLE_DELAY_MS = 30000;
22
+ export declare const SHELL_SILENT_WORKING_TITLE_DELAY_MS = 120000;
23
+ export declare const EXPAND_HINT_DURATION_MS = 5000;
24
+ export declare const DEFAULT_BACKGROUND_OPACITY = 0.16;
25
+ export declare const DEFAULT_INPUT_BACKGROUND_OPACITY = 0.24;
26
+ export declare const DEFAULT_SELECTION_OPACITY = 0.2;
27
+ export declare const DEFAULT_BORDER_OPACITY = 0.4;
28
+ export declare const KEYBOARD_SHORTCUTS_URL = "https://geminicli.com/docs/cli/keyboard-shortcuts/";
29
+ export declare const LRU_BUFFER_PERF_CACHE_LIMIT = 20000;
30
+ export declare const ACTIVE_SHELL_MAX_LINES = 15;
31
+ export declare const COMPLETED_SHELL_MAX_LINES = 15;
32
+ export declare const SUBAGENT_MAX_LINES = 15;
33
+ /** Minimum terminal width required to show the full context used label */
34
+ export declare const MIN_TERMINAL_WIDTH_FOR_FULL_LABEL = 100;
35
+ /** Default context usage fraction at which to trigger compression */
36
+ export declare const DEFAULT_COMPRESSION_THRESHOLD = 0.5;
37
+ /** Documentation URL for skills setup and configuration */
38
+ export declare const SKILLS_DOCS_URL = "https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md";
39
+ /** Max lines to show for a compact tool subview (e.g. diff) */
40
+ export declare const COMPACT_TOOL_SUBVIEW_MAX_LINES = 15;
41
+ export declare const MAX_SHELL_OUTPUT_SIZE = 10000000;
42
+ export declare const SHELL_OUTPUT_TRUNCATION_BUFFER = 1000000;
43
+ export declare const HELP_COMMAND_MARKER = "__HELP_COMMANDS__";
44
+ export declare const SLASH_COMMANDS: {
45
+ command: string;
46
+ desc: string;
47
+ }[];
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export const SHELL_COMMAND_NAME = "Shell Command";
7
+ export const SHELL_NAME = "Shell";
8
+ // Limit Gemini messages to a very high number of lines to mitigate performance
9
+ // issues in the worst case if we somehow get an enormous response from Gemini.
10
+ // This threshold is arbitrary but should be high enough to never impact normal
11
+ // usage.
12
+ export const MAX_GEMINI_MESSAGE_LINES = 65536;
13
+ export const SHELL_FOCUS_HINT_DELAY_MS = 5000;
14
+ // Tool status symbols used in ToolMessage component
15
+ export const TOOL_STATUS = {
16
+ SUCCESS: "✓",
17
+ PENDING: "o",
18
+ EXECUTING: "⊷",
19
+ CONFIRMING: "?",
20
+ CANCELED: "-",
21
+ ERROR: "x",
22
+ };
23
+ // Maximum number of MCP resources to display per server before truncating
24
+ export const MAX_MCP_RESOURCES_TO_SHOW = 10;
25
+ export const WARNING_PROMPT_DURATION_MS = 3000;
26
+ export const QUEUE_ERROR_DISPLAY_DURATION_MS = 3000;
27
+ export const SHELL_ACTION_REQUIRED_TITLE_DELAY_MS = 30000;
28
+ export const SHELL_SILENT_WORKING_TITLE_DELAY_MS = 120000;
29
+ export const EXPAND_HINT_DURATION_MS = 5000;
30
+ export const DEFAULT_BACKGROUND_OPACITY = 0.16;
31
+ export const DEFAULT_INPUT_BACKGROUND_OPACITY = 0.24;
32
+ export const DEFAULT_SELECTION_OPACITY = 0.2;
33
+ export const DEFAULT_BORDER_OPACITY = 0.4;
34
+ export const KEYBOARD_SHORTCUTS_URL = "https://geminicli.com/docs/cli/keyboard-shortcuts/";
35
+ export const LRU_BUFFER_PERF_CACHE_LIMIT = 20000;
36
+ // Max lines to show for active shell output when not focused
37
+ export const ACTIVE_SHELL_MAX_LINES = 15;
38
+ // Max lines to preserve in history for completed shell commands
39
+ export const COMPLETED_SHELL_MAX_LINES = 15;
40
+ // Max lines to show for subagent results before collapsing
41
+ export const SUBAGENT_MAX_LINES = 15;
42
+ /** Minimum terminal width required to show the full context used label */
43
+ export const MIN_TERMINAL_WIDTH_FOR_FULL_LABEL = 100;
44
+ /** Default context usage fraction at which to trigger compression */
45
+ export const DEFAULT_COMPRESSION_THRESHOLD = 0.5;
46
+ /** Documentation URL for skills setup and configuration */
47
+ export const SKILLS_DOCS_URL = "https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md";
48
+ /** Max lines to show for a compact tool subview (e.g. diff) */
49
+ export const COMPACT_TOOL_SUBVIEW_MAX_LINES = 15;
50
+ // Maximum number of UTF-16 code units to retain in a background task's output
51
+ // buffer. Beyond this, the oldest output is dropped to keep memory bounded.
52
+ // 10 MB is large enough for ~200,000 lines of terminal output and stays well
53
+ // below the V8 string length limit (~1 GB) even with multiple concurrent tasks.
54
+ export const MAX_SHELL_OUTPUT_SIZE = 10_000_000; // 10 MB
55
+ // Truncation is triggered only once the output exceeds
56
+ // MAX_SHELL_OUTPUT_SIZE + SHELL_OUTPUT_TRUNCATION_BUFFER, then sliced back to
57
+ // MAX_SHELL_OUTPUT_SIZE. This avoids an O(n) string copy on every appended
58
+ // chunk, amortizing the cost to once per SHELL_OUTPUT_TRUNCATION_BUFFER bytes
59
+ // of new input (i.e. once per ~1 MB on a busy shell).
60
+ export const SHELL_OUTPUT_TRUNCATION_BUFFER = 1_000_000; // 1 MB
61
+ // --- Added for Help Commands Integration ---
62
+ export const HELP_COMMAND_MARKER = "__HELP_COMMANDS__";
63
+ export const SLASH_COMMANDS = [
64
+ {
65
+ command: "/search <keyword>",
66
+ desc: "Vault 키워드 검색",
67
+ },
68
+ {
69
+ command: '/read "filename"',
70
+ desc: "문서 읽기 (파일명에 따옴표 권장)",
71
+ },
72
+ {
73
+ command: "/semantic <query>",
74
+ desc: "시맨틱(벡터) 검색",
75
+ },
76
+ {
77
+ command: "/stats",
78
+ desc: "Vault 상태 정보",
79
+ },
80
+ {
81
+ command: "/index",
82
+ desc: "벡터 DB 인덱싱 실행",
83
+ },
84
+ {
85
+ command: "/context <topic>",
86
+ desc: "토픽 기반 컨텍스트 수집",
87
+ },
88
+ {
89
+ command: "/tools",
90
+ desc: "사용 가능한 MCP 도구 목록",
91
+ },
92
+ {
93
+ command: "/clear",
94
+ desc: "대화 히스토리 초기화",
95
+ },
96
+ {
97
+ command: "/help",
98
+ desc: "이 도움말 표시",
99
+ },
100
+ ];
101
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cli/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "dotenv/config";
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import chalk from "chalk";
2
3
  import { render } from "ink";
3
4
  import { AppContainer } from "./AppContainer.js";
4
5
  import { debugLogger } from "./utils/debugLogger.js";
@@ -9,19 +10,30 @@ async function checkLLMHealth() {
9
10
  const response = await fetch(`${apiUrl}/v1/models`);
10
11
  if (!response.ok) {
11
12
  debugLogger.warn(`[CLI] LLM endpoint ${apiUrl} returned ${response.status}. Continuing anyway...`);
12
- return;
13
+ return false;
13
14
  }
14
15
  debugLogger.info(`[CLI] Successfully verified LLM API at ${apiUrl}.`);
16
+ return true;
15
17
  }
16
18
  catch (_error) {
17
19
  debugLogger.warn(`[CLI] Could not connect to LLM API at ${apiUrl}. Make sure your server is running.`);
20
+ const errorMessage = "[ERROR] LLM Server Connection Failed\n\nTo use semantic search and RAG features, a local LLM server (such as llama.cpp) must be running.\n\n[Action Required]\n1. Start your local LLM server.\n2. Ensure the environment variables (LLM_API_URL, LLM_EMBEDDING_API_URL) correctly match the running server's URL.\n3. Restart the service with the synchronized settings.";
21
+ debugLogger.error(errorMessage);
22
+ return false;
18
23
  }
19
24
  }
20
25
  async function start() {
21
26
  debugLogger.info("App starting - verifying environment.");
22
- checkLLMHealth().catch(() => { });
23
- const { waitUntilExit } = render(_jsx(AppContainer, {}));
24
- await waitUntilExit();
27
+ const isHealthy = await checkLLMHealth();
28
+ if (isHealthy) {
29
+ const { waitUntilExit } = render(_jsx(AppContainer, {}));
30
+ await waitUntilExit();
31
+ console.log(chalk.yellow("\n[Notice] CLI Agent has exited."));
32
+ console.log(chalk.gray("If you have LLM or MCP servers running via PM2, you can manage them with:"));
33
+ console.log(chalk.cyan(" pm2 status # Check process status"));
34
+ console.log(chalk.cyan(" pm2 stop all # Stop all processes"));
35
+ debugLogger.info("App exited gracefully.");
36
+ }
25
37
  }
26
38
  start();
27
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,eAAe,CAAC;AAEvB,KAAK,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,uBAAuB,CACrD,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,CACf,sBAAsB,MAAM,aAAa,QAAQ,CAAC,MAAM,wBAAwB,CAChF,CAAC;YACF,OAAO;QACR,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,0CAA0C,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CACf,yCAAyC,MAAM,qCAAqC,CACpF,CAAC;IACH,CAAC;AACF,CAAC;AAED,KAAK,UAAU,KAAK;IACnB,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC1D,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC;IACnD,MAAM,aAAa,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,eAAe,CAAC;AAEvB,KAAK,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,uBAAuB,CACrD,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,CACf,sBAAsB,MAAM,aAAa,QAAQ,CAAC,MAAM,wBAAwB,CAChF,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,0CAA0C,MAAM,GAAG,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CACf,yCAAyC,MAAM,qCAAqC,CACpF,CAAC;QACF,MAAM,YAAY,GACjB,4WAA4W,CAAC;QAC9W,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,KAAK,UAAU,KAAK;IACnB,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC;QACnD,MAAM,aAAa,EAAE,CAAC;QAEtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,2EAA2E,CAC3E,CACD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAEtE,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;AACF,CAAC;AAED,KAAK,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const ESC = "\u001B";
2
+ export declare const SGR_EVENT_PREFIX = "\u001B[<";
3
+ export declare const X11_EVENT_PREFIX = "\u001B[M";
4
+ export declare const SGR_MOUSE_REGEX: RegExp;
5
+ export declare const X11_MOUSE_REGEX: RegExp;
@@ -0,0 +1,9 @@
1
+ export const ESC = "\u001b";
2
+ export const SGR_EVENT_PREFIX = `${ESC}[<`;
3
+ export const X11_EVENT_PREFIX = `${ESC}[M`;
4
+ // biome-ignore lint/suspicious/noControlCharactersInRegex:터미널 입력을 파싱하기 위한 정규식입니다.
5
+ export const SGR_MOUSE_REGEX = /^\x1b\[<(\d+);(\d+);(\d+)([mM])/; // SGR mouse events
6
+ // X11 is ESC [ M followed by 3 bytes.
7
+ // biome-ignore lint/suspicious/noControlCharactersInRegex:터미널 입력을 파싱하기 위한 정규식입니다.
8
+ export const X11_MOUSE_REGEX = /^\x1b\[M([\s\S]{3})/;
9
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/cli/key/input.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;AAE3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,iCAAiC,CAAC,CAAC,mBAAmB;AACrF,sCAAsC;AAEtC,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type MouseEventName = "left-press" | "left-release" | "right-press" | "right-release" | "middle-press" | "middle-release" | "scroll-up" | "scroll-down" | "scroll-left" | "scroll-right" | "move" | "double-click";
2
+ export interface MouseEvent {
3
+ name: MouseEventName;
4
+ col: number;
5
+ row: number;
6
+ shift: boolean;
7
+ meta: boolean;
8
+ ctrl: boolean;
9
+ button: "left" | "middle" | "right" | "none";
10
+ }
11
+ export declare function getMouseEventName(buttonCode: number, isRelease: boolean): MouseEventName | null;
12
+ export declare function parseX11MouseEvent(buffer: string): {
13
+ event: MouseEvent;
14
+ length: number;
15
+ } | null;
16
+ export declare function parseSGRMouseEvent(buffer: string): {
17
+ event: MouseEvent;
18
+ length: number;
19
+ } | null;
20
+ export declare function parseMouseEvent(buffer: string): {
21
+ event: MouseEvent;
22
+ length: number;
23
+ } | null;
@@ -0,0 +1,155 @@
1
+ import { SGR_MOUSE_REGEX, X11_MOUSE_REGEX } from "./input.js";
2
+ function getButtonFromCode(code) {
3
+ const button = code & 3;
4
+ switch (button) {
5
+ case 0:
6
+ return "left";
7
+ case 1:
8
+ return "middle";
9
+ case 2:
10
+ return "right";
11
+ default:
12
+ return "none";
13
+ }
14
+ }
15
+ export function getMouseEventName(buttonCode, isRelease) {
16
+ const isMove = (buttonCode & 32) !== 0;
17
+ if (buttonCode === 66) {
18
+ return "scroll-left";
19
+ }
20
+ else if (buttonCode === 67) {
21
+ return "scroll-right";
22
+ }
23
+ else if ((buttonCode & 64) === 64) {
24
+ if ((buttonCode & 1) === 0) {
25
+ return "scroll-up";
26
+ }
27
+ else {
28
+ return "scroll-down";
29
+ }
30
+ }
31
+ else if (isMove) {
32
+ return "move";
33
+ }
34
+ else {
35
+ const button = buttonCode & 3;
36
+ const type = isRelease ? "release" : "press";
37
+ switch (button) {
38
+ case 0:
39
+ return `left-${type}`;
40
+ case 1:
41
+ return `middle-${type}`;
42
+ case 2:
43
+ return `right-${type}`;
44
+ default:
45
+ return null;
46
+ }
47
+ }
48
+ }
49
+ export function parseX11MouseEvent(buffer) {
50
+ const match = buffer.match(X11_MOUSE_REGEX);
51
+ if (!match)
52
+ return null;
53
+ // The 3 bytes are in match[1]
54
+ const b = match[1].charCodeAt(0) - 32;
55
+ const col = match[1].charCodeAt(1) - 32;
56
+ const row = match[1].charCodeAt(2) - 32;
57
+ const shift = (b & 4) !== 0;
58
+ const meta = (b & 8) !== 0;
59
+ const ctrl = (b & 16) !== 0;
60
+ const isMove = (b & 32) !== 0;
61
+ const isWheel = (b & 64) !== 0;
62
+ let name = null;
63
+ if (isWheel) {
64
+ const button = b & 3;
65
+ switch (button) {
66
+ case 0:
67
+ name = "scroll-up";
68
+ break;
69
+ case 1:
70
+ name = "scroll-down";
71
+ break;
72
+ default:
73
+ break;
74
+ }
75
+ }
76
+ else if (isMove) {
77
+ name = "move";
78
+ }
79
+ else {
80
+ const button = b & 3;
81
+ if (button === 3) {
82
+ // X11 reports 'release' (3) for all button releases without specifying which one.
83
+ // We'll default to 'left-release' as a best-effort guess if we don't track state.
84
+ name = "left-release";
85
+ }
86
+ else {
87
+ switch (button) {
88
+ case 0:
89
+ name = "left-press";
90
+ break;
91
+ case 1:
92
+ name = "middle-press";
93
+ break;
94
+ case 2:
95
+ name = "right-press";
96
+ break;
97
+ default:
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ if (name) {
103
+ let button = getButtonFromCode(b);
104
+ if (name === "left-release" && button === "none") {
105
+ button = "left";
106
+ }
107
+ return {
108
+ event: {
109
+ name,
110
+ ctrl,
111
+ meta,
112
+ shift,
113
+ col,
114
+ row,
115
+ button,
116
+ },
117
+ length: match[0].length,
118
+ };
119
+ }
120
+ return null;
121
+ }
122
+ export function parseSGRMouseEvent(buffer) {
123
+ const match = buffer.match(SGR_MOUSE_REGEX);
124
+ if (match) {
125
+ const buttonCode = parseInt(match[1], 10);
126
+ const col = parseInt(match[2], 10);
127
+ const row = parseInt(match[3], 10);
128
+ const action = match[4];
129
+ const isRelease = action === "m";
130
+ const shift = (buttonCode & 4) !== 0;
131
+ const meta = (buttonCode & 8) !== 0;
132
+ const ctrl = (buttonCode & 16) !== 0;
133
+ const name = getMouseEventName(buttonCode, isRelease);
134
+ if (name) {
135
+ return {
136
+ event: {
137
+ name,
138
+ ctrl,
139
+ meta,
140
+ shift,
141
+ col,
142
+ row,
143
+ button: getButtonFromCode(buttonCode),
144
+ },
145
+ length: match[0].length,
146
+ };
147
+ }
148
+ return null;
149
+ }
150
+ return null;
151
+ }
152
+ export function parseMouseEvent(buffer) {
153
+ return parseSGRMouseEvent(buffer) || parseX11MouseEvent(buffer);
154
+ }
155
+ //# sourceMappingURL=mouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../../src/cli/key/mouse.ts"],"names":[],"mappings":"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"}