aether-code 0.35.6 → 0.35.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.
- package/bin/aether-code.js +1 -1
- package/package.json +1 -1
- package/src/repl.js +44 -26
package/bin/aether-code.js
CHANGED
|
@@ -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.35.
|
|
31
|
+
const VERSION = "0.35.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.35.
|
|
3
|
+
"version": "0.35.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/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.35.
|
|
12
|
+
const VERSION = "0.35.7";
|
|
13
13
|
const MODEL_NAME = "Aether Core";
|
|
14
14
|
|
|
15
15
|
const MODEL_ALIASES = {
|
|
@@ -113,17 +113,32 @@ export async function runRepl({ cwd: initialCwd, autoYes: initialAutoYes, unsafe
|
|
|
113
113
|
continue;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
printBanner(state);
|
|
119
|
-
|
|
120
|
-
// Print echo bar right below banner, then wipe old content beneath it
|
|
116
|
+
// Build banner + echo as one buffer, write atomically (no flash, no garbling)
|
|
117
|
+
const bLines = buildBannerLines(state);
|
|
121
118
|
const echoDisplay = line.length > 200 ? line.slice(0, 197) + "..." : line;
|
|
122
119
|
const echoCols = process.stdout.columns || 80;
|
|
123
120
|
const echoLen = echoDisplay.length + 2;
|
|
124
121
|
const echoPad = Math.max(0, echoCols - echoLen);
|
|
125
|
-
|
|
126
|
-
process.stdout.write("\x1b[
|
|
122
|
+
const echoBar = `\x1b[48;5;236m ${echoDisplay}${" ".repeat(echoPad)}\x1b[0m`;
|
|
123
|
+
process.stdout.write("\x1b[2J\x1b[H" + bLines.join("\n") + "\n" + echoBar + "\n");
|
|
124
|
+
|
|
125
|
+
// Draw prompt placeholder at bottom so input box stays visible while agent responds
|
|
126
|
+
const tCols = process.stdout.columns || 80;
|
|
127
|
+
const promptRule = c.cyan(" " + "─".repeat(tCols - 2));
|
|
128
|
+
const promptPrefix = state.autoYes ? c.bgBlue(" ") + " " : c.bgCyan(" ") + " ";
|
|
129
|
+
const promptStatus = state.autoYes
|
|
130
|
+
? "auto-yes mode \xB7 ? for shortcuts \xB7 @file for images"
|
|
131
|
+
: "? for shortcuts \xB7 @file for images";
|
|
132
|
+
const promptRow = (process.stdout.rows || 24) - 3;
|
|
133
|
+
process.stdout.write(
|
|
134
|
+
"\x1b[s" +
|
|
135
|
+
`\x1b[${promptRow};1H` +
|
|
136
|
+
promptRule + "\n" +
|
|
137
|
+
" " + c.cyan("❯") + " \n" +
|
|
138
|
+
promptRule + "\n" +
|
|
139
|
+
promptPrefix + promptStatus +
|
|
140
|
+
"\x1b[u"
|
|
141
|
+
);
|
|
127
142
|
|
|
128
143
|
const t0 = Date.now();
|
|
129
144
|
const result = await runAgent({
|
|
@@ -272,7 +287,7 @@ function centerIn(str, width) {
|
|
|
272
287
|
return " ".repeat(left) + str;
|
|
273
288
|
}
|
|
274
289
|
|
|
275
|
-
function
|
|
290
|
+
function buildBannerLines(state) {
|
|
276
291
|
const cols = process.stdout.columns || 80;
|
|
277
292
|
const credits = state.balance != null ? `${state.balance.toLocaleString()} credits` : "";
|
|
278
293
|
const plan = state.plan && state.plan !== "FREE" ? state.plan : "";
|
|
@@ -295,18 +310,16 @@ function printBanner(state) {
|
|
|
295
310
|
const topRule = c.cyan("──" + titleText + "─".repeat(titleRuleRight));
|
|
296
311
|
|
|
297
312
|
const VL = c.cyan("│");
|
|
313
|
+
const lines = [];
|
|
298
314
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
pr("");
|
|
303
|
-
pr(" " + topRule);
|
|
315
|
+
lines.push("");
|
|
316
|
+
lines.push(" " + topRule);
|
|
304
317
|
|
|
305
318
|
const bottomRule = c.cyan(" " + "─".repeat(ruleW));
|
|
306
319
|
|
|
307
320
|
if (twoCol) {
|
|
308
321
|
const row = (left, right) => {
|
|
309
|
-
|
|
322
|
+
lines.push(" " + padRight(left, leftW) + " " + VL + " " + right);
|
|
310
323
|
};
|
|
311
324
|
|
|
312
325
|
row(centerIn(c.bold("Welcome back!"), leftW), c.bold("Tips for getting started"));
|
|
@@ -319,18 +332,23 @@ function printBanner(state) {
|
|
|
319
332
|
row(centerIn(modelLine, leftW), "");
|
|
320
333
|
row(centerIn(c.dim(shortenPath(state.cwd, 50)), leftW), "");
|
|
321
334
|
} else {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
335
|
+
lines.push("");
|
|
336
|
+
lines.push(centerIn(c.bold("Welcome back!"), cols - 4));
|
|
337
|
+
lines.push("");
|
|
338
|
+
lines.push(centerIn(`${C}${B} ${C}`, cols - 4));
|
|
339
|
+
lines.push(centerIn(`${B}${C} ${B}`, cols - 4));
|
|
340
|
+
lines.push(centerIn(`${C}${B} ${C}`, cols - 4));
|
|
341
|
+
lines.push("");
|
|
342
|
+
lines.push(centerIn(modelLine, cols - 4));
|
|
343
|
+
lines.push(centerIn(c.dim(shortenPath(state.cwd, 50)), cols - 4));
|
|
331
344
|
}
|
|
332
345
|
|
|
333
|
-
|
|
346
|
+
lines.push(bottomRule);
|
|
347
|
+
return lines;
|
|
348
|
+
}
|
|
334
349
|
|
|
335
|
-
|
|
350
|
+
function printBanner(state) {
|
|
351
|
+
const lines = buildBannerLines(state);
|
|
352
|
+
for (const l of lines) console.log(l);
|
|
353
|
+
return lines.length;
|
|
336
354
|
}
|