wave-code 0.11.0 → 0.11.2
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 +10 -26
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +1 -1
- package/dist/components/ConfirmationSelector.js +1 -1
- package/dist/components/MessageList.d.ts +2 -1
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +2 -2
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +7 -1
- package/package.json +3 -3
- package/src/acp/agent.ts +9 -30
- package/src/components/ChatInterface.tsx +1 -0
- package/src/components/ConfirmationSelector.tsx +1 -1
- package/src/components/MessageList.tsx +3 -1
- package/src/contexts/useChat.tsx +6 -1
package/dist/acp/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,KAAK,KAAK,IAAI,QAAQ,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAUzB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EAMpC,MAAM,0BAA0B,CAAC;AAElC,qBAAa,YAAa,YAAW,QAAQ;IAC3C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,UAAU,CAAsB;gBAE5B,UAAU,EAAE,mBAAmB;IAI3C,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,uBAAuB;YAmBjB,gBAAgB;IASxB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAwBzC,YAAY,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAI5C,WAAW;IAiEnB,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAalE,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWrE,YAAY,CAChB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAuB1B,qBAAqB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAc7B,SAAS,CACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7B,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,sBAAsB,CAC1B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC;IAqBpC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDtD,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASvD,OAAO,CAAC,kBAAkB;YA2BZ,uBAAuB;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,KAAK,KAAK,IAAI,QAAQ,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAUzB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EAMpC,MAAM,0BAA0B,CAAC;AAElC,qBAAa,YAAa,YAAW,QAAQ;IAC3C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,UAAU,CAAsB;gBAE5B,UAAU,EAAE,mBAAmB;IAI3C,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,uBAAuB;YAmBjB,gBAAgB;IASxB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAwBzC,YAAY,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAI5C,WAAW;IAiEnB,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAalE,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWrE,YAAY,CAChB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAuB1B,qBAAqB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAc7B,SAAS,CACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7B,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,sBAAsB,CAC1B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC;IAqBpC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDtD,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASvD,OAAO,CAAC,kBAAkB;YA2BZ,uBAAuB;YAqKvB,mBAAmB;IA6EjC,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,eAAe;CA+LxB"}
|
package/dist/acp/agent.js
CHANGED
|
@@ -401,16 +401,15 @@ export class WaveAcpAgent {
|
|
|
401
401
|
case "allow_always":
|
|
402
402
|
if (context.toolName === BASH_TOOL_NAME) {
|
|
403
403
|
const command = context.toolInput?.command || "";
|
|
404
|
-
const rule = context.suggestedPrefix
|
|
405
|
-
? `${context.suggestedPrefix}*`
|
|
406
|
-
: command;
|
|
404
|
+
const rule = context.suggestedPrefix || command;
|
|
407
405
|
return {
|
|
408
406
|
behavior: "allow",
|
|
409
407
|
newPermissionRule: `${BASH_TOOL_NAME}(${rule})`,
|
|
410
408
|
};
|
|
411
409
|
}
|
|
412
410
|
if (context.toolName === EDIT_TOOL_NAME ||
|
|
413
|
-
context.toolName === WRITE_TOOL_NAME
|
|
411
|
+
context.toolName === WRITE_TOOL_NAME ||
|
|
412
|
+
context.toolName === EXIT_PLAN_MODE_TOOL_NAME) {
|
|
414
413
|
return {
|
|
415
414
|
behavior: "allow",
|
|
416
415
|
newPermissionMode: "acceptEdits",
|
|
@@ -508,9 +507,9 @@ export class WaveAcpAgent {
|
|
|
508
507
|
},
|
|
509
508
|
];
|
|
510
509
|
}
|
|
511
|
-
return this.getToolContent(name, parameters
|
|
510
|
+
return this.getToolContent(name, parameters);
|
|
512
511
|
}
|
|
513
|
-
getToolContent(name, parameters
|
|
512
|
+
getToolContent(name, parameters) {
|
|
514
513
|
const contents = [];
|
|
515
514
|
if (parameters) {
|
|
516
515
|
if (name === "Write") {
|
|
@@ -529,24 +528,6 @@ export class WaveAcpAgent {
|
|
|
529
528
|
newText: parameters.new_string,
|
|
530
529
|
});
|
|
531
530
|
}
|
|
532
|
-
else if (name === EXIT_PLAN_MODE_TOOL_NAME) {
|
|
533
|
-
contents.push({
|
|
534
|
-
type: "content",
|
|
535
|
-
content: {
|
|
536
|
-
type: "text",
|
|
537
|
-
text: parameters.plan_content,
|
|
538
|
-
},
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
if (shortResult) {
|
|
543
|
-
contents.push({
|
|
544
|
-
type: "content",
|
|
545
|
-
content: {
|
|
546
|
-
type: "text",
|
|
547
|
-
text: shortResult,
|
|
548
|
-
},
|
|
549
|
-
});
|
|
550
531
|
}
|
|
551
532
|
return contents.length > 0 ? contents : undefined;
|
|
552
533
|
}
|
|
@@ -649,14 +630,17 @@ export class WaveAcpAgent {
|
|
|
649
630
|
let parsedParameters = undefined;
|
|
650
631
|
if (parameters) {
|
|
651
632
|
try {
|
|
652
|
-
|
|
633
|
+
const parsed = JSON.parse(parameters);
|
|
634
|
+
parsedParameters = Array.isArray(parsed)
|
|
635
|
+
? { args: parsed }
|
|
636
|
+
: parsed;
|
|
653
637
|
}
|
|
654
638
|
catch {
|
|
655
639
|
// Ignore parse errors during streaming
|
|
656
640
|
}
|
|
657
641
|
}
|
|
658
642
|
const content = effectiveName && (parsedParameters || effectiveShortResult)
|
|
659
|
-
? this.getToolContent(effectiveName, parsedParameters
|
|
643
|
+
? this.getToolContent(effectiveName, parsedParameters)
|
|
660
644
|
: undefined;
|
|
661
645
|
const locations = effectiveName && parsedParameters
|
|
662
646
|
? this.getToolLocations(effectiveName, parsedParameters, effectiveStartLineNumber)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAatE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAatE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA0KjC,CAAC"}
|
|
@@ -75,7 +75,7 @@ export const ChatInterface = () => {
|
|
|
75
75
|
]);
|
|
76
76
|
if (!sessionId)
|
|
77
77
|
return null;
|
|
78
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(MessageList, { messages: displayMessages, isExpanded: isExpanded, forceStatic: isConfirmationVisible && isConfirmationTooTall, version: version, workdir: workdir, model: model, onDynamicBlocksHeightMeasured: handleDynamicBlocksHeightMeasured }), (isLoading || isCommandRunning || isCompressing) &&
|
|
78
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(MessageList, { messages: displayMessages, isExpanded: isExpanded, forceStatic: isConfirmationVisible && isConfirmationTooTall, isFinished: !isLoading && !isCommandRunning && !isCompressing, version: version, workdir: workdir, model: model, onDynamicBlocksHeightMeasured: handleDynamicBlocksHeightMeasured }), (isLoading || isCommandRunning || isCompressing) &&
|
|
79
79
|
!isConfirmationVisible &&
|
|
80
80
|
!isExpanded && (_jsx(LoadingIndicator, { isLoading: isLoading, isCommandRunning: isCommandRunning, isCompressing: isCompressing, latestTotalTokens: latestTotalTokens })), !isConfirmationVisible && !isExpanded && _jsx(TaskList, {}), isConfirmationVisible && (_jsxs(_Fragment, { children: [_jsx(ConfirmationDetails, { toolName: confirmingTool.name, toolInput: confirmingTool.input, isExpanded: isExpanded, onHeightMeasured: handleDetailsHeightMeasured, isStatic: isConfirmationTooTall }), _jsx(ConfirmationSelector, { toolName: confirmingTool.name, toolInput: confirmingTool.input, suggestedPrefix: confirmingTool.suggestedPrefix, hidePersistentOption: confirmingTool.hidePersistentOption, isExpanded: isExpanded, onDecision: wrappedHandleConfirmationDecision, onCancel: handleConfirmationCancel, onAbort: abortMessage, onHeightMeasured: handleSelectorHeightMeasured })] })), !isConfirmationVisible && !isExpanded && (_jsxs(_Fragment, { children: [_jsx(QueuedMessageList, {}), _jsx(InputBox, { isLoading: isLoading, isCommandRunning: isCommandRunning, sendMessage: sendMessage, abortMessage: abortMessage, mcpServers: mcpServers, connectMcpServer: connectMcpServer, disconnectMcpServer: disconnectMcpServer, slashCommands: slashCommands, hasSlashCommand: hasSlashCommand })] }))] }));
|
|
81
81
|
};
|
|
@@ -305,7 +305,7 @@ export const ConfirmationSelector = ({ toolName, toolInput, suggestedPrefix, hid
|
|
|
305
305
|
}
|
|
306
306
|
else {
|
|
307
307
|
const rule = suggestedPrefix
|
|
308
|
-
? `Bash(${suggestedPrefix}
|
|
308
|
+
? `Bash(${suggestedPrefix})`
|
|
309
309
|
: `Bash(${toolInput?.command})`;
|
|
310
310
|
onDecision({ behavior: "allow", newPermissionRule: rule });
|
|
311
311
|
}
|
|
@@ -4,10 +4,11 @@ export interface MessageListProps {
|
|
|
4
4
|
messages: Message[];
|
|
5
5
|
isExpanded?: boolean;
|
|
6
6
|
forceStatic?: boolean;
|
|
7
|
+
isFinished?: boolean;
|
|
7
8
|
version?: string;
|
|
8
9
|
workdir?: string;
|
|
9
10
|
model?: string;
|
|
10
11
|
onDynamicBlocksHeightMeasured?: (height: number) => void;
|
|
11
12
|
}
|
|
12
|
-
export declare const MessageList: React.MemoExoticComponent<({ messages, isExpanded, forceStatic, version, workdir, model, onDynamicBlocksHeightMeasured, }: MessageListProps) => import("react/jsx-runtime").JSX.Element>;
|
|
13
|
+
export declare const MessageList: React.MemoExoticComponent<({ messages, isExpanded, forceStatic, isFinished, version, workdir, model, onDynamicBlocksHeightMeasured, }: MessageListProps) => import("react/jsx-runtime").JSX.Element>;
|
|
13
14
|
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAGvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAGvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,eAAO,MAAM,WAAW,yIAUnB,gBAAgB,6CA+GpB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import React, { useLayoutEffect, useRef } from "react";
|
|
|
3
3
|
import os from "os";
|
|
4
4
|
import { Box, Text, Static, measureElement } from "ink";
|
|
5
5
|
import { MessageBlockItem } from "./MessageBlockItem.js";
|
|
6
|
-
export const MessageList = React.memo(({ messages, isExpanded = false, forceStatic = false, version, workdir, model, onDynamicBlocksHeightMeasured, }) => {
|
|
6
|
+
export const MessageList = React.memo(({ messages, isExpanded = false, forceStatic = false, isFinished = false, version, workdir, model, onDynamicBlocksHeightMeasured, }) => {
|
|
7
7
|
const welcomeMessage = (_jsxs(Box, { flexDirection: "column", paddingTop: 1, children: [_jsxs(Text, { color: "gray", children: ["WAVE", version ? ` v${version}` : "", model ? ` • ${model}` : ""] }), workdir && (_jsx(Text, { color: "gray", wrap: "truncate-middle", children: workdir.replace(os.homedir(), "~") }))] }));
|
|
8
8
|
// Limit messages to prevent long rendering times
|
|
9
9
|
const maxMessages = 10;
|
|
@@ -21,7 +21,7 @@ export const MessageList = React.memo(({ messages, isExpanded = false, forceStat
|
|
|
21
21
|
// Determine which blocks are static vs dynamic
|
|
22
22
|
const blocksWithStatus = allBlocks.map((item) => {
|
|
23
23
|
const { isLastMessage } = item;
|
|
24
|
-
const isDynamic = !forceStatic && isLastMessage;
|
|
24
|
+
const isDynamic = !forceStatic && !isFinished && isLastMessage;
|
|
25
25
|
return { ...item, isDynamic };
|
|
26
26
|
});
|
|
27
27
|
const staticBlocks = blocksWithStatus.filter((b) => !b.isDynamic);
|
|
@@ -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
|
@@ -241,7 +241,13 @@ export const ChatProvider = ({ children, bypassPermissions, permissionMode: init
|
|
|
241
241
|
!hasImageAttachments) {
|
|
242
242
|
const command = expandedContent.substring(1).trim();
|
|
243
243
|
if (command) {
|
|
244
|
-
|
|
244
|
+
setIsCommandRunning(true);
|
|
245
|
+
try {
|
|
246
|
+
await agentRef.current?.executeBashCommand(command);
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
setIsCommandRunning(false);
|
|
250
|
+
}
|
|
245
251
|
return;
|
|
246
252
|
}
|
|
247
253
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wave-code",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "CLI-based code assistant powered by AI, built with React and Ink",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"README.md"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
+
"@agentclientprotocol/sdk": "0.17.0",
|
|
32
33
|
"chalk": "^5.6.2",
|
|
33
34
|
"diff": "^8.0.2",
|
|
34
35
|
"glob": "^13.0.0",
|
|
@@ -39,9 +40,8 @@
|
|
|
39
40
|
"react": "^19.2.4",
|
|
40
41
|
"react-dom": "19.2.4",
|
|
41
42
|
"yargs": "^17.7.2",
|
|
42
|
-
"@agentclientprotocol/sdk": "0.16.1",
|
|
43
43
|
"zod": "^3.23.8",
|
|
44
|
-
"wave-agent-sdk": "0.11.
|
|
44
|
+
"wave-agent-sdk": "0.11.2"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/react": "^19.1.8",
|
package/src/acp/agent.ts
CHANGED
|
@@ -544,9 +544,7 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
544
544
|
case "allow_always":
|
|
545
545
|
if (context.toolName === BASH_TOOL_NAME) {
|
|
546
546
|
const command = (context.toolInput?.command as string) || "";
|
|
547
|
-
const rule = context.suggestedPrefix
|
|
548
|
-
? `${context.suggestedPrefix}*`
|
|
549
|
-
: command;
|
|
547
|
+
const rule = context.suggestedPrefix || command;
|
|
550
548
|
return {
|
|
551
549
|
behavior: "allow",
|
|
552
550
|
newPermissionRule: `${BASH_TOOL_NAME}(${rule})`,
|
|
@@ -554,7 +552,8 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
554
552
|
}
|
|
555
553
|
if (
|
|
556
554
|
context.toolName === EDIT_TOOL_NAME ||
|
|
557
|
-
context.toolName === WRITE_TOOL_NAME
|
|
555
|
+
context.toolName === WRITE_TOOL_NAME ||
|
|
556
|
+
context.toolName === EXIT_PLAN_MODE_TOOL_NAME
|
|
558
557
|
) {
|
|
559
558
|
return {
|
|
560
559
|
behavior: "allow",
|
|
@@ -658,13 +657,12 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
658
657
|
},
|
|
659
658
|
];
|
|
660
659
|
}
|
|
661
|
-
return this.getToolContent(name, parameters
|
|
660
|
+
return this.getToolContent(name, parameters);
|
|
662
661
|
}
|
|
663
662
|
|
|
664
663
|
private getToolContent(
|
|
665
664
|
name: string,
|
|
666
665
|
parameters: Record<string, unknown> | undefined,
|
|
667
|
-
shortResult: string | undefined,
|
|
668
666
|
): ToolCallContent[] | undefined {
|
|
669
667
|
const contents: ToolCallContent[] = [];
|
|
670
668
|
if (parameters) {
|
|
@@ -682,27 +680,9 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
682
680
|
oldText: parameters.old_string as string,
|
|
683
681
|
newText: parameters.new_string as string,
|
|
684
682
|
});
|
|
685
|
-
} else if (name === EXIT_PLAN_MODE_TOOL_NAME) {
|
|
686
|
-
contents.push({
|
|
687
|
-
type: "content",
|
|
688
|
-
content: {
|
|
689
|
-
type: "text",
|
|
690
|
-
text: parameters.plan_content as string,
|
|
691
|
-
},
|
|
692
|
-
});
|
|
693
683
|
}
|
|
694
684
|
}
|
|
695
685
|
|
|
696
|
-
if (shortResult) {
|
|
697
|
-
contents.push({
|
|
698
|
-
type: "content",
|
|
699
|
-
content: {
|
|
700
|
-
type: "text",
|
|
701
|
-
text: shortResult,
|
|
702
|
-
},
|
|
703
|
-
});
|
|
704
|
-
}
|
|
705
|
-
|
|
706
686
|
return contents.length > 0 ? contents : undefined;
|
|
707
687
|
}
|
|
708
688
|
|
|
@@ -837,7 +817,10 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
837
817
|
let parsedParameters: Record<string, unknown> | undefined = undefined;
|
|
838
818
|
if (parameters) {
|
|
839
819
|
try {
|
|
840
|
-
|
|
820
|
+
const parsed = JSON.parse(parameters);
|
|
821
|
+
parsedParameters = Array.isArray(parsed)
|
|
822
|
+
? { args: parsed }
|
|
823
|
+
: parsed;
|
|
841
824
|
} catch {
|
|
842
825
|
// Ignore parse errors during streaming
|
|
843
826
|
}
|
|
@@ -845,11 +828,7 @@ export class WaveAcpAgent implements AcpAgent {
|
|
|
845
828
|
|
|
846
829
|
const content =
|
|
847
830
|
effectiveName && (parsedParameters || effectiveShortResult)
|
|
848
|
-
? this.getToolContent(
|
|
849
|
-
effectiveName,
|
|
850
|
-
parsedParameters,
|
|
851
|
-
effectiveShortResult,
|
|
852
|
-
)
|
|
831
|
+
? this.getToolContent(effectiveName, parsedParameters)
|
|
853
832
|
: undefined;
|
|
854
833
|
const locations =
|
|
855
834
|
effectiveName && parsedParameters
|
|
@@ -121,6 +121,7 @@ export const ChatInterface: React.FC = () => {
|
|
|
121
121
|
messages={displayMessages}
|
|
122
122
|
isExpanded={isExpanded}
|
|
123
123
|
forceStatic={isConfirmationVisible && isConfirmationTooTall}
|
|
124
|
+
isFinished={!isLoading && !isCommandRunning && !isCompressing}
|
|
124
125
|
version={version}
|
|
125
126
|
workdir={workdir}
|
|
126
127
|
model={model}
|
|
@@ -375,7 +375,7 @@ export const ConfirmationSelector: React.FC<ConfirmationSelectorProps> = ({
|
|
|
375
375
|
onDecision({ behavior: "allow", newPermissionMode: "acceptEdits" });
|
|
376
376
|
} else {
|
|
377
377
|
const rule = suggestedPrefix
|
|
378
|
-
? `Bash(${suggestedPrefix}
|
|
378
|
+
? `Bash(${suggestedPrefix})`
|
|
379
379
|
: `Bash(${toolInput?.command})`;
|
|
380
380
|
onDecision({ behavior: "allow", newPermissionRule: rule });
|
|
381
381
|
}
|
|
@@ -8,6 +8,7 @@ export interface MessageListProps {
|
|
|
8
8
|
messages: Message[];
|
|
9
9
|
isExpanded?: boolean;
|
|
10
10
|
forceStatic?: boolean;
|
|
11
|
+
isFinished?: boolean;
|
|
11
12
|
version?: string;
|
|
12
13
|
workdir?: string;
|
|
13
14
|
model?: string;
|
|
@@ -19,6 +20,7 @@ export const MessageList = React.memo(
|
|
|
19
20
|
messages,
|
|
20
21
|
isExpanded = false,
|
|
21
22
|
forceStatic = false,
|
|
23
|
+
isFinished = false,
|
|
22
24
|
version,
|
|
23
25
|
workdir,
|
|
24
26
|
model,
|
|
@@ -56,7 +58,7 @@ export const MessageList = React.memo(
|
|
|
56
58
|
// Determine which blocks are static vs dynamic
|
|
57
59
|
const blocksWithStatus = allBlocks.map((item) => {
|
|
58
60
|
const { isLastMessage } = item;
|
|
59
|
-
const isDynamic = !forceStatic && isLastMessage;
|
|
61
|
+
const isDynamic = !forceStatic && !isFinished && isLastMessage;
|
|
60
62
|
return { ...item, isDynamic };
|
|
61
63
|
});
|
|
62
64
|
|
package/src/contexts/useChat.tsx
CHANGED
|
@@ -462,7 +462,12 @@ export const ChatProvider: React.FC<ChatProviderProps> = ({
|
|
|
462
462
|
) {
|
|
463
463
|
const command = expandedContent.substring(1).trim();
|
|
464
464
|
if (command) {
|
|
465
|
-
|
|
465
|
+
setIsCommandRunning(true);
|
|
466
|
+
try {
|
|
467
|
+
await agentRef.current?.executeBashCommand(command);
|
|
468
|
+
} finally {
|
|
469
|
+
setIsCommandRunning(false);
|
|
470
|
+
}
|
|
466
471
|
return;
|
|
467
472
|
}
|
|
468
473
|
}
|