erosolar-cli 1.7.373 → 1.7.377
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/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
- package/dist/capabilities/agentSpawningCapability.js +29 -1
- package/dist/capabilities/agentSpawningCapability.js.map +1 -1
- package/dist/contracts/agent-schemas.json +100 -0
- package/dist/core/alphaZeroOrchestrator.d.ts +140 -0
- package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
- package/dist/core/alphaZeroOrchestrator.js +418 -0
- package/dist/core/alphaZeroOrchestrator.js.map +1 -0
- package/dist/core/checkpoint.d.ts +76 -0
- package/dist/core/checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint.js +278 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/claudeCodeFeatures.d.ts +64 -0
- package/dist/core/claudeCodeFeatures.d.ts.map +1 -0
- package/dist/core/claudeCodeFeatures.js +163 -0
- package/dist/core/claudeCodeFeatures.js.map +1 -0
- package/dist/core/costTracker.d.ts +87 -0
- package/dist/core/costTracker.d.ts.map +1 -0
- package/dist/core/costTracker.js +285 -0
- package/dist/core/costTracker.js.map +1 -0
- package/dist/core/failureRecovery.d.ts +122 -0
- package/dist/core/failureRecovery.d.ts.map +1 -0
- package/dist/core/failureRecovery.js +477 -0
- package/dist/core/failureRecovery.js.map +1 -0
- package/dist/core/learningPersistence.d.ts +145 -0
- package/dist/core/learningPersistence.d.ts.map +1 -0
- package/dist/core/learningPersistence.js +477 -0
- package/dist/core/learningPersistence.js.map +1 -0
- package/dist/core/memorySystem.d.ts +67 -0
- package/dist/core/memorySystem.d.ts.map +1 -0
- package/dist/core/memorySystem.js +334 -0
- package/dist/core/memorySystem.js.map +1 -0
- package/dist/core/outputStyles.d.ts +48 -0
- package/dist/core/outputStyles.d.ts.map +1 -0
- package/dist/core/outputStyles.js +270 -0
- package/dist/core/outputStyles.js.map +1 -0
- package/dist/core/selfEvolution.d.ts +155 -0
- package/dist/core/selfEvolution.d.ts.map +1 -0
- package/dist/core/selfEvolution.js +1000 -0
- package/dist/core/selfEvolution.js.map +1 -0
- package/dist/core/selfImprovement.d.ts +141 -0
- package/dist/core/selfImprovement.d.ts.map +1 -0
- package/dist/core/selfImprovement.js +700 -0
- package/dist/core/selfImprovement.js.map +1 -0
- package/dist/core/updateManager.d.ts +62 -0
- package/dist/core/updateManager.d.ts.map +1 -0
- package/dist/core/updateManager.js +266 -0
- package/dist/core/updateManager.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +45 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +1156 -3
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/keyboardShortcuts.d.ts +53 -0
- package/dist/shell/keyboardShortcuts.d.ts.map +1 -0
- package/dist/shell/keyboardShortcuts.js +163 -0
- package/dist/shell/keyboardShortcuts.js.map +1 -0
- package/dist/shell/terminalInput.d.ts +1 -1
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +8 -4
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/vimMode.d.ts +66 -0
- package/dist/shell/vimMode.d.ts.map +1 -0
- package/dist/shell/vimMode.js +434 -0
- package/dist/shell/vimMode.js.map +1 -0
- package/dist/subagents/parallelAgentManager.d.ts +99 -0
- package/dist/subagents/parallelAgentManager.d.ts.map +1 -0
- package/dist/subagents/parallelAgentManager.js +249 -0
- package/dist/subagents/parallelAgentManager.js.map +1 -0
- package/dist/subagents/taskRunner.d.ts +6 -1
- package/dist/subagents/taskRunner.d.ts.map +1 -1
- package/dist/subagents/taskRunner.js +57 -2
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/tools/planningTools.d.ts +9 -0
- package/dist/tools/planningTools.d.ts.map +1 -1
- package/dist/tools/planningTools.js +90 -0
- package/dist/tools/planningTools.js.map +1 -1
- package/dist/ui/display.d.ts +5 -0
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +14 -0
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/shortcutsHelp.d.ts.map +1 -1
- package/dist/ui/shortcutsHelp.js +34 -3
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vim Mode - Claude Code Style
|
|
3
|
+
*
|
|
4
|
+
* Vim-style editing support for the terminal input.
|
|
5
|
+
* Toggle with /vim command or Ctrl+[ to escape.
|
|
6
|
+
*
|
|
7
|
+
* Supported modes:
|
|
8
|
+
* - Normal: Navigation and text manipulation
|
|
9
|
+
* - Insert: Text input mode
|
|
10
|
+
* - Visual: Selection mode (basic)
|
|
11
|
+
*
|
|
12
|
+
* Basic Vim commands:
|
|
13
|
+
* - h/j/k/l: Left/Down/Up/Right
|
|
14
|
+
* - w/b: Word forward/backward
|
|
15
|
+
* - 0/$: Line start/end
|
|
16
|
+
* - i/a: Insert before/after cursor
|
|
17
|
+
* - I/A: Insert at line start/end
|
|
18
|
+
* - o/O: Open line below/above
|
|
19
|
+
* - x: Delete character
|
|
20
|
+
* - dd: Delete line
|
|
21
|
+
* - yy: Yank line
|
|
22
|
+
* - p: Paste
|
|
23
|
+
* - u: Undo
|
|
24
|
+
* - Escape: Exit to normal mode
|
|
25
|
+
*/
|
|
26
|
+
export type VimMode = 'normal' | 'insert' | 'visual';
|
|
27
|
+
export interface VimState {
|
|
28
|
+
mode: VimMode;
|
|
29
|
+
register: string;
|
|
30
|
+
count: number;
|
|
31
|
+
pendingCommand: string;
|
|
32
|
+
lastCommand: string;
|
|
33
|
+
marks: Map<string, number>;
|
|
34
|
+
}
|
|
35
|
+
export interface VimKeyResult {
|
|
36
|
+
handled: boolean;
|
|
37
|
+
newMode?: VimMode;
|
|
38
|
+
cursorDelta?: number;
|
|
39
|
+
textChange?: {
|
|
40
|
+
type: 'insert' | 'delete' | 'replace';
|
|
41
|
+
text?: string;
|
|
42
|
+
start?: number;
|
|
43
|
+
end?: number;
|
|
44
|
+
};
|
|
45
|
+
action?: 'yank' | 'paste' | 'undo';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create initial vim state
|
|
49
|
+
*/
|
|
50
|
+
export declare function createVimState(): VimState;
|
|
51
|
+
export declare function isVimEnabled(): boolean;
|
|
52
|
+
export declare function setVimEnabled(enabled: boolean): void;
|
|
53
|
+
export declare function toggleVimMode(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Get mode indicator for display
|
|
56
|
+
*/
|
|
57
|
+
export declare function getVimModeIndicator(state: VimState): string;
|
|
58
|
+
/**
|
|
59
|
+
* Process a key in vim mode
|
|
60
|
+
*/
|
|
61
|
+
export declare function processVimKey(key: string, state: VimState, buffer: string, cursor: number): VimKeyResult;
|
|
62
|
+
/**
|
|
63
|
+
* Format vim help for display
|
|
64
|
+
*/
|
|
65
|
+
export declare function formatVimHelp(): string;
|
|
66
|
+
//# sourceMappingURL=vimMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vimMode.d.ts","sourceRoot":"","sources":["../../src/shell/vimMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CASzC;AAOD,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEpD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAa3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,YAAY,CA+Bd;AA8VD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA+BtC"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vim Mode - Claude Code Style
|
|
3
|
+
*
|
|
4
|
+
* Vim-style editing support for the terminal input.
|
|
5
|
+
* Toggle with /vim command or Ctrl+[ to escape.
|
|
6
|
+
*
|
|
7
|
+
* Supported modes:
|
|
8
|
+
* - Normal: Navigation and text manipulation
|
|
9
|
+
* - Insert: Text input mode
|
|
10
|
+
* - Visual: Selection mode (basic)
|
|
11
|
+
*
|
|
12
|
+
* Basic Vim commands:
|
|
13
|
+
* - h/j/k/l: Left/Down/Up/Right
|
|
14
|
+
* - w/b: Word forward/backward
|
|
15
|
+
* - 0/$: Line start/end
|
|
16
|
+
* - i/a: Insert before/after cursor
|
|
17
|
+
* - I/A: Insert at line start/end
|
|
18
|
+
* - o/O: Open line below/above
|
|
19
|
+
* - x: Delete character
|
|
20
|
+
* - dd: Delete line
|
|
21
|
+
* - yy: Yank line
|
|
22
|
+
* - p: Paste
|
|
23
|
+
* - u: Undo
|
|
24
|
+
* - Escape: Exit to normal mode
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Create initial vim state
|
|
28
|
+
*/
|
|
29
|
+
export function createVimState() {
|
|
30
|
+
return {
|
|
31
|
+
mode: 'normal',
|
|
32
|
+
register: '',
|
|
33
|
+
count: 0,
|
|
34
|
+
pendingCommand: '',
|
|
35
|
+
lastCommand: '',
|
|
36
|
+
marks: new Map(),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if vim mode is enabled
|
|
41
|
+
*/
|
|
42
|
+
let vimEnabled = false;
|
|
43
|
+
export function isVimEnabled() {
|
|
44
|
+
return vimEnabled;
|
|
45
|
+
}
|
|
46
|
+
export function setVimEnabled(enabled) {
|
|
47
|
+
vimEnabled = enabled;
|
|
48
|
+
}
|
|
49
|
+
export function toggleVimMode() {
|
|
50
|
+
vimEnabled = !vimEnabled;
|
|
51
|
+
return vimEnabled;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get mode indicator for display
|
|
55
|
+
*/
|
|
56
|
+
export function getVimModeIndicator(state) {
|
|
57
|
+
if (!vimEnabled)
|
|
58
|
+
return '';
|
|
59
|
+
switch (state.mode) {
|
|
60
|
+
case 'normal':
|
|
61
|
+
return '-- NORMAL --';
|
|
62
|
+
case 'insert':
|
|
63
|
+
return '-- INSERT --';
|
|
64
|
+
case 'visual':
|
|
65
|
+
return '-- VISUAL --';
|
|
66
|
+
default:
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Process a key in vim mode
|
|
72
|
+
*/
|
|
73
|
+
export function processVimKey(key, state, buffer, cursor) {
|
|
74
|
+
if (!vimEnabled) {
|
|
75
|
+
return { handled: false };
|
|
76
|
+
}
|
|
77
|
+
// Handle escape key in any mode
|
|
78
|
+
if (key === '\x1b' || key === '\x1b\x1b') {
|
|
79
|
+
return {
|
|
80
|
+
handled: true,
|
|
81
|
+
newMode: 'normal',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Ctrl+[ also escapes (vim standard)
|
|
85
|
+
if (key === '\x1b[') {
|
|
86
|
+
return {
|
|
87
|
+
handled: true,
|
|
88
|
+
newMode: 'normal',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
switch (state.mode) {
|
|
92
|
+
case 'normal':
|
|
93
|
+
return processNormalModeKey(key, state, buffer, cursor);
|
|
94
|
+
case 'insert':
|
|
95
|
+
return processInsertModeKey(key, state, buffer, cursor);
|
|
96
|
+
case 'visual':
|
|
97
|
+
return processVisualModeKey(key, state, buffer, cursor);
|
|
98
|
+
default:
|
|
99
|
+
return { handled: false };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Process key in normal mode
|
|
104
|
+
*/
|
|
105
|
+
function processNormalModeKey(key, state, buffer, cursor) {
|
|
106
|
+
// Handle number prefix for count
|
|
107
|
+
if (/^[1-9]$/.test(key) || (state.count > 0 && /^[0-9]$/.test(key))) {
|
|
108
|
+
state.count = state.count * 10 + parseInt(key, 10);
|
|
109
|
+
return { handled: true };
|
|
110
|
+
}
|
|
111
|
+
const count = Math.max(1, state.count);
|
|
112
|
+
state.count = 0;
|
|
113
|
+
// Handle pending commands (like 'dd', 'yy')
|
|
114
|
+
if (state.pendingCommand) {
|
|
115
|
+
return processPendingCommand(state.pendingCommand + key, state, buffer, cursor);
|
|
116
|
+
}
|
|
117
|
+
switch (key) {
|
|
118
|
+
// Navigation
|
|
119
|
+
case 'h':
|
|
120
|
+
return { handled: true, cursorDelta: -count };
|
|
121
|
+
case 'l':
|
|
122
|
+
return { handled: true, cursorDelta: count };
|
|
123
|
+
case 'j': {
|
|
124
|
+
// Move down a line
|
|
125
|
+
const lines = buffer.split('\n');
|
|
126
|
+
let pos = 0;
|
|
127
|
+
let lineIdx = 0;
|
|
128
|
+
for (let i = 0; i < lines.length; i++) {
|
|
129
|
+
if (cursor <= pos + lines[i].length) {
|
|
130
|
+
lineIdx = i;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
pos += lines[i].length + 1;
|
|
134
|
+
}
|
|
135
|
+
const nextLine = Math.min(lineIdx + count, lines.length - 1);
|
|
136
|
+
let newPos = 0;
|
|
137
|
+
for (let i = 0; i < nextLine; i++) {
|
|
138
|
+
newPos += lines[i].length + 1;
|
|
139
|
+
}
|
|
140
|
+
return { handled: true, cursorDelta: newPos - cursor };
|
|
141
|
+
}
|
|
142
|
+
case 'k': {
|
|
143
|
+
// Move up a line
|
|
144
|
+
const lines = buffer.split('\n');
|
|
145
|
+
let pos = 0;
|
|
146
|
+
let lineIdx = 0;
|
|
147
|
+
for (let i = 0; i < lines.length; i++) {
|
|
148
|
+
if (cursor <= pos + lines[i].length) {
|
|
149
|
+
lineIdx = i;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
pos += lines[i].length + 1;
|
|
153
|
+
}
|
|
154
|
+
const prevLine = Math.max(lineIdx - count, 0);
|
|
155
|
+
let newPos = 0;
|
|
156
|
+
for (let i = 0; i < prevLine; i++) {
|
|
157
|
+
newPos += lines[i].length + 1;
|
|
158
|
+
}
|
|
159
|
+
return { handled: true, cursorDelta: newPos - cursor };
|
|
160
|
+
}
|
|
161
|
+
case 'w': {
|
|
162
|
+
// Word forward
|
|
163
|
+
let pos = cursor;
|
|
164
|
+
for (let i = 0; i < count; i++) {
|
|
165
|
+
// Skip current word
|
|
166
|
+
while (pos < buffer.length && !/\s/.test(buffer[pos]))
|
|
167
|
+
pos++;
|
|
168
|
+
// Skip whitespace
|
|
169
|
+
while (pos < buffer.length && /\s/.test(buffer[pos]))
|
|
170
|
+
pos++;
|
|
171
|
+
}
|
|
172
|
+
return { handled: true, cursorDelta: pos - cursor };
|
|
173
|
+
}
|
|
174
|
+
case 'b': {
|
|
175
|
+
// Word backward
|
|
176
|
+
let pos = cursor;
|
|
177
|
+
for (let i = 0; i < count; i++) {
|
|
178
|
+
// Skip whitespace
|
|
179
|
+
while (pos > 0 && /\s/.test(buffer[pos - 1]))
|
|
180
|
+
pos--;
|
|
181
|
+
// Skip word
|
|
182
|
+
while (pos > 0 && !/\s/.test(buffer[pos - 1]))
|
|
183
|
+
pos--;
|
|
184
|
+
}
|
|
185
|
+
return { handled: true, cursorDelta: pos - cursor };
|
|
186
|
+
}
|
|
187
|
+
case '0':
|
|
188
|
+
// Line start
|
|
189
|
+
return { handled: true, cursorDelta: -getColumnInLine(buffer, cursor) };
|
|
190
|
+
case '$': {
|
|
191
|
+
// Line end
|
|
192
|
+
const lineEnd = buffer.indexOf('\n', cursor);
|
|
193
|
+
const target = lineEnd === -1 ? buffer.length : lineEnd;
|
|
194
|
+
return { handled: true, cursorDelta: target - cursor };
|
|
195
|
+
}
|
|
196
|
+
case '^': {
|
|
197
|
+
// First non-whitespace
|
|
198
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
199
|
+
let pos = lineStart;
|
|
200
|
+
while (pos < buffer.length && buffer[pos] === ' ')
|
|
201
|
+
pos++;
|
|
202
|
+
return { handled: true, cursorDelta: pos - cursor };
|
|
203
|
+
}
|
|
204
|
+
case 'G':
|
|
205
|
+
// Go to end
|
|
206
|
+
return { handled: true, cursorDelta: buffer.length - cursor };
|
|
207
|
+
case 'g':
|
|
208
|
+
state.pendingCommand = 'g';
|
|
209
|
+
return { handled: true };
|
|
210
|
+
// Mode switching
|
|
211
|
+
case 'i':
|
|
212
|
+
return { handled: true, newMode: 'insert' };
|
|
213
|
+
case 'a':
|
|
214
|
+
return {
|
|
215
|
+
handled: true,
|
|
216
|
+
newMode: 'insert',
|
|
217
|
+
cursorDelta: cursor < buffer.length ? 1 : 0,
|
|
218
|
+
};
|
|
219
|
+
case 'I': {
|
|
220
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
221
|
+
let pos = lineStart;
|
|
222
|
+
while (pos < buffer.length && buffer[pos] === ' ')
|
|
223
|
+
pos++;
|
|
224
|
+
return { handled: true, newMode: 'insert', cursorDelta: pos - cursor };
|
|
225
|
+
}
|
|
226
|
+
case 'A': {
|
|
227
|
+
const lineEnd = buffer.indexOf('\n', cursor);
|
|
228
|
+
const target = lineEnd === -1 ? buffer.length : lineEnd;
|
|
229
|
+
return { handled: true, newMode: 'insert', cursorDelta: target - cursor };
|
|
230
|
+
}
|
|
231
|
+
case 'o':
|
|
232
|
+
return {
|
|
233
|
+
handled: true,
|
|
234
|
+
newMode: 'insert',
|
|
235
|
+
textChange: {
|
|
236
|
+
type: 'insert',
|
|
237
|
+
text: '\n',
|
|
238
|
+
start: getLineEnd(buffer, cursor),
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
case 'O': {
|
|
242
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
243
|
+
return {
|
|
244
|
+
handled: true,
|
|
245
|
+
newMode: 'insert',
|
|
246
|
+
textChange: {
|
|
247
|
+
type: 'insert',
|
|
248
|
+
text: '\n',
|
|
249
|
+
start: lineStart,
|
|
250
|
+
},
|
|
251
|
+
cursorDelta: -cursor + lineStart,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Editing
|
|
255
|
+
case 'x':
|
|
256
|
+
return {
|
|
257
|
+
handled: true,
|
|
258
|
+
textChange: {
|
|
259
|
+
type: 'delete',
|
|
260
|
+
start: cursor,
|
|
261
|
+
end: Math.min(cursor + count, buffer.length),
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
case 'd':
|
|
265
|
+
state.pendingCommand = 'd';
|
|
266
|
+
return { handled: true };
|
|
267
|
+
case 'y':
|
|
268
|
+
state.pendingCommand = 'y';
|
|
269
|
+
return { handled: true };
|
|
270
|
+
case 'p':
|
|
271
|
+
return {
|
|
272
|
+
handled: true,
|
|
273
|
+
action: 'paste',
|
|
274
|
+
};
|
|
275
|
+
case 'u':
|
|
276
|
+
return {
|
|
277
|
+
handled: true,
|
|
278
|
+
action: 'undo',
|
|
279
|
+
};
|
|
280
|
+
case 'v':
|
|
281
|
+
return { handled: true, newMode: 'visual' };
|
|
282
|
+
default:
|
|
283
|
+
return { handled: false };
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Process pending multi-key commands
|
|
288
|
+
*/
|
|
289
|
+
function processPendingCommand(command, state, buffer, cursor) {
|
|
290
|
+
state.pendingCommand = '';
|
|
291
|
+
switch (command) {
|
|
292
|
+
case 'dd': {
|
|
293
|
+
// Delete line
|
|
294
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
295
|
+
const lineEnd = getLineEnd(buffer, cursor);
|
|
296
|
+
const deleteEnd = lineEnd < buffer.length ? lineEnd + 1 : lineEnd;
|
|
297
|
+
state.register = buffer.slice(lineStart, deleteEnd);
|
|
298
|
+
return {
|
|
299
|
+
handled: true,
|
|
300
|
+
textChange: {
|
|
301
|
+
type: 'delete',
|
|
302
|
+
start: lineStart,
|
|
303
|
+
end: deleteEnd,
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
case 'yy': {
|
|
308
|
+
// Yank line
|
|
309
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
310
|
+
const lineEnd = getLineEnd(buffer, cursor);
|
|
311
|
+
state.register = buffer.slice(lineStart, lineEnd + 1);
|
|
312
|
+
return { handled: true, action: 'yank' };
|
|
313
|
+
}
|
|
314
|
+
case 'gg':
|
|
315
|
+
// Go to start
|
|
316
|
+
return { handled: true, cursorDelta: -cursor };
|
|
317
|
+
case 'dw': {
|
|
318
|
+
// Delete word
|
|
319
|
+
let end = cursor;
|
|
320
|
+
while (end < buffer.length && !/\s/.test(buffer[end]))
|
|
321
|
+
end++;
|
|
322
|
+
while (end < buffer.length && /\s/.test(buffer[end]))
|
|
323
|
+
end++;
|
|
324
|
+
return {
|
|
325
|
+
handled: true,
|
|
326
|
+
textChange: {
|
|
327
|
+
type: 'delete',
|
|
328
|
+
start: cursor,
|
|
329
|
+
end,
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
default:
|
|
334
|
+
return { handled: false };
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Process key in insert mode
|
|
339
|
+
*/
|
|
340
|
+
function processInsertModeKey(key, _state, _buffer, _cursor) {
|
|
341
|
+
// In insert mode, most keys pass through to normal input
|
|
342
|
+
// Only escape switches back to normal mode
|
|
343
|
+
return { handled: false };
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Process key in visual mode
|
|
347
|
+
*/
|
|
348
|
+
function processVisualModeKey(key, state, buffer, cursor) {
|
|
349
|
+
// Basic visual mode - for now, just support escape
|
|
350
|
+
switch (key) {
|
|
351
|
+
case 'y':
|
|
352
|
+
// Yank selection (simplified - just current line for now)
|
|
353
|
+
state.register = getCurrentLine(buffer, cursor);
|
|
354
|
+
return { handled: true, newMode: 'normal', action: 'yank' };
|
|
355
|
+
case 'd':
|
|
356
|
+
case 'x': {
|
|
357
|
+
// Delete selection
|
|
358
|
+
const lineStart = getLineStart(buffer, cursor);
|
|
359
|
+
const lineEnd = getLineEnd(buffer, cursor);
|
|
360
|
+
return {
|
|
361
|
+
handled: true,
|
|
362
|
+
newMode: 'normal',
|
|
363
|
+
textChange: {
|
|
364
|
+
type: 'delete',
|
|
365
|
+
start: lineStart,
|
|
366
|
+
end: lineEnd + 1,
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
default:
|
|
371
|
+
// Fall through to normal mode navigation
|
|
372
|
+
const result = processNormalModeKey(key, state, buffer, cursor);
|
|
373
|
+
if (!result.newMode)
|
|
374
|
+
result.newMode = 'visual';
|
|
375
|
+
return result;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Helper functions
|
|
379
|
+
function getLineStart(buffer, cursor) {
|
|
380
|
+
let pos = cursor;
|
|
381
|
+
while (pos > 0 && buffer[pos - 1] !== '\n')
|
|
382
|
+
pos--;
|
|
383
|
+
return pos;
|
|
384
|
+
}
|
|
385
|
+
function getLineEnd(buffer, cursor) {
|
|
386
|
+
let pos = cursor;
|
|
387
|
+
while (pos < buffer.length && buffer[pos] !== '\n')
|
|
388
|
+
pos++;
|
|
389
|
+
return pos;
|
|
390
|
+
}
|
|
391
|
+
function getColumnInLine(buffer, cursor) {
|
|
392
|
+
return cursor - getLineStart(buffer, cursor);
|
|
393
|
+
}
|
|
394
|
+
function getCurrentLine(buffer, cursor) {
|
|
395
|
+
const start = getLineStart(buffer, cursor);
|
|
396
|
+
const end = getLineEnd(buffer, cursor);
|
|
397
|
+
return buffer.slice(start, end);
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Format vim help for display
|
|
401
|
+
*/
|
|
402
|
+
export function formatVimHelp() {
|
|
403
|
+
return `
|
|
404
|
+
Vim Mode Commands:
|
|
405
|
+
|
|
406
|
+
Navigation:
|
|
407
|
+
h/l Move left/right
|
|
408
|
+
j/k Move down/up
|
|
409
|
+
w/b Word forward/backward
|
|
410
|
+
0/$ Line start/end
|
|
411
|
+
^ First non-whitespace
|
|
412
|
+
gg/G Go to start/end
|
|
413
|
+
|
|
414
|
+
Mode Switching:
|
|
415
|
+
i Insert before cursor
|
|
416
|
+
a Insert after cursor
|
|
417
|
+
I/A Insert at line start/end
|
|
418
|
+
o/O Open line below/above
|
|
419
|
+
v Visual mode
|
|
420
|
+
Escape Normal mode
|
|
421
|
+
|
|
422
|
+
Editing:
|
|
423
|
+
x Delete character
|
|
424
|
+
dd Delete line
|
|
425
|
+
dw Delete word
|
|
426
|
+
yy Yank (copy) line
|
|
427
|
+
p Paste
|
|
428
|
+
u Undo
|
|
429
|
+
|
|
430
|
+
Commands can be prefixed with count: 3dd deletes 3 lines
|
|
431
|
+
Toggle vim mode with /vim command
|
|
432
|
+
`.trim();
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=vimMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vimMode.js","sourceRoot":"","sources":["../../src/shell/vimMode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ParallelAgentManager - Manages concurrent agent execution
|
|
3
|
+
*
|
|
4
|
+
* Tracks multiple agents running in parallel, their status,
|
|
5
|
+
* progress, and provides UI coordination.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'node:events';
|
|
8
|
+
export interface ParallelAgentState {
|
|
9
|
+
id: string;
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
status: 'pending' | 'running' | 'completed' | 'error';
|
|
13
|
+
startedAt: number;
|
|
14
|
+
completedAt?: number;
|
|
15
|
+
toolUses: number;
|
|
16
|
+
tokensUsed: number;
|
|
17
|
+
currentActivity?: string;
|
|
18
|
+
result?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ParallelAgentProgress {
|
|
22
|
+
agentId: string;
|
|
23
|
+
type: 'tool_start' | 'tool_complete' | 'tokens' | 'activity' | 'complete' | 'error';
|
|
24
|
+
data: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export type ParallelAgentEventType = 'agent:started' | 'agent:progress' | 'agent:completed' | 'agent:error' | 'batch:started' | 'batch:completed';
|
|
27
|
+
/**
|
|
28
|
+
* Manages parallel agent execution and status tracking
|
|
29
|
+
*/
|
|
30
|
+
export declare class ParallelAgentManager extends EventEmitter {
|
|
31
|
+
private agents;
|
|
32
|
+
private batchId;
|
|
33
|
+
private batchStartedAt;
|
|
34
|
+
private expanded;
|
|
35
|
+
/**
|
|
36
|
+
* Start a new batch of parallel agents
|
|
37
|
+
*/
|
|
38
|
+
startBatch(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Register a new agent in the current batch
|
|
41
|
+
*/
|
|
42
|
+
registerAgent(id: string, type: string, description: string): ParallelAgentState;
|
|
43
|
+
/**
|
|
44
|
+
* Mark an agent as running
|
|
45
|
+
*/
|
|
46
|
+
setRunning(id: string, activity?: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Update agent progress
|
|
49
|
+
*/
|
|
50
|
+
updateProgress(id: string, progress: Omit<ParallelAgentProgress, 'agentId'>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Mark an agent as completed
|
|
53
|
+
*/
|
|
54
|
+
setCompleted(id: string, result: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Mark an agent as errored
|
|
57
|
+
*/
|
|
58
|
+
setError(id: string, error: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Check if all agents in batch are complete
|
|
61
|
+
*/
|
|
62
|
+
private checkBatchCompletion;
|
|
63
|
+
/**
|
|
64
|
+
* Toggle expanded view
|
|
65
|
+
*/
|
|
66
|
+
toggleExpanded(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get current expanded state
|
|
69
|
+
*/
|
|
70
|
+
isExpanded(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Get all agents
|
|
73
|
+
*/
|
|
74
|
+
getAgents(): ParallelAgentState[];
|
|
75
|
+
/**
|
|
76
|
+
* Get running agent count
|
|
77
|
+
*/
|
|
78
|
+
getRunningCount(): number;
|
|
79
|
+
/**
|
|
80
|
+
* Check if any agents are running
|
|
81
|
+
*/
|
|
82
|
+
isRunning(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Format agent display for UI
|
|
85
|
+
*/
|
|
86
|
+
formatDisplay(): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Format compact status for status bar
|
|
89
|
+
*/
|
|
90
|
+
formatCompact(): string;
|
|
91
|
+
private getStatusIcon;
|
|
92
|
+
private formatAgentStats;
|
|
93
|
+
/**
|
|
94
|
+
* Clear all agents
|
|
95
|
+
*/
|
|
96
|
+
clear(): void;
|
|
97
|
+
}
|
|
98
|
+
export declare function getParallelAgentManager(): ParallelAgentManager;
|
|
99
|
+
//# sourceMappingURL=parallelAgentManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallelAgentManager.d.ts","sourceRoot":"","sources":["../../src/subagents/parallelAgentManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IACpF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,iBAAiB,CAAC;AAEtB;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAQpB;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB;IAgBhF;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/C;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GAAG,IAAI;IAuBlF;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY9C;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYzC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,IAAI,kBAAkB,EAAE;IAIjC;;OAEG;IACH,eAAe,IAAI,MAAM;IAMzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IA0CzB;;OAEG;IACH,aAAa,IAAI,MAAM;IAkBvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAKD,wBAAgB,uBAAuB,IAAI,oBAAoB,CAK9D"}
|