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.
Files changed (57) hide show
  1. package/README.md +2 -2
  2. package/dist/components/ChatInterface.d.ts.map +1 -1
  3. package/dist/components/ChatInterface.js +4 -24
  4. package/dist/components/CommandSelector.js +4 -4
  5. package/dist/components/DiffViewer.d.ts +1 -1
  6. package/dist/components/DiffViewer.d.ts.map +1 -1
  7. package/dist/components/DiffViewer.js +15 -15
  8. package/dist/components/FileSelector.js +2 -2
  9. package/dist/components/InputBox.d.ts.map +1 -1
  10. package/dist/components/InputBox.js +21 -50
  11. package/dist/components/Markdown.d.ts +6 -0
  12. package/dist/components/Markdown.d.ts.map +1 -0
  13. package/dist/components/Markdown.js +22 -0
  14. package/dist/components/MessageItem.d.ts +9 -0
  15. package/dist/components/MessageItem.d.ts.map +1 -0
  16. package/dist/components/MessageItem.js +15 -0
  17. package/dist/components/MessageList.d.ts +1 -1
  18. package/dist/components/MessageList.d.ts.map +1 -1
  19. package/dist/components/MessageList.js +33 -33
  20. package/dist/components/SubagentBlock.d.ts +0 -1
  21. package/dist/components/SubagentBlock.d.ts.map +1 -1
  22. package/dist/components/SubagentBlock.js +29 -30
  23. package/dist/components/ToolResultDisplay.js +5 -5
  24. package/dist/contexts/useChat.d.ts +2 -2
  25. package/dist/contexts/useChat.d.ts.map +1 -1
  26. package/dist/contexts/useChat.js +18 -9
  27. package/dist/hooks/useInputManager.d.ts +3 -1
  28. package/dist/hooks/useInputManager.d.ts.map +1 -1
  29. package/dist/hooks/useInputManager.js +15 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +9 -2
  32. package/dist/managers/InputManager.d.ts +3 -1
  33. package/dist/managers/InputManager.d.ts.map +1 -1
  34. package/dist/managers/InputManager.js +44 -24
  35. package/dist/print-cli.d.ts +1 -0
  36. package/dist/print-cli.d.ts.map +1 -1
  37. package/dist/print-cli.js +88 -23
  38. package/dist/utils/usageSummary.d.ts +6 -0
  39. package/dist/utils/usageSummary.d.ts.map +1 -1
  40. package/dist/utils/usageSummary.js +72 -0
  41. package/package.json +10 -6
  42. package/src/components/ChatInterface.tsx +13 -43
  43. package/src/components/CommandSelector.tsx +5 -5
  44. package/src/components/DiffViewer.tsx +18 -16
  45. package/src/components/FileSelector.tsx +2 -2
  46. package/src/components/InputBox.tsx +22 -74
  47. package/src/components/Markdown.tsx +29 -0
  48. package/src/components/MessageItem.tsx +104 -0
  49. package/src/components/MessageList.tsx +142 -202
  50. package/src/components/SubagentBlock.tsx +56 -84
  51. package/src/components/ToolResultDisplay.tsx +5 -5
  52. package/src/contexts/useChat.tsx +22 -13
  53. package/src/hooks/useInputManager.ts +21 -3
  54. package/src/index.ts +12 -2
  55. package/src/managers/InputManager.ts +55 -25
  56. package/src/print-cli.ts +103 -21
  57. package/src/utils/usageSummary.ts +109 -0
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import type { Message, McpServerStatus, BackgroundShell, SlashCommand, Usage } from "wave-agent-sdk";
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
- usages: Usage[];
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,EACZ,KAAK,EACN,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,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;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,CA2PpD,CAAC"}
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"}
@@ -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
- // Usage tracking state
35
- const [usages, setUsages] = useState([]);
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
- setIsExpanded((prev) => !prev);
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
- setSessionId(sessionId);
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
- onUsagesChange: (newUsages) => {
69
- setUsages([...newUsages]);
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
- usages,
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;;;;;;;;;;;;;;;;;;+BAsGpC,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;mCAIb,SAAS,GAAG,MAAM;;mCASlB,MAAM,EAAE;iCAK5C,IAAI,GAAG,MAAM,gBAAgB,MAAM;;;;;mCAgBC,MAAM;+BAgFf,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;;yBAU1C,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;yBAjIgB,MAAM;kCAIG,MAAM;;CAoJ9D,CAAC"}
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);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,kBA+EzB;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"}
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 (short)")
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
- // Note: type parameter will be used in future for different handling logic
332
- console.debug(`Memory type selected: ${type}`);
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
- if (this.showFileSelector && this.atPosition >= 0) {
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 Enter should be handled by selector components
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 &&
@@ -2,6 +2,7 @@ export interface PrintCliOptions {
2
2
  restoreSessionId?: string;
3
3
  continueLastSession?: boolean;
4
4
  message?: string;
5
+ showStats?: boolean;
5
6
  }
6
7
  export declare function startPrintCli(options: PrintCliOptions): Promise<void>;
7
8
  //# sourceMappingURL=print-cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"print-cli.d.ts","sourceRoot":"","sources":["../src/print-cli.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE3E"}
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 { restoreSessionId, continueLastSession, message } = options;
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: (content) => {
16
- // Only output the content field, not tool calls
17
- if (content) {
18
- console.log(content);
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
- try {
36
- const usages = agent.usages;
37
- const sessionFilePath = agent.sessionFilePath;
38
- displayUsageSummary(usages, sessionFilePath);
39
- }
40
- catch {
41
- // Silently ignore usage summary errors
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
- try {
52
- const usages = agent.usages;
53
- const sessionFilePath = agent.sessionFilePath;
54
- displayUsageSummary(usages, sessionFilePath);
55
- }
56
- catch {
57
- // Silently ignore usage summary errors
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
- agent.destroy();
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,CA2C9B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI,CAgDN"}
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"}