@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.
Files changed (155) hide show
  1. package/README.md +10 -5
  2. package/bin/codemie-claude-acp.js +21 -0
  3. package/bin/codemie.js +13 -0
  4. package/dist/agents/codemie-code/agent.d.ts +22 -4
  5. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/agent.js +291 -195
  7. package/dist/agents/codemie-code/agent.js.map +1 -1
  8. package/dist/agents/codemie-code/index.d.ts +1 -1
  9. package/dist/agents/codemie-code/index.d.ts.map +1 -1
  10. package/dist/agents/codemie-code/index.js +8 -5
  11. package/dist/agents/codemie-code/index.js.map +1 -1
  12. package/dist/agents/codemie-code/prompts.d.ts +8 -10
  13. package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
  14. package/dist/agents/codemie-code/prompts.js +43 -16
  15. package/dist/agents/codemie-code/prompts.js.map +1 -1
  16. package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -1
  17. package/dist/agents/codemie-code/toolMetadata.js +9 -8
  18. package/dist/agents/codemie-code/toolMetadata.js.map +1 -1
  19. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts +47 -0
  20. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -0
  21. package/dist/agents/codemie-code/tools/assistant-invocation.js +129 -0
  22. package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -0
  23. package/dist/agents/codemie-code/tools/index.d.ts +70 -4
  24. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
  25. package/dist/agents/codemie-code/tools/index.js +57 -44
  26. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  27. package/dist/agents/codemie-code/tools/planning.d.ts +6 -5
  28. package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -1
  29. package/dist/agents/codemie-code/tools/planning.js +12 -10
  30. package/dist/agents/codemie-code/tools/planning.js.map +1 -1
  31. package/dist/agents/codemie-code/types.d.ts +24 -3
  32. package/dist/agents/codemie-code/types.d.ts.map +1 -1
  33. package/dist/agents/codemie-code/types.js +24 -0
  34. package/dist/agents/codemie-code/types.js.map +1 -1
  35. package/dist/agents/codemie-code/ui/autocomplete.d.ts +98 -0
  36. package/dist/agents/codemie-code/ui/autocomplete.d.ts.map +1 -0
  37. package/dist/agents/codemie-code/ui/autocomplete.js +145 -0
  38. package/dist/agents/codemie-code/ui/autocomplete.js.map +1 -0
  39. package/dist/agents/codemie-code/ui/keyHandlers.d.ts +112 -0
  40. package/dist/agents/codemie-code/ui/keyHandlers.d.ts.map +1 -0
  41. package/dist/agents/codemie-code/ui/keyHandlers.js +415 -0
  42. package/dist/agents/codemie-code/ui/keyHandlers.js.map +1 -0
  43. package/dist/agents/codemie-code/ui/mentions.d.ts +86 -0
  44. package/dist/agents/codemie-code/ui/mentions.d.ts.map +1 -0
  45. package/dist/agents/codemie-code/ui/mentions.js +122 -0
  46. package/dist/agents/codemie-code/ui/mentions.js.map +1 -0
  47. package/dist/agents/codemie-code/ui/terminalCodes.d.ts +38 -0
  48. package/dist/agents/codemie-code/ui/terminalCodes.d.ts.map +1 -0
  49. package/dist/agents/codemie-code/ui/terminalCodes.js +42 -0
  50. package/dist/agents/codemie-code/ui/terminalCodes.js.map +1 -0
  51. package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -1
  52. package/dist/agents/codemie-code/ui/todoPanel.js +3 -4
  53. package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -1
  54. package/dist/agents/codemie-code/ui.d.ts +8 -7
  55. package/dist/agents/codemie-code/ui.d.ts.map +1 -1
  56. package/dist/agents/codemie-code/ui.js +87 -145
  57. package/dist/agents/codemie-code/ui.js.map +1 -1
  58. package/dist/agents/core/AgentCLI.d.ts +5 -0
  59. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  60. package/dist/agents/core/AgentCLI.js +22 -0
  61. package/dist/agents/core/AgentCLI.js.map +1 -1
  62. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  63. package/dist/agents/core/BaseAgentAdapter.js +58 -28
  64. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  65. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +7 -1
  66. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
  67. package/dist/agents/core/extension/BaseExtensionInstaller.js +58 -15
  68. package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
  69. package/dist/agents/core/types.d.ts +17 -0
  70. package/dist/agents/core/types.d.ts.map +1 -1
  71. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +27 -0
  72. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -0
  73. package/dist/agents/plugins/claude/claude-acp.plugin.js +63 -0
  74. package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -0
  75. package/dist/agents/plugins/claude/claude-message-types.d.ts +1 -0
  76. package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
  77. package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
  78. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  79. package/dist/agents/plugins/claude/claude.plugin.js +66 -29
  80. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  81. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  82. package/dist/agents/plugins/claude/claude.session.js +14 -7
  83. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  84. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  85. package/dist/agents/plugins/claude/plugin/commands/codemie-subagents.md +4 -4
  86. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  87. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +43 -8
  88. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  89. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  90. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +68 -40
  91. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  92. package/dist/agents/registry.d.ts +1 -1
  93. package/dist/agents/registry.d.ts.map +1 -1
  94. package/dist/agents/registry.js +3 -1
  95. package/dist/agents/registry.js.map +1 -1
  96. package/dist/cli/commands/assistants/chat.d.ts +11 -0
  97. package/dist/cli/commands/assistants/chat.d.ts.map +1 -0
  98. package/dist/cli/commands/assistants/chat.js +201 -0
  99. package/dist/cli/commands/assistants/chat.js.map +1 -0
  100. package/dist/cli/commands/assistants/constants.d.ts +81 -0
  101. package/dist/cli/commands/assistants/constants.d.ts.map +1 -0
  102. package/dist/cli/commands/assistants/constants.js +75 -0
  103. package/dist/cli/commands/assistants/constants.js.map +1 -0
  104. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts +26 -0
  105. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +1 -0
  106. package/dist/cli/commands/assistants/generators/claude-agent-generator.js +115 -0
  107. package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +1 -0
  108. package/dist/cli/commands/assistants/index.d.ts +11 -0
  109. package/dist/cli/commands/assistants/index.d.ts.map +1 -0
  110. package/dist/cli/commands/assistants/index.js +28 -0
  111. package/dist/cli/commands/assistants/index.js.map +1 -0
  112. package/dist/cli/commands/assistants/list.d.ts +11 -0
  113. package/dist/cli/commands/assistants/list.d.ts.map +1 -0
  114. package/dist/cli/commands/assistants/list.js +323 -0
  115. package/dist/cli/commands/assistants/list.js.map +1 -0
  116. package/dist/cli/commands/install.d.ts.map +1 -1
  117. package/dist/cli/commands/install.js +18 -6
  118. package/dist/cli/commands/install.js.map +1 -1
  119. package/dist/cli/commands/self-update.d.ts +3 -0
  120. package/dist/cli/commands/self-update.d.ts.map +1 -0
  121. package/dist/cli/commands/self-update.js +55 -0
  122. package/dist/cli/commands/self-update.js.map +1 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +8 -4
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/env/types.d.ts +13 -0
  127. package/dist/env/types.d.ts.map +1 -1
  128. package/dist/env/types.js +1 -1
  129. package/dist/env/types.js.map +1 -1
  130. package/dist/utils/auth.d.ts +22 -0
  131. package/dist/utils/auth.d.ts.map +1 -0
  132. package/dist/utils/auth.js +50 -0
  133. package/dist/utils/auth.js.map +1 -0
  134. package/dist/utils/cli-updater.d.ts +70 -0
  135. package/dist/utils/cli-updater.d.ts.map +1 -0
  136. package/dist/utils/cli-updater.js +339 -0
  137. package/dist/utils/cli-updater.js.map +1 -0
  138. package/dist/utils/config.d.ts +6 -1
  139. package/dist/utils/config.d.ts.map +1 -1
  140. package/dist/utils/config.js +13 -0
  141. package/dist/utils/config.js.map +1 -1
  142. package/dist/utils/native-installer.d.ts.map +1 -1
  143. package/dist/utils/native-installer.js +48 -17
  144. package/dist/utils/native-installer.js.map +1 -1
  145. package/dist/utils/processes.js +1 -1
  146. package/dist/utils/profile.d.ts +2 -0
  147. package/dist/utils/profile.d.ts.map +1 -1
  148. package/dist/utils/profile.js +5 -0
  149. package/dist/utils/profile.js.map +1 -1
  150. package/dist/utils/sdk-client.d.ts +15 -0
  151. package/dist/utils/sdk-client.d.ts.map +1 -0
  152. package/dist/utils/sdk-client.js +92 -0
  153. package/dist/utils/sdk-client.js.map +1 -0
  154. package/package.json +7 -2
  155. 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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"}