wave-code 0.7.0 → 0.7.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.
- package/dist/components/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/BackgroundTaskManager.js +20 -12
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +28 -15
- package/dist/components/ConfirmationDetails.d.ts +1 -0
- package/dist/components/ConfirmationDetails.d.ts.map +1 -1
- package/dist/components/ConfirmationDetails.js +6 -9
- package/dist/components/ConfirmationSelector.d.ts +1 -0
- package/dist/components/ConfirmationSelector.d.ts.map +1 -1
- package/dist/components/ConfirmationSelector.js +164 -117
- package/dist/components/DiffDisplay.d.ts +1 -0
- package/dist/components/DiffDisplay.d.ts.map +1 -1
- package/dist/components/DiffDisplay.js +92 -29
- package/dist/components/HistorySearch.d.ts.map +1 -1
- package/dist/components/HistorySearch.js +26 -20
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown.js +3 -1
- package/dist/components/McpManager.d.ts.map +1 -1
- package/dist/components/McpManager.js +49 -52
- package/dist/components/MessageBlockItem.d.ts +9 -0
- package/dist/components/MessageBlockItem.d.ts.map +1 -0
- package/dist/components/MessageBlockItem.js +11 -0
- package/dist/components/MessageList.d.ts +2 -4
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +28 -23
- package/dist/components/PluginDetail.d.ts.map +1 -1
- package/dist/components/PluginDetail.js +19 -22
- package/dist/components/SessionSelector.d.ts.map +1 -1
- package/dist/components/SessionSelector.js +8 -5
- package/dist/components/TaskList.d.ts.map +1 -1
- package/dist/components/TaskList.js +2 -5
- package/dist/components/ToolDisplay.d.ts.map +1 -1
- package/dist/components/ToolDisplay.js +1 -1
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +17 -2
- package/dist/utils/highlightUtils.d.ts +2 -0
- package/dist/utils/highlightUtils.d.ts.map +1 -0
- package/dist/utils/highlightUtils.js +69 -0
- package/dist/utils/toolParameterTransforms.d.ts +1 -1
- package/dist/utils/toolParameterTransforms.d.ts.map +1 -1
- package/dist/utils/toolParameterTransforms.js +10 -3
- package/package.json +4 -2
- package/src/components/BackgroundTaskManager.tsx +20 -12
- package/src/components/ChatInterface.tsx +35 -23
- package/src/components/ConfirmationDetails.tsx +13 -9
- package/src/components/ConfirmationSelector.tsx +207 -128
- package/src/components/DiffDisplay.tsx +162 -59
- package/src/components/HistorySearch.tsx +31 -25
- package/src/components/Markdown.tsx +3 -1
- package/src/components/McpManager.tsx +51 -59
- package/src/components/MessageBlockItem.tsx +83 -0
- package/src/components/MessageList.tsx +55 -52
- package/src/components/PluginDetail.tsx +30 -31
- package/src/components/SessionSelector.tsx +8 -5
- package/src/components/TaskList.tsx +2 -5
- package/src/components/ToolDisplay.tsx +5 -1
- package/src/contexts/useChat.tsx +18 -2
- package/src/utils/highlightUtils.ts +76 -0
- package/src/utils/toolParameterTransforms.ts +11 -2
- package/dist/components/MessageItem.d.ts +0 -8
- package/dist/components/MessageItem.d.ts.map +0 -1
- package/dist/components/MessageItem.js +0 -13
- package/src/components/MessageItem.tsx +0 -81
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionSelector.d.ts","sourceRoot":"","sources":["../../src/components/SessionSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,eAAe,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC1D,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"SessionSelector.d.ts","sourceRoot":"","sources":["../../src/components/SessionSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,eAAe,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC1D,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAuH1D,CAAC"}
|
|
@@ -5,9 +5,12 @@ export const SessionSelector = ({ sessions, onSelect, onCancel, }) => {
|
|
|
5
5
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
6
6
|
useInput((input, key) => {
|
|
7
7
|
if (key.return) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
setSelectedIndex((prev) => {
|
|
9
|
+
if (sessions.length > 0 && prev < sessions.length) {
|
|
10
|
+
onSelect(sessions[prev].id);
|
|
11
|
+
}
|
|
12
|
+
return prev;
|
|
13
|
+
});
|
|
11
14
|
return;
|
|
12
15
|
}
|
|
13
16
|
if (key.escape) {
|
|
@@ -15,11 +18,11 @@ export const SessionSelector = ({ sessions, onSelect, onCancel, }) => {
|
|
|
15
18
|
return;
|
|
16
19
|
}
|
|
17
20
|
if (key.upArrow) {
|
|
18
|
-
setSelectedIndex(Math.max(0,
|
|
21
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
19
22
|
return;
|
|
20
23
|
}
|
|
21
24
|
if (key.downArrow) {
|
|
22
|
-
setSelectedIndex(Math.min(sessions.length - 1,
|
|
25
|
+
setSelectedIndex((prev) => Math.min(sessions.length - 1, prev + 1));
|
|
23
26
|
return;
|
|
24
27
|
}
|
|
25
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TaskList.d.ts","sourceRoot":"","sources":["../../src/components/TaskList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAiD5B,CAAC"}
|
|
@@ -8,10 +8,7 @@ export const TaskList = () => {
|
|
|
8
8
|
if (tasks.length === 0 || !isTaskListVisible) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
11
|
-
const getStatusIcon = (status
|
|
12
|
-
if (isBlocked) {
|
|
13
|
-
return _jsx(Text, { color: "red", children: "\uD83D\uDD12" });
|
|
14
|
-
}
|
|
11
|
+
const getStatusIcon = (status) => {
|
|
15
12
|
switch (status) {
|
|
16
13
|
case "pending":
|
|
17
14
|
return _jsx(Text, { color: "gray", children: "\u25A1" });
|
|
@@ -35,6 +32,6 @@ export const TaskList = () => {
|
|
|
35
32
|
? ` (Blocked by: ${blockingTaskIds.join(", ")})`
|
|
36
33
|
: "";
|
|
37
34
|
const fullText = `${task.subject}${blockedByText}`;
|
|
38
|
-
return (_jsxs(Box, { gap: 1, children: [getStatusIcon(task.status
|
|
35
|
+
return (_jsxs(Box, { gap: 1, children: [getStatusIcon(task.status), _jsx(Text, { dimColor: isDimmed, children: fullText })] }, task.id));
|
|
39
36
|
}) }));
|
|
40
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,gBAAgB;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ToolDisplay.d.ts","sourceRoot":"","sources":["../../src/components/ToolDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,UAAU,gBAAgB;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmIlD,CAAC"}
|
|
@@ -40,5 +40,5 @@ export const ToolDisplay = ({ block, isExpanded = false, }) => {
|
|
|
40
40
|
return null;
|
|
41
41
|
};
|
|
42
42
|
const shortResult = getShortResult();
|
|
43
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: getStatusColor(), children: "\u25CF " }), _jsx(Text, { color: "white", children: toolName })] }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), 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: "gray", 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 }))] }));
|
|
43
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: getStatusColor(), children: "\u25CF " }), _jsx(Text, { color: "white", children: toolName })] }), !isExpanded && compactParams && (_jsxs(Text, { color: "gray", children: [" ", compactParams] })), 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: "gray", 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, startLineNumber: block.startLineNumber }))] }));
|
|
44
44
|
};
|
|
@@ -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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"}
|
package/dist/contexts/useChat.js
CHANGED
|
@@ -24,6 +24,7 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
24
24
|
const [isTaskListVisible, setIsTaskListVisible] = useState(true);
|
|
25
25
|
// AI State
|
|
26
26
|
const [messages, setMessages] = useState([]);
|
|
27
|
+
const messagesUpdateTimerRef = useRef(null);
|
|
27
28
|
const [isLoading, setIsLoading] = useState(false);
|
|
28
29
|
const [latestTotalTokens, setlatestTotalTokens] = useState(0);
|
|
29
30
|
const [sessionId, setSessionId] = useState("");
|
|
@@ -71,9 +72,16 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
71
72
|
useEffect(() => {
|
|
72
73
|
const initializeAgent = async () => {
|
|
73
74
|
const callbacks = {
|
|
74
|
-
onMessagesChange: (
|
|
75
|
+
onMessagesChange: () => {
|
|
75
76
|
if (!isExpandedRef.current) {
|
|
76
|
-
|
|
77
|
+
if (!messagesUpdateTimerRef.current) {
|
|
78
|
+
messagesUpdateTimerRef.current = setTimeout(() => {
|
|
79
|
+
if (agentRef.current) {
|
|
80
|
+
setMessages([...agentRef.current.messages]);
|
|
81
|
+
}
|
|
82
|
+
messagesUpdateTimerRef.current = null;
|
|
83
|
+
}, 50);
|
|
84
|
+
}
|
|
77
85
|
}
|
|
78
86
|
},
|
|
79
87
|
onServersChange: (servers) => {
|
|
@@ -173,6 +181,9 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
173
181
|
// Cleanup on unmount
|
|
174
182
|
useEffect(() => {
|
|
175
183
|
return () => {
|
|
184
|
+
if (messagesUpdateTimerRef.current) {
|
|
185
|
+
clearTimeout(messagesUpdateTimerRef.current);
|
|
186
|
+
}
|
|
176
187
|
if (agentRef.current) {
|
|
177
188
|
try {
|
|
178
189
|
// Display usage summary before cleanup
|
|
@@ -332,6 +343,10 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, }
|
|
|
332
343
|
setIsExpanded((prev) => {
|
|
333
344
|
const newExpanded = !prev;
|
|
334
345
|
if (newExpanded) {
|
|
346
|
+
if (messagesUpdateTimerRef.current) {
|
|
347
|
+
clearTimeout(messagesUpdateTimerRef.current);
|
|
348
|
+
messagesUpdateTimerRef.current = null;
|
|
349
|
+
}
|
|
335
350
|
// Transitioning to EXPANDED: Freeze the current view
|
|
336
351
|
// Deep copy the last message to ensure it doesn't update if the agent is still writing to it
|
|
337
352
|
setMessages((currentMessages) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlightUtils.d.ts","sourceRoot":"","sources":["../../src/utils/highlightUtils.ts"],"names":[],"mappings":"AA6DA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAcvE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import hljs from 'highlight.js';
|
|
2
|
+
import { parse, HTMLElement, TextNode } from 'node-html-parser';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
const theme = {
|
|
5
|
+
'hljs-keyword': chalk.blue,
|
|
6
|
+
'hljs-built_in': chalk.cyan,
|
|
7
|
+
'hljs-type': chalk.cyan,
|
|
8
|
+
'hljs-literal': chalk.magenta,
|
|
9
|
+
'hljs-number': chalk.magenta,
|
|
10
|
+
'hljs-operator': chalk.white,
|
|
11
|
+
'hljs-punctuation': chalk.white,
|
|
12
|
+
'hljs-property': chalk.yellow,
|
|
13
|
+
'hljs-attr': chalk.yellow,
|
|
14
|
+
'hljs-variable': chalk.white,
|
|
15
|
+
'hljs-template-variable': chalk.white,
|
|
16
|
+
'hljs-string': chalk.green,
|
|
17
|
+
'hljs-char': chalk.green,
|
|
18
|
+
'hljs-comment': chalk.gray,
|
|
19
|
+
'hljs-doctag': chalk.gray,
|
|
20
|
+
'hljs-function': chalk.yellow,
|
|
21
|
+
'hljs-title': chalk.yellow,
|
|
22
|
+
'hljs-params': chalk.white,
|
|
23
|
+
'hljs-tag': chalk.blue,
|
|
24
|
+
'hljs-name': chalk.blue,
|
|
25
|
+
'hljs-selector-tag': chalk.blue,
|
|
26
|
+
'hljs-selector-id': chalk.blue,
|
|
27
|
+
'hljs-selector-class': chalk.blue,
|
|
28
|
+
'hljs-selector-attr': chalk.blue,
|
|
29
|
+
'hljs-selector-pseudo': chalk.blue,
|
|
30
|
+
'hljs-subst': chalk.white,
|
|
31
|
+
'hljs-section': chalk.blue.bold,
|
|
32
|
+
'hljs-bullet': chalk.magenta,
|
|
33
|
+
'hljs-emphasis': chalk.italic,
|
|
34
|
+
'hljs-strong': chalk.bold,
|
|
35
|
+
'hljs-addition': chalk.green,
|
|
36
|
+
'hljs-deletion': chalk.red,
|
|
37
|
+
'hljs-link': chalk.blue.underline,
|
|
38
|
+
};
|
|
39
|
+
function nodeToAnsi(node) {
|
|
40
|
+
if (node instanceof TextNode) {
|
|
41
|
+
return node.text;
|
|
42
|
+
}
|
|
43
|
+
if (node instanceof HTMLElement) {
|
|
44
|
+
const content = node.childNodes.map(nodeToAnsi).join('');
|
|
45
|
+
const classes = node.getAttribute('class')?.split(/\s+/) || [];
|
|
46
|
+
for (const className of classes) {
|
|
47
|
+
if (theme[className]) {
|
|
48
|
+
return theme[className](content);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return content;
|
|
52
|
+
}
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
export function highlightToAnsi(code, language) {
|
|
56
|
+
if (!code) {
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const highlighted = language
|
|
61
|
+
? hljs.highlight(code, { language }).value
|
|
62
|
+
: hljs.highlightAuto(code).value;
|
|
63
|
+
const root = parse(highlighted);
|
|
64
|
+
return root.childNodes.map(nodeToAnsi).join('');
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return code;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -15,5 +15,5 @@ export declare function transformEditParameters(parameters: EditToolParameters):
|
|
|
15
15
|
* Transform tool block parameters into standardized Change[] array for diff display
|
|
16
16
|
* Forces type judgment based on tool name using type assertions
|
|
17
17
|
*/
|
|
18
|
-
export declare function transformToolBlockToChanges(toolName: string, parameters: string): Change[];
|
|
18
|
+
export declare function transformToolBlockToChanges(toolName: string, parameters: string, startLineNumber?: number): Change[];
|
|
19
19
|
//# sourceMappingURL=toolParameterTransforms.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolParameterTransforms.d.ts","sourceRoot":"","sources":["../../src/utils/toolParameterTransforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAmBxB;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE,CAOV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,kBAAkB,GAC7B,MAAM,EAAE,CAOV;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"toolParameterTransforms.d.ts","sourceRoot":"","sources":["../../src/utils/toolParameterTransforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAmBxB;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,mBAAmB,GAC9B,MAAM,EAAE,CAOV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,kBAAkB,GAC7B,MAAM,EAAE,CAOV;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CA8BV"}
|
|
@@ -44,20 +44,27 @@ export function transformEditParameters(parameters) {
|
|
|
44
44
|
* Transform tool block parameters into standardized Change[] array for diff display
|
|
45
45
|
* Forces type judgment based on tool name using type assertions
|
|
46
46
|
*/
|
|
47
|
-
export function transformToolBlockToChanges(toolName, parameters) {
|
|
47
|
+
export function transformToolBlockToChanges(toolName, parameters, startLineNumber) {
|
|
48
48
|
try {
|
|
49
49
|
if (!toolName) {
|
|
50
50
|
return [];
|
|
51
51
|
}
|
|
52
52
|
const parsedParams = parseToolParameters(parameters);
|
|
53
|
+
let changes = [];
|
|
53
54
|
switch (toolName) {
|
|
54
55
|
case "Write":
|
|
55
|
-
|
|
56
|
+
changes = transformWriteParameters(parsedParams);
|
|
57
|
+
break;
|
|
56
58
|
case "Edit":
|
|
57
|
-
|
|
59
|
+
changes = transformEditParameters(parsedParams);
|
|
60
|
+
break;
|
|
58
61
|
default:
|
|
59
62
|
return [];
|
|
60
63
|
}
|
|
64
|
+
if (changes.length > 0 && startLineNumber !== undefined) {
|
|
65
|
+
changes[0].startLineNumber = startLineNumber;
|
|
66
|
+
}
|
|
67
|
+
return changes;
|
|
61
68
|
}
|
|
62
69
|
catch (error) {
|
|
63
70
|
logger.warn("Failed to transform tool block to changes:", error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wave-code",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "CLI-based code assistant powered by AI, built with React and Ink",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,12 +32,14 @@
|
|
|
32
32
|
"chalk": "^5.6.2",
|
|
33
33
|
"diff": "^8.0.2",
|
|
34
34
|
"glob": "^13.0.0",
|
|
35
|
+
"highlight.js": "^11.11.1",
|
|
35
36
|
"ink": "^6.7.0",
|
|
36
37
|
"marked": "^17.0.2",
|
|
38
|
+
"node-html-parser": "^7.0.2",
|
|
37
39
|
"react": "^19.2.4",
|
|
38
40
|
"react-dom": "19.2.4",
|
|
39
41
|
"yargs": "^17.7.2",
|
|
40
|
-
"wave-agent-sdk": "0.7.
|
|
42
|
+
"wave-agent-sdk": "0.7.1"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
45
|
"@types/react": "^19.1.8",
|
|
@@ -85,11 +85,14 @@ export const BackgroundTaskManager: React.FC<BackgroundTaskManagerProps> = ({
|
|
|
85
85
|
if (viewMode === "list") {
|
|
86
86
|
// List mode navigation
|
|
87
87
|
if (key.return) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
setSelectedIndex((prev) => {
|
|
89
|
+
if (tasks.length > 0 && prev < tasks.length) {
|
|
90
|
+
const selectedTask = tasks[prev];
|
|
91
|
+
setDetailTaskId(selectedTask.id);
|
|
92
|
+
setViewMode("detail");
|
|
93
|
+
}
|
|
94
|
+
return prev;
|
|
95
|
+
});
|
|
93
96
|
return;
|
|
94
97
|
}
|
|
95
98
|
|
|
@@ -99,20 +102,25 @@ export const BackgroundTaskManager: React.FC<BackgroundTaskManagerProps> = ({
|
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
if (key.upArrow) {
|
|
102
|
-
setSelectedIndex(Math.max(0,
|
|
105
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
if (key.downArrow) {
|
|
107
|
-
setSelectedIndex(Math.min(tasks.length - 1,
|
|
110
|
+
setSelectedIndex((prev) => Math.min(tasks.length - 1, prev + 1));
|
|
108
111
|
return;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
if (input === "k"
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
if (input === "k") {
|
|
115
|
+
setSelectedIndex((prev) => {
|
|
116
|
+
if (tasks.length > 0 && prev < tasks.length) {
|
|
117
|
+
const selectedTask = tasks[prev];
|
|
118
|
+
if (selectedTask.status === "running") {
|
|
119
|
+
stopTask(selectedTask.id);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return prev;
|
|
123
|
+
});
|
|
116
124
|
return;
|
|
117
125
|
}
|
|
118
126
|
} else if (viewMode === "detail") {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState, useCallback } from "react";
|
|
1
|
+
import React, { useState, useCallback, useLayoutEffect } from "react";
|
|
2
2
|
import { Box, useStdout } from "ink";
|
|
3
3
|
import { MessageList } from "./MessageList.js";
|
|
4
4
|
import { InputBox } from "./InputBox.js";
|
|
@@ -12,7 +12,9 @@ import type { PermissionDecision } from "wave-agent-sdk";
|
|
|
12
12
|
|
|
13
13
|
export const ChatInterface: React.FC = () => {
|
|
14
14
|
const { stdout } = useStdout();
|
|
15
|
-
const [
|
|
15
|
+
const [detailsHeight, setDetailsHeight] = useState(0);
|
|
16
|
+
const [selectorHeight, setSelectorHeight] = useState(0);
|
|
17
|
+
const [isConfirmationTooTall, setIsConfirmationTooTall] = useState(false);
|
|
16
18
|
|
|
17
19
|
const {
|
|
18
20
|
messages,
|
|
@@ -36,39 +38,49 @@ export const ChatInterface: React.FC = () => {
|
|
|
36
38
|
setWasLastDetailsTooTall,
|
|
37
39
|
} = useChat();
|
|
38
40
|
|
|
39
|
-
const
|
|
40
|
-
(height
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
const handleDetailsHeightMeasured = useCallback((height: number) => {
|
|
42
|
+
setDetailsHeight(height);
|
|
43
|
+
}, []);
|
|
44
|
+
|
|
45
|
+
const handleSelectorHeightMeasured = useCallback((height: number) => {
|
|
46
|
+
setSelectorHeight(height);
|
|
47
|
+
}, []);
|
|
48
|
+
|
|
49
|
+
useLayoutEffect(() => {
|
|
50
|
+
const terminalHeight = stdout?.rows || 24;
|
|
51
|
+
const totalHeight = detailsHeight + selectorHeight;
|
|
52
|
+
if (totalHeight > terminalHeight) {
|
|
53
|
+
setIsConfirmationTooTall(true);
|
|
54
|
+
} else {
|
|
55
|
+
setIsConfirmationTooTall(false);
|
|
56
|
+
}
|
|
57
|
+
}, [detailsHeight, selectorHeight, stdout?.rows]);
|
|
50
58
|
|
|
51
59
|
const handleConfirmationCancel = useCallback(() => {
|
|
52
|
-
if (
|
|
60
|
+
if (isConfirmationTooTall) {
|
|
53
61
|
setWasLastDetailsTooTall((prev) => prev + 1);
|
|
54
|
-
|
|
62
|
+
setIsConfirmationTooTall(false);
|
|
55
63
|
}
|
|
56
64
|
originalHandleConfirmationCancel();
|
|
57
65
|
}, [
|
|
58
|
-
|
|
66
|
+
isConfirmationTooTall,
|
|
59
67
|
originalHandleConfirmationCancel,
|
|
60
68
|
setWasLastDetailsTooTall,
|
|
61
69
|
]);
|
|
62
70
|
|
|
63
71
|
const wrappedHandleConfirmationDecision = useCallback(
|
|
64
72
|
(decision: PermissionDecision) => {
|
|
65
|
-
if (
|
|
73
|
+
if (isConfirmationTooTall) {
|
|
66
74
|
setWasLastDetailsTooTall((prev) => prev + 1);
|
|
67
|
-
|
|
75
|
+
setIsConfirmationTooTall(false);
|
|
68
76
|
}
|
|
69
77
|
handleConfirmationDecision(decision);
|
|
70
78
|
},
|
|
71
|
-
[
|
|
79
|
+
[
|
|
80
|
+
isConfirmationTooTall,
|
|
81
|
+
handleConfirmationDecision,
|
|
82
|
+
setWasLastDetailsTooTall,
|
|
83
|
+
],
|
|
72
84
|
);
|
|
73
85
|
|
|
74
86
|
if (!sessionId) return null;
|
|
@@ -77,10 +89,8 @@ export const ChatInterface: React.FC = () => {
|
|
|
77
89
|
<Box flexDirection="column">
|
|
78
90
|
<MessageList
|
|
79
91
|
messages={messages}
|
|
80
|
-
isLoading={isLoading}
|
|
81
|
-
isCommandRunning={isCommandRunning}
|
|
82
92
|
isExpanded={isExpanded}
|
|
83
|
-
|
|
93
|
+
hideDynamicBlocks={isConfirmationVisible}
|
|
84
94
|
/>
|
|
85
95
|
|
|
86
96
|
{(isLoading || isCommandRunning || isCompressing) &&
|
|
@@ -101,7 +111,8 @@ export const ChatInterface: React.FC = () => {
|
|
|
101
111
|
toolName={confirmingTool!.name}
|
|
102
112
|
toolInput={confirmingTool!.input}
|
|
103
113
|
isExpanded={isExpanded}
|
|
104
|
-
onHeightMeasured={
|
|
114
|
+
onHeightMeasured={handleDetailsHeightMeasured}
|
|
115
|
+
isStatic={isConfirmationTooTall}
|
|
105
116
|
/>
|
|
106
117
|
<ConfirmationSelector
|
|
107
118
|
toolName={confirmingTool!.name}
|
|
@@ -112,6 +123,7 @@ export const ChatInterface: React.FC = () => {
|
|
|
112
123
|
onDecision={wrappedHandleConfirmationDecision}
|
|
113
124
|
onCancel={handleConfirmationCancel}
|
|
114
125
|
onAbort={abortMessage}
|
|
126
|
+
onHeightMeasured={handleSelectorHeightMeasured}
|
|
115
127
|
/>
|
|
116
128
|
</>
|
|
117
129
|
)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useLayoutEffect, useRef
|
|
1
|
+
import React, { useLayoutEffect, useRef } from "react";
|
|
2
2
|
import { Box, Text, useStdout, measureElement, Static } from "ink";
|
|
3
3
|
import {
|
|
4
4
|
BASH_TOOL_NAME,
|
|
@@ -40,6 +40,7 @@ export interface ConfirmationDetailsProps {
|
|
|
40
40
|
toolInput?: Record<string, unknown>;
|
|
41
41
|
isExpanded?: boolean;
|
|
42
42
|
onHeightMeasured?: (height: number) => void;
|
|
43
|
+
isStatic?: boolean;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export const ConfirmationDetails: React.FC<ConfirmationDetailsProps> = ({
|
|
@@ -47,21 +48,21 @@ export const ConfirmationDetails: React.FC<ConfirmationDetailsProps> = ({
|
|
|
47
48
|
toolInput,
|
|
48
49
|
isExpanded = false,
|
|
49
50
|
onHeightMeasured,
|
|
51
|
+
isStatic = false,
|
|
50
52
|
}) => {
|
|
51
53
|
const { stdout } = useStdout();
|
|
52
|
-
const [isStatic, setIsStatic] = useState(false);
|
|
53
54
|
const boxRef = useRef(null);
|
|
54
55
|
|
|
56
|
+
const startLineNumber =
|
|
57
|
+
(toolInput?.startLineNumber as number | undefined) ??
|
|
58
|
+
(toolName === WRITE_TOOL_NAME ? 1 : undefined);
|
|
59
|
+
|
|
55
60
|
useLayoutEffect(() => {
|
|
56
61
|
if (boxRef.current) {
|
|
57
62
|
const { height } = measureElement(boxRef.current);
|
|
58
|
-
const terminalHeight = stdout?.rows || 24;
|
|
59
|
-
if (height > terminalHeight - 10) {
|
|
60
|
-
setIsStatic(true);
|
|
61
|
-
}
|
|
62
63
|
onHeightMeasured?.(height);
|
|
63
64
|
}
|
|
64
|
-
}, [stdout?.rows, onHeightMeasured]);
|
|
65
|
+
}, [stdout?.rows, onHeightMeasured, toolInput, isExpanded]);
|
|
65
66
|
|
|
66
67
|
const content = (
|
|
67
68
|
<Box
|
|
@@ -72,14 +73,17 @@ export const ConfirmationDetails: React.FC<ConfirmationDetailsProps> = ({
|
|
|
72
73
|
borderBottom={false}
|
|
73
74
|
borderLeft={false}
|
|
74
75
|
borderRight={false}
|
|
75
|
-
paddingTop={1}
|
|
76
76
|
>
|
|
77
77
|
<Text color="yellow" bold>
|
|
78
78
|
Tool: {toolName}
|
|
79
79
|
</Text>
|
|
80
80
|
<Text color="yellow">{getActionDescription(toolName, toolInput)}</Text>
|
|
81
81
|
|
|
82
|
-
<DiffDisplay
|
|
82
|
+
<DiffDisplay
|
|
83
|
+
toolName={toolName}
|
|
84
|
+
parameters={JSON.stringify(toolInput)}
|
|
85
|
+
startLineNumber={startLineNumber}
|
|
86
|
+
/>
|
|
83
87
|
|
|
84
88
|
{toolName !== ASK_USER_QUESTION_TOOL_NAME &&
|
|
85
89
|
toolName === EXIT_PLAN_MODE_TOOL_NAME &&
|