@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.
- package/README.md +20 -1
- package/dist/analyzers/ast/index.d.ts +9 -0
- package/dist/analyzers/ast/index.js +10 -0
- package/dist/analyzers/ast/index.js.map +1 -0
- package/dist/analyzers/ast/node-helpers.d.ts +81 -0
- package/dist/analyzers/ast/node-helpers.js +128 -0
- package/dist/analyzers/ast/node-helpers.js.map +1 -0
- package/dist/analyzers/ast/traverser.d.ts +67 -0
- package/dist/analyzers/ast/traverser.js +156 -0
- package/dist/analyzers/ast/traverser.js.map +1 -0
- package/dist/analyzers/best-practices/index.d.ts +10 -0
- package/dist/analyzers/best-practices/index.js +11 -0
- package/dist/analyzers/best-practices/index.js.map +1 -0
- package/dist/commands/memory.js +1 -1
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/setup.js +1 -6
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/mcp/health.js +2 -4
- package/dist/mcp/health.js.map +1 -1
- package/dist/ui/components/chat-history.js +1 -1
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-interface.js +2 -3
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/confirmation-dialog.js +1 -1
- package/dist/ui/components/confirmation-dialog.js.map +1 -1
- package/dist/ui/components/toast-notification.js +0 -1
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/utils/config-loader.js +3 -3
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/parallel-analyzer.js +29 -12
- package/dist/utils/parallel-analyzer.js.map +1 -1
- package/dist/utils/settings-manager.js +2 -16
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/streaming-analyzer.js +21 -9
- package/dist/utils/streaming-analyzer.js.map +1 -1
- package/eslint.config.js +3 -0
- package/package.json +1 -1
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-11e9e0ba-c39d-4fd2-aa77-bc818811c921.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-2b260b98-b418-4c7c-9694-e2b94967e662.json +0 -24
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7e03601e-e8ab-4cd7-9841-a74b66adf78f.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7f9c6562-771f-4fd0-adcf-9e7e9ac34ae8.json +0 -44
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-e1ebe666-4c3a-4367-ba5c-27fe512a9c70.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-15743e7d-430c-4d76-b6fc-955d7a5c250c.json +0 -44
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-25cf7679-0b3f-4988-83d7-704548fbba91.json +0 -69
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-54aedbac-6db0-464e-8ebb-dbb3979e6dca.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-7658aed8-fe5d-4222-903f-1a7c63717ea7.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-c9c13497-40dc-4294-a327-6a5fc854eaa1.json +0 -69
- package/ax.config.json +0 -333
- package/config-defaults/messages.yaml +0 -75
- package/config-defaults/models.yaml +0 -66
- package/config-defaults/prompts.yaml +0 -156
- package/config-defaults/settings.yaml +0 -86
- package/dist/ui/hooks/use-chat-reducer.d.ts +0 -61
- package/dist/ui/hooks/use-chat-reducer.js +0 -118
- package/dist/ui/hooks/use-chat-reducer.js.map +0 -1
- package/dist/ui/hooks/use-enhanced-input.d.ts +0 -40
- package/dist/ui/hooks/use-enhanced-input.js +0 -254
- package/dist/ui/hooks/use-enhanced-input.js.map +0 -1
- package/dist/ui/hooks/use-input-handler.d.ts +0 -46
- package/dist/ui/hooks/use-input-handler.js +0 -1434
- package/dist/ui/hooks/use-input-handler.js.map +0 -1
- package/dist/utils/paste-collapse.d.ts +0 -46
- package/dist/utils/paste-collapse.js +0 -77
- package/dist/utils/paste-collapse.js.map +0 -1
- package/packages/schemas/dist/index.d.ts +0 -14
- package/packages/schemas/dist/index.d.ts.map +0 -1
- package/packages/schemas/dist/index.js +0 -19
- package/packages/schemas/dist/index.js.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
- package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.js +0 -243
- package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
- package/packages/schemas/dist/public/core/enums.d.ts +0 -227
- package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/enums.js +0 -222
- package/packages/schemas/dist/public/core/enums.js.map +0 -1
- package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
- package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/id-types.js +0 -136
- 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 {};
|