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.
- package/bin/claudeup.js +20 -2
- package/package.json +10 -19
- package/src/data/cli-tools.js +123 -0
- package/src/data/cli-tools.ts +140 -0
- package/{dist → src}/data/marketplaces.js +23 -24
- package/src/data/marketplaces.ts +95 -0
- package/src/data/mcp-servers.js +509 -0
- package/src/data/mcp-servers.ts +526 -0
- package/src/data/statuslines.js +159 -0
- package/src/data/statuslines.ts +188 -0
- package/src/index.js +4 -0
- package/src/index.ts +5 -0
- package/{dist → src}/main.js +46 -47
- package/src/main.tsx +145 -0
- package/src/opentui.d.ts +191 -0
- package/{dist → src}/prerunner/index.js +31 -41
- package/src/prerunner/index.ts +124 -0
- package/{dist → src}/services/claude-runner.js +9 -10
- package/src/services/claude-runner.ts +31 -0
- package/{dist → src}/services/claude-settings.js +72 -33
- package/src/services/claude-settings.ts +934 -0
- package/src/services/local-marketplace.js +339 -0
- package/src/services/local-marketplace.ts +489 -0
- package/{dist → src}/services/mcp-registry.js +13 -14
- package/src/services/mcp-registry.ts +105 -0
- package/{dist → src}/services/plugin-manager.js +61 -13
- package/src/services/plugin-manager.ts +693 -0
- package/{dist → src}/services/plugin-mcp-config.js +19 -18
- package/src/services/plugin-mcp-config.ts +242 -0
- package/{dist → src}/services/update-cache.js +0 -1
- package/src/services/update-cache.ts +78 -0
- package/{dist → src}/services/version-check.js +15 -14
- package/src/services/version-check.ts +122 -0
- package/src/types/index.js +1 -0
- package/src/types/index.ts +141 -0
- package/src/ui/App.js +213 -0
- package/src/ui/App.tsx +359 -0
- package/src/ui/components/CategoryHeader.js +9 -0
- package/src/ui/components/CategoryHeader.tsx +41 -0
- package/{dist → src}/ui/components/ScrollableList.js +19 -6
- package/src/ui/components/ScrollableList.tsx +98 -0
- package/src/ui/components/SearchInput.js +19 -0
- package/src/ui/components/SearchInput.tsx +56 -0
- package/src/ui/components/StyledText.js +39 -0
- package/src/ui/components/StyledText.tsx +70 -0
- package/src/ui/components/TabBar.js +38 -0
- package/src/ui/components/TabBar.tsx +88 -0
- package/src/ui/components/layout/Panel.js +6 -0
- package/src/ui/components/layout/Panel.tsx +62 -0
- package/src/ui/components/layout/ProgressBar.js +14 -0
- package/src/ui/components/layout/ProgressBar.tsx +47 -0
- package/src/ui/components/layout/ScopeTabs.js +6 -0
- package/src/ui/components/layout/ScopeTabs.tsx +53 -0
- package/src/ui/components/layout/ScreenLayout.js +21 -0
- package/src/ui/components/layout/ScreenLayout.tsx +147 -0
- package/src/ui/components/layout/index.js +4 -0
- package/src/ui/components/layout/index.ts +4 -0
- package/src/ui/components/modals/ConfirmModal.js +14 -0
- package/src/ui/components/modals/ConfirmModal.tsx +59 -0
- package/src/ui/components/modals/InputModal.js +16 -0
- package/src/ui/components/modals/InputModal.tsx +68 -0
- package/src/ui/components/modals/LoadingModal.js +14 -0
- package/src/ui/components/modals/LoadingModal.tsx +40 -0
- package/src/ui/components/modals/MessageModal.js +16 -0
- package/src/ui/components/modals/MessageModal.tsx +64 -0
- package/src/ui/components/modals/ModalContainer.js +56 -0
- package/src/ui/components/modals/ModalContainer.tsx +104 -0
- package/src/ui/components/modals/SelectModal.js +26 -0
- package/src/ui/components/modals/SelectModal.tsx +82 -0
- package/src/ui/components/modals/index.js +6 -0
- package/src/ui/components/modals/index.ts +6 -0
- package/src/ui/hooks/index.js +3 -0
- package/src/ui/hooks/index.ts +3 -0
- package/{dist → src}/ui/hooks/useAsyncData.js +21 -22
- package/src/ui/hooks/useAsyncData.ts +127 -0
- package/src/ui/hooks/useKeyboard.js +13 -0
- package/src/ui/hooks/useKeyboard.ts +26 -0
- package/src/ui/hooks/useKeyboardHandler.js +39 -0
- package/src/ui/hooks/useKeyboardHandler.ts +63 -0
- package/{dist → src}/ui/screens/CliToolsScreen.js +60 -54
- package/src/ui/screens/CliToolsScreen.tsx +468 -0
- package/src/ui/screens/EnvVarsScreen.js +154 -0
- package/src/ui/screens/EnvVarsScreen.tsx +269 -0
- package/{dist → src}/ui/screens/McpRegistryScreen.js +56 -55
- package/src/ui/screens/McpRegistryScreen.tsx +331 -0
- package/{dist → src}/ui/screens/McpScreen.js +46 -47
- package/src/ui/screens/McpScreen.tsx +392 -0
- package/src/ui/screens/ModelSelectorScreen.js +292 -0
- package/src/ui/screens/ModelSelectorScreen.tsx +441 -0
- package/{dist → src}/ui/screens/PluginsScreen.js +305 -293
- package/src/ui/screens/PluginsScreen.tsx +1231 -0
- package/src/ui/screens/StatusLineScreen.js +200 -0
- package/src/ui/screens/StatusLineScreen.tsx +411 -0
- package/src/ui/screens/index.js +7 -0
- package/src/ui/screens/index.ts +7 -0
- package/src/ui/state/AnimationContext.js +34 -0
- package/src/ui/state/AnimationContext.tsx +76 -0
- package/{dist → src}/ui/state/AppContext.js +31 -32
- package/src/ui/state/AppContext.tsx +235 -0
- package/{dist → src}/ui/state/DimensionsContext.js +16 -17
- package/src/ui/state/DimensionsContext.tsx +144 -0
- package/{dist → src}/ui/state/reducer.js +89 -90
- package/src/ui/state/reducer.ts +467 -0
- package/src/ui/state/types.js +1 -0
- package/src/ui/state/types.ts +273 -0
- package/{dist → src}/utils/command-utils.js +3 -4
- package/src/utils/command-utils.ts +20 -0
- package/{dist → src}/utils/fuzzy-search.js +2 -3
- package/src/utils/fuzzy-search.ts +138 -0
- package/{dist → src}/utils/string-utils.js +6 -6
- package/src/utils/string-utils.ts +88 -0
- package/dist/data/cli-tools.d.ts +0 -13
- package/dist/data/cli-tools.d.ts.map +0 -1
- package/dist/data/cli-tools.js +0 -124
- package/dist/data/cli-tools.js.map +0 -1
- package/dist/data/marketplaces.d.ts +0 -6
- package/dist/data/marketplaces.d.ts.map +0 -1
- package/dist/data/marketplaces.js.map +0 -1
- package/dist/data/mcp-servers.d.ts +0 -8
- package/dist/data/mcp-servers.d.ts.map +0 -1
- package/dist/data/mcp-servers.js +0 -503
- package/dist/data/mcp-servers.js.map +0 -1
- package/dist/data/statuslines.d.ts +0 -10
- package/dist/data/statuslines.d.ts.map +0 -1
- package/dist/data/statuslines.js +0 -160
- package/dist/data/statuslines.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -90
- package/dist/index.js.map +0 -1
- package/dist/main.d.ts +0 -3
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js.map +0 -1
- package/dist/prerunner/index.d.ts +0 -7
- package/dist/prerunner/index.d.ts.map +0 -1
- package/dist/prerunner/index.js.map +0 -1
- package/dist/services/claude-runner.d.ts +0 -7
- package/dist/services/claude-runner.d.ts.map +0 -1
- package/dist/services/claude-runner.js.map +0 -1
- package/dist/services/claude-settings.d.ts +0 -73
- package/dist/services/claude-settings.d.ts.map +0 -1
- package/dist/services/claude-settings.js.map +0 -1
- package/dist/services/local-marketplace.d.ts +0 -111
- package/dist/services/local-marketplace.d.ts.map +0 -1
- package/dist/services/local-marketplace.js +0 -599
- package/dist/services/local-marketplace.js.map +0 -1
- package/dist/services/mcp-registry.d.ts +0 -10
- package/dist/services/mcp-registry.d.ts.map +0 -1
- package/dist/services/mcp-registry.js.map +0 -1
- package/dist/services/plugin-manager.d.ts +0 -65
- package/dist/services/plugin-manager.d.ts.map +0 -1
- package/dist/services/plugin-manager.js.map +0 -1
- package/dist/services/plugin-mcp-config.d.ts +0 -52
- package/dist/services/plugin-mcp-config.d.ts.map +0 -1
- package/dist/services/plugin-mcp-config.js.map +0 -1
- package/dist/services/update-cache.d.ts +0 -21
- package/dist/services/update-cache.d.ts.map +0 -1
- package/dist/services/update-cache.js.map +0 -1
- package/dist/services/version-check.d.ts +0 -20
- package/dist/services/version-check.d.ts.map +0 -1
- package/dist/services/version-check.js.map +0 -1
- package/dist/types/index.d.ts +0 -105
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/ui/InkApp.d.ts +0 -5
- package/dist/ui/InkApp.d.ts.map +0 -1
- package/dist/ui/InkApp.js +0 -188
- package/dist/ui/InkApp.js.map +0 -1
- package/dist/ui/components/CategoryHeader.d.ts +0 -16
- package/dist/ui/components/CategoryHeader.d.ts.map +0 -1
- package/dist/ui/components/CategoryHeader.js +0 -11
- package/dist/ui/components/CategoryHeader.js.map +0 -1
- package/dist/ui/components/ScrollableList.d.ts +0 -16
- package/dist/ui/components/ScrollableList.d.ts.map +0 -1
- package/dist/ui/components/ScrollableList.js.map +0 -1
- package/dist/ui/components/SearchInput.d.ts +0 -18
- package/dist/ui/components/SearchInput.d.ts.map +0 -1
- package/dist/ui/components/SearchInput.js +0 -30
- package/dist/ui/components/SearchInput.js.map +0 -1
- package/dist/ui/components/TabBar.d.ts +0 -8
- package/dist/ui/components/TabBar.d.ts.map +0 -1
- package/dist/ui/components/TabBar.js +0 -18
- package/dist/ui/components/TabBar.js.map +0 -1
- package/dist/ui/components/layout/Footer.d.ts +0 -14
- package/dist/ui/components/layout/Footer.d.ts.map +0 -1
- package/dist/ui/components/layout/Footer.js +0 -23
- package/dist/ui/components/layout/Footer.js.map +0 -1
- package/dist/ui/components/layout/Header.d.ts +0 -4
- package/dist/ui/components/layout/Header.d.ts.map +0 -1
- package/dist/ui/components/layout/Header.js +0 -25
- package/dist/ui/components/layout/Header.js.map +0 -1
- package/dist/ui/components/layout/Panel.d.ts +0 -22
- package/dist/ui/components/layout/Panel.d.ts.map +0 -1
- package/dist/ui/components/layout/Panel.js +0 -8
- package/dist/ui/components/layout/Panel.js.map +0 -1
- package/dist/ui/components/layout/ProgressBar.d.ts +0 -12
- package/dist/ui/components/layout/ProgressBar.d.ts.map +0 -1
- package/dist/ui/components/layout/ProgressBar.js +0 -16
- package/dist/ui/components/layout/ProgressBar.js.map +0 -1
- package/dist/ui/components/layout/ScopeTabs.d.ts +0 -12
- package/dist/ui/components/layout/ScopeTabs.d.ts.map +0 -1
- package/dist/ui/components/layout/ScopeTabs.js +0 -8
- package/dist/ui/components/layout/ScopeTabs.js.map +0 -1
- package/dist/ui/components/layout/ScreenLayout.d.ts +0 -30
- package/dist/ui/components/layout/ScreenLayout.d.ts.map +0 -1
- package/dist/ui/components/layout/ScreenLayout.js +0 -23
- package/dist/ui/components/layout/ScreenLayout.js.map +0 -1
- package/dist/ui/components/layout/index.d.ts +0 -7
- package/dist/ui/components/layout/index.d.ts.map +0 -1
- package/dist/ui/components/layout/index.js +0 -7
- package/dist/ui/components/layout/index.js.map +0 -1
- package/dist/ui/components/modals/ConfirmModal.d.ts +0 -14
- package/dist/ui/components/modals/ConfirmModal.d.ts.map +0 -1
- package/dist/ui/components/modals/ConfirmModal.js +0 -15
- package/dist/ui/components/modals/ConfirmModal.js.map +0 -1
- package/dist/ui/components/modals/InputModal.d.ts +0 -16
- package/dist/ui/components/modals/InputModal.d.ts.map +0 -1
- package/dist/ui/components/modals/InputModal.js +0 -23
- package/dist/ui/components/modals/InputModal.js.map +0 -1
- package/dist/ui/components/modals/LoadingModal.d.ts +0 -8
- package/dist/ui/components/modals/LoadingModal.d.ts.map +0 -1
- package/dist/ui/components/modals/LoadingModal.js +0 -8
- package/dist/ui/components/modals/LoadingModal.js.map +0 -1
- package/dist/ui/components/modals/MessageModal.d.ts +0 -14
- package/dist/ui/components/modals/MessageModal.d.ts.map +0 -1
- package/dist/ui/components/modals/MessageModal.js +0 -17
- package/dist/ui/components/modals/MessageModal.js.map +0 -1
- package/dist/ui/components/modals/ModalContainer.d.ts +0 -7
- package/dist/ui/components/modals/ModalContainer.d.ts.map +0 -1
- package/dist/ui/components/modals/ModalContainer.js +0 -38
- package/dist/ui/components/modals/ModalContainer.js.map +0 -1
- package/dist/ui/components/modals/SelectModal.d.ts +0 -17
- package/dist/ui/components/modals/SelectModal.d.ts.map +0 -1
- package/dist/ui/components/modals/SelectModal.js +0 -33
- package/dist/ui/components/modals/SelectModal.js.map +0 -1
- package/dist/ui/components/modals/index.d.ts +0 -7
- package/dist/ui/components/modals/index.d.ts.map +0 -1
- package/dist/ui/components/modals/index.js +0 -7
- package/dist/ui/components/modals/index.js.map +0 -1
- package/dist/ui/hooks/index.d.ts +0 -3
- package/dist/ui/hooks/index.d.ts.map +0 -1
- package/dist/ui/hooks/index.js +0 -3
- package/dist/ui/hooks/index.js.map +0 -1
- package/dist/ui/hooks/useAsyncData.d.ts +0 -40
- package/dist/ui/hooks/useAsyncData.d.ts.map +0 -1
- package/dist/ui/hooks/useAsyncData.js.map +0 -1
- package/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -27
- package/dist/ui/hooks/useKeyboardNavigation.d.ts.map +0 -1
- package/dist/ui/hooks/useKeyboardNavigation.js +0 -82
- package/dist/ui/hooks/useKeyboardNavigation.js.map +0 -1
- package/dist/ui/screens/CliToolsScreen.d.ts +0 -4
- package/dist/ui/screens/CliToolsScreen.d.ts.map +0 -1
- package/dist/ui/screens/CliToolsScreen.js.map +0 -1
- package/dist/ui/screens/EnvVarsScreen.d.ts +0 -4
- package/dist/ui/screens/EnvVarsScreen.d.ts.map +0 -1
- package/dist/ui/screens/EnvVarsScreen.js +0 -145
- package/dist/ui/screens/EnvVarsScreen.js.map +0 -1
- package/dist/ui/screens/McpRegistryScreen.d.ts +0 -4
- package/dist/ui/screens/McpRegistryScreen.d.ts.map +0 -1
- package/dist/ui/screens/McpRegistryScreen.js.map +0 -1
- package/dist/ui/screens/McpScreen.d.ts +0 -4
- package/dist/ui/screens/McpScreen.d.ts.map +0 -1
- package/dist/ui/screens/McpScreen.js.map +0 -1
- package/dist/ui/screens/ModelSelectorScreen.d.ts +0 -4
- package/dist/ui/screens/ModelSelectorScreen.d.ts.map +0 -1
- package/dist/ui/screens/ModelSelectorScreen.js +0 -143
- package/dist/ui/screens/ModelSelectorScreen.js.map +0 -1
- package/dist/ui/screens/PluginsScreen.d.ts +0 -4
- package/dist/ui/screens/PluginsScreen.d.ts.map +0 -1
- package/dist/ui/screens/PluginsScreen.js.map +0 -1
- package/dist/ui/screens/StatusLineScreen.d.ts +0 -4
- package/dist/ui/screens/StatusLineScreen.d.ts.map +0 -1
- package/dist/ui/screens/StatusLineScreen.js +0 -197
- package/dist/ui/screens/StatusLineScreen.js.map +0 -1
- package/dist/ui/screens/index.d.ts +0 -8
- package/dist/ui/screens/index.d.ts.map +0 -1
- package/dist/ui/screens/index.js +0 -8
- package/dist/ui/screens/index.js.map +0 -1
- package/dist/ui/state/AppContext.d.ts +0 -40
- package/dist/ui/state/AppContext.d.ts.map +0 -1
- package/dist/ui/state/AppContext.js.map +0 -1
- package/dist/ui/state/DimensionsContext.d.ts +0 -27
- package/dist/ui/state/DimensionsContext.d.ts.map +0 -1
- package/dist/ui/state/DimensionsContext.js.map +0 -1
- package/dist/ui/state/reducer.d.ts +0 -4
- package/dist/ui/state/reducer.d.ts.map +0 -1
- package/dist/ui/state/reducer.js.map +0 -1
- package/dist/ui/state/types.d.ts +0 -266
- package/dist/ui/state/types.d.ts.map +0 -1
- package/dist/ui/state/types.js +0 -2
- package/dist/ui/state/types.js.map +0 -1
- package/dist/utils/command-utils.d.ts +0 -8
- package/dist/utils/command-utils.d.ts.map +0 -1
- package/dist/utils/command-utils.js.map +0 -1
- package/dist/utils/fuzzy-search.d.ts +0 -33
- package/dist/utils/fuzzy-search.d.ts.map +0 -1
- package/dist/utils/fuzzy-search.js.map +0 -1
- package/dist/utils/string-utils.d.ts +0 -24
- package/dist/utils/string-utils.d.ts.map +0 -1
- package/dist/utils/string-utils.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useCallback, useState, useRef } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { ScreenLayout } from
|
|
9
|
-
import { ScrollableList } from
|
|
10
|
-
import { cliTools } from
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useEffect, useCallback, useState, useRef } from "react";
|
|
3
|
+
import { exec, execSync } from "child_process";
|
|
4
|
+
import { promisify } from "util";
|
|
5
|
+
import { useApp, useModal } from "../state/AppContext.js";
|
|
6
|
+
import { useDimensions } from "../state/DimensionsContext.js";
|
|
7
|
+
import { useKeyboard } from "../hooks/useKeyboard.js";
|
|
8
|
+
import { ScreenLayout } from "../components/layout/index.js";
|
|
9
|
+
import { ScrollableList } from "../components/ScrollableList.js";
|
|
10
|
+
import { cliTools } from "../../data/cli-tools.js";
|
|
11
11
|
const execAsync = promisify(exec);
|
|
12
12
|
// Session-level cache
|
|
13
13
|
let cachedToolStatuses = null;
|
|
@@ -22,11 +22,11 @@ function parseVersion(versionOutput) {
|
|
|
22
22
|
}
|
|
23
23
|
async function isInstalledViaHomebrew(toolName) {
|
|
24
24
|
try {
|
|
25
|
-
const { stdout } = await execAsync(
|
|
25
|
+
const { stdout } = await execAsync("brew list --formula 2>/dev/null", {
|
|
26
26
|
timeout: 2000,
|
|
27
|
-
shell:
|
|
27
|
+
shell: "/bin/bash",
|
|
28
28
|
});
|
|
29
|
-
const formulas = stdout.trim().split(
|
|
29
|
+
const formulas = stdout.trim().split("\n");
|
|
30
30
|
return formulas.some((f) => f.trim() === toolName);
|
|
31
31
|
}
|
|
32
32
|
catch {
|
|
@@ -55,7 +55,7 @@ async function getLatestPipVersion(packageName) {
|
|
|
55
55
|
try {
|
|
56
56
|
const { stdout } = await execAsync(`pip index versions ${packageName} 2>/dev/null | head -1`, {
|
|
57
57
|
timeout: 10000,
|
|
58
|
-
shell:
|
|
58
|
+
shell: "/bin/bash",
|
|
59
59
|
});
|
|
60
60
|
const match = stdout.trim().match(/\(([^)]+)\)/);
|
|
61
61
|
return match ? match[1] : undefined;
|
|
@@ -65,7 +65,7 @@ async function getLatestPipVersion(packageName) {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
async function getLatestVersion(tool) {
|
|
68
|
-
if (tool.packageManager ===
|
|
68
|
+
if (tool.packageManager === "npm") {
|
|
69
69
|
return getLatestNpmVersion(tool.packageName);
|
|
70
70
|
}
|
|
71
71
|
else {
|
|
@@ -91,12 +91,13 @@ export function CliToolsScreen() {
|
|
|
91
91
|
const modal = useModal();
|
|
92
92
|
const dimensions = useDimensions();
|
|
93
93
|
const [toolStatuses, setToolStatuses] = useState(() => {
|
|
94
|
-
return cachedToolStatuses ||
|
|
95
|
-
tool
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
return (cachedToolStatuses ||
|
|
95
|
+
cliTools.map((tool) => ({
|
|
96
|
+
tool,
|
|
97
|
+
installed: false,
|
|
98
|
+
installedVersion: undefined,
|
|
99
|
+
checking: true,
|
|
100
|
+
})));
|
|
100
101
|
});
|
|
101
102
|
const statusesRef = useRef(toolStatuses);
|
|
102
103
|
statusesRef.current = toolStatuses;
|
|
@@ -140,24 +141,24 @@ export function CliToolsScreen() {
|
|
|
140
141
|
}
|
|
141
142
|
}, [fetchVersionInfo, toolStatuses]);
|
|
142
143
|
// Keyboard handling
|
|
143
|
-
|
|
144
|
+
useKeyboard((event) => {
|
|
144
145
|
if (state.isSearching || state.modal)
|
|
145
146
|
return;
|
|
146
|
-
if (
|
|
147
|
+
if (event.name === "up" || event.name === "k") {
|
|
147
148
|
const newIndex = Math.max(0, cliToolsState.selectedIndex - 1);
|
|
148
|
-
dispatch({ type:
|
|
149
|
+
dispatch({ type: "CLITOOLS_SELECT", index: newIndex });
|
|
149
150
|
}
|
|
150
|
-
else if (
|
|
151
|
+
else if (event.name === "down" || event.name === "j") {
|
|
151
152
|
const newIndex = Math.min(toolStatuses.length - 1, cliToolsState.selectedIndex + 1);
|
|
152
|
-
dispatch({ type:
|
|
153
|
+
dispatch({ type: "CLITOOLS_SELECT", index: newIndex });
|
|
153
154
|
}
|
|
154
|
-
else if (
|
|
155
|
+
else if (event.name === "r") {
|
|
155
156
|
handleRefresh();
|
|
156
157
|
}
|
|
157
|
-
else if (
|
|
158
|
+
else if (event.name === "a") {
|
|
158
159
|
handleUpdateAll();
|
|
159
160
|
}
|
|
160
|
-
else if (
|
|
161
|
+
else if (event.name === "enter") {
|
|
161
162
|
handleInstall();
|
|
162
163
|
}
|
|
163
164
|
});
|
|
@@ -177,8 +178,14 @@ export function CliToolsScreen() {
|
|
|
177
178
|
if (!status)
|
|
178
179
|
return;
|
|
179
180
|
const { tool, installed, hasUpdate } = status;
|
|
180
|
-
const action = !installed
|
|
181
|
-
|
|
181
|
+
const action = !installed
|
|
182
|
+
? "Installing"
|
|
183
|
+
: hasUpdate
|
|
184
|
+
? "Updating"
|
|
185
|
+
: "Reinstalling";
|
|
186
|
+
const viaHomebrew = installed
|
|
187
|
+
? await isInstalledViaHomebrew(tool.name)
|
|
188
|
+
: false;
|
|
182
189
|
let command;
|
|
183
190
|
if (!installed) {
|
|
184
191
|
command = tool.installCommand;
|
|
@@ -192,22 +199,22 @@ export function CliToolsScreen() {
|
|
|
192
199
|
modal.loading(`${action} ${tool.displayName}...`);
|
|
193
200
|
try {
|
|
194
201
|
execSync(command, {
|
|
195
|
-
encoding:
|
|
196
|
-
stdio:
|
|
197
|
-
shell:
|
|
202
|
+
encoding: "utf-8",
|
|
203
|
+
stdio: "pipe",
|
|
204
|
+
shell: "/bin/bash",
|
|
198
205
|
});
|
|
199
206
|
modal.hideModal();
|
|
200
207
|
handleRefresh();
|
|
201
208
|
}
|
|
202
209
|
catch (error) {
|
|
203
210
|
modal.hideModal();
|
|
204
|
-
await modal.message(
|
|
211
|
+
await modal.message("Error", `Failed to ${action.toLowerCase()} ${tool.displayName}.\n\nTry running manually:\n${command}`, "error");
|
|
205
212
|
}
|
|
206
213
|
};
|
|
207
214
|
const handleUpdateAll = async () => {
|
|
208
215
|
const updatable = toolStatuses.filter((s) => s.hasUpdate);
|
|
209
216
|
if (updatable.length === 0) {
|
|
210
|
-
await modal.message(
|
|
217
|
+
await modal.message("Up to Date", "All tools are already up to date.", "info");
|
|
211
218
|
return;
|
|
212
219
|
}
|
|
213
220
|
modal.loading(`Updating ${updatable.length} tool(s)...`);
|
|
@@ -218,9 +225,9 @@ export function CliToolsScreen() {
|
|
|
218
225
|
: status.tool.installCommand;
|
|
219
226
|
try {
|
|
220
227
|
execSync(command, {
|
|
221
|
-
encoding:
|
|
222
|
-
stdio:
|
|
223
|
-
shell:
|
|
228
|
+
encoding: "utf-8",
|
|
229
|
+
stdio: "pipe",
|
|
230
|
+
shell: "/bin/bash",
|
|
224
231
|
});
|
|
225
232
|
}
|
|
226
233
|
catch {
|
|
@@ -234,35 +241,34 @@ export function CliToolsScreen() {
|
|
|
234
241
|
const selectedStatus = toolStatuses[cliToolsState.selectedIndex];
|
|
235
242
|
const renderDetail = () => {
|
|
236
243
|
if (!selectedStatus) {
|
|
237
|
-
return (_jsx(
|
|
244
|
+
return (_jsx("box", { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: _jsx("text", { fg: "gray", children: "Select a tool to see details" }) }));
|
|
238
245
|
}
|
|
239
|
-
const { tool, installed, installedVersion, latestVersion, hasUpdate, checking } = selectedStatus;
|
|
240
|
-
return (_jsxs(
|
|
246
|
+
const { tool, installed, installedVersion, latestVersion, hasUpdate, checking, } = selectedStatus;
|
|
247
|
+
return (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { marginBottom: 1, children: [_jsx("text", { fg: "cyan", children: _jsxs("strong", { children: ["\u2699 ", tool.displayName] }) }), hasUpdate && _jsx("text", { fg: "yellow", children: " \u2B06" })] }), _jsx("text", { fg: "gray", children: tool.description }), _jsxs("box", { marginTop: 1, flexDirection: "column", children: [_jsxs("box", { children: [_jsx("text", { fg: "gray", children: "Status " }), !installed ? (_jsx("text", { fg: "gray", children: "\u25CB Not installed" })) : checking ? (_jsx("text", { fg: "green", children: "\u25CF Checking..." })) : hasUpdate ? (_jsx("text", { fg: "yellow", children: "\u25CF Update available" })) : (_jsx("text", { fg: "green", children: "\u25CF Up to date" }))] }), installedVersion && (_jsxs("box", { children: [_jsx("text", { fg: "gray", children: "Installed " }), _jsxs("text", { fg: "green", children: ["v", installedVersion] })] })), latestVersion && (_jsxs("box", { children: [_jsx("text", { fg: "gray", children: "Latest " }), _jsxs("text", { fg: "white", children: ["v", latestVersion] })] })), _jsxs("box", { children: [_jsx("text", { fg: "gray", children: "Website " }), _jsx("text", { fg: "blue", children: tool.website })] })] }), _jsx("box", { marginTop: 2, children: !installed ? (_jsxs("box", { children: [_jsxs("text", { bg: "green", fg: "black", children: [" ", "Enter", " "] }), _jsx("text", { fg: "gray", children: " Install" })] })) : hasUpdate ? (_jsxs("box", { children: [_jsxs("text", { bg: "yellow", fg: "black", children: [" ", "Enter", " "] }), _jsxs("text", { fg: "gray", children: [" Update to v", latestVersion] })] })) : (_jsxs("box", { children: [_jsxs("text", { bg: "gray", fg: "white", children: [" ", "Enter", " "] }), _jsx("text", { fg: "gray", children: " Reinstall" })] })) })] }));
|
|
241
248
|
};
|
|
242
249
|
const renderListItem = (status, _idx, isSelected) => {
|
|
243
250
|
const { tool, installed, installedVersion, hasUpdate, checking } = status;
|
|
244
251
|
let icon;
|
|
245
252
|
let iconColor;
|
|
246
253
|
if (!installed) {
|
|
247
|
-
icon =
|
|
248
|
-
iconColor =
|
|
254
|
+
icon = "○";
|
|
255
|
+
iconColor = "gray";
|
|
249
256
|
}
|
|
250
257
|
else if (hasUpdate) {
|
|
251
|
-
icon =
|
|
252
|
-
iconColor =
|
|
258
|
+
icon = "⬆";
|
|
259
|
+
iconColor = "yellow";
|
|
253
260
|
}
|
|
254
261
|
else {
|
|
255
|
-
icon =
|
|
256
|
-
iconColor =
|
|
262
|
+
icon = "●";
|
|
263
|
+
iconColor = "green";
|
|
257
264
|
}
|
|
258
|
-
const versionText = installedVersion ? `v${installedVersion}` :
|
|
259
|
-
return isSelected ? (_jsxs(
|
|
265
|
+
const versionText = installedVersion ? `v${installedVersion}` : "";
|
|
266
|
+
return isSelected ? (_jsxs("text", { bg: "magenta", fg: "white", children: [" ", icon, " ", tool.displayName, " ", versionText, checking ? "..." : "", " "] })) : (_jsxs("text", { children: [_jsx("span", { fg: iconColor, children: icon }), _jsxs("span", { fg: "white", children: [" ", tool.displayName] }), versionText && _jsxs("span", { fg: "green", children: [" ", versionText] }), checking && _jsx("span", { fg: "gray", children: "..." })] }));
|
|
260
267
|
};
|
|
261
268
|
// Calculate stats for status line
|
|
262
|
-
const installedCount = toolStatuses.filter(s => s.installed).length;
|
|
263
|
-
const updateCount = toolStatuses.filter(s => s.hasUpdate).length;
|
|
264
|
-
const statusContent = (_jsxs(_Fragment, { children: [_jsx(
|
|
269
|
+
const installedCount = toolStatuses.filter((s) => s.installed).length;
|
|
270
|
+
const updateCount = toolStatuses.filter((s) => s.hasUpdate).length;
|
|
271
|
+
const statusContent = (_jsxs(_Fragment, { children: [_jsx("text", { fg: "gray", children: "Installed: " }), _jsxs("text", { fg: "cyan", children: [installedCount, "/", toolStatuses.length] }), updateCount > 0 && (_jsxs(_Fragment, { children: [_jsx("text", { fg: "gray", children: " \u2502 Updates: " }), _jsx("text", { fg: "yellow", children: updateCount })] }))] }));
|
|
265
272
|
return (_jsx(ScreenLayout, { title: "claudeup CLI Tools", currentScreen: "cli-tools", statusLine: statusContent, footerHints: "\u2191\u2193:nav \u2502 Enter:install \u2502 a:update all \u2502 r:refresh", listPanel: _jsx(ScrollableList, { items: toolStatuses, selectedIndex: cliToolsState.selectedIndex, renderItem: renderListItem, maxHeight: dimensions.listPanelHeight }), detailPanel: renderDetail() }));
|
|
266
273
|
}
|
|
267
274
|
export default CliToolsScreen;
|
|
268
|
-
//# sourceMappingURL=CliToolsScreen.js.map
|