wave-code 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/components/ChatInterface.js +1 -1
  2. package/dist/components/CommandSelector.d.ts.map +1 -1
  3. package/dist/components/CommandSelector.js +1 -38
  4. package/dist/components/ConfirmationSelector.d.ts.map +1 -1
  5. package/dist/components/ConfirmationSelector.js +11 -3
  6. package/dist/components/HelpView.d.ts +2 -0
  7. package/dist/components/HelpView.d.ts.map +1 -1
  8. package/dist/components/HelpView.js +49 -5
  9. package/dist/components/InputBox.d.ts.map +1 -1
  10. package/dist/components/InputBox.js +1 -1
  11. package/dist/components/MessageList.d.ts +2 -2
  12. package/dist/components/MessageList.d.ts.map +1 -1
  13. package/dist/components/MessageList.js +5 -6
  14. package/dist/constants/commands.d.ts +3 -0
  15. package/dist/constants/commands.d.ts.map +1 -0
  16. package/dist/constants/commands.js +38 -0
  17. package/dist/contexts/useChat.d.ts.map +1 -1
  18. package/dist/contexts/useChat.js +2 -17
  19. package/dist/hooks/useInputManager.d.ts +7 -8
  20. package/dist/hooks/useInputManager.d.ts.map +1 -1
  21. package/dist/hooks/useInputManager.js +224 -232
  22. package/dist/managers/inputHandlers.d.ts +28 -0
  23. package/dist/managers/inputHandlers.d.ts.map +1 -0
  24. package/dist/managers/inputHandlers.js +378 -0
  25. package/dist/managers/inputReducer.d.ts +157 -0
  26. package/dist/managers/inputReducer.d.ts.map +1 -0
  27. package/dist/managers/inputReducer.js +242 -0
  28. package/dist/utils/highlightUtils.d.ts.map +1 -1
  29. package/dist/utils/highlightUtils.js +66 -42
  30. package/package.json +2 -2
  31. package/src/components/ChatInterface.tsx +1 -1
  32. package/src/components/CommandSelector.tsx +1 -40
  33. package/src/components/ConfirmationSelector.tsx +13 -3
  34. package/src/components/HelpView.tsx +129 -16
  35. package/src/components/InputBox.tsx +3 -1
  36. package/src/components/MessageList.tsx +5 -6
  37. package/src/constants/commands.ts +41 -0
  38. package/src/contexts/useChat.tsx +2 -17
  39. package/src/hooks/useInputManager.ts +352 -299
  40. package/src/managers/inputHandlers.ts +560 -0
  41. package/src/managers/inputReducer.ts +367 -0
  42. package/src/utils/highlightUtils.ts +66 -42
  43. package/dist/managers/InputManager.d.ts +0 -156
  44. package/dist/managers/InputManager.d.ts.map +0 -1
  45. package/dist/managers/InputManager.js +0 -749
  46. package/src/managers/InputManager.ts +0 -1024
@@ -55,7 +55,7 @@ export const ChatInterface = () => {
55
55
  ]);
56
56
  if (!sessionId)
57
57
  return null;
58
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(MessageList, { messages: messages, isExpanded: isExpanded, hideDynamicBlocks: isConfirmationVisible, version: version, workdir: workdir, model: model }), (isLoading || isCommandRunning || isCompressing) &&
58
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(MessageList, { messages: messages, isExpanded: isExpanded, forceStatic: isConfirmationVisible && isConfirmationTooTall, version: version, workdir: workdir, model: model }), (isLoading || isCommandRunning || isCompressing) &&
59
59
  !isConfirmationVisible &&
60
60
  !isExpanded && (_jsx(LoadingIndicator, { isLoading: isLoading, isCommandRunning: isCommandRunning, isCompressing: isCompressing, latestTotalTokens: latestTotalTokens })), !isConfirmationVisible && !isExpanded && _jsx(TaskList, {}), isConfirmationVisible && (_jsxs(_Fragment, { children: [_jsx(ConfirmationDetails, { toolName: confirmingTool.name, toolInput: confirmingTool.input, isExpanded: isExpanded, onHeightMeasured: handleDetailsHeightMeasured, isStatic: isConfirmationTooTall }), _jsx(ConfirmationSelector, { toolName: confirmingTool.name, toolInput: confirmingTool.input, suggestedPrefix: confirmingTool.suggestedPrefix, hidePersistentOption: confirmingTool.hidePersistentOption, isExpanded: isExpanded, onDecision: wrappedHandleConfirmationDecision, onCancel: handleConfirmationCancel, onAbort: abortMessage, onHeightMeasured: handleSelectorHeightMeasured })] })), !isConfirmationVisible && !isExpanded && (_jsx(InputBox, { isLoading: isLoading, isCommandRunning: isCommandRunning, sendMessage: sendMessage, abortMessage: abortMessage, mcpServers: mcpServers, connectMcpServer: connectMcpServer, disconnectMcpServer: disconnectMcpServer, slashCommands: slashCommands, hasSlashCommand: hasSlashCommand }))] }));
61
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CommandSelector.d.ts","sourceRoot":"","sources":["../../src/components/CommandSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0CnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA+I1D,CAAC"}
1
+ {"version":3,"file":"CommandSelector.d.ts","sourceRoot":"","sources":["../../src/components/CommandSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA+I1D,CAAC"}
@@ -1,44 +1,7 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { useState } from "react";
3
3
  import { Box, Text, useInput } from "ink";
4
- const AVAILABLE_COMMANDS = [
5
- {
6
- id: "clear",
7
- name: "clear",
8
- description: "Clear the chat session and terminal",
9
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
10
- },
11
- {
12
- id: "tasks",
13
- name: "tasks",
14
- description: "View and manage background tasks (shells and subagents)",
15
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
16
- },
17
- {
18
- id: "mcp",
19
- name: "mcp",
20
- description: "View and manage MCP servers",
21
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
22
- },
23
- {
24
- id: "rewind",
25
- name: "rewind",
26
- description: "Revert conversation and file changes to a previous checkpoint",
27
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
28
- },
29
- {
30
- id: "help",
31
- name: "help",
32
- description: "Show help and key bindings",
33
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
34
- },
35
- {
36
- id: "status",
37
- name: "status",
38
- description: "Show agent status and configuration",
39
- handler: () => { }, // Handler here won't be used, actual processing is in the hook
40
- },
41
- ];
4
+ import { AVAILABLE_COMMANDS } from "../constants/commands.js";
42
5
  export const CommandSelector = ({ searchQuery, onSelect, onInsert, onCancel, commands = [], // Default to empty array
43
6
  }) => {
44
7
  const MAX_VISIBLE_ITEMS = 3;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationSelector.d.ts","sourceRoot":"","sources":["../../src/components/ConfirmationSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAgB/E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AASD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAmmBpE,CAAC"}
1
+ {"version":3,"file":"ConfirmationSelector.d.ts","sourceRoot":"","sources":["../../src/components/ConfirmationSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAgB/E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AASD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA6mBpE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useLayoutEffect, useRef, useState } from "react";
2
+ import { useEffect, useLayoutEffect, useRef, useState } from "react";
3
3
  import { Box, Text, useInput, useStdout, measureElement } from "ink";
4
4
  import { BASH_TOOL_NAME, EXIT_PLAN_MODE_TOOL_NAME, ASK_USER_QUESTION_TOOL_NAME, } from "wave-agent-sdk";
5
5
  const getHeaderColor = (header) => {
@@ -34,6 +34,14 @@ export const ConfirmationSelector = ({ toolName, toolInput, suggestedPrefix, hid
34
34
  otherCursorPosition: 0,
35
35
  savedStates: {},
36
36
  });
37
+ const pendingDecisionRef = useRef(null);
38
+ useEffect(() => {
39
+ if (pendingDecisionRef.current) {
40
+ const decision = pendingDecisionRef.current;
41
+ pendingDecisionRef.current = null;
42
+ onDecision(decision);
43
+ }
44
+ });
37
45
  const questions = toolInput?.questions || [];
38
46
  const currentQuestion = questions[questionState.currentQuestionIndex];
39
47
  const getAutoOptionText = () => {
@@ -147,10 +155,10 @@ export const ConfirmationSelector = ({ toolName, toolInput, suggestedPrefix, hid
147
155
  const allAnswered = questions.every((q) => finalAnswers[q.question]);
148
156
  if (!allAnswered)
149
157
  return prev;
150
- onDecision({
158
+ pendingDecisionRef.current = {
151
159
  behavior: "allow",
152
160
  message: JSON.stringify(finalAnswers),
153
- });
161
+ };
154
162
  return {
155
163
  ...prev,
156
164
  userAnswers: finalAnswers,
@@ -1,6 +1,8 @@
1
1
  import React from "react";
2
+ import type { SlashCommand } from "wave-agent-sdk";
2
3
  export interface HelpViewProps {
3
4
  onCancel: () => void;
5
+ commands?: SlashCommand[];
4
6
  }
5
7
  export declare const HelpView: React.FC<HelpViewProps>;
6
8
  //# sourceMappingURL=HelpView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HelpView.d.ts","sourceRoot":"","sources":["../../src/components/HelpView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAqD5C,CAAC"}
1
+ {"version":3,"file":"HelpView.d.ts","sourceRoot":"","sources":["../../src/components/HelpView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmK5C,CAAC"}
@@ -1,9 +1,40 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
2
3
  import { Box, Text, useInput } from "ink";
3
- export const HelpView = ({ onCancel }) => {
4
+ import { AVAILABLE_COMMANDS } from "../constants/commands.js";
5
+ export const HelpView = ({ onCancel, commands = [], }) => {
6
+ const [activeTab, setActiveTab] = useState("general");
7
+ const [selectedIndex, setSelectedIndex] = useState(0);
8
+ const MAX_VISIBLE_ITEMS = 10;
9
+ const tabs = [
10
+ "general",
11
+ "commands",
12
+ ];
13
+ if (commands.length > 0) {
14
+ tabs.push("custom-commands");
15
+ }
4
16
  useInput((_, key) => {
5
- if (key.escape || key.return) {
17
+ if (key.escape) {
6
18
  onCancel();
19
+ return;
20
+ }
21
+ if (key.tab) {
22
+ setActiveTab((prev) => {
23
+ const currentIndex = tabs.indexOf(prev);
24
+ const nextIndex = (currentIndex + 1) % tabs.length;
25
+ return tabs[nextIndex];
26
+ });
27
+ setSelectedIndex(0);
28
+ return;
29
+ }
30
+ if (activeTab === "commands" || activeTab === "custom-commands") {
31
+ const currentCommands = activeTab === "commands" ? AVAILABLE_COMMANDS : commands;
32
+ if (key.upArrow) {
33
+ setSelectedIndex((prev) => Math.max(0, prev - 1));
34
+ }
35
+ else if (key.downArrow) {
36
+ setSelectedIndex((prev) => Math.min(currentCommands.length - 1, prev + 1));
37
+ }
7
38
  }
8
39
  });
9
40
  const helpItems = [
@@ -15,12 +46,25 @@ export const HelpView = ({ onCancel }) => {
15
46
  { key: "Ctrl+B", description: "Background current task" },
16
47
  { key: "Ctrl+V", description: "Paste image" },
17
48
  { key: "Shift+Tab", description: "Cycle permission mode" },
18
- { key: "/status", description: "Show agent status and configuration" },
19
- { key: "/clear", description: "Clear the chat session and terminal" },
20
49
  {
21
50
  key: "Esc",
22
51
  description: "Interrupt AI or command / Cancel selector / Close help",
23
52
  },
24
53
  ];
25
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderLeft: false, borderRight: false, paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "cyan", bold: true, underline: true, children: "Help & Key Bindings" }) }), helpItems.map((item, index) => (_jsxs(Box, { children: [_jsx(Box, { width: 20, children: _jsx(Text, { color: "yellow", children: item.key }) }), _jsx(Text, { color: "white", children: item.description })] }, index))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Esc or Enter to close" }) })] }));
54
+ // Calculate visible window for commands
55
+ const currentCommands = activeTab === "commands" ? AVAILABLE_COMMANDS : commands;
56
+ const startIndex = Math.max(0, Math.min(selectedIndex - Math.floor(MAX_VISIBLE_ITEMS / 2), Math.max(0, currentCommands.length - MAX_VISIBLE_ITEMS)));
57
+ const visibleCommands = currentCommands.slice(startIndex, startIndex + MAX_VISIBLE_ITEMS);
58
+ const footerText = [
59
+ "Tab switch",
60
+ activeTab !== "general" && "↑↓ navigate",
61
+ "Esc close",
62
+ ]
63
+ .filter(Boolean)
64
+ .join(" • ");
65
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", borderLeft: false, borderRight: false, paddingX: 1, width: "100%", children: [_jsxs(Box, { marginBottom: 1, gap: 2, children: [_jsx(Text, { color: activeTab === "general" ? "cyan" : "gray", bold: true, underline: activeTab === "general", children: "General" }), _jsx(Text, { color: activeTab === "commands" ? "cyan" : "gray", bold: true, underline: activeTab === "commands", children: "Commands" }), commands.length > 0 && (_jsx(Text, { color: activeTab === "custom-commands" ? "cyan" : "gray", bold: true, underline: activeTab === "custom-commands", children: "Custom Commands" }))] }), activeTab === "general" ? (_jsx(Box, { flexDirection: "column", children: helpItems.map((item, index) => (_jsxs(Box, { children: [_jsx(Box, { width: 20, children: _jsx(Text, { color: "yellow", children: item.key }) }), _jsx(Text, { color: "white", children: item.description })] }, index))) })) : (_jsx(Box, { flexDirection: "column", children: visibleCommands.map((command, index) => {
66
+ const actualIndex = startIndex + index;
67
+ const isSelected = actualIndex === selectedIndex;
68
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: isSelected ? "black" : "white", backgroundColor: isSelected ? "cyan" : undefined, children: [isSelected ? "▶ " : " ", "/", command.id] }), isSelected && (_jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: "gray", dimColor: true, children: command.description }) }))] }, command.id));
69
+ }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: footerText }) })] }));
26
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../src/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAczC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEpE,eAAO,MAAM,sBAAsB,mDACe,CAAC;AAEnD,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAgO5C,CAAC"}
1
+ {"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../src/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAczC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEpE,eAAO,MAAM,sBAAsB,mDACe,CAAC;AAEnD,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,KAC/C,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAClD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAkO5C,CAAC"}
@@ -78,7 +78,7 @@ export const InputBox = ({ isLoading = false, isCommandRunning = false, sendMess
78
78
  return (_jsx(RewindCommand, { messages: messages, onSelect: handleRewindSelectWithClose, onCancel: handleRewindCancel, getFullMessageThread: getFullMessageThread }));
79
79
  }
80
80
  if (showHelp) {
81
- return _jsx(HelpView, { onCancel: () => setShowHelp(false) });
81
+ return (_jsx(HelpView, { onCancel: () => setShowHelp(false), commands: slashCommands }));
82
82
  }
83
83
  if (showStatusCommand) {
84
84
  return _jsx(StatusCommand, { onCancel: () => setShowStatusCommand(false) });
@@ -3,10 +3,10 @@ import type { Message } from "wave-agent-sdk";
3
3
  export interface MessageListProps {
4
4
  messages: Message[];
5
5
  isExpanded?: boolean;
6
- hideDynamicBlocks?: boolean;
6
+ forceStatic?: boolean;
7
7
  version?: string;
8
8
  workdir?: string;
9
9
  model?: string;
10
10
  }
11
- export declare const MessageList: React.MemoExoticComponent<({ messages, isExpanded, hideDynamicBlocks, version, workdir, model, }: MessageListProps) => import("react/jsx-runtime").JSX.Element>;
11
+ export declare const MessageList: React.MemoExoticComponent<({ messages, isExpanded, forceStatic, version, workdir, model, }: MessageListProps) => import("react/jsx-runtime").JSX.Element>;
12
12
  //# sourceMappingURL=MessageList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,WAAW,oGAQnB,gBAAgB,6CAoGpB,CAAC"}
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,WAAW,8FAQnB,gBAAgB,6CAmGpB,CAAC"}
@@ -3,7 +3,7 @@ import React from "react";
3
3
  import os from "os";
4
4
  import { Box, Text, Static } from "ink";
5
5
  import { MessageBlockItem } from "./MessageBlockItem.js";
6
- export const MessageList = React.memo(({ messages, isExpanded = false, hideDynamicBlocks = false, version, workdir, model, }) => {
6
+ export const MessageList = React.memo(({ messages, isExpanded = false, forceStatic = false, version, workdir, model, }) => {
7
7
  const welcomeMessage = (_jsxs(Box, { flexDirection: "column", paddingTop: 1, children: [_jsxs(Text, { color: "gray", children: ["WAVE", version ? ` v${version}` : "", model ? ` • ${model}` : ""] }), workdir && (_jsx(Text, { color: "gray", wrap: "truncate-middle", children: workdir.replace(os.homedir(), "~") }))] }));
8
8
  // Limit messages when expanded to prevent long rendering times
9
9
  const maxExpandedMessages = 20;
@@ -21,21 +21,20 @@ export const MessageList = React.memo(({ messages, isExpanded = false, hideDynam
21
21
  message,
22
22
  isLastMessage: messageIndex === messages.length - 1,
23
23
  // Unique key for each block to help Static component
24
- key: `${message.id || messageIndex}-${blockIndex}`,
24
+ key: `${message.id}-${blockIndex}`,
25
25
  }));
26
26
  });
27
27
  // Determine which blocks are static vs dynamic
28
28
  const blocksWithStatus = allBlocks.map((item) => {
29
29
  const { block, isLastMessage } = item;
30
- const isDynamic = isLastMessage &&
30
+ const isDynamic = !forceStatic &&
31
+ isLastMessage &&
31
32
  ((block.type === "tool" && block.stage !== "end") ||
32
33
  (block.type === "bang" && block.isRunning));
33
34
  return { ...item, isDynamic };
34
35
  });
35
36
  const staticBlocks = blocksWithStatus.filter((b) => !b.isDynamic);
36
- const dynamicBlocks = hideDynamicBlocks
37
- ? []
38
- : blocksWithStatus.filter((b) => b.isDynamic);
37
+ const dynamicBlocks = blocksWithStatus.filter((b) => b.isDynamic);
39
38
  const staticItems = [
40
39
  { isWelcome: true, key: "welcome", block: undefined, message: undefined },
41
40
  ...staticBlocks.map((b) => ({ ...b, isWelcome: false })),
@@ -0,0 +1,3 @@
1
+ import type { SlashCommand } from "wave-agent-sdk";
2
+ export declare const AVAILABLE_COMMANDS: SlashCommand[];
3
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/constants/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAsC5C,CAAC"}
@@ -0,0 +1,38 @@
1
+ export const AVAILABLE_COMMANDS = [
2
+ {
3
+ id: "clear",
4
+ name: "clear",
5
+ description: "Clear the chat session and terminal",
6
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
7
+ },
8
+ {
9
+ id: "tasks",
10
+ name: "tasks",
11
+ description: "View and manage background tasks (shells and subagents)",
12
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
13
+ },
14
+ {
15
+ id: "mcp",
16
+ name: "mcp",
17
+ description: "View and manage MCP servers",
18
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
19
+ },
20
+ {
21
+ id: "rewind",
22
+ name: "rewind",
23
+ description: "Revert conversation and file changes to a previous checkpoint",
24
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
25
+ },
26
+ {
27
+ id: "help",
28
+ name: "help",
29
+ description: "Show help and key bindings",
30
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
31
+ },
32
+ {
33
+ id: "status",
34
+ name: "status",
35
+ description: "Show agent status and configuration",
36
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
37
+ },
38
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/contexts/useChat.tsx"],"names":[],"mappings":"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"}
@@ -24,7 +24,6 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, w
24
24
  const [isTaskListVisible, setIsTaskListVisible] = useState(true);
25
25
  // AI State
26
26
  const [messages, setMessages] = useState([]);
27
- const messagesUpdateTimerRef = useRef(null);
28
27
  const [isLoading, setIsLoading] = useState(false);
29
28
  const [latestTotalTokens, setlatestTotalTokens] = useState(0);
30
29
  const [sessionId, setSessionId] = useState("");
@@ -75,15 +74,8 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, w
75
74
  const initializeAgent = async () => {
76
75
  const callbacks = {
77
76
  onMessagesChange: () => {
78
- if (!isExpandedRef.current) {
79
- if (!messagesUpdateTimerRef.current) {
80
- messagesUpdateTimerRef.current = setTimeout(() => {
81
- if (agentRef.current) {
82
- setMessages([...agentRef.current.messages]);
83
- }
84
- messagesUpdateTimerRef.current = null;
85
- }, 100);
86
- }
77
+ if (!isExpandedRef.current && agentRef.current) {
78
+ setMessages([...agentRef.current.messages]);
87
79
  }
88
80
  },
89
81
  onServersChange: (servers) => {
@@ -190,9 +182,6 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, w
190
182
  // Cleanup on unmount
191
183
  useEffect(() => {
192
184
  return () => {
193
- if (messagesUpdateTimerRef.current) {
194
- clearTimeout(messagesUpdateTimerRef.current);
195
- }
196
185
  if (agentRef.current) {
197
186
  try {
198
187
  // Display usage summary before cleanup
@@ -367,10 +356,6 @@ export const ChatProvider = ({ children, bypassPermissions, pluginDirs, tools, w
367
356
  setIsExpanded((prev) => {
368
357
  const newExpanded = !prev;
369
358
  if (newExpanded) {
370
- if (messagesUpdateTimerRef.current) {
371
- clearTimeout(messagesUpdateTimerRef.current);
372
- messagesUpdateTimerRef.current = null;
373
- }
374
359
  // Transitioning to EXPANDED: Freeze the current view
375
360
  // Deep copy the last message to ensure it doesn't update if the agent is still writing to it
376
361
  setMessages((currentMessages) => {
@@ -1,12 +1,11 @@
1
1
  import { Key } from "ink";
2
- import { InputManager, InputManagerCallbacks, AttachedImage } from "../managers/InputManager.js";
3
- import { FileItem } from "../components/FileSelector.js";
2
+ import { InputManagerCallbacks } from "../managers/inputReducer.js";
4
3
  import { PermissionMode } from "wave-agent-sdk";
5
4
  export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks>) => {
6
5
  inputText: string;
7
6
  cursorPosition: number;
8
7
  showFileSelector: boolean;
9
- filteredFiles: FileItem[];
8
+ filteredFiles: import("wave-agent-sdk").FileItem[];
10
9
  fileSearchQuery: string;
11
10
  atPosition: number;
12
11
  showCommandSelector: boolean;
@@ -20,10 +19,10 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
20
19
  showHelp: boolean;
21
20
  showStatusCommand: boolean;
22
21
  permissionMode: PermissionMode;
23
- attachedImages: AttachedImage[];
22
+ attachedImages: import("../managers/inputReducer.js").AttachedImage[];
24
23
  isManagerReady: boolean;
25
- insertTextAtCursor: (text: string, callback?: (newText: string, newCursorPosition: number) => void) => void;
26
- deleteCharAtCursor: (callback?: (newText: string, newCursorPosition: number) => void) => void;
24
+ insertTextAtCursor: (text: string) => void;
25
+ deleteCharAtCursor: () => void;
27
26
  clearInput: () => void;
28
27
  moveCursorLeft: () => void;
29
28
  moveCursorRight: () => void;
@@ -56,7 +55,7 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
56
55
  setShowHelp: (show: boolean) => void;
57
56
  setShowStatusCommand: (show: boolean) => void;
58
57
  setPermissionMode: (mode: PermissionMode) => void;
59
- addImage: (imagePath: string, mimeType: string) => AttachedImage | undefined;
58
+ addImage: (imagePath: string, mimeType: string) => void;
60
59
  removeImage: (imageId: number) => void;
61
60
  clearImages: () => void;
62
61
  handlePasteImage: () => Promise<boolean>;
@@ -75,6 +74,6 @@ export declare const useInputManager: (callbacks?: Partial<InputManagerCallbacks
75
74
  }>, isLoading?: boolean, isCommandRunning?: boolean, clearImages?: () => void) => Promise<boolean>;
76
75
  setInputText: (text: string) => void;
77
76
  setCursorPosition: (position: number) => void;
78
- manager: InputManager | null;
77
+ manager: null;
79
78
  };
80
79
  //# sourceMappingURL=useInputManager.d.ts.map
@@ -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;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM;;;;;;;;;;;;;;;;;;;;+BA+HpC,MAAM,aACD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;oCAQrD,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,IAAI;;;;qCAmBd,MAAM;iCAK7C,MAAM;;;;;mCAe+B,MAAM;oCAIL,MAAM;wCAKF,MAAM;mCAKjD,MAAM;;;;mCAYN,MAAM;;;;;sCAemC,MAAM;uCAIL,MAAM;wCAKL,MAAM;;mCASX,MAAM;yCAkEL,OAAO;8BAGlB,OAAO;iCAGJ,OAAO;wBAIhB,OAAO;iCAIE,OAAO;8BAIV,cAAc;0BAMlB,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;yBAnIgB,MAAM;kCAIG,MAAM;;CAsJ9D,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,EAGL,qBAAqB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAkC,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhF,eAAO,MAAM,eAAe,GAC1B,YAAW,OAAO,CAAC,qBAAqB,CAAM;;;;;;;;;;;;;;;;;;;;+BAsIA,MAAM;;;;;qCAoBA,MAAM;iCAIV,MAAM;;;;;mCAaJ,MAAM;oCAIL,MAAM;wCAIF,MAAM;mCAIX,MAAM;;;;mCASN,MAAM;;;;;sCAgCH,MAAM;uCAIL,MAAM;wCAQL,MAAM;;mCAUX,MAAM;yCAkBA,OAAO;8BAIlB,OAAO;iCAIJ,OAAO;wBAIhB,OAAO;iCAIE,OAAO;8BAIV,cAAc;0BAKlB,MAAM,YAAY,MAAM;2BAIvB,MAAM;;;8BAYH,MAAM;mCAW/B,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,cAC1D,OAAO,qBACA,OAAO;uCAcyB,MAAM;;yBAajD,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;yBA9FY,MAAM;kCAIG,MAAM;;CA2LxD,CAAC"}