orquesta-cli 0.1.13 → 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 (539) hide show
  1. package/README.md +30 -4
  2. package/dist/cli.js +65 -4
  3. package/dist/core/config/config-manager.d.ts +13 -1
  4. package/dist/core/config/config-manager.js +83 -0
  5. package/dist/core/slash-command-handler.d.ts +1 -0
  6. package/dist/core/slash-command-handler.js +129 -0
  7. package/dist/orquesta/config-sync.d.ts +73 -0
  8. package/dist/orquesta/config-sync.js +230 -0
  9. package/dist/orquesta/prompt-reporter.d.ts +16 -0
  10. package/dist/orquesta/prompt-reporter.js +85 -0
  11. package/dist/setup/first-run-setup.d.ts +15 -0
  12. package/dist/setup/first-run-setup.js +238 -0
  13. package/dist/types/index.d.ts +11 -2
  14. package/dist/ui/TodoPanel.d.ts +1 -0
  15. package/dist/ui/TodoPanel.js +6 -1
  16. package/dist/ui/components/LLMSetupWizard.js +373 -7
  17. package/dist/ui/components/Logo.d.ts +2 -0
  18. package/dist/ui/components/Logo.js +10 -3
  19. package/dist/ui/components/OpenRouterModelBrowser.d.ts +13 -0
  20. package/dist/ui/components/OpenRouterModelBrowser.js +221 -0
  21. package/dist/ui/components/PlanExecuteApp.js +30 -4
  22. package/dist/ui/components/ProjectSelector.d.ts +8 -0
  23. package/dist/ui/components/ProjectSelector.js +119 -0
  24. package/dist/ui/components/StatusBar.d.ts +2 -0
  25. package/dist/ui/components/StatusBar.js +6 -1
  26. package/dist/ui/hooks/slashCommandProcessor.js +8 -4
  27. package/package.json +11 -5
  28. package/.eslintrc.json +0 -26
  29. package/.prettierrc.json +0 -10
  30. package/CLAUDE.md +0 -199
  31. package/SECURITY.md +0 -290
  32. package/TEST_LOCAL.md +0 -245
  33. package/dist/agents/base/base-agent.d.ts.map +0 -1
  34. package/dist/agents/base/base-agent.js.map +0 -1
  35. package/dist/agents/docs-search/index.d.ts.map +0 -1
  36. package/dist/agents/docs-search/index.js.map +0 -1
  37. package/dist/agents/index.d.ts.map +0 -1
  38. package/dist/agents/index.js.map +0 -1
  39. package/dist/agents/planner/index.d.ts.map +0 -1
  40. package/dist/agents/planner/index.js.map +0 -1
  41. package/dist/cli.d.ts.map +0 -1
  42. package/dist/cli.js.map +0 -1
  43. package/dist/constants.d.ts.map +0 -1
  44. package/dist/constants.js.map +0 -1
  45. package/dist/core/compact/compact-manager.d.ts.map +0 -1
  46. package/dist/core/compact/compact-manager.js.map +0 -1
  47. package/dist/core/compact/compact-prompts.d.ts.map +0 -1
  48. package/dist/core/compact/compact-prompts.js.map +0 -1
  49. package/dist/core/compact/context-tracker.d.ts.map +0 -1
  50. package/dist/core/compact/context-tracker.js.map +0 -1
  51. package/dist/core/compact/index.d.ts.map +0 -1
  52. package/dist/core/compact/index.js.map +0 -1
  53. package/dist/core/config/config-manager.d.ts.map +0 -1
  54. package/dist/core/config/config-manager.js.map +0 -1
  55. package/dist/core/config/index.d.ts.map +0 -1
  56. package/dist/core/config/index.js.map +0 -1
  57. package/dist/core/docs-manager.d.ts.map +0 -1
  58. package/dist/core/docs-manager.js.map +0 -1
  59. package/dist/core/git-auto-updater.d.ts.map +0 -1
  60. package/dist/core/git-auto-updater.js.map +0 -1
  61. package/dist/core/llm/index.d.ts.map +0 -1
  62. package/dist/core/llm/index.js.map +0 -1
  63. package/dist/core/llm/llm-client.d.ts.map +0 -1
  64. package/dist/core/llm/llm-client.js.map +0 -1
  65. package/dist/core/session/index.d.ts.map +0 -1
  66. package/dist/core/session/index.js.map +0 -1
  67. package/dist/core/session/session-manager.d.ts.map +0 -1
  68. package/dist/core/session/session-manager.js.map +0 -1
  69. package/dist/core/slash-command-handler.d.ts.map +0 -1
  70. package/dist/core/slash-command-handler.js.map +0 -1
  71. package/dist/core/usage-tracker.d.ts.map +0 -1
  72. package/dist/core/usage-tracker.js.map +0 -1
  73. package/dist/errors/base.d.ts.map +0 -1
  74. package/dist/errors/base.js.map +0 -1
  75. package/dist/errors/file.d.ts.map +0 -1
  76. package/dist/errors/file.js.map +0 -1
  77. package/dist/errors/index.d.ts.map +0 -1
  78. package/dist/errors/index.js.map +0 -1
  79. package/dist/errors/llm.d.ts.map +0 -1
  80. package/dist/errors/llm.js.map +0 -1
  81. package/dist/errors/network.d.ts.map +0 -1
  82. package/dist/errors/network.js.map +0 -1
  83. package/dist/errors/validation.d.ts.map +0 -1
  84. package/dist/errors/validation.js.map +0 -1
  85. package/dist/eval/eval-runner.d.ts.map +0 -1
  86. package/dist/eval/eval-runner.js.map +0 -1
  87. package/dist/eval/index.d.ts.map +0 -1
  88. package/dist/eval/index.js.map +0 -1
  89. package/dist/eval/types.d.ts.map +0 -1
  90. package/dist/eval/types.js.map +0 -1
  91. package/dist/index.d.ts.map +0 -1
  92. package/dist/index.js.map +0 -1
  93. package/dist/orchestration/index.d.ts.map +0 -1
  94. package/dist/orchestration/index.js.map +0 -1
  95. package/dist/orchestration/plan-executor.d.ts.map +0 -1
  96. package/dist/orchestration/plan-executor.js.map +0 -1
  97. package/dist/orchestration/types.d.ts.map +0 -1
  98. package/dist/orchestration/types.js.map +0 -1
  99. package/dist/orchestration/utils.d.ts.map +0 -1
  100. package/dist/orchestration/utils.js.map +0 -1
  101. package/dist/orquesta/connection.d.ts.map +0 -1
  102. package/dist/orquesta/connection.js.map +0 -1
  103. package/dist/prompts/agents/docs-search-decision.d.ts.map +0 -1
  104. package/dist/prompts/agents/docs-search-decision.js.map +0 -1
  105. package/dist/prompts/agents/docs-search.d.ts.map +0 -1
  106. package/dist/prompts/agents/docs-search.js.map +0 -1
  107. package/dist/prompts/agents/planning.d.ts.map +0 -1
  108. package/dist/prompts/agents/planning.js.map +0 -1
  109. package/dist/prompts/index.d.ts.map +0 -1
  110. package/dist/prompts/index.js.map +0 -1
  111. package/dist/prompts/shared/codebase-rules.d.ts.map +0 -1
  112. package/dist/prompts/shared/codebase-rules.js.map +0 -1
  113. package/dist/prompts/shared/git-rules.d.ts.map +0 -1
  114. package/dist/prompts/shared/git-rules.js.map +0 -1
  115. package/dist/prompts/shared/language-rules.d.ts.map +0 -1
  116. package/dist/prompts/shared/language-rules.js.map +0 -1
  117. package/dist/prompts/shared/tool-usage.d.ts.map +0 -1
  118. package/dist/prompts/shared/tool-usage.js.map +0 -1
  119. package/dist/prompts/system/compact.d.ts.map +0 -1
  120. package/dist/prompts/system/compact.js.map +0 -1
  121. package/dist/prompts/system/plan-execute.d.ts.map +0 -1
  122. package/dist/prompts/system/plan-execute.js.map +0 -1
  123. package/dist/tools/browser/browser-client.d.ts.map +0 -1
  124. package/dist/tools/browser/browser-client.js.map +0 -1
  125. package/dist/tools/browser/browser-tools.d.ts.map +0 -1
  126. package/dist/tools/browser/browser-tools.js.map +0 -1
  127. package/dist/tools/browser/index.d.ts.map +0 -1
  128. package/dist/tools/browser/index.js.map +0 -1
  129. package/dist/tools/index.d.ts.map +0 -1
  130. package/dist/tools/index.js.map +0 -1
  131. package/dist/tools/llm/agents/docs-search-tools.d.ts.map +0 -1
  132. package/dist/tools/llm/agents/docs-search-tools.js.map +0 -1
  133. package/dist/tools/llm/agents/index.d.ts.map +0 -1
  134. package/dist/tools/llm/agents/index.js.map +0 -1
  135. package/dist/tools/llm/index.d.ts.map +0 -1
  136. package/dist/tools/llm/index.js.map +0 -1
  137. package/dist/tools/llm/simple/ask-user-tool.d.ts.map +0 -1
  138. package/dist/tools/llm/simple/ask-user-tool.js.map +0 -1
  139. package/dist/tools/llm/simple/background-bash-tool.d.ts.map +0 -1
  140. package/dist/tools/llm/simple/background-bash-tool.js.map +0 -1
  141. package/dist/tools/llm/simple/background-powershell-tool.d.ts.map +0 -1
  142. package/dist/tools/llm/simple/background-powershell-tool.js.map +0 -1
  143. package/dist/tools/llm/simple/bash-tool.d.ts.map +0 -1
  144. package/dist/tools/llm/simple/bash-tool.js.map +0 -1
  145. package/dist/tools/llm/simple/docs-search-agent-tool.d.ts.map +0 -1
  146. package/dist/tools/llm/simple/docs-search-agent-tool.js.map +0 -1
  147. package/dist/tools/llm/simple/file-tools.d.ts.map +0 -1
  148. package/dist/tools/llm/simple/file-tools.js.map +0 -1
  149. package/dist/tools/llm/simple/final-response-tool.d.ts.map +0 -1
  150. package/dist/tools/llm/simple/final-response-tool.js.map +0 -1
  151. package/dist/tools/llm/simple/index.d.ts.map +0 -1
  152. package/dist/tools/llm/simple/index.js.map +0 -1
  153. package/dist/tools/llm/simple/planning-tools.d.ts.map +0 -1
  154. package/dist/tools/llm/simple/planning-tools.js.map +0 -1
  155. package/dist/tools/llm/simple/powershell-tool.d.ts.map +0 -1
  156. package/dist/tools/llm/simple/powershell-tool.js.map +0 -1
  157. package/dist/tools/llm/simple/simple-tool-executor.d.ts.map +0 -1
  158. package/dist/tools/llm/simple/simple-tool-executor.js.map +0 -1
  159. package/dist/tools/llm/simple/todo-tools.d.ts.map +0 -1
  160. package/dist/tools/llm/simple/todo-tools.js.map +0 -1
  161. package/dist/tools/llm/simple/user-interaction-tools.d.ts.map +0 -1
  162. package/dist/tools/llm/simple/user-interaction-tools.js.map +0 -1
  163. package/dist/tools/office/common/constants.d.ts.map +0 -1
  164. package/dist/tools/office/common/constants.js.map +0 -1
  165. package/dist/tools/office/common/index.d.ts.map +0 -1
  166. package/dist/tools/office/common/index.js.map +0 -1
  167. package/dist/tools/office/common/types.d.ts.map +0 -1
  168. package/dist/tools/office/common/types.js.map +0 -1
  169. package/dist/tools/office/common/utils.d.ts.map +0 -1
  170. package/dist/tools/office/common/utils.js.map +0 -1
  171. package/dist/tools/office/excel-client.d.ts.map +0 -1
  172. package/dist/tools/office/excel-client.js.map +0 -1
  173. package/dist/tools/office/excel-tools/cells.d.ts.map +0 -1
  174. package/dist/tools/office/excel-tools/cells.js.map +0 -1
  175. package/dist/tools/office/excel-tools/charts.d.ts.map +0 -1
  176. package/dist/tools/office/excel-tools/charts.js.map +0 -1
  177. package/dist/tools/office/excel-tools/comments.d.ts.map +0 -1
  178. package/dist/tools/office/excel-tools/comments.js.map +0 -1
  179. package/dist/tools/office/excel-tools/data-ops.d.ts.map +0 -1
  180. package/dist/tools/office/excel-tools/data-ops.js.map +0 -1
  181. package/dist/tools/office/excel-tools/export.d.ts.map +0 -1
  182. package/dist/tools/office/excel-tools/export.js.map +0 -1
  183. package/dist/tools/office/excel-tools/formatting.d.ts.map +0 -1
  184. package/dist/tools/office/excel-tools/formatting.js.map +0 -1
  185. package/dist/tools/office/excel-tools/index.d.ts.map +0 -1
  186. package/dist/tools/office/excel-tools/index.js.map +0 -1
  187. package/dist/tools/office/excel-tools/launch.d.ts.map +0 -1
  188. package/dist/tools/office/excel-tools/launch.js.map +0 -1
  189. package/dist/tools/office/excel-tools/media.d.ts.map +0 -1
  190. package/dist/tools/office/excel-tools/media.js.map +0 -1
  191. package/dist/tools/office/excel-tools/named-ranges.d.ts.map +0 -1
  192. package/dist/tools/office/excel-tools/named-ranges.js.map +0 -1
  193. package/dist/tools/office/excel-tools/protection.d.ts.map +0 -1
  194. package/dist/tools/office/excel-tools/protection.js.map +0 -1
  195. package/dist/tools/office/excel-tools/rows-columns.d.ts.map +0 -1
  196. package/dist/tools/office/excel-tools/rows-columns.js.map +0 -1
  197. package/dist/tools/office/excel-tools/sheets.d.ts.map +0 -1
  198. package/dist/tools/office/excel-tools/sheets.js.map +0 -1
  199. package/dist/tools/office/excel-tools/validation.d.ts.map +0 -1
  200. package/dist/tools/office/excel-tools/validation.js.map +0 -1
  201. package/dist/tools/office/excel-tools.d.ts.map +0 -1
  202. package/dist/tools/office/excel-tools.js.map +0 -1
  203. package/dist/tools/office/index.d.ts.map +0 -1
  204. package/dist/tools/office/index.js.map +0 -1
  205. package/dist/tools/office/office-client-base.d.ts.map +0 -1
  206. package/dist/tools/office/office-client-base.js.map +0 -1
  207. package/dist/tools/office/office-client.d.ts.map +0 -1
  208. package/dist/tools/office/office-client.js.map +0 -1
  209. package/dist/tools/office/powerpoint-client.d.ts.map +0 -1
  210. package/dist/tools/office/powerpoint-client.js.map +0 -1
  211. package/dist/tools/office/powerpoint-tools/effects.d.ts.map +0 -1
  212. package/dist/tools/office/powerpoint-tools/effects.js.map +0 -1
  213. package/dist/tools/office/powerpoint-tools/export.d.ts.map +0 -1
  214. package/dist/tools/office/powerpoint-tools/export.js.map +0 -1
  215. package/dist/tools/office/powerpoint-tools/index.d.ts.map +0 -1
  216. package/dist/tools/office/powerpoint-tools/index.js.map +0 -1
  217. package/dist/tools/office/powerpoint-tools/launch.d.ts.map +0 -1
  218. package/dist/tools/office/powerpoint-tools/launch.js.map +0 -1
  219. package/dist/tools/office/powerpoint-tools/media.d.ts.map +0 -1
  220. package/dist/tools/office/powerpoint-tools/media.js.map +0 -1
  221. package/dist/tools/office/powerpoint-tools/notes.d.ts.map +0 -1
  222. package/dist/tools/office/powerpoint-tools/notes.js.map +0 -1
  223. package/dist/tools/office/powerpoint-tools/sections.d.ts.map +0 -1
  224. package/dist/tools/office/powerpoint-tools/sections.js.map +0 -1
  225. package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +0 -1
  226. package/dist/tools/office/powerpoint-tools/shapes.js.map +0 -1
  227. package/dist/tools/office/powerpoint-tools/slides.d.ts.map +0 -1
  228. package/dist/tools/office/powerpoint-tools/slides.js.map +0 -1
  229. package/dist/tools/office/powerpoint-tools/tables.d.ts.map +0 -1
  230. package/dist/tools/office/powerpoint-tools/tables.js.map +0 -1
  231. package/dist/tools/office/powerpoint-tools/text.d.ts.map +0 -1
  232. package/dist/tools/office/powerpoint-tools/text.js.map +0 -1
  233. package/dist/tools/office/powerpoint-tools.d.ts.map +0 -1
  234. package/dist/tools/office/powerpoint-tools.js.map +0 -1
  235. package/dist/tools/office/word-client.d.ts.map +0 -1
  236. package/dist/tools/office/word-client.js.map +0 -1
  237. package/dist/tools/office/word-tools/bookmarks.d.ts.map +0 -1
  238. package/dist/tools/office/word-tools/bookmarks.js.map +0 -1
  239. package/dist/tools/office/word-tools/comments.d.ts.map +0 -1
  240. package/dist/tools/office/word-tools/comments.js.map +0 -1
  241. package/dist/tools/office/word-tools/content.d.ts.map +0 -1
  242. package/dist/tools/office/word-tools/content.js.map +0 -1
  243. package/dist/tools/office/word-tools/export.d.ts.map +0 -1
  244. package/dist/tools/office/word-tools/export.js.map +0 -1
  245. package/dist/tools/office/word-tools/formatting.d.ts.map +0 -1
  246. package/dist/tools/office/word-tools/formatting.js.map +0 -1
  247. package/dist/tools/office/word-tools/headers-footers.d.ts.map +0 -1
  248. package/dist/tools/office/word-tools/headers-footers.js.map +0 -1
  249. package/dist/tools/office/word-tools/index.d.ts.map +0 -1
  250. package/dist/tools/office/word-tools/index.js.map +0 -1
  251. package/dist/tools/office/word-tools/launch.d.ts.map +0 -1
  252. package/dist/tools/office/word-tools/launch.js.map +0 -1
  253. package/dist/tools/office/word-tools/lists.d.ts.map +0 -1
  254. package/dist/tools/office/word-tools/lists.js.map +0 -1
  255. package/dist/tools/office/word-tools/navigation.d.ts.map +0 -1
  256. package/dist/tools/office/word-tools/navigation.js.map +0 -1
  257. package/dist/tools/office/word-tools/page-setup.d.ts.map +0 -1
  258. package/dist/tools/office/word-tools/page-setup.js.map +0 -1
  259. package/dist/tools/office/word-tools/tables.d.ts.map +0 -1
  260. package/dist/tools/office/word-tools/tables.js.map +0 -1
  261. package/dist/tools/office/word-tools/text.d.ts.map +0 -1
  262. package/dist/tools/office/word-tools/text.js.map +0 -1
  263. package/dist/tools/office/word-tools/undo-redo.d.ts.map +0 -1
  264. package/dist/tools/office/word-tools/undo-redo.js.map +0 -1
  265. package/dist/tools/office/word-tools/watermarks.d.ts.map +0 -1
  266. package/dist/tools/office/word-tools/watermarks.js.map +0 -1
  267. package/dist/tools/office/word-tools.d.ts.map +0 -1
  268. package/dist/tools/office/word-tools.js.map +0 -1
  269. package/dist/tools/registry.d.ts.map +0 -1
  270. package/dist/tools/registry.js.map +0 -1
  271. package/dist/tools/types.d.ts.map +0 -1
  272. package/dist/tools/types.js.map +0 -1
  273. package/dist/types/index.d.ts.map +0 -1
  274. package/dist/types/index.js.map +0 -1
  275. package/dist/ui/PlanExecuteView.d.ts.map +0 -1
  276. package/dist/ui/PlanExecuteView.js.map +0 -1
  277. package/dist/ui/TodoPanel.d.ts.map +0 -1
  278. package/dist/ui/TodoPanel.js.map +0 -1
  279. package/dist/ui/UpdateNotification.d.ts.map +0 -1
  280. package/dist/ui/UpdateNotification.js.map +0 -1
  281. package/dist/ui/components/ActivityIndicator.d.ts.map +0 -1
  282. package/dist/ui/components/ActivityIndicator.js.map +0 -1
  283. package/dist/ui/components/CommandBrowser.d.ts.map +0 -1
  284. package/dist/ui/components/CommandBrowser.js.map +0 -1
  285. package/dist/ui/components/CustomTextInput.d.ts.map +0 -1
  286. package/dist/ui/components/CustomTextInput.js.map +0 -1
  287. package/dist/ui/components/DocsSearchProgress.d.ts.map +0 -1
  288. package/dist/ui/components/DocsSearchProgress.js.map +0 -1
  289. package/dist/ui/components/FileBrowser.d.ts.map +0 -1
  290. package/dist/ui/components/FileBrowser.js.map +0 -1
  291. package/dist/ui/components/LLMSetupWizard.d.ts.map +0 -1
  292. package/dist/ui/components/LLMSetupWizard.js.map +0 -1
  293. package/dist/ui/components/Logo.d.ts.map +0 -1
  294. package/dist/ui/components/Logo.js.map +0 -1
  295. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  296. package/dist/ui/components/MarkdownRenderer.js.map +0 -1
  297. package/dist/ui/components/ModelSelector.d.ts.map +0 -1
  298. package/dist/ui/components/ModelSelector.js.map +0 -1
  299. package/dist/ui/components/PlanExecuteApp.d.ts.map +0 -1
  300. package/dist/ui/components/PlanExecuteApp.js.map +0 -1
  301. package/dist/ui/components/ProgressBar.d.ts.map +0 -1
  302. package/dist/ui/components/ProgressBar.js.map +0 -1
  303. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  304. package/dist/ui/components/StatusBar.js.map +0 -1
  305. package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
  306. package/dist/ui/components/ThinkingIndicator.js.map +0 -1
  307. package/dist/ui/components/TodoListView.d.ts.map +0 -1
  308. package/dist/ui/components/TodoListView.js.map +0 -1
  309. package/dist/ui/components/ToolSelector.d.ts.map +0 -1
  310. package/dist/ui/components/ToolSelector.js.map +0 -1
  311. package/dist/ui/components/dialogs/ApprovalDialog.d.ts.map +0 -1
  312. package/dist/ui/components/dialogs/ApprovalDialog.js.map +0 -1
  313. package/dist/ui/components/dialogs/AskUserDialog.d.ts.map +0 -1
  314. package/dist/ui/components/dialogs/AskUserDialog.js.map +0 -1
  315. package/dist/ui/components/dialogs/DocsBrowser.d.ts.map +0 -1
  316. package/dist/ui/components/dialogs/DocsBrowser.js.map +0 -1
  317. package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +0 -1
  318. package/dist/ui/components/dialogs/SettingsDialog.js.map +0 -1
  319. package/dist/ui/components/dialogs/index.d.ts.map +0 -1
  320. package/dist/ui/components/dialogs/index.js.map +0 -1
  321. package/dist/ui/components/index.d.ts.map +0 -1
  322. package/dist/ui/components/index.js.map +0 -1
  323. package/dist/ui/components/panels/LogPanel.d.ts.map +0 -1
  324. package/dist/ui/components/panels/LogPanel.js.map +0 -1
  325. package/dist/ui/components/panels/SessionPanel.d.ts.map +0 -1
  326. package/dist/ui/components/panels/SessionPanel.js.map +0 -1
  327. package/dist/ui/components/panels/index.d.ts.map +0 -1
  328. package/dist/ui/components/panels/index.js.map +0 -1
  329. package/dist/ui/components/views/ChatView.d.ts.map +0 -1
  330. package/dist/ui/components/views/ChatView.js.map +0 -1
  331. package/dist/ui/components/views/index.d.ts.map +0 -1
  332. package/dist/ui/components/views/index.js.map +0 -1
  333. package/dist/ui/contexts/TokenContext.d.ts.map +0 -1
  334. package/dist/ui/contexts/TokenContext.js.map +0 -1
  335. package/dist/ui/hooks/atFileProcessor.d.ts.map +0 -1
  336. package/dist/ui/hooks/atFileProcessor.js.map +0 -1
  337. package/dist/ui/hooks/index.d.ts.map +0 -1
  338. package/dist/ui/hooks/index.js.map +0 -1
  339. package/dist/ui/hooks/slashCommandProcessor.d.ts.map +0 -1
  340. package/dist/ui/hooks/slashCommandProcessor.js.map +0 -1
  341. package/dist/ui/hooks/useCommandBrowserState.d.ts.map +0 -1
  342. package/dist/ui/hooks/useCommandBrowserState.js.map +0 -1
  343. package/dist/ui/hooks/useFileBrowserState.d.ts.map +0 -1
  344. package/dist/ui/hooks/useFileBrowserState.js.map +0 -1
  345. package/dist/ui/hooks/useFileList.d.ts.map +0 -1
  346. package/dist/ui/hooks/useFileList.js.map +0 -1
  347. package/dist/ui/hooks/useInputHistory.d.ts.map +0 -1
  348. package/dist/ui/hooks/useInputHistory.js.map +0 -1
  349. package/dist/ui/hooks/usePlanExecution.d.ts.map +0 -1
  350. package/dist/ui/hooks/usePlanExecution.js.map +0 -1
  351. package/dist/ui/index.d.ts.map +0 -1
  352. package/dist/ui/index.js.map +0 -1
  353. package/dist/ui/ink-entry.d.ts.map +0 -1
  354. package/dist/ui/ink-entry.js.map +0 -1
  355. package/dist/utils/env-filter.d.ts.map +0 -1
  356. package/dist/utils/env-filter.js.map +0 -1
  357. package/dist/utils/file-system.d.ts.map +0 -1
  358. package/dist/utils/file-system.js.map +0 -1
  359. package/dist/utils/git-utils.d.ts.map +0 -1
  360. package/dist/utils/git-utils.js.map +0 -1
  361. package/dist/utils/json-stream-logger.d.ts.map +0 -1
  362. package/dist/utils/json-stream-logger.js.map +0 -1
  363. package/dist/utils/logger.d.ts.map +0 -1
  364. package/dist/utils/logger.js.map +0 -1
  365. package/dist/utils/platform-utils.d.ts.map +0 -1
  366. package/dist/utils/platform-utils.js.map +0 -1
  367. package/dist/utils/wsl-utils.d.ts.map +0 -1
  368. package/dist/utils/wsl-utils.js.map +0 -1
  369. package/electron.vite.config.ts +0 -63
  370. package/google374b9eba0c52b043.html +0 -1
  371. package/src/agents/base/base-agent.ts +0 -159
  372. package/src/agents/docs-search/index.ts +0 -365
  373. package/src/agents/index.ts +0 -34
  374. package/src/agents/planner/index.ts +0 -544
  375. package/src/cli.ts +0 -201
  376. package/src/constants.ts +0 -47
  377. package/src/core/compact/compact-manager.ts +0 -160
  378. package/src/core/compact/compact-prompts.ts +0 -150
  379. package/src/core/compact/context-tracker.ts +0 -164
  380. package/src/core/compact/index.ts +0 -25
  381. package/src/core/config/config-manager.ts +0 -460
  382. package/src/core/config/index.ts +0 -5
  383. package/src/core/docs-manager.ts +0 -678
  384. package/src/core/llm/index.ts +0 -7
  385. package/src/core/llm/llm-client.ts +0 -1550
  386. package/src/core/session/index.ts +0 -5
  387. package/src/core/session/session-manager.ts +0 -464
  388. package/src/core/slash-command-handler.ts +0 -410
  389. package/src/core/usage-tracker.ts +0 -438
  390. package/src/errors/base.ts +0 -81
  391. package/src/errors/file.ts +0 -183
  392. package/src/errors/index.ts +0 -95
  393. package/src/errors/llm.ts +0 -151
  394. package/src/errors/network.ts +0 -124
  395. package/src/errors/validation.ts +0 -111
  396. package/src/eval/eval-runner.ts +0 -456
  397. package/src/eval/index.ts +0 -8
  398. package/src/eval/types.ts +0 -139
  399. package/src/index.ts +0 -22
  400. package/src/orchestration/index.ts +0 -30
  401. package/src/orchestration/plan-executor.ts +0 -652
  402. package/src/orchestration/types.ts +0 -127
  403. package/src/orchestration/utils.ts +0 -119
  404. package/src/orquesta/connection.ts +0 -291
  405. package/src/prompts/agents/docs-search-decision.ts +0 -74
  406. package/src/prompts/agents/docs-search.ts +0 -84
  407. package/src/prompts/agents/planning.ts +0 -143
  408. package/src/prompts/index.ts +0 -31
  409. package/src/prompts/shared/codebase-rules.ts +0 -29
  410. package/src/prompts/shared/git-rules.ts +0 -94
  411. package/src/prompts/shared/language-rules.ts +0 -36
  412. package/src/prompts/shared/tool-usage.ts +0 -72
  413. package/src/prompts/system/compact.ts +0 -80
  414. package/src/prompts/system/plan-execute.ts +0 -89
  415. package/src/tools/browser/browser-client.ts +0 -1363
  416. package/src/tools/browser/browser-tools.ts +0 -1139
  417. package/src/tools/browser/index.ts +0 -65
  418. package/src/tools/index.ts +0 -23
  419. package/src/tools/llm/agents/docs-search-tools.ts +0 -368
  420. package/src/tools/llm/agents/index.ts +0 -22
  421. package/src/tools/llm/index.ts +0 -11
  422. package/src/tools/llm/simple/ask-user-tool.ts +0 -25
  423. package/src/tools/llm/simple/background-bash-tool.ts +0 -443
  424. package/src/tools/llm/simple/background-powershell-tool.ts +0 -421
  425. package/src/tools/llm/simple/bash-tool.ts +0 -238
  426. package/src/tools/llm/simple/docs-search-agent-tool.ts +0 -146
  427. package/src/tools/llm/simple/file-tools.ts +0 -1051
  428. package/src/tools/llm/simple/final-response-tool.ts +0 -180
  429. package/src/tools/llm/simple/index.ts +0 -42
  430. package/src/tools/llm/simple/planning-tools.ts +0 -143
  431. package/src/tools/llm/simple/powershell-tool.ts +0 -241
  432. package/src/tools/llm/simple/simple-tool-executor.ts +0 -279
  433. package/src/tools/llm/simple/todo-tools.ts +0 -207
  434. package/src/tools/llm/simple/user-interaction-tools.ts +0 -277
  435. package/src/tools/office/common/constants.ts +0 -335
  436. package/src/tools/office/common/index.ts +0 -133
  437. package/src/tools/office/common/types.ts +0 -286
  438. package/src/tools/office/common/utils.ts +0 -116
  439. package/src/tools/office/excel-client.ts +0 -1336
  440. package/src/tools/office/excel-tools/cells.ts +0 -359
  441. package/src/tools/office/excel-tools/charts.ts +0 -166
  442. package/src/tools/office/excel-tools/comments.ts +0 -155
  443. package/src/tools/office/excel-tools/data-ops.ts +0 -349
  444. package/src/tools/office/excel-tools/export.ts +0 -105
  445. package/src/tools/office/excel-tools/formatting.ts +0 -357
  446. package/src/tools/office/excel-tools/index.ts +0 -55
  447. package/src/tools/office/excel-tools/launch.ts +0 -303
  448. package/src/tools/office/excel-tools/media.ts +0 -117
  449. package/src/tools/office/excel-tools/named-ranges.ts +0 -148
  450. package/src/tools/office/excel-tools/protection.ts +0 -105
  451. package/src/tools/office/excel-tools/rows-columns.ts +0 -386
  452. package/src/tools/office/excel-tools/sheets.ts +0 -228
  453. package/src/tools/office/excel-tools/validation.ts +0 -226
  454. package/src/tools/office/excel-tools.ts +0 -9
  455. package/src/tools/office/index.ts +0 -259
  456. package/src/tools/office/office-client-base.ts +0 -242
  457. package/src/tools/office/office-client.ts +0 -377
  458. package/src/tools/office/powerpoint-client.ts +0 -1498
  459. package/src/tools/office/powerpoint-tools/effects.ts +0 -315
  460. package/src/tools/office/powerpoint-tools/export.ts +0 -138
  461. package/src/tools/office/powerpoint-tools/index.ts +0 -45
  462. package/src/tools/office/powerpoint-tools/launch.ts +0 -263
  463. package/src/tools/office/powerpoint-tools/media.ts +0 -291
  464. package/src/tools/office/powerpoint-tools/notes.ts +0 -220
  465. package/src/tools/office/powerpoint-tools/sections.ts +0 -140
  466. package/src/tools/office/powerpoint-tools/shapes.ts +0 -870
  467. package/src/tools/office/powerpoint-tools/slides.ts +0 -350
  468. package/src/tools/office/powerpoint-tools/tables.ts +0 -182
  469. package/src/tools/office/powerpoint-tools/text.ts +0 -473
  470. package/src/tools/office/powerpoint-tools.ts +0 -9
  471. package/src/tools/office/word-client.ts +0 -1697
  472. package/src/tools/office/word-tools/bookmarks.ts +0 -186
  473. package/src/tools/office/word-tools/comments.ts +0 -185
  474. package/src/tools/office/word-tools/content.ts +0 -229
  475. package/src/tools/office/word-tools/export.ts +0 -97
  476. package/src/tools/office/word-tools/formatting.ts +0 -161
  477. package/src/tools/office/word-tools/headers-footers.ts +0 -155
  478. package/src/tools/office/word-tools/index.ts +0 -57
  479. package/src/tools/office/word-tools/launch.ts +0 -312
  480. package/src/tools/office/word-tools/lists.ts +0 -97
  481. package/src/tools/office/word-tools/navigation.ts +0 -114
  482. package/src/tools/office/word-tools/page-setup.ts +0 -195
  483. package/src/tools/office/word-tools/tables.ts +0 -262
  484. package/src/tools/office/word-tools/text.ts +0 -294
  485. package/src/tools/office/word-tools/undo-redo.ts +0 -97
  486. package/src/tools/office/word-tools/watermarks.ts +0 -105
  487. package/src/tools/office/word-tools.ts +0 -9
  488. package/src/tools/registry.ts +0 -527
  489. package/src/tools/types.ts +0 -231
  490. package/src/types/index.ts +0 -181
  491. package/src/ui/PlanExecuteView.tsx +0 -119
  492. package/src/ui/TodoPanel.tsx +0 -240
  493. package/src/ui/UpdateNotification.tsx +0 -105
  494. package/src/ui/components/ActivityIndicator.tsx +0 -234
  495. package/src/ui/components/CommandBrowser.tsx +0 -114
  496. package/src/ui/components/CustomTextInput.tsx +0 -389
  497. package/src/ui/components/DocsSearchProgress.tsx +0 -85
  498. package/src/ui/components/FileBrowser.tsx +0 -93
  499. package/src/ui/components/LLMSetupWizard.tsx +0 -333
  500. package/src/ui/components/Logo.tsx +0 -125
  501. package/src/ui/components/MarkdownRenderer.tsx +0 -358
  502. package/src/ui/components/ModelSelector.tsx +0 -203
  503. package/src/ui/components/PlanExecuteApp.tsx +0 -2007
  504. package/src/ui/components/ProgressBar.tsx +0 -51
  505. package/src/ui/components/StatusBar.tsx +0 -302
  506. package/src/ui/components/ThinkingIndicator.tsx +0 -120
  507. package/src/ui/components/TodoListView.tsx +0 -140
  508. package/src/ui/components/ToolSelector.tsx +0 -215
  509. package/src/ui/components/dialogs/ApprovalDialog.tsx +0 -259
  510. package/src/ui/components/dialogs/AskUserDialog.tsx +0 -159
  511. package/src/ui/components/dialogs/DocsBrowser.tsx +0 -222
  512. package/src/ui/components/dialogs/SettingsDialog.tsx +0 -939
  513. package/src/ui/components/dialogs/index.ts +0 -13
  514. package/src/ui/components/index.ts +0 -27
  515. package/src/ui/components/panels/LogPanel.tsx +0 -385
  516. package/src/ui/components/panels/SessionPanel.tsx +0 -146
  517. package/src/ui/components/panels/index.ts +0 -13
  518. package/src/ui/components/views/ChatView.tsx +0 -447
  519. package/src/ui/components/views/index.ts +0 -5
  520. package/src/ui/contexts/TokenContext.tsx +0 -139
  521. package/src/ui/hooks/atFileProcessor.ts +0 -167
  522. package/src/ui/hooks/index.ts +0 -11
  523. package/src/ui/hooks/slashCommandProcessor.ts +0 -174
  524. package/src/ui/hooks/useCommandBrowserState.ts +0 -97
  525. package/src/ui/hooks/useFileBrowserState.ts +0 -116
  526. package/src/ui/hooks/useFileList.ts +0 -132
  527. package/src/ui/hooks/useInputHistory.ts +0 -89
  528. package/src/ui/hooks/usePlanExecution.ts +0 -339
  529. package/src/ui/index.ts +0 -10
  530. package/src/ui/ink-entry.tsx +0 -36
  531. package/src/utils/env-filter.ts +0 -164
  532. package/src/utils/file-system.ts +0 -133
  533. package/src/utils/git-utils.ts +0 -30
  534. package/src/utils/json-stream-logger.ts +0 -1259
  535. package/src/utils/logger.ts +0 -2767
  536. package/src/utils/platform-utils.ts +0 -256
  537. package/src/utils/wsl-utils.ts +0 -113
  538. package/tsconfig.electron.json +0 -39
  539. 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
- };