claudeup 1.8.0 → 3.3.0

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 (301) hide show
  1. package/bin/claudeup.js +20 -2
  2. package/package.json +10 -19
  3. package/src/data/cli-tools.js +123 -0
  4. package/src/data/cli-tools.ts +140 -0
  5. package/{dist → src}/data/marketplaces.js +23 -24
  6. package/src/data/marketplaces.ts +95 -0
  7. package/src/data/mcp-servers.js +509 -0
  8. package/src/data/mcp-servers.ts +526 -0
  9. package/src/data/statuslines.js +159 -0
  10. package/src/data/statuslines.ts +188 -0
  11. package/src/index.js +4 -0
  12. package/src/index.ts +5 -0
  13. package/{dist → src}/main.js +46 -47
  14. package/src/main.tsx +145 -0
  15. package/src/opentui.d.ts +191 -0
  16. package/{dist → src}/prerunner/index.js +31 -41
  17. package/src/prerunner/index.ts +124 -0
  18. package/{dist → src}/services/claude-runner.js +9 -10
  19. package/src/services/claude-runner.ts +31 -0
  20. package/{dist → src}/services/claude-settings.js +72 -33
  21. package/src/services/claude-settings.ts +934 -0
  22. package/src/services/local-marketplace.js +339 -0
  23. package/src/services/local-marketplace.ts +489 -0
  24. package/{dist → src}/services/mcp-registry.js +13 -14
  25. package/src/services/mcp-registry.ts +105 -0
  26. package/{dist → src}/services/plugin-manager.js +61 -13
  27. package/src/services/plugin-manager.ts +693 -0
  28. package/{dist → src}/services/plugin-mcp-config.js +19 -18
  29. package/src/services/plugin-mcp-config.ts +242 -0
  30. package/{dist → src}/services/update-cache.js +0 -1
  31. package/src/services/update-cache.ts +78 -0
  32. package/{dist → src}/services/version-check.js +15 -14
  33. package/src/services/version-check.ts +122 -0
  34. package/src/types/index.js +1 -0
  35. package/src/types/index.ts +141 -0
  36. package/src/ui/App.js +213 -0
  37. package/src/ui/App.tsx +359 -0
  38. package/src/ui/components/CategoryHeader.js +9 -0
  39. package/src/ui/components/CategoryHeader.tsx +41 -0
  40. package/{dist → src}/ui/components/ScrollableList.js +19 -6
  41. package/src/ui/components/ScrollableList.tsx +98 -0
  42. package/src/ui/components/SearchInput.js +19 -0
  43. package/src/ui/components/SearchInput.tsx +56 -0
  44. package/src/ui/components/StyledText.js +39 -0
  45. package/src/ui/components/StyledText.tsx +70 -0
  46. package/src/ui/components/TabBar.js +38 -0
  47. package/src/ui/components/TabBar.tsx +88 -0
  48. package/src/ui/components/layout/Panel.js +6 -0
  49. package/src/ui/components/layout/Panel.tsx +62 -0
  50. package/src/ui/components/layout/ProgressBar.js +14 -0
  51. package/src/ui/components/layout/ProgressBar.tsx +47 -0
  52. package/src/ui/components/layout/ScopeTabs.js +6 -0
  53. package/src/ui/components/layout/ScopeTabs.tsx +53 -0
  54. package/src/ui/components/layout/ScreenLayout.js +21 -0
  55. package/src/ui/components/layout/ScreenLayout.tsx +147 -0
  56. package/src/ui/components/layout/index.js +4 -0
  57. package/src/ui/components/layout/index.ts +4 -0
  58. package/src/ui/components/modals/ConfirmModal.js +14 -0
  59. package/src/ui/components/modals/ConfirmModal.tsx +59 -0
  60. package/src/ui/components/modals/InputModal.js +16 -0
  61. package/src/ui/components/modals/InputModal.tsx +68 -0
  62. package/src/ui/components/modals/LoadingModal.js +14 -0
  63. package/src/ui/components/modals/LoadingModal.tsx +40 -0
  64. package/src/ui/components/modals/MessageModal.js +16 -0
  65. package/src/ui/components/modals/MessageModal.tsx +64 -0
  66. package/src/ui/components/modals/ModalContainer.js +56 -0
  67. package/src/ui/components/modals/ModalContainer.tsx +104 -0
  68. package/src/ui/components/modals/SelectModal.js +26 -0
  69. package/src/ui/components/modals/SelectModal.tsx +82 -0
  70. package/src/ui/components/modals/index.js +6 -0
  71. package/src/ui/components/modals/index.ts +6 -0
  72. package/src/ui/hooks/index.js +3 -0
  73. package/src/ui/hooks/index.ts +3 -0
  74. package/{dist → src}/ui/hooks/useAsyncData.js +21 -22
  75. package/src/ui/hooks/useAsyncData.ts +127 -0
  76. package/src/ui/hooks/useKeyboard.js +13 -0
  77. package/src/ui/hooks/useKeyboard.ts +26 -0
  78. package/src/ui/hooks/useKeyboardHandler.js +39 -0
  79. package/src/ui/hooks/useKeyboardHandler.ts +63 -0
  80. package/{dist → src}/ui/screens/CliToolsScreen.js +60 -54
  81. package/src/ui/screens/CliToolsScreen.tsx +468 -0
  82. package/src/ui/screens/EnvVarsScreen.js +154 -0
  83. package/src/ui/screens/EnvVarsScreen.tsx +269 -0
  84. package/{dist → src}/ui/screens/McpRegistryScreen.js +56 -55
  85. package/src/ui/screens/McpRegistryScreen.tsx +331 -0
  86. package/{dist → src}/ui/screens/McpScreen.js +46 -47
  87. package/src/ui/screens/McpScreen.tsx +392 -0
  88. package/src/ui/screens/ModelSelectorScreen.js +292 -0
  89. package/src/ui/screens/ModelSelectorScreen.tsx +441 -0
  90. package/{dist → src}/ui/screens/PluginsScreen.js +305 -293
  91. package/src/ui/screens/PluginsScreen.tsx +1231 -0
  92. package/src/ui/screens/StatusLineScreen.js +200 -0
  93. package/src/ui/screens/StatusLineScreen.tsx +411 -0
  94. package/src/ui/screens/index.js +7 -0
  95. package/src/ui/screens/index.ts +7 -0
  96. package/src/ui/state/AnimationContext.js +34 -0
  97. package/src/ui/state/AnimationContext.tsx +76 -0
  98. package/{dist → src}/ui/state/AppContext.js +31 -32
  99. package/src/ui/state/AppContext.tsx +235 -0
  100. package/{dist → src}/ui/state/DimensionsContext.js +16 -17
  101. package/src/ui/state/DimensionsContext.tsx +144 -0
  102. package/{dist → src}/ui/state/reducer.js +89 -90
  103. package/src/ui/state/reducer.ts +467 -0
  104. package/src/ui/state/types.js +1 -0
  105. package/src/ui/state/types.ts +273 -0
  106. package/{dist → src}/utils/command-utils.js +3 -4
  107. package/src/utils/command-utils.ts +20 -0
  108. package/{dist → src}/utils/fuzzy-search.js +2 -3
  109. package/src/utils/fuzzy-search.ts +138 -0
  110. package/{dist → src}/utils/string-utils.js +6 -6
  111. package/src/utils/string-utils.ts +88 -0
  112. package/dist/data/cli-tools.d.ts +0 -13
  113. package/dist/data/cli-tools.d.ts.map +0 -1
  114. package/dist/data/cli-tools.js +0 -124
  115. package/dist/data/cli-tools.js.map +0 -1
  116. package/dist/data/marketplaces.d.ts +0 -6
  117. package/dist/data/marketplaces.d.ts.map +0 -1
  118. package/dist/data/marketplaces.js.map +0 -1
  119. package/dist/data/mcp-servers.d.ts +0 -8
  120. package/dist/data/mcp-servers.d.ts.map +0 -1
  121. package/dist/data/mcp-servers.js +0 -503
  122. package/dist/data/mcp-servers.js.map +0 -1
  123. package/dist/data/statuslines.d.ts +0 -10
  124. package/dist/data/statuslines.d.ts.map +0 -1
  125. package/dist/data/statuslines.js +0 -160
  126. package/dist/data/statuslines.js.map +0 -1
  127. package/dist/index.d.ts +0 -3
  128. package/dist/index.d.ts.map +0 -1
  129. package/dist/index.js +0 -90
  130. package/dist/index.js.map +0 -1
  131. package/dist/main.d.ts +0 -3
  132. package/dist/main.d.ts.map +0 -1
  133. package/dist/main.js.map +0 -1
  134. package/dist/prerunner/index.d.ts +0 -7
  135. package/dist/prerunner/index.d.ts.map +0 -1
  136. package/dist/prerunner/index.js.map +0 -1
  137. package/dist/services/claude-runner.d.ts +0 -7
  138. package/dist/services/claude-runner.d.ts.map +0 -1
  139. package/dist/services/claude-runner.js.map +0 -1
  140. package/dist/services/claude-settings.d.ts +0 -73
  141. package/dist/services/claude-settings.d.ts.map +0 -1
  142. package/dist/services/claude-settings.js.map +0 -1
  143. package/dist/services/local-marketplace.d.ts +0 -111
  144. package/dist/services/local-marketplace.d.ts.map +0 -1
  145. package/dist/services/local-marketplace.js +0 -599
  146. package/dist/services/local-marketplace.js.map +0 -1
  147. package/dist/services/mcp-registry.d.ts +0 -10
  148. package/dist/services/mcp-registry.d.ts.map +0 -1
  149. package/dist/services/mcp-registry.js.map +0 -1
  150. package/dist/services/plugin-manager.d.ts +0 -65
  151. package/dist/services/plugin-manager.d.ts.map +0 -1
  152. package/dist/services/plugin-manager.js.map +0 -1
  153. package/dist/services/plugin-mcp-config.d.ts +0 -52
  154. package/dist/services/plugin-mcp-config.d.ts.map +0 -1
  155. package/dist/services/plugin-mcp-config.js.map +0 -1
  156. package/dist/services/update-cache.d.ts +0 -21
  157. package/dist/services/update-cache.d.ts.map +0 -1
  158. package/dist/services/update-cache.js.map +0 -1
  159. package/dist/services/version-check.d.ts +0 -20
  160. package/dist/services/version-check.d.ts.map +0 -1
  161. package/dist/services/version-check.js.map +0 -1
  162. package/dist/types/index.d.ts +0 -105
  163. package/dist/types/index.d.ts.map +0 -1
  164. package/dist/types/index.js +0 -2
  165. package/dist/types/index.js.map +0 -1
  166. package/dist/ui/InkApp.d.ts +0 -5
  167. package/dist/ui/InkApp.d.ts.map +0 -1
  168. package/dist/ui/InkApp.js +0 -188
  169. package/dist/ui/InkApp.js.map +0 -1
  170. package/dist/ui/components/CategoryHeader.d.ts +0 -16
  171. package/dist/ui/components/CategoryHeader.d.ts.map +0 -1
  172. package/dist/ui/components/CategoryHeader.js +0 -11
  173. package/dist/ui/components/CategoryHeader.js.map +0 -1
  174. package/dist/ui/components/ScrollableList.d.ts +0 -16
  175. package/dist/ui/components/ScrollableList.d.ts.map +0 -1
  176. package/dist/ui/components/ScrollableList.js.map +0 -1
  177. package/dist/ui/components/SearchInput.d.ts +0 -18
  178. package/dist/ui/components/SearchInput.d.ts.map +0 -1
  179. package/dist/ui/components/SearchInput.js +0 -30
  180. package/dist/ui/components/SearchInput.js.map +0 -1
  181. package/dist/ui/components/TabBar.d.ts +0 -8
  182. package/dist/ui/components/TabBar.d.ts.map +0 -1
  183. package/dist/ui/components/TabBar.js +0 -18
  184. package/dist/ui/components/TabBar.js.map +0 -1
  185. package/dist/ui/components/layout/Footer.d.ts +0 -14
  186. package/dist/ui/components/layout/Footer.d.ts.map +0 -1
  187. package/dist/ui/components/layout/Footer.js +0 -23
  188. package/dist/ui/components/layout/Footer.js.map +0 -1
  189. package/dist/ui/components/layout/Header.d.ts +0 -4
  190. package/dist/ui/components/layout/Header.d.ts.map +0 -1
  191. package/dist/ui/components/layout/Header.js +0 -25
  192. package/dist/ui/components/layout/Header.js.map +0 -1
  193. package/dist/ui/components/layout/Panel.d.ts +0 -22
  194. package/dist/ui/components/layout/Panel.d.ts.map +0 -1
  195. package/dist/ui/components/layout/Panel.js +0 -8
  196. package/dist/ui/components/layout/Panel.js.map +0 -1
  197. package/dist/ui/components/layout/ProgressBar.d.ts +0 -12
  198. package/dist/ui/components/layout/ProgressBar.d.ts.map +0 -1
  199. package/dist/ui/components/layout/ProgressBar.js +0 -16
  200. package/dist/ui/components/layout/ProgressBar.js.map +0 -1
  201. package/dist/ui/components/layout/ScopeTabs.d.ts +0 -12
  202. package/dist/ui/components/layout/ScopeTabs.d.ts.map +0 -1
  203. package/dist/ui/components/layout/ScopeTabs.js +0 -8
  204. package/dist/ui/components/layout/ScopeTabs.js.map +0 -1
  205. package/dist/ui/components/layout/ScreenLayout.d.ts +0 -30
  206. package/dist/ui/components/layout/ScreenLayout.d.ts.map +0 -1
  207. package/dist/ui/components/layout/ScreenLayout.js +0 -23
  208. package/dist/ui/components/layout/ScreenLayout.js.map +0 -1
  209. package/dist/ui/components/layout/index.d.ts +0 -7
  210. package/dist/ui/components/layout/index.d.ts.map +0 -1
  211. package/dist/ui/components/layout/index.js +0 -7
  212. package/dist/ui/components/layout/index.js.map +0 -1
  213. package/dist/ui/components/modals/ConfirmModal.d.ts +0 -14
  214. package/dist/ui/components/modals/ConfirmModal.d.ts.map +0 -1
  215. package/dist/ui/components/modals/ConfirmModal.js +0 -15
  216. package/dist/ui/components/modals/ConfirmModal.js.map +0 -1
  217. package/dist/ui/components/modals/InputModal.d.ts +0 -16
  218. package/dist/ui/components/modals/InputModal.d.ts.map +0 -1
  219. package/dist/ui/components/modals/InputModal.js +0 -23
  220. package/dist/ui/components/modals/InputModal.js.map +0 -1
  221. package/dist/ui/components/modals/LoadingModal.d.ts +0 -8
  222. package/dist/ui/components/modals/LoadingModal.d.ts.map +0 -1
  223. package/dist/ui/components/modals/LoadingModal.js +0 -8
  224. package/dist/ui/components/modals/LoadingModal.js.map +0 -1
  225. package/dist/ui/components/modals/MessageModal.d.ts +0 -14
  226. package/dist/ui/components/modals/MessageModal.d.ts.map +0 -1
  227. package/dist/ui/components/modals/MessageModal.js +0 -17
  228. package/dist/ui/components/modals/MessageModal.js.map +0 -1
  229. package/dist/ui/components/modals/ModalContainer.d.ts +0 -7
  230. package/dist/ui/components/modals/ModalContainer.d.ts.map +0 -1
  231. package/dist/ui/components/modals/ModalContainer.js +0 -38
  232. package/dist/ui/components/modals/ModalContainer.js.map +0 -1
  233. package/dist/ui/components/modals/SelectModal.d.ts +0 -17
  234. package/dist/ui/components/modals/SelectModal.d.ts.map +0 -1
  235. package/dist/ui/components/modals/SelectModal.js +0 -33
  236. package/dist/ui/components/modals/SelectModal.js.map +0 -1
  237. package/dist/ui/components/modals/index.d.ts +0 -7
  238. package/dist/ui/components/modals/index.d.ts.map +0 -1
  239. package/dist/ui/components/modals/index.js +0 -7
  240. package/dist/ui/components/modals/index.js.map +0 -1
  241. package/dist/ui/hooks/index.d.ts +0 -3
  242. package/dist/ui/hooks/index.d.ts.map +0 -1
  243. package/dist/ui/hooks/index.js +0 -3
  244. package/dist/ui/hooks/index.js.map +0 -1
  245. package/dist/ui/hooks/useAsyncData.d.ts +0 -40
  246. package/dist/ui/hooks/useAsyncData.d.ts.map +0 -1
  247. package/dist/ui/hooks/useAsyncData.js.map +0 -1
  248. package/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -27
  249. package/dist/ui/hooks/useKeyboardNavigation.d.ts.map +0 -1
  250. package/dist/ui/hooks/useKeyboardNavigation.js +0 -82
  251. package/dist/ui/hooks/useKeyboardNavigation.js.map +0 -1
  252. package/dist/ui/screens/CliToolsScreen.d.ts +0 -4
  253. package/dist/ui/screens/CliToolsScreen.d.ts.map +0 -1
  254. package/dist/ui/screens/CliToolsScreen.js.map +0 -1
  255. package/dist/ui/screens/EnvVarsScreen.d.ts +0 -4
  256. package/dist/ui/screens/EnvVarsScreen.d.ts.map +0 -1
  257. package/dist/ui/screens/EnvVarsScreen.js +0 -145
  258. package/dist/ui/screens/EnvVarsScreen.js.map +0 -1
  259. package/dist/ui/screens/McpRegistryScreen.d.ts +0 -4
  260. package/dist/ui/screens/McpRegistryScreen.d.ts.map +0 -1
  261. package/dist/ui/screens/McpRegistryScreen.js.map +0 -1
  262. package/dist/ui/screens/McpScreen.d.ts +0 -4
  263. package/dist/ui/screens/McpScreen.d.ts.map +0 -1
  264. package/dist/ui/screens/McpScreen.js.map +0 -1
  265. package/dist/ui/screens/ModelSelectorScreen.d.ts +0 -4
  266. package/dist/ui/screens/ModelSelectorScreen.d.ts.map +0 -1
  267. package/dist/ui/screens/ModelSelectorScreen.js +0 -143
  268. package/dist/ui/screens/ModelSelectorScreen.js.map +0 -1
  269. package/dist/ui/screens/PluginsScreen.d.ts +0 -4
  270. package/dist/ui/screens/PluginsScreen.d.ts.map +0 -1
  271. package/dist/ui/screens/PluginsScreen.js.map +0 -1
  272. package/dist/ui/screens/StatusLineScreen.d.ts +0 -4
  273. package/dist/ui/screens/StatusLineScreen.d.ts.map +0 -1
  274. package/dist/ui/screens/StatusLineScreen.js +0 -197
  275. package/dist/ui/screens/StatusLineScreen.js.map +0 -1
  276. package/dist/ui/screens/index.d.ts +0 -8
  277. package/dist/ui/screens/index.d.ts.map +0 -1
  278. package/dist/ui/screens/index.js +0 -8
  279. package/dist/ui/screens/index.js.map +0 -1
  280. package/dist/ui/state/AppContext.d.ts +0 -40
  281. package/dist/ui/state/AppContext.d.ts.map +0 -1
  282. package/dist/ui/state/AppContext.js.map +0 -1
  283. package/dist/ui/state/DimensionsContext.d.ts +0 -27
  284. package/dist/ui/state/DimensionsContext.d.ts.map +0 -1
  285. package/dist/ui/state/DimensionsContext.js.map +0 -1
  286. package/dist/ui/state/reducer.d.ts +0 -4
  287. package/dist/ui/state/reducer.d.ts.map +0 -1
  288. package/dist/ui/state/reducer.js.map +0 -1
  289. package/dist/ui/state/types.d.ts +0 -266
  290. package/dist/ui/state/types.d.ts.map +0 -1
  291. package/dist/ui/state/types.js +0 -2
  292. package/dist/ui/state/types.js.map +0 -1
  293. package/dist/utils/command-utils.d.ts +0 -8
  294. package/dist/utils/command-utils.d.ts.map +0 -1
  295. package/dist/utils/command-utils.js.map +0 -1
  296. package/dist/utils/fuzzy-search.d.ts +0 -33
  297. package/dist/utils/fuzzy-search.d.ts.map +0 -1
  298. package/dist/utils/fuzzy-search.js.map +0 -1
  299. package/dist/utils/string-utils.d.ts +0 -24
  300. package/dist/utils/string-utils.d.ts.map +0 -1
  301. package/dist/utils/string-utils.js.map +0 -1
@@ -0,0 +1,467 @@
1
+ import type { AppState, AppAction } from "./types.js";
2
+
3
+ export const initialState: AppState = {
4
+ // Navigation - start on plugins screen
5
+ currentRoute: { screen: "plugins" },
6
+
7
+ // Project context
8
+ projectPath: process.cwd(),
9
+
10
+ // Global UI state
11
+ modal: null,
12
+ progress: null,
13
+ isSearching: false,
14
+
15
+ // Refresh counter for triggering data refetch
16
+ dataRefreshVersion: 0,
17
+
18
+ // Screen-specific state
19
+ plugins: {
20
+ scope: "project",
21
+ collapsedMarketplaces: new Set(),
22
+ selectedIndex: 0,
23
+ searchQuery: "",
24
+ marketplaces: { status: "idle" },
25
+ plugins: { status: "idle" },
26
+ },
27
+
28
+ mcp: {
29
+ selectedIndex: 0,
30
+ servers: { status: "idle" },
31
+ installedServers: {},
32
+ },
33
+
34
+ mcpRegistry: {
35
+ searchQuery: "",
36
+ selectedIndex: 0,
37
+ servers: { status: "idle" },
38
+ },
39
+
40
+ statusline: {
41
+ scope: "project",
42
+ selectedIndex: 0,
43
+ presets: { status: "idle" },
44
+ currentPreset: null,
45
+ },
46
+
47
+ envVars: {
48
+ selectedIndex: 0,
49
+ variables: { status: "idle" },
50
+ },
51
+
52
+ cliTools: {
53
+ selectedIndex: 0,
54
+ tools: { status: "idle" },
55
+ },
56
+
57
+ modelSelector: {
58
+ selectedIndex: 0,
59
+ searchQuery: "",
60
+ taskSize: "large",
61
+ },
62
+ };
63
+
64
+ export function appReducer(state: AppState, action: AppAction): AppState {
65
+ switch (action.type) {
66
+ // =========================================================================
67
+ // Navigation
68
+ // =========================================================================
69
+ case "NAVIGATE":
70
+ return { ...state, currentRoute: action.route };
71
+
72
+ // =========================================================================
73
+ // Plugins Screen
74
+ // =========================================================================
75
+ case "PLUGINS_SET_SCOPE":
76
+ return {
77
+ ...state,
78
+ plugins: {
79
+ ...state.plugins,
80
+ scope: action.scope,
81
+ selectedIndex: 0, // Reset selection when scope changes
82
+ marketplaces: { status: "loading" },
83
+ plugins: { status: "loading" },
84
+ },
85
+ };
86
+
87
+ case "PLUGINS_TOGGLE_SCOPE":
88
+ return appReducer(state, {
89
+ type: "PLUGINS_SET_SCOPE",
90
+ scope: state.plugins.scope === "project" ? "global" : "project",
91
+ });
92
+
93
+ case "PLUGINS_TOGGLE_MARKETPLACE": {
94
+ const collapsed = new Set(state.plugins.collapsedMarketplaces);
95
+ if (collapsed.has(action.name)) {
96
+ collapsed.delete(action.name);
97
+ } else {
98
+ collapsed.add(action.name);
99
+ }
100
+ return {
101
+ ...state,
102
+ plugins: {
103
+ ...state.plugins,
104
+ collapsedMarketplaces: collapsed,
105
+ },
106
+ };
107
+ }
108
+
109
+ case "PLUGINS_SELECT":
110
+ return {
111
+ ...state,
112
+ plugins: {
113
+ ...state.plugins,
114
+ selectedIndex: action.index,
115
+ },
116
+ };
117
+
118
+ case "PLUGINS_SET_SEARCH":
119
+ return {
120
+ ...state,
121
+ plugins: {
122
+ ...state.plugins,
123
+ searchQuery: action.query,
124
+ selectedIndex: 0, // Reset selection when search changes
125
+ },
126
+ };
127
+
128
+ case "PLUGINS_DATA_LOADING":
129
+ return {
130
+ ...state,
131
+ plugins: {
132
+ ...state.plugins,
133
+ marketplaces: { status: "loading" },
134
+ plugins: { status: "loading" },
135
+ },
136
+ };
137
+
138
+ case "PLUGINS_DATA_SUCCESS":
139
+ return {
140
+ ...state,
141
+ plugins: {
142
+ ...state.plugins,
143
+ marketplaces: { status: "success", data: action.marketplaces },
144
+ plugins: { status: "success", data: action.plugins },
145
+ },
146
+ };
147
+
148
+ case "PLUGINS_DATA_ERROR":
149
+ return {
150
+ ...state,
151
+ plugins: {
152
+ ...state.plugins,
153
+ marketplaces: { status: "error", error: action.error },
154
+ plugins: { status: "error", error: action.error },
155
+ },
156
+ };
157
+
158
+ // =========================================================================
159
+ // MCP Screen
160
+ // =========================================================================
161
+ case "MCP_SELECT":
162
+ return {
163
+ ...state,
164
+ mcp: {
165
+ ...state.mcp,
166
+ selectedIndex: action.index,
167
+ },
168
+ };
169
+
170
+ case "MCP_DATA_LOADING":
171
+ return {
172
+ ...state,
173
+ mcp: {
174
+ ...state.mcp,
175
+ servers: { status: "loading" },
176
+ },
177
+ };
178
+
179
+ case "MCP_DATA_SUCCESS":
180
+ return {
181
+ ...state,
182
+ mcp: {
183
+ ...state.mcp,
184
+ servers: { status: "success", data: action.servers },
185
+ installedServers: action.installedServers,
186
+ },
187
+ };
188
+
189
+ case "MCP_DATA_ERROR":
190
+ return {
191
+ ...state,
192
+ mcp: {
193
+ ...state.mcp,
194
+ servers: { status: "error", error: action.error },
195
+ },
196
+ };
197
+
198
+ // =========================================================================
199
+ // MCP Registry Screen
200
+ // =========================================================================
201
+ case "MCP_REGISTRY_SET_QUERY":
202
+ case "MCPREGISTRY_SEARCH":
203
+ return {
204
+ ...state,
205
+ mcpRegistry: {
206
+ ...state.mcpRegistry,
207
+ searchQuery: action.query,
208
+ selectedIndex: 0,
209
+ },
210
+ };
211
+
212
+ case "MCP_REGISTRY_SELECT":
213
+ case "MCPREGISTRY_SELECT":
214
+ return {
215
+ ...state,
216
+ mcpRegistry: {
217
+ ...state.mcpRegistry,
218
+ selectedIndex: action.index,
219
+ },
220
+ };
221
+
222
+ case "MCP_REGISTRY_DATA_LOADING":
223
+ return {
224
+ ...state,
225
+ mcpRegistry: {
226
+ ...state.mcpRegistry,
227
+ servers: { status: "loading" },
228
+ },
229
+ };
230
+
231
+ case "MCP_REGISTRY_DATA_SUCCESS":
232
+ return {
233
+ ...state,
234
+ mcpRegistry: {
235
+ ...state.mcpRegistry,
236
+ servers: { status: "success", data: action.servers },
237
+ },
238
+ };
239
+
240
+ case "MCP_REGISTRY_DATA_ERROR":
241
+ return {
242
+ ...state,
243
+ mcpRegistry: {
244
+ ...state.mcpRegistry,
245
+ servers: { status: "error", error: action.error },
246
+ },
247
+ };
248
+
249
+ // =========================================================================
250
+ // Status Line Screen
251
+ // =========================================================================
252
+ case "STATUSLINE_SET_SCOPE":
253
+ return {
254
+ ...state,
255
+ statusline: {
256
+ ...state.statusline,
257
+ scope: action.scope,
258
+ selectedIndex: 0,
259
+ presets: { status: "loading" },
260
+ },
261
+ };
262
+
263
+ case "STATUSLINE_TOGGLE_SCOPE":
264
+ return appReducer(state, {
265
+ type: "STATUSLINE_SET_SCOPE",
266
+ scope: state.statusline.scope === "project" ? "global" : "project",
267
+ });
268
+
269
+ case "STATUSLINE_SELECT":
270
+ return {
271
+ ...state,
272
+ statusline: {
273
+ ...state.statusline,
274
+ selectedIndex: action.index,
275
+ },
276
+ };
277
+
278
+ case "STATUSLINE_DATA_LOADING":
279
+ return {
280
+ ...state,
281
+ statusline: {
282
+ ...state.statusline,
283
+ presets: { status: "loading" },
284
+ },
285
+ };
286
+
287
+ case "STATUSLINE_DATA_SUCCESS":
288
+ return {
289
+ ...state,
290
+ statusline: {
291
+ ...state.statusline,
292
+ presets: { status: "success", data: action.presets },
293
+ currentPreset: action.currentPreset,
294
+ },
295
+ };
296
+
297
+ case "STATUSLINE_DATA_ERROR":
298
+ return {
299
+ ...state,
300
+ statusline: {
301
+ ...state.statusline,
302
+ presets: { status: "error", error: action.error },
303
+ },
304
+ };
305
+
306
+ // =========================================================================
307
+ // Env Vars Screen
308
+ // =========================================================================
309
+ case "ENVVARS_SELECT":
310
+ return {
311
+ ...state,
312
+ envVars: {
313
+ ...state.envVars,
314
+ selectedIndex: action.index,
315
+ },
316
+ };
317
+
318
+ case "ENVVARS_DATA_LOADING":
319
+ return {
320
+ ...state,
321
+ envVars: {
322
+ ...state.envVars,
323
+ variables: { status: "loading" },
324
+ },
325
+ };
326
+
327
+ case "ENVVARS_DATA_SUCCESS":
328
+ return {
329
+ ...state,
330
+ envVars: {
331
+ ...state.envVars,
332
+ variables: { status: "success", data: action.variables },
333
+ },
334
+ };
335
+
336
+ case "ENVVARS_DATA_ERROR":
337
+ return {
338
+ ...state,
339
+ envVars: {
340
+ ...state.envVars,
341
+ variables: { status: "error", error: action.error },
342
+ },
343
+ };
344
+
345
+ // =========================================================================
346
+ // CLI Tools Screen
347
+ // =========================================================================
348
+ case "CLITOOLS_SELECT":
349
+ return {
350
+ ...state,
351
+ cliTools: {
352
+ ...state.cliTools,
353
+ selectedIndex: action.index,
354
+ },
355
+ };
356
+
357
+ case "CLITOOLS_DATA_LOADING":
358
+ return {
359
+ ...state,
360
+ cliTools: {
361
+ ...state.cliTools,
362
+ tools: { status: "loading" },
363
+ },
364
+ };
365
+
366
+ case "CLITOOLS_DATA_SUCCESS":
367
+ return {
368
+ ...state,
369
+ cliTools: {
370
+ ...state.cliTools,
371
+ tools: { status: "success", data: action.tools },
372
+ },
373
+ };
374
+
375
+ case "CLITOOLS_DATA_ERROR":
376
+ return {
377
+ ...state,
378
+ cliTools: {
379
+ ...state.cliTools,
380
+ tools: { status: "error", error: action.error },
381
+ },
382
+ };
383
+
384
+ case "CLITOOLS_UPDATE_TOOL": {
385
+ if (state.cliTools.tools.status !== "success") return state;
386
+ return {
387
+ ...state,
388
+ cliTools: {
389
+ ...state.cliTools,
390
+ tools: {
391
+ status: "success",
392
+ data: state.cliTools.tools.data.map((tool) =>
393
+ tool.name === action.name ? { ...tool, ...action.updates } : tool,
394
+ ),
395
+ },
396
+ },
397
+ };
398
+ }
399
+
400
+ // =========================================================================
401
+ // Model Selector Screen
402
+ // =========================================================================
403
+ case "MODEL_SELECTOR_SELECT":
404
+ return {
405
+ ...state,
406
+ modelSelector: {
407
+ ...state.modelSelector,
408
+ selectedIndex: action.index,
409
+ },
410
+ };
411
+
412
+ case "MODEL_SELECTOR_SET_SEARCH":
413
+ return {
414
+ ...state,
415
+ modelSelector: {
416
+ ...state.modelSelector,
417
+ searchQuery: action.query,
418
+ selectedIndex: 0, // Reset selection when search changes
419
+ },
420
+ };
421
+
422
+ case "MODEL_SELECTOR_SET_TASK_SIZE":
423
+ return {
424
+ ...state,
425
+ modelSelector: {
426
+ ...state.modelSelector,
427
+ taskSize: action.size,
428
+ },
429
+ };
430
+
431
+ // =========================================================================
432
+ // Modals
433
+ // =========================================================================
434
+ case "SHOW_MODAL":
435
+ return { ...state, modal: action.modal, isSearching: true };
436
+
437
+ case "HIDE_MODAL":
438
+ return { ...state, modal: null, isSearching: false };
439
+
440
+ // =========================================================================
441
+ // Progress
442
+ // =========================================================================
443
+ case "SHOW_PROGRESS":
444
+ return { ...state, progress: action.state };
445
+
446
+ case "UPDATE_PROGRESS":
447
+ return { ...state, progress: action.state };
448
+
449
+ case "HIDE_PROGRESS":
450
+ return { ...state, progress: null };
451
+
452
+ // =========================================================================
453
+ // Search State
454
+ // =========================================================================
455
+ case "SET_SEARCHING":
456
+ return { ...state, isSearching: action.isSearching };
457
+
458
+ // =========================================================================
459
+ // Data Refresh
460
+ // =========================================================================
461
+ case "DATA_REFRESH_COMPLETE":
462
+ return { ...state, dataRefreshVersion: state.dataRefreshVersion + 1 };
463
+
464
+ default:
465
+ return state;
466
+ }
467
+ }
@@ -0,0 +1 @@
1
+ export {};