wave-code 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +38 -2
  3. package/dist/components/BackgroundTaskManager.d.ts +6 -0
  4. package/dist/components/BackgroundTaskManager.d.ts.map +1 -0
  5. package/dist/components/{TaskManager.js → BackgroundTaskManager.js} +1 -1
  6. package/dist/components/ChatInterface.d.ts.map +1 -1
  7. package/dist/components/ChatInterface.js +39 -5
  8. package/dist/components/CommandSelector.d.ts.map +1 -1
  9. package/dist/components/CommandSelector.js +10 -2
  10. package/dist/components/CompressDisplay.d.ts.map +1 -1
  11. package/dist/components/CompressDisplay.js +6 -10
  12. package/dist/components/ConfirmationDetails.d.ts +9 -0
  13. package/dist/components/ConfirmationDetails.d.ts.map +1 -0
  14. package/dist/components/ConfirmationDetails.js +53 -0
  15. package/dist/components/{Confirmation.d.ts → ConfirmationSelector.d.ts} +3 -3
  16. package/dist/components/ConfirmationSelector.d.ts.map +1 -0
  17. package/dist/components/{Confirmation.js → ConfirmationSelector.js} +34 -96
  18. package/dist/components/DiffDisplay.d.ts.map +1 -1
  19. package/dist/components/DiffDisplay.js +44 -1
  20. package/dist/components/FileSelector.d.ts.map +1 -1
  21. package/dist/components/FileSelector.js +2 -2
  22. package/dist/components/HistorySearch.d.ts.map +1 -1
  23. package/dist/components/HistorySearch.js +12 -4
  24. package/dist/components/InputBox.d.ts +1 -3
  25. package/dist/components/InputBox.d.ts.map +1 -1
  26. package/dist/components/InputBox.js +7 -17
  27. package/dist/components/LoadingIndicator.d.ts +11 -0
  28. package/dist/components/LoadingIndicator.d.ts.map +1 -0
  29. package/dist/components/LoadingIndicator.js +6 -0
  30. package/dist/components/Markdown.d.ts.map +1 -1
  31. package/dist/components/Markdown.js +114 -121
  32. package/dist/components/MessageItem.d.ts.map +1 -1
  33. package/dist/components/MessageItem.js +1 -2
  34. package/dist/components/MessageList.d.ts +2 -3
  35. package/dist/components/MessageList.d.ts.map +1 -1
  36. package/dist/components/MessageList.js +7 -7
  37. package/dist/components/PlanDisplay.d.ts.map +1 -1
  38. package/dist/components/PlanDisplay.js +4 -12
  39. package/dist/components/RewindCommand.d.ts +4 -0
  40. package/dist/components/RewindCommand.d.ts.map +1 -1
  41. package/dist/components/RewindCommand.js +19 -2
  42. package/dist/components/SubagentBlock.d.ts.map +1 -1
  43. package/dist/components/SubagentBlock.js +9 -6
  44. package/dist/components/TaskList.d.ts +3 -0
  45. package/dist/components/TaskList.d.ts.map +1 -0
  46. package/dist/components/TaskList.js +49 -0
  47. package/dist/components/ToolResultDisplay.js +1 -1
  48. package/dist/contexts/useChat.d.ts +11 -3
  49. package/dist/contexts/useChat.d.ts.map +1 -1
  50. package/dist/contexts/useChat.js +36 -31
  51. package/dist/hooks/useInputManager.d.ts +2 -13
  52. package/dist/hooks/useInputManager.d.ts.map +1 -1
  53. package/dist/hooks/useInputManager.js +8 -57
  54. package/dist/hooks/useTasks.d.ts +2 -0
  55. package/dist/hooks/useTasks.d.ts.map +1 -0
  56. package/dist/hooks/useTasks.js +5 -0
  57. package/dist/managers/InputManager.d.ts +4 -28
  58. package/dist/managers/InputManager.d.ts.map +1 -1
  59. package/dist/managers/InputManager.js +22 -128
  60. package/package.json +5 -6
  61. package/src/components/App.tsx +50 -3
  62. package/src/components/{TaskManager.tsx → BackgroundTaskManager.tsx} +4 -2
  63. package/src/components/ChatInterface.tsx +79 -23
  64. package/src/components/CommandSelector.tsx +35 -17
  65. package/src/components/CompressDisplay.tsx +5 -22
  66. package/src/components/ConfirmationDetails.tsx +108 -0
  67. package/src/components/{Confirmation.tsx → ConfirmationSelector.tsx} +69 -184
  68. package/src/components/DiffDisplay.tsx +62 -1
  69. package/src/components/FileSelector.tsx +0 -2
  70. package/src/components/HistorySearch.tsx +45 -21
  71. package/src/components/InputBox.tsx +11 -33
  72. package/src/components/LoadingIndicator.tsx +56 -0
  73. package/src/components/Markdown.tsx +126 -323
  74. package/src/components/MessageItem.tsx +1 -3
  75. package/src/components/MessageList.tsx +10 -67
  76. package/src/components/PlanDisplay.tsx +4 -27
  77. package/src/components/RewindCommand.tsx +38 -1
  78. package/src/components/SubagentBlock.tsx +25 -16
  79. package/src/components/TaskList.tsx +70 -0
  80. package/src/components/ToolResultDisplay.tsx +2 -2
  81. package/src/contexts/useChat.tsx +57 -40
  82. package/src/hooks/useInputManager.ts +9 -73
  83. package/src/hooks/useTasks.ts +6 -0
  84. package/src/managers/InputManager.ts +25 -159
  85. package/dist/components/Confirmation.d.ts.map +0 -1
  86. package/dist/components/MemoryDisplay.d.ts +0 -8
  87. package/dist/components/MemoryDisplay.d.ts.map +0 -1
  88. package/dist/components/MemoryDisplay.js +0 -25
  89. package/dist/components/MemoryTypeSelector.d.ts +0 -8
  90. package/dist/components/MemoryTypeSelector.d.ts.map +0 -1
  91. package/dist/components/MemoryTypeSelector.js +0 -38
  92. package/dist/components/TaskManager.d.ts +0 -6
  93. package/dist/components/TaskManager.d.ts.map +0 -1
  94. package/src/components/MemoryDisplay.tsx +0 -62
  95. package/src/components/MemoryTypeSelector.tsx +0 -98
@@ -22,11 +22,7 @@ export const useInputManager = (callbacks = {}) => {
22
22
  show: false,
23
23
  query: "",
24
24
  });
25
- const [memoryTypeSelectorState, setMemoryTypeSelectorState] = useState({
26
- show: false,
27
- message: "",
28
- });
29
- const [showTaskManager, setShowTaskManager] = useState(false);
25
+ const [showBackgroundTaskManager, setShowBackgroundTaskManager] = useState(false);
30
26
  const [showMcpManager, setShowMcpManager] = useState(false);
31
27
  const [showRewindManager, setShowRewindManager] = useState(false);
32
28
  const [permissionMode, setPermissionModeState] = useState("default");
@@ -48,11 +44,8 @@ export const useInputManager = (callbacks = {}) => {
48
44
  onHistorySearchStateChange: (show, query) => {
49
45
  setHistorySearchState({ show, query });
50
46
  },
51
- onMemoryTypeSelectorStateChange: (show, message) => {
52
- setMemoryTypeSelectorState({ show, message });
53
- },
54
- onTaskManagerStateChange: (show) => {
55
- setShowTaskManager(show);
47
+ onBackgroundTaskManagerStateChange: (show) => {
48
+ setShowBackgroundTaskManager(show);
56
49
  },
57
50
  onMcpManagerStateChange: (show) => {
58
51
  setShowMcpManager(show);
@@ -65,9 +58,6 @@ export const useInputManager = (callbacks = {}) => {
65
58
  callbacks.onPermissionModeChange?.(mode);
66
59
  },
67
60
  onImagesStateChange: setAttachedImages,
68
- onShowTaskManager: () => setShowTaskManager(true),
69
- onShowMcpManager: () => setShowMcpManager(true),
70
- onShowRewindManager: () => setShowRewindManager(true),
71
61
  ...callbacks,
72
62
  });
73
63
  managerRef.current = manager;
@@ -88,11 +78,8 @@ export const useInputManager = (callbacks = {}) => {
88
78
  onHistorySearchStateChange: (show, query) => {
89
79
  setHistorySearchState({ show, query });
90
80
  },
91
- onMemoryTypeSelectorStateChange: (show, message) => {
92
- setMemoryTypeSelectorState({ show, message });
93
- },
94
- onTaskManagerStateChange: (show) => {
95
- setShowTaskManager(show);
81
+ onBackgroundTaskManagerStateChange: (show) => {
82
+ setShowBackgroundTaskManager(show);
96
83
  },
97
84
  onMcpManagerStateChange: (show) => {
98
85
  setShowMcpManager(show);
@@ -105,9 +92,6 @@ export const useInputManager = (callbacks = {}) => {
105
92
  callbacks.onPermissionModeChange?.(mode);
106
93
  },
107
94
  onImagesStateChange: setAttachedImages,
108
- onShowTaskManager: () => setShowTaskManager(true),
109
- onShowMcpManager: () => setShowMcpManager(true),
110
- onShowRewindManager: () => setShowRewindManager(true),
111
95
  ...callbacks,
112
96
  });
113
97
  }
@@ -193,29 +177,6 @@ export const useInputManager = (callbacks = {}) => {
193
177
  const handleCancelHistorySearch = useCallback(() => {
194
178
  managerRef.current?.handleCancelHistorySearch();
195
179
  }, []);
196
- // Memory type selector methods
197
- const activateMemoryTypeSelector = useCallback((message) => {
198
- managerRef.current?.activateMemoryTypeSelector(message);
199
- }, []);
200
- const handleMemoryTypeSelect = useCallback(async (type) => {
201
- await managerRef.current?.handleMemoryTypeSelect(type);
202
- }, []);
203
- const handleCancelMemoryTypeSelect = useCallback(() => {
204
- managerRef.current?.handleCancelMemoryTypeSelect();
205
- }, []);
206
- // Input history methods
207
- const setUserInputHistory = useCallback((history) => {
208
- managerRef.current?.setUserInputHistory(history);
209
- }, []);
210
- const navigateHistory = useCallback((direction, currentInput) => {
211
- return (managerRef.current?.navigateHistory(direction, currentInput) || {
212
- newInput: currentInput,
213
- newCursorPosition: currentInput.length,
214
- });
215
- }, []);
216
- const resetHistoryNavigation = useCallback(() => {
217
- managerRef.current?.resetHistoryNavigation();
218
- }, []);
219
180
  // Special character handling
220
181
  const handleSpecialCharInput = useCallback((char) => {
221
182
  managerRef.current?.handleSpecialCharInput(char);
@@ -241,9 +202,7 @@ export const useInputManager = (callbacks = {}) => {
241
202
  slashPosition: commandSelectorState.position,
242
203
  showHistorySearch: historySearchState.show,
243
204
  historySearchQuery: historySearchState.query,
244
- showMemoryTypeSelector: memoryTypeSelectorState.show,
245
- memoryMessage: memoryTypeSelectorState.message,
246
- showTaskManager,
205
+ showBackgroundTaskManager,
247
206
  showMcpManager,
248
207
  showRewindManager,
249
208
  permissionMode,
@@ -273,19 +232,11 @@ export const useInputManager = (callbacks = {}) => {
273
232
  // History search
274
233
  handleHistorySearchSelect,
275
234
  handleCancelHistorySearch,
276
- // Memory type selector
277
- activateMemoryTypeSelector,
278
- handleMemoryTypeSelect,
279
- handleCancelMemoryTypeSelect,
280
- // Input history
281
- setUserInputHistory,
282
- navigateHistory,
283
- resetHistoryNavigation,
284
235
  // Special handling
285
236
  handleSpecialCharInput,
286
237
  // Bash/MCP Manager
287
- setShowTaskManager: useCallback((show) => {
288
- managerRef.current?.setShowTaskManager(show);
238
+ setShowBackgroundTaskManager: useCallback((show) => {
239
+ managerRef.current?.setShowBackgroundTaskManager(show);
289
240
  }, []),
290
241
  setShowMcpManager: useCallback((show) => {
291
242
  managerRef.current?.setShowMcpManager(show);
@@ -0,0 +1,2 @@
1
+ export declare const useTasks: () => import("wave-agent-sdk").Task[];
2
+ //# sourceMappingURL=useTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTasks.d.ts","sourceRoot":"","sources":["../../src/hooks/useTasks.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,uCAGpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { useChat } from "../contexts/useChat.js";
2
+ export const useTasks = () => {
3
+ const { sessionTasks } = useChat();
4
+ return sessionTasks;
5
+ };
@@ -12,12 +12,8 @@ export interface InputManagerCallbacks {
12
12
  onFileSelectorStateChange?: (show: boolean, files: FileItem[], query: string, position: number) => void;
13
13
  onCommandSelectorStateChange?: (show: boolean, query: string, position: number) => void;
14
14
  onHistorySearchStateChange?: (show: boolean, query: string) => void;
15
- onMemoryTypeSelectorStateChange?: (show: boolean, message: string) => void;
16
- onShowTaskManager?: () => void;
17
- onTaskManagerStateChange?: (show: boolean) => void;
18
- onShowMcpManager?: () => void;
15
+ onBackgroundTaskManagerStateChange?: (show: boolean) => void;
19
16
  onMcpManagerStateChange?: (show: boolean) => void;
20
- onShowRewindManager?: () => void;
21
17
  onRewindManagerStateChange?: (show: boolean) => void;
22
18
  onImagesStateChange?: (images: AttachedImage[]) => void;
23
19
  onSendMessage?: (content: string, images?: Array<{
@@ -25,7 +21,6 @@ export interface InputManagerCallbacks {
25
21
  mimeType: string;
26
22
  }>) => void | Promise<void>;
27
23
  onHasSlashCommand?: (commandId: string) => boolean;
28
- onSaveMemory?: (message: string, type: "project" | "user") => Promise<void>;
29
24
  onAbortMessage?: () => void;
30
25
  onBackgroundCurrentTask?: () => void;
31
26
  onResetHistoryNavigation?: () => void;
@@ -45,11 +40,6 @@ export declare class InputManager {
45
40
  private commandSearchQuery;
46
41
  private showHistorySearch;
47
42
  private historySearchQuery;
48
- private showMemoryTypeSelector;
49
- private memoryMessage;
50
- private userInputHistory;
51
- private historyIndex;
52
- private historyBuffer;
53
43
  private pasteDebounceTimer;
54
44
  private pasteBuffer;
55
45
  private initialPasteCursorPosition;
@@ -58,7 +48,7 @@ export declare class InputManager {
58
48
  private longTextMap;
59
49
  private attachedImages;
60
50
  private imageIdCounter;
61
- private showTaskManager;
51
+ private showBackgroundTaskManager;
62
52
  private showMcpManager;
63
53
  private showRewindManager;
64
54
  private permissionMode;
@@ -100,18 +90,8 @@ export declare class InputManager {
100
90
  };
101
91
  handleCancelCommandSelect(): void;
102
92
  checkForSlashDeletion(cursorPosition: number): boolean;
103
- activateMemoryTypeSelector(message: string): void;
104
- handleMemoryTypeSelect(type: "project" | "user"): Promise<void>;
105
- handleCancelMemoryTypeSelect(): void;
106
- setUserInputHistory(history: string[]): void;
107
- navigateHistory(direction: "up" | "down", currentInput: string): {
108
- newInput: string;
109
- newCursorPosition: number;
110
- };
111
- resetHistoryNavigation(): void;
112
93
  isFileSelectorActive(): boolean;
113
94
  isCommandSelectorActive(): boolean;
114
- isMemoryTypeSelectorActive(): boolean;
115
95
  getFileSelectorState(): {
116
96
  show: boolean;
117
97
  files: FileItem[];
@@ -123,10 +103,6 @@ export declare class InputManager {
123
103
  query: string;
124
104
  position: number;
125
105
  };
126
- getMemoryTypeSelectorState(): {
127
- show: boolean;
128
- message: string;
129
- };
130
106
  private updateSearchQueriesForActiveSelectors;
131
107
  handleSpecialCharInput(char: string): void;
132
108
  generateCompressedText(originalText: string): string;
@@ -138,8 +114,8 @@ export declare class InputManager {
138
114
  clearImages(): void;
139
115
  getAttachedImages(): AttachedImage[];
140
116
  handlePasteImage(): Promise<boolean>;
141
- getShowTaskManager(): boolean;
142
- setShowTaskManager(show: boolean): void;
117
+ getShowBackgroundTaskManager(): boolean;
118
+ setShowBackgroundTaskManager(show: boolean): void;
143
119
  getShowMcpManager(): boolean;
144
120
  setShowMcpManager(show: boolean): void;
145
121
  getShowRewindManager(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAEL,cAAc,EACd,MAAM,EAEP,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,yBAAyB,CAAC,EAAE,CAC1B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,4BAA4B,CAAC,EAAE,CAC7B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,+BAA+B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACxD,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAY;IAEvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,uBAAuB,CAA+B;IAG9D,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IAGxC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,kBAAkB,CAAc;IAGxC,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAc;IAGnC,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,0BAA0B,CAAa;IAC/C,OAAO,CAAC,SAAS,CAAkB;IAGnC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,WAAW,CAAkC;IAGrD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,SAAS,GAAE,qBAA0B;IAMjD,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQzD,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,iBAAiB,IAAI,MAAM;IAI3B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAeP,kBAAkB,CAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI,GAC9D,IAAI;IAiBP,UAAU,IAAI,IAAI;IAOlB,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,IAAI;IAIvB,iBAAiB,IAAI,IAAI;IAIzB,eAAe,IAAI,IAAI;YAKT,WAAW;IAsBzB,OAAO,CAAC,oBAAoB;IAc5B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiB5C,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA4BD,sBAAsB,IAAI,IAAI;IAS9B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IASnD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ/C,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS7C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA+DD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IA0BD,yBAAyB,IAAI,IAAI;IAQjC,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAStD,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3C,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrE,4BAA4B,IAAI,IAAI;IAQpC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5C,eAAe,CACb,SAAS,EAAE,IAAI,GAAG,MAAM,EACxB,YAAY,EAAE,MAAM,GACnB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE;IA+ClD,sBAAsB,IAAI,IAAI;IAM9B,oBAAoB,IAAI,OAAO;IAI/B,uBAAuB,IAAI,OAAO;IAIlC,0BAA0B,IAAI,OAAO;IAIrC,oBAAoB;;;;;;IASpB,uBAAuB;;;;;IAQvB,0BAA0B;;;;IAQ1B,OAAO,CAAC,qCAAqC;IAkB7C,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuB1C,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOpD,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgBhD,gBAAgB,IAAI,IAAI;IAKxB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoErC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa;IAY5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,WAAW,IAAI,IAAI;IAKnB,iBAAiB,IAAI,aAAa,EAAE;IAI9B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB1C,kBAAkB,IAAI,OAAO;IAI7B,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKvC,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKtC,oBAAoB,IAAI,OAAO;IAI/B,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzC,iBAAiB,IAAI,cAAc;IAInC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,mBAAmB,IAAI,IAAI;IAerB,YAAY,CAChB,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,IAAI,CAAC;IAoDhB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAkDrD,qBAAqB,IAAI,IAAI;IAM7B,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7C,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/C,yBAAyB,IAAI,IAAI;IAO3B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IAuGb,WAAW,CACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACrE,SAAS,GAAE,OAAe,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,OAAO,CAAC;IAwEnB,OAAO,IAAI,IAAI;CAUhB"}
1
+ {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/managers/InputManager.ts"],"names":[],"mappings":"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"}
@@ -18,13 +18,6 @@ export class InputManager {
18
18
  // History search state
19
19
  this.showHistorySearch = false;
20
20
  this.historySearchQuery = "";
21
- // Memory type selector state
22
- this.showMemoryTypeSelector = false;
23
- this.memoryMessage = "";
24
- // Input history state
25
- this.userInputHistory = [];
26
- this.historyIndex = -1;
27
- this.historyBuffer = "";
28
21
  // Paste debounce state
29
22
  this.pasteDebounceTimer = null;
30
23
  this.pasteBuffer = "";
@@ -37,7 +30,7 @@ export class InputManager {
37
30
  this.attachedImages = [];
38
31
  this.imageIdCounter = 1;
39
32
  // Additional UI state
40
- this.showTaskManager = false;
33
+ this.showBackgroundTaskManager = false;
41
34
  this.showMcpManager = false;
42
35
  this.showRewindManager = false;
43
36
  // Permission mode state
@@ -220,17 +213,16 @@ export class InputManager {
220
213
  }
221
214
  // If not an agent command or execution failed, check local commands
222
215
  if (!commandExecuted) {
223
- if (command === "tasks" && this.callbacks.onShowTaskManager) {
224
- this.callbacks.onShowTaskManager();
216
+ if (command === "tasks") {
217
+ this.setShowBackgroundTaskManager(true);
225
218
  commandExecuted = true;
226
219
  }
227
- else if (command === "mcp" && this.callbacks.onShowMcpManager) {
228
- this.callbacks.onShowMcpManager();
220
+ else if (command === "mcp") {
221
+ this.setShowMcpManager(true);
229
222
  commandExecuted = true;
230
223
  }
231
- else if (command === "rewind" &&
232
- this.callbacks.onShowRewindManager) {
233
- this.callbacks.onShowRewindManager();
224
+ else if (command === "rewind") {
225
+ this.setShowRewindManager(true);
234
226
  commandExecuted = true;
235
227
  }
236
228
  }
@@ -280,79 +272,6 @@ export class InputManager {
280
272
  }
281
273
  return false;
282
274
  }
283
- // Memory type selector methods
284
- activateMemoryTypeSelector(message) {
285
- this.showMemoryTypeSelector = true;
286
- this.memoryMessage = message;
287
- this.callbacks.onMemoryTypeSelectorStateChange?.(true, message);
288
- }
289
- async handleMemoryTypeSelect(type) {
290
- const currentMessage = this.inputText.trim();
291
- if (currentMessage.startsWith("#")) {
292
- await this.callbacks.onSaveMemory?.(currentMessage, type);
293
- }
294
- // Close the selector
295
- this.showMemoryTypeSelector = false;
296
- this.memoryMessage = "";
297
- this.callbacks.onMemoryTypeSelectorStateChange?.(false, "");
298
- // Clear input box
299
- this.clearInput();
300
- }
301
- handleCancelMemoryTypeSelect() {
302
- this.showMemoryTypeSelector = false;
303
- this.memoryMessage = "";
304
- this.callbacks.onMemoryTypeSelectorStateChange?.(false, "");
305
- }
306
- // Input history methods
307
- setUserInputHistory(history) {
308
- this.userInputHistory = history;
309
- }
310
- navigateHistory(direction, currentInput) {
311
- if (this.historyIndex === -1) {
312
- this.historyBuffer = currentInput;
313
- }
314
- if (direction === "up") {
315
- if (this.historyIndex < this.userInputHistory.length - 1) {
316
- this.historyIndex++;
317
- }
318
- }
319
- else {
320
- // Down direction
321
- if (this.historyIndex > 0) {
322
- this.historyIndex--;
323
- }
324
- else if (this.historyIndex === 0) {
325
- // Go from first history item to draft
326
- this.historyIndex = -1;
327
- }
328
- else if (this.historyIndex === -1) {
329
- // Go from draft to empty (beyond history bottom)
330
- this.historyIndex = -2;
331
- }
332
- }
333
- let newInput;
334
- if (this.historyIndex === -1) {
335
- newInput = this.historyBuffer;
336
- }
337
- else if (this.historyIndex === -2) {
338
- // Beyond history bottom, clear input
339
- newInput = "";
340
- }
341
- else {
342
- const historyItem = this.userInputHistory[this.userInputHistory.length - 1 - this.historyIndex];
343
- newInput = historyItem || "";
344
- }
345
- const newCursorPosition = newInput.length;
346
- this.inputText = newInput;
347
- this.cursorPosition = newCursorPosition;
348
- this.callbacks.onInputTextChange?.(newInput);
349
- this.callbacks.onCursorPositionChange?.(newCursorPosition);
350
- return { newInput, newCursorPosition };
351
- }
352
- resetHistoryNavigation() {
353
- this.historyIndex = -1;
354
- this.historyBuffer = "";
355
- }
356
275
  // Getter methods for state
357
276
  isFileSelectorActive() {
358
277
  return this.showFileSelector;
@@ -360,9 +279,6 @@ export class InputManager {
360
279
  isCommandSelectorActive() {
361
280
  return this.showCommandSelector;
362
281
  }
363
- isMemoryTypeSelectorActive() {
364
- return this.showMemoryTypeSelector;
365
- }
366
282
  getFileSelectorState() {
367
283
  return {
368
284
  show: this.showFileSelector,
@@ -378,12 +294,6 @@ export class InputManager {
378
294
  position: this.slashPosition,
379
295
  };
380
296
  }
381
- getMemoryTypeSelectorState() {
382
- return {
383
- show: this.showMemoryTypeSelector,
384
- message: this.memoryMessage,
385
- };
386
- }
387
297
  // Update search queries for active selectors
388
298
  updateSearchQueriesForActiveSelectors(inputText, cursorPosition) {
389
299
  if (this.showFileSelector && this.atPosition >= 0) {
@@ -411,9 +321,6 @@ export class InputManager {
411
321
  // Only activate command selector if '/' is at the start of input
412
322
  this.activateCommandSelector(this.cursorPosition - 1);
413
323
  }
414
- else if (char === "#" && this.cursorPosition === 1) {
415
- // Memory message detection will be handled in submit
416
- }
417
324
  else {
418
325
  // Update search queries for active selectors
419
326
  this.updateSearchQueriesForActiveSelectors(this.inputText, this.cursorPosition);
@@ -539,12 +446,12 @@ export class InputManager {
539
446
  }
540
447
  }
541
448
  // Task manager state methods
542
- getShowTaskManager() {
543
- return this.showTaskManager;
449
+ getShowBackgroundTaskManager() {
450
+ return this.showBackgroundTaskManager;
544
451
  }
545
- setShowTaskManager(show) {
546
- this.showTaskManager = show;
547
- this.callbacks.onTaskManagerStateChange?.(show);
452
+ setShowBackgroundTaskManager(show) {
453
+ this.showBackgroundTaskManager = show;
454
+ this.callbacks.onBackgroundTaskManagerStateChange?.(show);
548
455
  }
549
456
  getShowMcpManager() {
550
457
  return this.showMcpManager;
@@ -586,13 +493,6 @@ export class InputManager {
586
493
  return;
587
494
  }
588
495
  if (this.inputText.trim()) {
589
- const trimmedInput = this.inputText.trim();
590
- // Check if it's a memory message (starts with # and only one line)
591
- if (trimmedInput.startsWith("#") && !trimmedInput.includes("\n")) {
592
- // Activate memory type selector
593
- this.activateMemoryTypeSelector(trimmedInput);
594
- return;
595
- }
596
496
  // Extract image information
597
497
  const imageRegex = /\[Image #(\d+)\]/g;
598
498
  const matches = [...this.inputText.matchAll(imageRegex)];
@@ -739,15 +639,6 @@ export class InputManager {
739
639
  this.callbacks.onBackgroundCurrentTask?.();
740
640
  return true;
741
641
  }
742
- // Handle up/down keys for history navigation (only when no selector is active)
743
- if (key.upArrow && !this.showFileSelector && !this.showCommandSelector) {
744
- this.navigateHistory("up", this.inputText);
745
- return true;
746
- }
747
- if (key.downArrow && !this.showFileSelector && !this.showCommandSelector) {
748
- this.navigateHistory("down", this.inputText);
749
- return true;
750
- }
751
642
  // Handle typing input
752
643
  if (input &&
753
644
  !key.ctrl &&
@@ -773,7 +664,11 @@ export class InputManager {
773
664
  return true;
774
665
  }
775
666
  // Handle interrupt request - use Esc key to interrupt AI request or command
776
- if (key.escape && (isLoading || isCommandRunning)) {
667
+ if (key.escape &&
668
+ (isLoading || isCommandRunning) &&
669
+ !this.showBackgroundTaskManager &&
670
+ !this.showMcpManager &&
671
+ !this.showRewindManager) {
777
672
  // Unified interrupt for AI message generation and command execution
778
673
  this.callbacks.onAbortMessage?.();
779
674
  return true;
@@ -788,16 +683,15 @@ export class InputManager {
788
683
  if (this.showFileSelector ||
789
684
  this.showCommandSelector ||
790
685
  this.showHistorySearch ||
791
- this.showMemoryTypeSelector ||
792
- this.showTaskManager ||
686
+ this.showBackgroundTaskManager ||
793
687
  this.showMcpManager ||
794
688
  this.showRewindManager) {
795
- if (this.showMemoryTypeSelector ||
796
- this.showTaskManager ||
689
+ if (this.showBackgroundTaskManager ||
797
690
  this.showMcpManager ||
798
691
  this.showRewindManager) {
799
- // Memory type selector, task manager, MCP manager and Rewind don't need to handle input, handled by component itself
800
- return false;
692
+ // Task manager, MCP manager and Rewind don't need to handle input, handled by component itself
693
+ // Return true to indicate we've "handled" it (by ignoring it) so it doesn't leak to normal input
694
+ return true;
801
695
  }
802
696
  if (this.showHistorySearch) {
803
697
  if (key.escape) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-code",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "CLI-based code assistant powered by AI, built with React and Ink",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,15 +30,14 @@
30
30
  ],
31
31
  "dependencies": {
32
32
  "chalk": "^5.6.2",
33
- "cli-highlight": "^2.1.11",
34
33
  "diff": "^8.0.2",
35
34
  "glob": "^13.0.0",
36
- "ink": "^6.5.1",
37
- "marked": "^11.2.0",
35
+ "ink": "^6.7.0",
36
+ "marked": "^17.0.2",
38
37
  "react": "^19.2.4",
39
38
  "react-dom": "19.2.4",
40
39
  "yargs": "^17.7.2",
41
- "wave-agent-sdk": "0.5.0"
40
+ "wave-agent-sdk": "0.6.1"
42
41
  },
43
42
  "devDependencies": {
44
43
  "@types/react": "^19.1.8",
@@ -60,7 +59,7 @@
60
59
  },
61
60
  "license": "MIT",
62
61
  "scripts": {
63
- "wave": "tsx src/index.ts",
62
+ "wave": "tsx --tsconfig tsconfig.dev.json src/index.ts",
64
63
  "build": "rimraf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
65
64
  "type-check": "tsc --noEmit --incremental",
66
65
  "watch": "tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch",
@@ -1,6 +1,7 @@
1
- import React from "react";
1
+ import React, { useState, useEffect, useRef } from "react";
2
+ import { useStdout } from "ink";
2
3
  import { ChatInterface } from "./ChatInterface.js";
3
- import { ChatProvider } from "../contexts/useChat.js";
4
+ import { ChatProvider, useChat } from "../contexts/useChat.js";
4
5
  import { AppProvider } from "../contexts/useAppConfig.js";
5
6
 
6
7
  interface AppProps {
@@ -16,11 +17,57 @@ const AppWithProviders: React.FC<{
16
17
  }> = ({ bypassPermissions, pluginDirs }) => {
17
18
  return (
18
19
  <ChatProvider bypassPermissions={bypassPermissions} pluginDirs={pluginDirs}>
19
- <ChatInterface />
20
+ <ChatInterfaceWithRemount />
20
21
  </ChatProvider>
21
22
  );
22
23
  };
23
24
 
25
+ const ChatInterfaceWithRemount: React.FC = () => {
26
+ const { stdout } = useStdout();
27
+ const { isExpanded, rewindId, wasLastDetailsTooTall, sessionId } = useChat();
28
+
29
+ const [remountKey, setRemountKey] = useState(
30
+ String(isExpanded) + rewindId + wasLastDetailsTooTall,
31
+ );
32
+
33
+ const prevSessionId = useRef(sessionId);
34
+
35
+ useEffect(() => {
36
+ let newKey = String(isExpanded) + rewindId + wasLastDetailsTooTall;
37
+
38
+ const isSessionChanged =
39
+ prevSessionId.current && sessionId && prevSessionId.current !== sessionId;
40
+
41
+ if (isSessionChanged) {
42
+ newKey += sessionId;
43
+ }
44
+
45
+ if (newKey !== remountKey) {
46
+ stdout?.write("\u001b[2J\u001b[0;0H", (err?: Error | null) => {
47
+ if (err) {
48
+ console.error("Failed to clear terminal:", err);
49
+ }
50
+ setTimeout(() => {
51
+ setRemountKey(newKey);
52
+ }, 100);
53
+ });
54
+ }
55
+
56
+ if (sessionId) {
57
+ prevSessionId.current = sessionId;
58
+ }
59
+ }, [
60
+ isExpanded,
61
+ rewindId,
62
+ wasLastDetailsTooTall,
63
+ sessionId,
64
+ remountKey,
65
+ stdout,
66
+ ]);
67
+
68
+ return <ChatInterface key={remountKey} />;
69
+ };
70
+
24
71
  export const App: React.FC<AppProps> = ({
25
72
  restoreSessionId,
26
73
  continueLastSession,
@@ -12,11 +12,13 @@ interface Task {
12
12
  runtime?: number;
13
13
  }
14
14
 
15
- export interface TaskManagerProps {
15
+ export interface BackgroundTaskManagerProps {
16
16
  onCancel: () => void;
17
17
  }
18
18
 
19
- export const TaskManager: React.FC<TaskManagerProps> = ({ onCancel }) => {
19
+ export const BackgroundTaskManager: React.FC<BackgroundTaskManagerProps> = ({
20
+ onCancel,
21
+ }) => {
20
22
  const { backgroundTasks, getBackgroundTaskOutput, stopBackgroundTask } =
21
23
  useChat();
22
24
  const [tasks, setTasks] = useState<Task[]>([]);