erosolar-cli 2.1.264 → 2.1.266

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 (32) hide show
  1. package/dist/capabilities/orchestrationCapability.d.ts.map +1 -1
  2. package/dist/capabilities/orchestrationCapability.js +51 -0
  3. package/dist/capabilities/orchestrationCapability.js.map +1 -1
  4. package/dist/core/completeAttackOrchestrator.d.ts.map +1 -1
  5. package/dist/core/completeAttackOrchestrator.js +2 -1
  6. package/dist/core/completeAttackOrchestrator.js.map +1 -1
  7. package/dist/core/realExecutionOrchestrator.d.ts +93 -0
  8. package/dist/core/realExecutionOrchestrator.d.ts.map +1 -0
  9. package/dist/core/realExecutionOrchestrator.js +306 -0
  10. package/dist/core/realExecutionOrchestrator.js.map +1 -0
  11. package/dist/core/unifiedRealOrchestrator.d.ts +126 -0
  12. package/dist/core/unifiedRealOrchestrator.d.ts.map +1 -0
  13. package/dist/core/unifiedRealOrchestrator.js +381 -0
  14. package/dist/core/unifiedRealOrchestrator.js.map +1 -0
  15. package/dist/shell/interactiveShell.d.ts +5 -0
  16. package/dist/shell/interactiveShell.d.ts.map +1 -1
  17. package/dist/shell/interactiveShell.js +25 -8
  18. package/dist/shell/interactiveShell.js.map +1 -1
  19. package/dist/tools/offensiveTransparencyTools.d.ts.map +1 -1
  20. package/dist/tools/offensiveTransparencyTools.js +8 -2
  21. package/dist/tools/offensiveTransparencyTools.js.map +1 -1
  22. package/dist/tools/taoTools.js +4 -7
  23. package/dist/tools/taoTools.js.map +1 -1
  24. package/dist/ui/UnifiedUIRenderer.d.ts +15 -1
  25. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  26. package/dist/ui/UnifiedUIRenderer.js +95 -53
  27. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  28. package/dist/ui/toolDisplay.d.ts +1 -1
  29. package/dist/ui/toolDisplay.d.ts.map +1 -1
  30. package/dist/ui/toolDisplay.js +5 -26
  31. package/dist/ui/toolDisplay.js.map +1 -1
  32. package/package.json +1 -1
@@ -134,6 +134,16 @@ export declare class UnifiedUIRenderer extends EventEmitter {
134
134
  private setupInputHandlers;
135
135
  private emitInputChange;
136
136
  private handleKeypress;
137
+ /**
138
+ * Ensure horizontal cursor position stays within the visible input window.
139
+ * Prevents jumps when using left/right arrows on long lines.
140
+ */
141
+ private ensureCursorVisible;
142
+ /**
143
+ * Parse raw escape sequences when readline doesn't populate key metadata.
144
+ * Prevents control codes (e.g., ^[[200~) from leaking into the buffer.
145
+ */
146
+ private parseEscapeSequence;
137
147
  /**
138
148
  * Queue characters for deferred insertion. This prevents visual "leak" of
139
149
  * pasted content by holding characters until we're confident it's not a paste.
@@ -337,9 +347,13 @@ export declare class UnifiedUIRenderer extends EventEmitter {
337
347
  * Format: ⏵⏵ accept edits on (shift+tab to cycle)
338
348
  * Returns wrapped lines to ensure all toggles (including RL) are visible below the chat box.
339
349
  */
350
+ /**
351
+ * Build unified toggle status line with color-coded states and integrated explanations.
352
+ * Single-line format: icon status [hotkey] — explanation | next toggle...
353
+ */
340
354
  private buildInlineToggleLine;
341
355
  /**
342
- * Build a short legend that explains each toggle in plain language.
356
+ * @deprecated Legend is now integrated into buildInlineToggleLine for unified display
343
357
  */
344
358
  private buildToggleLegend;
345
359
  private buildChromeLines;
@@ -1 +1 @@
1
- {"version":3,"file":"UnifiedUIRenderer.d.ts","sourceRoot":"","sources":["../../src/ui/UnifiedUIRenderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnifiedUIRenderer.d.ts","sourceRoot":"","sources":["../../src/ui/UnifiedUIRenderer.ts"],"names":[],"mappings":"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"}
@@ -316,36 +316,40 @@ export class UnifiedUIRenderer extends EventEmitter {
316
316
  this.emit('change', payload);
317
317
  }
318
318
  handleKeypress(str, key) {
319
- if (!key)
319
+ // Normalize missing key metadata (common for some terminals emitting raw escape codes)
320
+ const normalizedKey = key ?? this.parseEscapeSequence(str);
321
+ const keyForPaste = normalizedKey ?? (str ? { sequence: str } : key);
322
+ if (this.handleBracketedPaste(str, keyForPaste)) {
320
323
  return;
321
- if (this.handleBracketedPaste(str, key)) {
324
+ }
325
+ if (this.handlePlainPaste(str, keyForPaste)) {
322
326
  return;
323
327
  }
324
- if (this.handlePlainPaste(str, key)) {
328
+ if (!normalizedKey) {
325
329
  return;
326
330
  }
327
- if (this.inputCapture && key.ctrl && (key.name === 'c' || key.name === 'd')) {
331
+ if (this.inputCapture && normalizedKey.ctrl && (normalizedKey.name === 'c' || normalizedKey.name === 'd')) {
328
332
  this.cancelInputCapture(new Error('Input capture cancelled'));
329
333
  this.clearBuffer();
330
334
  return;
331
335
  }
332
- if (key.ctrl && key.shift && key.name?.toLowerCase() === 'a') {
336
+ if (normalizedKey.ctrl && normalizedKey.shift && normalizedKey.name?.toLowerCase() === 'a') {
333
337
  this.emit('toggle-critical-approval');
334
338
  return;
335
339
  }
336
- if (key.ctrl && key.shift && key.name?.toLowerCase() === 'g') {
340
+ if (normalizedKey.ctrl && normalizedKey.shift && normalizedKey.name?.toLowerCase() === 'g') {
337
341
  this.emit('toggle-auto-continue');
338
342
  return;
339
343
  }
340
- if (key.ctrl && key.shift && key.name?.toLowerCase() === 'd') {
344
+ if (normalizedKey.ctrl && normalizedKey.shift && normalizedKey.name?.toLowerCase() === 'd') {
341
345
  this.emit('toggle-dual-rl');
342
346
  return;
343
347
  }
344
- if (key.ctrl && key.name?.toLowerCase() === 'r') {
348
+ if (normalizedKey.ctrl && normalizedKey.name?.toLowerCase() === 'r') {
345
349
  this.emit('resume');
346
350
  return;
347
351
  }
348
- if (key.ctrl && key.name === 'c') {
352
+ if (normalizedKey.ctrl && normalizedKey.name === 'c') {
349
353
  // Ctrl+C behavior:
350
354
  // 1. If buffer has text: clear it first, then notify shell
351
355
  // 2. If buffer is empty: let shell decide to pause AI or quit
@@ -404,7 +408,7 @@ export class UnifiedUIRenderer extends EventEmitter {
404
408
  this.submitText(this.buffer);
405
409
  return;
406
410
  }
407
- if (key.name === 'backspace') {
411
+ if (normalizedKey.name === 'backspace') {
408
412
  if (this.collapsedPaste) {
409
413
  this.collapsedPaste = null;
410
414
  this.renderPrompt();
@@ -420,7 +424,7 @@ export class UnifiedUIRenderer extends EventEmitter {
420
424
  }
421
425
  return;
422
426
  }
423
- if (key.name === 'delete') {
427
+ if (normalizedKey.name === 'delete') {
424
428
  if (this.cursor < this.buffer.length) {
425
429
  this.buffer = this.buffer.slice(0, this.cursor) + this.buffer.slice(this.cursor + 1);
426
430
  this.updateSuggestions();
@@ -429,23 +433,25 @@ export class UnifiedUIRenderer extends EventEmitter {
429
433
  }
430
434
  return;
431
435
  }
432
- if (key.name === 'left') {
436
+ if (normalizedKey.name === 'left') {
433
437
  if (this.cursor > 0) {
434
438
  this.cursor--;
439
+ this.ensureCursorVisible();
435
440
  this.renderPrompt();
436
441
  this.emitInputChange();
437
442
  }
438
443
  return;
439
444
  }
440
- if (key.name === 'right') {
445
+ if (normalizedKey.name === 'right') {
441
446
  if (this.cursor < this.buffer.length) {
442
447
  this.cursor++;
448
+ this.ensureCursorVisible();
443
449
  this.renderPrompt();
444
450
  this.emitInputChange();
445
451
  }
446
452
  return;
447
453
  }
448
- if (key.name === 'up') {
454
+ if (normalizedKey.name === 'up') {
449
455
  if (this.navigateSuggestions(-1)) {
450
456
  return;
451
457
  }
@@ -472,7 +478,7 @@ export class UnifiedUIRenderer extends EventEmitter {
472
478
  }
473
479
  return;
474
480
  }
475
- if (key.name === 'down') {
481
+ if (normalizedKey.name === 'down') {
476
482
  if (this.navigateSuggestions(1)) {
477
483
  return;
478
484
  }
@@ -498,16 +504,51 @@ export class UnifiedUIRenderer extends EventEmitter {
498
504
  }
499
505
  return;
500
506
  }
501
- if (key.name === 'tab') {
507
+ if (normalizedKey.name === 'tab') {
502
508
  if (this.applySuggestion(false))
503
509
  return;
504
510
  return;
505
511
  }
506
- if (str && !key.ctrl && !key.meta) {
512
+ if (str && !normalizedKey.ctrl && !normalizedKey.meta) {
507
513
  // Defer insertion to allow paste detection window to catch rapid input
508
514
  this.queuePendingInsert(str);
509
515
  }
510
516
  }
517
+ /**
518
+ * Ensure horizontal cursor position stays within the visible input window.
519
+ * Prevents jumps when using left/right arrows on long lines.
520
+ */
521
+ ensureCursorVisible() {
522
+ const maxWidth = Math.max(10, this.safeWidth() - 12); // margin for prompt/toggles and padding
523
+ // If cursor is left of current window, shift window left
524
+ if (this.cursor < this.inputRenderOffset) {
525
+ this.inputRenderOffset = this.cursor;
526
+ return;
527
+ }
528
+ // If cursor is beyond visible window, shift window right
529
+ if (this.cursor - this.inputRenderOffset >= maxWidth) {
530
+ this.inputRenderOffset = this.cursor - maxWidth + 1;
531
+ }
532
+ }
533
+ /**
534
+ * Parse raw escape sequences when readline doesn't populate key metadata.
535
+ * Prevents control codes (e.g., ^[[200~) from leaking into the buffer.
536
+ */
537
+ parseEscapeSequence(sequence) {
538
+ if (!sequence)
539
+ return null;
540
+ const map = {
541
+ '\x1b[A': { name: 'up', sequence },
542
+ '\x1b[B': { name: 'down', sequence },
543
+ '\x1b[C': { name: 'right', sequence },
544
+ '\x1b[D': { name: 'left', sequence },
545
+ '\x1b[H': { name: 'home', sequence },
546
+ '\x1b[F': { name: 'end', sequence },
547
+ '\x1b[200~': { name: 'paste-start', sequence },
548
+ '\x1b[201~': { name: 'paste-end', sequence },
549
+ };
550
+ return map[sequence] ?? null;
551
+ }
511
552
  /**
512
553
  * Queue characters for deferred insertion. This prevents visual "leak" of
513
554
  * pasted content by holding characters until we're confident it's not a paste.
@@ -2148,52 +2189,53 @@ export class UnifiedUIRenderer extends EventEmitter {
2148
2189
  * Format: ⏵⏵ accept edits on (shift+tab to cycle)
2149
2190
  * Returns wrapped lines to ensure all toggles (including RL) are visible below the chat box.
2150
2191
  */
2192
+ /**
2193
+ * Build unified toggle status line with color-coded states and integrated explanations.
2194
+ * Single-line format: icon status [hotkey] — explanation | next toggle...
2195
+ */
2151
2196
  buildInlineToggleLine() {
2152
- const parts = [];
2153
- const format = (label, value, hotkey) => `${theme.ui.muted(label)} ${theme.info(value)}${hotkey ? theme.ui.muted(` [${hotkey.toUpperCase()}]`) : ''}`;
2154
2197
  const autoVerifyActive = this.toggleState.autoContinueEnabled ?? false;
2155
2198
  const verificationActive = this.toggleState.verificationEnabled || autoVerifyActive;
2156
- // RL mode (first so it never gets truncated)
2157
- const rlIcon = this.toggleState.dualRlEnabled ? '🤖' : '⚡';
2158
- const rlLabel = this.toggleState.dualRlEnabled ? 'RL mode' : 'single';
2159
- const rlStatus = this.toggleState.dualRlEnabled ? theme.success('on') : theme.ui.muted('off');
2160
- parts.push(`${rlIcon} ${rlLabel} ${rlStatus} ${theme.ui.muted('[CTRL+SHIFT+D]')}`);
2161
- // Edit acceptance mode - Claude Code style with ⏵⏵
2162
- const editIcon = '⏵⏵';
2163
- const editState = verificationActive ? 'verify edits' : 'accept edits';
2164
- const editStatus = verificationActive ? theme.warning('on') : theme.success('on');
2165
- parts.push(`${theme.ui.muted(editIcon)} ${editState} ${editStatus} ${theme.ui.muted('[SHIFT+TAB]')}`);
2166
- // Verification toggle
2167
- const verifyLabel = autoVerifyActive
2168
- ? 'verify on (auto)'
2169
- : verificationActive
2170
- ? 'verify on'
2171
- : 'verify off';
2172
- parts.push(format('verify', verifyLabel, this.toggleState.verificationHotkey));
2173
- // Approvals toggle
2174
2199
  const approvalMode = this.toggleState.criticalApprovalMode || 'auto';
2175
- const approvalsLabel = approvalMode === 'approval' ? 'approvals ask' : 'approvals auto';
2176
- parts.push(format('approvals', approvalsLabel, this.toggleState.criticalApprovalHotkey));
2177
- // Thinking mode
2178
2200
  const thinkingLabel = (this.toggleState.thinkingModeLabel || 'balanced').trim().toLowerCase();
2179
- const thinkingDisplay = thinkingLabel === 'extended' ? 'thinking deep' : `thinking ${thinkingLabel || 'balanced'}`;
2180
- parts.push(format('thinking', thinkingDisplay, this.toggleState.thinkingHotkey));
2201
+ // Build unified toggle segments with color-coded status and inline explanation
2202
+ const toggles = [];
2203
+ // RL mode: 🤖 on [CTRL+SHIFT+D] — multi-agent loop
2204
+ const rlOn = this.toggleState.dualRlEnabled;
2205
+ const rlIcon = rlOn ? '🤖' : '⚡';
2206
+ const rlStatus = rlOn ? theme.success('RL on') : theme.ui.muted('RL off');
2207
+ const rlExplain = rlOn ? 'multi-agent loop' : 'one-pass agent';
2208
+ toggles.push(`${rlIcon} ${rlStatus} ${theme.ui.muted('[CTRL+SHIFT+D]')} ${theme.ui.muted('—')} ${theme.ui.muted(rlExplain)}`);
2209
+ // Edit mode: ⏵⏵ accept/verify [SHIFT+TAB] — explanation
2210
+ const editIcon = '⏵⏵';
2211
+ const editStatus = verificationActive ? theme.warning('verify') : theme.success('accept');
2212
+ const editExplain = verificationActive ? 'gate edits' : 'apply directly';
2213
+ toggles.push(`${theme.ui.muted(editIcon)} ${editStatus} ${theme.ui.muted('[SHIFT+TAB]')} ${theme.ui.muted('—')} ${theme.ui.muted(editExplain)}`);
2214
+ // Verify: on/off/auto [CTRL+SHIFT+V]
2215
+ const verifyStatus = autoVerifyActive
2216
+ ? theme.info('auto')
2217
+ : verificationActive
2218
+ ? theme.warning('on')
2219
+ : theme.ui.muted('off');
2220
+ toggles.push(`${theme.ui.muted('verify')} ${verifyStatus} ${theme.ui.muted(`[${(this.toggleState.verificationHotkey || 'CTRL+SHIFT+V').toUpperCase()}]`)}`);
2221
+ // Approvals: auto/ask [CTRL+SHIFT+A]
2222
+ const approvalsStatus = approvalMode === 'approval' ? theme.warning('ask') : theme.success('auto');
2223
+ const approvalsExplain = approvalMode === 'approval' ? 'prompt for all' : 'low-risk auto';
2224
+ toggles.push(`${theme.ui.muted('approvals')} ${approvalsStatus} ${theme.ui.muted(`[${(this.toggleState.criticalApprovalHotkey || 'CTRL+SHIFT+A').toUpperCase()}]`)} ${theme.ui.muted('—')} ${theme.ui.muted(approvalsExplain)}`);
2225
+ // Thinking: balanced/deep [TAB]
2226
+ const thinkingIsDeep = thinkingLabel === 'extended' || thinkingLabel === 'deep';
2227
+ const thinkingStatus = thinkingIsDeep ? theme.info('deep') : theme.ui.muted('balanced');
2228
+ const thinkingExplain = thinkingIsDeep ? 'richer reasoning' : 'concise';
2229
+ toggles.push(`${theme.ui.muted('thinking')} ${thinkingStatus} ${theme.ui.muted(`[${(this.toggleState.thinkingHotkey || 'TAB').toUpperCase()}]`)} ${theme.ui.muted('—')} ${theme.ui.muted(thinkingExplain)}`);
2181
2230
  const maxWidth = Math.max(10, this.safeWidth() - 2);
2182
- return this.wrapSegments(parts, maxWidth);
2231
+ return this.wrapSegments(toggles, maxWidth);
2183
2232
  }
2184
2233
  /**
2185
- * Build a short legend that explains each toggle in plain language.
2234
+ * @deprecated Legend is now integrated into buildInlineToggleLine for unified display
2186
2235
  */
2187
2236
  buildToggleLegend() {
2188
- const items = [];
2189
- const add = (label, text) => items.push(`${theme.ui.muted(label)} ${theme.ui.muted('=')} ${theme.info(text)}`);
2190
- add('RL mode', 'on = reinforcement-style multi-agent loop; off/single = one-pass agent');
2191
- add('Verify', 'on/auto = gate edits with verification; off = apply edits directly');
2192
- add('Auto-continue', 'on = continue through steps without pausing; off = wait between steps');
2193
- add('Approvals', 'auto = approve low-risk; ask = prompt for critical actions');
2194
- add('Thinking', 'balanced = concise; deep = richer reasoning output');
2195
- const maxWidth = Math.max(10, this.safeWidth() - 2);
2196
- return this.wrapSegments(items, maxWidth);
2237
+ // Legend explanations now integrated directly into toggle line
2238
+ return [];
2197
2239
  }
2198
2240
  buildChromeLines() {
2199
2241
  const maxWidth = this.safeWidth();