wave-code 0.0.5 ā 0.0.6
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/README.md +2 -2
- package/dist/components/ChatInterface.d.ts.map +1 -1
- package/dist/components/ChatInterface.js +4 -24
- package/dist/components/CommandSelector.js +4 -4
- package/dist/components/DiffViewer.d.ts +1 -1
- package/dist/components/DiffViewer.d.ts.map +1 -1
- package/dist/components/DiffViewer.js +15 -15
- package/dist/components/FileSelector.js +2 -2
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +21 -50
- package/dist/components/Markdown.d.ts +6 -0
- package/dist/components/Markdown.d.ts.map +1 -0
- package/dist/components/Markdown.js +22 -0
- package/dist/components/MessageItem.d.ts +9 -0
- package/dist/components/MessageItem.d.ts.map +1 -0
- package/dist/components/MessageItem.js +15 -0
- package/dist/components/MessageList.d.ts +1 -1
- package/dist/components/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList.js +33 -33
- package/dist/components/SubagentBlock.d.ts +0 -1
- package/dist/components/SubagentBlock.d.ts.map +1 -1
- package/dist/components/SubagentBlock.js +29 -30
- package/dist/components/ToolResultDisplay.js +5 -5
- package/dist/contexts/useChat.d.ts +2 -2
- package/dist/contexts/useChat.d.ts.map +1 -1
- package/dist/contexts/useChat.js +18 -9
- package/dist/hooks/useInputManager.d.ts +3 -1
- package/dist/hooks/useInputManager.d.ts.map +1 -1
- package/dist/hooks/useInputManager.js +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/managers/InputManager.d.ts +3 -1
- package/dist/managers/InputManager.d.ts.map +1 -1
- package/dist/managers/InputManager.js +44 -24
- package/dist/print-cli.d.ts +1 -0
- package/dist/print-cli.d.ts.map +1 -1
- package/dist/print-cli.js +88 -23
- package/dist/utils/usageSummary.d.ts +6 -0
- package/dist/utils/usageSummary.d.ts.map +1 -1
- package/dist/utils/usageSummary.js +72 -0
- package/package.json +10 -6
- package/src/components/ChatInterface.tsx +13 -43
- package/src/components/CommandSelector.tsx +5 -5
- package/src/components/DiffViewer.tsx +18 -16
- package/src/components/FileSelector.tsx +2 -2
- package/src/components/InputBox.tsx +22 -74
- package/src/components/Markdown.tsx +29 -0
- package/src/components/MessageItem.tsx +104 -0
- package/src/components/MessageList.tsx +142 -202
- package/src/components/SubagentBlock.tsx +56 -84
- package/src/components/ToolResultDisplay.tsx +5 -5
- package/src/contexts/useChat.tsx +22 -13
- package/src/hooks/useInputManager.ts +21 -3
- package/src/index.ts +12 -2
- package/src/managers/InputManager.ts +55 -25
- package/src/print-cli.ts +103 -21
- package/src/utils/usageSummary.ts +109 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { Message, McpServerStatus, BackgroundShell, SlashCommand
|
|
2
|
+
import type { Message, McpServerStatus, BackgroundShell, SlashCommand } from "wave-agent-sdk";
|
|
3
3
|
export interface ChatContextType {
|
|
4
4
|
messages: Message[];
|
|
5
5
|
isLoading: boolean;
|
|
@@ -27,7 +27,7 @@ export interface ChatContextType {
|
|
|
27
27
|
killBackgroundShell: (shellId: string) => boolean;
|
|
28
28
|
slashCommands: SlashCommand[];
|
|
29
29
|
hasSlashCommand: (commandId: string) => boolean;
|
|
30
|
-
|
|
30
|
+
subagentMessages: Record<string, Message[]>;
|
|
31
31
|
}
|
|
32
32
|
export declare const useChat: () => ChatContextType;
|
|
33
33
|
export interface ChatProviderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAE3B,UAAU,EAAE,OAAO,CAAC;IAEpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,wBAAwB,EAAE,CACxB,OAAO,EAAE,MAAM,KACZ;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAElD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAEhD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CAC7C;AAID,eAAO,MAAM,OAAO,uBAMnB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqQpD,CAAC"}
|
package/dist/contexts/useChat.js
CHANGED
|
@@ -31,13 +31,19 @@ export const ChatProvider = ({ children }) => {
|
|
|
31
31
|
const [backgroundShells, setBackgroundShells] = useState([]);
|
|
32
32
|
// Command state
|
|
33
33
|
const [slashCommands, setSlashCommands] = useState([]);
|
|
34
|
-
//
|
|
35
|
-
const [
|
|
34
|
+
// Subagent messages state
|
|
35
|
+
const [subagentMessages, setSubagentMessages] = useState({});
|
|
36
36
|
const agentRef = useRef(null);
|
|
37
37
|
// Listen for Ctrl+O hotkey to toggle collapse/expand state
|
|
38
38
|
useInput((input, key) => {
|
|
39
39
|
if (key.ctrl && input === "o") {
|
|
40
|
-
|
|
40
|
+
// Clear terminal screen when expanded state changes
|
|
41
|
+
process.stdout.write("\x1Bc", () => {
|
|
42
|
+
setIsExpanded((prev) => {
|
|
43
|
+
const newExpanded = !prev;
|
|
44
|
+
return newExpanded;
|
|
45
|
+
});
|
|
46
|
+
});
|
|
41
47
|
}
|
|
42
48
|
});
|
|
43
49
|
// Initialize AI manager
|
|
@@ -51,7 +57,9 @@ export const ChatProvider = ({ children }) => {
|
|
|
51
57
|
setMcpServers([...servers]);
|
|
52
58
|
},
|
|
53
59
|
onSessionIdChange: (sessionId) => {
|
|
54
|
-
|
|
60
|
+
process.stdout.write("\x1Bc", () => {
|
|
61
|
+
setSessionId(sessionId);
|
|
62
|
+
});
|
|
55
63
|
},
|
|
56
64
|
onLatestTotalTokensChange: (tokens) => {
|
|
57
65
|
setlatestTotalTokens(tokens);
|
|
@@ -65,8 +73,11 @@ export const ChatProvider = ({ children }) => {
|
|
|
65
73
|
onShellsChange: (shells) => {
|
|
66
74
|
setBackgroundShells([...shells]);
|
|
67
75
|
},
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
onSubagentMessagesChange: (subagentId, messages) => {
|
|
77
|
+
setSubagentMessages((prev) => ({
|
|
78
|
+
...prev,
|
|
79
|
+
[subagentId]: [...messages],
|
|
80
|
+
}));
|
|
70
81
|
},
|
|
71
82
|
};
|
|
72
83
|
try {
|
|
@@ -91,8 +102,6 @@ export const ChatProvider = ({ children }) => {
|
|
|
91
102
|
// Get initial commands
|
|
92
103
|
const agentSlashCommands = agent.getSlashCommands?.() || [];
|
|
93
104
|
setSlashCommands(agentSlashCommands);
|
|
94
|
-
// Get initial usages
|
|
95
|
-
setUsages(agent.usages);
|
|
96
105
|
}
|
|
97
106
|
catch (error) {
|
|
98
107
|
console.error("Failed to initialize AI manager:", error);
|
|
@@ -220,7 +229,7 @@ export const ChatProvider = ({ children }) => {
|
|
|
220
229
|
killBackgroundShell,
|
|
221
230
|
slashCommands,
|
|
222
231
|
hasSlashCommand,
|
|
223
|
-
|
|
232
|
+
subagentMessages,
|
|
224
233
|
};
|
|
225
234
|
return (_jsx(ChatContext.Provider, { value: contextValue, children: children }));
|
|
226
235
|
};
|
|
@@ -19,6 +19,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
|
|
|
19
19
|
showBashManager: boolean;
|
|
20
20
|
showMcpManager: boolean;
|
|
21
21
|
attachedImages: AttachedImage[];
|
|
22
|
+
isManagerReady: boolean;
|
|
22
23
|
insertTextAtCursor: (text: string, callback?: (newText: string, newCursorPosition: number) => void) => void;
|
|
23
24
|
deleteCharAtCursor: (callback?: (newText: string, newCursorPosition: number) => void) => void;
|
|
24
25
|
clearInput: () => void;
|
|
@@ -56,7 +57,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
|
|
|
56
57
|
handleBashHistoryExecute: (command: string) => string;
|
|
57
58
|
checkForExclamationDeletion: (cursorPos: number) => boolean;
|
|
58
59
|
activateMemoryTypeSelector: (message: string) => void;
|
|
59
|
-
handleMemoryTypeSelect: (type: "project" | "user") => void
|
|
60
|
+
handleMemoryTypeSelect: (type: "project" | "user") => Promise<void>;
|
|
60
61
|
handleCancelMemoryTypeSelect: () => void;
|
|
61
62
|
setUserInputHistory: (history: string[]) => void;
|
|
62
63
|
navigateHistory: (direction: "up" | "down", currentInput: string) => {
|
|
@@ -79,6 +80,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
|
|
|
79
80
|
}>, isLoading?: boolean, isCommandRunning?: boolean) => Promise<void>;
|
|
80
81
|
expandLongTextPlaceholders: (text: string) => string;
|
|
81
82
|
clearLongTextMap: () => void;
|
|
83
|
+
handleBashHistoryExecuteAndSend: (command: string) => void;
|
|
82
84
|
handleInput: (input: string, key: Key, attachedImages: Array<{
|
|
83
85
|
id: number;
|
|
84
86
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM
|
|
1
|
+
{"version":3,"file":"useInputManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM;;;;;;;;;;;;;;;;;;;+BA4GpC,MAAM,aACD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;oCAQrD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;;;;;;qCA2Bd,MAAM;iCAK7C,MAAM;;;;;mCAe+B,MAAM;oCAIL,MAAM;wCAKF,MAAM;mCAKjD,MAAM;;;;mCAYN,MAAM;;;;;sCAemC,MAAM;uCAIL,MAAM;4CAKD,MAAM;uCAKrD,MAAM;;;;;0CAeuC,MAAM;wCAIR,MAAM;6CAID,MAAM;0CAKT,MAAM;mCAKhD,SAAS,GAAG,MAAM;;mCAWiB,MAAM,EAAE;iCAK5C,IAAI,GAAG,MAAM,gBAAgB,MAAM;;;;;mCAgBC,MAAM;+BAsFf,OAAO;8BAGR,OAAO;0BAKX,MAAM,YAAY,MAAM;2BAGvB,MAAM;;;8BAWH,MAAM;mCAKxB,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO;uCAUkB,MAAM;;+CA/GO,MAAM;yBA4HvD,MAAM,OACR,GAAG,kBACQ,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO,gBACX,MAAM,IAAI;yBA1IgB,MAAM;kCAIG,MAAM;;CA6J9D,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { useEffect, useRef, useState, useCallback } from "react";
|
|
|
2
2
|
import { InputManager, } from "../managers/InputManager.js";
|
|
3
3
|
export const useInputManager = (callbacks = {}) => {
|
|
4
4
|
const managerRef = useRef(null);
|
|
5
|
+
const [isManagerReady, setIsManagerReady] = useState(false);
|
|
5
6
|
// React state that mirrors InputManager state
|
|
6
7
|
const [inputText, setInputText] = useState("");
|
|
7
8
|
const [cursorPosition, setCursorPosition] = useState(0);
|
|
@@ -54,9 +55,12 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
54
55
|
setShowMcpManager(show);
|
|
55
56
|
},
|
|
56
57
|
onImagesStateChange: setAttachedImages,
|
|
58
|
+
onShowBashManager: () => setShowBashManager(true),
|
|
59
|
+
onShowMcpManager: () => setShowMcpManager(true),
|
|
57
60
|
...callbacks,
|
|
58
61
|
});
|
|
59
62
|
managerRef.current = manager;
|
|
63
|
+
setIsManagerReady(true);
|
|
60
64
|
}
|
|
61
65
|
else {
|
|
62
66
|
// Update callbacks on existing manager
|
|
@@ -82,6 +86,8 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
82
86
|
setShowMcpManager(show);
|
|
83
87
|
},
|
|
84
88
|
onImagesStateChange: setAttachedImages,
|
|
89
|
+
onShowBashManager: () => setShowBashManager(true),
|
|
90
|
+
onShowMcpManager: () => setShowMcpManager(true),
|
|
85
91
|
...callbacks,
|
|
86
92
|
});
|
|
87
93
|
}
|
|
@@ -186,8 +192,8 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
186
192
|
const activateMemoryTypeSelector = useCallback((message) => {
|
|
187
193
|
managerRef.current?.activateMemoryTypeSelector(message);
|
|
188
194
|
}, []);
|
|
189
|
-
const handleMemoryTypeSelect = useCallback((type) => {
|
|
190
|
-
managerRef.current?.handleMemoryTypeSelect(type);
|
|
195
|
+
const handleMemoryTypeSelect = useCallback(async (type) => {
|
|
196
|
+
await managerRef.current?.handleMemoryTypeSelect(type);
|
|
191
197
|
}, []);
|
|
192
198
|
const handleCancelMemoryTypeSelect = useCallback(() => {
|
|
193
199
|
managerRef.current?.handleCancelMemoryTypeSelect();
|
|
@@ -216,6 +222,10 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
216
222
|
const setCursorPositionDirect = useCallback((position) => {
|
|
217
223
|
managerRef.current?.setCursorPosition(position);
|
|
218
224
|
}, []);
|
|
225
|
+
// Complex handlers that combine multiple operations
|
|
226
|
+
const handleBashHistoryExecuteAndSend = useCallback((command) => {
|
|
227
|
+
managerRef.current?.handleBashHistoryExecuteAndSend(command);
|
|
228
|
+
}, []);
|
|
219
229
|
return {
|
|
220
230
|
// State
|
|
221
231
|
inputText,
|
|
@@ -235,6 +245,7 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
235
245
|
showBashManager,
|
|
236
246
|
showMcpManager,
|
|
237
247
|
attachedImages,
|
|
248
|
+
isManagerReady,
|
|
238
249
|
// Methods
|
|
239
250
|
insertTextAtCursor,
|
|
240
251
|
deleteCharAtCursor,
|
|
@@ -306,6 +317,8 @@ export const useInputManager = (callbacks = {}) => {
|
|
|
306
317
|
clearLongTextMap: useCallback(() => {
|
|
307
318
|
managerRef.current?.clearLongTextMap();
|
|
308
319
|
}, []),
|
|
320
|
+
// Complex handlers combining multiple operations
|
|
321
|
+
handleBashHistoryExecuteAndSend,
|
|
309
322
|
// Main input handler
|
|
310
323
|
handleInput: useCallback(async (input, key, attachedImages, isLoading = false, isCommandRunning = false, clearImages) => {
|
|
311
324
|
return ((await managerRef.current?.handleInput(input, key, attachedImages, isLoading, isCommandRunning, clearImages)) || false);
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,kBAyFzB;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,7 @@
|
|
|
1
1
|
import yargs from "yargs";
|
|
2
2
|
import { hideBin } from "yargs/helpers";
|
|
3
3
|
import { startCli } from "./cli.js";
|
|
4
|
-
import { listSessions } from "wave-agent-sdk";
|
|
4
|
+
import { listSessions, getSessionFilePath } from "wave-agent-sdk";
|
|
5
5
|
// Export main function for external use
|
|
6
6
|
export async function main() {
|
|
7
7
|
const argv = await yargs(hideBin(process.argv))
|
|
@@ -19,6 +19,10 @@ export async function main() {
|
|
|
19
19
|
alias: "p",
|
|
20
20
|
description: "Print response without interactive mode",
|
|
21
21
|
type: "string",
|
|
22
|
+
})
|
|
23
|
+
.option("show-stats", {
|
|
24
|
+
description: "Show timing and usage statistics in print mode",
|
|
25
|
+
type: "boolean",
|
|
22
26
|
})
|
|
23
27
|
.option("list-sessions", {
|
|
24
28
|
description: "List all available sessions",
|
|
@@ -30,7 +34,7 @@ export async function main() {
|
|
|
30
34
|
.example("$0 --restore session_123", "Restore specific session")
|
|
31
35
|
.example("$0 --continue", "Continue from last session")
|
|
32
36
|
.example("$0 --print 'Hello'", "Send message in print mode")
|
|
33
|
-
.example("$0 -p 'Hello'", "Send message in print mode
|
|
37
|
+
.example("$0 -p 'Hello' --show-stats", "Send message in print mode with statistics")
|
|
34
38
|
.example("$0 --list-sessions", "List all available sessions")
|
|
35
39
|
.help("h")
|
|
36
40
|
.parseAsync();
|
|
@@ -48,8 +52,10 @@ export async function main() {
|
|
|
48
52
|
for (const session of sessions) {
|
|
49
53
|
const startedAt = new Date(session.startedAt).toLocaleString();
|
|
50
54
|
const lastActiveAt = new Date(session.lastActiveAt).toLocaleString();
|
|
55
|
+
const filePath = await getSessionFilePath(session.id, session.workdir);
|
|
51
56
|
console.log(`ID: ${session.id}`);
|
|
52
57
|
console.log(` Workdir: ${session.workdir}`);
|
|
58
|
+
console.log(` File Path: ${filePath}`);
|
|
53
59
|
console.log(` Started: ${startedAt}`);
|
|
54
60
|
console.log(` Last Active: ${lastActiveAt}`);
|
|
55
61
|
console.log(` Last Message Tokens: ${session.latestTotalTokens}`);
|
|
@@ -69,6 +75,7 @@ export async function main() {
|
|
|
69
75
|
restoreSessionId: argv.restore,
|
|
70
76
|
continueLastSession: argv.continue,
|
|
71
77
|
message: argv.print,
|
|
78
|
+
showStats: argv.showStats,
|
|
72
79
|
});
|
|
73
80
|
}
|
|
74
81
|
await startCli({
|
|
@@ -100,9 +100,10 @@ export declare class InputManager {
|
|
|
100
100
|
};
|
|
101
101
|
handleCancelBashHistorySelect(): void;
|
|
102
102
|
handleBashHistoryExecute(command: string): string;
|
|
103
|
+
handleBashHistoryExecuteAndSend(command: string): void;
|
|
103
104
|
checkForExclamationDeletion(cursorPosition: number): boolean;
|
|
104
105
|
activateMemoryTypeSelector(message: string): void;
|
|
105
|
-
handleMemoryTypeSelect(type: "project" | "user"): void
|
|
106
|
+
handleMemoryTypeSelect(type: "project" | "user"): Promise<void>;
|
|
106
107
|
handleCancelMemoryTypeSelect(): void;
|
|
107
108
|
setUserInputHistory(history: string[]): void;
|
|
108
109
|
navigateHistory(direction: "up" | "down", currentInput: string): {
|
|
@@ -134,6 +135,7 @@ export declare class InputManager {
|
|
|
134
135
|
show: boolean;
|
|
135
136
|
message: string;
|
|
136
137
|
};
|
|
138
|
+
private updateSearchQueriesForActiveSelectors;
|
|
137
139
|
handleSpecialCharInput(char: string): void;
|
|
138
140
|
generateCompressedText(originalText: string): string;
|
|
139
141
|
expandLongTextPlaceholders(text: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -313,6 +313,15 @@ export class InputManager {
|
|
|
313
313
|
this.callbacks.onBashHistorySelectorStateChange?.(false, "", -1);
|
|
314
314
|
return command; // Return command to execute
|
|
315
315
|
}
|
|
316
|
+
handleBashHistoryExecuteAndSend(command) {
|
|
317
|
+
const commandToExecute = this.handleBashHistoryExecute(command);
|
|
318
|
+
// Clear input box and execute command, ensure command starts with !
|
|
319
|
+
const bashCommand = commandToExecute.startsWith("!")
|
|
320
|
+
? commandToExecute
|
|
321
|
+
: `!${commandToExecute}`;
|
|
322
|
+
this.clearInput();
|
|
323
|
+
this.callbacks.onSendMessage?.(bashCommand);
|
|
324
|
+
}
|
|
316
325
|
checkForExclamationDeletion(cursorPosition) {
|
|
317
326
|
if (this.showBashHistorySelector &&
|
|
318
327
|
cursorPosition <= this.exclamationPosition) {
|
|
@@ -327,12 +336,17 @@ export class InputManager {
|
|
|
327
336
|
this.memoryMessage = message;
|
|
328
337
|
this.callbacks.onMemoryTypeSelectorStateChange?.(true, message);
|
|
329
338
|
}
|
|
330
|
-
handleMemoryTypeSelect(type) {
|
|
331
|
-
|
|
332
|
-
|
|
339
|
+
async handleMemoryTypeSelect(type) {
|
|
340
|
+
const currentMessage = this.inputText.trim();
|
|
341
|
+
if (currentMessage.startsWith("#")) {
|
|
342
|
+
await this.callbacks.onSaveMemory?.(currentMessage, type);
|
|
343
|
+
}
|
|
344
|
+
// Close the selector
|
|
333
345
|
this.showMemoryTypeSelector = false;
|
|
334
346
|
this.memoryMessage = "";
|
|
335
347
|
this.callbacks.onMemoryTypeSelectorStateChange?.(false, "");
|
|
348
|
+
// Clear input box
|
|
349
|
+
this.clearInput();
|
|
336
350
|
}
|
|
337
351
|
handleCancelMemoryTypeSelect() {
|
|
338
352
|
this.showMemoryTypeSelector = false;
|
|
@@ -430,6 +444,27 @@ export class InputManager {
|
|
|
430
444
|
message: this.memoryMessage,
|
|
431
445
|
};
|
|
432
446
|
}
|
|
447
|
+
// Update search queries for active selectors
|
|
448
|
+
updateSearchQueriesForActiveSelectors(inputText, cursorPosition) {
|
|
449
|
+
if (this.showFileSelector && this.atPosition >= 0) {
|
|
450
|
+
const queryStart = this.atPosition + 1;
|
|
451
|
+
const queryEnd = cursorPosition;
|
|
452
|
+
const newQuery = inputText.substring(queryStart, queryEnd);
|
|
453
|
+
this.updateFileSearchQuery(newQuery);
|
|
454
|
+
}
|
|
455
|
+
else if (this.showCommandSelector && this.slashPosition >= 0) {
|
|
456
|
+
const queryStart = this.slashPosition + 1;
|
|
457
|
+
const queryEnd = cursorPosition;
|
|
458
|
+
const newQuery = inputText.substring(queryStart, queryEnd);
|
|
459
|
+
this.updateCommandSearchQuery(newQuery);
|
|
460
|
+
}
|
|
461
|
+
else if (this.showBashHistorySelector && this.exclamationPosition >= 0) {
|
|
462
|
+
const queryStart = this.exclamationPosition + 1;
|
|
463
|
+
const queryEnd = cursorPosition;
|
|
464
|
+
const newQuery = inputText.substring(queryStart, queryEnd);
|
|
465
|
+
this.updateBashHistorySearchQuery(newQuery);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
433
468
|
// Handle special character input that might trigger selectors
|
|
434
469
|
handleSpecialCharInput(char) {
|
|
435
470
|
if (char === "@") {
|
|
@@ -447,25 +482,7 @@ export class InputManager {
|
|
|
447
482
|
}
|
|
448
483
|
else {
|
|
449
484
|
// Update search queries for active selectors
|
|
450
|
-
|
|
451
|
-
const queryStart = this.atPosition + 1;
|
|
452
|
-
const queryEnd = this.cursorPosition;
|
|
453
|
-
const newQuery = this.inputText.substring(queryStart, queryEnd);
|
|
454
|
-
this.updateFileSearchQuery(newQuery);
|
|
455
|
-
}
|
|
456
|
-
else if (this.showCommandSelector && this.slashPosition >= 0) {
|
|
457
|
-
const queryStart = this.slashPosition + 1;
|
|
458
|
-
const queryEnd = this.cursorPosition;
|
|
459
|
-
const newQuery = this.inputText.substring(queryStart, queryEnd);
|
|
460
|
-
this.updateCommandSearchQuery(newQuery);
|
|
461
|
-
}
|
|
462
|
-
else if (this.showBashHistorySelector &&
|
|
463
|
-
this.exclamationPosition >= 0) {
|
|
464
|
-
const queryStart = this.exclamationPosition + 1;
|
|
465
|
-
const queryEnd = this.cursorPosition;
|
|
466
|
-
const newQuery = this.inputText.substring(queryStart, queryEnd);
|
|
467
|
-
this.updateBashHistorySearchQuery(newQuery);
|
|
468
|
-
}
|
|
485
|
+
this.updateSearchQueriesForActiveSelectors(this.inputText, this.cursorPosition);
|
|
469
486
|
}
|
|
470
487
|
}
|
|
471
488
|
// Long text compression methods
|
|
@@ -645,12 +662,14 @@ export class InputManager {
|
|
|
645
662
|
this.checkForAtDeletion(newCursorPosition);
|
|
646
663
|
this.checkForSlashDeletion(newCursorPosition);
|
|
647
664
|
this.checkForExclamationDeletion(newCursorPosition);
|
|
665
|
+
// Update search queries using the same logic as character input
|
|
666
|
+
this.updateSearchQueriesForActiveSelectors(newInput, newCursorPosition);
|
|
648
667
|
});
|
|
649
668
|
}
|
|
650
669
|
return true;
|
|
651
670
|
}
|
|
652
|
-
// Arrow keys and
|
|
653
|
-
if (key.upArrow || key.downArrow || key.return) {
|
|
671
|
+
// Arrow keys, Enter and Tab should be handled by selector components
|
|
672
|
+
if (key.upArrow || key.downArrow || key.return || key.tab) {
|
|
654
673
|
// Let selector component handle these keys, but prevent further processing
|
|
655
674
|
// by returning true (indicating we've handled the input)
|
|
656
675
|
return true;
|
|
@@ -660,6 +679,7 @@ export class InputManager {
|
|
|
660
679
|
!("alt" in key && key.alt) &&
|
|
661
680
|
!key.meta &&
|
|
662
681
|
!key.return &&
|
|
682
|
+
!key.tab &&
|
|
663
683
|
!key.escape &&
|
|
664
684
|
!key.leftArrow &&
|
|
665
685
|
!key.rightArrow &&
|
package/dist/print-cli.d.ts
CHANGED
package/dist/print-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-cli.d.ts","sourceRoot":"","sources":["../src/print-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"print-cli.d.ts","sourceRoot":"","sources":["../src/print-cli.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAgBD,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI3E"}
|
package/dist/print-cli.js
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { Agent } from "wave-agent-sdk";
|
|
2
|
-
import { logger } from "./utils/logger.js";
|
|
3
2
|
import { displayUsageSummary } from "./utils/usageSummary.js";
|
|
3
|
+
function displayTimingInfo(startTime, showStats) {
|
|
4
|
+
// Skip timing info in test environment or if stats are disabled
|
|
5
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || !showStats) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const endTime = new Date();
|
|
9
|
+
const duration = endTime.getTime() - startTime.getTime();
|
|
10
|
+
process.stdout.write(`\n\nš
Start time: ${startTime.toISOString()}\n`);
|
|
11
|
+
process.stdout.write(`š
End time: ${endTime.toISOString()}\n`);
|
|
12
|
+
process.stdout.write(`ā±ļø Duration: ${duration}ms\n`);
|
|
13
|
+
}
|
|
4
14
|
export async function startPrintCli(options) {
|
|
5
|
-
const
|
|
15
|
+
const startTime = new Date();
|
|
16
|
+
const { restoreSessionId, continueLastSession, message, showStats = false, } = options;
|
|
6
17
|
if ((!message || message.trim() === "") &&
|
|
7
18
|
!continueLastSession &&
|
|
8
19
|
!restoreSessionId) {
|
|
@@ -12,12 +23,59 @@ export async function startPrintCli(options) {
|
|
|
12
23
|
let agent;
|
|
13
24
|
// Setup callbacks for agent
|
|
14
25
|
const callbacks = {
|
|
15
|
-
onAssistantMessageAdded: (
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
onAssistantMessageAdded: () => {
|
|
27
|
+
// Assistant message started - no content to output yet
|
|
28
|
+
process.stdout.write("\n");
|
|
29
|
+
},
|
|
30
|
+
onAssistantContentUpdated: (chunk) => {
|
|
31
|
+
// FR-001: Stream content updates for real-time display - output only the new chunk
|
|
32
|
+
process.stdout.write(chunk);
|
|
33
|
+
},
|
|
34
|
+
// Tool block callback - display tool name when tool starts
|
|
35
|
+
onToolBlockUpdated: (params) => {
|
|
36
|
+
// Print tool name only during 'running' stage (happens once per tool call)
|
|
37
|
+
if (params.stage === "running" && params.name) {
|
|
38
|
+
process.stdout.write(`\nš§ ${params.name}`);
|
|
39
|
+
if (params.compactParams) {
|
|
40
|
+
process.stdout.write(` ${params.compactParams}`);
|
|
41
|
+
}
|
|
42
|
+
process.stdout.write(`\n`);
|
|
19
43
|
}
|
|
20
44
|
},
|
|
45
|
+
// Subagent block callbacks
|
|
46
|
+
onSubAgentBlockAdded: (subagentId, parameters) => {
|
|
47
|
+
// Display subagent creation with indentation
|
|
48
|
+
process.stdout.write(`\nš¤ Subagent [${parameters.subagent_type}]: ${parameters.description}\n`);
|
|
49
|
+
},
|
|
50
|
+
onSubAgentBlockUpdated: (subagentId, status) => {
|
|
51
|
+
// Display subagent status updates
|
|
52
|
+
const statusIconMap = {
|
|
53
|
+
active: "š",
|
|
54
|
+
completed: "ā
",
|
|
55
|
+
error: "ā",
|
|
56
|
+
aborted: "ā ļø",
|
|
57
|
+
};
|
|
58
|
+
const statusIcon = statusIconMap[status] ?? "š";
|
|
59
|
+
process.stdout.write(` ${statusIcon} Subagent status: ${status}\n`);
|
|
60
|
+
},
|
|
61
|
+
// Subagent message callbacks
|
|
62
|
+
onSubagentAssistantMessageAdded: () => {
|
|
63
|
+
// Subagent assistant message started - add indentation
|
|
64
|
+
process.stdout.write("\n ");
|
|
65
|
+
},
|
|
66
|
+
onSubagentAssistantContentUpdated: (_subagentId, chunk) => {
|
|
67
|
+
// Stream subagent content with indentation - output only the new chunk
|
|
68
|
+
process.stdout.write(chunk);
|
|
69
|
+
},
|
|
70
|
+
onSubagentUserMessageAdded: (_subagentId, params) => {
|
|
71
|
+
// Display subagent user messages with indentation
|
|
72
|
+
process.stdout.write(`\n š¤ User: ${params.content}\n`);
|
|
73
|
+
},
|
|
74
|
+
// Error block callback
|
|
75
|
+
onErrorBlockAdded: (error) => {
|
|
76
|
+
// Display error blocks with distinct formatting
|
|
77
|
+
process.stdout.write(`\nā Error: ${error}\n`);
|
|
78
|
+
},
|
|
21
79
|
};
|
|
22
80
|
try {
|
|
23
81
|
// Initialize agent
|
|
@@ -25,38 +83,45 @@ export async function startPrintCli(options) {
|
|
|
25
83
|
callbacks,
|
|
26
84
|
restoreSessionId,
|
|
27
85
|
continueLastSession,
|
|
28
|
-
logger,
|
|
29
86
|
});
|
|
30
87
|
// Send message if provided and not empty
|
|
31
88
|
if (message && message.trim() !== "") {
|
|
32
89
|
await agent.sendMessage(message);
|
|
33
90
|
}
|
|
34
91
|
// Display usage summary before exit
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
92
|
+
if (showStats) {
|
|
93
|
+
try {
|
|
94
|
+
const usages = agent.usages;
|
|
95
|
+
const sessionFilePath = agent.sessionFilePath;
|
|
96
|
+
displayUsageSummary(usages, sessionFilePath);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Silently ignore usage summary errors
|
|
100
|
+
}
|
|
42
101
|
}
|
|
102
|
+
// Display timing information
|
|
103
|
+
displayTimingInfo(startTime, showStats);
|
|
43
104
|
// Destroy agent and exit after sendMessage completes
|
|
44
|
-
agent.destroy();
|
|
105
|
+
await agent.destroy();
|
|
45
106
|
process.exit(0);
|
|
46
107
|
}
|
|
47
108
|
catch (error) {
|
|
48
109
|
console.error("Failed to send message:", error);
|
|
49
110
|
if (agent) {
|
|
50
111
|
// Display usage summary even on error
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
112
|
+
if (showStats) {
|
|
113
|
+
try {
|
|
114
|
+
const usages = agent.usages;
|
|
115
|
+
const sessionFilePath = agent.sessionFilePath;
|
|
116
|
+
displayUsageSummary(usages, sessionFilePath);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Silently ignore usage summary errors
|
|
120
|
+
}
|
|
58
121
|
}
|
|
59
|
-
|
|
122
|
+
// Display timing information even on error
|
|
123
|
+
displayTimingInfo(startTime, showStats);
|
|
124
|
+
await agent.destroy();
|
|
60
125
|
}
|
|
61
126
|
process.exit(1);
|
|
62
127
|
}
|
|
@@ -11,6 +11,12 @@ export interface TokenSummary {
|
|
|
11
11
|
agent_calls: number;
|
|
12
12
|
compressions: number;
|
|
13
13
|
};
|
|
14
|
+
cache_read_input_tokens?: number;
|
|
15
|
+
cache_creation_input_tokens?: number;
|
|
16
|
+
cache_creation?: {
|
|
17
|
+
ephemeral_5m_input_tokens: number;
|
|
18
|
+
ephemeral_1h_input_tokens: number;
|
|
19
|
+
};
|
|
14
20
|
}
|
|
15
21
|
/**
|
|
16
22
|
* Calculate token usage summary by model from usage array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usageSummary.d.ts","sourceRoot":"","sources":["../../src/utils/usageSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,KAAK,EAAE,GACd,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"usageSummary.d.ts","sourceRoot":"","sources":["../../src/utils/usageSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE;QACf,yBAAyB,EAAE,MAAM,CAAC;QAClC,yBAAyB,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,KAAK,EAAE,GACd,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAyE9B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI,CAwHN"}
|