wave-code 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/commands/plugin/uninstall.js +1 -1
  2. package/dist/components/CommandSelector.js +3 -3
  3. package/dist/components/Confirmation.d.ts.map +1 -1
  4. package/dist/components/Confirmation.js +72 -19
  5. package/dist/components/DiffDisplay.d.ts +0 -1
  6. package/dist/components/DiffDisplay.d.ts.map +1 -1
  7. package/dist/components/DiffDisplay.js +38 -59
  8. package/dist/components/InputBox.d.ts.map +1 -1
  9. package/dist/components/InputBox.js +6 -5
  10. package/dist/components/Markdown.d.ts.map +1 -1
  11. package/dist/components/Markdown.js +4 -3
  12. package/dist/components/PlanDisplay.d.ts.map +1 -1
  13. package/dist/components/PlanDisplay.js +2 -2
  14. package/dist/components/PluginDetail.js +1 -1
  15. package/dist/components/SubagentBlock.d.ts.map +1 -1
  16. package/dist/components/SubagentBlock.js +4 -0
  17. package/dist/components/TaskManager.d.ts +6 -0
  18. package/dist/components/TaskManager.d.ts.map +1 -0
  19. package/dist/components/TaskManager.js +114 -0
  20. package/dist/components/ToolResultDisplay.d.ts.map +1 -1
  21. package/dist/components/ToolResultDisplay.js +2 -1
  22. package/dist/contexts/useChat.d.ts +5 -4
  23. package/dist/contexts/useChat.d.ts.map +1 -1
  24. package/dist/contexts/useChat.js +16 -12
  25. package/dist/hooks/useInputManager.d.ts +2 -2
  26. package/dist/hooks/useInputManager.js +10 -10
  27. package/dist/hooks/usePluginManager.d.ts.map +1 -1
  28. package/dist/hooks/usePluginManager.js +8 -4
  29. package/dist/managers/InputManager.d.ts +7 -6
  30. package/dist/managers/InputManager.d.ts.map +1 -1
  31. package/dist/managers/InputManager.js +17 -12
  32. package/package.json +6 -6
  33. package/src/commands/plugin/uninstall.ts +1 -1
  34. package/src/components/CommandSelector.tsx +3 -3
  35. package/src/components/Confirmation.tsx +114 -24
  36. package/src/components/DiffDisplay.tsx +60 -106
  37. package/src/components/InputBox.tsx +9 -7
  38. package/src/components/Markdown.tsx +10 -4
  39. package/src/components/PlanDisplay.tsx +14 -19
  40. package/src/components/PluginDetail.tsx +1 -1
  41. package/src/components/SubagentBlock.tsx +5 -0
  42. package/src/components/{BashShellManager.tsx → TaskManager.tsx} +79 -75
  43. package/src/components/ToolResultDisplay.tsx +4 -0
  44. package/src/contexts/useChat.tsx +25 -20
  45. package/src/hooks/useInputManager.ts +10 -10
  46. package/src/hooks/usePluginManager.ts +10 -4
  47. package/src/managers/InputManager.ts +22 -15
  48. package/dist/components/BashShellManager.d.ts +0 -6
  49. package/dist/components/BashShellManager.d.ts.map +0 -1
  50. package/dist/components/BashShellManager.js +0 -116
@@ -0,0 +1,114 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { useChat } from "../contexts/useChat.js";
5
+ export const TaskManager = ({ onCancel }) => {
6
+ const { backgroundTasks, getBackgroundTaskOutput, stopBackgroundTask } = useChat();
7
+ const [tasks, setTasks] = useState([]);
8
+ const [selectedIndex, setSelectedIndex] = useState(0);
9
+ const [viewMode, setViewMode] = useState("list");
10
+ const [detailTaskId, setDetailTaskId] = useState(null);
11
+ const [detailOutput, setDetailOutput] = useState(null);
12
+ // Convert backgroundTasks to local Task format
13
+ useEffect(() => {
14
+ setTasks(backgroundTasks.map((task) => ({
15
+ id: task.id,
16
+ type: task.type,
17
+ description: task.description,
18
+ status: task.status,
19
+ startTime: task.startTime,
20
+ exitCode: task.exitCode,
21
+ runtime: task.runtime,
22
+ })));
23
+ }, [backgroundTasks]);
24
+ // Load detail output for selected task
25
+ useEffect(() => {
26
+ if (viewMode === "detail" && detailTaskId) {
27
+ const output = getBackgroundTaskOutput(detailTaskId);
28
+ setDetailOutput(output);
29
+ }
30
+ }, [viewMode, detailTaskId, getBackgroundTaskOutput]);
31
+ const formatDuration = (ms) => {
32
+ if (ms < 1000)
33
+ return `${ms}ms`;
34
+ if (ms < 60000)
35
+ return `${Math.round(ms / 1000)}s`;
36
+ const minutes = Math.floor(ms / 60000);
37
+ const seconds = Math.round((ms % 60000) / 1000);
38
+ return `${minutes}m ${seconds}s`;
39
+ };
40
+ const formatTime = (timestamp) => {
41
+ return new Date(timestamp).toLocaleTimeString();
42
+ };
43
+ const stopTask = (taskId) => {
44
+ stopBackgroundTask(taskId);
45
+ };
46
+ useInput((input, key) => {
47
+ if (viewMode === "list") {
48
+ // List mode navigation
49
+ if (key.return) {
50
+ if (tasks.length > 0 && selectedIndex < tasks.length) {
51
+ const selectedTask = tasks[selectedIndex];
52
+ setDetailTaskId(selectedTask.id);
53
+ setViewMode("detail");
54
+ }
55
+ return;
56
+ }
57
+ if (key.escape) {
58
+ onCancel();
59
+ return;
60
+ }
61
+ if (key.upArrow) {
62
+ setSelectedIndex(Math.max(0, selectedIndex - 1));
63
+ return;
64
+ }
65
+ if (key.downArrow) {
66
+ setSelectedIndex(Math.min(tasks.length - 1, selectedIndex + 1));
67
+ return;
68
+ }
69
+ if (input === "k" && tasks.length > 0 && selectedIndex < tasks.length) {
70
+ const selectedTask = tasks[selectedIndex];
71
+ if (selectedTask.status === "running") {
72
+ stopTask(selectedTask.id);
73
+ }
74
+ return;
75
+ }
76
+ }
77
+ else if (viewMode === "detail") {
78
+ // Detail mode navigation
79
+ if (key.escape) {
80
+ setViewMode("list");
81
+ setDetailTaskId(null);
82
+ setDetailOutput(null);
83
+ return;
84
+ }
85
+ if (input === "k" && detailTaskId) {
86
+ const task = tasks.find((t) => t.id === detailTaskId);
87
+ if (task && task.status === "running") {
88
+ stopTask(detailTaskId);
89
+ }
90
+ return;
91
+ }
92
+ }
93
+ });
94
+ if (viewMode === "detail" && detailTaskId && detailOutput) {
95
+ const task = tasks.find((t) => t.id === detailTaskId);
96
+ if (!task) {
97
+ setViewMode("list");
98
+ return null;
99
+ }
100
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, gap: 1, children: [_jsx(Box, { children: _jsxs(Text, { color: "cyan", bold: true, children: ["Background Task Details: ", task.id] }) }), _jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Box, { children: _jsxs(Text, { children: [_jsx(Text, { color: "blue", children: "Type:" }), " ", task.type] }) }), task.description && (_jsx(Box, { children: _jsxs(Text, { children: [_jsx(Text, { color: "blue", children: "Description:" }), " ", task.description] }) })), _jsx(Box, { children: _jsxs(Text, { children: [_jsx(Text, { color: "blue", children: "Status:" }), " ", task.status, task.exitCode !== undefined && ` (exit code: ${task.exitCode})`] }) }), _jsx(Box, { children: _jsxs(Text, { children: [_jsx(Text, { color: "blue", children: "Started:" }), " ", formatTime(task.startTime), task.runtime !== undefined && (_jsxs(Text, { children: [" ", "| ", _jsx(Text, { color: "blue", children: "Runtime:" }), " ", formatDuration(task.runtime)] }))] }) })] }), detailOutput.stdout && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "green", bold: true, children: "OUTPUT (last 10 lines):" }), _jsx(Box, { borderStyle: "single", borderColor: "green", padding: 1, children: _jsx(Text, { children: detailOutput.stdout.split("\n").slice(-10).join("\n") }) })] })), detailOutput.stderr && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "red", bold: true, children: "ERRORS:" }), _jsx(Box, { borderStyle: "single", borderColor: "red", padding: 1, children: _jsx(Text, { color: "red", children: detailOutput.stderr.split("\n").slice(-10).join("\n") }) })] })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: [task.status === "running" ? "k to stop · " : "", "Esc to go back"] }) })] }));
101
+ }
102
+ if (!backgroundTasks) {
103
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "Background Tasks" }), _jsx(Text, { children: "Background tasks not available" }), _jsx(Text, { dimColor: true, children: "Press Escape to close" })] }));
104
+ }
105
+ if (tasks.length === 0) {
106
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "Background Tasks" }), _jsx(Text, { children: "No background tasks found" }), _jsx(Text, { dimColor: true, children: "Press Escape to close" })] }));
107
+ }
108
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, gap: 1, children: [_jsx(Box, { children: _jsx(Text, { color: "cyan", bold: true, children: "Background Tasks" }) }), _jsx(Text, { dimColor: true, children: "Select a task to view details" }), tasks.map((task, index) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: index === selectedIndex ? "black" : "white", backgroundColor: index === selectedIndex ? "cyan" : undefined, children: [index === selectedIndex ? "▶ " : " ", index + 1, ". [", task.id, "] ", task.type, task.description ? `: ${task.description}` : "", _jsxs(Text, { color: task.status === "running"
109
+ ? "green"
110
+ : task.status === "completed"
111
+ ? "blue"
112
+ : "red", children: [" ", "(", task.status, ")"] })] }), index === selectedIndex && (_jsx(Box, { marginLeft: 4, flexDirection: "column", children: _jsxs(Text, { color: "gray", dimColor: true, children: ["Started: ", formatTime(task.startTime), task.runtime !== undefined &&
113
+ ` | Runtime: ${formatDuration(task.runtime)}`, task.exitCode !== undefined && ` | Exit: ${task.exitCode}`] }) }))] }, task.id))), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["\u2191/\u2193 to select \u00B7 Enter to view \u00B7", " ", tasks[selectedIndex]?.status === "running" ? "k to stop · " : "", "Esc to close"] }) })] }));
114
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"ToolResultDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolResultDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,sBAAsB;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAqI9D,CAAC"}
1
+ {"version":3,"file":"ToolResultDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolResultDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,sBAAsB;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAyI9D,CAAC"}
@@ -33,6 +33,7 @@ export const ToolResultDisplay = ({ block, isExpanded = false, }) => {
33
33
  return imageCount === 1 ? "🖼️" : `🖼️×${imageCount}`;
34
34
  };
35
35
  const toolName = name ? String(name) : "Tool";
36
+ const isBackgroundable = stage === "running" && (toolName === "Bash" || toolName === "Task");
36
37
  // Get shortResult, if not available show last 5 lines of result
37
38
  const getShortResult = () => {
38
39
  if (block.shortResult) {
@@ -49,5 +50,5 @@ export const ToolResultDisplay = ({ block, isExpanded = false, }) => {
49
50
  return null;
50
51
  };
51
52
  const shortResult = getShortResult();
52
- return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "magenta", children: "\uD83D\uDD27 " }), _jsx(Text, { color: "white", children: toolName }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), _jsxs(Text, { color: getStatusColor(), children: [" ", getStatusText()] }), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] })] }), !isExpanded && shortResult && !error && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "white", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) })), stage === "end" && success && (_jsx(DiffDisplay, { toolName: name, parameters: parameters }))] }));
53
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "magenta", children: "\uD83D\uDD27 " }), _jsx(Text, { color: "white", children: toolName }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), _jsxs(Text, { color: getStatusColor(), children: [" ", getStatusText()] }), hasImages() && _jsxs(Text, { color: "blue", children: [" ", getImageIndicator()] }), isBackgroundable && _jsx(Text, { color: "gray", children: " [Ctrl-B] Background" })] }), !isExpanded && shortResult && !error && (_jsx(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: shortResult.split("\n").map((line, index) => (_jsx(Text, { color: "white", children: line }, index))) })), isExpanded && parameters && (_jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "gray", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Parameters:" }), _jsx(Text, { color: "gray", children: parameters })] })), isExpanded && result && (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { paddingLeft: 2, borderLeft: true, borderColor: "green", flexDirection: "column", children: [_jsx(Text, { color: "cyan", bold: true, children: "Result:" }), _jsx(Text, { color: "white", children: result })] }) })), error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", typeof error === "string" ? error : String(error)] }) })), stage === "end" && success && (_jsx(DiffDisplay, { toolName: name, parameters: parameters }))] }));
53
54
  };
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Message, McpServerStatus, BackgroundShell, SlashCommand, PermissionDecision, PermissionMode } from "wave-agent-sdk";
2
+ import type { Message, McpServerStatus, BackgroundTask, SlashCommand, PermissionDecision, PermissionMode } from "wave-agent-sdk";
3
3
  export interface ChatContextType {
4
4
  messages: Message[];
5
5
  isLoading: boolean;
@@ -18,13 +18,13 @@ export interface ChatContextType {
18
18
  mcpServers: McpServerStatus[];
19
19
  connectMcpServer: (serverName: string) => Promise<boolean>;
20
20
  disconnectMcpServer: (serverName: string) => Promise<boolean>;
21
- backgroundShells: BackgroundShell[];
22
- getBackgroundShellOutput: (shellId: string) => {
21
+ backgroundTasks: BackgroundTask[];
22
+ getBackgroundTaskOutput: (taskId: string) => {
23
23
  stdout: string;
24
24
  stderr: string;
25
25
  status: string;
26
26
  } | null;
27
- killBackgroundShell: (shellId: string) => boolean;
27
+ stopBackgroundTask: (taskId: string) => boolean;
28
28
  slashCommands: SlashCommand[];
29
29
  hasSlashCommand: (commandId: string) => boolean;
30
30
  subagentMessages: Record<string, Message[]>;
@@ -41,6 +41,7 @@ export interface ChatContextType {
41
41
  hideConfirmation: () => void;
42
42
  handleConfirmationDecision: (decision: PermissionDecision) => void;
43
43
  handleConfirmationCancel: () => void;
44
+ backgroundCurrentTask: () => void;
44
45
  rewindId: number;
45
46
  handleRewindSelect: (index: number) => Promise<void>;
46
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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"}
@@ -27,8 +27,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
27
27
  const [userInputHistory, setUserInputHistory] = useState([]);
28
28
  // MCP State
29
29
  const [mcpServers, setMcpServers] = useState([]);
30
- // Background bash shells state
31
- const [backgroundShells, setBackgroundShells] = useState([]);
30
+ // Background tasks state
31
+ const [backgroundTasks, setBackgroundTasks] = useState([]);
32
32
  // Command state
33
33
  const [slashCommands, setSlashCommands] = useState([]);
34
34
  // Subagent messages state
@@ -82,8 +82,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
82
82
  onCompressionStateChange: (isCompressingState) => {
83
83
  setIsCompressing(isCompressingState);
84
84
  },
85
- onShellsChange: (shells) => {
86
- setBackgroundShells([...shells]);
85
+ onTasksChange: (tasks) => {
86
+ setBackgroundTasks([...tasks]);
87
87
  },
88
88
  onSubagentMessagesChange: (subagentId, messages) => {
89
89
  logger.debug("onSubagentMessagesChange", subagentId, messages.length);
@@ -249,16 +249,16 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
249
249
  const disconnectMcpServer = useCallback(async (serverName) => {
250
250
  return (await agentRef.current?.disconnectMcpServer(serverName)) ?? false;
251
251
  }, []);
252
- // Background bash management methods - delegate to Agent
253
- const getBackgroundShellOutput = useCallback((shellId) => {
252
+ // Background task management methods - delegate to Agent
253
+ const getBackgroundTaskOutput = useCallback((taskId) => {
254
254
  if (!agentRef.current)
255
255
  return null;
256
- return agentRef.current.getBackgroundShellOutput(shellId);
256
+ return agentRef.current.getBackgroundTaskOutput(taskId);
257
257
  }, []);
258
- const killBackgroundShell = useCallback((shellId) => {
258
+ const stopBackgroundTask = useCallback((taskId) => {
259
259
  if (!agentRef.current)
260
260
  return false;
261
- return agentRef.current.killBackgroundShell(shellId);
261
+ return agentRef.current.stopBackgroundTask(taskId);
262
262
  }, []);
263
263
  const hasSlashCommand = useCallback((commandId) => {
264
264
  if (!agentRef.current)
@@ -301,6 +301,9 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
301
301
  }
302
302
  hideConfirmation();
303
303
  }, [currentConfirmation, hideConfirmation]);
304
+ const backgroundCurrentTask = useCallback(() => {
305
+ agentRef.current?.backgroundCurrentTask();
306
+ }, []);
304
307
  const handleRewindSelect = useCallback(async (index) => {
305
308
  if (agentRef.current) {
306
309
  try {
@@ -346,9 +349,9 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
346
349
  mcpServers,
347
350
  connectMcpServer,
348
351
  disconnectMcpServer,
349
- backgroundShells,
350
- getBackgroundShellOutput,
351
- killBackgroundShell,
352
+ backgroundTasks,
353
+ getBackgroundTaskOutput,
354
+ stopBackgroundTask,
352
355
  slashCommands,
353
356
  hasSlashCommand,
354
357
  subagentMessages,
@@ -360,6 +363,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, }) => {
360
363
  hideConfirmation,
361
364
  handleConfirmationDecision,
362
365
  handleConfirmationCancel,
366
+ backgroundCurrentTask,
363
367
  rewindId,
364
368
  handleRewindSelect,
365
369
  };
@@ -16,7 +16,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
16
16
  historySearchQuery: string;
17
17
  showMemoryTypeSelector: boolean;
18
18
  memoryMessage: string;
19
- showBashManager: boolean;
19
+ showTaskManager: boolean;
20
20
  showMcpManager: boolean;
21
21
  showRewindManager: boolean;
22
22
  permissionMode: PermissionMode;
@@ -61,7 +61,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
61
61
  };
62
62
  resetHistoryNavigation: () => void;
63
63
  handleSpecialCharInput: (char: string) => void;
64
- setShowBashManager: (show: boolean) => void;
64
+ setShowTaskManager: (show: boolean) => void;
65
65
  setShowMcpManager: (show: boolean) => void;
66
66
  setShowRewindManager: (show: boolean) => void;
67
67
  setPermissionMode: (mode: PermissionMode) => void;
@@ -26,7 +26,7 @@ export const useInputManager = (callbacks = {}) => {
26
26
  show: false,
27
27
  message: "",
28
28
  });
29
- const [showBashManager, setShowBashManager] = useState(false);
29
+ const [showTaskManager, setShowTaskManager] = useState(false);
30
30
  const [showMcpManager, setShowMcpManager] = useState(false);
31
31
  const [showRewindManager, setShowRewindManager] = useState(false);
32
32
  const [permissionMode, setPermissionModeState] = useState("default");
@@ -51,8 +51,8 @@ export const useInputManager = (callbacks = {}) => {
51
51
  onMemoryTypeSelectorStateChange: (show, message) => {
52
52
  setMemoryTypeSelectorState({ show, message });
53
53
  },
54
- onBashManagerStateChange: (show) => {
55
- setShowBashManager(show);
54
+ onTaskManagerStateChange: (show) => {
55
+ setShowTaskManager(show);
56
56
  },
57
57
  onMcpManagerStateChange: (show) => {
58
58
  setShowMcpManager(show);
@@ -65,7 +65,7 @@ export const useInputManager = (callbacks = {}) => {
65
65
  callbacks.onPermissionModeChange?.(mode);
66
66
  },
67
67
  onImagesStateChange: setAttachedImages,
68
- onShowBashManager: () => setShowBashManager(true),
68
+ onShowTaskManager: () => setShowTaskManager(true),
69
69
  onShowMcpManager: () => setShowMcpManager(true),
70
70
  onShowRewindManager: () => setShowRewindManager(true),
71
71
  ...callbacks,
@@ -91,8 +91,8 @@ export const useInputManager = (callbacks = {}) => {
91
91
  onMemoryTypeSelectorStateChange: (show, message) => {
92
92
  setMemoryTypeSelectorState({ show, message });
93
93
  },
94
- onBashManagerStateChange: (show) => {
95
- setShowBashManager(show);
94
+ onTaskManagerStateChange: (show) => {
95
+ setShowTaskManager(show);
96
96
  },
97
97
  onMcpManagerStateChange: (show) => {
98
98
  setShowMcpManager(show);
@@ -105,7 +105,7 @@ export const useInputManager = (callbacks = {}) => {
105
105
  callbacks.onPermissionModeChange?.(mode);
106
106
  },
107
107
  onImagesStateChange: setAttachedImages,
108
- onShowBashManager: () => setShowBashManager(true),
108
+ onShowTaskManager: () => setShowTaskManager(true),
109
109
  onShowMcpManager: () => setShowMcpManager(true),
110
110
  onShowRewindManager: () => setShowRewindManager(true),
111
111
  ...callbacks,
@@ -243,7 +243,7 @@ export const useInputManager = (callbacks = {}) => {
243
243
  historySearchQuery: historySearchState.query,
244
244
  showMemoryTypeSelector: memoryTypeSelectorState.show,
245
245
  memoryMessage: memoryTypeSelectorState.message,
246
- showBashManager,
246
+ showTaskManager,
247
247
  showMcpManager,
248
248
  showRewindManager,
249
249
  permissionMode,
@@ -284,8 +284,8 @@ export const useInputManager = (callbacks = {}) => {
284
284
  // Special handling
285
285
  handleSpecialCharInput,
286
286
  // Bash/MCP Manager
287
- setShowBashManager: useCallback((show) => {
288
- managerRef.current?.setShowBashManager(show);
287
+ setShowTaskManager: useCallback((show) => {
288
+ managerRef.current?.setShowTaskManager(show);
289
289
  }, []),
290
290
  setShowMcpManager: useCallback((show) => {
291
291
  managerRef.current?.setShowMcpManager(show);
@@ -1 +1 @@
1
- {"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,gBAAgB,IAAI,wBAAwB,CAuR3D"}
1
+ {"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,gBAAgB,IAAI,wBAAwB,CA6R3D"}
@@ -149,7 +149,8 @@ export function usePluginManager() {
149
149
  }));
150
150
  try {
151
151
  const pluginId = `${name}@${marketplace}`;
152
- await marketplaceService.installPlugin(pluginId);
152
+ const workdir = process.cwd();
153
+ await marketplaceService.installPlugin(pluginId, workdir);
153
154
  await pluginScopeManager.enablePlugin(scope, pluginId);
154
155
  await refresh();
155
156
  }
@@ -169,10 +170,13 @@ export function usePluginManager() {
169
170
  }));
170
171
  try {
171
172
  const pluginId = `${name}@${marketplace}`;
172
- // Find the scope where it's currently enabled and remove it from there
173
+ const workdir = process.cwd();
174
+ // 1. Remove from global registry and potentially clean up cache
175
+ await marketplaceService.uninstallPlugin(pluginId, workdir);
176
+ // 2. Find the scope where it's currently enabled and remove it from there
173
177
  const scope = pluginScopeManager.findPluginScope(pluginId);
174
178
  if (scope) {
175
- await configurationService.removeEnabledPlugin(process.cwd(), scope, pluginId);
179
+ await configurationService.removeEnabledPlugin(workdir, scope, pluginId);
176
180
  }
177
181
  await refresh();
178
182
  }
@@ -183,7 +187,7 @@ export function usePluginManager() {
183
187
  error: error instanceof Error ? error.message : String(error),
184
188
  }));
185
189
  }
186
- }, [configurationService, pluginScopeManager, refresh]);
190
+ }, [configurationService, marketplaceService, pluginScopeManager, refresh]);
187
191
  const updatePlugin = useCallback(async (name, marketplace) => {
188
192
  setState((prev) => ({
189
193
  ...prev,
@@ -13,11 +13,11 @@ export interface InputManagerCallbacks {
13
13
  onCommandSelectorStateChange?: (show: boolean, query: string, position: number) => void;
14
14
  onHistorySearchStateChange?: (show: boolean, query: string) => void;
15
15
  onMemoryTypeSelectorStateChange?: (show: boolean, message: string) => void;
16
- onShowBashManager?: () => void;
16
+ onShowTaskManager?: () => void;
17
+ onTaskManagerStateChange?: (show: boolean) => void;
17
18
  onShowMcpManager?: () => void;
18
- onShowRewindManager?: () => void;
19
- onBashManagerStateChange?: (show: boolean) => void;
20
19
  onMcpManagerStateChange?: (show: boolean) => void;
20
+ onShowRewindManager?: () => void;
21
21
  onRewindManagerStateChange?: (show: boolean) => void;
22
22
  onImagesStateChange?: (images: AttachedImage[]) => void;
23
23
  onSendMessage?: (content: string, images?: Array<{
@@ -27,6 +27,7 @@ export interface InputManagerCallbacks {
27
27
  onHasSlashCommand?: (commandId: string) => boolean;
28
28
  onSaveMemory?: (message: string, type: "project" | "user") => Promise<void>;
29
29
  onAbortMessage?: () => void;
30
+ onBackgroundCurrentTask?: () => void;
30
31
  onResetHistoryNavigation?: () => void;
31
32
  onPermissionModeChange?: (mode: PermissionMode) => void;
32
33
  logger?: Logger;
@@ -57,7 +58,7 @@ export declare class InputManager {
57
58
  private longTextMap;
58
59
  private attachedImages;
59
60
  private imageIdCounter;
60
- private showBashManager;
61
+ private showTaskManager;
61
62
  private showMcpManager;
62
63
  private showRewindManager;
63
64
  private permissionMode;
@@ -137,8 +138,8 @@ export declare class InputManager {
137
138
  clearImages(): void;
138
139
  getAttachedImages(): AttachedImage[];
139
140
  handlePasteImage(): Promise<boolean>;
140
- getShowBashManager(): boolean;
141
- setShowBashManager(show: boolean): void;
141
+ getShowTaskManager(): boolean;
142
+ setShowTaskManager(show: boolean): void;
142
143
  getShowMcpManager(): boolean;
143
144
  setShowMcpManager(show: boolean): void;
144
145
  getShowRewindManager(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAEL,cAAc,EACd,MAAM,EAEP,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yBAAyB,CAAC,EAAE,CAC1B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,4BAA4B,CAAC,EAAE,CAC7B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,+BAA+B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACxD,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAY;IAEvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,uBAAuB,CAA+B;IAG9D,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IAGxC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,kBAAkB,CAAc;IAGxC,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,0BAA0B,CAAa;IAC/C,OAAO,CAAC,SAAS,CAAkB;IAGnC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,SAAS,GAAE,qBAA0B;IAMjD,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQzD,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,iBAAiB,IAAI,MAAM;IAI3B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAeP,kBAAkB,CAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAiBP,UAAU,IAAI,IAAI;IAOlB,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAIzB,eAAe,IAAI,IAAI;YAKT,WAAW;IAsBzB,OAAO,CAAC,oBAAoB;IAc5B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiB5C,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA4BD,sBAAsB,IAAI,IAAI;IAS9B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IASnD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ/C,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS7C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA+DD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA0BD,yBAAyB,IAAI,IAAI;IAQjC,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAStD,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3C,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrE,4BAA4B,IAAI,IAAI;IAQpC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5C,eAAe,CACb,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,YAAY,EAAE,MAAM,GACnB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE;IA+ClD,sBAAsB,IAAI,IAAI;IAM9B,oBAAoB,IAAI,OAAO;IAI/B,uBAAuB,IAAI,OAAO;IAIlC,0BAA0B,IAAI,OAAO;IAIrC,oBAAoB;;;;;;IASpB,uBAAuB;;;;;IAQvB,0BAA0B;;;;IAQ1B,OAAO,CAAC,qCAAqC;IAkB7C,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuB1C,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOpD,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgBhD,gBAAgB,IAAI,IAAI;IAKxB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoErC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa;IAY5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,WAAW,IAAI,IAAI;IAKnB,iBAAiB,IAAI,aAAa,EAAE;IAI9B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB1C,kBAAkB,IAAI,OAAO;IAI7B,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKvC,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKtC,oBAAoB,IAAI,OAAO;IAI/B,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzC,iBAAiB,IAAI,cAAc;IAInC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,mBAAmB,IAAI,IAAI;IAerB,YAAY,CAChB,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,IAAI,CAAC;IAoDhB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAkDrD,qBAAqB,IAAI,IAAI;IAM7B,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7C,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/C,yBAAyB,IAAI,IAAI;IAO3B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IAuGb,WAAW,CACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IAwEnB,OAAO,IAAI,IAAI;CAUhB"}
@@ -37,7 +37,7 @@ export class InputManager {
37
37
  this.attachedImages = [];
38
38
  this.imageIdCounter = 1;
39
39
  // Additional UI state
40
- this.showBashManager = false;
40
+ this.showTaskManager = false;
41
41
  this.showMcpManager = false;
42
42
  this.showRewindManager = false;
43
43
  // Permission mode state
@@ -220,8 +220,8 @@ export class InputManager {
220
220
  }
221
221
  // If not an agent command or execution failed, check local commands
222
222
  if (!commandExecuted) {
223
- if (command === "bashes" && this.callbacks.onShowBashManager) {
224
- this.callbacks.onShowBashManager();
223
+ if (command === "tasks" && this.callbacks.onShowTaskManager) {
224
+ this.callbacks.onShowTaskManager();
225
225
  commandExecuted = true;
226
226
  }
227
227
  else if (command === "mcp" && this.callbacks.onShowMcpManager) {
@@ -538,13 +538,13 @@ export class InputManager {
538
538
  return false;
539
539
  }
540
540
  }
541
- // Bash/MCP manager state methods
542
- getShowBashManager() {
543
- return this.showBashManager;
541
+ // Task manager state methods
542
+ getShowTaskManager() {
543
+ return this.showTaskManager;
544
544
  }
545
- setShowBashManager(show) {
546
- this.showBashManager = show;
547
- this.callbacks.onBashManagerStateChange?.(show);
545
+ setShowTaskManager(show) {
546
+ this.showTaskManager = show;
547
+ this.callbacks.onTaskManagerStateChange?.(show);
548
548
  }
549
549
  getShowMcpManager() {
550
550
  return this.showMcpManager;
@@ -734,6 +734,11 @@ export class InputManager {
734
734
  this.activateHistorySearch();
735
735
  return true;
736
736
  }
737
+ // Handle Ctrl+B for backgrounding current task
738
+ if (key.ctrl && input === "b") {
739
+ this.callbacks.onBackgroundCurrentTask?.();
740
+ return true;
741
+ }
737
742
  // Handle up/down keys for history navigation (only when no selector is active)
738
743
  if (key.upArrow && !this.showFileSelector && !this.showCommandSelector) {
739
744
  this.navigateHistory("up", this.inputText);
@@ -784,14 +789,14 @@ export class InputManager {
784
789
  this.showCommandSelector ||
785
790
  this.showHistorySearch ||
786
791
  this.showMemoryTypeSelector ||
787
- this.showBashManager ||
792
+ this.showTaskManager ||
788
793
  this.showMcpManager ||
789
794
  this.showRewindManager) {
790
795
  if (this.showMemoryTypeSelector ||
791
- this.showBashManager ||
796
+ this.showTaskManager ||
792
797
  this.showMcpManager ||
793
798
  this.showRewindManager) {
794
- // Memory type selector, bash manager, MCP manager and Rewind don't need to handle input, handled by component itself
799
+ // Memory type selector, task manager, MCP manager and Rewind don't need to handle input, handled by component itself
795
800
  return false;
796
801
  }
797
802
  if (this.showHistorySearch) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-code",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "CLI-based code assistant powered by AI, built with React and Ink",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,19 +38,19 @@
38
38
  "react": "^19.2.4",
39
39
  "react-dom": "19.2.4",
40
40
  "yargs": "^17.7.2",
41
- "wave-agent-sdk": "0.4.0"
41
+ "wave-agent-sdk": "0.5.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/react": "^19.1.8",
45
45
  "@types/yargs": "^17.0.0",
46
- "@vitest/coverage-v8": "^3.2.4",
46
+ "@vitest/coverage-v8": "^4.0.18",
47
47
  "eslint-plugin-react": "^7.37.5",
48
48
  "eslint-plugin-react-hooks": "^5.2.0",
49
49
  "ink-testing-library": "^4.0.0",
50
50
  "rimraf": "^6.1.2",
51
51
  "tsc-alias": "^1.8.16",
52
52
  "tsx": "^4.20.4",
53
- "vitest": "^3.2.4"
53
+ "vitest": "^4.0.18"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "react": ">=18.0.0"
@@ -64,8 +64,8 @@
64
64
  "build": "rimraf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
65
65
  "type-check": "tsc --noEmit --incremental",
66
66
  "watch": "tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch",
67
- "test": "vitest run",
68
- "test:coverage": "vitest run --coverage",
67
+ "test": "vitest run --reporter=dot",
68
+ "test:coverage": "vitest run --coverage --reporter=dot",
69
69
  "lint": "eslint --cache",
70
70
  "format": "prettier --write .",
71
71
  "version:patch": "node ../../scripts/version.js patch",
@@ -10,7 +10,7 @@ export async function uninstallPluginCommand(argv: { plugin: string }) {
10
10
  const workdir = process.cwd();
11
11
 
12
12
  try {
13
- await marketplaceService.uninstallPlugin(argv.plugin);
13
+ await marketplaceService.uninstallPlugin(argv.plugin, workdir);
14
14
  console.log(`Successfully uninstalled plugin: ${argv.plugin}`);
15
15
 
16
16
  const configurationService = new ConfigurationService();
@@ -4,9 +4,9 @@ import type { SlashCommand } from "wave-agent-sdk";
4
4
 
5
5
  const AVAILABLE_COMMANDS: SlashCommand[] = [
6
6
  {
7
- id: "bashes",
8
- name: "bashes",
9
- description: "View and manage background bash shells",
7
+ id: "tasks",
8
+ name: "tasks",
9
+ description: "View and manage background tasks (shells and subagents)",
10
10
  handler: () => {}, // Handler here won't be used, actual processing is in the hook
11
11
  },
12
12
  {