orquesta-cli 0.1.12 → 0.1.14

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 (540) hide show
  1. package/README.md +30 -4
  2. package/dist/cli.js +65 -4
  3. package/dist/constants.js +1 -1
  4. package/dist/core/config/config-manager.d.ts +13 -1
  5. package/dist/core/config/config-manager.js +83 -0
  6. package/dist/core/slash-command-handler.d.ts +1 -0
  7. package/dist/core/slash-command-handler.js +129 -0
  8. package/dist/orquesta/config-sync.d.ts +73 -0
  9. package/dist/orquesta/config-sync.js +230 -0
  10. package/dist/orquesta/prompt-reporter.d.ts +16 -0
  11. package/dist/orquesta/prompt-reporter.js +85 -0
  12. package/dist/setup/first-run-setup.d.ts +15 -0
  13. package/dist/setup/first-run-setup.js +238 -0
  14. package/dist/types/index.d.ts +11 -2
  15. package/dist/ui/TodoPanel.d.ts +1 -0
  16. package/dist/ui/TodoPanel.js +6 -1
  17. package/dist/ui/components/LLMSetupWizard.js +373 -7
  18. package/dist/ui/components/Logo.d.ts +2 -0
  19. package/dist/ui/components/Logo.js +10 -3
  20. package/dist/ui/components/OpenRouterModelBrowser.d.ts +13 -0
  21. package/dist/ui/components/OpenRouterModelBrowser.js +221 -0
  22. package/dist/ui/components/PlanExecuteApp.js +30 -4
  23. package/dist/ui/components/ProjectSelector.d.ts +8 -0
  24. package/dist/ui/components/ProjectSelector.js +119 -0
  25. package/dist/ui/components/StatusBar.d.ts +2 -0
  26. package/dist/ui/components/StatusBar.js +6 -1
  27. package/dist/ui/hooks/slashCommandProcessor.js +8 -4
  28. package/package.json +11 -5
  29. package/.eslintrc.json +0 -26
  30. package/.prettierrc.json +0 -10
  31. package/CLAUDE.md +0 -199
  32. package/SECURITY.md +0 -290
  33. package/TEST_LOCAL.md +0 -245
  34. package/dist/agents/base/base-agent.d.ts.map +0 -1
  35. package/dist/agents/base/base-agent.js.map +0 -1
  36. package/dist/agents/docs-search/index.d.ts.map +0 -1
  37. package/dist/agents/docs-search/index.js.map +0 -1
  38. package/dist/agents/index.d.ts.map +0 -1
  39. package/dist/agents/index.js.map +0 -1
  40. package/dist/agents/planner/index.d.ts.map +0 -1
  41. package/dist/agents/planner/index.js.map +0 -1
  42. package/dist/cli.d.ts.map +0 -1
  43. package/dist/cli.js.map +0 -1
  44. package/dist/constants.d.ts.map +0 -1
  45. package/dist/constants.js.map +0 -1
  46. package/dist/core/compact/compact-manager.d.ts.map +0 -1
  47. package/dist/core/compact/compact-manager.js.map +0 -1
  48. package/dist/core/compact/compact-prompts.d.ts.map +0 -1
  49. package/dist/core/compact/compact-prompts.js.map +0 -1
  50. package/dist/core/compact/context-tracker.d.ts.map +0 -1
  51. package/dist/core/compact/context-tracker.js.map +0 -1
  52. package/dist/core/compact/index.d.ts.map +0 -1
  53. package/dist/core/compact/index.js.map +0 -1
  54. package/dist/core/config/config-manager.d.ts.map +0 -1
  55. package/dist/core/config/config-manager.js.map +0 -1
  56. package/dist/core/config/index.d.ts.map +0 -1
  57. package/dist/core/config/index.js.map +0 -1
  58. package/dist/core/docs-manager.d.ts.map +0 -1
  59. package/dist/core/docs-manager.js.map +0 -1
  60. package/dist/core/git-auto-updater.d.ts.map +0 -1
  61. package/dist/core/git-auto-updater.js.map +0 -1
  62. package/dist/core/llm/index.d.ts.map +0 -1
  63. package/dist/core/llm/index.js.map +0 -1
  64. package/dist/core/llm/llm-client.d.ts.map +0 -1
  65. package/dist/core/llm/llm-client.js.map +0 -1
  66. package/dist/core/session/index.d.ts.map +0 -1
  67. package/dist/core/session/index.js.map +0 -1
  68. package/dist/core/session/session-manager.d.ts.map +0 -1
  69. package/dist/core/session/session-manager.js.map +0 -1
  70. package/dist/core/slash-command-handler.d.ts.map +0 -1
  71. package/dist/core/slash-command-handler.js.map +0 -1
  72. package/dist/core/usage-tracker.d.ts.map +0 -1
  73. package/dist/core/usage-tracker.js.map +0 -1
  74. package/dist/errors/base.d.ts.map +0 -1
  75. package/dist/errors/base.js.map +0 -1
  76. package/dist/errors/file.d.ts.map +0 -1
  77. package/dist/errors/file.js.map +0 -1
  78. package/dist/errors/index.d.ts.map +0 -1
  79. package/dist/errors/index.js.map +0 -1
  80. package/dist/errors/llm.d.ts.map +0 -1
  81. package/dist/errors/llm.js.map +0 -1
  82. package/dist/errors/network.d.ts.map +0 -1
  83. package/dist/errors/network.js.map +0 -1
  84. package/dist/errors/validation.d.ts.map +0 -1
  85. package/dist/errors/validation.js.map +0 -1
  86. package/dist/eval/eval-runner.d.ts.map +0 -1
  87. package/dist/eval/eval-runner.js.map +0 -1
  88. package/dist/eval/index.d.ts.map +0 -1
  89. package/dist/eval/index.js.map +0 -1
  90. package/dist/eval/types.d.ts.map +0 -1
  91. package/dist/eval/types.js.map +0 -1
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/index.js.map +0 -1
  94. package/dist/orchestration/index.d.ts.map +0 -1
  95. package/dist/orchestration/index.js.map +0 -1
  96. package/dist/orchestration/plan-executor.d.ts.map +0 -1
  97. package/dist/orchestration/plan-executor.js.map +0 -1
  98. package/dist/orchestration/types.d.ts.map +0 -1
  99. package/dist/orchestration/types.js.map +0 -1
  100. package/dist/orchestration/utils.d.ts.map +0 -1
  101. package/dist/orchestration/utils.js.map +0 -1
  102. package/dist/orquesta/connection.d.ts.map +0 -1
  103. package/dist/orquesta/connection.js.map +0 -1
  104. package/dist/prompts/agents/docs-search-decision.d.ts.map +0 -1
  105. package/dist/prompts/agents/docs-search-decision.js.map +0 -1
  106. package/dist/prompts/agents/docs-search.d.ts.map +0 -1
  107. package/dist/prompts/agents/docs-search.js.map +0 -1
  108. package/dist/prompts/agents/planning.d.ts.map +0 -1
  109. package/dist/prompts/agents/planning.js.map +0 -1
  110. package/dist/prompts/index.d.ts.map +0 -1
  111. package/dist/prompts/index.js.map +0 -1
  112. package/dist/prompts/shared/codebase-rules.d.ts.map +0 -1
  113. package/dist/prompts/shared/codebase-rules.js.map +0 -1
  114. package/dist/prompts/shared/git-rules.d.ts.map +0 -1
  115. package/dist/prompts/shared/git-rules.js.map +0 -1
  116. package/dist/prompts/shared/language-rules.d.ts.map +0 -1
  117. package/dist/prompts/shared/language-rules.js.map +0 -1
  118. package/dist/prompts/shared/tool-usage.d.ts.map +0 -1
  119. package/dist/prompts/shared/tool-usage.js.map +0 -1
  120. package/dist/prompts/system/compact.d.ts.map +0 -1
  121. package/dist/prompts/system/compact.js.map +0 -1
  122. package/dist/prompts/system/plan-execute.d.ts.map +0 -1
  123. package/dist/prompts/system/plan-execute.js.map +0 -1
  124. package/dist/tools/browser/browser-client.d.ts.map +0 -1
  125. package/dist/tools/browser/browser-client.js.map +0 -1
  126. package/dist/tools/browser/browser-tools.d.ts.map +0 -1
  127. package/dist/tools/browser/browser-tools.js.map +0 -1
  128. package/dist/tools/browser/index.d.ts.map +0 -1
  129. package/dist/tools/browser/index.js.map +0 -1
  130. package/dist/tools/index.d.ts.map +0 -1
  131. package/dist/tools/index.js.map +0 -1
  132. package/dist/tools/llm/agents/docs-search-tools.d.ts.map +0 -1
  133. package/dist/tools/llm/agents/docs-search-tools.js.map +0 -1
  134. package/dist/tools/llm/agents/index.d.ts.map +0 -1
  135. package/dist/tools/llm/agents/index.js.map +0 -1
  136. package/dist/tools/llm/index.d.ts.map +0 -1
  137. package/dist/tools/llm/index.js.map +0 -1
  138. package/dist/tools/llm/simple/ask-user-tool.d.ts.map +0 -1
  139. package/dist/tools/llm/simple/ask-user-tool.js.map +0 -1
  140. package/dist/tools/llm/simple/background-bash-tool.d.ts.map +0 -1
  141. package/dist/tools/llm/simple/background-bash-tool.js.map +0 -1
  142. package/dist/tools/llm/simple/background-powershell-tool.d.ts.map +0 -1
  143. package/dist/tools/llm/simple/background-powershell-tool.js.map +0 -1
  144. package/dist/tools/llm/simple/bash-tool.d.ts.map +0 -1
  145. package/dist/tools/llm/simple/bash-tool.js.map +0 -1
  146. package/dist/tools/llm/simple/docs-search-agent-tool.d.ts.map +0 -1
  147. package/dist/tools/llm/simple/docs-search-agent-tool.js.map +0 -1
  148. package/dist/tools/llm/simple/file-tools.d.ts.map +0 -1
  149. package/dist/tools/llm/simple/file-tools.js.map +0 -1
  150. package/dist/tools/llm/simple/final-response-tool.d.ts.map +0 -1
  151. package/dist/tools/llm/simple/final-response-tool.js.map +0 -1
  152. package/dist/tools/llm/simple/index.d.ts.map +0 -1
  153. package/dist/tools/llm/simple/index.js.map +0 -1
  154. package/dist/tools/llm/simple/planning-tools.d.ts.map +0 -1
  155. package/dist/tools/llm/simple/planning-tools.js.map +0 -1
  156. package/dist/tools/llm/simple/powershell-tool.d.ts.map +0 -1
  157. package/dist/tools/llm/simple/powershell-tool.js.map +0 -1
  158. package/dist/tools/llm/simple/simple-tool-executor.d.ts.map +0 -1
  159. package/dist/tools/llm/simple/simple-tool-executor.js.map +0 -1
  160. package/dist/tools/llm/simple/todo-tools.d.ts.map +0 -1
  161. package/dist/tools/llm/simple/todo-tools.js.map +0 -1
  162. package/dist/tools/llm/simple/user-interaction-tools.d.ts.map +0 -1
  163. package/dist/tools/llm/simple/user-interaction-tools.js.map +0 -1
  164. package/dist/tools/office/common/constants.d.ts.map +0 -1
  165. package/dist/tools/office/common/constants.js.map +0 -1
  166. package/dist/tools/office/common/index.d.ts.map +0 -1
  167. package/dist/tools/office/common/index.js.map +0 -1
  168. package/dist/tools/office/common/types.d.ts.map +0 -1
  169. package/dist/tools/office/common/types.js.map +0 -1
  170. package/dist/tools/office/common/utils.d.ts.map +0 -1
  171. package/dist/tools/office/common/utils.js.map +0 -1
  172. package/dist/tools/office/excel-client.d.ts.map +0 -1
  173. package/dist/tools/office/excel-client.js.map +0 -1
  174. package/dist/tools/office/excel-tools/cells.d.ts.map +0 -1
  175. package/dist/tools/office/excel-tools/cells.js.map +0 -1
  176. package/dist/tools/office/excel-tools/charts.d.ts.map +0 -1
  177. package/dist/tools/office/excel-tools/charts.js.map +0 -1
  178. package/dist/tools/office/excel-tools/comments.d.ts.map +0 -1
  179. package/dist/tools/office/excel-tools/comments.js.map +0 -1
  180. package/dist/tools/office/excel-tools/data-ops.d.ts.map +0 -1
  181. package/dist/tools/office/excel-tools/data-ops.js.map +0 -1
  182. package/dist/tools/office/excel-tools/export.d.ts.map +0 -1
  183. package/dist/tools/office/excel-tools/export.js.map +0 -1
  184. package/dist/tools/office/excel-tools/formatting.d.ts.map +0 -1
  185. package/dist/tools/office/excel-tools/formatting.js.map +0 -1
  186. package/dist/tools/office/excel-tools/index.d.ts.map +0 -1
  187. package/dist/tools/office/excel-tools/index.js.map +0 -1
  188. package/dist/tools/office/excel-tools/launch.d.ts.map +0 -1
  189. package/dist/tools/office/excel-tools/launch.js.map +0 -1
  190. package/dist/tools/office/excel-tools/media.d.ts.map +0 -1
  191. package/dist/tools/office/excel-tools/media.js.map +0 -1
  192. package/dist/tools/office/excel-tools/named-ranges.d.ts.map +0 -1
  193. package/dist/tools/office/excel-tools/named-ranges.js.map +0 -1
  194. package/dist/tools/office/excel-tools/protection.d.ts.map +0 -1
  195. package/dist/tools/office/excel-tools/protection.js.map +0 -1
  196. package/dist/tools/office/excel-tools/rows-columns.d.ts.map +0 -1
  197. package/dist/tools/office/excel-tools/rows-columns.js.map +0 -1
  198. package/dist/tools/office/excel-tools/sheets.d.ts.map +0 -1
  199. package/dist/tools/office/excel-tools/sheets.js.map +0 -1
  200. package/dist/tools/office/excel-tools/validation.d.ts.map +0 -1
  201. package/dist/tools/office/excel-tools/validation.js.map +0 -1
  202. package/dist/tools/office/excel-tools.d.ts.map +0 -1
  203. package/dist/tools/office/excel-tools.js.map +0 -1
  204. package/dist/tools/office/index.d.ts.map +0 -1
  205. package/dist/tools/office/index.js.map +0 -1
  206. package/dist/tools/office/office-client-base.d.ts.map +0 -1
  207. package/dist/tools/office/office-client-base.js.map +0 -1
  208. package/dist/tools/office/office-client.d.ts.map +0 -1
  209. package/dist/tools/office/office-client.js.map +0 -1
  210. package/dist/tools/office/powerpoint-client.d.ts.map +0 -1
  211. package/dist/tools/office/powerpoint-client.js.map +0 -1
  212. package/dist/tools/office/powerpoint-tools/effects.d.ts.map +0 -1
  213. package/dist/tools/office/powerpoint-tools/effects.js.map +0 -1
  214. package/dist/tools/office/powerpoint-tools/export.d.ts.map +0 -1
  215. package/dist/tools/office/powerpoint-tools/export.js.map +0 -1
  216. package/dist/tools/office/powerpoint-tools/index.d.ts.map +0 -1
  217. package/dist/tools/office/powerpoint-tools/index.js.map +0 -1
  218. package/dist/tools/office/powerpoint-tools/launch.d.ts.map +0 -1
  219. package/dist/tools/office/powerpoint-tools/launch.js.map +0 -1
  220. package/dist/tools/office/powerpoint-tools/media.d.ts.map +0 -1
  221. package/dist/tools/office/powerpoint-tools/media.js.map +0 -1
  222. package/dist/tools/office/powerpoint-tools/notes.d.ts.map +0 -1
  223. package/dist/tools/office/powerpoint-tools/notes.js.map +0 -1
  224. package/dist/tools/office/powerpoint-tools/sections.d.ts.map +0 -1
  225. package/dist/tools/office/powerpoint-tools/sections.js.map +0 -1
  226. package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +0 -1
  227. package/dist/tools/office/powerpoint-tools/shapes.js.map +0 -1
  228. package/dist/tools/office/powerpoint-tools/slides.d.ts.map +0 -1
  229. package/dist/tools/office/powerpoint-tools/slides.js.map +0 -1
  230. package/dist/tools/office/powerpoint-tools/tables.d.ts.map +0 -1
  231. package/dist/tools/office/powerpoint-tools/tables.js.map +0 -1
  232. package/dist/tools/office/powerpoint-tools/text.d.ts.map +0 -1
  233. package/dist/tools/office/powerpoint-tools/text.js.map +0 -1
  234. package/dist/tools/office/powerpoint-tools.d.ts.map +0 -1
  235. package/dist/tools/office/powerpoint-tools.js.map +0 -1
  236. package/dist/tools/office/word-client.d.ts.map +0 -1
  237. package/dist/tools/office/word-client.js.map +0 -1
  238. package/dist/tools/office/word-tools/bookmarks.d.ts.map +0 -1
  239. package/dist/tools/office/word-tools/bookmarks.js.map +0 -1
  240. package/dist/tools/office/word-tools/comments.d.ts.map +0 -1
  241. package/dist/tools/office/word-tools/comments.js.map +0 -1
  242. package/dist/tools/office/word-tools/content.d.ts.map +0 -1
  243. package/dist/tools/office/word-tools/content.js.map +0 -1
  244. package/dist/tools/office/word-tools/export.d.ts.map +0 -1
  245. package/dist/tools/office/word-tools/export.js.map +0 -1
  246. package/dist/tools/office/word-tools/formatting.d.ts.map +0 -1
  247. package/dist/tools/office/word-tools/formatting.js.map +0 -1
  248. package/dist/tools/office/word-tools/headers-footers.d.ts.map +0 -1
  249. package/dist/tools/office/word-tools/headers-footers.js.map +0 -1
  250. package/dist/tools/office/word-tools/index.d.ts.map +0 -1
  251. package/dist/tools/office/word-tools/index.js.map +0 -1
  252. package/dist/tools/office/word-tools/launch.d.ts.map +0 -1
  253. package/dist/tools/office/word-tools/launch.js.map +0 -1
  254. package/dist/tools/office/word-tools/lists.d.ts.map +0 -1
  255. package/dist/tools/office/word-tools/lists.js.map +0 -1
  256. package/dist/tools/office/word-tools/navigation.d.ts.map +0 -1
  257. package/dist/tools/office/word-tools/navigation.js.map +0 -1
  258. package/dist/tools/office/word-tools/page-setup.d.ts.map +0 -1
  259. package/dist/tools/office/word-tools/page-setup.js.map +0 -1
  260. package/dist/tools/office/word-tools/tables.d.ts.map +0 -1
  261. package/dist/tools/office/word-tools/tables.js.map +0 -1
  262. package/dist/tools/office/word-tools/text.d.ts.map +0 -1
  263. package/dist/tools/office/word-tools/text.js.map +0 -1
  264. package/dist/tools/office/word-tools/undo-redo.d.ts.map +0 -1
  265. package/dist/tools/office/word-tools/undo-redo.js.map +0 -1
  266. package/dist/tools/office/word-tools/watermarks.d.ts.map +0 -1
  267. package/dist/tools/office/word-tools/watermarks.js.map +0 -1
  268. package/dist/tools/office/word-tools.d.ts.map +0 -1
  269. package/dist/tools/office/word-tools.js.map +0 -1
  270. package/dist/tools/registry.d.ts.map +0 -1
  271. package/dist/tools/registry.js.map +0 -1
  272. package/dist/tools/types.d.ts.map +0 -1
  273. package/dist/tools/types.js.map +0 -1
  274. package/dist/types/index.d.ts.map +0 -1
  275. package/dist/types/index.js.map +0 -1
  276. package/dist/ui/PlanExecuteView.d.ts.map +0 -1
  277. package/dist/ui/PlanExecuteView.js.map +0 -1
  278. package/dist/ui/TodoPanel.d.ts.map +0 -1
  279. package/dist/ui/TodoPanel.js.map +0 -1
  280. package/dist/ui/UpdateNotification.d.ts.map +0 -1
  281. package/dist/ui/UpdateNotification.js.map +0 -1
  282. package/dist/ui/components/ActivityIndicator.d.ts.map +0 -1
  283. package/dist/ui/components/ActivityIndicator.js.map +0 -1
  284. package/dist/ui/components/CommandBrowser.d.ts.map +0 -1
  285. package/dist/ui/components/CommandBrowser.js.map +0 -1
  286. package/dist/ui/components/CustomTextInput.d.ts.map +0 -1
  287. package/dist/ui/components/CustomTextInput.js.map +0 -1
  288. package/dist/ui/components/DocsSearchProgress.d.ts.map +0 -1
  289. package/dist/ui/components/DocsSearchProgress.js.map +0 -1
  290. package/dist/ui/components/FileBrowser.d.ts.map +0 -1
  291. package/dist/ui/components/FileBrowser.js.map +0 -1
  292. package/dist/ui/components/LLMSetupWizard.d.ts.map +0 -1
  293. package/dist/ui/components/LLMSetupWizard.js.map +0 -1
  294. package/dist/ui/components/Logo.d.ts.map +0 -1
  295. package/dist/ui/components/Logo.js.map +0 -1
  296. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  297. package/dist/ui/components/MarkdownRenderer.js.map +0 -1
  298. package/dist/ui/components/ModelSelector.d.ts.map +0 -1
  299. package/dist/ui/components/ModelSelector.js.map +0 -1
  300. package/dist/ui/components/PlanExecuteApp.d.ts.map +0 -1
  301. package/dist/ui/components/PlanExecuteApp.js.map +0 -1
  302. package/dist/ui/components/ProgressBar.d.ts.map +0 -1
  303. package/dist/ui/components/ProgressBar.js.map +0 -1
  304. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  305. package/dist/ui/components/StatusBar.js.map +0 -1
  306. package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
  307. package/dist/ui/components/ThinkingIndicator.js.map +0 -1
  308. package/dist/ui/components/TodoListView.d.ts.map +0 -1
  309. package/dist/ui/components/TodoListView.js.map +0 -1
  310. package/dist/ui/components/ToolSelector.d.ts.map +0 -1
  311. package/dist/ui/components/ToolSelector.js.map +0 -1
  312. package/dist/ui/components/dialogs/ApprovalDialog.d.ts.map +0 -1
  313. package/dist/ui/components/dialogs/ApprovalDialog.js.map +0 -1
  314. package/dist/ui/components/dialogs/AskUserDialog.d.ts.map +0 -1
  315. package/dist/ui/components/dialogs/AskUserDialog.js.map +0 -1
  316. package/dist/ui/components/dialogs/DocsBrowser.d.ts.map +0 -1
  317. package/dist/ui/components/dialogs/DocsBrowser.js.map +0 -1
  318. package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +0 -1
  319. package/dist/ui/components/dialogs/SettingsDialog.js.map +0 -1
  320. package/dist/ui/components/dialogs/index.d.ts.map +0 -1
  321. package/dist/ui/components/dialogs/index.js.map +0 -1
  322. package/dist/ui/components/index.d.ts.map +0 -1
  323. package/dist/ui/components/index.js.map +0 -1
  324. package/dist/ui/components/panels/LogPanel.d.ts.map +0 -1
  325. package/dist/ui/components/panels/LogPanel.js.map +0 -1
  326. package/dist/ui/components/panels/SessionPanel.d.ts.map +0 -1
  327. package/dist/ui/components/panels/SessionPanel.js.map +0 -1
  328. package/dist/ui/components/panels/index.d.ts.map +0 -1
  329. package/dist/ui/components/panels/index.js.map +0 -1
  330. package/dist/ui/components/views/ChatView.d.ts.map +0 -1
  331. package/dist/ui/components/views/ChatView.js.map +0 -1
  332. package/dist/ui/components/views/index.d.ts.map +0 -1
  333. package/dist/ui/components/views/index.js.map +0 -1
  334. package/dist/ui/contexts/TokenContext.d.ts.map +0 -1
  335. package/dist/ui/contexts/TokenContext.js.map +0 -1
  336. package/dist/ui/hooks/atFileProcessor.d.ts.map +0 -1
  337. package/dist/ui/hooks/atFileProcessor.js.map +0 -1
  338. package/dist/ui/hooks/index.d.ts.map +0 -1
  339. package/dist/ui/hooks/index.js.map +0 -1
  340. package/dist/ui/hooks/slashCommandProcessor.d.ts.map +0 -1
  341. package/dist/ui/hooks/slashCommandProcessor.js.map +0 -1
  342. package/dist/ui/hooks/useCommandBrowserState.d.ts.map +0 -1
  343. package/dist/ui/hooks/useCommandBrowserState.js.map +0 -1
  344. package/dist/ui/hooks/useFileBrowserState.d.ts.map +0 -1
  345. package/dist/ui/hooks/useFileBrowserState.js.map +0 -1
  346. package/dist/ui/hooks/useFileList.d.ts.map +0 -1
  347. package/dist/ui/hooks/useFileList.js.map +0 -1
  348. package/dist/ui/hooks/useInputHistory.d.ts.map +0 -1
  349. package/dist/ui/hooks/useInputHistory.js.map +0 -1
  350. package/dist/ui/hooks/usePlanExecution.d.ts.map +0 -1
  351. package/dist/ui/hooks/usePlanExecution.js.map +0 -1
  352. package/dist/ui/index.d.ts.map +0 -1
  353. package/dist/ui/index.js.map +0 -1
  354. package/dist/ui/ink-entry.d.ts.map +0 -1
  355. package/dist/ui/ink-entry.js.map +0 -1
  356. package/dist/utils/env-filter.d.ts.map +0 -1
  357. package/dist/utils/env-filter.js.map +0 -1
  358. package/dist/utils/file-system.d.ts.map +0 -1
  359. package/dist/utils/file-system.js.map +0 -1
  360. package/dist/utils/git-utils.d.ts.map +0 -1
  361. package/dist/utils/git-utils.js.map +0 -1
  362. package/dist/utils/json-stream-logger.d.ts.map +0 -1
  363. package/dist/utils/json-stream-logger.js.map +0 -1
  364. package/dist/utils/logger.d.ts.map +0 -1
  365. package/dist/utils/logger.js.map +0 -1
  366. package/dist/utils/platform-utils.d.ts.map +0 -1
  367. package/dist/utils/platform-utils.js.map +0 -1
  368. package/dist/utils/wsl-utils.d.ts.map +0 -1
  369. package/dist/utils/wsl-utils.js.map +0 -1
  370. package/electron.vite.config.ts +0 -63
  371. package/google374b9eba0c52b043.html +0 -1
  372. package/src/agents/base/base-agent.ts +0 -159
  373. package/src/agents/docs-search/index.ts +0 -365
  374. package/src/agents/index.ts +0 -34
  375. package/src/agents/planner/index.ts +0 -544
  376. package/src/cli.ts +0 -201
  377. package/src/constants.ts +0 -47
  378. package/src/core/compact/compact-manager.ts +0 -160
  379. package/src/core/compact/compact-prompts.ts +0 -150
  380. package/src/core/compact/context-tracker.ts +0 -164
  381. package/src/core/compact/index.ts +0 -25
  382. package/src/core/config/config-manager.ts +0 -460
  383. package/src/core/config/index.ts +0 -5
  384. package/src/core/docs-manager.ts +0 -678
  385. package/src/core/llm/index.ts +0 -7
  386. package/src/core/llm/llm-client.ts +0 -1550
  387. package/src/core/session/index.ts +0 -5
  388. package/src/core/session/session-manager.ts +0 -464
  389. package/src/core/slash-command-handler.ts +0 -410
  390. package/src/core/usage-tracker.ts +0 -438
  391. package/src/errors/base.ts +0 -81
  392. package/src/errors/file.ts +0 -183
  393. package/src/errors/index.ts +0 -95
  394. package/src/errors/llm.ts +0 -151
  395. package/src/errors/network.ts +0 -124
  396. package/src/errors/validation.ts +0 -111
  397. package/src/eval/eval-runner.ts +0 -456
  398. package/src/eval/index.ts +0 -8
  399. package/src/eval/types.ts +0 -139
  400. package/src/index.ts +0 -22
  401. package/src/orchestration/index.ts +0 -30
  402. package/src/orchestration/plan-executor.ts +0 -652
  403. package/src/orchestration/types.ts +0 -127
  404. package/src/orchestration/utils.ts +0 -119
  405. package/src/orquesta/connection.ts +0 -291
  406. package/src/prompts/agents/docs-search-decision.ts +0 -74
  407. package/src/prompts/agents/docs-search.ts +0 -84
  408. package/src/prompts/agents/planning.ts +0 -143
  409. package/src/prompts/index.ts +0 -31
  410. package/src/prompts/shared/codebase-rules.ts +0 -29
  411. package/src/prompts/shared/git-rules.ts +0 -94
  412. package/src/prompts/shared/language-rules.ts +0 -36
  413. package/src/prompts/shared/tool-usage.ts +0 -72
  414. package/src/prompts/system/compact.ts +0 -80
  415. package/src/prompts/system/plan-execute.ts +0 -89
  416. package/src/tools/browser/browser-client.ts +0 -1363
  417. package/src/tools/browser/browser-tools.ts +0 -1139
  418. package/src/tools/browser/index.ts +0 -65
  419. package/src/tools/index.ts +0 -23
  420. package/src/tools/llm/agents/docs-search-tools.ts +0 -368
  421. package/src/tools/llm/agents/index.ts +0 -22
  422. package/src/tools/llm/index.ts +0 -11
  423. package/src/tools/llm/simple/ask-user-tool.ts +0 -25
  424. package/src/tools/llm/simple/background-bash-tool.ts +0 -443
  425. package/src/tools/llm/simple/background-powershell-tool.ts +0 -421
  426. package/src/tools/llm/simple/bash-tool.ts +0 -238
  427. package/src/tools/llm/simple/docs-search-agent-tool.ts +0 -146
  428. package/src/tools/llm/simple/file-tools.ts +0 -1051
  429. package/src/tools/llm/simple/final-response-tool.ts +0 -180
  430. package/src/tools/llm/simple/index.ts +0 -42
  431. package/src/tools/llm/simple/planning-tools.ts +0 -143
  432. package/src/tools/llm/simple/powershell-tool.ts +0 -241
  433. package/src/tools/llm/simple/simple-tool-executor.ts +0 -279
  434. package/src/tools/llm/simple/todo-tools.ts +0 -207
  435. package/src/tools/llm/simple/user-interaction-tools.ts +0 -277
  436. package/src/tools/office/common/constants.ts +0 -335
  437. package/src/tools/office/common/index.ts +0 -133
  438. package/src/tools/office/common/types.ts +0 -286
  439. package/src/tools/office/common/utils.ts +0 -116
  440. package/src/tools/office/excel-client.ts +0 -1336
  441. package/src/tools/office/excel-tools/cells.ts +0 -359
  442. package/src/tools/office/excel-tools/charts.ts +0 -166
  443. package/src/tools/office/excel-tools/comments.ts +0 -155
  444. package/src/tools/office/excel-tools/data-ops.ts +0 -349
  445. package/src/tools/office/excel-tools/export.ts +0 -105
  446. package/src/tools/office/excel-tools/formatting.ts +0 -357
  447. package/src/tools/office/excel-tools/index.ts +0 -55
  448. package/src/tools/office/excel-tools/launch.ts +0 -303
  449. package/src/tools/office/excel-tools/media.ts +0 -117
  450. package/src/tools/office/excel-tools/named-ranges.ts +0 -148
  451. package/src/tools/office/excel-tools/protection.ts +0 -105
  452. package/src/tools/office/excel-tools/rows-columns.ts +0 -386
  453. package/src/tools/office/excel-tools/sheets.ts +0 -228
  454. package/src/tools/office/excel-tools/validation.ts +0 -226
  455. package/src/tools/office/excel-tools.ts +0 -9
  456. package/src/tools/office/index.ts +0 -259
  457. package/src/tools/office/office-client-base.ts +0 -242
  458. package/src/tools/office/office-client.ts +0 -377
  459. package/src/tools/office/powerpoint-client.ts +0 -1498
  460. package/src/tools/office/powerpoint-tools/effects.ts +0 -315
  461. package/src/tools/office/powerpoint-tools/export.ts +0 -138
  462. package/src/tools/office/powerpoint-tools/index.ts +0 -45
  463. package/src/tools/office/powerpoint-tools/launch.ts +0 -263
  464. package/src/tools/office/powerpoint-tools/media.ts +0 -291
  465. package/src/tools/office/powerpoint-tools/notes.ts +0 -220
  466. package/src/tools/office/powerpoint-tools/sections.ts +0 -140
  467. package/src/tools/office/powerpoint-tools/shapes.ts +0 -870
  468. package/src/tools/office/powerpoint-tools/slides.ts +0 -350
  469. package/src/tools/office/powerpoint-tools/tables.ts +0 -182
  470. package/src/tools/office/powerpoint-tools/text.ts +0 -473
  471. package/src/tools/office/powerpoint-tools.ts +0 -9
  472. package/src/tools/office/word-client.ts +0 -1697
  473. package/src/tools/office/word-tools/bookmarks.ts +0 -186
  474. package/src/tools/office/word-tools/comments.ts +0 -185
  475. package/src/tools/office/word-tools/content.ts +0 -229
  476. package/src/tools/office/word-tools/export.ts +0 -97
  477. package/src/tools/office/word-tools/formatting.ts +0 -161
  478. package/src/tools/office/word-tools/headers-footers.ts +0 -155
  479. package/src/tools/office/word-tools/index.ts +0 -57
  480. package/src/tools/office/word-tools/launch.ts +0 -312
  481. package/src/tools/office/word-tools/lists.ts +0 -97
  482. package/src/tools/office/word-tools/navigation.ts +0 -114
  483. package/src/tools/office/word-tools/page-setup.ts +0 -195
  484. package/src/tools/office/word-tools/tables.ts +0 -262
  485. package/src/tools/office/word-tools/text.ts +0 -294
  486. package/src/tools/office/word-tools/undo-redo.ts +0 -97
  487. package/src/tools/office/word-tools/watermarks.ts +0 -105
  488. package/src/tools/office/word-tools.ts +0 -9
  489. package/src/tools/registry.ts +0 -527
  490. package/src/tools/types.ts +0 -231
  491. package/src/types/index.ts +0 -181
  492. package/src/ui/PlanExecuteView.tsx +0 -119
  493. package/src/ui/TodoPanel.tsx +0 -240
  494. package/src/ui/UpdateNotification.tsx +0 -105
  495. package/src/ui/components/ActivityIndicator.tsx +0 -234
  496. package/src/ui/components/CommandBrowser.tsx +0 -114
  497. package/src/ui/components/CustomTextInput.tsx +0 -389
  498. package/src/ui/components/DocsSearchProgress.tsx +0 -85
  499. package/src/ui/components/FileBrowser.tsx +0 -93
  500. package/src/ui/components/LLMSetupWizard.tsx +0 -333
  501. package/src/ui/components/Logo.tsx +0 -125
  502. package/src/ui/components/MarkdownRenderer.tsx +0 -358
  503. package/src/ui/components/ModelSelector.tsx +0 -203
  504. package/src/ui/components/PlanExecuteApp.tsx +0 -2007
  505. package/src/ui/components/ProgressBar.tsx +0 -51
  506. package/src/ui/components/StatusBar.tsx +0 -302
  507. package/src/ui/components/ThinkingIndicator.tsx +0 -120
  508. package/src/ui/components/TodoListView.tsx +0 -140
  509. package/src/ui/components/ToolSelector.tsx +0 -215
  510. package/src/ui/components/dialogs/ApprovalDialog.tsx +0 -259
  511. package/src/ui/components/dialogs/AskUserDialog.tsx +0 -159
  512. package/src/ui/components/dialogs/DocsBrowser.tsx +0 -222
  513. package/src/ui/components/dialogs/SettingsDialog.tsx +0 -939
  514. package/src/ui/components/dialogs/index.ts +0 -13
  515. package/src/ui/components/index.ts +0 -27
  516. package/src/ui/components/panels/LogPanel.tsx +0 -385
  517. package/src/ui/components/panels/SessionPanel.tsx +0 -146
  518. package/src/ui/components/panels/index.ts +0 -13
  519. package/src/ui/components/views/ChatView.tsx +0 -447
  520. package/src/ui/components/views/index.ts +0 -5
  521. package/src/ui/contexts/TokenContext.tsx +0 -139
  522. package/src/ui/hooks/atFileProcessor.ts +0 -167
  523. package/src/ui/hooks/index.ts +0 -11
  524. package/src/ui/hooks/slashCommandProcessor.ts +0 -174
  525. package/src/ui/hooks/useCommandBrowserState.ts +0 -97
  526. package/src/ui/hooks/useFileBrowserState.ts +0 -116
  527. package/src/ui/hooks/useFileList.ts +0 -132
  528. package/src/ui/hooks/useInputHistory.ts +0 -89
  529. package/src/ui/hooks/usePlanExecution.ts +0 -339
  530. package/src/ui/index.ts +0 -10
  531. package/src/ui/ink-entry.tsx +0 -36
  532. package/src/utils/env-filter.ts +0 -164
  533. package/src/utils/file-system.ts +0 -133
  534. package/src/utils/git-utils.ts +0 -30
  535. package/src/utils/json-stream-logger.ts +0 -1259
  536. package/src/utils/logger.ts +0 -2767
  537. package/src/utils/platform-utils.ts +0 -256
  538. package/src/utils/wsl-utils.ts +0 -113
  539. package/tsconfig.electron.json +0 -39
  540. package/tsconfig.json +0 -64
@@ -1,939 +0,0 @@
1
- /**
2
- * Settings Browser Component
3
- *
4
- * Displays settings menu for interactive selection
5
- */
6
-
7
- import React, { useState, useEffect, useCallback } from 'react';
8
- import { Box, Text, useInput } from 'ink';
9
- import TextInput from 'ink-text-input';
10
- import SelectInput from 'ink-select-input';
11
- import { PlanningMode } from '../../../core/slash-command-handler.js';
12
- import { configManager } from '../../../core/config/config-manager.js';
13
- import { sessionManager } from '../../../core/session/session-manager.js';
14
- import { LLMClient } from '../../../core/llm/llm-client.js';
15
- import { EndpointConfig } from '../../../types/index.js';
16
-
17
- interface SettingsBrowserProps {
18
- currentPlanningMode: PlanningMode;
19
- onPlanningModeChange: (mode: PlanningMode) => void;
20
- onClose: () => void;
21
- }
22
-
23
- interface SelectItem {
24
- label: string;
25
- value: string;
26
- }
27
-
28
- interface SystemStatus {
29
- version: string;
30
- sessionId: string;
31
- workingDir: string;
32
- endpointUrl: string;
33
- llmModel: string;
34
- }
35
-
36
- interface EndpointHealthStatus {
37
- endpointId: string;
38
- modelId: string;
39
- healthy: boolean;
40
- latency?: number;
41
- error?: string;
42
- }
43
-
44
- interface LLMFormData {
45
- name: string;
46
- baseUrl: string;
47
- apiKey: string;
48
- modelId: string;
49
- modelName: string;
50
- maxContextLength: string;
51
- }
52
-
53
- type SettingsView =
54
- | 'main'
55
- | 'status'
56
- | 'planning-mode'
57
- | 'llms'
58
- | 'llm-add'
59
- | 'llm-detail'
60
- | 'llm-edit'
61
- | 'llm-delete-confirm';
62
-
63
- type FormField = 'name' | 'baseUrl' | 'apiKey' | 'modelId' | 'modelName' | 'maxContextLength' | 'buttons';
64
-
65
- export const SettingsBrowser: React.FC<SettingsBrowserProps> = ({
66
- currentPlanningMode: _currentPlanningMode, // Kept for backward compatibility but not used (always auto)
67
- onPlanningModeChange: _onPlanningModeChange, // Kept for backward compatibility but not used
68
- onClose,
69
- }) => {
70
- // Note: currentPlanningMode and onPlanningModeChange are kept for interface compatibility
71
- // but are not used since planning mode is always 'auto'
72
- void _currentPlanningMode;
73
- void _onPlanningModeChange;
74
- const [view, setView] = useState<SettingsView>('main');
75
- const [systemStatus, setSystemStatus] = useState<SystemStatus | null>(null);
76
-
77
- // LLMs state
78
- const [endpoints, setEndpoints] = useState<EndpointConfig[]>([]);
79
- const [healthStatus, setHealthStatus] = useState<EndpointHealthStatus[]>([]);
80
- const [isHealthChecking, setIsHealthChecking] = useState(false);
81
- const [selectedEndpoint, setSelectedEndpoint] = useState<EndpointConfig | null>(null);
82
-
83
- // Form state
84
- const [formData, setFormData] = useState<LLMFormData>({
85
- name: '',
86
- baseUrl: '',
87
- apiKey: '',
88
- modelId: '',
89
- modelName: '',
90
- maxContextLength: '128000',
91
- });
92
- const [formField, setFormField] = useState<FormField>('name');
93
- const [formButtonIndex, setFormButtonIndex] = useState(0);
94
- const [formError, setFormError] = useState<string | null>(null);
95
- const [isTesting, setIsTesting] = useState(false);
96
-
97
- // Load endpoints
98
- const loadEndpoints = useCallback(() => {
99
- setEndpoints(configManager.getAllEndpoints());
100
- }, []);
101
-
102
- // Run health check
103
- const runHealthCheck = useCallback(async () => {
104
- setIsHealthChecking(true);
105
- try {
106
- const results = await LLMClient.healthCheckAll();
107
- const statusList: EndpointHealthStatus[] = [];
108
-
109
- for (const [endpointId, modelResults] of results) {
110
- for (const result of modelResults) {
111
- statusList.push({
112
- endpointId,
113
- modelId: result.modelId,
114
- healthy: result.healthy,
115
- latency: result.latency,
116
- error: result.error,
117
- });
118
- }
119
- }
120
-
121
- setHealthStatus(statusList);
122
-
123
- // Update config with health status
124
- await configManager.updateAllHealthStatus(results);
125
- } catch {
126
- // Ignore health check errors
127
- } finally {
128
- setIsHealthChecking(false);
129
- }
130
- }, []);
131
-
132
- // Load system status when status view is shown
133
- useEffect(() => {
134
- if (view === 'status') {
135
- const loadStatus = async () => {
136
- const endpoint = configManager.getCurrentEndpoint();
137
- const model = configManager.getCurrentModel();
138
- const cwd = process.cwd();
139
-
140
- // Read package.json for version
141
- let version = '0.1.0';
142
- try {
143
- const { readFile } = await import('fs/promises');
144
- const { fileURLToPath } = await import('url');
145
- const { dirname, join } = await import('path');
146
- const __filename = fileURLToPath(import.meta.url);
147
- const __dirname = dirname(__filename);
148
- const packageJsonPath = join(__dirname, '../../../package.json');
149
- const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8'));
150
- version = packageJson.version;
151
- } catch {
152
- // Use default version
153
- }
154
-
155
- setSystemStatus({
156
- version,
157
- sessionId: sessionManager.getCurrentSessionId() || 'No active session',
158
- workingDir: cwd,
159
- endpointUrl: endpoint?.baseUrl || 'Not configured',
160
- llmModel: model ? `${model.name} (${model.id})` : 'Not configured',
161
- });
162
- };
163
-
164
- loadStatus();
165
- }
166
- }, [view]);
167
-
168
- // Load endpoints and run health check when LLMs view is shown
169
- useEffect(() => {
170
- if (view === 'llms') {
171
- loadEndpoints();
172
- runHealthCheck();
173
- }
174
- }, [view, loadEndpoints, runHealthCheck]);
175
-
176
- // Get health status for endpoint
177
- const getEndpointHealth = useCallback(
178
- (endpointId: string): 'healthy' | 'degraded' | 'unhealthy' | 'unknown' => {
179
- const statuses = healthStatus.filter((s) => s.endpointId === endpointId);
180
- if (statuses.length === 0) return 'unknown';
181
-
182
- const healthyCount = statuses.filter((s) => s.healthy).length;
183
- if (healthyCount === statuses.length) return 'healthy';
184
- if (healthyCount > 0) return 'degraded';
185
- return 'unhealthy';
186
- },
187
- [healthStatus]
188
- );
189
-
190
- // Get health icon
191
- const getHealthIcon = (status: 'healthy' | 'degraded' | 'unhealthy' | 'unknown'): string => {
192
- switch (status) {
193
- case 'healthy':
194
- return '✓';
195
- case 'degraded':
196
- return '⚠';
197
- case 'unhealthy':
198
- return '✗';
199
- default:
200
- return '?';
201
- }
202
- };
203
-
204
- // Get health color
205
- const getHealthColor = (
206
- status: 'healthy' | 'degraded' | 'unhealthy' | 'unknown'
207
- ): string => {
208
- switch (status) {
209
- case 'healthy':
210
- return 'green';
211
- case 'degraded':
212
- return 'yellow';
213
- case 'unhealthy':
214
- return 'red';
215
- default:
216
- return 'gray';
217
- }
218
- };
219
-
220
- // Handle form field navigation with Tab, Arrow keys, and Enter
221
- const handleFormNavigation = useCallback(
222
- (key: { tab?: boolean; shift?: boolean; return?: boolean; upArrow?: boolean; downArrow?: boolean }) => {
223
- const fields: FormField[] = ['name', 'baseUrl', 'apiKey', 'modelId', 'modelName', 'maxContextLength', 'buttons'];
224
- const currentIndex = fields.indexOf(formField);
225
-
226
- // Tab or Enter to move to next field (except on buttons where Enter submits)
227
- if (key.tab || (key.return && formField !== 'buttons')) {
228
- if (key.shift) {
229
- // Previous field
230
- const prevIndex = currentIndex > 0 ? currentIndex - 1 : fields.length - 1;
231
- setFormField(fields[prevIndex]!);
232
- } else {
233
- // Next field
234
- const nextIndex = currentIndex < fields.length - 1 ? currentIndex + 1 : 0;
235
- setFormField(fields[nextIndex]!);
236
- }
237
- return true; // Handled
238
- }
239
-
240
- // Arrow keys for navigation
241
- if (key.upArrow) {
242
- const prevIndex = currentIndex > 0 ? currentIndex - 1 : fields.length - 1;
243
- if (formField === 'buttons') {
244
- // In buttons, up/down toggles between buttons
245
- setFormButtonIndex((prev) => (prev === 0 ? 1 : 0));
246
- } else {
247
- setFormField(fields[prevIndex]!);
248
- }
249
- return true;
250
- }
251
-
252
- if (key.downArrow) {
253
- const nextIndex = currentIndex < fields.length - 1 ? currentIndex + 1 : 0;
254
- if (formField === 'buttons') {
255
- // In buttons, up/down toggles between buttons
256
- setFormButtonIndex((prev) => (prev === 0 ? 1 : 0));
257
- } else {
258
- setFormField(fields[nextIndex]!);
259
- }
260
- return true;
261
- }
262
-
263
- return false;
264
- },
265
- [formField]
266
- );
267
-
268
- // Handle form submit
269
- const handleFormSubmit = useCallback(async () => {
270
- if (formButtonIndex === 1) {
271
- // Cancel
272
- setView('llms');
273
- return;
274
- }
275
-
276
- // Validate
277
- if (!formData.name.trim()) {
278
- setFormError('Name is required');
279
- return;
280
- }
281
- if (!formData.baseUrl.trim()) {
282
- setFormError('Base URL is required');
283
- return;
284
- }
285
- if (!formData.modelId.trim()) {
286
- setFormError('Model ID is required');
287
- return;
288
- }
289
-
290
- // Check for duplicate: same provider name AND same model ID
291
- const isDuplicate = endpoints.some((ep) => {
292
- // Skip the current endpoint when editing
293
- if (view === 'llm-edit' && selectedEndpoint && ep.id === selectedEndpoint.id) {
294
- return false;
295
- }
296
- // Check if provider name AND model ID both match
297
- return ep.name === formData.name.trim() && ep.models.some((m) => m.id === formData.modelId.trim());
298
- });
299
-
300
- if (isDuplicate) {
301
- setFormError(`Duplicate: Provider "${formData.name}" with Model ID "${formData.modelId}" already exists`);
302
- return;
303
- }
304
-
305
- // Test connection
306
- setIsTesting(true);
307
- setFormError(null);
308
-
309
- try {
310
- const result = await LLMClient.testConnection(
311
- formData.baseUrl,
312
- formData.apiKey,
313
- formData.modelId
314
- );
315
-
316
- if (!result.success) {
317
- setFormError(result.error || 'Connection failed');
318
- setIsTesting(false);
319
- return;
320
- }
321
-
322
- // Save endpoint
323
- const modelDisplayName = formData.modelName.trim() || formData.modelId;
324
- const maxTokens = parseInt(formData.maxContextLength, 10) || 128000;
325
- const newEndpoint: EndpointConfig = {
326
- id: `ep-${Date.now()}`,
327
- name: formData.name,
328
- baseUrl: formData.baseUrl,
329
- apiKey: formData.apiKey || undefined,
330
- models: [
331
- {
332
- id: formData.modelId,
333
- name: modelDisplayName,
334
- maxTokens: maxTokens,
335
- enabled: true,
336
- healthStatus: 'healthy',
337
- lastHealthCheck: new Date(),
338
- },
339
- ],
340
- createdAt: new Date(),
341
- updatedAt: new Date(),
342
- };
343
-
344
- if (view === 'llm-edit' && selectedEndpoint) {
345
- // Update existing
346
- await configManager.updateEndpoint(selectedEndpoint.id, {
347
- name: formData.name,
348
- baseUrl: formData.baseUrl,
349
- apiKey: formData.apiKey || undefined,
350
- models: [
351
- {
352
- id: formData.modelId,
353
- name: modelDisplayName,
354
- maxTokens: maxTokens,
355
- enabled: true,
356
- healthStatus: 'healthy',
357
- lastHealthCheck: new Date(),
358
- },
359
- ],
360
- });
361
- } else {
362
- // Add new
363
- await configManager.addEndpoint(newEndpoint);
364
-
365
- // If this is the first endpoint, set it as current
366
- if (endpoints.length === 0) {
367
- await configManager.setCurrentEndpoint(newEndpoint.id);
368
- }
369
- }
370
-
371
- setIsTesting(false);
372
- setView('llms');
373
- loadEndpoints();
374
- } catch (error) {
375
- setFormError(error instanceof Error ? error.message : 'Unknown error');
376
- setIsTesting(false);
377
- }
378
- }, [formData, formButtonIndex, view, selectedEndpoint, endpoints.length, loadEndpoints]);
379
-
380
- // Custom keyboard handling
381
- useInput((_inputChar, key) => {
382
- if (key.escape) {
383
- if (view === 'llm-add' || view === 'llm-edit') {
384
- setView('llms');
385
- setFormError(null);
386
- } else if (view === 'llm-detail' || view === 'llm-delete-confirm') {
387
- setView('llms');
388
- } else if (view === 'llms' || view === 'planning-mode' || view === 'status') {
389
- setView('main');
390
- } else {
391
- onClose();
392
- }
393
- return;
394
- }
395
-
396
- // Form navigation for add/edit views
397
- if (view === 'llm-add' || view === 'llm-edit') {
398
- // Handle Tab, Arrow keys, and Enter for navigation
399
- if (key.tab || key.upArrow || key.downArrow) {
400
- handleFormNavigation({
401
- tab: key.tab,
402
- shift: key.shift,
403
- upArrow: key.upArrow,
404
- downArrow: key.downArrow
405
- });
406
- return;
407
- }
408
-
409
- // Enter key handling
410
- if (key.return) {
411
- if (formField === 'buttons') {
412
- // Submit form when on buttons
413
- handleFormSubmit();
414
- } else {
415
- // Move to next field when on text inputs
416
- handleFormNavigation({ return: true });
417
- }
418
- return;
419
- }
420
- }
421
- });
422
-
423
- // Main menu items (Planning Mode removed - always auto)
424
- const mainMenuItems: SelectItem[] = [
425
- {
426
- label: '0. Status',
427
- value: 'status',
428
- },
429
- {
430
- label: '1. LLMs',
431
- value: 'llms',
432
- },
433
- ];
434
-
435
- // Planning mode options - kept for backward compatibility but not used
436
- // Planning mode is always 'auto'
437
- const planningModeItems: SelectItem[] = [
438
- {
439
- label: 'auto ✓',
440
- value: 'auto',
441
- },
442
- ];
443
-
444
- // LLMs menu items
445
- const llmsMenuItems: SelectItem[] = [
446
- { label: '+ Add new endpoint...', value: 'add' },
447
- ...endpoints.map((ep) => {
448
- const health = getEndpointHealth(ep.id);
449
- const icon = getHealthIcon(health);
450
- const currentEndpoint = configManager.getCurrentEndpoint();
451
- const isCurrent = currentEndpoint?.id === ep.id;
452
- const modelName = ep.models[0]?.id || ep.models[0]?.name || 'unknown';
453
- return {
454
- label: ` ${modelName} (${ep.name})${isCurrent ? ' *' : ''} ${icon}`,
455
- value: ep.id,
456
- };
457
- }),
458
- ];
459
-
460
- // Detail menu items
461
- const detailMenuItems: SelectItem[] = [
462
- { label: 'Edit', value: 'edit' },
463
- { label: 'Delete', value: 'delete' },
464
- { label: 'Set as Current', value: 'set-current' },
465
- { label: 'Refresh Health', value: 'refresh' },
466
- ];
467
-
468
- // Delete confirm items
469
- const deleteConfirmItems: SelectItem[] = [
470
- { label: 'Yes, delete', value: 'confirm' },
471
- { label: 'Cancel', value: 'cancel' },
472
- ];
473
-
474
- // Handle main menu selection
475
- const handleMainSelect = (item: SelectItem) => {
476
- if (item.value === 'status') {
477
- setView('status');
478
- } else if (item.value === 'llms') {
479
- setView('llms');
480
- }
481
- };
482
-
483
- // Handle planning mode selection (kept for backward compatibility but not used)
484
- // Planning mode is always 'auto'
485
- const handlePlanningModeSelect = (_item: SelectItem) => {
486
- // No-op: planning mode is always 'auto'
487
- onClose();
488
- };
489
-
490
- // Handle LLMs menu selection
491
- const handleLLMsSelect = (item: SelectItem) => {
492
- if (item.value === 'add') {
493
- setFormData({ name: '', baseUrl: '', apiKey: '', modelId: '', modelName: '', maxContextLength: '128000' });
494
- setFormField('name');
495
- setFormButtonIndex(0);
496
- setFormError(null);
497
- setView('llm-add');
498
- } else {
499
- const endpoint = endpoints.find((ep) => ep.id === item.value);
500
- if (endpoint) {
501
- setSelectedEndpoint(endpoint);
502
- setView('llm-detail');
503
- }
504
- }
505
- };
506
-
507
- // Handle detail menu selection
508
- const handleDetailSelect = async (item: SelectItem) => {
509
- if (!selectedEndpoint) return;
510
-
511
- switch (item.value) {
512
- case 'edit':
513
- setFormData({
514
- name: selectedEndpoint.name,
515
- baseUrl: selectedEndpoint.baseUrl,
516
- apiKey: selectedEndpoint.apiKey || '',
517
- modelId: selectedEndpoint.models[0]?.id || '',
518
- modelName: selectedEndpoint.models[0]?.name || '',
519
- maxContextLength: String(selectedEndpoint.models[0]?.maxTokens || 128000),
520
- });
521
- setFormField('name');
522
- setFormButtonIndex(0);
523
- setFormError(null);
524
- setView('llm-edit');
525
- break;
526
- case 'delete':
527
- setView('llm-delete-confirm');
528
- break;
529
- case 'set-current':
530
- await configManager.setCurrentEndpoint(selectedEndpoint.id);
531
- setView('llms');
532
- loadEndpoints();
533
- break;
534
- case 'refresh':
535
- await runHealthCheck();
536
- break;
537
- }
538
- };
539
-
540
- // Handle delete confirm
541
- const handleDeleteConfirm = async (item: SelectItem) => {
542
- if (item.value === 'confirm' && selectedEndpoint) {
543
- await configManager.removeEndpoint(selectedEndpoint.id);
544
- setSelectedEndpoint(null);
545
- setView('llms');
546
- loadEndpoints();
547
- } else {
548
- setView('llm-detail');
549
- }
550
- };
551
-
552
- // Main settings menu view
553
- if (view === 'main') {
554
- return (
555
- <Box flexDirection="column">
556
- {/* Header */}
557
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
558
- <Text color="cyan" bold>
559
- Settings
560
- </Text>
561
- </Box>
562
-
563
- {/* Menu List */}
564
- <Box borderStyle="single" borderColor="gray" paddingX={1}>
565
- <SelectInput items={mainMenuItems} onSelect={handleMainSelect} />
566
- </Box>
567
-
568
- {/* Footer */}
569
- <Box marginTop={1}>
570
- <Text dimColor>↑↓: move | Enter: select | ESC: close</Text>
571
- </Box>
572
- </Box>
573
- );
574
- }
575
-
576
- // Status view
577
- if (view === 'status') {
578
- return (
579
- <Box flexDirection="column">
580
- {/* Header */}
581
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
582
- <Text color="cyan" bold>
583
- Settings &gt; Status
584
- </Text>
585
- </Box>
586
-
587
- {/* Status Information */}
588
- <Box borderStyle="single" borderColor="gray" paddingX={1} flexDirection="column">
589
- {systemStatus ? (
590
- <>
591
- <Box>
592
- <Text color="yellow">Version: </Text>
593
- <Text>{systemStatus.version}</Text>
594
- </Box>
595
- <Box>
596
- <Text color="yellow">Session ID: </Text>
597
- <Text>{systemStatus.sessionId}</Text>
598
- </Box>
599
- <Box>
600
- <Text color="yellow">Working Dir: </Text>
601
- <Text>{systemStatus.workingDir}</Text>
602
- </Box>
603
- <Box>
604
- <Text color="yellow">Endpoint URL: </Text>
605
- <Text>{systemStatus.endpointUrl}</Text>
606
- </Box>
607
- <Box>
608
- <Text color="yellow">LLM Model: </Text>
609
- <Text>{systemStatus.llmModel}</Text>
610
- </Box>
611
- </>
612
- ) : (
613
- <Text color="gray">Loading status...</Text>
614
- )}
615
- </Box>
616
-
617
- {/* Footer */}
618
- <Box marginTop={1}>
619
- <Text dimColor>ESC: back</Text>
620
- </Box>
621
- </Box>
622
- );
623
- }
624
-
625
- // Planning mode selection view
626
- if (view === 'planning-mode') {
627
- return (
628
- <Box flexDirection="column">
629
- {/* Header */}
630
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
631
- <Text color="cyan" bold>
632
- Settings &gt; Planning Mode
633
- </Text>
634
- </Box>
635
-
636
- {/* Description */}
637
- <Box paddingX={1} marginBottom={1}>
638
- <Text color="gray">Select the planning mode for task execution:</Text>
639
- </Box>
640
-
641
- {/* Mode descriptions */}
642
- <Box paddingX={1} marginBottom={1} flexDirection="column">
643
- <Text color="yellow">• planning: </Text>
644
- <Text color="gray"> Always create TODO list before execution</Text>
645
- <Text color="yellow">• no-planning: </Text>
646
- <Text color="gray"> Execute directly without planning</Text>
647
- <Text color="yellow">• auto: </Text>
648
- <Text color="gray"> Automatically decide based on task complexity</Text>
649
- </Box>
650
-
651
- {/* Options List */}
652
- <Box borderStyle="single" borderColor="gray" paddingX={1}>
653
- <SelectInput items={planningModeItems} onSelect={handlePlanningModeSelect} />
654
- </Box>
655
-
656
- {/* Footer */}
657
- <Box marginTop={1}>
658
- <Text dimColor>↑↓: move | Enter: select | ESC: back</Text>
659
- </Box>
660
- </Box>
661
- );
662
- }
663
-
664
- // LLMs list view
665
- if (view === 'llms') {
666
- return (
667
- <Box flexDirection="column">
668
- {/* Header */}
669
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
670
- <Text color="cyan" bold>
671
- Settings &gt; LLM Endpoints
672
- </Text>
673
- {isHealthChecking && (
674
- <Text color="yellow"> (checking health...)</Text>
675
- )}
676
- </Box>
677
-
678
- {/* Endpoints List */}
679
- <Box borderStyle="single" borderColor="gray" paddingX={1}>
680
- {endpoints.length === 0 && !llmsMenuItems.find((i) => i.value === 'add') ? (
681
- <Text color="gray">No endpoints configured</Text>
682
- ) : (
683
- <SelectInput items={llmsMenuItems} onSelect={handleLLMsSelect} />
684
- )}
685
- </Box>
686
-
687
- {/* Health Legend */}
688
- <Box marginTop={1} paddingX={1}>
689
- <Text color="green">✓ healthy </Text>
690
- <Text color="yellow">⚠ degraded </Text>
691
- <Text color="red">✗ unhealthy</Text>
692
- </Box>
693
-
694
- {/* Footer */}
695
- <Box marginTop={1}>
696
- <Text dimColor>↑↓: move | Enter: select | ESC: back</Text>
697
- </Box>
698
- </Box>
699
- );
700
- }
701
-
702
- // LLM Detail view
703
- if (view === 'llm-detail' && selectedEndpoint) {
704
- const health = getEndpointHealth(selectedEndpoint.id);
705
- const healthColor = getHealthColor(health);
706
- const healthIcon = getHealthIcon(health);
707
- const modelStatus = healthStatus.find(
708
- (s) => s.endpointId === selectedEndpoint.id
709
- );
710
-
711
- return (
712
- <Box flexDirection="column">
713
- {/* Header */}
714
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
715
- <Text color="cyan" bold>
716
- {selectedEndpoint.name}
717
- </Text>
718
- <Text> </Text>
719
- <Text color={healthColor}>{healthIcon} {health}</Text>
720
- </Box>
721
-
722
- {/* Endpoint Info */}
723
- <Box borderStyle="single" borderColor="gray" paddingX={1} flexDirection="column" marginBottom={1}>
724
- <Box>
725
- <Text color="yellow">URL: </Text>
726
- <Text>{selectedEndpoint.baseUrl}</Text>
727
- </Box>
728
- <Box>
729
- <Text color="yellow">Model: </Text>
730
- <Text>{selectedEndpoint.models[0]?.id || 'N/A'}</Text>
731
- </Box>
732
- <Box>
733
- <Text color="yellow">API Key: </Text>
734
- <Text>{selectedEndpoint.apiKey ? '••••••••' : '(not set)'}</Text>
735
- </Box>
736
- {modelStatus?.latency && (
737
- <Box>
738
- <Text color="yellow">Latency: </Text>
739
- <Text>{modelStatus.latency}ms</Text>
740
- </Box>
741
- )}
742
- </Box>
743
-
744
- {/* Actions */}
745
- <Box borderStyle="single" borderColor="gray" paddingX={1}>
746
- <SelectInput items={detailMenuItems} onSelect={handleDetailSelect} />
747
- </Box>
748
-
749
- {/* Footer */}
750
- <Box marginTop={1}>
751
- <Text dimColor>↑↓: move | Enter: select | ESC: back</Text>
752
- </Box>
753
- </Box>
754
- );
755
- }
756
-
757
- // Delete confirm view
758
- if (view === 'llm-delete-confirm' && selectedEndpoint) {
759
- return (
760
- <Box flexDirection="column">
761
- {/* Header */}
762
- <Box borderStyle="single" borderColor="red" paddingX={1} marginBottom={1}>
763
- <Text color="red" bold>
764
- Delete Endpoint
765
- </Text>
766
- </Box>
767
-
768
- {/* Confirmation */}
769
- <Box paddingX={1} marginBottom={1}>
770
- <Text>
771
- Are you sure you want to delete <Text color="yellow">{selectedEndpoint.name}</Text>?
772
- </Text>
773
- </Box>
774
-
775
- {/* Options */}
776
- <Box borderStyle="single" borderColor="gray" paddingX={1}>
777
- <SelectInput items={deleteConfirmItems} onSelect={handleDeleteConfirm} />
778
- </Box>
779
-
780
- {/* Footer */}
781
- <Box marginTop={1}>
782
- <Text dimColor>↑↓: move | Enter: select | ESC: cancel</Text>
783
- </Box>
784
- </Box>
785
- );
786
- }
787
-
788
- // LLM Add/Edit form view
789
- if (view === 'llm-add' || view === 'llm-edit') {
790
- const isEdit = view === 'llm-edit';
791
-
792
- return (
793
- <Box flexDirection="column">
794
- {/* Header */}
795
- <Box borderStyle="single" borderColor="cyan" paddingX={1} marginBottom={1}>
796
- <Text color="cyan" bold>
797
- {isEdit ? 'Edit Endpoint' : 'Add New Endpoint'}
798
- </Text>
799
- </Box>
800
-
801
- {/* Form */}
802
- <Box borderStyle="single" borderColor="gray" paddingX={1} flexDirection="column">
803
- {/* Name Field */}
804
- <Box>
805
- <Text color={formField === 'name' ? 'cyan' : 'yellow'}>
806
- {formField === 'name' ? '> ' : ' '}Name:
807
- </Text>
808
- {formField === 'name' ? (
809
- <TextInput
810
- value={formData.name}
811
- onChange={(value) => setFormData({ ...formData, name: value })}
812
- placeholder="My LLM Endpoint"
813
- />
814
- ) : (
815
- <Text>{formData.name || '(empty)'}</Text>
816
- )}
817
- </Box>
818
-
819
- {/* Base URL Field */}
820
- <Box>
821
- <Text color={formField === 'baseUrl' ? 'cyan' : 'yellow'}>
822
- {formField === 'baseUrl' ? '> ' : ' '}Base URL:
823
- </Text>
824
- {formField === 'baseUrl' ? (
825
- <TextInput
826
- value={formData.baseUrl}
827
- onChange={(value) => setFormData({ ...formData, baseUrl: value })}
828
- placeholder="http://localhost:11434/v1"
829
- />
830
- ) : (
831
- <Text>{formData.baseUrl || '(empty)'}</Text>
832
- )}
833
- </Box>
834
-
835
- {/* API Key Field */}
836
- <Box>
837
- <Text color={formField === 'apiKey' ? 'cyan' : 'yellow'}>
838
- {formField === 'apiKey' ? '> ' : ' '}API Key:
839
- </Text>
840
- {formField === 'apiKey' ? (
841
- <TextInput
842
- value={formData.apiKey}
843
- onChange={(value) => setFormData({ ...formData, apiKey: value })}
844
- placeholder="(optional)"
845
- />
846
- ) : (
847
- <Text>{formData.apiKey ? '••••••••' : '(optional)'}</Text>
848
- )}
849
- </Box>
850
-
851
- {/* Model ID Field */}
852
- <Box>
853
- <Text color={formField === 'modelId' ? 'cyan' : 'yellow'}>
854
- {formField === 'modelId' ? '> ' : ' '}Model ID:
855
- </Text>
856
- {formField === 'modelId' ? (
857
- <TextInput
858
- value={formData.modelId}
859
- onChange={(value) => setFormData({ ...formData, modelId: value })}
860
- placeholder="qwen2.5-coder:32b"
861
- />
862
- ) : (
863
- <Text>{formData.modelId || '(empty)'}</Text>
864
- )}
865
- </Box>
866
-
867
- {/* Model Name Field (Display Name) */}
868
- <Box>
869
- <Text color={formField === 'modelName' ? 'cyan' : 'yellow'}>
870
- {formField === 'modelName' ? '> ' : ' '}Model Name:
871
- </Text>
872
- {formField === 'modelName' ? (
873
- <TextInput
874
- value={formData.modelName}
875
- onChange={(value) => setFormData({ ...formData, modelName: value })}
876
- placeholder="(optional, defaults to Model ID)"
877
- />
878
- ) : (
879
- <Text>{formData.modelName || '(uses Model ID)'}</Text>
880
- )}
881
- </Box>
882
-
883
- {/* Max Context Length Field */}
884
- <Box>
885
- <Text color={formField === 'maxContextLength' ? 'cyan' : 'yellow'}>
886
- {formField === 'maxContextLength' ? '> ' : ' '}Max Context:
887
- </Text>
888
- {formField === 'maxContextLength' ? (
889
- <TextInput
890
- value={formData.maxContextLength}
891
- onChange={(value) => setFormData({ ...formData, maxContextLength: value.replace(/[^0-9]/g, '') })}
892
- placeholder="128000"
893
- />
894
- ) : (
895
- <Text>{formData.maxContextLength || '128000'}</Text>
896
- )}
897
- </Box>
898
- </Box>
899
-
900
- {/* Error Message */}
901
- {formError && (
902
- <Box marginTop={1} paddingX={1}>
903
- <Text color="red">Error: {formError}</Text>
904
- </Box>
905
- )}
906
-
907
- {/* Buttons */}
908
- <Box marginTop={1} flexDirection="column" paddingX={1}>
909
- <Box>
910
- <Text
911
- color={formField === 'buttons' && formButtonIndex === 0 ? 'cyan' : undefined}
912
- bold={formField === 'buttons' && formButtonIndex === 0}
913
- >
914
- {formField === 'buttons' && formButtonIndex === 0 ? '> ' : ' '}
915
- {isTesting ? 'Testing...' : 'Test & Save'}
916
- </Text>
917
- </Box>
918
- <Box>
919
- <Text
920
- color={formField === 'buttons' && formButtonIndex === 1 ? 'cyan' : undefined}
921
- bold={formField === 'buttons' && formButtonIndex === 1}
922
- >
923
- {formField === 'buttons' && formButtonIndex === 1 ? '> ' : ' '}
924
- Cancel
925
- </Text>
926
- </Box>
927
- </Box>
928
-
929
- {/* Footer */}
930
- <Box marginTop={1}>
931
- <Text dimColor>↑↓/Tab: move | Enter: next/submit | ESC: cancel</Text>
932
- </Box>
933
- </Box>
934
- );
935
- }
936
-
937
- // Fallback
938
- return null;
939
- };