aether-code 0.33.8 → 0.33.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.
@@ -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.8";
31
+ const VERSION = "0.33.9";
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.8",
3
+ "version": "0.33.9",
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.8";
12
+ const VERSION = "0.33.9";
13
13
  const MODEL_NAME = "Aether Core";
14
14
 
15
15
  const MODEL_ALIASES = {
@@ -238,6 +238,13 @@ function padRight(str, width) {
238
238
  return str + " ".repeat(need);
239
239
  }
240
240
 
241
+ function centerIn(str, width) {
242
+ const visible = stripAnsi(str).length;
243
+ if (visible >= width) return str;
244
+ const left = Math.floor((width - visible) / 2);
245
+ return " ".repeat(left) + str;
246
+ }
247
+
241
248
  function printBanner(state) {
242
249
  const cols = process.stdout.columns || 80;
243
250
  const credits = state.balance != null ? `${state.balance.toLocaleString()} credits` : "";
@@ -256,13 +263,10 @@ function printBanner(state) {
256
263
  const leftW = Math.min(Math.floor(cols * 0.5), 45);
257
264
  const twoCol = cols >= 70;
258
265
 
259
- // ── Top rule with version ──────────────────────────
266
+ // Colored top rule with version (cyan — matches brand)
260
267
  const titleText = " Aether Code v" + VERSION + " ";
261
268
  const titleRuleRight = Math.max(0, ruleW - 3 - titleText.length);
262
- const topRule = c.dim("──" + titleText + "─".repeat(titleRuleRight));
263
-
264
- // Bottom rule
265
- const botRule = c.dim("─".repeat(ruleW));
269
+ const topRule = c.cyan("──" + titleText + "─".repeat(titleRuleRight));
266
270
 
267
271
  let printed = 0;
268
272
  const pr = (s) => { console.log(s); printed++; };
@@ -272,25 +276,28 @@ function printBanner(state) {
272
276
  pr("");
273
277
 
274
278
  if (twoCol) {
275
- pr(" " + padRight(" " + c.bold("Welcome back!"), leftW) + c.bold("Tips for getting started"));
279
+ // Left column: centered welcome + logo. Right column: tips + changelog.
280
+ pr(" " + padRight(centerIn(c.bold("Welcome back!"), leftW), leftW) + c.bold("Tips for getting started"));
276
281
  pr(" " + padRight("", leftW) + c.dim("Ask Aether to build, debug, or refactor code"));
277
- pr(" " + padRight(` ${C}${B} ${C}`, leftW) + "");
278
- pr(" " + padRight(` ${B}${C} ${B}`, leftW) + c.yellow("What's new"));
279
- pr(" " + padRight(` ${C}${B} ${C}`, leftW) + c.dim("Creative thinking words while processing"));
282
+ pr(" " + padRight(centerIn(`${C}${B} ${C}`, leftW), leftW) + "");
283
+ pr(" " + padRight(centerIn(`${B}${C} ${B}`, leftW), leftW) + c.yellow("What's new"));
284
+ pr(" " + padRight(centerIn(`${C}${B} ${C}`, leftW), leftW) + c.dim("Creative thinking words while processing"));
280
285
  pr(" " + padRight("", leftW) + c.dim("Prompt pins to bottom, content scrolls up"));
286
+ pr("");
287
+ // Model + path: centered under left column (full-width rows)
288
+ pr(centerIn(modelLine, leftW));
289
+ pr(centerIn(c.dim(shortenPath(state.cwd, 50)), leftW));
281
290
  } else {
282
- pr(" " + c.bold("Welcome back!"));
291
+ pr(centerIn(c.bold("Welcome back!"), cols - 4));
292
+ pr("");
293
+ pr(centerIn(`${C}${B} ${C}`, cols - 4));
294
+ pr(centerIn(`${B}${C} ${B}`, cols - 4));
295
+ pr(centerIn(`${C}${B} ${C}`, cols - 4));
283
296
  pr("");
284
- pr(` ${C}${B} ${C}`);
285
- pr(` ${B}${C} ${B}`);
286
- pr(` ${C}${B} ${C}`);
297
+ pr(centerIn(modelLine, cols - 4));
298
+ pr(centerIn(c.dim(shortenPath(state.cwd, 50)), cols - 4));
287
299
  }
288
300
 
289
- pr("");
290
- pr(" " + modelLine);
291
- pr(" " + c.dim(shortenPath(state.cwd, 60)));
292
- pr("");
293
- pr(" " + botRule);
294
301
  pr("");
295
302
 
296
303
  return printed;