aether-code 0.35.5 → 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 +49 -25
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,16 +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 the echo bar (user's message) right below the banner
|
|
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
|
-
|
|
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
|
+
);
|
|
126
142
|
|
|
127
143
|
const t0 = Date.now();
|
|
128
144
|
const result = await runAgent({
|
|
@@ -156,6 +172,11 @@ export async function runRepl({ cwd: initialCwd, autoYes: initialAutoYes, unsafe
|
|
|
156
172
|
});
|
|
157
173
|
if (stats) console.log(stats);
|
|
158
174
|
console.log("");
|
|
175
|
+
|
|
176
|
+
// Pin prompt to the bottom of the visible window
|
|
177
|
+
const pRows = process.stdout.rows || 24;
|
|
178
|
+
const pRow = pRows - 3;
|
|
179
|
+
process.stdout.write(`\x1b[${pRow};1H`);
|
|
159
180
|
}
|
|
160
181
|
}
|
|
161
182
|
|
|
@@ -266,7 +287,7 @@ function centerIn(str, width) {
|
|
|
266
287
|
return " ".repeat(left) + str;
|
|
267
288
|
}
|
|
268
289
|
|
|
269
|
-
function
|
|
290
|
+
function buildBannerLines(state) {
|
|
270
291
|
const cols = process.stdout.columns || 80;
|
|
271
292
|
const credits = state.balance != null ? `${state.balance.toLocaleString()} credits` : "";
|
|
272
293
|
const plan = state.plan && state.plan !== "FREE" ? state.plan : "";
|
|
@@ -289,18 +310,16 @@ function printBanner(state) {
|
|
|
289
310
|
const topRule = c.cyan("──" + titleText + "─".repeat(titleRuleRight));
|
|
290
311
|
|
|
291
312
|
const VL = c.cyan("│");
|
|
313
|
+
const lines = [];
|
|
292
314
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
pr("");
|
|
297
|
-
pr(" " + topRule);
|
|
315
|
+
lines.push("");
|
|
316
|
+
lines.push(" " + topRule);
|
|
298
317
|
|
|
299
318
|
const bottomRule = c.cyan(" " + "─".repeat(ruleW));
|
|
300
319
|
|
|
301
320
|
if (twoCol) {
|
|
302
321
|
const row = (left, right) => {
|
|
303
|
-
|
|
322
|
+
lines.push(" " + padRight(left, leftW) + " " + VL + " " + right);
|
|
304
323
|
};
|
|
305
324
|
|
|
306
325
|
row(centerIn(c.bold("Welcome back!"), leftW), c.bold("Tips for getting started"));
|
|
@@ -313,18 +332,23 @@ function printBanner(state) {
|
|
|
313
332
|
row(centerIn(modelLine, leftW), "");
|
|
314
333
|
row(centerIn(c.dim(shortenPath(state.cwd, 50)), leftW), "");
|
|
315
334
|
} else {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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));
|
|
325
344
|
}
|
|
326
345
|
|
|
327
|
-
|
|
346
|
+
lines.push(bottomRule);
|
|
347
|
+
return lines;
|
|
348
|
+
}
|
|
328
349
|
|
|
329
|
-
|
|
350
|
+
function printBanner(state) {
|
|
351
|
+
const lines = buildBannerLines(state);
|
|
352
|
+
for (const l of lines) console.log(l);
|
|
353
|
+
return lines.length;
|
|
330
354
|
}
|