wave-code 0.7.2 → 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/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/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 +5 -5
- 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/{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/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 +33 -16
- 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
|
@@ -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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"}
|
|
@@ -34,6 +34,7 @@ export class InputManager {
|
|
|
34
34
|
this.showMcpManager = false;
|
|
35
35
|
this.showRewindManager = false;
|
|
36
36
|
this.showHelp = false;
|
|
37
|
+
this.showStatusCommand = false;
|
|
37
38
|
// Permission mode state
|
|
38
39
|
this.permissionMode = "default";
|
|
39
40
|
// Flag to prevent handleInput conflicts when selector selection occurs
|
|
@@ -208,7 +209,11 @@ export class InputManager {
|
|
|
208
209
|
}
|
|
209
210
|
// If not an agent command or execution failed, check local commands
|
|
210
211
|
if (!commandExecuted) {
|
|
211
|
-
if (command === "
|
|
212
|
+
if (command === "clear") {
|
|
213
|
+
this.callbacks.onClearMessages?.();
|
|
214
|
+
commandExecuted = true;
|
|
215
|
+
}
|
|
216
|
+
else if (command === "tasks") {
|
|
212
217
|
this.setShowBackgroundTaskManager(true);
|
|
213
218
|
commandExecuted = true;
|
|
214
219
|
}
|
|
@@ -224,6 +229,10 @@ export class InputManager {
|
|
|
224
229
|
this.setShowHelp(true);
|
|
225
230
|
commandExecuted = true;
|
|
226
231
|
}
|
|
232
|
+
else if (command === "status") {
|
|
233
|
+
this.setShowStatusCommand(true);
|
|
234
|
+
commandExecuted = true;
|
|
235
|
+
}
|
|
227
236
|
}
|
|
228
237
|
})();
|
|
229
238
|
this.handleCancelCommandSelect();
|
|
@@ -473,10 +482,27 @@ export class InputManager {
|
|
|
473
482
|
this.showHelp = show;
|
|
474
483
|
this.callbacks.onHelpStateChange?.(show);
|
|
475
484
|
}
|
|
485
|
+
getShowStatusCommand() {
|
|
486
|
+
return this.showStatusCommand;
|
|
487
|
+
}
|
|
488
|
+
setShowStatusCommand(show) {
|
|
489
|
+
this.showStatusCommand = show;
|
|
490
|
+
this.callbacks.onStatusCommandStateChange?.(show);
|
|
491
|
+
}
|
|
476
492
|
// Permission mode methods
|
|
477
493
|
getPermissionMode() {
|
|
478
494
|
return this.permissionMode;
|
|
479
495
|
}
|
|
496
|
+
isAnySelectorOrManagerActive() {
|
|
497
|
+
return (this.showFileSelector ||
|
|
498
|
+
this.showCommandSelector ||
|
|
499
|
+
this.showHistorySearch ||
|
|
500
|
+
this.showBackgroundTaskManager ||
|
|
501
|
+
this.showMcpManager ||
|
|
502
|
+
this.showRewindManager ||
|
|
503
|
+
this.showHelp ||
|
|
504
|
+
this.showStatusCommand);
|
|
505
|
+
}
|
|
480
506
|
setPermissionMode(mode) {
|
|
481
507
|
this.permissionMode = mode;
|
|
482
508
|
}
|
|
@@ -664,9 +690,7 @@ export class InputManager {
|
|
|
664
690
|
// Handle interrupt request - use Esc key to interrupt AI request or command
|
|
665
691
|
if (key.escape &&
|
|
666
692
|
(isLoading || isCommandRunning) &&
|
|
667
|
-
!this.
|
|
668
|
-
!this.showMcpManager &&
|
|
669
|
-
!this.showRewindManager) {
|
|
693
|
+
!this.isAnySelectorOrManagerActive()) {
|
|
670
694
|
// Unified interrupt for AI message generation and command execution
|
|
671
695
|
this.callbacks.onAbortMessage?.();
|
|
672
696
|
return true;
|
|
@@ -678,18 +702,13 @@ export class InputManager {
|
|
|
678
702
|
return true;
|
|
679
703
|
}
|
|
680
704
|
// Check if any selector is active
|
|
681
|
-
if (this.
|
|
682
|
-
this.showCommandSelector ||
|
|
683
|
-
this.showHistorySearch ||
|
|
684
|
-
this.showBackgroundTaskManager ||
|
|
685
|
-
this.showMcpManager ||
|
|
686
|
-
this.showRewindManager ||
|
|
687
|
-
this.showHelp) {
|
|
705
|
+
if (this.isAnySelectorOrManagerActive()) {
|
|
688
706
|
if (this.showBackgroundTaskManager ||
|
|
689
707
|
this.showMcpManager ||
|
|
690
708
|
this.showRewindManager ||
|
|
691
|
-
this.showHelp
|
|
692
|
-
|
|
709
|
+
this.showHelp ||
|
|
710
|
+
this.showStatusCommand) {
|
|
711
|
+
// Task manager, MCP manager, Rewind, Help and Status don't need to handle input, handled by component itself
|
|
693
712
|
// Return true to indicate we've "handled" it (by ignoring it) so it doesn't leak to normal input
|
|
694
713
|
return true;
|
|
695
714
|
}
|
package/dist/print-cli.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { BaseAppProps } from "./types.js";
|
|
2
|
+
export interface PrintCliOptions extends BaseAppProps {
|
|
2
3
|
restoreSessionId?: string;
|
|
3
4
|
continueLastSession?: boolean;
|
|
4
5
|
message?: string;
|
|
5
6
|
showStats?: boolean;
|
|
6
|
-
bypassPermissions?: boolean;
|
|
7
|
-
pluginDirs?: string[];
|
|
8
|
-
tools?: string[];
|
|
9
7
|
}
|
|
10
8
|
export declare function startPrintCli(options: PrintCliOptions): Promise<void>;
|
|
11
9
|
//# sourceMappingURL=print-cli.d.ts.map
|
package/dist/print-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-cli.d.ts","sourceRoot":"","sources":["../src/print-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"print-cli.d.ts","sourceRoot":"","sources":["../src/print-cli.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAgBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsM3E"}
|
package/dist/print-cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Agent } from "wave-agent-sdk";
|
|
1
|
+
import { Agent, hasUncommittedChanges, hasNewCommits, getDefaultRemoteBranch, } from "wave-agent-sdk";
|
|
2
2
|
import { displayUsageSummary } from "./utils/usageSummary.js";
|
|
3
|
+
import { removeWorktree } from "./utils/worktree.js";
|
|
3
4
|
function displayTimingInfo(startTime, showStats) {
|
|
4
5
|
// Skip timing info in test environment or if stats are disabled
|
|
5
6
|
if (process.env.NODE_ENV === "test" || process.env.VITEST || !showStats) {
|
|
@@ -13,7 +14,7 @@ function displayTimingInfo(startTime, showStats) {
|
|
|
13
14
|
}
|
|
14
15
|
export async function startPrintCli(options) {
|
|
15
16
|
const startTime = new Date();
|
|
16
|
-
const { restoreSessionId, continueLastSession, message, showStats = false, bypassPermissions, pluginDirs, tools, } = options;
|
|
17
|
+
const { restoreSessionId, continueLastSession, message, showStats = false, bypassPermissions, pluginDirs, tools, worktreeSession, workdir, model, } = options;
|
|
17
18
|
if ((!message || message.trim() === "") &&
|
|
18
19
|
!continueLastSession &&
|
|
19
20
|
!restoreSessionId) {
|
|
@@ -98,6 +99,8 @@ export async function startPrintCli(options) {
|
|
|
98
99
|
permissionMode: bypassPermissions ? "bypassPermissions" : undefined,
|
|
99
100
|
plugins: pluginDirs?.map((path) => ({ type: "local", path })),
|
|
100
101
|
tools,
|
|
102
|
+
workdir,
|
|
103
|
+
model,
|
|
101
104
|
// 保持流式模式以获得更好的命令行用户体验
|
|
102
105
|
});
|
|
103
106
|
// Send message if provided and not empty
|
|
@@ -119,6 +122,19 @@ export async function startPrintCli(options) {
|
|
|
119
122
|
displayTimingInfo(startTime, showStats);
|
|
120
123
|
// Destroy agent and exit after sendMessage completes
|
|
121
124
|
await agent.destroy();
|
|
125
|
+
// Handle worktree cleanup for print mode
|
|
126
|
+
if (worktreeSession) {
|
|
127
|
+
const cwd = workdir || worktreeSession.path;
|
|
128
|
+
const baseBranch = getDefaultRemoteBranch(cwd);
|
|
129
|
+
const hasChanges = hasUncommittedChanges(cwd);
|
|
130
|
+
const hasCommits = hasNewCommits(cwd, baseBranch);
|
|
131
|
+
if (!hasChanges && !hasCommits) {
|
|
132
|
+
removeWorktree(worktreeSession);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
process.stdout.write(`\n⚠️ Worktree '${worktreeSession.name}' has changes or commits. Keeping it at: ${worktreeSession.path}\n`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
122
138
|
process.exit(0);
|
|
123
139
|
}
|
|
124
140
|
catch (error) {
|
|
@@ -138,6 +154,19 @@ export async function startPrintCli(options) {
|
|
|
138
154
|
// Display timing information even on error
|
|
139
155
|
displayTimingInfo(startTime, showStats);
|
|
140
156
|
await agent.destroy();
|
|
157
|
+
// Handle worktree cleanup for print mode even on error
|
|
158
|
+
if (worktreeSession) {
|
|
159
|
+
const cwd = workdir || worktreeSession.path;
|
|
160
|
+
const baseBranch = getDefaultRemoteBranch(cwd);
|
|
161
|
+
const hasChanges = hasUncommittedChanges(cwd);
|
|
162
|
+
const hasCommits = hasNewCommits(cwd, baseBranch);
|
|
163
|
+
if (!hasChanges && !hasCommits) {
|
|
164
|
+
removeWorktree(worktreeSession);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
process.stdout.write(`\n⚠️ Worktree '${worktreeSession.name}' has changes or commits. Keeping it at: ${worktreeSession.path}\n`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
141
170
|
}
|
|
142
171
|
process.exit(1);
|
|
143
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-selector-cli.d.ts","sourceRoot":"","sources":["../src/session-selector-cli.tsx"],"names":[],"mappings":"AAKA,wBAAsB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"session-selector-cli.d.ts","sourceRoot":"","sources":["../src/session-selector-cli.tsx"],"names":[],"mappings":"AAKA,wBAAsB,uBAAuB,CAAC,EAC5C,OAAO,GACR,GAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+B9B"}
|
|
@@ -2,8 +2,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { render, Box } from "ink";
|
|
3
3
|
import { listSessions, truncateContent } from "wave-agent-sdk";
|
|
4
4
|
import { SessionSelector } from "./components/SessionSelector.js";
|
|
5
|
-
export async function startSessionSelectorCli() {
|
|
6
|
-
const currentWorkdir = process.cwd();
|
|
5
|
+
export async function startSessionSelectorCli({ workdir, } = {}) {
|
|
6
|
+
const currentWorkdir = workdir || process.cwd();
|
|
7
7
|
const sessions = await listSessions(currentWorkdir);
|
|
8
8
|
if (sessions.length === 0) {
|
|
9
9
|
console.log(`No sessions found for workdir: ${currentWorkdir}`);
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorktreeSession } from "./utils/worktree.js";
|
|
2
|
+
export interface BaseAppProps {
|
|
3
|
+
bypassPermissions?: boolean;
|
|
4
|
+
pluginDirs?: string[];
|
|
5
|
+
tools?: string[];
|
|
6
|
+
worktreeSession?: WorktreeSession;
|
|
7
|
+
workdir?: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface WorktreeSession {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
branch: string;
|
|
5
|
+
repoRoot: string;
|
|
6
|
+
hasUncommittedChanges: boolean;
|
|
7
|
+
hasNewCommits: boolean;
|
|
8
|
+
isNew: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const WORKTREE_DIR = ".wave/worktrees";
|
|
11
|
+
/**
|
|
12
|
+
* Create a new git worktree
|
|
13
|
+
* @param name Worktree name
|
|
14
|
+
* @param cwd Current working directory
|
|
15
|
+
* @returns Worktree session details
|
|
16
|
+
*/
|
|
17
|
+
export declare function createWorktree(name: string, cwd: string): WorktreeSession;
|
|
18
|
+
/**
|
|
19
|
+
* Remove a git worktree and its associated branch
|
|
20
|
+
* @param session Worktree session details
|
|
21
|
+
*/
|
|
22
|
+
export declare function removeWorktree(session: WorktreeSession): void;
|
|
23
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/utils/worktree.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAyEzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA6D7D"}
|