@krishivpb60/aether-ai-cli 1.3.9 → 1.3.10
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/HIGHLIGHTS.md +8 -0
- package/package.json +1 -1
- package/src/chat.js +25 -2
- package/src/ui/dashboard.html +1 -1
package/HIGHLIGHTS.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# Aether CLI v1.3.10 Highlights
|
|
2
|
+
- **Microphone Audio Input Fixes & Transcription (`/mic`)**:
|
|
3
|
+
- Adds `/mic` voice command to record audio directly from your microphone inside the terminal session.
|
|
4
|
+
- Implements native zero-dependency audio recording on Windows using the WinMM Multimedia Control Interface (MCI) via PowerShell.
|
|
5
|
+
- Automatically transcribes speech using Google Gemini (base64 inlineData), Groq Whisper, or OpenAI Whisper.
|
|
6
|
+
- Fixes readline interface raw mode pausing blockages to ensure Enter keypress resolves transcription correctly.
|
|
7
|
+
- Populates the active readline prompt buffer directly with the transcribed text so you can review, edit, and send it.
|
|
8
|
+
|
|
1
9
|
# Aether CLI v1.3.9 Highlights
|
|
2
10
|
- **Microphone Audio Input & Transcription (`/mic`)**:
|
|
3
11
|
- Adds `/mic` voice command to record audio directly from your microphone inside the terminal session.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@krishivpb60/aether-ai-cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.10",
|
|
4
4
|
"description": "Aether Core AI — A cyberpunk command-line AI assistant with multi-mode reasoning, 12-node failover mesh, file context injection, and offline fallbacks.",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
package/src/chat.js
CHANGED
|
@@ -2265,18 +2265,41 @@ export async function handleMicInput(ctx) {
|
|
|
2265
2265
|
|
|
2266
2266
|
ctx.rl.pause();
|
|
2267
2267
|
|
|
2268
|
+
const stdin = process.stdin;
|
|
2269
|
+
const wasRaw = stdin.isRaw;
|
|
2270
|
+
stdin.setRawMode(true);
|
|
2271
|
+
stdin.resume();
|
|
2272
|
+
stdin.setEncoding("utf8");
|
|
2273
|
+
|
|
2274
|
+
let aborted = false;
|
|
2268
2275
|
await new Promise((resolve) => {
|
|
2269
2276
|
function onData(chunk) {
|
|
2277
|
+
if (chunk === "\u0003") {
|
|
2278
|
+
aborted = true;
|
|
2279
|
+
stdin.removeListener("data", onData);
|
|
2280
|
+
resolve();
|
|
2281
|
+
return;
|
|
2282
|
+
}
|
|
2270
2283
|
if (chunk === "\r" || chunk === "\n" || chunk === "\r\n") {
|
|
2271
|
-
|
|
2284
|
+
stdin.removeListener("data", onData);
|
|
2272
2285
|
resolve();
|
|
2273
2286
|
}
|
|
2274
2287
|
}
|
|
2275
|
-
|
|
2288
|
+
stdin.on("data", onData);
|
|
2276
2289
|
});
|
|
2277
2290
|
|
|
2291
|
+
stdin.setRawMode(wasRaw);
|
|
2278
2292
|
ctx.rl.resume();
|
|
2279
2293
|
|
|
2294
|
+
if (aborted) {
|
|
2295
|
+
console.log("\n" + label.system + " " + colors.warning("Recording aborted by user.\n"));
|
|
2296
|
+
try {
|
|
2297
|
+
await handle.stop();
|
|
2298
|
+
if (fs.existsSync(wavPath)) { fs.unlinkSync(wavPath); }
|
|
2299
|
+
} catch (e) {}
|
|
2300
|
+
return;
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2280
2303
|
console.log("");
|
|
2281
2304
|
const spinner = createSpinner("transcribe");
|
|
2282
2305
|
spinner.start("Stopping recording and transcribing...");
|