wave-code 0.11.6 → 0.11.7
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/acp/agent.d.ts.map +1 -1
- package/dist/acp/agent.js +9 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +97 -0
- package/dist/components/App.js +1 -1
- package/dist/components/BtwDisplay.d.ts +8 -0
- package/dist/components/BtwDisplay.d.ts.map +1 -0
- package/dist/components/BtwDisplay.js +9 -0
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +3 -4
- package/dist/components/ConfirmationDetails.d.ts.map +1 -1
- package/dist/components/ConfirmationDetails.js +7 -1
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +13 -3
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +5 -3
- package/dist/components/RewindCommand.js +2 -2
- package/dist/components/StatusLine.d.ts +8 -0
- package/dist/components/StatusLine.d.ts.map +1 -0
- package/dist/components/StatusLine.js +5 -0
- package/dist/constants/commands.d.ts.map +1 -1
- package/dist/constants/commands.js +6 -0
- package/dist/contexts/useChat.d.ts +4 -0
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +35 -1
- package/dist/hooks/useInputManager.d.ts +3 -0
- package/dist/hooks/useInputManager.d.ts.map +1 -1
- package/dist/hooks/useInputManager.js +50 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/managers/inputHandlers.d.ts +1 -1
- package/dist/managers/inputHandlers.d.ts.map +1 -1
- package/dist/managers/inputHandlers.js +68 -5
- package/dist/managers/inputReducer.d.ts +17 -0
- package/dist/managers/inputReducer.d.ts.map +1 -1
- package/dist/managers/inputReducer.js +16 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +4 -0
- package/package.json +4 -2
- package/src/acp/agent.ts +10 -0
- package/src/commands/update.ts +116 -0
- package/src/components/App.tsx +1 -1
- package/src/components/BtwDisplay.tsx +33 -0
- package/src/components/ChatInterface.tsx +25 -25
- package/src/components/ConfirmationDetails.tsx +14 -0
- package/src/components/InputBox.tsx +30 -17
- package/src/components/MessageList.tsx +6 -3
- package/src/components/RewindCommand.tsx +2 -2
- package/src/components/StatusLine.tsx +36 -0
- package/src/constants/commands.ts +6 -0
- package/src/contexts/useChat.tsx +49 -1
- package/src/hooks/useInputManager.ts +59 -0
- package/src/index.ts +9 -0
- package/src/managers/inputHandlers.ts +87 -4
- package/src/managers/inputReducer.ts +31 -1
- package/src/utils/version.ts +8 -0
|
@@ -8,7 +8,7 @@ export declare const handleSubmit: (state: InputState, dispatch: React.Dispatch<
|
|
|
8
8
|
mimeType: string;
|
|
9
9
|
}>) => Promise<void>;
|
|
10
10
|
export declare const handlePasteImage: (dispatch: React.Dispatch<InputAction>) => Promise<boolean>;
|
|
11
|
-
export declare const cyclePermissionMode: (currentMode: PermissionMode, dispatch: React.Dispatch<InputAction>, callbacks: Partial<InputManagerCallbacks
|
|
11
|
+
export declare const cyclePermissionMode: (currentMode: PermissionMode, dispatch: React.Dispatch<InputAction>, callbacks: Partial<InputManagerCallbacks>, allowBypassInCycle?: boolean) => void;
|
|
12
12
|
export declare const getAtSelectorPosition: (text: string, cursorPosition: number) => number;
|
|
13
13
|
export declare const getSlashSelectorPosition: (text: string, cursorPosition: number) => number;
|
|
14
14
|
export declare const updateSearchQueriesForActiveSelectors: (state: InputState, dispatch: React.Dispatch<InputAction>, inputText: string, cursorPosition: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputHandlers.d.ts","sourceRoot":"","sources":["../../src/managers/inputHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAwB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EACL,UAAU,EACV,WAAW,EACX,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,0BAA0B,GACrC,MAAM,MAAM,EACZ,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAClC,MAcF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,yBAAyB,KAAK,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,KACD,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"inputHandlers.d.ts","sourceRoot":"","sources":["../../src/managers/inputHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAwB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EACL,UAAU,EACV,WAAW,EACX,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,0BAA0B,GACrC,MAAM,MAAM,EACZ,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAClC,MAcF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,yBAAyB,KAAK,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,KACD,OAAO,CAAC,IAAI,CA8Dd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KACpC,OAAO,CAAC,OAAO,CAiBjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,aAAa,cAAc,EAC3B,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,qBAAoB,OAAe,SAiBpC,CAAC;AAgCF,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,gBAAgB,MAAM,KACrB,MAaF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,EACZ,gBAAgB,MAAM,KACrB,MAaF,CAAC;AAEF,eAAO,MAAM,qCAAqC,GAChD,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,MAAM,EACjB,gBAAgB,MAAM,KACrB,IAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,MAAM,MAAM,KACX,IAkDF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,OAAO,MAAM,KACZ,IA0BF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAM3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,SAAS,MAAM;;;CAyDhB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,UAAU,MAAM;;;CAmBjB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,gBAAgB,MAAM,KACrB,OAMF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,gBAAgB,MAAM,KACrB,OAMF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,OAAO,MAAM,EACb,KAAK,GAAG,KACP,OA8EF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,OAAO,MAAM,EACb,KAAK,GAAG,EACR,cAAc,MAAM,IAAI,KACvB,OAAO,CAAC,OAAO,CA8JjB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,UAAU,EACjB,UAAU,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACrC,WAAW,OAAO,CAAC,qBAAqB,CAAC,EACzC,OAAO,MAAM,EACb,KAAK,GAAG,EACR,cAAc,MAAM,IAAI,KACvB,OAAO,CAAC,OAAO,CAsIjB,CAAC"}
|
|
@@ -28,6 +28,25 @@ export const handleSubmit = async (state, dispatch, callbacks, attachedImagesOve
|
|
|
28
28
|
const contentWithPlaceholders = state.inputText
|
|
29
29
|
.replace(imageRegex, "")
|
|
30
30
|
.trim();
|
|
31
|
+
if (contentWithPlaceholders === "/btw" ||
|
|
32
|
+
contentWithPlaceholders.startsWith("/btw ")) {
|
|
33
|
+
const question = contentWithPlaceholders.startsWith("/btw ")
|
|
34
|
+
? contentWithPlaceholders.substring(5).trim()
|
|
35
|
+
: "";
|
|
36
|
+
const payload = {
|
|
37
|
+
isActive: true,
|
|
38
|
+
question,
|
|
39
|
+
isLoading: question !== "",
|
|
40
|
+
};
|
|
41
|
+
dispatch({
|
|
42
|
+
type: "SET_BTW_STATE",
|
|
43
|
+
payload,
|
|
44
|
+
});
|
|
45
|
+
dispatch({ type: "CLEAR_INPUT" });
|
|
46
|
+
dispatch({ type: "RESET_HISTORY_NAVIGATION" });
|
|
47
|
+
dispatch({ type: "CLEAR_LONG_TEXT_MAP" });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
31
50
|
PromptHistoryManager.addEntry(contentWithPlaceholders, callbacks.sessionId, state.longTextMap, callbacks.workdir).catch((err) => {
|
|
32
51
|
callbacks.logger?.error("Failed to save prompt history", err);
|
|
33
52
|
});
|
|
@@ -54,8 +73,11 @@ export const handlePasteImage = async (dispatch) => {
|
|
|
54
73
|
return false;
|
|
55
74
|
}
|
|
56
75
|
};
|
|
57
|
-
export const cyclePermissionMode = (currentMode, dispatch, callbacks) => {
|
|
76
|
+
export const cyclePermissionMode = (currentMode, dispatch, callbacks, allowBypassInCycle = false) => {
|
|
58
77
|
const modes = ["default", "acceptEdits", "plan"];
|
|
78
|
+
if (allowBypassInCycle) {
|
|
79
|
+
modes.push("bypassPermissions");
|
|
80
|
+
}
|
|
59
81
|
const currentIndex = modes.indexOf(currentMode);
|
|
60
82
|
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % modes.length;
|
|
61
83
|
const nextMode = modes[nextIndex];
|
|
@@ -246,6 +268,12 @@ export const handleCommandSelect = (state, dispatch, callbacks, command) => {
|
|
|
246
268
|
else if (command === "plugin") {
|
|
247
269
|
dispatch({ type: "SET_SHOW_PLUGIN_MANAGER", payload: true });
|
|
248
270
|
}
|
|
271
|
+
else if (command === "btw") {
|
|
272
|
+
dispatch({
|
|
273
|
+
type: "SET_BTW_STATE",
|
|
274
|
+
payload: { isActive: true, question: "", isLoading: false },
|
|
275
|
+
});
|
|
276
|
+
}
|
|
249
277
|
}
|
|
250
278
|
})();
|
|
251
279
|
dispatch({ type: "CANCEL_COMMAND_SELECTOR" });
|
|
@@ -321,9 +349,11 @@ export const handleSelectorInput = (state, dispatch, callbacks, input, key) => {
|
|
|
321
349
|
if (input === " ") {
|
|
322
350
|
if (state.showFileSelector) {
|
|
323
351
|
dispatch({ type: "CANCEL_FILE_SELECTOR" });
|
|
352
|
+
return false;
|
|
324
353
|
}
|
|
325
354
|
else if (state.showCommandSelector) {
|
|
326
355
|
dispatch({ type: "CANCEL_COMMAND_SELECTOR" });
|
|
356
|
+
return false;
|
|
327
357
|
}
|
|
328
358
|
}
|
|
329
359
|
if (input &&
|
|
@@ -475,6 +505,36 @@ export const handleInput = async (state, dispatch, callbacks, input, key, clearI
|
|
|
475
505
|
if (state.selectorJustUsed) {
|
|
476
506
|
return true;
|
|
477
507
|
}
|
|
508
|
+
if (state.btwState.isActive) {
|
|
509
|
+
if (key.escape) {
|
|
510
|
+
dispatch({
|
|
511
|
+
type: "SET_BTW_STATE",
|
|
512
|
+
payload: {
|
|
513
|
+
isActive: false,
|
|
514
|
+
question: "",
|
|
515
|
+
answer: undefined,
|
|
516
|
+
isLoading: false,
|
|
517
|
+
},
|
|
518
|
+
});
|
|
519
|
+
return true;
|
|
520
|
+
}
|
|
521
|
+
if (key.return) {
|
|
522
|
+
if (state.inputText.trim() && !state.btwState.isLoading) {
|
|
523
|
+
dispatch({
|
|
524
|
+
type: "SET_BTW_STATE",
|
|
525
|
+
payload: {
|
|
526
|
+
question: state.inputText.trim(),
|
|
527
|
+
isLoading: true,
|
|
528
|
+
answer: undefined,
|
|
529
|
+
},
|
|
530
|
+
});
|
|
531
|
+
dispatch({ type: "CLEAR_INPUT" });
|
|
532
|
+
}
|
|
533
|
+
return true;
|
|
534
|
+
}
|
|
535
|
+
// Handle normal input for the question
|
|
536
|
+
return await handleNormalInput(state, dispatch, callbacks, input, key, clearImages);
|
|
537
|
+
}
|
|
478
538
|
if (key.escape) {
|
|
479
539
|
if (!(state.showFileSelector ||
|
|
480
540
|
state.showCommandSelector ||
|
|
@@ -484,13 +544,14 @@ export const handleInput = async (state, dispatch, callbacks, input, key, clearI
|
|
|
484
544
|
state.showRewindManager ||
|
|
485
545
|
state.showHelp ||
|
|
486
546
|
state.showStatusCommand ||
|
|
487
|
-
state.showPluginManager
|
|
547
|
+
state.showPluginManager ||
|
|
548
|
+
state.btwState.isActive)) {
|
|
488
549
|
callbacks.onAbortMessage?.();
|
|
489
550
|
return true;
|
|
490
551
|
}
|
|
491
552
|
}
|
|
492
553
|
if (key.tab && key.shift) {
|
|
493
|
-
cyclePermissionMode(state.permissionMode, dispatch, callbacks);
|
|
554
|
+
cyclePermissionMode(state.permissionMode, dispatch, callbacks, state.allowBypassInCycle);
|
|
494
555
|
return true;
|
|
495
556
|
}
|
|
496
557
|
if (state.showFileSelector ||
|
|
@@ -501,13 +562,15 @@ export const handleInput = async (state, dispatch, callbacks, input, key, clearI
|
|
|
501
562
|
state.showRewindManager ||
|
|
502
563
|
state.showHelp ||
|
|
503
564
|
state.showStatusCommand ||
|
|
504
|
-
state.showPluginManager
|
|
565
|
+
state.showPluginManager ||
|
|
566
|
+
state.btwState.isActive) {
|
|
505
567
|
if (state.showBackgroundTaskManager ||
|
|
506
568
|
state.showMcpManager ||
|
|
507
569
|
state.showRewindManager ||
|
|
508
570
|
state.showHelp ||
|
|
509
571
|
state.showStatusCommand ||
|
|
510
|
-
state.showPluginManager
|
|
572
|
+
state.showPluginManager ||
|
|
573
|
+
state.btwState.isActive) {
|
|
511
574
|
return true;
|
|
512
575
|
}
|
|
513
576
|
if (state.showHistorySearch) {
|
|
@@ -4,6 +4,12 @@ export interface AttachedImage {
|
|
|
4
4
|
path: string;
|
|
5
5
|
mimeType: string;
|
|
6
6
|
}
|
|
7
|
+
export interface BtwState {
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
question: string;
|
|
10
|
+
answer?: string;
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
}
|
|
7
13
|
export interface InputManagerCallbacks {
|
|
8
14
|
onInputTextChange?: (text: string) => void;
|
|
9
15
|
onCursorPositionChange?: (position: number) => void;
|
|
@@ -25,6 +31,9 @@ export interface InputManagerCallbacks {
|
|
|
25
31
|
onAbortMessage?: () => void;
|
|
26
32
|
onBackgroundCurrentTask?: () => void;
|
|
27
33
|
onPermissionModeChange?: (mode: PermissionMode) => void;
|
|
34
|
+
onAskBtw?: (question: string) => Promise<string>;
|
|
35
|
+
btwState?: BtwState;
|
|
36
|
+
onBtwStateChange?: (payload: Partial<BtwState>) => void;
|
|
28
37
|
sessionId?: string;
|
|
29
38
|
workdir?: string;
|
|
30
39
|
getFullMessageThread?: () => Promise<{
|
|
@@ -56,6 +65,7 @@ export interface InputState {
|
|
|
56
65
|
showStatusCommand: boolean;
|
|
57
66
|
showPluginManager: boolean;
|
|
58
67
|
permissionMode: PermissionMode;
|
|
68
|
+
allowBypassInCycle: boolean;
|
|
59
69
|
selectorJustUsed: boolean;
|
|
60
70
|
isPasting: boolean;
|
|
61
71
|
pasteBuffer: string;
|
|
@@ -65,6 +75,7 @@ export interface InputState {
|
|
|
65
75
|
originalInputText: string;
|
|
66
76
|
originalLongTextMap: Record<string, string>;
|
|
67
77
|
isFileSearching: boolean;
|
|
78
|
+
btwState: BtwState;
|
|
68
79
|
}
|
|
69
80
|
export declare const initialState: InputState;
|
|
70
81
|
export type InputAction = {
|
|
@@ -139,6 +150,9 @@ export type InputAction = {
|
|
|
139
150
|
} | {
|
|
140
151
|
type: "SET_PERMISSION_MODE";
|
|
141
152
|
payload: PermissionMode;
|
|
153
|
+
} | {
|
|
154
|
+
type: "SET_ALLOW_BYPASS_IN_CYCLE";
|
|
155
|
+
payload: boolean;
|
|
142
156
|
} | {
|
|
143
157
|
type: "SET_SELECTOR_JUST_USED";
|
|
144
158
|
payload: boolean;
|
|
@@ -177,6 +191,9 @@ export type InputAction = {
|
|
|
177
191
|
} | {
|
|
178
192
|
type: "SELECT_HISTORY_ENTRY";
|
|
179
193
|
payload: PromptEntry;
|
|
194
|
+
} | {
|
|
195
|
+
type: "SET_BTW_STATE";
|
|
196
|
+
payload: Partial<BtwState>;
|
|
180
197
|
};
|
|
181
198
|
export declare function inputReducer(state: InputState, action: InputAction): InputState;
|
|
182
199
|
//# sourceMappingURL=inputReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputReducer.d.ts","sourceRoot":"","sources":["../../src/managers/inputReducer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inputReducer.d.ts","sourceRoot":"","sources":["../../src/managers/inputReducer.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ export const initialState = {
|
|
|
21
21
|
showStatusCommand: false,
|
|
22
22
|
showPluginManager: false,
|
|
23
23
|
permissionMode: "default",
|
|
24
|
+
allowBypassInCycle: false,
|
|
24
25
|
selectorJustUsed: false,
|
|
25
26
|
isPasting: false,
|
|
26
27
|
pasteBuffer: "",
|
|
@@ -30,6 +31,11 @@ export const initialState = {
|
|
|
30
31
|
originalInputText: "",
|
|
31
32
|
originalLongTextMap: {},
|
|
32
33
|
isFileSearching: false,
|
|
34
|
+
btwState: {
|
|
35
|
+
isActive: false,
|
|
36
|
+
question: "",
|
|
37
|
+
isLoading: false,
|
|
38
|
+
},
|
|
33
39
|
};
|
|
34
40
|
export function inputReducer(state, action) {
|
|
35
41
|
switch (action.type) {
|
|
@@ -195,6 +201,8 @@ export function inputReducer(state, action) {
|
|
|
195
201
|
};
|
|
196
202
|
case "SET_PERMISSION_MODE":
|
|
197
203
|
return { ...state, permissionMode: action.payload };
|
|
204
|
+
case "SET_ALLOW_BYPASS_IN_CYCLE":
|
|
205
|
+
return { ...state, allowBypassInCycle: action.payload };
|
|
198
206
|
case "SET_SELECTOR_JUST_USED":
|
|
199
207
|
return { ...state, selectorJustUsed: action.payload };
|
|
200
208
|
case "INSERT_TEXT_WITH_PLACEHOLDER": {
|
|
@@ -335,6 +343,14 @@ export function inputReducer(state, action) {
|
|
|
335
343
|
originalInputText: "",
|
|
336
344
|
originalLongTextMap: {},
|
|
337
345
|
};
|
|
346
|
+
case "SET_BTW_STATE":
|
|
347
|
+
return {
|
|
348
|
+
...state,
|
|
349
|
+
btwState: {
|
|
350
|
+
...state.btwState,
|
|
351
|
+
...action.payload,
|
|
352
|
+
},
|
|
353
|
+
};
|
|
338
354
|
default:
|
|
339
355
|
return state;
|
|
340
356
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,OAAO,CAET"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wave-code",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.7",
|
|
4
4
|
"description": "CLI-based code assistant powered by AI, built with React and Ink",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,12 +39,14 @@
|
|
|
39
39
|
"node-html-parser": "^7.0.2",
|
|
40
40
|
"react": "^19.2.4",
|
|
41
41
|
"react-dom": "19.2.4",
|
|
42
|
+
"semver": "^7.7.4",
|
|
42
43
|
"yargs": "^17.7.2",
|
|
43
44
|
"zod": "^3.23.8",
|
|
44
|
-
"wave-agent-sdk": "0.11.
|
|
45
|
+
"wave-agent-sdk": "0.11.7"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@types/react": "^19.1.8",
|
|
49
|
+
"@types/semver": "^7.7.1",
|
|
48
50
|
"@types/yargs": "^17.0.0",
|
|
49
51
|
"@vitest/coverage-v8": "^4.0.18",
|
|
50
52
|
"eslint-plugin-react": "^7.37.5",
|
package/src/acp/agent.ts
CHANGED
|
@@ -669,6 +669,16 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
669
669
|
},
|
|
670
670
|
});
|
|
671
671
|
}
|
|
672
|
+
|
|
673
|
+
if (contents.length === 0) {
|
|
674
|
+
contents.push({
|
|
675
|
+
type: "content",
|
|
676
|
+
content: {
|
|
677
|
+
type: "text",
|
|
678
|
+
text: "```json\n" + JSON.stringify(parameters, null, 2) + "\n```",
|
|
679
|
+
},
|
|
680
|
+
});
|
|
681
|
+
}
|
|
672
682
|
}
|
|
673
683
|
|
|
674
684
|
if (shortResult) {
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { spawnSync } from "child_process";
|
|
2
|
+
import { readFileSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
import https from "https";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { isUpdateAvailable } from "../utils/version.js";
|
|
8
|
+
|
|
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 currentVersion = packageJson.version;
|
|
13
|
+
|
|
14
|
+
async function getLatestVersion(): Promise<string> {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
https
|
|
17
|
+
.get("https://registry.npmjs.org/wave-code/latest", (res) => {
|
|
18
|
+
let data = "";
|
|
19
|
+
res.on("data", (chunk) => {
|
|
20
|
+
data += chunk;
|
|
21
|
+
});
|
|
22
|
+
res.on("end", () => {
|
|
23
|
+
try {
|
|
24
|
+
const json = JSON.parse(data);
|
|
25
|
+
resolve(json.version);
|
|
26
|
+
} catch {
|
|
27
|
+
reject(new Error("Failed to parse npm registry response"));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
.on("error", (err) => {
|
|
32
|
+
reject(err);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function detectPackageManager(): "npm" | "pnpm" | "yarn" {
|
|
38
|
+
// Check if wave-code is installed globally with pnpm
|
|
39
|
+
const pnpmList = spawnSync("pnpm", ["list", "-g", "wave-code"], {
|
|
40
|
+
encoding: "utf-8",
|
|
41
|
+
});
|
|
42
|
+
if (pnpmList.status === 0 && pnpmList.stdout?.includes("wave-code")) {
|
|
43
|
+
return "pnpm";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Check if wave-code is installed globally with yarn
|
|
47
|
+
const yarnList = spawnSync("yarn", ["global", "list"], { encoding: "utf-8" });
|
|
48
|
+
if (yarnList.status === 0 && yarnList.stdout?.includes("wave-code")) {
|
|
49
|
+
return "yarn";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Default to npm
|
|
53
|
+
return "npm";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export async function updateCommand() {
|
|
57
|
+
console.log(chalk.blue(`Checking for updates...`));
|
|
58
|
+
console.log(chalk.dim(`Current version: ${currentVersion}`));
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const latestVersion = await getLatestVersion();
|
|
62
|
+
console.log(chalk.dim(`Latest version: ${latestVersion}`));
|
|
63
|
+
|
|
64
|
+
if (!isUpdateAvailable(currentVersion, latestVersion)) {
|
|
65
|
+
console.log(chalk.green("WAVE Code is already up to date!"));
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
console.log(
|
|
70
|
+
chalk.yellow(`A new version of WAVE Code is available: ${latestVersion}`),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const packageManager = detectPackageManager();
|
|
74
|
+
let updateCmd: string;
|
|
75
|
+
let args: string[];
|
|
76
|
+
|
|
77
|
+
if (packageManager === "pnpm") {
|
|
78
|
+
updateCmd = "pnpm";
|
|
79
|
+
args = ["add", "-g", "wave-code@latest"];
|
|
80
|
+
} else if (packageManager === "yarn") {
|
|
81
|
+
updateCmd = "yarn";
|
|
82
|
+
args = ["global", "add", "wave-code@latest"];
|
|
83
|
+
} else {
|
|
84
|
+
updateCmd = "npm";
|
|
85
|
+
args = ["install", "-g", "wave-code@latest"];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log(chalk.blue(`Updating WAVE Code using ${packageManager}...`));
|
|
89
|
+
console.log(chalk.dim(`Running: ${updateCmd} ${args.join(" ")}`));
|
|
90
|
+
|
|
91
|
+
const result = spawnSync(updateCmd, args, { stdio: "inherit" });
|
|
92
|
+
|
|
93
|
+
if (result.status === 0) {
|
|
94
|
+
console.log(chalk.green("WAVE Code updated successfully!"));
|
|
95
|
+
process.exit(0);
|
|
96
|
+
} else {
|
|
97
|
+
console.log(chalk.red("Failed to update WAVE Code."));
|
|
98
|
+
console.log(
|
|
99
|
+
chalk.yellow(
|
|
100
|
+
`Please try running the update command manually: ${updateCmd} ${args.join(" ")}`,
|
|
101
|
+
),
|
|
102
|
+
);
|
|
103
|
+
if (process.platform !== "win32") {
|
|
104
|
+
console.log(
|
|
105
|
+
chalk.yellow(
|
|
106
|
+
"You might need to run it with sudo if you encounter permission issues.",
|
|
107
|
+
),
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error(chalk.red("Error checking for updates:"), error);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
package/src/components/App.tsx
CHANGED
|
@@ -133,7 +133,7 @@ const ChatInterfaceWithRemount: React.FC = () => {
|
|
|
133
133
|
|
|
134
134
|
if (newKey !== remountKey) {
|
|
135
135
|
const timeout = setTimeout(() => {
|
|
136
|
-
stdout?.write("\u001b[2J\u001b[0;0H", (err?: Error | null) => {
|
|
136
|
+
stdout?.write("\u001b[2J\u001b[3J\u001b[0;0H", (err?: Error | null) => {
|
|
137
137
|
if (err) {
|
|
138
138
|
console.error("Failed to clear terminal:", err);
|
|
139
139
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { Markdown } from "./Markdown.js";
|
|
4
|
+
import { BtwState } from "../managers/inputReducer.js";
|
|
5
|
+
|
|
6
|
+
interface BtwDisplayProps {
|
|
7
|
+
btwState: BtwState;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const BtwDisplay: React.FC<BtwDisplayProps> = ({ btwState }) => {
|
|
11
|
+
if (!btwState.isActive) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<Box flexDirection="column" marginTop={0} marginBottom={1}>
|
|
17
|
+
{btwState.question && (
|
|
18
|
+
<Box>
|
|
19
|
+
<Text color={btwState.isLoading ? "yellow" : "green"}>● </Text>
|
|
20
|
+
<Text italic color="gray">
|
|
21
|
+
/btw {btwState.question}
|
|
22
|
+
</Text>
|
|
23
|
+
</Box>
|
|
24
|
+
)}
|
|
25
|
+
|
|
26
|
+
{btwState.answer && (
|
|
27
|
+
<Box flexDirection="column">
|
|
28
|
+
<Markdown>{btwState.answer}</Markdown>
|
|
29
|
+
</Box>
|
|
30
|
+
)}
|
|
31
|
+
</Box>
|
|
32
|
+
);
|
|
33
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useState, useCallback, useLayoutEffect } from "react";
|
|
2
2
|
import { Box, useStdout } from "ink";
|
|
3
3
|
import { MessageList } from "./MessageList.js";
|
|
4
|
+
import { BtwDisplay } from "./BtwDisplay.js";
|
|
4
5
|
import { InputBox } from "./InputBox.js";
|
|
5
6
|
import { LoadingIndicator } from "./LoadingIndicator.js";
|
|
6
7
|
import { TaskList } from "./TaskList.js";
|
|
@@ -41,6 +42,7 @@ export const ChatInterface: React.FC = () => {
|
|
|
41
42
|
version,
|
|
42
43
|
workdir,
|
|
43
44
|
getModelConfig,
|
|
45
|
+
btwState,
|
|
44
46
|
} = useChat();
|
|
45
47
|
|
|
46
48
|
const model = getModelConfig().model;
|
|
@@ -127,17 +129,32 @@ export const ChatInterface: React.FC = () => {
|
|
|
127
129
|
onDynamicBlocksHeightMeasured={handleDynamicBlocksHeightMeasured}
|
|
128
130
|
/>
|
|
129
131
|
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
{!isConfirmationVisible && !isExpanded && (
|
|
133
|
+
<>
|
|
134
|
+
<BtwDisplay btwState={btwState} />
|
|
135
|
+
{(isLoading || isCommandRunning || isCompressing) && (
|
|
136
|
+
<LoadingIndicator
|
|
137
|
+
isLoading={isLoading}
|
|
138
|
+
isCommandRunning={isCommandRunning}
|
|
139
|
+
isCompressing={isCompressing}
|
|
140
|
+
latestTotalTokens={latestTotalTokens}
|
|
141
|
+
/>
|
|
142
|
+
)}
|
|
143
|
+
<TaskList />
|
|
144
|
+
<QueuedMessageList />
|
|
145
|
+
<InputBox
|
|
134
146
|
isLoading={isLoading}
|
|
135
147
|
isCommandRunning={isCommandRunning}
|
|
136
|
-
|
|
137
|
-
|
|
148
|
+
sendMessage={sendMessage}
|
|
149
|
+
abortMessage={abortMessage}
|
|
150
|
+
mcpServers={mcpServers}
|
|
151
|
+
connectMcpServer={connectMcpServer}
|
|
152
|
+
disconnectMcpServer={disconnectMcpServer}
|
|
153
|
+
slashCommands={slashCommands}
|
|
154
|
+
hasSlashCommand={hasSlashCommand}
|
|
138
155
|
/>
|
|
139
|
-
|
|
140
|
-
|
|
156
|
+
</>
|
|
157
|
+
)}
|
|
141
158
|
|
|
142
159
|
{isConfirmationVisible && (
|
|
143
160
|
<>
|
|
@@ -162,23 +179,6 @@ export const ChatInterface: React.FC = () => {
|
|
|
162
179
|
/>
|
|
163
180
|
</>
|
|
164
181
|
)}
|
|
165
|
-
|
|
166
|
-
{!isConfirmationVisible && !isExpanded && (
|
|
167
|
-
<>
|
|
168
|
-
<QueuedMessageList />
|
|
169
|
-
<InputBox
|
|
170
|
-
isLoading={isLoading}
|
|
171
|
-
isCommandRunning={isCommandRunning}
|
|
172
|
-
sendMessage={sendMessage}
|
|
173
|
-
abortMessage={abortMessage}
|
|
174
|
-
mcpServers={mcpServers}
|
|
175
|
-
connectMcpServer={connectMcpServer}
|
|
176
|
-
disconnectMcpServer={disconnectMcpServer}
|
|
177
|
-
slashCommands={slashCommands}
|
|
178
|
-
hasSlashCommand={hasSlashCommand}
|
|
179
|
-
/>
|
|
180
|
-
</>
|
|
181
|
-
)}
|
|
182
182
|
</Box>
|
|
183
183
|
);
|
|
184
184
|
};
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from "wave-agent-sdk";
|
|
10
10
|
import { DiffDisplay } from "./DiffDisplay.js";
|
|
11
11
|
import { PlanDisplay } from "./PlanDisplay.js";
|
|
12
|
+
import { highlightToAnsi } from "../utils/highlightUtils.js";
|
|
12
13
|
|
|
13
14
|
// Helper function to generate descriptive action text
|
|
14
15
|
const getActionDescription = (
|
|
@@ -87,6 +88,19 @@ export const ConfirmationDetails: React.FC<ConfirmationDetailsProps> = ({
|
|
|
87
88
|
startLineNumber={startLineNumber}
|
|
88
89
|
/>
|
|
89
90
|
|
|
91
|
+
{toolName !== WRITE_TOOL_NAME &&
|
|
92
|
+
toolName !== EDIT_TOOL_NAME &&
|
|
93
|
+
toolName !== EXIT_PLAN_MODE_TOOL_NAME &&
|
|
94
|
+
toolName !== ASK_USER_QUESTION_TOOL_NAME &&
|
|
95
|
+
toolName !== BASH_TOOL_NAME &&
|
|
96
|
+
!!toolInput && (
|
|
97
|
+
<Box paddingLeft={2} borderLeft borderColor="cyan">
|
|
98
|
+
<Text>
|
|
99
|
+
{highlightToAnsi(JSON.stringify(toolInput, null, 2), "json")}
|
|
100
|
+
</Text>
|
|
101
|
+
</Box>
|
|
102
|
+
)}
|
|
103
|
+
|
|
90
104
|
{toolName !== ASK_USER_QUESTION_TOOL_NAME &&
|
|
91
105
|
toolName === EXIT_PLAN_MODE_TOOL_NAME &&
|
|
92
106
|
!!planContent && (
|