aether-code 0.35.6 → 0.35.8
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 +46 -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.8";
|
|
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.8",
|
|
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.8";
|
|
13
13
|
const MODEL_NAME = "Aether Core";
|
|
14
14
|
|
|
15
15
|
const MODEL_ALIASES = {
|
|
@@ -113,17 +113,34 @@ 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 blk = (code) => `\x1b[${code}m \x1b[0m`;
|
|
129
|
+
const promptPrefix = blk(46) + blk(44);
|
|
130
|
+
const promptStatus = c.dim(
|
|
131
|
+
" " + (state.autoYes ? "auto-yes" : "review") + " mode" +
|
|
132
|
+
" \xB7 ? for shortcuts \xB7 @file for images"
|
|
133
|
+
);
|
|
134
|
+
const promptRow = (process.stdout.rows || 24) - 3;
|
|
135
|
+
process.stdout.write(
|
|
136
|
+
"\x1b[s" +
|
|
137
|
+
`\x1b[${promptRow};1H` +
|
|
138
|
+
promptRule + "\n" +
|
|
139
|
+
" " + c.cyan("❯") + " \n" +
|
|
140
|
+
promptRule + "\n" +
|
|
141
|
+
promptPrefix + promptStatus +
|
|
142
|
+
"\x1b[u"
|
|
143
|
+
);
|
|
127
144
|
|
|
128
145
|
const t0 = Date.now();
|
|
129
146
|
const result = await runAgent({
|
|
@@ -272,7 +289,7 @@ function centerIn(str, width) {
|
|
|
272
289
|
return " ".repeat(left) + str;
|
|
273
290
|
}
|
|
274
291
|
|
|
275
|
-
function
|
|
292
|
+
function buildBannerLines(state) {
|
|
276
293
|
const cols = process.stdout.columns || 80;
|
|
277
294
|
const credits = state.balance != null ? `${state.balance.toLocaleString()} credits` : "";
|
|
278
295
|
const plan = state.plan && state.plan !== "FREE" ? state.plan : "";
|
|
@@ -295,18 +312,16 @@ function printBanner(state) {
|
|
|
295
312
|
const topRule = c.cyan("──" + titleText + "─".repeat(titleRuleRight));
|
|
296
313
|
|
|
297
314
|
const VL = c.cyan("│");
|
|
315
|
+
const lines = [];
|
|
298
316
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
pr("");
|
|
303
|
-
pr(" " + topRule);
|
|
317
|
+
lines.push("");
|
|
318
|
+
lines.push(" " + topRule);
|
|
304
319
|
|
|
305
320
|
const bottomRule = c.cyan(" " + "─".repeat(ruleW));
|
|
306
321
|
|
|
307
322
|
if (twoCol) {
|
|
308
323
|
const row = (left, right) => {
|
|
309
|
-
|
|
324
|
+
lines.push(" " + padRight(left, leftW) + " " + VL + " " + right);
|
|
310
325
|
};
|
|
311
326
|
|
|
312
327
|
row(centerIn(c.bold("Welcome back!"), leftW), c.bold("Tips for getting started"));
|
|
@@ -319,18 +334,23 @@ function printBanner(state) {
|
|
|
319
334
|
row(centerIn(modelLine, leftW), "");
|
|
320
335
|
row(centerIn(c.dim(shortenPath(state.cwd, 50)), leftW), "");
|
|
321
336
|
} else {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
337
|
+
lines.push("");
|
|
338
|
+
lines.push(centerIn(c.bold("Welcome back!"), cols - 4));
|
|
339
|
+
lines.push("");
|
|
340
|
+
lines.push(centerIn(`${C}${B} ${C}`, cols - 4));
|
|
341
|
+
lines.push(centerIn(`${B}${C} ${B}`, cols - 4));
|
|
342
|
+
lines.push(centerIn(`${C}${B} ${C}`, cols - 4));
|
|
343
|
+
lines.push("");
|
|
344
|
+
lines.push(centerIn(modelLine, cols - 4));
|
|
345
|
+
lines.push(centerIn(c.dim(shortenPath(state.cwd, 50)), cols - 4));
|
|
331
346
|
}
|
|
332
347
|
|
|
333
|
-
|
|
348
|
+
lines.push(bottomRule);
|
|
349
|
+
return lines;
|
|
350
|
+
}
|
|
334
351
|
|
|
335
|
-
|
|
352
|
+
function printBanner(state) {
|
|
353
|
+
const lines = buildBannerLines(state);
|
|
354
|
+
for (const l of lines) console.log(l);
|
|
355
|
+
return lines.length;
|
|
336
356
|
}
|