centaurus-cli 3.0.1 → 3.1.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 (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5158
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1526 -1512
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +601 -572
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -406
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3263
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -514
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -204
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ollama-service.js","sourceRoot":"","sources":["../../src/services/ollama-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/ollama-service.ts"],"sourcesContent":["/**\r\n * Ollama Service\r\n * Client for interacting with the local Ollama API\r\n * \r\n * Ollama exposes a REST API at http://localhost:11434 by default.\r\n * This service provides methods for:\r\n * - Checking if Ollama is running\r\n * - Fetching available local models\r\n * - Sending chat messages to local models\r\n */\r\n\r\nimport { logError, logWarning } from '../utils/logger.js';\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\n\r\n// Ollama API base URL (configurable via environment variable)\r\nconst OLLAMA_BASE_URL = process.env.OLLAMA_HOST || 'http://localhost:11434';\r\n\r\n// Timeout for Ollama API requests (5 seconds)\r\nconst REQUEST_TIMEOUT = 5000;\r\n\r\n/**\r\n * Ollama model information as returned by /api/tags\r\n */\r\nexport interface OllamaModel {\r\n name: string; // e.g., \"llama3:latest\", \"codellama:7b\"\r\n model: string; // Full model identifier\r\n size: number; // Size in bytes\r\n digest: string; // Model digest hash\r\n modified_at: string; // ISO timestamp of last modification\r\n details?: {\r\n family?: string;\r\n parameter_size?: string;\r\n quantization_level?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Response from Ollama /api/tags endpoint\r\n */\r\nexport interface OllamaTagsResponse {\r\n models: OllamaModel[];\r\n}\r\n\r\n/**\r\n * Chat message format for Ollama (with tool support)\r\n */\r\nexport interface OllamaChatMessage {\r\n role: 'system' | 'user' | 'assistant' | 'tool';\r\n content: string;\r\n images?: string[]; // Base64-encoded images for multimodal models\r\n tool_calls?: OllamaToolCall[]; // For assistant messages with tool calls\r\n tool_name?: string; // For tool role - name of tool that was executed\r\n}\r\n\r\n/**\r\n * Ollama tool call structure (OpenAI-compatible)\r\n */\r\nexport interface OllamaToolCall {\r\n function: {\r\n name: string;\r\n arguments: Record<string, any>;\r\n };\r\n}\r\n\r\n/**\r\n * Ollama tool definition (OpenAI-compatible)\r\n */\r\nexport interface OllamaTool {\r\n type: 'function';\r\n function: {\r\n name: string;\r\n description: string;\r\n parameters: {\r\n type: 'object';\r\n properties: Record<string, {\r\n type: string;\r\n description: string;\r\n enum?: string[];\r\n }>;\r\n required?: string[];\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Request body for Ollama /api/chat endpoint (with tools support)\r\n */\r\nexport interface OllamaChatRequest {\r\n model: string;\r\n messages: OllamaChatMessage[];\r\n stream?: boolean;\r\n format?: 'json';\r\n tools?: OllamaTool[];\r\n options?: {\r\n temperature?: number;\r\n top_p?: number;\r\n top_k?: number;\r\n num_predict?: number;\r\n stop?: string[];\r\n };\r\n}\r\n\r\n/**\r\n * Model families that support tool calling\r\n * Based on https://ollama.com/search?c=tools\r\n */\r\nexport const TOOL_CAPABLE_MODEL_FAMILIES = [\r\n 'llama3.1', 'llama3.2', 'llama3.3',\r\n 'mistral-nemo', 'mistral-small',\r\n 'command-r', 'command-r-plus',\r\n 'firefunction',\r\n 'qwen2.5', 'qwen2.5-coder',\r\n 'granite3-dense', 'granite3.1-dense',\r\n 'nemotron',\r\n 'hermes3',\r\n 'athene-v2',\r\n 'gpt-oss',\r\n 'exaone3.5',\r\n 'deepseek-r1',\r\n 'qwen3-coder',\r\n 'qwen-coder',\r\n 'deepseek-v3',\r\n 'deepseek-v2',\r\n 'deepseek',\r\n];\r\n\r\n/**\r\n * Single streaming response chunk from Ollama /api/chat\r\n */\r\nexport interface OllamaChatStreamChunk {\r\n model: string;\r\n created_at: string;\r\n message: {\r\n role: 'assistant';\r\n content: string;\r\n tool_calls?: OllamaToolCall[];\r\n };\r\n done: boolean;\r\n done_reason?: string;\r\n total_duration?: number;\r\n load_duration?: number;\r\n prompt_eval_count?: number;\r\n prompt_eval_duration?: number;\r\n eval_count?: number;\r\n eval_duration?: number;\r\n}\r\n\r\n/**\r\n * Non-streaming response from Ollama /api/chat\r\n */\r\nexport interface OllamaChatResponse {\r\n model: string;\r\n created_at: string;\r\n message: {\r\n role: 'assistant';\r\n content: string;\r\n tool_calls?: OllamaToolCall[];\r\n };\r\n done: boolean;\r\n done_reason?: string;\r\n total_duration: number;\r\n load_duration: number;\r\n prompt_eval_count: number;\r\n prompt_eval_duration: number;\r\n eval_count: number;\r\n eval_duration: number;\r\n}\r\n\r\n/**\r\n * Result from checking if Ollama is available\r\n */\r\nexport interface OllamaStatus {\r\n available: boolean;\r\n version?: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Response from Ollama /api/version endpoint\r\n */\r\ninterface OllamaVersionResponse {\r\n version: string;\r\n}\r\n\r\n/**\r\n * Ollama Service Class\r\n * Provides methods for interacting with the local Ollama API\r\n */\r\nclass OllamaService {\r\n private baseUrl: string;\r\n\r\n constructor(baseUrl: string = OLLAMA_BASE_URL) {\r\n this.baseUrl = baseUrl;\r\n }\r\n\r\n /**\r\n * Check if Ollama is running and accessible\r\n * @returns OllamaStatus indicating if Ollama is available\r\n */\r\n async isOllamaRunning(): Promise<OllamaStatus> {\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);\r\n\r\n // Ollama has a simple root endpoint that returns version info\r\n const response = await fetch(`${this.baseUrl}/api/version`, {\r\n method: 'GET',\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (response.ok) {\r\n const data = await response.json() as OllamaVersionResponse;\r\n return {\r\n available: true,\r\n version: data.version || 'unknown',\r\n };\r\n }\r\n\r\n return {\r\n available: false,\r\n error: `Ollama returned status ${response.status}`,\r\n };\r\n } catch (error: any) {\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] isOllamaRunning error: ${error.message}\\n`);\r\n\r\n if (error.name === 'AbortError') {\r\n return {\r\n available: false,\r\n error: 'Connection timed out. Ollama may not be running.',\r\n };\r\n }\r\n\r\n if (error.code === 'ECONNREFUSED') {\r\n return {\r\n available: false,\r\n error: 'Connection refused. Ollama is not running or not installed.',\r\n };\r\n }\r\n\r\n return {\r\n available: false,\r\n error: error.message || 'Unknown error connecting to Ollama',\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Get list of locally available models from Ollama\r\n * @returns Array of OllamaModel objects\r\n * @throws Error if Ollama is not available or request fails\r\n */\r\n async getLocalModels(): Promise<OllamaModel[]> {\r\n try {\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);\r\n\r\n const response = await fetch(`${this.baseUrl}/api/tags`, {\r\n method: 'GET',\r\n signal: controller.signal,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Ollama API returned status ${response.status}`);\r\n }\r\n\r\n const data = await response.json() as OllamaTagsResponse;\r\n\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] getLocalModels: Found ${data.models?.length || 0} models\\n`);\r\n\r\n return data.models || [];\r\n } catch (error: any) {\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] getLocalModels error: ${error.message}\\n`);\r\n\r\n if (error.name === 'AbortError') {\r\n throw new Error('Connection to Ollama timed out. Please ensure Ollama is running.');\r\n }\r\n\r\n if (error.code === 'ECONNREFUSED') {\r\n throw new Error('Cannot connect to Ollama. Please ensure Ollama is installed and running.\\n\\nInstall from: https://ollama.ai');\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Send a chat message to an Ollama model (non-streaming)\r\n * @param model Model name to use (e.g., \"llama3:latest\")\r\n * @param messages Array of chat messages\r\n * @param tools Optional array of tool definitions\r\n * @param options Optional generation parameters\r\n * @returns OllamaChatResponse with the model's reply\r\n */\r\n async sendChatMessage(\r\n model: string,\r\n messages: OllamaChatMessage[],\r\n tools?: OllamaTool[],\r\n options?: OllamaChatRequest['options']\r\n ): Promise<OllamaChatResponse> {\r\n try {\r\n const request: OllamaChatRequest = {\r\n model,\r\n messages,\r\n stream: false,\r\n tools: tools && tools.length > 0 ? tools : undefined,\r\n options,\r\n };\r\n\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] sendChatMessage: model=${model}, messages=${messages.length}, tools=${tools?.length || 0}\\n`);\r\n\r\n const response = await fetch(`${this.baseUrl}/api/chat`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(request),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`Ollama API error: ${response.status} - ${errorText}`);\r\n }\r\n\r\n const data = await response.json() as OllamaChatResponse;\r\n\r\n // Log if tool calls were returned\r\n if (data.message?.tool_calls?.length) {\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] Response contains ${data.message.tool_calls.length} tool calls\\n`);\r\n }\r\n\r\n return data;\r\n } catch (error: any) {\r\n logError(`Ollama sendChatMessage error: ${error.message}`);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a model name indicates it supports tool calling\r\n * @param modelName The model name (e.g., \"llama3.2:latest\")\r\n * @returns True if the model likely supports tools\r\n */\r\n static modelSupportsTools(modelName: string): boolean {\r\n const lowerName = modelName.toLowerCase();\r\n\r\n // Check against known tool-capable model families\r\n return TOOL_CAPABLE_MODEL_FAMILIES.some(family =>\r\n lowerName.startsWith(family) || lowerName.includes(`:${family}`)\r\n );\r\n }\r\n\r\n /**\r\n * Send a streaming chat message to an Ollama model\r\n * @param model Model name to use\r\n * @param messages Array of chat messages\r\n * @param onChunk Callback for each streaming chunk\r\n * @param options Optional generation parameters\r\n * @returns Final complete response after stream ends\r\n */\r\n async sendChatMessageStreaming(\r\n model: string,\r\n messages: OllamaChatMessage[],\r\n onChunk: (chunk: OllamaChatStreamChunk) => void,\r\n options?: OllamaChatRequest['options']\r\n ): Promise<OllamaChatResponse> {\r\n try {\r\n const request: OllamaChatRequest = {\r\n model,\r\n messages,\r\n stream: true,\r\n options,\r\n };\r\n\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] Starting streaming chat with model: ${model}\\n`);\r\n\r\n const response = await fetch(`${this.baseUrl}/api/chat`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(request),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`Ollama API error: ${response.status} - ${errorText}`);\r\n }\r\n\r\n if (!response.body) {\r\n throw new Error('No response body from Ollama');\r\n }\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let fullContent = '';\r\n let lastChunk: OllamaChatStreamChunk | null = null;\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n\r\n if (done) break;\r\n\r\n const text = decoder.decode(value, { stream: true });\r\n const lines = text.split('\\n').filter(line => line.trim());\r\n\r\n for (const line of lines) {\r\n try {\r\n const chunk: OllamaChatStreamChunk = JSON.parse(line);\r\n fullContent += chunk.message?.content || '';\r\n lastChunk = chunk;\r\n\r\n // Invoke callback with each chunk\r\n onChunk(chunk);\r\n\r\n if (chunk.done) {\r\n break;\r\n }\r\n } catch (parseError) {\r\n // Skip malformed JSON lines\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] Skipping malformed chunk: ${line}\\n`);\r\n }\r\n }\r\n }\r\n\r\n // Return a complete response object\r\n const finalResponse: OllamaChatResponse = {\r\n model,\r\n created_at: lastChunk?.created_at || new Date().toISOString(),\r\n message: {\r\n role: 'assistant',\r\n content: fullContent,\r\n },\r\n done: true,\r\n total_duration: lastChunk?.total_duration || 0,\r\n load_duration: lastChunk?.load_duration || 0,\r\n prompt_eval_count: lastChunk?.prompt_eval_count || 0,\r\n prompt_eval_duration: lastChunk?.prompt_eval_duration || 0,\r\n eval_count: lastChunk?.eval_count || 0,\r\n eval_duration: lastChunk?.eval_duration || 0,\r\n };\r\n\r\n quickLog(`[${new Date().toISOString()}] [OllamaService] Streaming complete. Total content length: ${fullContent.length}\\n`);\r\n\r\n return finalResponse;\r\n } catch (error: any) {\r\n logError(`Ollama streaming error: ${error.message}`);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Format model size for display (bytes to human-readable)\r\n * @param bytes Size in bytes\r\n * @returns Human-readable size string\r\n */\r\n static formatModelSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\r\n }\r\n\r\n /**\r\n * Get a user-friendly error message for common Ollama issues\r\n * @param error The error that occurred\r\n * @returns User-friendly error message with helpful instructions\r\n */\r\n static getHelpfulErrorMessage(error: Error): string {\r\n const message = error.message.toLowerCase();\r\n\r\n if (message.includes('econnrefused') || message.includes('connection refused')) {\r\n return `❌ Cannot connect to Ollama\r\n\r\nOllama is not running or not installed on this machine.\r\n\r\nTo fix this:\r\n1. Install Ollama from: https://ollama.ai\r\n2. Start Ollama by running: ollama serve\r\n3. Pull a model: ollama pull llama3\r\n\r\nThen try again with /models local`;\r\n }\r\n\r\n if (message.includes('timeout') || message.includes('timed out')) {\r\n return `❌ Connection to Ollama timed out\r\n\r\nOllama may be starting up or under heavy load.\r\n\r\nPlease ensure Ollama is running:\r\n• Check if 'ollama serve' is running\r\n• Try again in a few seconds`;\r\n }\r\n\r\n if (message.includes('model') && message.includes('not found')) {\r\n return `❌ Model not found\r\n\r\nThe requested model is not available locally.\r\n\r\nTo download models, run:\r\n• ollama pull llama3\r\n• ollama pull codellama\r\n• ollama pull mistral\r\n\r\nThen try again.`;\r\n }\r\n\r\n return `❌ Ollama error: ${error.message}\r\n\r\nPlease ensure Ollama is installed and running.\r\nInstall from: https://ollama.ai`;\r\n }\r\n}\r\n\r\n// Export singleton instance\r\nexport const ollamaService = new OllamaService();\r\n\r\n// Export class for testing with different URLs\r\nexport { OllamaService };\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,142 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import * as os from "os";
4
+ const RULES_DIR = path.join(os.homedir(), ".centaurus", "rules");
5
+ const RULE_EXT = ".md";
6
+ function ensureRulesDir() {
7
+ if (!fs.existsSync(RULES_DIR)) {
8
+ fs.mkdirSync(RULES_DIR, { recursive: true });
9
+ }
10
+ }
11
+ function truncatePreview(content, maxLength = 80) {
12
+ const firstMeaningfulLine = content.split("\n").map((line) => line.trim()).find((line) => line.length > 0) || "";
13
+ if (!firstMeaningfulLine) {
14
+ return "Saved rule";
15
+ }
16
+ return firstMeaningfulLine.length > maxLength ? `${firstMeaningfulLine.slice(0, maxLength - 3)}...` : firstMeaningfulLine;
17
+ }
18
+ class RulesStorageService {
19
+ static instance;
20
+ constructor() {
21
+ ensureRulesDir();
22
+ }
23
+ static getInstance() {
24
+ if (!RulesStorageService.instance) {
25
+ RulesStorageService.instance = new RulesStorageService();
26
+ }
27
+ return RulesStorageService.instance;
28
+ }
29
+ sanitizeName(name) {
30
+ return name.toLowerCase().trim().replace(/[^a-z0-9_-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
31
+ }
32
+ getRulePath(name) {
33
+ return path.join(RULES_DIR, `${this.sanitizeName(name)}${RULE_EXT}`);
34
+ }
35
+ exists(name) {
36
+ return fs.existsSync(this.getRulePath(name));
37
+ }
38
+ load(name) {
39
+ try {
40
+ const filePath = this.getRulePath(name);
41
+ if (!fs.existsSync(filePath)) {
42
+ return null;
43
+ }
44
+ const content = fs.readFileSync(filePath, "utf-8");
45
+ const stats = fs.statSync(filePath);
46
+ const baseName = path.basename(filePath, RULE_EXT);
47
+ return {
48
+ name: baseName,
49
+ content,
50
+ filePath,
51
+ createdAt: stats.birthtime.toISOString(),
52
+ updatedAt: stats.mtime.toISOString()
53
+ };
54
+ } catch {
55
+ return null;
56
+ }
57
+ }
58
+ list() {
59
+ try {
60
+ ensureRulesDir();
61
+ const files = fs.readdirSync(RULES_DIR).filter((file) => file.endsWith(RULE_EXT));
62
+ const rules = [];
63
+ for (const file of files) {
64
+ try {
65
+ const filePath = path.join(RULES_DIR, file);
66
+ const content = fs.readFileSync(filePath, "utf-8");
67
+ const stats = fs.statSync(filePath);
68
+ rules.push({
69
+ name: path.basename(file, RULE_EXT),
70
+ filePath,
71
+ preview: truncatePreview(content),
72
+ createdAt: stats.birthtime.toISOString(),
73
+ updatedAt: stats.mtime.toISOString()
74
+ });
75
+ } catch {
76
+ }
77
+ }
78
+ return rules.sort(
79
+ (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()
80
+ );
81
+ } catch {
82
+ return [];
83
+ }
84
+ }
85
+ save(name, content, previousName) {
86
+ const normalizedName = this.sanitizeName(name);
87
+ const normalizedPreviousName = previousName ? this.sanitizeName(previousName) : void 0;
88
+ const normalizedContent = content.replace(/\r\n/g, "\n").trim();
89
+ if (!normalizedName) {
90
+ return { success: false, error: "Rule name must contain letters, numbers, hyphens, or underscores." };
91
+ }
92
+ if (!normalizedContent) {
93
+ return { success: false, error: "Rule content cannot be empty." };
94
+ }
95
+ ensureRulesDir();
96
+ const targetPath = this.getRulePath(normalizedName);
97
+ const isRename = !!normalizedPreviousName && normalizedPreviousName !== normalizedName;
98
+ if ((!normalizedPreviousName || isRename) && fs.existsSync(targetPath)) {
99
+ return {
100
+ success: false,
101
+ error: `Rule "${normalizedName}" already exists. Use /rules edit ${normalizedName} to update it.`
102
+ };
103
+ }
104
+ try {
105
+ fs.writeFileSync(targetPath, normalizedContent, "utf-8");
106
+ if (isRename) {
107
+ const previousPath = this.getRulePath(normalizedPreviousName);
108
+ if (fs.existsSync(previousPath)) {
109
+ fs.unlinkSync(previousPath);
110
+ }
111
+ }
112
+ return {
113
+ success: true,
114
+ savedName: normalizedName,
115
+ renamedFrom: isRename ? normalizedPreviousName : void 0
116
+ };
117
+ } catch (error) {
118
+ return {
119
+ success: false,
120
+ error: error.message || "Failed to save rule."
121
+ };
122
+ }
123
+ }
124
+ delete(name) {
125
+ try {
126
+ const filePath = this.getRulePath(name);
127
+ if (!fs.existsSync(filePath)) {
128
+ return { success: false, error: `Rule "${this.sanitizeName(name)}" not found.` };
129
+ }
130
+ fs.unlinkSync(filePath);
131
+ return { success: true };
132
+ } catch (error) {
133
+ return { success: false, error: error.message || "Failed to delete rule." };
134
+ }
135
+ }
136
+ }
137
+ const rulesStorage = RulesStorageService.getInstance();
138
+ export {
139
+ RulesStorageService,
140
+ rulesStorage
141
+ };
142
+ //# sourceMappingURL=rules-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/rules-storage.ts"],"sourcesContent":["/**\r\n * Rules Storage Service\r\n *\r\n * Stores reusable prompt rules as markdown files in ~/.centaurus/rules/.\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as os from 'os';\r\nimport { RuleMeta, SaveRuleResult, SavedRule } from '../types/rule.js';\r\n\r\nconst RULES_DIR = path.join(os.homedir(), '.centaurus', 'rules');\r\nconst RULE_EXT = '.md';\r\n\r\nfunction ensureRulesDir(): void {\r\n if (!fs.existsSync(RULES_DIR)) {\r\n fs.mkdirSync(RULES_DIR, { recursive: true });\r\n }\r\n}\r\n\r\nfunction truncatePreview(content: string, maxLength: number = 80): string {\r\n const firstMeaningfulLine = content\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .find(line => line.length > 0) || '';\r\n\r\n if (!firstMeaningfulLine) {\r\n return 'Saved rule';\r\n }\r\n\r\n return firstMeaningfulLine.length > maxLength\r\n ? `${firstMeaningfulLine.slice(0, maxLength - 3)}...`\r\n : firstMeaningfulLine;\r\n}\r\n\r\nexport class RulesStorageService {\r\n private static instance: RulesStorageService;\r\n\r\n private constructor() {\r\n ensureRulesDir();\r\n }\r\n\r\n static getInstance(): RulesStorageService {\r\n if (!RulesStorageService.instance) {\r\n RulesStorageService.instance = new RulesStorageService();\r\n }\r\n return RulesStorageService.instance;\r\n }\r\n\r\n sanitizeName(name: string): string {\r\n return name\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^a-z0-9_-]/g, '-')\r\n .replace(/-+/g, '-')\r\n .replace(/^-|-$/g, '');\r\n }\r\n\r\n getRulePath(name: string): string {\r\n return path.join(RULES_DIR, `${this.sanitizeName(name)}${RULE_EXT}`);\r\n }\r\n\r\n exists(name: string): boolean {\r\n return fs.existsSync(this.getRulePath(name));\r\n }\r\n\r\n load(name: string): SavedRule | null {\r\n try {\r\n const filePath = this.getRulePath(name);\r\n if (!fs.existsSync(filePath)) {\r\n return null;\r\n }\r\n\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const stats = fs.statSync(filePath);\r\n const baseName = path.basename(filePath, RULE_EXT);\r\n\r\n return {\r\n name: baseName,\r\n content,\r\n filePath,\r\n createdAt: stats.birthtime.toISOString(),\r\n updatedAt: stats.mtime.toISOString()\r\n };\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n list(): RuleMeta[] {\r\n try {\r\n ensureRulesDir();\r\n const files = fs.readdirSync(RULES_DIR)\r\n .filter(file => file.endsWith(RULE_EXT));\r\n\r\n const rules: RuleMeta[] = [];\r\n\r\n for (const file of files) {\r\n try {\r\n const filePath = path.join(RULES_DIR, file);\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const stats = fs.statSync(filePath);\r\n\r\n rules.push({\r\n name: path.basename(file, RULE_EXT),\r\n filePath,\r\n preview: truncatePreview(content),\r\n createdAt: stats.birthtime.toISOString(),\r\n updatedAt: stats.mtime.toISOString()\r\n });\r\n } catch {\r\n // Skip unreadable rule files.\r\n }\r\n }\r\n\r\n return rules.sort((a, b) =>\r\n new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()\r\n );\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n save(name: string, content: string, previousName?: string): SaveRuleResult {\r\n const normalizedName = this.sanitizeName(name);\r\n const normalizedPreviousName = previousName ? this.sanitizeName(previousName) : undefined;\r\n const normalizedContent = content.replace(/\\r\\n/g, '\\n').trim();\r\n\r\n if (!normalizedName) {\r\n return { success: false, error: 'Rule name must contain letters, numbers, hyphens, or underscores.' };\r\n }\r\n\r\n if (!normalizedContent) {\r\n return { success: false, error: 'Rule content cannot be empty.' };\r\n }\r\n\r\n ensureRulesDir();\r\n\r\n const targetPath = this.getRulePath(normalizedName);\r\n const isRename = !!normalizedPreviousName && normalizedPreviousName !== normalizedName;\r\n\r\n if ((!normalizedPreviousName || isRename) && fs.existsSync(targetPath)) {\r\n return {\r\n success: false,\r\n error: `Rule \"${normalizedName}\" already exists. Use /rules edit ${normalizedName} to update it.`\r\n };\r\n }\r\n\r\n try {\r\n fs.writeFileSync(targetPath, normalizedContent, 'utf-8');\r\n\r\n if (isRename) {\r\n const previousPath = this.getRulePath(normalizedPreviousName!);\r\n if (fs.existsSync(previousPath)) {\r\n fs.unlinkSync(previousPath);\r\n }\r\n }\r\n\r\n return {\r\n success: true,\r\n savedName: normalizedName,\r\n renamedFrom: isRename ? normalizedPreviousName : undefined\r\n };\r\n } catch (error: any) {\r\n return {\r\n success: false,\r\n error: error.message || 'Failed to save rule.'\r\n };\r\n }\r\n }\r\n\r\n delete(name: string): { success: boolean; error?: string } {\r\n try {\r\n const filePath = this.getRulePath(name);\r\n if (!fs.existsSync(filePath)) {\r\n return { success: false, error: `Rule \"${this.sanitizeName(name)}\" not found.` };\r\n }\r\n\r\n fs.unlinkSync(filePath);\r\n return { success: true };\r\n } catch (error: any) {\r\n return { success: false, error: error.message || 'Failed to delete rule.' };\r\n }\r\n }\r\n}\r\n\r\nexport const rulesStorage = RulesStorageService.getInstance();\r\n"],"mappings":"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","names":[]}