@defai.digital/ax-cli 3.5.2 → 3.5.4

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 (81) hide show
  1. package/README.md +20 -1
  2. package/dist/analyzers/ast/index.d.ts +9 -0
  3. package/dist/analyzers/ast/index.js +10 -0
  4. package/dist/analyzers/ast/index.js.map +1 -0
  5. package/dist/analyzers/ast/node-helpers.d.ts +81 -0
  6. package/dist/analyzers/ast/node-helpers.js +128 -0
  7. package/dist/analyzers/ast/node-helpers.js.map +1 -0
  8. package/dist/analyzers/ast/traverser.d.ts +67 -0
  9. package/dist/analyzers/ast/traverser.js +156 -0
  10. package/dist/analyzers/ast/traverser.js.map +1 -0
  11. package/dist/analyzers/best-practices/index.d.ts +10 -0
  12. package/dist/analyzers/best-practices/index.js +11 -0
  13. package/dist/analyzers/best-practices/index.js.map +1 -0
  14. package/dist/commands/memory.js +1 -1
  15. package/dist/commands/memory.js.map +1 -1
  16. package/dist/commands/setup.js +1 -6
  17. package/dist/commands/setup.js.map +1 -1
  18. package/dist/index.js +0 -0
  19. package/dist/mcp/health.js +2 -4
  20. package/dist/mcp/health.js.map +1 -1
  21. package/dist/ui/components/chat-history.js +1 -1
  22. package/dist/ui/components/chat-history.js.map +1 -1
  23. package/dist/ui/components/chat-interface.js +2 -3
  24. package/dist/ui/components/chat-interface.js.map +1 -1
  25. package/dist/ui/components/confirmation-dialog.js +1 -1
  26. package/dist/ui/components/confirmation-dialog.js.map +1 -1
  27. package/dist/ui/components/toast-notification.js +0 -1
  28. package/dist/ui/components/toast-notification.js.map +1 -1
  29. package/dist/utils/config-loader.js +3 -3
  30. package/dist/utils/config-loader.js.map +1 -1
  31. package/dist/utils/parallel-analyzer.js +29 -12
  32. package/dist/utils/parallel-analyzer.js.map +1 -1
  33. package/dist/utils/settings-manager.js +2 -16
  34. package/dist/utils/settings-manager.js.map +1 -1
  35. package/dist/utils/streaming-analyzer.js +21 -9
  36. package/dist/utils/streaming-analyzer.js.map +1 -1
  37. package/eslint.config.js +3 -0
  38. package/package.json +1 -1
  39. package/.ax-cli/checkpoints/2025-11-20/checkpoint-11e9e0ba-c39d-4fd2-aa77-bc818811c921.json +0 -69
  40. package/.ax-cli/checkpoints/2025-11-20/checkpoint-2b260b98-b418-4c7c-9694-e2b94967e662.json +0 -24
  41. package/.ax-cli/checkpoints/2025-11-20/checkpoint-7e03601e-e8ab-4cd7-9841-a74b66adf78f.json +0 -69
  42. package/.ax-cli/checkpoints/2025-11-20/checkpoint-7f9c6562-771f-4fd0-adcf-9e7e9ac34ae8.json +0 -44
  43. package/.ax-cli/checkpoints/2025-11-20/checkpoint-e1ebe666-4c3a-4367-ba5c-27fe512a9c70.json +0 -24
  44. package/.ax-cli/checkpoints/2025-11-21/checkpoint-15743e7d-430c-4d76-b6fc-955d7a5c250c.json +0 -44
  45. package/.ax-cli/checkpoints/2025-11-21/checkpoint-25cf7679-0b3f-4988-83d7-704548fbba91.json +0 -69
  46. package/.ax-cli/checkpoints/2025-11-21/checkpoint-54aedbac-6db0-464e-8ebb-dbb3979e6dca.json +0 -24
  47. package/.ax-cli/checkpoints/2025-11-21/checkpoint-7658aed8-fe5d-4222-903f-1a7c63717ea7.json +0 -24
  48. package/.ax-cli/checkpoints/2025-11-21/checkpoint-c9c13497-40dc-4294-a327-6a5fc854eaa1.json +0 -69
  49. package/ax.config.json +0 -333
  50. package/config-defaults/messages.yaml +0 -75
  51. package/config-defaults/models.yaml +0 -66
  52. package/config-defaults/prompts.yaml +0 -156
  53. package/config-defaults/settings.yaml +0 -86
  54. package/dist/ui/hooks/use-chat-reducer.d.ts +0 -61
  55. package/dist/ui/hooks/use-chat-reducer.js +0 -118
  56. package/dist/ui/hooks/use-chat-reducer.js.map +0 -1
  57. package/dist/ui/hooks/use-enhanced-input.d.ts +0 -40
  58. package/dist/ui/hooks/use-enhanced-input.js +0 -254
  59. package/dist/ui/hooks/use-enhanced-input.js.map +0 -1
  60. package/dist/ui/hooks/use-input-handler.d.ts +0 -46
  61. package/dist/ui/hooks/use-input-handler.js +0 -1434
  62. package/dist/ui/hooks/use-input-handler.js.map +0 -1
  63. package/dist/utils/paste-collapse.d.ts +0 -46
  64. package/dist/utils/paste-collapse.js +0 -77
  65. package/dist/utils/paste-collapse.js.map +0 -1
  66. package/packages/schemas/dist/index.d.ts +0 -14
  67. package/packages/schemas/dist/index.d.ts.map +0 -1
  68. package/packages/schemas/dist/index.js +0 -19
  69. package/packages/schemas/dist/index.js.map +0 -1
  70. package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
  71. package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
  72. package/packages/schemas/dist/public/core/brand-types.js +0 -243
  73. package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
  74. package/packages/schemas/dist/public/core/enums.d.ts +0 -227
  75. package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
  76. package/packages/schemas/dist/public/core/enums.js +0 -222
  77. package/packages/schemas/dist/public/core/enums.js.map +0 -1
  78. package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
  79. package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
  80. package/packages/schemas/dist/public/core/id-types.js +0 -136
  81. package/packages/schemas/dist/public/core/id-types.js.map +0 -1
@@ -1,86 +0,0 @@
1
- # Application Settings Configuration
2
- # Global configuration values for AX CLI
3
-
4
- agent:
5
- max_tool_rounds: 400
6
- default_timeout: 360000 # 6 minutes in milliseconds
7
- default_max_tokens: 8192
8
- max_recent_tool_calls: 20 # Keep only last 20 unique tool calls
9
-
10
- # Loop Detection (DISABLED BY DEFAULT)
11
- # Detects when the AI repeats the same tool call multiple times
12
- #
13
- # HOW IT WORKS:
14
- # - Tracks tool calls by signature (tool name + key arguments)
15
- # - If same tool called N times (threshold), stops execution
16
- # - Prevents infinite loops but may stop legitimate repetitive operations
17
- #
18
- # WHEN TO ENABLE:
19
- # - If AI gets stuck in loops (same command over and over)
20
- # - For production environments with untrusted prompts
21
- # - When max_tool_rounds (400) is too high for your use case
22
- #
23
- # HOW TO ENABLE:
24
- # 1. Set enable_loop_detection: false
25
- # 2. Set loop_detection_threshold to desired number (recommended: 5-10)
26
- # - Lower (3-5): Aggressive, may stop legitimate operations
27
- # - Medium (6-10): Balanced, good for most cases
28
- # - Higher (10+): Lenient, only stops obvious loops
29
- #
30
- # DISABLE OPTIONS:
31
- # Option 1: enable_loop_detection: false (complete disable)
32
- # Option 2: loop_detection_threshold: 0 (disable via threshold)
33
- #
34
- # DEFAULT: Disabled - Most users don't need this
35
- enable_loop_detection: false # Set to true to enable loop detection
36
- loop_detection_threshold: 8 # Number of repetitions before flagging as loop
37
-
38
- file:
39
- max_file_size: 1048576 # 1MB in bytes
40
- max_buffer_size: 1048576 # 1MB for bash commands
41
- diff_context_lines: 3
42
-
43
- history:
44
- max_history_size: 1000
45
-
46
- mcp:
47
- client_name: ax-cli
48
- client_version: 1.0.0
49
- default_timeout: 30000 # 30 seconds
50
-
51
- # MCP Tool Output Token Limiting (Phase 4)
52
- # Prevents MCP tool outputs from overwhelming conversation context
53
- token_warning_threshold: 10000 # Warn at 10k tokens
54
- token_hard_limit: 25000 # Truncate at 25k tokens
55
- truncation_enabled: true # Enable automatic truncation
56
-
57
- ui:
58
- status_update_interval: 2000 # 2 seconds
59
- processing_timer_interval: 1000 # 1 second
60
-
61
- token:
62
- tokens_per_message: 3
63
- tokens_for_reply_priming: 3
64
- default_model: gpt-4
65
- default_encoding: cl100k_base
66
- cache_max_size: 1000
67
- chars_per_token_estimate: 4 # Rough approximation for token estimation
68
-
69
- cache:
70
- default_max_size: 1000
71
- default_ttl: 300000 # 5 minutes
72
-
73
- performance:
74
- debounce_delay: 300 # milliseconds
75
- throttle_limit: 1000 # milliseconds
76
- slow_operation_threshold: 1000 # milliseconds
77
-
78
- tool_names:
79
- bash: execute_bash
80
- text_editor: str_replace_editor
81
- read_file: read_file
82
- write_file: write_to_file
83
- list_files: list_files
84
- search: search_files
85
- create_todo: create_todo_list
86
- update_todo: update_todo_list
@@ -1,61 +0,0 @@
1
- /**
2
- * Unified chat state reducer for batched state updates
3
- * Reduces re-renders by combining multiple state changes into single update
4
- */
5
- import type { ChatEntry } from '../../agent/llm-agent.js';
6
- export interface ChatState {
7
- history: ChatEntry[];
8
- isProcessing: boolean;
9
- isStreaming: boolean;
10
- tokenCount: number;
11
- processingTime: number;
12
- contextPercentage: number;
13
- showAutoPrune: boolean;
14
- }
15
- export type ChatAction = {
16
- type: 'ADD_ENTRY';
17
- entry: ChatEntry;
18
- } | {
19
- type: 'UPDATE_STREAMING_CONTENT';
20
- content: string;
21
- } | {
22
- type: 'UPDATE_LAST_ENTRY';
23
- updates: Partial<ChatEntry>;
24
- } | {
25
- type: 'BATCH_UPDATE';
26
- updates: Partial<ChatState>;
27
- } | {
28
- type: 'START_PROCESSING';
29
- } | {
30
- type: 'STOP_PROCESSING';
31
- } | {
32
- type: 'START_STREAMING';
33
- } | {
34
- type: 'STOP_STREAMING';
35
- } | {
36
- type: 'UPDATE_TOKEN_COUNT';
37
- count: number;
38
- } | {
39
- type: 'UPDATE_PROCESSING_TIME';
40
- time: number;
41
- } | {
42
- type: 'UPDATE_CONTEXT_PERCENTAGE';
43
- percentage: number;
44
- showAutoPrune?: boolean;
45
- } | {
46
- type: 'CLEAR_HISTORY';
47
- } | {
48
- type: 'REPLACE_HISTORY';
49
- history: ChatEntry[];
50
- } | {
51
- type: 'UPDATE_TOOL_RESULT';
52
- toolCallId: string;
53
- result: any;
54
- };
55
- export interface UseChatReducerOptions {
56
- initialHistory?: ChatEntry[];
57
- }
58
- export declare const useChatReducer: (options?: UseChatReducerOptions) => {
59
- state: ChatState;
60
- dispatch: import("react").Dispatch<ChatAction>;
61
- };
@@ -1,118 +0,0 @@
1
- /**
2
- * Unified chat state reducer for batched state updates
3
- * Reduces re-renders by combining multiple state changes into single update
4
- */
5
- import { useReducer } from 'react';
6
- const chatReducer = (state, action) => {
7
- switch (action.type) {
8
- case 'BATCH_UPDATE':
9
- // Most efficient: update multiple fields in one re-render
10
- return { ...state, ...action.updates };
11
- case 'ADD_ENTRY':
12
- // Add new chat entry
13
- return {
14
- ...state,
15
- history: [...state.history, action.entry],
16
- };
17
- case 'UPDATE_STREAMING_CONTENT':
18
- // Update content of the last streaming entry
19
- return {
20
- ...state,
21
- history: state.history.map((entry, idx) => idx === state.history.length - 1 && entry.isStreaming
22
- ? { ...entry, content: entry.content + action.content }
23
- : entry),
24
- };
25
- case 'UPDATE_LAST_ENTRY':
26
- // Update specific fields of the last entry
27
- return {
28
- ...state,
29
- history: state.history.map((entry, idx) => idx === state.history.length - 1
30
- ? { ...entry, ...action.updates }
31
- : entry),
32
- };
33
- case 'START_PROCESSING':
34
- return {
35
- ...state,
36
- isProcessing: true,
37
- };
38
- case 'STOP_PROCESSING':
39
- return {
40
- ...state,
41
- isProcessing: false,
42
- processingTime: 0,
43
- };
44
- case 'START_STREAMING':
45
- return {
46
- ...state,
47
- isStreaming: true,
48
- };
49
- case 'STOP_STREAMING':
50
- return {
51
- ...state,
52
- isStreaming: false,
53
- };
54
- case 'UPDATE_TOKEN_COUNT':
55
- return {
56
- ...state,
57
- tokenCount: action.count,
58
- };
59
- case 'UPDATE_PROCESSING_TIME':
60
- return {
61
- ...state,
62
- processingTime: action.time,
63
- };
64
- case 'UPDATE_CONTEXT_PERCENTAGE':
65
- return {
66
- ...state,
67
- contextPercentage: action.percentage,
68
- showAutoPrune: action.showAutoPrune ?? state.showAutoPrune,
69
- };
70
- case 'CLEAR_HISTORY':
71
- return {
72
- ...state,
73
- history: [],
74
- tokenCount: 0,
75
- processingTime: 0,
76
- isProcessing: false,
77
- isStreaming: false,
78
- };
79
- case 'REPLACE_HISTORY':
80
- return {
81
- ...state,
82
- history: action.history,
83
- };
84
- case 'UPDATE_TOOL_RESULT':
85
- // Update a specific tool call entry with results
86
- return {
87
- ...state,
88
- history: state.history.map((entry) => {
89
- if (entry.type === 'tool_call' && entry.toolCall?.id === action.toolCallId) {
90
- return {
91
- ...entry,
92
- type: 'tool_result',
93
- content: action.result.success
94
- ? action.result.output || 'Success'
95
- : action.result.error || 'Error occurred',
96
- toolResult: action.result,
97
- };
98
- }
99
- return entry;
100
- }),
101
- };
102
- default:
103
- return state;
104
- }
105
- };
106
- export const useChatReducer = (options = {}) => {
107
- const [state, dispatch] = useReducer(chatReducer, {
108
- history: options.initialHistory || [],
109
- isProcessing: false,
110
- isStreaming: false,
111
- tokenCount: 0,
112
- processingTime: 0,
113
- contextPercentage: 0,
114
- showAutoPrune: false,
115
- });
116
- return { state, dispatch };
117
- };
118
- //# sourceMappingURL=use-chat-reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-chat-reducer.js","sourceRoot":"","sources":["../../../src/ui/hooks/use-chat-reducer.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- export interface Key {
2
- name?: string;
3
- ctrl?: boolean;
4
- meta?: boolean;
5
- shift?: boolean;
6
- sequence?: string;
7
- upArrow?: boolean;
8
- downArrow?: boolean;
9
- leftArrow?: boolean;
10
- rightArrow?: boolean;
11
- return?: boolean;
12
- escape?: boolean;
13
- tab?: boolean;
14
- backspace?: boolean;
15
- delete?: boolean;
16
- }
17
- export interface EnhancedInputHook {
18
- input: string;
19
- cursorPosition: number;
20
- isMultiline: boolean;
21
- setInput: (text: string) => void;
22
- setCursorPosition: (position: number) => void;
23
- clearInput: () => void;
24
- insertAtCursor: (text: string) => void;
25
- resetHistory: () => void;
26
- handleInput: (inputChar: string, key: Key) => void;
27
- }
28
- interface UseEnhancedInputProps {
29
- onSubmit?: (text: string) => void;
30
- onEscape?: () => void;
31
- onSpecialKey?: (key: Key) => boolean;
32
- onVerboseToggle?: () => void;
33
- onQuickActions?: () => void;
34
- onBackgroundModeToggle?: () => void;
35
- onCopyLastResponse?: () => void;
36
- disabled?: boolean;
37
- multiline?: boolean;
38
- }
39
- export declare function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, disabled, multiline, }?: UseEnhancedInputProps): EnhancedInputHook;
40
- export {};
@@ -1,254 +0,0 @@
1
- import { useState, useCallback, useRef } from "react";
2
- import { deleteCharBefore, deleteCharAfter, deleteWordBefore, deleteWordAfter, insertText, moveToLineStart, moveToPreviousWord, moveToNextWord, } from "../../utils/text-utils.js";
3
- import { useInputHistory } from "./use-input-history.js";
4
- export function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, disabled = false, multiline = false, } = {}) {
5
- const [input, setInputState] = useState("");
6
- const [cursorPosition, setCursorPositionState] = useState(0);
7
- const isMultilineRef = useRef(multiline);
8
- // Keep ref in sync with prop to avoid stale closure
9
- isMultilineRef.current = multiline;
10
- const { addToHistory, navigateHistory, resetHistory, setOriginalInput, isNavigatingHistory, } = useInputHistory();
11
- const setInput = useCallback((text) => {
12
- setInputState(text);
13
- // Use functional update to get the current cursor position, avoiding stale closure
14
- setCursorPositionState((currentCursor) => Math.min(text.length, currentCursor));
15
- if (!isNavigatingHistory()) {
16
- setOriginalInput(text);
17
- }
18
- }, [isNavigatingHistory, setOriginalInput]);
19
- const setCursorPosition = useCallback((position) => {
20
- // Set cursor position with bounds checking based on current input length
21
- // Use separate state reads to avoid nested state updates
22
- setInputState((currentInput) => {
23
- const boundedPosition = Math.max(0, Math.min(currentInput.length, position));
24
- // Schedule cursor update after current state update completes
25
- queueMicrotask(() => {
26
- setCursorPositionState(boundedPosition);
27
- });
28
- return currentInput; // No change to input, just accessing for bounds check
29
- });
30
- }, []);
31
- const clearInput = useCallback(() => {
32
- setInputState("");
33
- setCursorPositionState(0);
34
- setOriginalInput("");
35
- }, [setOriginalInput]);
36
- const insertAtCursor = useCallback((text) => {
37
- const result = insertText(input, cursorPosition, text);
38
- setInputState(result.text);
39
- setCursorPositionState(result.position);
40
- setOriginalInput(result.text);
41
- }, [input, cursorPosition, setOriginalInput]);
42
- const handleSubmit = useCallback(() => {
43
- if (input.trim()) {
44
- addToHistory(input);
45
- onSubmit?.(input);
46
- clearInput();
47
- }
48
- }, [input, addToHistory, onSubmit, clearInput]);
49
- const handleInput = useCallback((inputChar, key) => {
50
- if (disabled)
51
- return;
52
- // Handle Ctrl+C - check multiple ways it could be detected
53
- if ((key.ctrl && inputChar === "c") || inputChar === "\x03") {
54
- setInputState("");
55
- setCursorPositionState(0);
56
- setOriginalInput("");
57
- return;
58
- }
59
- // Allow special key handler to override default behavior
60
- if (onSpecialKey?.(key)) {
61
- return;
62
- }
63
- // Handle Escape
64
- if (key.escape) {
65
- onEscape?.();
66
- return;
67
- }
68
- // Handle Enter/Return
69
- if (key.return) {
70
- if (isMultilineRef.current && key.shift) {
71
- // Shift+Enter in multiline mode inserts newline
72
- const result = insertText(input, cursorPosition, "\n");
73
- setInputState(result.text);
74
- setCursorPositionState(result.position);
75
- setOriginalInput(result.text);
76
- }
77
- else {
78
- handleSubmit();
79
- }
80
- return;
81
- }
82
- // Handle history navigation
83
- if ((key.upArrow || key.name === 'up') && !key.ctrl && !key.meta) {
84
- const historyInput = navigateHistory("up");
85
- if (historyInput !== null) {
86
- setInputState(historyInput);
87
- setCursorPositionState(historyInput.length);
88
- }
89
- return;
90
- }
91
- if ((key.downArrow || key.name === 'down') && !key.ctrl && !key.meta) {
92
- const historyInput = navigateHistory("down");
93
- if (historyInput !== null) {
94
- setInputState(historyInput);
95
- setCursorPositionState(historyInput.length);
96
- }
97
- return;
98
- }
99
- // Handle cursor movement - ignore meta flag for arrows as it's unreliable in terminals
100
- // Only do word movement if ctrl is pressed AND no arrow escape sequence is in inputChar
101
- if ((key.leftArrow || key.name === 'left') && key.ctrl && !inputChar.includes('[')) {
102
- const newPos = moveToPreviousWord(input, cursorPosition);
103
- setCursorPositionState(newPos);
104
- return;
105
- }
106
- if ((key.rightArrow || key.name === 'right') && key.ctrl && !inputChar.includes('[')) {
107
- const newPos = moveToNextWord(input, cursorPosition);
108
- setCursorPositionState(newPos);
109
- return;
110
- }
111
- // Handle regular cursor movement - single character (ignore meta flag)
112
- if (key.leftArrow || key.name === 'left') {
113
- const newPos = Math.max(0, cursorPosition - 1);
114
- setCursorPositionState(newPos);
115
- return;
116
- }
117
- if (key.rightArrow || key.name === 'right') {
118
- const newPos = Math.min(input.length, cursorPosition + 1);
119
- setCursorPositionState(newPos);
120
- return;
121
- }
122
- // Handle Home/End keys or Ctrl+A/E
123
- if ((key.ctrl && inputChar === "a") || key.name === "home") {
124
- setCursorPositionState(0); // Simple start of input
125
- return;
126
- }
127
- if ((key.ctrl && inputChar === "e") || key.name === "end") {
128
- setCursorPositionState(input.length); // Simple end of input
129
- return;
130
- }
131
- // Handle deletion - check multiple ways backspace might be detected
132
- // Backspace can be detected in different ways depending on terminal
133
- // In some terminals, backspace shows up as delete:true with empty inputChar
134
- const isBackspace = key.backspace ||
135
- key.name === 'backspace' ||
136
- inputChar === '\b' ||
137
- inputChar === '\x7f' ||
138
- (key.delete && inputChar === '' && !key.shift);
139
- if (isBackspace) {
140
- if (key.ctrl || key.meta) {
141
- // Ctrl/Cmd + Backspace: Delete word before cursor
142
- const result = deleteWordBefore(input, cursorPosition);
143
- setInputState(result.text);
144
- setCursorPositionState(result.position);
145
- setOriginalInput(result.text);
146
- }
147
- else {
148
- // Regular backspace
149
- const result = deleteCharBefore(input, cursorPosition);
150
- setInputState(result.text);
151
- setCursorPositionState(result.position);
152
- setOriginalInput(result.text);
153
- }
154
- return;
155
- }
156
- // Handle forward delete (Del key) - but not if it was already handled as backspace above
157
- // Note: Ctrl+D is also treated as delete character (standard terminal behavior)
158
- if (key.delete && inputChar !== '') {
159
- if (key.ctrl || key.meta) {
160
- // Ctrl/Cmd + Delete: Delete word after cursor
161
- const result = deleteWordAfter(input, cursorPosition);
162
- setInputState(result.text);
163
- setCursorPositionState(result.position);
164
- setOriginalInput(result.text);
165
- }
166
- else {
167
- // Regular delete
168
- const result = deleteCharAfter(input, cursorPosition);
169
- setInputState(result.text);
170
- setCursorPositionState(result.position);
171
- setOriginalInput(result.text);
172
- }
173
- return;
174
- }
175
- // Handle Ctrl+D: Delete character after cursor (standard terminal behavior)
176
- if (key.ctrl && inputChar === "d") {
177
- const result = deleteCharAfter(input, cursorPosition);
178
- setInputState(result.text);
179
- setCursorPositionState(result.position);
180
- setOriginalInput(result.text);
181
- return;
182
- }
183
- // Handle Ctrl+K: Open quick actions menu
184
- // Check both key.ctrl with 'k' and raw ASCII code \x0b (Ctrl+K = ASCII 11)
185
- if ((key.ctrl && inputChar === "k") || inputChar === "\x0b") {
186
- onQuickActions?.();
187
- return;
188
- }
189
- // Handle Ctrl+U: Delete from cursor to start of line
190
- // Check both key.ctrl with 'u' and raw ASCII code \x15 (Ctrl+U = ASCII 21)
191
- if ((key.ctrl && inputChar === "u") || inputChar === "\x15") {
192
- const lineStart = moveToLineStart(input, cursorPosition);
193
- const newText = input.slice(0, lineStart) + input.slice(cursorPosition);
194
- setInputState(newText);
195
- setCursorPositionState(lineStart);
196
- setOriginalInput(newText);
197
- return;
198
- }
199
- // Handle Ctrl+W: Delete word before cursor
200
- // Check both key.ctrl with 'w' and raw ASCII code \x17 (Ctrl+W = ASCII 23)
201
- if ((key.ctrl && inputChar === "w") || inputChar === "\x17") {
202
- const result = deleteWordBefore(input, cursorPosition);
203
- setInputState(result.text);
204
- setCursorPositionState(result.position);
205
- setOriginalInput(result.text);
206
- return;
207
- }
208
- // Handle Ctrl+O: Toggle verbose mode
209
- // Check both key.ctrl with 'o' and raw ASCII code \x0f (Ctrl+O = ASCII 15)
210
- if ((key.ctrl && inputChar === "o") || inputChar === "\x0f") {
211
- onVerboseToggle?.();
212
- return;
213
- }
214
- // Handle Ctrl+B: Toggle background mode
215
- // Check both key.ctrl with 'b' and raw ASCII code \x02 (Ctrl+B = ASCII 2)
216
- if ((key.ctrl && inputChar === "b") || inputChar === "\x02") {
217
- onBackgroundModeToggle?.();
218
- return;
219
- }
220
- // Handle Ctrl+Y: Copy last response to clipboard
221
- // Check both key.ctrl with 'y' and raw ASCII code \x19 (Ctrl+Y = ASCII 25)
222
- if ((key.ctrl && inputChar === "y") || inputChar === "\x19") {
223
- onCopyLastResponse?.();
224
- return;
225
- }
226
- // Handle Ctrl+X: Clear entire input
227
- // Check both key.ctrl with 'x' and raw ASCII code \x18 (Ctrl+X = ASCII 24)
228
- if ((key.ctrl && inputChar === "x") || inputChar === "\x18") {
229
- setInputState("");
230
- setCursorPositionState(0);
231
- setOriginalInput("");
232
- return;
233
- }
234
- // Handle regular character input
235
- if (inputChar && !key.ctrl && !key.meta) {
236
- const result = insertText(input, cursorPosition, inputChar);
237
- setInputState(result.text);
238
- setCursorPositionState(result.position);
239
- setOriginalInput(result.text);
240
- }
241
- }, [disabled, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, input, cursorPosition, multiline, handleSubmit, navigateHistory, setOriginalInput]);
242
- return {
243
- input,
244
- cursorPosition,
245
- isMultiline: isMultilineRef.current,
246
- setInput,
247
- setCursorPosition,
248
- clearInput,
249
- insertAtCursor,
250
- resetHistory,
251
- handleInput,
252
- };
253
- }
254
- //# sourceMappingURL=use-enhanced-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-enhanced-input.js","sourceRoot":"","sources":["../../../src/ui/hooks/use-enhanced-input.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { LLMAgent, ChatEntry } from "../../agent/llm-agent.js";
2
- interface UseInputHandlerProps {
3
- agent: LLMAgent;
4
- chatHistory: ChatEntry[];
5
- setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>;
6
- setIsProcessing: (processing: boolean) => void;
7
- setIsStreaming: (streaming: boolean) => void;
8
- setTokenCount: (count: number) => void;
9
- setProcessingTime: (time: number) => void;
10
- processingStartTime: React.MutableRefObject<number>;
11
- isProcessing: boolean;
12
- isStreaming: boolean;
13
- isConfirmationActive?: boolean;
14
- onQuickActionsToggle?: () => void;
15
- onVerboseModeChange?: (enabled: boolean) => void;
16
- onBackgroundModeChange?: (enabled: boolean) => void;
17
- onAutoEditModeChange?: (enabled: boolean) => void;
18
- onTaskMovedToBackground?: (taskId: string) => void;
19
- onOperationInterrupted?: () => void;
20
- onChatCleared?: () => void;
21
- onCopyLastResponse?: () => void;
22
- onMemoryWarmed?: (tokens: number) => void;
23
- onMemoryRefreshed?: () => void;
24
- onCheckpointCreated?: () => void;
25
- onCheckpointRestored?: () => void;
26
- }
27
- interface CommandSuggestion {
28
- command: string;
29
- description: string;
30
- }
31
- interface ModelOption {
32
- model: string;
33
- }
34
- export declare function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive, onQuickActionsToggle, onVerboseModeChange, onBackgroundModeChange, onAutoEditModeChange, onTaskMovedToBackground, onOperationInterrupted, onChatCleared, onCopyLastResponse, onMemoryWarmed, onMemoryRefreshed, onCheckpointCreated: _onCheckpointCreated, onCheckpointRestored: _onCheckpointRestored, }: UseInputHandlerProps): {
35
- input: string;
36
- cursorPosition: number;
37
- showCommandSuggestions: boolean;
38
- selectedCommandIndex: number;
39
- commandSuggestions: CommandSuggestion[];
40
- availableModels: ModelOption[];
41
- agent: LLMAgent;
42
- autoEditEnabled: boolean;
43
- verboseMode: boolean;
44
- backgroundMode: boolean;
45
- };
46
- export {};