agent-sh 0.15.7 → 0.15.9

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 (39) hide show
  1. package/dist/agent/agent-loop.d.ts +3 -0
  2. package/dist/agent/agent-loop.js +17 -1
  3. package/dist/agent/events.d.ts +3 -0
  4. package/dist/agent/host-types.d.ts +6 -0
  5. package/dist/agent/index.js +5 -1
  6. package/dist/agent/llm-client.d.ts +2 -0
  7. package/dist/agent/llm-client.js +2 -2
  8. package/dist/agent/providers/openrouter.js +11 -1
  9. package/dist/shell/input-handler.js +5 -3
  10. package/dist/shell/strategies/bash.js +10 -2
  11. package/dist/shell/terminal.d.ts +2 -11
  12. package/dist/shell/terminal.js +37 -19
  13. package/dist/shell/tui-renderer.js +1 -1
  14. package/dist/utils/ansi.d.ts +7 -0
  15. package/dist/utils/ansi.js +20 -0
  16. package/dist/utils/floating-panel.js +5 -4
  17. package/dist/utils/line-editor.js +7 -4
  18. package/examples/extensions/ashi/package.json +1 -1
  19. package/examples/extensions/ashi/src/chat/assistant.ts +3 -1
  20. package/examples/extensions/ashi/src/cli.ts +8 -0
  21. package/examples/extensions/ashi/src/frontend.ts +4 -3
  22. package/examples/extensions/ashi/src/renderers/pi-tui/inline-image.ts +145 -0
  23. package/examples/extensions/ashi/src/renderers/pi-tui/nodes.ts +51 -1
  24. package/examples/extensions/ashi/src/user-shell-intents.ts +4 -1
  25. package/examples/extensions/latex-images.ts +152 -7
  26. package/package.json +1 -1
  27. package/src/agent/agent-loop.ts +17 -1
  28. package/src/agent/events.ts +1 -0
  29. package/src/agent/host-types.ts +2 -0
  30. package/src/agent/index.ts +7 -1
  31. package/src/agent/llm-client.ts +4 -2
  32. package/src/agent/providers/openrouter.ts +10 -1
  33. package/src/shell/input-handler.ts +5 -3
  34. package/src/shell/strategies/bash.ts +10 -2
  35. package/src/shell/terminal.ts +30 -19
  36. package/src/shell/tui-renderer.ts +1 -1
  37. package/src/utils/ansi.ts +21 -0
  38. package/src/utils/floating-panel.ts +5 -4
  39. package/src/utils/line-editor.ts +7 -4
@@ -152,7 +152,7 @@ export class LineEditor {
152
152
  // paste, since typed input arrives one keystroke per chunk in raw mode.
153
153
  if (!this.inPaste && data.length > 1 && /[\r\n]/.test(data)
154
154
  && data.indexOf("\x1b[200~") === -1) {
155
- this.pasteAccum = data.replace(/\r\n?/g, "\n");
155
+ this.pasteAccum = data;
156
156
  actions.push(...this.commitPaste());
157
157
  return actions;
158
158
  }
@@ -263,7 +263,7 @@ export class LineEditor {
263
263
  private consumePasteChunk(data: string): number {
264
264
  const endIdx = data.indexOf(PASTE_END);
265
265
  if (endIdx !== -1) {
266
- this.pasteAccum += data.slice(0, endIdx).replace(/\r/g, "");
266
+ this.pasteAccum += data.slice(0, endIdx);
267
267
  return endIdx;
268
268
  }
269
269
  let suffixLen = 0;
@@ -271,14 +271,17 @@ export class LineEditor {
271
271
  if (data.endsWith(PASTE_END.slice(0, p))) { suffixLen = p; break; }
272
272
  }
273
273
  const safeEnd = data.length - suffixLen;
274
- this.pasteAccum += data.slice(0, safeEnd).replace(/\r/g, "");
274
+ this.pasteAccum += data.slice(0, safeEnd);
275
275
  if (suffixLen > 0) this.pendingSeq = data.slice(safeEnd);
276
276
  return -1;
277
277
  }
278
278
 
279
279
  private commitPaste(): LineEditAction[] {
280
280
  this.inPaste = false;
281
- const accum = this.pasteAccum;
281
+ // Pasted line separators arrive as \n, \r (xterm convention), or \r\n
282
+ // depending on terminal; normalize on the full accumulation so a \r\n
283
+ // pair split across chunks still collapses to one newline.
284
+ const accum = this.pasteAccum.replace(/\r\n?/g, "\n");
282
285
  this.pasteAccum = "";
283
286
  if (!accum) return [];
284
287
  if (accum.indexOf("\n") === -1) {