@serjm/deepseek-code 0.3.1

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 (216) hide show
  1. package/CONTRIBUTING.md +73 -0
  2. package/README.md +194 -0
  3. package/README.ru.md +194 -0
  4. package/dist/api/index.d.ts +77 -0
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +263 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/cli/headless.d.ts +22 -0
  9. package/dist/cli/headless.d.ts.map +1 -0
  10. package/dist/cli/headless.js +122 -0
  11. package/dist/cli/headless.js.map +1 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +90 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli/interactive.d.ts +18 -0
  17. package/dist/cli/interactive.d.ts.map +1 -0
  18. package/dist/cli/interactive.js +75 -0
  19. package/dist/cli/interactive.js.map +1 -0
  20. package/dist/commands/index.d.ts +30 -0
  21. package/dist/commands/index.d.ts.map +1 -0
  22. package/dist/commands/index.js +964 -0
  23. package/dist/commands/index.js.map +1 -0
  24. package/dist/config/defaults.d.ts +37 -0
  25. package/dist/config/defaults.d.ts.map +1 -0
  26. package/dist/config/defaults.js +39 -0
  27. package/dist/config/defaults.js.map +1 -0
  28. package/dist/config/loader.d.ts +4 -0
  29. package/dist/config/loader.d.ts.map +1 -0
  30. package/dist/config/loader.js +76 -0
  31. package/dist/config/loader.js.map +1 -0
  32. package/dist/core/agent-loop.d.ts +111 -0
  33. package/dist/core/agent-loop.d.ts.map +1 -0
  34. package/dist/core/agent-loop.js +485 -0
  35. package/dist/core/agent-loop.js.map +1 -0
  36. package/dist/core/checkpoint.d.ts +10 -0
  37. package/dist/core/checkpoint.d.ts.map +1 -0
  38. package/dist/core/checkpoint.js +83 -0
  39. package/dist/core/checkpoint.js.map +1 -0
  40. package/dist/core/extensions.d.ts +55 -0
  41. package/dist/core/extensions.d.ts.map +1 -0
  42. package/dist/core/extensions.js +113 -0
  43. package/dist/core/extensions.js.map +1 -0
  44. package/dist/core/git.d.ts +68 -0
  45. package/dist/core/git.d.ts.map +1 -0
  46. package/dist/core/git.js +148 -0
  47. package/dist/core/git.js.map +1 -0
  48. package/dist/core/hooks.d.ts +37 -0
  49. package/dist/core/hooks.d.ts.map +1 -0
  50. package/dist/core/hooks.js +77 -0
  51. package/dist/core/hooks.js.map +1 -0
  52. package/dist/core/i18n.d.ts +90 -0
  53. package/dist/core/i18n.d.ts.map +1 -0
  54. package/dist/core/i18n.js +253 -0
  55. package/dist/core/i18n.js.map +1 -0
  56. package/dist/core/lsp.d.ts +74 -0
  57. package/dist/core/lsp.d.ts.map +1 -0
  58. package/dist/core/lsp.js +239 -0
  59. package/dist/core/lsp.js.map +1 -0
  60. package/dist/core/mcp.d.ts +49 -0
  61. package/dist/core/mcp.d.ts.map +1 -0
  62. package/dist/core/mcp.js +195 -0
  63. package/dist/core/mcp.js.map +1 -0
  64. package/dist/core/memory.d.ts +38 -0
  65. package/dist/core/memory.d.ts.map +1 -0
  66. package/dist/core/memory.js +231 -0
  67. package/dist/core/memory.js.map +1 -0
  68. package/dist/core/metrics.d.ts +36 -0
  69. package/dist/core/metrics.d.ts.map +1 -0
  70. package/dist/core/metrics.js +111 -0
  71. package/dist/core/metrics.js.map +1 -0
  72. package/dist/core/review.d.ts +27 -0
  73. package/dist/core/review.d.ts.map +1 -0
  74. package/dist/core/review.js +201 -0
  75. package/dist/core/review.js.map +1 -0
  76. package/dist/core/sandbox.d.ts +52 -0
  77. package/dist/core/sandbox.d.ts.map +1 -0
  78. package/dist/core/sandbox.js +140 -0
  79. package/dist/core/sandbox.js.map +1 -0
  80. package/dist/core/scheduler.d.ts +56 -0
  81. package/dist/core/scheduler.d.ts.map +1 -0
  82. package/dist/core/scheduler.js +167 -0
  83. package/dist/core/scheduler.js.map +1 -0
  84. package/dist/core/session.d.ts +49 -0
  85. package/dist/core/session.d.ts.map +1 -0
  86. package/dist/core/session.js +127 -0
  87. package/dist/core/session.js.map +1 -0
  88. package/dist/core/skills.d.ts +36 -0
  89. package/dist/core/skills.d.ts.map +1 -0
  90. package/dist/core/skills.js +90 -0
  91. package/dist/core/skills.js.map +1 -0
  92. package/dist/core/subagent.d.ts +45 -0
  93. package/dist/core/subagent.d.ts.map +1 -0
  94. package/dist/core/subagent.js +130 -0
  95. package/dist/core/subagent.js.map +1 -0
  96. package/dist/core/themes.d.ts +35 -0
  97. package/dist/core/themes.d.ts.map +1 -0
  98. package/dist/core/themes.js +188 -0
  99. package/dist/core/themes.js.map +1 -0
  100. package/dist/tools/bash.d.ts +3 -0
  101. package/dist/tools/bash.d.ts.map +1 -0
  102. package/dist/tools/bash.js +92 -0
  103. package/dist/tools/bash.js.map +1 -0
  104. package/dist/tools/chrome-manager.d.ts +35 -0
  105. package/dist/tools/chrome-manager.d.ts.map +1 -0
  106. package/dist/tools/chrome-manager.js +163 -0
  107. package/dist/tools/chrome-manager.js.map +1 -0
  108. package/dist/tools/chrome.d.ts +78 -0
  109. package/dist/tools/chrome.d.ts.map +1 -0
  110. package/dist/tools/chrome.js +1058 -0
  111. package/dist/tools/chrome.js.map +1 -0
  112. package/dist/tools/edit.d.ts +3 -0
  113. package/dist/tools/edit.d.ts.map +1 -0
  114. package/dist/tools/edit.js +81 -0
  115. package/dist/tools/edit.js.map +1 -0
  116. package/dist/tools/glob.d.ts +3 -0
  117. package/dist/tools/glob.d.ts.map +1 -0
  118. package/dist/tools/glob.js +41 -0
  119. package/dist/tools/glob.js.map +1 -0
  120. package/dist/tools/grep.d.ts +3 -0
  121. package/dist/tools/grep.d.ts.map +1 -0
  122. package/dist/tools/grep.js +74 -0
  123. package/dist/tools/grep.js.map +1 -0
  124. package/dist/tools/path-safety.d.ts +3 -0
  125. package/dist/tools/path-safety.d.ts.map +1 -0
  126. package/dist/tools/path-safety.js +19 -0
  127. package/dist/tools/path-safety.js.map +1 -0
  128. package/dist/tools/read.d.ts +3 -0
  129. package/dist/tools/read.d.ts.map +1 -0
  130. package/dist/tools/read.js +58 -0
  131. package/dist/tools/read.js.map +1 -0
  132. package/dist/tools/registry.d.ts +4 -0
  133. package/dist/tools/registry.d.ts.map +1 -0
  134. package/dist/tools/registry.js +43 -0
  135. package/dist/tools/registry.js.map +1 -0
  136. package/dist/tools/types.d.ts +47 -0
  137. package/dist/tools/types.d.ts.map +1 -0
  138. package/dist/tools/types.js +90 -0
  139. package/dist/tools/types.js.map +1 -0
  140. package/dist/tools/write.d.ts +3 -0
  141. package/dist/tools/write.d.ts.map +1 -0
  142. package/dist/tools/write.js +51 -0
  143. package/dist/tools/write.js.map +1 -0
  144. package/dist/ui/activity-cards.d.ts +50 -0
  145. package/dist/ui/activity-cards.d.ts.map +1 -0
  146. package/dist/ui/activity-cards.js +185 -0
  147. package/dist/ui/activity-cards.js.map +1 -0
  148. package/dist/ui/app.d.ts +9 -0
  149. package/dist/ui/app.d.ts.map +1 -0
  150. package/dist/ui/app.js +852 -0
  151. package/dist/ui/app.js.map +1 -0
  152. package/dist/ui/chat-view.d.ts +10 -0
  153. package/dist/ui/chat-view.d.ts.map +1 -0
  154. package/dist/ui/chat-view.js +94 -0
  155. package/dist/ui/chat-view.js.map +1 -0
  156. package/dist/ui/error-boundary.d.ts +13 -0
  157. package/dist/ui/error-boundary.d.ts.map +1 -0
  158. package/dist/ui/error-boundary.js +16 -0
  159. package/dist/ui/error-boundary.js.map +1 -0
  160. package/dist/ui/fade-in.d.ts +8 -0
  161. package/dist/ui/fade-in.d.ts.map +1 -0
  162. package/dist/ui/fade-in.js +14 -0
  163. package/dist/ui/fade-in.js.map +1 -0
  164. package/dist/ui/input-bar.d.ts +16 -0
  165. package/dist/ui/input-bar.d.ts.map +1 -0
  166. package/dist/ui/input-bar.js +269 -0
  167. package/dist/ui/input-bar.js.map +1 -0
  168. package/dist/ui/markdown-view.d.ts +9 -0
  169. package/dist/ui/markdown-view.d.ts.map +1 -0
  170. package/dist/ui/markdown-view.js +240 -0
  171. package/dist/ui/markdown-view.js.map +1 -0
  172. package/dist/ui/matrix-rain.d.ts +2 -0
  173. package/dist/ui/matrix-rain.d.ts.map +1 -0
  174. package/dist/ui/matrix-rain.js +134 -0
  175. package/dist/ui/matrix-rain.js.map +1 -0
  176. package/dist/ui/reasoning-view.d.ts +12 -0
  177. package/dist/ui/reasoning-view.d.ts.map +1 -0
  178. package/dist/ui/reasoning-view.js +34 -0
  179. package/dist/ui/reasoning-view.js.map +1 -0
  180. package/dist/ui/results-panel.d.ts +11 -0
  181. package/dist/ui/results-panel.d.ts.map +1 -0
  182. package/dist/ui/results-panel.js +17 -0
  183. package/dist/ui/results-panel.js.map +1 -0
  184. package/dist/ui/setup-wizard.d.ts +30 -0
  185. package/dist/ui/setup-wizard.d.ts.map +1 -0
  186. package/dist/ui/setup-wizard.js +166 -0
  187. package/dist/ui/setup-wizard.js.map +1 -0
  188. package/dist/ui/status-bar.d.ts +14 -0
  189. package/dist/ui/status-bar.d.ts.map +1 -0
  190. package/dist/ui/status-bar.js +63 -0
  191. package/dist/ui/status-bar.js.map +1 -0
  192. package/dist/ui/tool-activity-card.d.ts +9 -0
  193. package/dist/ui/tool-activity-card.d.ts.map +1 -0
  194. package/dist/ui/tool-activity-card.js +172 -0
  195. package/dist/ui/tool-activity-card.js.map +1 -0
  196. package/dist/ui/tool-call-view.d.ts +9 -0
  197. package/dist/ui/tool-call-view.d.ts.map +1 -0
  198. package/dist/ui/tool-call-view.js +149 -0
  199. package/dist/ui/tool-call-view.js.map +1 -0
  200. package/dist/utils/clipboard.d.ts +6 -0
  201. package/dist/utils/clipboard.d.ts.map +1 -0
  202. package/dist/utils/clipboard.js +56 -0
  203. package/dist/utils/clipboard.js.map +1 -0
  204. package/dist/utils/ignore.d.ts +6 -0
  205. package/dist/utils/ignore.d.ts.map +1 -0
  206. package/dist/utils/ignore.js +40 -0
  207. package/dist/utils/ignore.js.map +1 -0
  208. package/dist/utils/logger.d.ts +4 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +13 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/string-width.d.ts +6 -0
  213. package/dist/utils/string-width.d.ts.map +1 -0
  214. package/dist/utils/string-width.js +37 -0
  215. package/dist/utils/string-width.js.map +1 -0
  216. package/package.json +68 -0
@@ -0,0 +1,253 @@
1
+ const EN = {
2
+ welcome: 'DeepSeek Code',
3
+ welcomeSubtitle: 'AI-powered CLI agent for software development',
4
+ welcomeHint: 'Tab: cycle approval mode | /help: show commands',
5
+ selectLanguage: 'Select language / Выберите язык / 选择语言',
6
+ langHint: 'to navigate, Enter to confirm',
7
+ navigate: 'navigate',
8
+ switchSection: 'switch section',
9
+ themePreview: 'Preview',
10
+ next: 'next step',
11
+ noApiKey: '⚠ API key not configured',
12
+ setupApiKey: 'API Key Setup',
13
+ enterApiKey: 'Enter your DeepSeek API key:',
14
+ apiKeyHint: 'Get your key at https://platform.deepseek.com/api_keys',
15
+ typeKeyAndEnter: 'Type your key in the input below and press Enter',
16
+ apiKeyPlaceholder: 'sk-...',
17
+ apiKeySet: '✓ API key saved! You can now use DeepSeek Code.',
18
+ apiKeyInvalid: '✗ Invalid API key format. Key should start with "sk-".',
19
+ setupSettings: 'Settings',
20
+ selectTheme: 'Select theme:',
21
+ selectMode: 'Select approval mode:',
22
+ modePlan: 'Plan — review all actions before execution',
23
+ modeDefault: 'Default — automatic with user confirmation',
24
+ modeAutoEdit: 'Auto-Edit — automatic edits with approval',
25
+ modeTurbo: 'Turbo — fully automatic, no confirmation',
26
+ finishSetup: 'to finish setup',
27
+ ready: 'Ready',
28
+ processing: 'Processing...',
29
+ error: 'Error',
30
+ you: 'You',
31
+ assistant: 'DeepSeek',
32
+ system: 'System',
33
+ deepseek: 'DeepSeek',
34
+ helpCommands: 'Available commands',
35
+ helpMemory: 'Memory commands',
36
+ helpAdvanced: 'Advanced commands',
37
+ helpReview: 'Review commands',
38
+ helpSettings: 'Settings',
39
+ memorySaved: 'Saved to memory',
40
+ memoryRemoved: 'Removed memories',
41
+ memoryEmpty: 'No memories saved yet',
42
+ memoryList: 'Saved Memories',
43
+ checkpointCreated: 'Checkpoint created',
44
+ checkpointNone: 'No checkpoints found',
45
+ checkpointRestored: 'Restored checkpoint',
46
+ checkpointFailed: 'Could not restore checkpoint',
47
+ usage: 'Usage',
48
+ yes: 'Yes',
49
+ no: 'No',
50
+ cancel: 'Cancel',
51
+ confirm: 'Confirm',
52
+ themeDefault: 'Default dark theme',
53
+ themeLight: 'Light theme',
54
+ themeDracula: 'Dracula theme',
55
+ themeNord: 'Nord theme',
56
+ themeSolarized: 'Solarized dark theme',
57
+ themeMatrix: 'The Matrix — green code rain',
58
+ agentEmptyResponse: 'The model returned an empty response. Please try again.',
59
+ working: 'Working...',
60
+ thinking: 'Thinking...',
61
+ cancelled: 'Cancelled',
62
+ agentCancelled: 'Agent execution cancelled.',
63
+ toolDone: 'done',
64
+ toolError: 'error',
65
+ apiErrorAuth: 'Authentication error. Your API key may be invalid. Run /setup to enter a new key.',
66
+ apiErrorRateLimit: 'API rate limit exceeded. Please wait and try again.',
67
+ apiErrorServer: 'DeepSeek API server error. Please try again later.',
68
+ apiErrorNetwork: 'No connection to DeepSeek API. Check your internet connection.',
69
+ apiErrorTimeout: 'Request timed out. Check your internet connection or API address.',
70
+ ctrlCHint: 'Press Ctrl+C again to exit',
71
+ };
72
+ const RU = {
73
+ welcome: 'DeepSeek Code',
74
+ welcomeSubtitle: 'AI-агент для разработки в терминале',
75
+ welcomeHint: 'Tab: режимы разрешений | /help: команды',
76
+ selectLanguage: 'Выберите язык',
77
+ langHint: 'для навигации, Enter для выбора',
78
+ navigate: 'навигация',
79
+ switchSection: 'переключить секцию',
80
+ themePreview: 'Предпросмотр',
81
+ next: 'далее',
82
+ noApiKey: '⚠ API-ключ не настроен',
83
+ setupApiKey: 'Настройка API-ключа',
84
+ enterApiKey: 'Введите ваш DeepSeek API-ключ:',
85
+ apiKeyHint: 'Получить ключ: https://platform.deepseek.com/api_keys',
86
+ typeKeyAndEnter: 'Напечатайте ключ в поле ниже и нажмите Enter',
87
+ apiKeyPlaceholder: 'sk-...',
88
+ apiKeySet: '✓ API-ключ сохранён! Теперь вы можете использовать DeepSeek Code.',
89
+ apiKeyInvalid: '✗ Неверный формат ключа. Ключ должен начинаться с "sk-".',
90
+ setupSettings: 'Настройки',
91
+ selectTheme: 'Выберите тему:',
92
+ selectMode: 'Выберите режим разрешений:',
93
+ modePlan: 'Plan — просмотр всех действий перед выполнением',
94
+ modeDefault: 'Default — авто с подтверждением',
95
+ modeAutoEdit: 'Auto-Edit — авто-правки с подтверждением',
96
+ modeTurbo: 'Turbo — полностью авто, без подтверждений',
97
+ finishSetup: 'для завершения настройки',
98
+ ready: 'Готов',
99
+ processing: 'Обработка...',
100
+ error: 'Ошибка',
101
+ you: 'Вы',
102
+ assistant: 'DeepSeek',
103
+ system: 'Система',
104
+ deepseek: 'DeepSeek',
105
+ helpCommands: 'Доступные команды',
106
+ helpMemory: 'Команды памяти',
107
+ helpAdvanced: 'Расширенные команды',
108
+ helpReview: 'Команды ревью',
109
+ helpSettings: 'Настройки',
110
+ memorySaved: 'Сохранено в память',
111
+ memoryRemoved: 'Удалено из памяти',
112
+ memoryEmpty: 'Память пуста',
113
+ memoryList: 'Сохранённые воспоминания',
114
+ checkpointCreated: 'Сохранён чекпоинт',
115
+ checkpointNone: 'Чекпоинты не найдены',
116
+ checkpointRestored: 'Чекпоинт восстановлен',
117
+ checkpointFailed: 'Не удалось восстановить чекпоинт',
118
+ usage: 'Использование',
119
+ yes: 'Да',
120
+ no: 'Нет',
121
+ cancel: 'Отмена',
122
+ confirm: 'Подтвердить',
123
+ themeDefault: 'Тёмная тема по умолчанию',
124
+ themeLight: 'Светлая тема',
125
+ themeDracula: 'Тема Дракулы',
126
+ themeNord: 'Тема Nord',
127
+ themeSolarized: 'Тема Solarized',
128
+ themeMatrix: 'Матрица — зелёный дождь из кода',
129
+ agentEmptyResponse: 'Модель вернула пустой ответ. Попробуйте ещё раз.',
130
+ working: 'Работаю...',
131
+ thinking: 'Думаю...',
132
+ cancelled: 'Отменено',
133
+ agentCancelled: 'Выполнение агента отменено.',
134
+ toolDone: 'готов',
135
+ toolError: 'ошибка',
136
+ apiErrorAuth: 'Ошибка аутентификации API. Возможно, API-ключ недействителен. Запустите /setup для ввода нового ключа.',
137
+ apiErrorRateLimit: 'Превышен лимит запросов к API. Подождите и попробуйте снова.',
138
+ apiErrorServer: 'Ошибка сервера DeepSeek API. Повторите попытку позже.',
139
+ apiErrorNetwork: 'Нет соединения с DeepSeek API. Проверьте подключение к интернету.',
140
+ apiErrorTimeout: 'Таймаут запроса. Проверьте подключение к интернету или адрес API.',
141
+ ctrlCHint: 'Нажмите Ctrl+C ещё раз для выхода',
142
+ };
143
+ const ZH = {
144
+ welcome: 'DeepSeek Code',
145
+ welcomeSubtitle: 'AI 驱动的命令行开发代理',
146
+ welcomeHint: 'Tab: 切换审批模式 | /help: 显示命令',
147
+ selectLanguage: '选择语言',
148
+ langHint: '导航,Enter 确认',
149
+ navigate: '导航',
150
+ switchSection: '切换区域',
151
+ themePreview: '预览',
152
+ next: '下一步',
153
+ noApiKey: '⚠ 未配置 API 密钥',
154
+ setupApiKey: 'API 密钥设置',
155
+ enterApiKey: '输入您的 DeepSeek API 密钥:',
156
+ apiKeyHint: '获取密钥: https://platform.deepseek.com/api_keys',
157
+ typeKeyAndEnter: '在下方输入框中输入密钥并按 Enter',
158
+ apiKeyPlaceholder: 'sk-...',
159
+ apiKeySet: '✓ API 密钥已保存!您现在可以使用 DeepSeek Code。',
160
+ apiKeyInvalid: '✗ 密钥格式无效。密钥应以 "sk-" 开头。',
161
+ setupSettings: '设置',
162
+ selectTheme: '选择主题:',
163
+ selectMode: '选择审批模式:',
164
+ modePlan: 'Plan — 执行前审查所有操作',
165
+ modeDefault: 'Default — 自动执行,用户确认',
166
+ modeAutoEdit: 'Auto-Edit — 自动编辑,需要批准',
167
+ modeTurbo: 'Turbo — 完全自动,无需确认',
168
+ finishSetup: '完成设置',
169
+ ready: '就绪',
170
+ processing: '处理中...',
171
+ error: '错误',
172
+ you: '你',
173
+ assistant: 'DeepSeek',
174
+ system: '系统',
175
+ deepseek: 'DeepSeek',
176
+ helpCommands: '可用命令',
177
+ helpMemory: '记忆命令',
178
+ helpAdvanced: '高级命令',
179
+ helpReview: '审查命令',
180
+ helpSettings: '设置',
181
+ memorySaved: '已保存到记忆',
182
+ memoryRemoved: '已删除记忆',
183
+ memoryEmpty: '暂无记忆',
184
+ memoryList: '已保存的记忆',
185
+ checkpointCreated: '已创建检查点',
186
+ checkpointNone: '未找到检查点',
187
+ checkpointRestored: '已恢复检查点',
188
+ checkpointFailed: '无法恢复检查点',
189
+ usage: '用法',
190
+ yes: '是',
191
+ no: '否',
192
+ cancel: '取消',
193
+ confirm: '确认',
194
+ themeDefault: '默认深色主题',
195
+ themeLight: '亮色主题',
196
+ themeDracula: '德古拉主题',
197
+ themeNord: 'Nord 主题',
198
+ themeSolarized: 'Solarized 深色主题',
199
+ themeMatrix: '黑客帝国 — 绿色代码雨',
200
+ agentEmptyResponse: '模型返回了空响应,请重试。',
201
+ working: '工作中...',
202
+ thinking: '思考中...',
203
+ cancelled: '已取消',
204
+ agentCancelled: '代理执行已取消。',
205
+ toolDone: '完成',
206
+ toolError: '错误',
207
+ apiErrorAuth: 'API 认证失败。您的密钥可能无效。运行 /setup 输入新密钥。',
208
+ apiErrorRateLimit: '超出 API 请求限制,请稍后重试。',
209
+ apiErrorServer: 'DeepSeek API 服务器错误,请稍后重试。',
210
+ apiErrorNetwork: '无法连接 DeepSeek API,请检查网络连接。',
211
+ apiErrorTimeout: '请求超时,请检查网络或 API 地址。',
212
+ ctrlCHint: '再次按 Ctrl+C 退出',
213
+ };
214
+ const LOCALES = {
215
+ en: EN,
216
+ ru: RU,
217
+ zh: ZH,
218
+ };
219
+ export class I18n {
220
+ locale = 'en';
221
+ strings = EN;
222
+ setLocale(locale) {
223
+ this.locale = locale;
224
+ this.strings = LOCALES[locale] ?? EN;
225
+ }
226
+ getLocale() {
227
+ return this.locale;
228
+ }
229
+ t(key) {
230
+ return this.strings[key] ?? EN[key] ?? key;
231
+ }
232
+ /**
233
+ * Auto-detect locale from system settings
234
+ */
235
+ detectLocale() {
236
+ const lang = process.env.LANG ?? process.env.LC_ALL ?? 'en_US';
237
+ if (lang.startsWith('ru'))
238
+ return 'ru';
239
+ if (lang.startsWith('zh'))
240
+ return 'zh';
241
+ return 'en';
242
+ }
243
+ listLocales() {
244
+ return [
245
+ { code: 'en', name: 'English' },
246
+ { code: 'ru', name: 'Русский' },
247
+ { code: 'zh', name: '中文' },
248
+ ];
249
+ }
250
+ }
251
+ // Singleton
252
+ export const i18n = new I18n();
253
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export interface LSPServerConfig {
3
+ language: string;
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ }
8
+ export interface LSPDefinition {
9
+ filePath: string;
10
+ line: number;
11
+ column: number;
12
+ }
13
+ export interface LSPReference {
14
+ filePath: string;
15
+ line: number;
16
+ column: number;
17
+ text: string;
18
+ }
19
+ export interface LSPHover {
20
+ contents: string;
21
+ range?: {
22
+ start: {
23
+ line: number;
24
+ character: number;
25
+ };
26
+ end: {
27
+ line: number;
28
+ character: number;
29
+ };
30
+ };
31
+ }
32
+ export interface LSPDiagnostic {
33
+ filePath: string;
34
+ line: number;
35
+ column: number;
36
+ message: string;
37
+ severity: 'error' | 'warning' | 'info' | 'hint';
38
+ }
39
+ /**
40
+ * Lightweight LSP client for Go-to-Definition, Find References, Hover, Diagnostics.
41
+ * Uses JSON-RPC over stdio (same pattern as MCP).
42
+ */
43
+ export declare class LSPClient extends EventEmitter {
44
+ private config;
45
+ private process;
46
+ private messageId;
47
+ private pending;
48
+ private buffer;
49
+ private initialized;
50
+ private serverCapabilities;
51
+ private rootUri;
52
+ constructor(config: LSPServerConfig);
53
+ initialize(): Promise<void>;
54
+ goToDefinition(filePath: string, line: number, column: number): Promise<LSPDefinition | null>;
55
+ findReferences(filePath: string, line: number, column: number): Promise<LSPReference[]>;
56
+ hover(filePath: string, line: number, column: number): Promise<LSPHover | null>;
57
+ getDiagnostics(filePath: string): Promise<LSPDiagnostic[]>;
58
+ shutdown(): Promise<void>;
59
+ private toUri;
60
+ private fromUri;
61
+ private sendRequest;
62
+ private sendNotification;
63
+ private sendMessage;
64
+ private processBuffer;
65
+ }
66
+ export declare class LSPManager {
67
+ private clients;
68
+ load(configPath?: string): Promise<void>;
69
+ getClient(language: string): LSPClient | undefined;
70
+ initializeAll(): Promise<void>;
71
+ shutdownAll(): Promise<void>;
72
+ }
73
+ export declare const lspManager: LSPManager;
74
+ //# sourceMappingURL=lsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/core/lsp.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAClG;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;CACjD;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,YAAY;IAS5B,OAAO,CAAC,MAAM;IAR3B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,OAAO,CAAmF;IAClG,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,OAAO,CAAQ;gBAEF,MAAM,EAAE,eAAe;IAKtC,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAkD5B,cAAc,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAc9F,cAAc,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgBxF,KAAK,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAehF,cAAc,CAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAe3D,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAehC,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;CAqCtB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAoC;IAE7C,IAAI,CAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,SAAS,CAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI7C,aAAa,IAAK,OAAO,CAAC,IAAI,CAAC;IAU/B,WAAW,IAAK,OAAO,CAAC,IAAI,CAAC;CAOpC;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAA"}
@@ -0,0 +1,239 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { EventEmitter } from 'node:events';
6
+ import { fileURLToPath, pathToFileURL } from 'node:url';
7
+ /**
8
+ * Lightweight LSP client for Go-to-Definition, Find References, Hover, Diagnostics.
9
+ * Uses JSON-RPC over stdio (same pattern as MCP).
10
+ */
11
+ export class LSPClient extends EventEmitter {
12
+ config;
13
+ process = null;
14
+ messageId = 0;
15
+ pending = new Map();
16
+ buffer = '';
17
+ initialized = false;
18
+ serverCapabilities = {};
19
+ rootUri;
20
+ constructor(config) {
21
+ super();
22
+ this.config = config;
23
+ this.rootUri = pathToFileURL(process.cwd()).href;
24
+ }
25
+ async initialize() {
26
+ if (this.initialized)
27
+ return;
28
+ return new Promise((resolve, reject) => {
29
+ const env = { ...process.env, ...this.config.env };
30
+ this.process = spawn(this.config.command, this.config.args ?? [], {
31
+ env,
32
+ stdio: ['pipe', 'pipe', 'pipe'],
33
+ windowsHide: true,
34
+ });
35
+ const timeout = setTimeout(() => {
36
+ reject(new Error(`LSP server "${this.config.language}" connection timeout`));
37
+ }, 15000);
38
+ this.process.stdout.on('data', (data) => {
39
+ this.buffer += data.toString();
40
+ this.processBuffer();
41
+ });
42
+ this.process.stderr.on('data', (data) => {
43
+ this.emit('stderr', data.toString());
44
+ });
45
+ this.process.on('error', (err) => {
46
+ clearTimeout(timeout);
47
+ reject(err);
48
+ });
49
+ this.process.on('exit', (code) => {
50
+ this.initialized = false;
51
+ this.emit('exit', code);
52
+ });
53
+ // Send initialize request
54
+ this.sendRequest('initialize', {
55
+ processId: process.pid,
56
+ rootUri: this.rootUri,
57
+ capabilities: {},
58
+ }).then((result) => {
59
+ this.serverCapabilities = result.capabilities ?? {};
60
+ this.sendNotification('initialized', {});
61
+ this.initialized = true;
62
+ clearTimeout(timeout);
63
+ resolve();
64
+ }).catch(reject);
65
+ });
66
+ }
67
+ async goToDefinition(filePath, line, column) {
68
+ const result = await this.sendRequest('textDocument/definition', {
69
+ textDocument: { uri: this.toUri(filePath) },
70
+ position: { line, character: column },
71
+ });
72
+ if (!result)
73
+ return null;
74
+ return {
75
+ filePath: this.fromUri(result.uri),
76
+ line: result.range.start.line,
77
+ column: result.range.start.character,
78
+ };
79
+ }
80
+ async findReferences(filePath, line, column) {
81
+ const result = await this.sendRequest('textDocument/references', {
82
+ textDocument: { uri: this.toUri(filePath) },
83
+ position: { line, character: column },
84
+ context: { includeDeclaration: true },
85
+ });
86
+ if (!result)
87
+ return [];
88
+ return result.map(r => ({
89
+ filePath: this.fromUri(r.uri),
90
+ line: r.range.start.line,
91
+ column: r.range.start.character,
92
+ text: '',
93
+ }));
94
+ }
95
+ async hover(filePath, line, column) {
96
+ const result = await this.sendRequest('textDocument/hover', {
97
+ textDocument: { uri: this.toUri(filePath) },
98
+ position: { line, character: column },
99
+ });
100
+ if (!result)
101
+ return null;
102
+ const contents = typeof result.contents === 'string'
103
+ ? result.contents
104
+ : result.contents.value;
105
+ return { contents, range: result.range };
106
+ }
107
+ async getDiagnostics(filePath) {
108
+ // Diagnostics come as notifications, so we need to request them
109
+ await this.sendNotification('textDocument/didOpen', {
110
+ textDocument: {
111
+ uri: this.toUri(filePath),
112
+ languageId: this.config.language,
113
+ version: 1,
114
+ text: '',
115
+ },
116
+ });
117
+ // In a real implementation, we'd listen for publishDiagnostics notifications
118
+ return [];
119
+ }
120
+ async shutdown() {
121
+ if (!this.initialized)
122
+ return;
123
+ try {
124
+ await this.sendRequest('shutdown', {});
125
+ this.sendNotification('exit', {});
126
+ }
127
+ catch { /* ignore */ }
128
+ if (this.process) {
129
+ this.process.kill();
130
+ this.process = null;
131
+ }
132
+ this.initialized = false;
133
+ }
134
+ toUri(filePath) {
135
+ return pathToFileURL(filePath).href;
136
+ }
137
+ fromUri(uri) {
138
+ return fileURLToPath(uri);
139
+ }
140
+ sendRequest(method, params) {
141
+ return new Promise((resolve, reject) => {
142
+ const id = ++this.messageId;
143
+ const msg = {
144
+ jsonrpc: '2.0',
145
+ id,
146
+ method,
147
+ params,
148
+ };
149
+ this.pending.set(id, { resolve, reject });
150
+ this.sendMessage(msg);
151
+ });
152
+ }
153
+ sendNotification(method, params) {
154
+ const msg = { jsonrpc: '2.0', method, params };
155
+ this.sendMessage(msg);
156
+ }
157
+ sendMessage(msg) {
158
+ const content = JSON.stringify(msg);
159
+ const header = `Content-Length: ${Buffer.byteLength(content, 'utf-8')}\r\n\r\n`;
160
+ this.process.stdin.write(header + content);
161
+ }
162
+ processBuffer() {
163
+ // LSP uses Content-Length headers
164
+ const headerEnd = this.buffer.indexOf('\r\n\r\n');
165
+ if (headerEnd === -1)
166
+ return;
167
+ const header = this.buffer.slice(0, headerEnd);
168
+ const lengthMatch = header.match(/Content-Length: (\d+)/);
169
+ if (!lengthMatch)
170
+ return;
171
+ const contentLength = parseInt(lengthMatch[1], 10);
172
+ const contentStart = headerEnd + 4;
173
+ if (this.buffer.length < contentStart + contentLength)
174
+ return;
175
+ const content = this.buffer.slice(contentStart, contentStart + contentLength);
176
+ this.buffer = this.buffer.slice(contentStart + contentLength);
177
+ try {
178
+ const msg = JSON.parse(content);
179
+ if (msg.id && this.pending.has(msg.id)) {
180
+ const { resolve, reject } = this.pending.get(msg.id);
181
+ this.pending.delete(msg.id);
182
+ if (msg.error) {
183
+ reject(new Error(msg.error.message));
184
+ }
185
+ else {
186
+ resolve(msg.result);
187
+ }
188
+ }
189
+ else if (msg.method === 'textDocument/publishDiagnostics') {
190
+ this.emit('diagnostics', msg.params);
191
+ }
192
+ }
193
+ catch { /* ignore */ }
194
+ // Process more messages if buffer has data
195
+ if (this.buffer.includes('Content-Length:')) {
196
+ this.processBuffer();
197
+ }
198
+ }
199
+ }
200
+ export class LSPManager {
201
+ clients = new Map();
202
+ async load(configPath) {
203
+ const paths = [
204
+ configPath,
205
+ join(process.cwd(), '.lsp.json'),
206
+ ].filter(Boolean);
207
+ for (const p of paths) {
208
+ if (existsSync(p)) {
209
+ const content = await readFile(p, 'utf-8');
210
+ const configs = JSON.parse(content);
211
+ for (const cfg of configs) {
212
+ this.clients.set(cfg.language, new LSPClient(cfg));
213
+ }
214
+ }
215
+ }
216
+ }
217
+ getClient(language) {
218
+ return this.clients.get(language);
219
+ }
220
+ async initializeAll() {
221
+ const promises = [];
222
+ for (const client of this.clients.values()) {
223
+ promises.push(client.initialize().catch(err => {
224
+ console.error(`[LSP] Failed to initialize ${client['config'].language}:`, err.message);
225
+ }));
226
+ }
227
+ await Promise.all(promises);
228
+ }
229
+ async shutdownAll() {
230
+ const promises = [];
231
+ for (const client of this.clients.values()) {
232
+ promises.push(client.shutdown());
233
+ }
234
+ await Promise.all(promises);
235
+ }
236
+ }
237
+ // Singleton
238
+ export const lspManager = new LSPManager();
239
+ //# sourceMappingURL=lsp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp.js","sourceRoot":"","sources":["../../src/core/lsp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export interface MCPServerConfig {
3
+ name: string;
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ /** Filter tools: include only these */
8
+ includeTools?: string[];
9
+ /** Filter tools: exclude these */
10
+ excludeTools?: string[];
11
+ /** Trust mode: skip permissions */
12
+ trusted?: boolean;
13
+ }
14
+ export interface MCPTool {
15
+ serverName: string;
16
+ name: string;
17
+ description: string;
18
+ inputSchema: Record<string, unknown>;
19
+ }
20
+ export declare class MCPServer extends EventEmitter {
21
+ config: MCPServerConfig;
22
+ private process;
23
+ private messageId;
24
+ private pending;
25
+ private buffer;
26
+ private _tools;
27
+ private connected;
28
+ constructor(config: MCPServerConfig);
29
+ get tools(): MCPTool[];
30
+ get isConnected(): boolean;
31
+ connect(): Promise<void>;
32
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
33
+ disconnect(): Promise<void>;
34
+ private filterTools;
35
+ private sendRequest;
36
+ private processBuffer;
37
+ }
38
+ export declare class MCPManager {
39
+ private servers;
40
+ addServer(config: MCPServerConfig): Promise<MCPServer>;
41
+ removeServer(name: string): Promise<void>;
42
+ getServer(name: string): MCPServer | undefined;
43
+ getAllTools(): MCPTool[];
44
+ connectAll(): Promise<void>;
45
+ disconnectAll(): Promise<void>;
46
+ loadConfig(configPath?: string): Promise<void>;
47
+ }
48
+ export declare const mcpManager: MCPManager;
49
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/core/mcp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAWD,qBAAa,SAAU,SAAQ,YAAY;IAQrB,MAAM,EAAE,eAAe;IAP3C,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,OAAO,CAAmF;IAClG,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAQ;gBAEL,MAAM,EAAE,eAAe;IAI3C,IAAI,KAAK,IAAK,OAAO,EAAE,CAEtB;IAED,IAAI,WAAW,IAAK,OAAO,CAE1B;IAEK,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC;IAiDzB,QAAQ,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxE,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAQlC,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,aAAa;CAyBtB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAoC;IAE7C,SAAS,CAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAWvD,YAAY,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,SAAS,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI/C,WAAW,IAAK,OAAO,EAAE;IAQnB,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;IAU5B,aAAa,IAAK,OAAO,CAAC,IAAI,CAAC;IAS/B,UAAU,CAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBtD;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAA"}