@codemieai/code 0.0.34 → 0.0.35
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 +10 -5
- package/bin/codemie-claude-acp.js +21 -0
- package/bin/codemie.js +13 -0
- package/dist/agents/codemie-code/agent.d.ts +22 -4
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +291 -195
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/index.d.ts +1 -1
- package/dist/agents/codemie-code/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/index.js +8 -5
- package/dist/agents/codemie-code/index.js.map +1 -1
- package/dist/agents/codemie-code/prompts.d.ts +8 -10
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
- package/dist/agents/codemie-code/prompts.js +43 -16
- package/dist/agents/codemie-code/prompts.js.map +1 -1
- package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -1
- package/dist/agents/codemie-code/toolMetadata.js +9 -8
- package/dist/agents/codemie-code/toolMetadata.js.map +1 -1
- package/dist/agents/codemie-code/tools/assistant-invocation.d.ts +47 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.js +129 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -0
- package/dist/agents/codemie-code/tools/index.d.ts +70 -4
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +57 -44
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/codemie-code/tools/planning.d.ts +6 -5
- package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/planning.js +12 -10
- package/dist/agents/codemie-code/tools/planning.js.map +1 -1
- package/dist/agents/codemie-code/types.d.ts +24 -3
- package/dist/agents/codemie-code/types.d.ts.map +1 -1
- package/dist/agents/codemie-code/types.js +24 -0
- package/dist/agents/codemie-code/types.js.map +1 -1
- package/dist/agents/codemie-code/ui/autocomplete.d.ts +98 -0
- package/dist/agents/codemie-code/ui/autocomplete.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/autocomplete.js +145 -0
- package/dist/agents/codemie-code/ui/autocomplete.js.map +1 -0
- package/dist/agents/codemie-code/ui/keyHandlers.d.ts +112 -0
- package/dist/agents/codemie-code/ui/keyHandlers.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/keyHandlers.js +415 -0
- package/dist/agents/codemie-code/ui/keyHandlers.js.map +1 -0
- package/dist/agents/codemie-code/ui/mentions.d.ts +86 -0
- package/dist/agents/codemie-code/ui/mentions.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/mentions.js +122 -0
- package/dist/agents/codemie-code/ui/mentions.js.map +1 -0
- package/dist/agents/codemie-code/ui/terminalCodes.d.ts +38 -0
- package/dist/agents/codemie-code/ui/terminalCodes.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/terminalCodes.js +42 -0
- package/dist/agents/codemie-code/ui/terminalCodes.js.map +1 -0
- package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui/todoPanel.js +3 -4
- package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -1
- package/dist/agents/codemie-code/ui.d.ts +8 -7
- package/dist/agents/codemie-code/ui.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui.js +87 -145
- package/dist/agents/codemie-code/ui.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts +5 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +22 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +58 -28
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +7 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.js +58 -15
- package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
- package/dist/agents/core/types.d.ts +17 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +27 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.js +63 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -0
- package/dist/agents/plugins/claude/claude-message-types.d.ts +1 -0
- package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +66 -29
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.session.js +14 -7
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/commands/codemie-subagents.md +4 -4
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +43 -8
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +68 -40
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +3 -1
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/assistants/chat.d.ts +11 -0
- package/dist/cli/commands/assistants/chat.d.ts.map +1 -0
- package/dist/cli/commands/assistants/chat.js +201 -0
- package/dist/cli/commands/assistants/chat.js.map +1 -0
- package/dist/cli/commands/assistants/constants.d.ts +81 -0
- package/dist/cli/commands/assistants/constants.d.ts.map +1 -0
- package/dist/cli/commands/assistants/constants.js +75 -0
- package/dist/cli/commands/assistants/constants.js.map +1 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts +26 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +1 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.js +115 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +1 -0
- package/dist/cli/commands/assistants/index.d.ts +11 -0
- package/dist/cli/commands/assistants/index.d.ts.map +1 -0
- package/dist/cli/commands/assistants/index.js +28 -0
- package/dist/cli/commands/assistants/index.js.map +1 -0
- package/dist/cli/commands/assistants/list.d.ts +11 -0
- package/dist/cli/commands/assistants/list.d.ts.map +1 -0
- package/dist/cli/commands/assistants/list.js +323 -0
- package/dist/cli/commands/assistants/list.js.map +1 -0
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +18 -6
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/self-update.d.ts +3 -0
- package/dist/cli/commands/self-update.d.ts.map +1 -0
- package/dist/cli/commands/self-update.js +55 -0
- package/dist/cli/commands/self-update.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +8 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +13 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/utils/auth.d.ts +22 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +50 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/cli-updater.d.ts +70 -0
- package/dist/utils/cli-updater.d.ts.map +1 -0
- package/dist/utils/cli-updater.js +339 -0
- package/dist/utils/cli-updater.js.map +1 -0
- package/dist/utils/config.d.ts +6 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +13 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/native-installer.d.ts.map +1 -1
- package/dist/utils/native-installer.js +48 -17
- package/dist/utils/native-installer.js.map +1 -1
- package/dist/utils/processes.js +1 -1
- package/dist/utils/profile.d.ts +2 -0
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +5 -0
- package/dist/utils/profile.js.map +1 -1
- package/dist/utils/sdk-client.d.ts +15 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +92 -0
- package/dist/utils/sdk-client.js.map +1 -0
- package/package.json +7 -2
- package/dist/agents/plugins/claude/plugin/commands/codemie-pr.md +0 -25
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key Handler Registry
|
|
3
|
+
*
|
|
4
|
+
* Declarative key handling system using priority-based handler matching.
|
|
5
|
+
* Replaces nested if-statements with a clean registry pattern.
|
|
6
|
+
*/
|
|
7
|
+
import { hasClipboardImage, getClipboardImage } from '../../../utils/clipboard.js';
|
|
8
|
+
import { parseAutocompleteQuery, filterAssistants, renderAutocompleteUI, clearAutocompleteUI, navigateUp, navigateDown, } from './autocomplete.js';
|
|
9
|
+
import { ESC, CONTROL, NEWLINE, startsWithEscape, isKey } from './terminalCodes.js';
|
|
10
|
+
import { logger } from '../../../utils/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Handle escape sequences (arrow keys, plain escape, incomplete sequences)
|
|
13
|
+
*/
|
|
14
|
+
export function handleEscapeSequences(data, state) {
|
|
15
|
+
const { escapeSequence } = state;
|
|
16
|
+
// Arrow Up
|
|
17
|
+
if (isKey(escapeSequence, 'ARROW_UP')) {
|
|
18
|
+
state.escapeSequence = '';
|
|
19
|
+
if (state.autocompleteActive && state.autocompleteList.length > 0) {
|
|
20
|
+
state.autocompleteIndex = navigateUp(state.autocompleteIndex, state.autocompleteList.length);
|
|
21
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, state.currentLine) +
|
|
22
|
+
renderAutocompleteUI(state.autocompleteList, state.autocompleteIndex, state.currentLine);
|
|
23
|
+
process.stdout.write(output);
|
|
24
|
+
}
|
|
25
|
+
return { handled: true };
|
|
26
|
+
}
|
|
27
|
+
// Arrow Down
|
|
28
|
+
if (isKey(escapeSequence, 'ARROW_DOWN')) {
|
|
29
|
+
state.escapeSequence = '';
|
|
30
|
+
if (state.autocompleteActive && state.autocompleteList.length > 0) {
|
|
31
|
+
state.autocompleteIndex = navigateDown(state.autocompleteIndex, state.autocompleteList.length);
|
|
32
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, state.currentLine) +
|
|
33
|
+
renderAutocompleteUI(state.autocompleteList, state.autocompleteIndex, state.currentLine);
|
|
34
|
+
process.stdout.write(output);
|
|
35
|
+
logger.debug('[Autocomplete] Arrow Down - new index:', state.autocompleteIndex);
|
|
36
|
+
}
|
|
37
|
+
return { handled: true };
|
|
38
|
+
}
|
|
39
|
+
// Plain Escape key (deactivate autocomplete)
|
|
40
|
+
if (escapeSequence === ESC) {
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
setTimeout(() => {
|
|
43
|
+
if (state.escapeSequence === ESC) {
|
|
44
|
+
state.escapeSequence = '';
|
|
45
|
+
if (state.autocompleteActive) {
|
|
46
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, state.currentLine);
|
|
47
|
+
process.stdout.write(output);
|
|
48
|
+
state.autocompleteActive = false;
|
|
49
|
+
state.autocompleteList = [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
resolve({ handled: true });
|
|
53
|
+
}, 50);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Incomplete or unrecognized escape sequences
|
|
57
|
+
if (escapeSequence.length > 0 && escapeSequence.length < 5) {
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
if (state.escapeSequence.length > 0 && state.escapeSequence.length < 5) {
|
|
61
|
+
state.escapeSequence = '';
|
|
62
|
+
}
|
|
63
|
+
resolve({ handled: true });
|
|
64
|
+
}, 50);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return { handled: false };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handle backspace/delete key
|
|
71
|
+
*/
|
|
72
|
+
export function handleBackspace(data, state) {
|
|
73
|
+
if (state.currentLine.length > 0) {
|
|
74
|
+
state.currentLine = state.currentLine.slice(0, -1);
|
|
75
|
+
process.stdout.write('\b \b');
|
|
76
|
+
// Update autocomplete if active
|
|
77
|
+
if (state.autocompleteActive) {
|
|
78
|
+
// Parse the current query
|
|
79
|
+
const queryResult = parseAutocompleteQuery(state.currentLine);
|
|
80
|
+
// Deactivate if we backspaced past @ or if query is empty (just @ remaining)
|
|
81
|
+
if (!queryResult.hasQuery || queryResult.query.length === 0) {
|
|
82
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, state.currentLine);
|
|
83
|
+
process.stdout.write(output);
|
|
84
|
+
state.autocompleteActive = false;
|
|
85
|
+
state.autocompleteList = [];
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Update autocomplete filtering
|
|
89
|
+
const assistants = state.ui['assistantSuggestions'] || [];
|
|
90
|
+
state.autocompleteList = filterAssistants(queryResult.query, assistants);
|
|
91
|
+
const output = clearAutocompleteUI(state.autocompleteList.length + 1, state.currentLine) +
|
|
92
|
+
renderAutocompleteUI(state.autocompleteList, state.autocompleteIndex, state.currentLine);
|
|
93
|
+
process.stdout.write(output);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { handled: true };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Handle Tab key (autocomplete selection or clipboard image insertion)
|
|
101
|
+
*/
|
|
102
|
+
export async function handleTab(data, state) {
|
|
103
|
+
// If autocomplete is active, select the current item
|
|
104
|
+
if (state.autocompleteActive && state.autocompleteList.length > 0) {
|
|
105
|
+
selectAutocomplete(state);
|
|
106
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
107
|
+
}
|
|
108
|
+
// Otherwise, handle clipboard image insertion
|
|
109
|
+
const hasImage = await hasClipboardImage();
|
|
110
|
+
if (hasImage) {
|
|
111
|
+
const image = await getClipboardImage();
|
|
112
|
+
if (image) {
|
|
113
|
+
state.images.push(image);
|
|
114
|
+
const imageIndicator = `[Image ${state.images.length}] `;
|
|
115
|
+
state.currentLine += imageIndicator;
|
|
116
|
+
process.stdout.write(imageIndicator);
|
|
117
|
+
console.log(`\n📸 Image ${state.images.length} inserted from clipboard (${image.mimeType})`);
|
|
118
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return { handled: true };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Handle Ctrl+C (cancel input)
|
|
125
|
+
*/
|
|
126
|
+
export function handleCtrlC(data, state) {
|
|
127
|
+
process.stdout.write('\n');
|
|
128
|
+
if (state.autocompleteActive) {
|
|
129
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, '');
|
|
130
|
+
process.stdout.write(output);
|
|
131
|
+
}
|
|
132
|
+
return { handled: true, shouldReturn: true, value: null };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Handle Shift+Enter (add new line)
|
|
136
|
+
*/
|
|
137
|
+
export function handleShiftEnter(data, state) {
|
|
138
|
+
state.lines.push(state.currentLine);
|
|
139
|
+
state.currentLine = '';
|
|
140
|
+
state.isFirstLine = false;
|
|
141
|
+
process.stdout.write('\n');
|
|
142
|
+
state.escapeSequence = '';
|
|
143
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Handle Enter key (submit or autocomplete selection)
|
|
147
|
+
*/
|
|
148
|
+
export function handleEnter(data, state) {
|
|
149
|
+
// If autocomplete is active, select the item
|
|
150
|
+
if (state.autocompleteActive && state.autocompleteList.length > 0) {
|
|
151
|
+
selectAutocomplete(state);
|
|
152
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
153
|
+
}
|
|
154
|
+
// Empty input
|
|
155
|
+
if (state.currentLine.trim() === '' && state.lines.length === 0) {
|
|
156
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
157
|
+
}
|
|
158
|
+
// Send the message
|
|
159
|
+
if (state.currentLine.trim() !== '') {
|
|
160
|
+
state.lines.push(state.currentLine);
|
|
161
|
+
}
|
|
162
|
+
process.stdout.write('\n');
|
|
163
|
+
const finalText = state.lines.join('\n');
|
|
164
|
+
const finalImages = state.images;
|
|
165
|
+
return {
|
|
166
|
+
handled: true,
|
|
167
|
+
shouldReturn: true,
|
|
168
|
+
value: { text: finalText, images: finalImages },
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Handle Ctrl+P (toggle plan mode)
|
|
173
|
+
*/
|
|
174
|
+
export function handleCtrlP(data, state) {
|
|
175
|
+
state.ui.handleHotkey('toggle-plan-mode');
|
|
176
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Handle Ctrl+H (show hotkey help)
|
|
180
|
+
*/
|
|
181
|
+
export function handleCtrlH(data, state) {
|
|
182
|
+
state.ui.showHotkeyHelp();
|
|
183
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Handle Ctrl+T (show todos)
|
|
187
|
+
*/
|
|
188
|
+
export function handleCtrlT(data, state) {
|
|
189
|
+
state.ui.handleHotkey('show-todos');
|
|
190
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Handle Ctrl+S (show mode status)
|
|
194
|
+
*/
|
|
195
|
+
export function handleCtrlS(data, state) {
|
|
196
|
+
state.ui.showModeStatus();
|
|
197
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Handle Alt+M (show mode status alternative)
|
|
201
|
+
*/
|
|
202
|
+
export function handleAltM(data, state) {
|
|
203
|
+
state.ui.showModeStatus();
|
|
204
|
+
state.escapeSequence = '';
|
|
205
|
+
return { handled: true, shouldRewritePrompt: true };
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Check if @ character should trigger autocomplete
|
|
209
|
+
*/
|
|
210
|
+
function shouldActivateAutocomplete(currentLine, printableData) {
|
|
211
|
+
if (!printableData.includes('@')) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
const atPos = currentLine.lastIndexOf('@');
|
|
215
|
+
const beforeAt = atPos > 0 ? currentLine[atPos - 1] : ' ';
|
|
216
|
+
const isWordBoundary = beforeAt === ' ' || beforeAt === '\n' || atPos === 0;
|
|
217
|
+
return isWordBoundary;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Activate autocomplete for @ mentions
|
|
221
|
+
*/
|
|
222
|
+
function activateAutocomplete(state) {
|
|
223
|
+
const queryResult = parseAutocompleteQuery(state.currentLine);
|
|
224
|
+
if (!queryResult.hasQuery) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const assistants = state.ui['assistantSuggestions'] || [];
|
|
228
|
+
state.autocompleteList = filterAssistants(queryResult.query, assistants);
|
|
229
|
+
state.autocompleteActive = state.autocompleteList.length > 0;
|
|
230
|
+
state.autocompleteIndex = 0;
|
|
231
|
+
state.autocompleteStartPos = queryResult.startPosition;
|
|
232
|
+
if (state.autocompleteActive) {
|
|
233
|
+
const output = renderAutocompleteUI(state.autocompleteList, state.autocompleteIndex, state.currentLine);
|
|
234
|
+
process.stdout.write(output);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Deactivate autocomplete
|
|
239
|
+
*/
|
|
240
|
+
function deactivateAutocomplete(state) {
|
|
241
|
+
const output = clearAutocompleteUI(state.autocompleteList.length, state.currentLine);
|
|
242
|
+
process.stdout.write(output);
|
|
243
|
+
state.autocompleteActive = false;
|
|
244
|
+
state.autocompleteList = [];
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Select autocomplete suggestion and update input line
|
|
248
|
+
*/
|
|
249
|
+
function selectAutocomplete(state) {
|
|
250
|
+
const selectedAssistant = state.autocompleteList[state.autocompleteIndex];
|
|
251
|
+
// Calculate new line with selected suggestion
|
|
252
|
+
const atPos = state.autocompleteStartPos;
|
|
253
|
+
const beforeAt = state.currentLine.slice(0, atPos);
|
|
254
|
+
const newLine = `${beforeAt}@${selectedAssistant.slug} `;
|
|
255
|
+
// Clear autocomplete dropdown lines
|
|
256
|
+
for (let i = 0; i < state.autocompleteList.length; i++) {
|
|
257
|
+
process.stdout.write('\n\x1b[2K'); // Move down and clear line
|
|
258
|
+
}
|
|
259
|
+
// Move cursor back up
|
|
260
|
+
process.stdout.write(`\x1b[${state.autocompleteList.length}A`);
|
|
261
|
+
// Update state
|
|
262
|
+
state.currentLine = newLine;
|
|
263
|
+
state.autocompleteActive = false;
|
|
264
|
+
state.autocompleteList = [];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Update autocomplete filtering as user types
|
|
268
|
+
*/
|
|
269
|
+
function updateAutocompleteFiltering(state) {
|
|
270
|
+
const queryResult = parseAutocompleteQuery(state.currentLine);
|
|
271
|
+
if (!queryResult.hasQuery) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const assistants = state.ui['assistantSuggestions'] || [];
|
|
275
|
+
state.autocompleteList = filterAssistants(queryResult.query, assistants);
|
|
276
|
+
state.autocompleteIndex = 0;
|
|
277
|
+
if (state.autocompleteList.length === 0) {
|
|
278
|
+
const output = clearAutocompleteUI(1, state.currentLine);
|
|
279
|
+
process.stdout.write(output);
|
|
280
|
+
state.autocompleteActive = false;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
const output = clearAutocompleteUI(state.autocompleteList.length + 1, state.currentLine) +
|
|
284
|
+
renderAutocompleteUI(state.autocompleteList, state.autocompleteIndex, state.currentLine);
|
|
285
|
+
process.stdout.write(output);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handle printable text input and paste
|
|
290
|
+
*/
|
|
291
|
+
export function handlePrintableText(data, state) {
|
|
292
|
+
// Filter to printable characters and tabs
|
|
293
|
+
const printableData = data.split('').filter(char => (char.codePointAt(0) ?? 0) >= 32 || char === CONTROL.TAB).join('');
|
|
294
|
+
if (printableData.length === 0) {
|
|
295
|
+
return { handled: false };
|
|
296
|
+
}
|
|
297
|
+
state.currentLine += printableData;
|
|
298
|
+
process.stdout.write(printableData);
|
|
299
|
+
// Handle @ character for autocomplete activation
|
|
300
|
+
if (!state.autocompleteActive && shouldActivateAutocomplete(state.currentLine, printableData)) {
|
|
301
|
+
activateAutocomplete(state);
|
|
302
|
+
return { handled: true };
|
|
303
|
+
}
|
|
304
|
+
// Handle space to deactivate autocomplete
|
|
305
|
+
if (state.autocompleteActive && printableData.includes(' ')) {
|
|
306
|
+
deactivateAutocomplete(state);
|
|
307
|
+
return { handled: true };
|
|
308
|
+
}
|
|
309
|
+
// Update autocomplete filtering if active
|
|
310
|
+
if (state.autocompleteActive) {
|
|
311
|
+
updateAutocompleteFiltering(state);
|
|
312
|
+
}
|
|
313
|
+
return { handled: true };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Key handler registry organized by priority
|
|
317
|
+
*/
|
|
318
|
+
export const keyHandlers = {
|
|
319
|
+
// Process escape sequences first (highest priority)
|
|
320
|
+
ESCAPE_SEQ: [
|
|
321
|
+
{
|
|
322
|
+
name: 'escape-sequences',
|
|
323
|
+
match: (data, state) => state.escapeSequence.length > 0,
|
|
324
|
+
action: handleEscapeSequences,
|
|
325
|
+
},
|
|
326
|
+
],
|
|
327
|
+
// Critical keys that must be processed before others
|
|
328
|
+
CRITICAL: [
|
|
329
|
+
{
|
|
330
|
+
name: 'ctrl-c',
|
|
331
|
+
match: (data) => data === CONTROL.CTRL_C,
|
|
332
|
+
action: handleCtrlC,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
name: 'backspace',
|
|
336
|
+
match: (data) => data === CONTROL.DELETE || data === CONTROL.BACKSPACE,
|
|
337
|
+
action: handleBackspace,
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: 'shift-enter',
|
|
341
|
+
match: (data, state) => data === NEWLINE.CRLF ||
|
|
342
|
+
data === NEWLINE.LFCR ||
|
|
343
|
+
(!!state.escapeSequence && data === NEWLINE.CR),
|
|
344
|
+
action: handleShiftEnter,
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: 'enter',
|
|
348
|
+
match: (data) => data === NEWLINE.CR || data === NEWLINE.LF,
|
|
349
|
+
action: handleEnter,
|
|
350
|
+
},
|
|
351
|
+
],
|
|
352
|
+
// Medium priority keys (hotkeys and special functions)
|
|
353
|
+
MEDIUM: [
|
|
354
|
+
{
|
|
355
|
+
name: 'ctrl-p',
|
|
356
|
+
match: (data) => data === CONTROL.CTRL_P,
|
|
357
|
+
action: handleCtrlP,
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
name: 'ctrl-h',
|
|
361
|
+
match: (data) => data === CONTROL.CTRL_H,
|
|
362
|
+
action: handleCtrlH,
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: 'ctrl-t',
|
|
366
|
+
match: (data) => data === CONTROL.CTRL_T,
|
|
367
|
+
action: handleCtrlT,
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
name: 'ctrl-s',
|
|
371
|
+
match: (data) => data === CONTROL.CTRL_S,
|
|
372
|
+
action: handleCtrlS,
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
name: 'alt-m',
|
|
376
|
+
match: (data, state) => data === 'm' && state.escapeSequence.includes(ESC),
|
|
377
|
+
action: handleAltM,
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
name: 'tab',
|
|
381
|
+
match: (data) => data === CONTROL.CTRL_I,
|
|
382
|
+
action: handleTab,
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
// Fallback handler for normal text input
|
|
386
|
+
FALLBACK: [
|
|
387
|
+
{
|
|
388
|
+
name: 'printable-text',
|
|
389
|
+
match: (data, state) => !startsWithEscape(data) &&
|
|
390
|
+
state.escapeSequence.length === 0 &&
|
|
391
|
+
(data.length > 1 || (data.length === 1 && ((data.codePointAt(0) ?? 0) >= 32 || data === CONTROL.TAB))),
|
|
392
|
+
action: handlePrintableText,
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
};
|
|
396
|
+
/**
|
|
397
|
+
* Process key input through handler registry
|
|
398
|
+
*/
|
|
399
|
+
export async function processKeyInput(data, state) {
|
|
400
|
+
const priorities = ['ESCAPE_SEQ', 'CRITICAL', 'MEDIUM', 'FALLBACK'];
|
|
401
|
+
for (const priority of priorities) {
|
|
402
|
+
const handlers = keyHandlers[priority];
|
|
403
|
+
for (const handler of handlers) {
|
|
404
|
+
if (handler.match(data, state)) {
|
|
405
|
+
const result = await handler.action(data, state);
|
|
406
|
+
if (result.handled) {
|
|
407
|
+
return result;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// No handler matched
|
|
413
|
+
return { handled: false };
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=keyHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyHandlers.js","sourceRoot":"","sources":["../../../../src/agents/codemie-code/ui/keyHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mention Utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles parsing and highlighting of @mentions and assistant references in text.
|
|
5
|
+
* Provides centralized regex patterns and highlighting logic for consistent
|
|
6
|
+
* mention handling across the application.
|
|
7
|
+
*/
|
|
8
|
+
/** Default color for mention highlights (#B1B9F9) */
|
|
9
|
+
export declare const DEFAULT_MENTION_COLOR: {
|
|
10
|
+
r: number;
|
|
11
|
+
g: number;
|
|
12
|
+
b: number;
|
|
13
|
+
};
|
|
14
|
+
/** Mention type constants */
|
|
15
|
+
export declare const MENTION_TYPES: {
|
|
16
|
+
readonly SIMPLE: "simple";
|
|
17
|
+
readonly ASSISTANT_REFERENCE: "assistant_reference";
|
|
18
|
+
};
|
|
19
|
+
/** Mention type union from constants */
|
|
20
|
+
export type MentionType = typeof MENTION_TYPES[keyof typeof MENTION_TYPES];
|
|
21
|
+
/** Regex patterns for matching different mention formats */
|
|
22
|
+
export declare const MENTION_PATTERNS: {
|
|
23
|
+
readonly SIMPLE: RegExp;
|
|
24
|
+
readonly ASSISTANT_REFERENCE: RegExp;
|
|
25
|
+
readonly AT_START: RegExp;
|
|
26
|
+
};
|
|
27
|
+
/** Represents a parsed mention in text */
|
|
28
|
+
export interface Mention {
|
|
29
|
+
type: MentionType;
|
|
30
|
+
slug: string;
|
|
31
|
+
fullMatch: string;
|
|
32
|
+
startIndex: number;
|
|
33
|
+
endIndex: number;
|
|
34
|
+
}
|
|
35
|
+
/** Options for customizing mention highlighting */
|
|
36
|
+
export interface MentionHighlightOptions {
|
|
37
|
+
color?: {
|
|
38
|
+
r: number;
|
|
39
|
+
g: number;
|
|
40
|
+
b: number;
|
|
41
|
+
};
|
|
42
|
+
bold?: boolean;
|
|
43
|
+
underline?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parse all mentions from text
|
|
47
|
+
* @param text - Text to parse for mentions
|
|
48
|
+
* @returns Array of parsed mentions with metadata
|
|
49
|
+
*/
|
|
50
|
+
export declare function parseMentions(text: string): Mention[];
|
|
51
|
+
/**
|
|
52
|
+
* Check if text contains any mentions
|
|
53
|
+
* @param text - Text to check
|
|
54
|
+
* @returns True if text contains mentions
|
|
55
|
+
*/
|
|
56
|
+
export declare function hasMentions(text: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Extract just the assistant slugs from mentions in text
|
|
59
|
+
* @param text - Text to extract slugs from
|
|
60
|
+
* @returns Array of assistant slugs (without @ prefix)
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractMentionSlugs(text: string): string[];
|
|
63
|
+
/**
|
|
64
|
+
* Apply highlight color to a single piece of text
|
|
65
|
+
* @param text - Text to highlight
|
|
66
|
+
* @param options - Highlighting options
|
|
67
|
+
* @returns Highlighted text with ANSI color codes
|
|
68
|
+
*/
|
|
69
|
+
export declare function highlightMention(text: string, options?: MentionHighlightOptions): string;
|
|
70
|
+
/**
|
|
71
|
+
* Highlight all mentions in text
|
|
72
|
+
* @param text - Text containing mentions
|
|
73
|
+
* @param options - Highlighting options
|
|
74
|
+
* @returns Text with all mentions highlighted
|
|
75
|
+
*/
|
|
76
|
+
export declare function highlightMentionsInText(text: string, options?: MentionHighlightOptions): string;
|
|
77
|
+
/**
|
|
78
|
+
* Parse @mention command format (@slug message content)
|
|
79
|
+
* @param text - Text to parse
|
|
80
|
+
* @returns Object with assistantSlug and message, or null if not a mention command
|
|
81
|
+
*/
|
|
82
|
+
export declare function parseAtMentionCommand(text: string): {
|
|
83
|
+
assistantSlug: string;
|
|
84
|
+
message: string;
|
|
85
|
+
} | null;
|
|
86
|
+
//# sourceMappingURL=mentions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../../src/agents/codemie-code/ui/mentions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;CAA6B,CAAC;AAEhE,6BAA6B;AAC7B,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAEX,wCAAwC;AACxC,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE3E,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,0CAA0C;AAC1C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAqCrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAaxF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAQ/F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYrG"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mention Utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles parsing and highlighting of @mentions and assistant references in text.
|
|
5
|
+
* Provides centralized regex patterns and highlighting logic for consistent
|
|
6
|
+
* mention handling across the application.
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
/** Default color for mention highlights (#B1B9F9) */
|
|
10
|
+
export const DEFAULT_MENTION_COLOR = { r: 177, g: 185, b: 249 };
|
|
11
|
+
/** Mention type constants */
|
|
12
|
+
export const MENTION_TYPES = {
|
|
13
|
+
SIMPLE: 'simple',
|
|
14
|
+
ASSISTANT_REFERENCE: 'assistant_reference',
|
|
15
|
+
};
|
|
16
|
+
/** Regex patterns for matching different mention formats */
|
|
17
|
+
export const MENTION_PATTERNS = {
|
|
18
|
+
SIMPLE: /@([\w-]+)/g, /** Matches @assistant-slug format */
|
|
19
|
+
ASSISTANT_REFERENCE: /\[Assistant (@[\w-]+)\]/g, /** Matches [Assistant @slug] format */
|
|
20
|
+
AT_START: /^@([\w-]+)\s+(.+)$/s, /** Matches @slug at start of message with content after */
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Parse all mentions from text
|
|
24
|
+
* @param text - Text to parse for mentions
|
|
25
|
+
* @returns Array of parsed mentions with metadata
|
|
26
|
+
*/
|
|
27
|
+
export function parseMentions(text) {
|
|
28
|
+
const mentions = [];
|
|
29
|
+
// Parse [Assistant @slug] patterns using RegExp.exec()
|
|
30
|
+
const assistantRefRegex = new RegExp(MENTION_PATTERNS.ASSISTANT_REFERENCE.source, 'g');
|
|
31
|
+
let match;
|
|
32
|
+
while ((match = assistantRefRegex.exec(text)) !== null) {
|
|
33
|
+
mentions.push({
|
|
34
|
+
type: MENTION_TYPES.ASSISTANT_REFERENCE,
|
|
35
|
+
slug: match[1].substring(1),
|
|
36
|
+
fullMatch: match[0],
|
|
37
|
+
startIndex: match.index,
|
|
38
|
+
endIndex: match.index + match[0].length,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const simpleMentionRegex = new RegExp(MENTION_PATTERNS.SIMPLE.source, 'g');
|
|
42
|
+
while ((match = simpleMentionRegex.exec(text)) !== null) {
|
|
43
|
+
// Check if this mention is already part of an assistant reference
|
|
44
|
+
const isPartOfReference = mentions.some(m => match.index >= m.startIndex && match.index < m.endIndex);
|
|
45
|
+
if (!isPartOfReference) {
|
|
46
|
+
mentions.push({
|
|
47
|
+
type: MENTION_TYPES.SIMPLE,
|
|
48
|
+
slug: match[1],
|
|
49
|
+
fullMatch: match[0],
|
|
50
|
+
startIndex: match.index,
|
|
51
|
+
endIndex: match.index + match[0].length,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return mentions.sort((a, b) => a.startIndex - b.startIndex);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if text contains any mentions
|
|
59
|
+
* @param text - Text to check
|
|
60
|
+
* @returns True if text contains mentions
|
|
61
|
+
*/
|
|
62
|
+
export function hasMentions(text) {
|
|
63
|
+
return MENTION_PATTERNS.SIMPLE.test(text) || MENTION_PATTERNS.ASSISTANT_REFERENCE.test(text);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Extract just the assistant slugs from mentions in text
|
|
67
|
+
* @param text - Text to extract slugs from
|
|
68
|
+
* @returns Array of assistant slugs (without @ prefix)
|
|
69
|
+
*/
|
|
70
|
+
export function extractMentionSlugs(text) {
|
|
71
|
+
const mentions = parseMentions(text);
|
|
72
|
+
return mentions.map(m => m.slug);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Apply highlight color to a single piece of text
|
|
76
|
+
* @param text - Text to highlight
|
|
77
|
+
* @param options - Highlighting options
|
|
78
|
+
* @returns Highlighted text with ANSI color codes
|
|
79
|
+
*/
|
|
80
|
+
export function highlightMention(text, options) {
|
|
81
|
+
const color = options?.color || DEFAULT_MENTION_COLOR;
|
|
82
|
+
let styled = chalk.rgb(color.r, color.g, color.b)(text);
|
|
83
|
+
if (options?.bold) {
|
|
84
|
+
styled = chalk.bold(styled);
|
|
85
|
+
}
|
|
86
|
+
if (options?.underline) {
|
|
87
|
+
styled = chalk.underline(styled);
|
|
88
|
+
}
|
|
89
|
+
return styled;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Highlight all mentions in text
|
|
93
|
+
* @param text - Text containing mentions
|
|
94
|
+
* @param options - Highlighting options
|
|
95
|
+
* @returns Text with all mentions highlighted
|
|
96
|
+
*/
|
|
97
|
+
export function highlightMentionsInText(text, options) {
|
|
98
|
+
return text
|
|
99
|
+
.replaceAll(MENTION_PATTERNS.ASSISTANT_REFERENCE, (match) => {
|
|
100
|
+
return highlightMention(match, options);
|
|
101
|
+
})
|
|
102
|
+
.replaceAll(MENTION_PATTERNS.SIMPLE, (match) => {
|
|
103
|
+
return highlightMention(match, options);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Parse @mention command format (@slug message content)
|
|
108
|
+
* @param text - Text to parse
|
|
109
|
+
* @returns Object with assistantSlug and message, or null if not a mention command
|
|
110
|
+
*/
|
|
111
|
+
export function parseAtMentionCommand(text) {
|
|
112
|
+
const regex = new RegExp(MENTION_PATTERNS.AT_START.source, MENTION_PATTERNS.AT_START.flags);
|
|
113
|
+
const match = regex.exec(text);
|
|
114
|
+
if (!match) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
assistantSlug: match[1],
|
|
119
|
+
message: match[2],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=mentions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../../src/agents/codemie-code/ui/mentions.ts"],"names":[],"mappings":"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"}
|