aether-code 0.33.3 → 0.33.4

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.33.3";
31
+ const VERSION = "0.33.4";
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.33.3",
3
+ "version": "0.33.4",
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/repl.js CHANGED
@@ -9,7 +9,7 @@ import { c, errorLine } 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.33.3";
12
+ const VERSION = "0.33.4";
13
13
  const MODEL_NAME = "Aether Core";
14
14
 
15
15
  const MODEL_ALIASES = {
@@ -77,10 +77,21 @@ export async function runRepl({ cwd: initialCwd, autoYes: initialAutoYes, unsafe
77
77
  } catch { /* tolerate */ }
78
78
  }
79
79
 
80
+ // Clear screen — clean start, no leftover shell text (matches Claude Code)
81
+ process.stdout.write("\x1b[2J\x1b[H");
82
+
80
83
  printBanner(state);
84
+
81
85
  const updateMsg = await updatePromise;
82
- if (updateMsg) console.log(updateMsg);
83
- console.log("");
86
+ let extraLines = 0;
87
+ if (updateMsg) { console.log(updateMsg); extraLines++; }
88
+
89
+ // Push prompt to bottom of screen — big empty gap like Claude Code
90
+ const rows = process.stdout.rows || 24;
91
+ const bannerLines = 5; // 1 blank + 3 logo lines + 1 blank after
92
+ const promptLines = 2; // "> " input + status bar
93
+ const filler = Math.max(0, rows - bannerLines - extraLines - promptLines - 1);
94
+ for (let i = 0; i < filler; i++) console.log("");
84
95
 
85
96
  const inputHistory = [];
86
97
 
@@ -152,7 +163,7 @@ async function handleSlash(line, state) {
152
163
  state.plan = me.plan || "FREE";
153
164
  console.log(
154
165
  c.cyan(`balance: ${me.balance.toLocaleString()} credits`) +
155
- c.gray(` · plan: ${me.plan || "FREE"} (${me.planCredits ?? 0} plan + ${me.topupCredits ?? 0} topup)`),
166
+ c.gray(` \xB7 plan: ${me.plan || "FREE"} (${me.planCredits ?? 0} plan + ${me.topupCredits ?? 0} topup)`),
156
167
  );
157
168
  } catch (err) {
158
169
  console.log(errorLine(err.message || String(err)));
@@ -219,28 +230,22 @@ function printBanner(state) {
219
230
  const credits = state.balance != null ? `${state.balance.toLocaleString()} credits` : "";
220
231
  const plan = state.plan && state.plan !== "FREE" ? state.plan : "";
221
232
 
222
- // Block logo — CP437-safe colored squares, like Claude Code's logo
223
- const b1 = c.cyan("\xDB\xDB"); // ██ full blocks
224
- const b2 = c.blue("\xDB\xDB"); // ██ darker accent
225
- const gap = " ";
233
+ // Block logo using ANSI background colors — renders correctly in ANY terminal.
234
+ // Each block = 2 spaces with colored background. No special chars needed.
235
+ const blk = (code) => `\x1b[${code}m \x1b[0m`;
236
+ const C = blk(46); // cyan background
237
+ const B = blk(44); // blue background
226
238
 
227
- // 3-line logo + text, no boxes — matches Claude Code layout
228
- console.log("");
229
- console.log(
230
- " " + b1 + " " + b2 + gap +
231
- c.bold("Aether Code") + " " + c.dim("v" + VERSION),
232
- );
239
+ const gap = " ";
233
240
 
234
241
  const modelParts = [state.modelName];
235
242
  if (credits) modelParts.push(credits);
236
243
  if (plan) modelParts.push(c.cyan(plan));
237
- console.log(
238
- " " + b2 + " " + b1 + gap +
239
- modelParts.join(c.dim(" \xB7 ")),
240
- );
241
-
242
- console.log(
243
- " " + b1 + " " + b2 + gap +
244
- c.dim(shortenPath(state.cwd, 60)),
245
- );
244
+ const modelLine = modelParts.join(c.dim(" \xB7 "));
245
+
246
+ console.log("");
247
+ console.log(` ${C}${B} ${C}${gap}${c.bold("Aether Code")} ${c.dim("v" + VERSION)}`);
248
+ console.log(` ${B}${C} ${B}${gap}${modelLine}`);
249
+ console.log(` ${C}${B} ${C}${gap}${c.dim(shortenPath(state.cwd, 55))}`);
250
+ console.log("");
246
251
  }