aether-code 0.36.5 → 0.36.7

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.
@@ -28,7 +28,7 @@ import {
28
28
  import readline from "node:readline";
29
29
  import { c, errorLine, divider, setTerminalTitle } from "../src/render.js";
30
30
 
31
- const VERSION = "0.36.5";
31
+ const VERSION = "0.36.7";
32
32
 
33
33
  /**
34
34
  * Try to start MCP servers from ~/.aether/mcp.json. Returns a started
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aether-code",
3
- "version": "0.36.5",
3
+ "version": "0.36.7",
4
4
  "description": "Uncensored AI coding agent for your terminal — Claude Code alternative with MCP support. Reads code, writes files, runs commands. Drives IDA Pro, Roblox Studio, Wireshark, Blender, and any MCP server. No refusal layer.",
5
5
  "homepage": "https://trynoguard.com",
6
6
  "repository": {
package/src/box-input.js CHANGED
@@ -61,7 +61,7 @@ function grabClipboardImage() {
61
61
  return null;
62
62
  }
63
63
 
64
- export function promptBox({ history = [], placeholder = "", mode = "review", suppressEcho = false } = {}) {
64
+ export function promptBox({ history = [], placeholder = "", mode = "review", suppressEcho = false, onResize = null } = {}) {
65
65
  return new Promise((resolve) => {
66
66
  if (!process.stdin.isTTY) {
67
67
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
@@ -78,6 +78,7 @@ export function promptBox({ history = [], placeholder = "", mode = "review", sup
78
78
  let lastSigint = 0;
79
79
  const clipImages = [];
80
80
  let resizeHandler = null;
81
+ let resizeTimer = null;
81
82
 
82
83
  const termW = () => Math.max(30, (process.stdout.columns || 80) - 2);
83
84
 
@@ -133,6 +134,7 @@ export function promptBox({ history = [], placeholder = "", mode = "review", sup
133
134
  };
134
135
 
135
136
  const finish = (result) => {
137
+ if (resizeTimer) { clearTimeout(resizeTimer); resizeTimer = null; }
136
138
  if (resizeHandler) process.stdout.removeListener("resize", resizeHandler);
137
139
  process.stdin.removeListener("keypress", onKey);
138
140
  if (process.stdin.isTTY) process.stdin.setRawMode(false);
@@ -218,11 +220,16 @@ export function promptBox({ history = [], placeholder = "", mode = "review", sup
218
220
  process.stdin.on("keypress", onKey);
219
221
  draw(true);
220
222
  resizeHandler = () => {
221
- process.stdout.write(`\x1b[${drawn}A\x1b[J`);
222
- let vr = process.stdout.rows || 24;
223
- if (process.platform === "win32" && !process.env.WT_SESSION && vr > 60) vr = 24;
224
- process.stdout.write(`\x1b[${Math.max(1, vr - 3)};1H`);
225
- draw(true);
223
+ if (resizeTimer) clearTimeout(resizeTimer);
224
+ resizeTimer = setTimeout(() => {
225
+ resizeTimer = null;
226
+ if (onResize) {
227
+ onResize();
228
+ } else {
229
+ process.stdout.write(`\x1b[${drawn}A\x1b[J`);
230
+ }
231
+ draw(true);
232
+ }, 120);
226
233
  };
227
234
  process.stdout.on("resize", resizeHandler);
228
235
  });
package/src/repl.js CHANGED
@@ -9,7 +9,7 @@ import { c, errorLine, turnStats } from "./render.js";
9
9
  import { autoUpdate } from "./update-check.js";
10
10
  import { promptBox, EXIT_SIGNAL } from "./box-input.js";
11
11
 
12
- const VERSION = "0.36.5";
12
+ const VERSION = "0.36.7";
13
13
  const MODEL_NAME = "Aether Core";
14
14
 
15
15
  const MODEL_ALIASES = {
@@ -123,8 +123,15 @@ export async function runRepl({ cwd: initialCwd, autoYes: initialAutoYes, unsafe
123
123
 
124
124
  const inputHistory = [];
125
125
 
126
+ const handlePromptResize = () => {
127
+ const vr = getVisibleRows();
128
+ process.stdout.write("\x1b[2J\x1b[H");
129
+ printBanner(state);
130
+ process.stdout.write(`\x1b[${Math.max(1, vr - 3)};1H`);
131
+ };
132
+
126
133
  while (true) {
127
- const raw = await promptBox({ history: inputHistory, mode: state.autoYes ? "auto-yes" : "review", suppressEcho: true });
134
+ const raw = await promptBox({ history: inputHistory, mode: state.autoYes ? "auto-yes" : "review", suppressEcho: true, onResize: handlePromptResize });
128
135
  if (raw === EXIT_SIGNAL) { console.log(c.gray("bye.")); return; }
129
136
  const line = (raw ?? "").trim();
130
137
  if (!line) continue;