wave-code 0.7.1 → 0.8.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/dist/cli.d.ts +2 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -52
- package/dist/components/App.d.ts +3 -4
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +49 -6
- package/dist/components/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/BackgroundTaskManager.js +12 -20
- package/dist/components/BangDisplay.d.ts +9 -0
- package/dist/components/BangDisplay.d.ts.map +1 -0
- package/dist/components/{CommandOutputDisplay.js → BangDisplay.js} +1 -1
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +3 -2
- package/dist/components/CommandSelector.d.ts.map +1 -1
- package/dist/components/CommandSelector.js +18 -2
- package/dist/components/ConfirmationSelector.d.ts.map +1 -1
- package/dist/components/ConfirmationSelector.js +105 -8
- package/dist/components/HelpView.d.ts.map +1 -1
- package/dist/components/HelpView.js +2 -0
- package/dist/components/HistorySearch.d.ts.map +1 -1
- package/dist/components/HistorySearch.js +19 -25
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +9 -3
- package/dist/components/MarketplaceAddForm.d.ts.map +1 -1
- package/dist/components/MarketplaceAddForm.js +13 -6
- package/dist/components/MarketplaceDetail.d.ts.map +1 -1
- package/dist/components/MarketplaceDetail.js +8 -3
- package/dist/components/MessageBlockItem.js +2 -2
- package/dist/components/MessageList.d.ts +4 -1
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +15 -8
- package/dist/components/PluginDetail.d.ts.map +1 -1
- package/dist/components/PluginDetail.js +14 -3
- package/dist/components/PluginManagerShell.d.ts.map +1 -1
- package/dist/components/PluginManagerShell.js +3 -3
- package/dist/components/PluginManagerTypes.d.ts +2 -0
- package/dist/components/PluginManagerTypes.d.ts.map +1 -1
- package/dist/components/SessionSelector.d.ts.map +1 -1
- package/dist/components/SessionSelector.js +10 -13
- package/dist/components/StatusCommand.d.ts +6 -0
- package/dist/components/StatusCommand.d.ts.map +1 -0
- package/dist/components/StatusCommand.js +28 -0
- package/dist/components/WorktreeExitPrompt.d.ts +13 -0
- package/dist/components/WorktreeExitPrompt.d.ts.map +1 -0
- package/dist/components/WorktreeExitPrompt.js +26 -0
- package/dist/contexts/useChat.d.ts +9 -5
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +38 -8
- package/dist/contracts/status.d.ts +8 -0
- package/dist/contracts/status.d.ts.map +1 -0
- package/dist/contracts/status.js +1 -0
- package/dist/hooks/useInputManager.d.ts +2 -0
- package/dist/hooks/useInputManager.d.ts.map +1 -1
- package/dist/hooks/useInputManager.js +12 -0
- package/dist/hooks/usePluginManager.d.ts.map +1 -1
- package/dist/hooks/usePluginManager.js +41 -13
- package/dist/hooks/useTasks.js +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -4
- package/dist/managers/InputManager.d.ts +6 -0
- package/dist/managers/InputManager.d.ts.map +1 -1
- package/dist/managers/InputManager.js +32 -13
- package/dist/print-cli.d.ts +2 -4
- package/dist/print-cli.d.ts.map +1 -1
- package/dist/print-cli.js +31 -2
- package/dist/session-selector-cli.d.ts +3 -1
- package/dist/session-selector-cli.d.ts.map +1 -1
- package/dist/session-selector-cli.js +2 -2
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils/worktree.d.ts +23 -0
- package/dist/utils/worktree.d.ts.map +1 -0
- package/dist/utils/worktree.js +135 -0
- package/package.json +2 -2
- package/src/cli.tsx +36 -59
- package/src/components/App.tsx +99 -11
- package/src/components/BackgroundTaskManager.tsx +12 -20
- package/src/components/{CommandOutputDisplay.tsx → BangDisplay.tsx} +4 -4
- package/src/components/ChatInterface.tsx +8 -0
- package/src/components/CommandSelector.tsx +18 -1
- package/src/components/ConfirmationSelector.tsx +118 -9
- package/src/components/HelpView.tsx +2 -0
- package/src/components/HistorySearch.tsx +25 -30
- package/src/components/InputBox.tsx +11 -1
- package/src/components/MarketplaceAddForm.tsx +21 -8
- package/src/components/MarketplaceDetail.tsx +19 -4
- package/src/components/MessageBlockItem.tsx +3 -3
- package/src/components/MessageList.tsx +47 -23
- package/src/components/PluginDetail.tsx +30 -6
- package/src/components/PluginManagerShell.tsx +24 -6
- package/src/components/PluginManagerTypes.ts +2 -0
- package/src/components/SessionSelector.tsx +38 -24
- package/src/components/StatusCommand.tsx +94 -0
- package/src/components/WorktreeExitPrompt.tsx +86 -0
- package/src/contexts/useChat.tsx +57 -13
- package/src/contracts/status.ts +7 -0
- package/src/hooks/useInputManager.ts +12 -0
- package/src/hooks/usePluginManager.ts +47 -13
- package/src/hooks/useTasks.ts +2 -2
- package/src/index.ts +71 -12
- package/src/managers/InputManager.ts +37 -15
- package/src/print-cli.ts +48 -5
- package/src/session-selector-cli.tsx +6 -2
- package/src/types.ts +11 -0
- package/src/utils/worktree.ts +164 -0
- package/dist/components/CommandOutputDisplay.d.ts +0 -9
- package/dist/components/CommandOutputDisplay.d.ts.map +0 -1
package/dist/contexts/useChat.js
CHANGED
|
@@ -13,7 +13,7 @@ export const useChat = () => {
|
|
|
13
13
|
}
|
|
14
14
|
return context;
|
|
15
15
|
};
|
|
16
|
-
export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }) => {
|
|
16
|
+
export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, workdir, worktreeSession, version, model, }) => {
|
|
17
17
|
const { restoreSessionId, continueLastSession } = useAppConfig();
|
|
18
18
|
// Message Display State
|
|
19
19
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
@@ -34,8 +34,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
34
34
|
const [mcpServers, setMcpServers] = useState([]);
|
|
35
35
|
// Background tasks state
|
|
36
36
|
const [backgroundTasks, setBackgroundTasks] = useState([]);
|
|
37
|
-
//
|
|
38
|
-
const [
|
|
37
|
+
// Tasks state
|
|
38
|
+
const [tasks, setTasks] = useState([]);
|
|
39
39
|
// Command state
|
|
40
40
|
const [slashCommands, setSlashCommands] = useState([]);
|
|
41
41
|
// Subagent messages state
|
|
@@ -50,6 +50,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
50
50
|
const [currentConfirmation, setCurrentConfirmation] = useState(null);
|
|
51
51
|
// Rewind state
|
|
52
52
|
const [rewindId, setRewindId] = useState(0);
|
|
53
|
+
// Status metadata state
|
|
54
|
+
const [workingDirectory, setWorkingDirectory] = useState("");
|
|
53
55
|
// Confirmation too tall state
|
|
54
56
|
const [wasLastDetailsTooTall, setWasLastDetailsTooTall] = useState(0);
|
|
55
57
|
const agentRef = useRef(null);
|
|
@@ -80,7 +82,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
80
82
|
setMessages([...agentRef.current.messages]);
|
|
81
83
|
}
|
|
82
84
|
messagesUpdateTimerRef.current = null;
|
|
83
|
-
},
|
|
85
|
+
}, 100);
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
},
|
|
@@ -96,11 +98,11 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
96
98
|
onCompressionStateChange: (isCompressingState) => {
|
|
97
99
|
setIsCompressing(isCompressingState);
|
|
98
100
|
},
|
|
99
|
-
|
|
101
|
+
onBackgroundTasksChange: (tasks) => {
|
|
100
102
|
setBackgroundTasks([...tasks]);
|
|
101
103
|
},
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
onTasksChange: (tasks) => {
|
|
105
|
+
setTasks([...tasks]);
|
|
104
106
|
},
|
|
105
107
|
onSubagentMessagesChange: (subagentId, messages) => {
|
|
106
108
|
logger.debug("onSubagentMessagesChange", subagentId, messages.length);
|
|
@@ -148,6 +150,10 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
148
150
|
stream: false, // 关闭流式模式
|
|
149
151
|
plugins: pluginDirs?.map((path) => ({ type: "local", path })),
|
|
150
152
|
tools,
|
|
153
|
+
workdir,
|
|
154
|
+
worktreeName: worktreeSession?.name,
|
|
155
|
+
isNewWorktree: worktreeSession?.isNew,
|
|
156
|
+
model,
|
|
151
157
|
});
|
|
152
158
|
agentRef.current = agent;
|
|
153
159
|
// Get initial state
|
|
@@ -158,6 +164,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
158
164
|
setIsCommandRunning(agent.isCommandRunning);
|
|
159
165
|
setIsCompressing(agent.isCompressing);
|
|
160
166
|
setPermissionModeState(agent.getPermissionMode());
|
|
167
|
+
setWorkingDirectory(agent.workingDirectory);
|
|
161
168
|
// Get initial MCP servers state
|
|
162
169
|
const mcpServers = agent.getMcpServers?.() || [];
|
|
163
170
|
setMcpServers(mcpServers);
|
|
@@ -177,6 +184,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
177
184
|
showConfirmation,
|
|
178
185
|
pluginDirs,
|
|
179
186
|
tools,
|
|
187
|
+
workdir,
|
|
188
|
+
worktreeSession,
|
|
180
189
|
]);
|
|
181
190
|
// Cleanup on unmount
|
|
182
191
|
useEffect(() => {
|
|
@@ -245,6 +254,9 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
245
254
|
const abortMessage = useCallback(() => {
|
|
246
255
|
agentRef.current?.abortMessage();
|
|
247
256
|
}, []);
|
|
257
|
+
const clearMessages = useCallback(() => {
|
|
258
|
+
agentRef.current?.clearMessages();
|
|
259
|
+
}, []);
|
|
248
260
|
// Permission management methods
|
|
249
261
|
const setPermissionMode = useCallback((mode) => {
|
|
250
262
|
setPermissionModeState((prev) => {
|
|
@@ -336,6 +348,18 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
336
348
|
}
|
|
337
349
|
return { messages: [], sessionIds: [] };
|
|
338
350
|
}, []);
|
|
351
|
+
const getGatewayConfig = useCallback(() => {
|
|
352
|
+
if (!agentRef.current) {
|
|
353
|
+
return { baseURL: "" };
|
|
354
|
+
}
|
|
355
|
+
return agentRef.current.getGatewayConfig();
|
|
356
|
+
}, []);
|
|
357
|
+
const getModelConfig = useCallback(() => {
|
|
358
|
+
if (!agentRef.current) {
|
|
359
|
+
return { model: "", fastModel: "" };
|
|
360
|
+
}
|
|
361
|
+
return agentRef.current.getModelConfig();
|
|
362
|
+
}, []);
|
|
339
363
|
// Listen for Ctrl+O hotkey to toggle collapse/expand state and ESC to cancel confirmation
|
|
340
364
|
useInput((input, key) => {
|
|
341
365
|
if (key.ctrl && input === "o") {
|
|
@@ -384,13 +408,14 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
384
408
|
sessionId,
|
|
385
409
|
sendMessage,
|
|
386
410
|
abortMessage,
|
|
411
|
+
clearMessages,
|
|
387
412
|
latestTotalTokens,
|
|
388
413
|
isCompressing,
|
|
389
414
|
mcpServers,
|
|
390
415
|
connectMcpServer,
|
|
391
416
|
disconnectMcpServer,
|
|
392
417
|
backgroundTasks,
|
|
393
|
-
|
|
418
|
+
tasks,
|
|
394
419
|
getBackgroundTaskOutput,
|
|
395
420
|
stopBackgroundTask,
|
|
396
421
|
slashCommands,
|
|
@@ -411,6 +436,11 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
411
436
|
getFullMessageThread,
|
|
412
437
|
wasLastDetailsTooTall,
|
|
413
438
|
setWasLastDetailsTooTall,
|
|
439
|
+
getGatewayConfig,
|
|
440
|
+
getModelConfig,
|
|
441
|
+
workingDirectory,
|
|
442
|
+
version,
|
|
443
|
+
workdir,
|
|
414
444
|
};
|
|
415
445
|
return (_jsx(ChatContext.Provider, { value: contextValue, children: children }));
|
|
416
446
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/contracts/status.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -18,6 +18,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
|
|
|
18
18
|
showMcpManager: boolean;
|
|
19
19
|
showRewindManager: boolean;
|
|
20
20
|
showHelp: boolean;
|
|
21
|
+
showStatusCommand: boolean;
|
|
21
22
|
permissionMode: PermissionMode;
|
|
22
23
|
attachedImages: AttachedImage[];
|
|
23
24
|
isManagerReady: boolean;
|
|
@@ -53,6 +54,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
|
|
|
53
54
|
setShowMcpManager: (show: boolean) => void;
|
|
54
55
|
setShowRewindManager: (show: boolean) => void;
|
|
55
56
|
setShowHelp: (show: boolean) => void;
|
|
57
|
+
setShowStatusCommand: (show: boolean) => void;
|
|
56
58
|
setPermissionMode: (mode: PermissionMode) => void;
|
|
57
59
|
addImage: (imagePath: string, mimeType: string) => AttachedImage | undefined;
|
|
58
60
|
removeImage: (imageId: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM
|
|
1
|
+
{"version":3,"file":"useInputManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM;;;;;;;;;;;;;;;;;;;;+BA+HpC,MAAM,aACD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;oCAQrD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;;;;qCAmBd,MAAM;iCAK7C,MAAM;;;;;mCAe+B,MAAM;oCAIL,MAAM;wCAKF,MAAM;mCAKjD,MAAM;;;;mCAYN,MAAM;;;;;sCAemC,MAAM;uCAIL,MAAM;wCAKL,MAAM;;mCASX,MAAM;yCAkEL,OAAO;8BAGlB,OAAO;iCAGJ,OAAO;wBAIhB,OAAO;iCAIE,OAAO;8BAIV,cAAc;0BAMlB,MAAM,YAAY,MAAM;2BAGvB,MAAM;;;8BAWH,MAAM;mCAKxB,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO;uCAUkB,MAAM;;yBAU1C,MAAM,OACR,GAAG,kBACQ,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO,gBACX,MAAM,IAAI;yBAnIgB,MAAM;kCAIG,MAAM;;CAsJ9D,CAAC"}
|
|
@@ -26,6 +26,7 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
26
26
|
const [showMcpManager, setShowMcpManager] = useState(false);
|
|
27
27
|
const [showRewindManager, setShowRewindManager] = useState(false);
|
|
28
28
|
const [showHelp, setShowHelp] = useState(false);
|
|
29
|
+
const [showStatusCommand, setShowStatusCommand] = useState(false);
|
|
29
30
|
const [permissionMode, setPermissionModeState] = useState("default");
|
|
30
31
|
const [attachedImages, setAttachedImages] = useState([]);
|
|
31
32
|
// Create InputManager on mount and update callbacks when they change
|
|
@@ -57,6 +58,9 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
57
58
|
onHelpStateChange: (show) => {
|
|
58
59
|
setShowHelp(show);
|
|
59
60
|
},
|
|
61
|
+
onStatusCommandStateChange: (show) => {
|
|
62
|
+
setShowStatusCommand(show);
|
|
63
|
+
},
|
|
60
64
|
onPermissionModeChange: (mode) => {
|
|
61
65
|
setPermissionModeState(mode);
|
|
62
66
|
callbacks.onPermissionModeChange?.(mode);
|
|
@@ -94,6 +98,9 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
94
98
|
onHelpStateChange: (show) => {
|
|
95
99
|
setShowHelp(show);
|
|
96
100
|
},
|
|
101
|
+
onStatusCommandStateChange: (show) => {
|
|
102
|
+
setShowStatusCommand(show);
|
|
103
|
+
},
|
|
97
104
|
onPermissionModeChange: (mode) => {
|
|
98
105
|
setPermissionModeState(mode);
|
|
99
106
|
callbacks.onPermissionModeChange?.(mode);
|
|
@@ -207,6 +214,7 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
207
214
|
showMcpManager,
|
|
208
215
|
showRewindManager,
|
|
209
216
|
showHelp,
|
|
217
|
+
showStatusCommand,
|
|
210
218
|
permissionMode,
|
|
211
219
|
attachedImages,
|
|
212
220
|
isManagerReady,
|
|
@@ -249,6 +257,10 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
249
257
|
managerRef.current?.setShowHelp(show);
|
|
250
258
|
setShowHelp(show);
|
|
251
259
|
}, []),
|
|
260
|
+
setShowStatusCommand: useCallback((show) => {
|
|
261
|
+
managerRef.current?.setShowStatusCommand(show);
|
|
262
|
+
setShowStatusCommand(show);
|
|
263
|
+
}, []),
|
|
252
264
|
setPermissionMode: useCallback((mode) => {
|
|
253
265
|
setPermissionModeState(mode);
|
|
254
266
|
managerRef.current?.setPermissionMode(mode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,gBAAgB,IAAI,wBAAwB,
|
|
1
|
+
{"version":3,"file":"usePluginManager.d.ts","sourceRoot":"","sources":["../../src/hooks/usePluginManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,wBAAwB,EACzB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,gBAAgB,IAAI,wBAAwB,CA8R3D"}
|
|
@@ -6,17 +6,38 @@ export function usePluginManager() {
|
|
|
6
6
|
selectedId: null,
|
|
7
7
|
isLoading: true,
|
|
8
8
|
error: null,
|
|
9
|
+
successMessage: null,
|
|
9
10
|
searchQuery: "",
|
|
10
11
|
});
|
|
11
12
|
const [marketplaces, setMarketplaces] = useState([]);
|
|
12
13
|
const [installedPlugins, setInstalledPlugins] = useState([]);
|
|
13
14
|
const [discoverablePlugins, setDiscoverablePlugins] = useState([]);
|
|
14
15
|
const pluginCore = useMemo(() => new PluginCore(), []);
|
|
16
|
+
const clearPluginFeedback = useCallback(() => {
|
|
17
|
+
setState((prev) => ({
|
|
18
|
+
...prev,
|
|
19
|
+
error: null,
|
|
20
|
+
successMessage: null,
|
|
21
|
+
}));
|
|
22
|
+
}, []);
|
|
23
|
+
const setSuccessMessage = useCallback((message) => {
|
|
24
|
+
setState((prev) => ({
|
|
25
|
+
...prev,
|
|
26
|
+
successMessage: message,
|
|
27
|
+
error: null,
|
|
28
|
+
}));
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
setState((prev) => ({
|
|
31
|
+
...prev,
|
|
32
|
+
successMessage: prev.successMessage === message ? null : prev.successMessage,
|
|
33
|
+
}));
|
|
34
|
+
}, 5000);
|
|
35
|
+
}, [setState]);
|
|
15
36
|
const refresh = useCallback(async () => {
|
|
37
|
+
clearPluginFeedback();
|
|
16
38
|
setState((prev) => ({
|
|
17
39
|
...prev,
|
|
18
40
|
isLoading: true,
|
|
19
|
-
error: null,
|
|
20
41
|
}));
|
|
21
42
|
try {
|
|
22
43
|
const [mks, installed, enabledMap] = await Promise.all([
|
|
@@ -78,14 +99,15 @@ export function usePluginManager() {
|
|
|
78
99
|
setState((prev) => ({ ...prev, selectedId: id }));
|
|
79
100
|
}, []);
|
|
80
101
|
const addMarketplace = useCallback(async (source) => {
|
|
102
|
+
clearPluginFeedback();
|
|
81
103
|
setState((prev) => ({
|
|
82
104
|
...prev,
|
|
83
105
|
isLoading: true,
|
|
84
|
-
error: null,
|
|
85
106
|
}));
|
|
86
107
|
try {
|
|
87
108
|
await pluginCore.addMarketplace(source);
|
|
88
109
|
await refresh();
|
|
110
|
+
setSuccessMessage(`Marketplace added successfully`);
|
|
89
111
|
}
|
|
90
112
|
catch (error) {
|
|
91
113
|
setState((prev) => ({
|
|
@@ -94,16 +116,17 @@ export function usePluginManager() {
|
|
|
94
116
|
error: error instanceof Error ? error.message : String(error),
|
|
95
117
|
}));
|
|
96
118
|
}
|
|
97
|
-
}, [pluginCore, refresh]);
|
|
119
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
98
120
|
const removeMarketplace = useCallback(async (name) => {
|
|
121
|
+
clearPluginFeedback();
|
|
99
122
|
setState((prev) => ({
|
|
100
123
|
...prev,
|
|
101
124
|
isLoading: true,
|
|
102
|
-
error: null,
|
|
103
125
|
}));
|
|
104
126
|
try {
|
|
105
127
|
await pluginCore.removeMarketplace(name);
|
|
106
128
|
await refresh();
|
|
129
|
+
setSuccessMessage(`Marketplace '${name}' removed successfully`);
|
|
107
130
|
}
|
|
108
131
|
catch (error) {
|
|
109
132
|
setState((prev) => ({
|
|
@@ -112,16 +135,17 @@ export function usePluginManager() {
|
|
|
112
135
|
error: error instanceof Error ? error.message : String(error),
|
|
113
136
|
}));
|
|
114
137
|
}
|
|
115
|
-
}, [pluginCore, refresh]);
|
|
138
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
116
139
|
const updateMarketplace = useCallback(async (name) => {
|
|
140
|
+
clearPluginFeedback();
|
|
117
141
|
setState((prev) => ({
|
|
118
142
|
...prev,
|
|
119
143
|
isLoading: true,
|
|
120
|
-
error: null,
|
|
121
144
|
}));
|
|
122
145
|
try {
|
|
123
146
|
await pluginCore.updateMarketplace(name);
|
|
124
147
|
await refresh();
|
|
148
|
+
setSuccessMessage(`Marketplace '${name}' updated successfully`);
|
|
125
149
|
}
|
|
126
150
|
catch (error) {
|
|
127
151
|
setState((prev) => ({
|
|
@@ -130,17 +154,18 @@ export function usePluginManager() {
|
|
|
130
154
|
error: error instanceof Error ? error.message : String(error),
|
|
131
155
|
}));
|
|
132
156
|
}
|
|
133
|
-
}, [pluginCore, refresh]);
|
|
157
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
134
158
|
const installPlugin = useCallback(async (name, marketplace, scope = "project") => {
|
|
159
|
+
clearPluginFeedback();
|
|
135
160
|
setState((prev) => ({
|
|
136
161
|
...prev,
|
|
137
162
|
isLoading: true,
|
|
138
|
-
error: null,
|
|
139
163
|
}));
|
|
140
164
|
try {
|
|
141
165
|
const pluginId = `${name}@${marketplace}`;
|
|
142
166
|
await pluginCore.installPlugin(pluginId, scope);
|
|
143
167
|
await refresh();
|
|
168
|
+
setSuccessMessage(`Plugin '${name}' installed successfully`);
|
|
144
169
|
}
|
|
145
170
|
catch (error) {
|
|
146
171
|
setState((prev) => ({
|
|
@@ -149,17 +174,18 @@ export function usePluginManager() {
|
|
|
149
174
|
error: error instanceof Error ? error.message : String(error),
|
|
150
175
|
}));
|
|
151
176
|
}
|
|
152
|
-
}, [pluginCore, refresh]);
|
|
177
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
153
178
|
const uninstallPlugin = useCallback(async (name, marketplace) => {
|
|
179
|
+
clearPluginFeedback();
|
|
154
180
|
setState((prev) => ({
|
|
155
181
|
...prev,
|
|
156
182
|
isLoading: true,
|
|
157
|
-
error: null,
|
|
158
183
|
}));
|
|
159
184
|
try {
|
|
160
185
|
const pluginId = `${name}@${marketplace}`;
|
|
161
186
|
await pluginCore.uninstallPlugin(pluginId);
|
|
162
187
|
await refresh();
|
|
188
|
+
setSuccessMessage(`Plugin '${name}' uninstalled successfully`);
|
|
163
189
|
}
|
|
164
190
|
catch (error) {
|
|
165
191
|
setState((prev) => ({
|
|
@@ -168,17 +194,18 @@ export function usePluginManager() {
|
|
|
168
194
|
error: error instanceof Error ? error.message : String(error),
|
|
169
195
|
}));
|
|
170
196
|
}
|
|
171
|
-
}, [pluginCore, refresh]);
|
|
197
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
172
198
|
const updatePlugin = useCallback(async (name, marketplace) => {
|
|
199
|
+
clearPluginFeedback();
|
|
173
200
|
setState((prev) => ({
|
|
174
201
|
...prev,
|
|
175
202
|
isLoading: true,
|
|
176
|
-
error: null,
|
|
177
203
|
}));
|
|
178
204
|
try {
|
|
179
205
|
const pluginId = `${name}@${marketplace}`;
|
|
180
206
|
await pluginCore.updatePlugin(pluginId);
|
|
181
207
|
await refresh();
|
|
208
|
+
setSuccessMessage(`Plugin '${name}' updated successfully`);
|
|
182
209
|
}
|
|
183
210
|
catch (error) {
|
|
184
211
|
setState((prev) => ({
|
|
@@ -187,7 +214,7 @@ export function usePluginManager() {
|
|
|
187
214
|
error: error instanceof Error ? error.message : String(error),
|
|
188
215
|
}));
|
|
189
216
|
}
|
|
190
|
-
}, [pluginCore, refresh]);
|
|
217
|
+
}, [pluginCore, refresh, clearPluginFeedback, setSuccessMessage]);
|
|
191
218
|
return {
|
|
192
219
|
state,
|
|
193
220
|
marketplaces,
|
|
@@ -203,6 +230,7 @@ export function usePluginManager() {
|
|
|
203
230
|
uninstallPlugin,
|
|
204
231
|
updatePlugin,
|
|
205
232
|
refresh,
|
|
233
|
+
clearPluginFeedback,
|
|
206
234
|
},
|
|
207
235
|
};
|
|
208
236
|
}
|
package/dist/hooks/useTasks.js
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,wBAAsB,IAAI,kBAqUzB;AAGD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import yargs from "yargs";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
3
|
import { startCli } from "./cli.js";
|
|
4
|
+
import { generateRandomName } from "wave-agent-sdk";
|
|
5
|
+
import { createWorktree } from "./utils/worktree.js";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { readFileSync } from "fs";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const packageJsonPath = path.resolve(__dirname, "../package.json");
|
|
11
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
12
|
+
const version = packageJson.version;
|
|
4
13
|
// Export main function for external use
|
|
5
14
|
export async function main() {
|
|
6
15
|
try {
|
|
16
|
+
const originalCwd = process.cwd();
|
|
7
17
|
const argv = await yargs(hideBin(process.argv))
|
|
8
18
|
.option("restore", {
|
|
9
19
|
alias: "r",
|
|
@@ -16,6 +26,12 @@ export async function main() {
|
|
|
16
26
|
description: "Continue from last session",
|
|
17
27
|
type: "boolean",
|
|
18
28
|
global: false,
|
|
29
|
+
})
|
|
30
|
+
.option("worktree", {
|
|
31
|
+
alias: "w",
|
|
32
|
+
description: "Start session in a git worktree (optional name)",
|
|
33
|
+
type: "string",
|
|
34
|
+
global: false,
|
|
19
35
|
})
|
|
20
36
|
.option("print", {
|
|
21
37
|
alias: "p",
|
|
@@ -44,6 +60,11 @@ export async function main() {
|
|
|
44
60
|
description: 'Specify a comma-separated list of tools to enable (e.g., \'Bash,Read,Write\'). Use "" to disable all, "default" for all.',
|
|
45
61
|
type: "string",
|
|
46
62
|
global: false,
|
|
63
|
+
})
|
|
64
|
+
.option("model", {
|
|
65
|
+
description: "Specify the AI model to use",
|
|
66
|
+
type: "string",
|
|
67
|
+
global: false,
|
|
47
68
|
})
|
|
48
69
|
.command("plugin", "Manage plugins and marketplaces", (yargs) => {
|
|
49
70
|
return yargs
|
|
@@ -149,13 +170,29 @@ export async function main() {
|
|
|
149
170
|
return tools.split(",").map((t) => t.trim());
|
|
150
171
|
};
|
|
151
172
|
const tools = parseTools(argv.tools);
|
|
173
|
+
// Resolve plugin directories to absolute paths before any worktree logic
|
|
174
|
+
const pluginDirs = argv.pluginDir?.map((dir) => path.resolve(originalCwd, dir));
|
|
175
|
+
let worktreeSession;
|
|
176
|
+
if (argv.worktree !== undefined ||
|
|
177
|
+
process.argv.includes("-w") ||
|
|
178
|
+
process.argv.includes("--worktree")) {
|
|
179
|
+
let name = argv.worktree;
|
|
180
|
+
if (!name || name === "") {
|
|
181
|
+
name = generateRandomName();
|
|
182
|
+
}
|
|
183
|
+
worktreeSession = createWorktree(name, originalCwd);
|
|
184
|
+
}
|
|
185
|
+
const workdir = worktreeSession?.path || originalCwd;
|
|
186
|
+
if (worktreeSession) {
|
|
187
|
+
process.chdir(workdir);
|
|
188
|
+
}
|
|
152
189
|
// Handle restore session command
|
|
153
190
|
if (argv.restore === "" ||
|
|
154
191
|
(process.argv.includes("-r") && argv.restore === undefined) ||
|
|
155
192
|
(process.argv.includes("--restore") && argv.restore === undefined)) {
|
|
156
193
|
// Interactive session selection
|
|
157
194
|
const { startSessionSelectorCli } = await import("./session-selector-cli.js");
|
|
158
|
-
const selectedSessionId = await startSessionSelectorCli();
|
|
195
|
+
const selectedSessionId = await startSessionSelectorCli({ workdir });
|
|
159
196
|
if (!selectedSessionId) {
|
|
160
197
|
return;
|
|
161
198
|
}
|
|
@@ -163,8 +200,12 @@ export async function main() {
|
|
|
163
200
|
return startCli({
|
|
164
201
|
restoreSessionId: selectedSessionId,
|
|
165
202
|
bypassPermissions: argv.dangerouslySkipPermissions,
|
|
166
|
-
pluginDirs
|
|
203
|
+
pluginDirs,
|
|
167
204
|
tools,
|
|
205
|
+
worktreeSession,
|
|
206
|
+
workdir,
|
|
207
|
+
version,
|
|
208
|
+
model: argv.model,
|
|
168
209
|
});
|
|
169
210
|
}
|
|
170
211
|
// Handle print mode directly
|
|
@@ -176,16 +217,24 @@ export async function main() {
|
|
|
176
217
|
message: argv.print,
|
|
177
218
|
showStats: argv.showStats,
|
|
178
219
|
bypassPermissions: argv.dangerouslySkipPermissions,
|
|
179
|
-
pluginDirs
|
|
220
|
+
pluginDirs,
|
|
180
221
|
tools,
|
|
222
|
+
worktreeSession,
|
|
223
|
+
workdir,
|
|
224
|
+
version,
|
|
225
|
+
model: argv.model,
|
|
181
226
|
});
|
|
182
227
|
}
|
|
183
228
|
await startCli({
|
|
184
229
|
restoreSessionId: argv.restore,
|
|
185
230
|
continueLastSession: argv.continue,
|
|
186
231
|
bypassPermissions: argv.dangerouslySkipPermissions,
|
|
187
|
-
pluginDirs
|
|
232
|
+
pluginDirs,
|
|
188
233
|
tools,
|
|
234
|
+
worktreeSession,
|
|
235
|
+
workdir,
|
|
236
|
+
version,
|
|
237
|
+
model: argv.model,
|
|
189
238
|
});
|
|
190
239
|
}
|
|
191
240
|
catch (error) {
|
|
@@ -16,6 +16,7 @@ export interface InputManagerCallbacks {
|
|
|
16
16
|
onMcpManagerStateChange?: (show: boolean) => void;
|
|
17
17
|
onRewindManagerStateChange?: (show: boolean) => void;
|
|
18
18
|
onHelpStateChange?: (show: boolean) => void;
|
|
19
|
+
onStatusCommandStateChange?: (show: boolean) => void;
|
|
19
20
|
onImagesStateChange?: (images: AttachedImage[]) => void;
|
|
20
21
|
onSendMessage?: (content: string, images?: Array<{
|
|
21
22
|
path: string;
|
|
@@ -23,6 +24,7 @@ export interface InputManagerCallbacks {
|
|
|
23
24
|
}>) => void | Promise<void>;
|
|
24
25
|
onHasSlashCommand?: (commandId: string) => boolean;
|
|
25
26
|
onAbortMessage?: () => void;
|
|
27
|
+
onClearMessages?: () => void;
|
|
26
28
|
onBackgroundCurrentTask?: () => void;
|
|
27
29
|
onResetHistoryNavigation?: () => void;
|
|
28
30
|
onPermissionModeChange?: (mode: PermissionMode) => void;
|
|
@@ -53,6 +55,7 @@ export declare class InputManager {
|
|
|
53
55
|
private showMcpManager;
|
|
54
56
|
private showRewindManager;
|
|
55
57
|
private showHelp;
|
|
58
|
+
private showStatusCommand;
|
|
56
59
|
private permissionMode;
|
|
57
60
|
private selectorJustUsed;
|
|
58
61
|
private callbacks;
|
|
@@ -122,7 +125,10 @@ export declare class InputManager {
|
|
|
122
125
|
setShowRewindManager(show: boolean): void;
|
|
123
126
|
getShowHelp(): boolean;
|
|
124
127
|
setShowHelp(show: boolean): void;
|
|
128
|
+
getShowStatusCommand(): boolean;
|
|
129
|
+
setShowStatusCommand(show: boolean): void;
|
|
125
130
|
getPermissionMode(): PermissionMode;
|
|
131
|
+
isAnySelectorOrManagerActive(): boolean;
|
|
126
132
|
setPermissionMode(mode: PermissionMode): void;
|
|
127
133
|
cyclePermissionMode(): void;
|
|
128
134
|
handleSubmit(attachedImages: Array<{
|
|
@@ -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":"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"}
|