aether-code 0.6.1 → 0.6.2

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.
@@ -18,7 +18,7 @@ import { generateAndApprovePlan } from "../src/plan.js";
18
18
  import { listSessions, loadSession, loadMostRecent, deleteSession, truncatePreview, sessionsDir } from "../src/sessions.js";
19
19
  import { c, errorLine, divider } from "../src/render.js";
20
20
 
21
- const VERSION = "0.6.1";
21
+ const VERSION = "0.6.2";
22
22
 
23
23
  const HELP = `${c.bold("aether")} — uncensored AI coding agent
24
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aether-code",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Uncensored AI coding agent for your terminal. Type `aether` to launch the interactive REPL — like Claude Code, with no refusal layer.",
5
5
  "homepage": "https://trynoguard.com",
6
6
  "repository": {
package/src/agent.js CHANGED
@@ -113,8 +113,24 @@ export async function runAgent({
113
113
  throw err;
114
114
  }
115
115
 
116
- // End-of-turn: newline + cost meter
117
- if (textOpened) process.stdout.write("\n");
116
+ // End-of-turn: handle three render cases for the assistant message.
117
+ //
118
+ // 1. Deltas streamed normally → close the line we opened with onDelta.
119
+ // 2. No deltas fired BUT the final accumulated content has text → safety
120
+ // net: print it retroactively (defends against any SSE buffering
121
+ // race we haven't seen but could exist).
122
+ // 3. No deltas, no content, no tool calls → the model emitted only
123
+ // internal/whitespace tokens. Show a placeholder so the user isn't
124
+ // confused by a silent turn that still consumed credits.
125
+ const finalText = res.message.content ?? "";
126
+ const hasToolCalls = (res.message.tool_calls?.length ?? 0) > 0;
127
+ if (textOpened) {
128
+ process.stdout.write("\n");
129
+ } else if (finalText.length > 0) {
130
+ process.stdout.write(assistantPrefix() + " " + finalText + "\n");
131
+ } else if (!hasToolCalls) {
132
+ process.stdout.write(assistantPrefix() + " " + c.dim("(empty response)") + "\n");
133
+ }
118
134
  totalCredits += res.creditsCharged ?? 0;
119
135
  totalIn += res.usage?.prompt_tokens ?? 0;
120
136
  totalOut += res.usage?.completion_tokens ?? 0;
package/src/repl.js CHANGED
@@ -16,7 +16,7 @@ import { runSetup } from "./setup.js";
16
16
  import { listSessions, truncatePreview } from "./sessions.js";
17
17
  import { c, errorLine, banner, statusLine } from "./render.js";
18
18
 
19
- const VERSION = "0.6.1";
19
+ const VERSION = "0.6.2";
20
20
  const MODEL_NAME = "Aether Core";
21
21
 
22
22
  const SHORTCUTS = `