wave-code 0.12.4 → 0.12.5
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.js +1 -1
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +9 -10
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +10 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -10
- package/package.json +2 -2
- package/src/acp/agent.ts +1 -1
- package/src/components/ChatInterface.tsx +9 -11
- package/src/contexts/useChat.tsx +21 -24
- package/src/index.ts +0 -13
package/dist/acp/agent.js
CHANGED
|
@@ -249,7 +249,7 @@ export class WaveAcpAgent {
|
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
|
-
const textContent = textBlocks.join("");
|
|
252
|
+
const textContent = textBlocks.join("\n");
|
|
253
253
|
try {
|
|
254
254
|
await agent.sendMessage(textContent, images.length > 0 ? images : undefined);
|
|
255
255
|
logger.info(`Message sent successfully for session ${sessionId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAc3D,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAc3D,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAiIjC,CAAC"}
|
|
@@ -17,7 +17,7 @@ export const ChatInterface = () => {
|
|
|
17
17
|
const { stdout } = useStdout();
|
|
18
18
|
const terminalHeight = stdout?.rows ?? 24;
|
|
19
19
|
const chatInterfaceRef = useRef(null);
|
|
20
|
-
|
|
20
|
+
// Handle forceStatic mode for overflow and request remount when exiting
|
|
21
21
|
useEffect(() => {
|
|
22
22
|
if (isConfirmationVisible && chatInterfaceRef.current) {
|
|
23
23
|
const { height } = measureElement(chatInterfaceRef.current);
|
|
@@ -25,18 +25,17 @@ export const ChatInterface = () => {
|
|
|
25
25
|
setForceStatic(true);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
else {
|
|
28
|
+
else if (forceStatic && !hasPendingConfirmations) {
|
|
29
29
|
setForceStatic(false);
|
|
30
|
-
}
|
|
31
|
-
}, [isConfirmationVisible, terminalHeight]);
|
|
32
|
-
// Handle forceStatic transition - request remount when transitioning from true to false
|
|
33
|
-
// AND there are no more pending confirmations in the queue
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
if (prevForceStatic.current && !forceStatic && !hasPendingConfirmations) {
|
|
36
30
|
requestRemount();
|
|
37
31
|
}
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
}, [
|
|
33
|
+
isConfirmationVisible,
|
|
34
|
+
terminalHeight,
|
|
35
|
+
forceStatic,
|
|
36
|
+
hasPendingConfirmations,
|
|
37
|
+
requestRemount,
|
|
38
|
+
]);
|
|
40
39
|
if (!sessionId)
|
|
41
40
|
return null;
|
|
42
41
|
return (_jsxs(Box, { ref: chatInterfaceRef, flexDirection: "column", children: [_jsx(MessageList, { messages: displayMessages, isExpanded: isExpanded, version: version, workdir: workdir, forceStatic: forceStatic }, remountKey), !isConfirmationVisible && !isExpanded && (_jsxs(_Fragment, { children: [_jsx(BtwDisplay, { btwState: btwState }), (isLoading || isCommandRunning || isCompressing) && (_jsx(LoadingIndicator, { isLoading: isLoading, isCommandRunning: isCommandRunning, isCompressing: isCompressing, latestTotalTokens: latestTotalTokens })), _jsx(TaskList, {}), _jsx(QueuedMessageList, {}), _jsx(InputBox, { isLoading: isLoading, isCommandRunning: isCommandRunning, sendMessage: sendMessage, abortMessage: abortMessage, mcpServers: mcpServers, connectMcpServer: connectMcpServer, disconnectMcpServer: disconnectMcpServer, slashCommands: slashCommands, hasSlashCommand: hasSlashCommand })] })), isConfirmationVisible && (_jsxs(_Fragment, { children: [forceStatic ? (_jsx(Static, { items: [{ key: "confirmation-details" }], children: () => (_jsx(ConfirmationDetails, { toolName: confirmingTool.name, toolInput: confirmingTool.input, planContent: confirmingTool.planContent, isExpanded: isExpanded })) })) : (_jsx(ConfirmationDetails, { toolName: confirmingTool.name, toolInput: confirmingTool.input, planContent: confirmingTool.planContent, isExpanded: isExpanded })), _jsx(ConfirmationSelector, { toolName: confirmingTool.name, toolInput: confirmingTool.input, suggestedPrefix: confirmingTool.suggestedPrefix, hidePersistentOption: confirmingTool.hidePersistentOption, isExpanded: isExpanded, onDecision: handleConfirmationDecision, onCancel: handleConfirmationCancel, onAbort: abortMessage })] }))] }));
|
|
@@ -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
|
@@ -65,29 +65,24 @@ export const ChatProvider = ({ children, bypassPermissions, permissionMode: init
|
|
|
65
65
|
const [currentConfirmation, setCurrentConfirmation] = useState(null);
|
|
66
66
|
// Remount state
|
|
67
67
|
const [remountKey, setRemountKey] = useState(0);
|
|
68
|
-
const prevRemountKey = useRef(remountKey);
|
|
69
68
|
const prevSessionId = useRef(null);
|
|
69
|
+
const requestRemount = useCallback(() => {
|
|
70
|
+
logger.info("requesting remount");
|
|
71
|
+
stdout?.write("\u001b[2J\u001b[3J\u001b[0;0H", () => {
|
|
72
|
+
setRemountKey((prev) => prev + 1);
|
|
73
|
+
});
|
|
74
|
+
}, [stdout]);
|
|
70
75
|
// Track sessionId changes to trigger remount
|
|
71
76
|
useEffect(() => {
|
|
72
77
|
if (prevSessionId.current &&
|
|
73
78
|
sessionId &&
|
|
74
79
|
prevSessionId.current !== sessionId) {
|
|
75
|
-
|
|
80
|
+
requestRemount();
|
|
76
81
|
}
|
|
77
82
|
if (sessionId) {
|
|
78
83
|
prevSessionId.current = sessionId;
|
|
79
84
|
}
|
|
80
|
-
}, [sessionId]);
|
|
81
|
-
// Clear terminal when remountKey changes
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
if (remountKey !== prevRemountKey.current && prevRemountKey.current !== 0) {
|
|
84
|
-
stdout?.write("\u001b[2J\u001b[3J\u001b[0;0H");
|
|
85
|
-
}
|
|
86
|
-
prevRemountKey.current = remountKey;
|
|
87
|
-
}, [remountKey, stdout]);
|
|
88
|
-
const requestRemount = useCallback(() => {
|
|
89
|
-
setRemountKey((prev) => prev + 1);
|
|
90
|
-
}, []);
|
|
85
|
+
}, [sessionId, requestRemount]);
|
|
91
86
|
// Status metadata state
|
|
92
87
|
const [workingDirectory, setWorkingDirectory] = useState("");
|
|
93
88
|
// /btw state
|
|
@@ -394,13 +389,13 @@ export const ChatProvider = ({ children, bypassPermissions, permissionMode: init
|
|
|
394
389
|
if (agentRef.current) {
|
|
395
390
|
try {
|
|
396
391
|
await agentRef.current.truncateHistory(index);
|
|
397
|
-
|
|
392
|
+
requestRemount();
|
|
398
393
|
}
|
|
399
394
|
catch (error) {
|
|
400
395
|
logger.error("Failed to rewind:", error);
|
|
401
396
|
}
|
|
402
397
|
}
|
|
403
|
-
}, []);
|
|
398
|
+
}, [requestRemount]);
|
|
404
399
|
const getFullMessageThread = useCallback(async () => {
|
|
405
400
|
if (agentRef.current) {
|
|
406
401
|
return await agentRef.current.getFullMessageThread();
|
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,kBAoXzB;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,7 +1,6 @@
|
|
|
1
1
|
import yargs from "yargs";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
3
|
import { startCli } from "./cli.js";
|
|
4
|
-
import { logger } from "./utils/logger.js";
|
|
5
4
|
import { generateRandomName } from "wave-agent-sdk";
|
|
6
5
|
import { createWorktree } from "./utils/worktree.js";
|
|
7
6
|
import path from "path";
|
|
@@ -13,15 +12,6 @@ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
|
13
12
|
const version = packageJson.version;
|
|
14
13
|
// Export main function for external use
|
|
15
14
|
export async function main() {
|
|
16
|
-
// Start memory monitoring in debug mode
|
|
17
|
-
if (process.env.LOG_LEVEL === "DEBUG") {
|
|
18
|
-
setInterval(() => {
|
|
19
|
-
const usage = process.memoryUsage();
|
|
20
|
-
logger.debug(`[Memory] RSS: ${Math.round(usage.rss / 1024 / 1024)}MB, ` +
|
|
21
|
-
`Heap: ${Math.round(usage.heapUsed / 1024 / 1024)}/${Math.round(usage.heapTotal / 1024 / 1024)}MB, ` +
|
|
22
|
-
`External: ${Math.round(usage.external / 1024 / 1024)}MB`);
|
|
23
|
-
}, 10000).unref();
|
|
24
|
-
}
|
|
25
15
|
try {
|
|
26
16
|
const originalCwd = process.cwd();
|
|
27
17
|
const argv = await yargs(hideBin(process.argv))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wave-code",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.5",
|
|
4
4
|
"description": "CLI-based code assistant powered by AI, built with React and Ink",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"semver": "^7.7.4",
|
|
43
43
|
"yargs": "^17.7.2",
|
|
44
44
|
"zod": "^3.23.8",
|
|
45
|
-
"wave-agent-sdk": "0.12.
|
|
45
|
+
"wave-agent-sdk": "0.12.5"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/react": "^19.1.8",
|
package/src/acp/agent.ts
CHANGED
|
@@ -46,27 +46,25 @@ export const ChatInterface: React.FC = () => {
|
|
|
46
46
|
const { stdout } = useStdout();
|
|
47
47
|
const terminalHeight = stdout?.rows ?? 24;
|
|
48
48
|
const chatInterfaceRef = useRef<DOMElement>(null);
|
|
49
|
-
const prevForceStatic = useRef(forceStatic);
|
|
50
49
|
|
|
50
|
+
// Handle forceStatic mode for overflow and request remount when exiting
|
|
51
51
|
useEffect(() => {
|
|
52
52
|
if (isConfirmationVisible && chatInterfaceRef.current) {
|
|
53
53
|
const { height } = measureElement(chatInterfaceRef.current);
|
|
54
54
|
if (height > terminalHeight) {
|
|
55
55
|
setForceStatic(true);
|
|
56
56
|
}
|
|
57
|
-
} else {
|
|
57
|
+
} else if (forceStatic && !hasPendingConfirmations) {
|
|
58
58
|
setForceStatic(false);
|
|
59
|
-
}
|
|
60
|
-
}, [isConfirmationVisible, terminalHeight]);
|
|
61
|
-
|
|
62
|
-
// Handle forceStatic transition - request remount when transitioning from true to false
|
|
63
|
-
// AND there are no more pending confirmations in the queue
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
if (prevForceStatic.current && !forceStatic && !hasPendingConfirmations) {
|
|
66
59
|
requestRemount();
|
|
67
60
|
}
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
}, [
|
|
62
|
+
isConfirmationVisible,
|
|
63
|
+
terminalHeight,
|
|
64
|
+
forceStatic,
|
|
65
|
+
hasPendingConfirmations,
|
|
66
|
+
requestRemount,
|
|
67
|
+
]);
|
|
70
68
|
|
|
71
69
|
if (!sessionId) return null;
|
|
72
70
|
|
package/src/contexts/useChat.tsx
CHANGED
|
@@ -256,9 +256,15 @@ export const ChatProvider: React.FC<ChatProviderProps> = ({
|
|
|
256
256
|
|
|
257
257
|
// Remount state
|
|
258
258
|
const [remountKey, setRemountKey] = useState(0);
|
|
259
|
-
const prevRemountKey = useRef(remountKey);
|
|
260
259
|
const prevSessionId = useRef<string | null>(null);
|
|
261
260
|
|
|
261
|
+
const requestRemount = useCallback(() => {
|
|
262
|
+
logger.info("requesting remount");
|
|
263
|
+
stdout?.write("\u001b[2J\u001b[3J\u001b[0;0H", () => {
|
|
264
|
+
setRemountKey((prev) => prev + 1);
|
|
265
|
+
});
|
|
266
|
+
}, [stdout]);
|
|
267
|
+
|
|
262
268
|
// Track sessionId changes to trigger remount
|
|
263
269
|
useEffect(() => {
|
|
264
270
|
if (
|
|
@@ -266,24 +272,12 @@ export const ChatProvider: React.FC<ChatProviderProps> = ({
|
|
|
266
272
|
sessionId &&
|
|
267
273
|
prevSessionId.current !== sessionId
|
|
268
274
|
) {
|
|
269
|
-
|
|
275
|
+
requestRemount();
|
|
270
276
|
}
|
|
271
277
|
if (sessionId) {
|
|
272
278
|
prevSessionId.current = sessionId;
|
|
273
279
|
}
|
|
274
|
-
}, [sessionId]);
|
|
275
|
-
|
|
276
|
-
// Clear terminal when remountKey changes
|
|
277
|
-
useEffect(() => {
|
|
278
|
-
if (remountKey !== prevRemountKey.current && prevRemountKey.current !== 0) {
|
|
279
|
-
stdout?.write("\u001b[2J\u001b[3J\u001b[0;0H");
|
|
280
|
-
}
|
|
281
|
-
prevRemountKey.current = remountKey;
|
|
282
|
-
}, [remountKey, stdout]);
|
|
283
|
-
|
|
284
|
-
const requestRemount = useCallback(() => {
|
|
285
|
-
setRemountKey((prev) => prev + 1);
|
|
286
|
-
}, []);
|
|
280
|
+
}, [sessionId, requestRemount]);
|
|
287
281
|
|
|
288
282
|
// Status metadata state
|
|
289
283
|
const [workingDirectory, setWorkingDirectory] = useState("");
|
|
@@ -655,16 +649,19 @@ export const ChatProvider: React.FC<ChatProviderProps> = ({
|
|
|
655
649
|
agentRef.current?.backgroundCurrentTask();
|
|
656
650
|
}, []);
|
|
657
651
|
|
|
658
|
-
const handleRewindSelect = useCallback(
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
652
|
+
const handleRewindSelect = useCallback(
|
|
653
|
+
async (index: number) => {
|
|
654
|
+
if (agentRef.current) {
|
|
655
|
+
try {
|
|
656
|
+
await agentRef.current.truncateHistory(index);
|
|
657
|
+
requestRemount();
|
|
658
|
+
} catch (error) {
|
|
659
|
+
logger.error("Failed to rewind:", error);
|
|
660
|
+
}
|
|
665
661
|
}
|
|
666
|
-
}
|
|
667
|
-
|
|
662
|
+
},
|
|
663
|
+
[requestRemount],
|
|
664
|
+
);
|
|
668
665
|
|
|
669
666
|
const getFullMessageThread = useCallback(async () => {
|
|
670
667
|
if (agentRef.current) {
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import yargs from "yargs";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
3
|
import { startCli } from "./cli.js";
|
|
4
|
-
import { logger } from "./utils/logger.js";
|
|
5
4
|
import { Scope, generateRandomName, type PermissionMode } from "wave-agent-sdk";
|
|
6
5
|
import { createWorktree, type WorktreeSession } from "./utils/worktree.js";
|
|
7
6
|
import path from "path";
|
|
@@ -15,18 +14,6 @@ const version = packageJson.version;
|
|
|
15
14
|
|
|
16
15
|
// Export main function for external use
|
|
17
16
|
export async function main() {
|
|
18
|
-
// Start memory monitoring in debug mode
|
|
19
|
-
if (process.env.LOG_LEVEL === "DEBUG") {
|
|
20
|
-
setInterval(() => {
|
|
21
|
-
const usage = process.memoryUsage();
|
|
22
|
-
logger.debug(
|
|
23
|
-
`[Memory] RSS: ${Math.round(usage.rss / 1024 / 1024)}MB, ` +
|
|
24
|
-
`Heap: ${Math.round(usage.heapUsed / 1024 / 1024)}/${Math.round(usage.heapTotal / 1024 / 1024)}MB, ` +
|
|
25
|
-
`External: ${Math.round(usage.external / 1024 / 1024)}MB`,
|
|
26
|
-
);
|
|
27
|
-
}, 10000).unref();
|
|
28
|
-
}
|
|
29
|
-
|
|
30
17
|
try {
|
|
31
18
|
const originalCwd = process.cwd();
|
|
32
19
|
const argv = await yargs(hideBin(process.argv))
|