aura-code 0.3.7 → 0.6.3
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/README.md +56 -4
- package/dist/agent/compactor.d.ts +26 -0
- package/dist/agent/compactor.js +156 -0
- package/dist/agent/compactor.js.map +1 -0
- package/dist/agent/context.d.ts +4 -0
- package/dist/agent/context.js +38 -0
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/design.d.ts +17 -0
- package/dist/agent/design.js +175 -0
- package/dist/agent/design.js.map +1 -0
- package/dist/agent/loop.js +24 -1
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/system-prompt.js +14 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/cli/display.js +46 -5
- package/dist/cli/display.js.map +1 -1
- package/dist/cli/index.js +323 -46
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.js +8 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/project-config.d.ts +6 -0
- package/dist/config/project-config.js +2 -0
- package/dist/config/project-config.js.map +1 -1
- package/dist/dream/dream.d.ts +71 -0
- package/dist/dream/dream.js +217 -0
- package/dist/dream/dream.js.map +1 -0
- package/dist/dream/okf.d.ts +10 -0
- package/dist/dream/okf.js +280 -0
- package/dist/dream/okf.js.map +1 -0
- package/dist/dream/parser.d.ts +60 -0
- package/dist/dream/parser.js +176 -0
- package/dist/dream/parser.js.map +1 -0
- package/dist/dream/reconcile.d.ts +69 -0
- package/dist/dream/reconcile.js +303 -0
- package/dist/dream/reconcile.js.map +1 -0
- package/dist/kanban/index.d.ts +5 -0
- package/dist/kanban/index.js +11 -0
- package/dist/kanban/index.js.map +1 -0
- package/dist/kanban/pipeline.d.ts +16 -0
- package/dist/kanban/pipeline.js +910 -0
- package/dist/kanban/pipeline.js.map +1 -0
- package/dist/kanban/server.d.ts +5 -0
- package/dist/kanban/server.js +820 -0
- package/dist/kanban/server.js.map +1 -0
- package/dist/kanban/types.d.ts +75 -0
- package/dist/kanban/types.js +6 -0
- package/dist/kanban/types.js.map +1 -0
- package/dist/learnlight/driven.d.ts +2 -0
- package/dist/learnlight/driven.js +109 -0
- package/dist/learnlight/driven.js.map +1 -0
- package/dist/learnlight/index.d.ts +4 -0
- package/dist/learnlight/index.js +32 -0
- package/dist/learnlight/index.js.map +1 -0
- package/dist/learnlight/lesson-prep.d.ts +36 -0
- package/dist/learnlight/lesson-prep.js +224 -0
- package/dist/learnlight/lesson-prep.js.map +1 -0
- package/dist/learnlight/report.d.ts +2 -0
- package/dist/learnlight/report.js +37 -0
- package/dist/learnlight/report.js.map +1 -0
- package/dist/learnlight/types.d.ts +72 -0
- package/dist/learnlight/types.js +6 -0
- package/dist/learnlight/types.js.map +1 -0
- package/dist/machina/index.d.ts +16 -0
- package/dist/machina/index.js +61 -0
- package/dist/machina/index.js.map +1 -0
- package/dist/machina/render-html.d.ts +2 -0
- package/dist/machina/render-html.js +189 -0
- package/dist/machina/render-html.js.map +1 -0
- package/dist/machina/render-terminal.d.ts +2 -0
- package/dist/machina/render-terminal.js +92 -0
- package/dist/machina/render-terminal.js.map +1 -0
- package/dist/machina/spec.d.ts +61 -0
- package/dist/machina/spec.js +124 -0
- package/dist/machina/spec.js.map +1 -0
- package/dist/machina/verify.d.ts +27 -0
- package/dist/machina/verify.js +85 -0
- package/dist/machina/verify.js.map +1 -0
- package/dist/perception/graph-store.d.ts +11 -0
- package/dist/perception/graph-store.js +33 -0
- package/dist/perception/graph-store.js.map +1 -1
- package/dist/perception/index.d.ts +1 -1
- package/dist/perception/index.js +2 -1
- package/dist/perception/index.js.map +1 -1
- package/dist/providers/anthropic.js +1 -1
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/factory.d.ts +49 -0
- package/dist/providers/factory.js +99 -0
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.js +1 -1
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/openai-compatible.js +81 -50
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/rem/graph.d.ts +72 -0
- package/dist/rem/graph.js +139 -0
- package/dist/rem/graph.js.map +1 -0
- package/dist/rem/index.d.ts +16 -0
- package/dist/rem/index.js +60 -0
- package/dist/rem/index.js.map +1 -0
- package/dist/rem/render-html.d.ts +2 -0
- package/dist/rem/render-html.js +189 -0
- package/dist/rem/render-html.js.map +1 -0
- package/dist/rem/render-terminal.d.ts +4 -0
- package/dist/rem/render-terminal.js +94 -0
- package/dist/rem/render-terminal.js.map +1 -0
- package/dist/research/council.d.ts +27 -0
- package/dist/research/council.js +263 -0
- package/dist/research/council.js.map +1 -0
- package/dist/research/research.d.ts +24 -0
- package/dist/research/research.js +116 -0
- package/dist/research/research.js.map +1 -0
- package/dist/ruby/alternator.d.ts +36 -1
- package/dist/ruby/alternator.js +40 -31
- package/dist/ruby/alternator.js.map +1 -1
- package/dist/ruby/stats.js +10 -11
- package/dist/ruby/stats.js.map +1 -1
- package/dist/ruby/types.js +1 -1
- package/dist/ruby/types.js.map +1 -1
- package/dist/safety/permissions.d.ts +8 -0
- package/dist/safety/permissions.js +12 -0
- package/dist/safety/permissions.js.map +1 -1
- package/dist/setup/provider-registry.js +14 -0
- package/dist/setup/provider-registry.js.map +1 -1
- package/dist/setup/provider-test.js +24 -2
- package/dist/setup/provider-test.js.map +1 -1
- package/dist/setup/telegram-wizard.d.ts +57 -0
- package/dist/setup/telegram-wizard.js +343 -0
- package/dist/setup/telegram-wizard.js.map +1 -0
- package/dist/tools/audio-transcribe.d.ts +20 -0
- package/dist/tools/audio-transcribe.js +39 -28
- package/dist/tools/audio-transcribe.js.map +1 -1
- package/dist/tools/browser.js +8 -10
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/gmail-tool.d.ts +15 -0
- package/dist/tools/gmail-tool.js +361 -0
- package/dist/tools/gmail-tool.js.map +1 -0
- package/dist/tools/read-file.js +13 -0
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/telegram-bot.js +103 -20
- package/dist/tools/telegram-bot.js.map +1 -1
- package/dist/tools/telegram-voice.d.ts +22 -0
- package/dist/tools/telegram-voice.js +203 -0
- package/dist/tools/telegram-voice.js.map +1 -0
- package/dist/tools/telegram.d.ts +6 -1
- package/dist/tools/telegram.js +115 -5
- package/dist/tools/telegram.js.map +1 -1
- package/dist/tools/video-render.d.ts +11 -0
- package/dist/tools/video-render.js +189 -0
- package/dist/tools/video-render.js.map +1 -0
- package/dist/tools/web-search.d.ts +20 -0
- package/dist/tools/web-search.js +134 -38
- package/dist/tools/web-search.js.map +1 -1
- package/dist/util/errors.js +6 -0
- package/dist/util/errors.js.map +1 -1
- package/dist/viz/index.js +816 -30
- package/dist/viz/index.js.map +1 -1
- package/dist/viz/reader.d.ts +33 -0
- package/dist/viz/reader.js +343 -0
- package/dist/viz/reader.js.map +1 -0
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-test.js","sourceRoot":"","sources":["../../src/setup/provider-test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"provider-test.js","sourceRoot":"","sources":["../../src/setup/provider-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram Bot Wizard — interactive setup for the Aura Telegram bot.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors provider-wizard.ts's style and structure (numbered choices,
|
|
5
|
+
* keep/replace for existing values, a real connection test before saving),
|
|
6
|
+
* with one addition that came directly out of real deployment pain: it can
|
|
7
|
+
* generate a working systemd user-service file, since that — not picking a
|
|
8
|
+
* model — turned out to be the actual hard part in practice.
|
|
9
|
+
*
|
|
10
|
+
* Steps:
|
|
11
|
+
* 1. Bot token (from @BotFather — the one step nothing can automate)
|
|
12
|
+
* 2. Verify the token against Telegram's real API
|
|
13
|
+
* 3. Authorized user IDs (the bot refuses to start with none)
|
|
14
|
+
* 4. Task model — reuse an existing :provider setup, or configure fresh
|
|
15
|
+
* 5. Voice support (optional) — Groq API key for transcription + TTS
|
|
16
|
+
* 6. Optionally generate ~/.config/systemd/user/aura-telegram.service
|
|
17
|
+
*
|
|
18
|
+
* All Telegram API calls here shell out to curl rather than using native
|
|
19
|
+
* fetch — deliberately, not stylistically: native fetch was found to fail
|
|
20
|
+
* with ETIMEDOUT/ENETUNREACH on a real deployment of this exact bot, on a
|
|
21
|
+
* network where IPv6 is advertised but not actually routable. Since this
|
|
22
|
+
* wizard runs in the same kind of environment the bot itself will run in,
|
|
23
|
+
* it uses the same proven-reliable approach rather than risk hitting the
|
|
24
|
+
* same failure during setup.
|
|
25
|
+
*/
|
|
26
|
+
import * as readline from 'readline';
|
|
27
|
+
export interface TelegramWizardResult {
|
|
28
|
+
botToken: string;
|
|
29
|
+
botUsername: string;
|
|
30
|
+
allowedUserIds: string[];
|
|
31
|
+
taskModel?: string;
|
|
32
|
+
groqConfigured: boolean;
|
|
33
|
+
systemdGenerated: boolean;
|
|
34
|
+
}
|
|
35
|
+
interface ExistingTelegramConfig {
|
|
36
|
+
bot_token?: string;
|
|
37
|
+
allowed_user_ids?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function telegramConfigPath(): string;
|
|
40
|
+
export declare function loadExistingTelegramConfig(): ExistingTelegramConfig | null;
|
|
41
|
+
export declare function runTelegramWizard(existingRl?: readline.Interface): Promise<TelegramWizardResult | null>;
|
|
42
|
+
/** Calls Telegram's getMe, returns the bot's username on success or null. */
|
|
43
|
+
export declare function testBotToken(token: string): Promise<string | null>;
|
|
44
|
+
export declare function saveTelegramConfig(botToken: string, allowedUserIds: string[]): void;
|
|
45
|
+
interface SystemdInputs {
|
|
46
|
+
taskModel?: string;
|
|
47
|
+
providerApiKey?: string;
|
|
48
|
+
groqKey?: string | null;
|
|
49
|
+
allowedUserIds: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Builds the actual systemd unit file content. Pure and side-effect-free —
|
|
53
|
+
* split out from offerSystemdService() specifically so it's directly
|
|
54
|
+
* testable without needing to drive the readline prompts around it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildSystemdServiceContent(inputs: SystemdInputs, nodePath: string, botScriptPath: string, projectRoot: string, logPath: string): string;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.telegramConfigPath = telegramConfigPath;
|
|
40
|
+
exports.loadExistingTelegramConfig = loadExistingTelegramConfig;
|
|
41
|
+
exports.runTelegramWizard = runTelegramWizard;
|
|
42
|
+
exports.testBotToken = testBotToken;
|
|
43
|
+
exports.saveTelegramConfig = saveTelegramConfig;
|
|
44
|
+
exports.buildSystemdServiceContent = buildSystemdServiceContent;
|
|
45
|
+
/**
|
|
46
|
+
* Telegram Bot Wizard — interactive setup for the Aura Telegram bot.
|
|
47
|
+
*
|
|
48
|
+
* Mirrors provider-wizard.ts's style and structure (numbered choices,
|
|
49
|
+
* keep/replace for existing values, a real connection test before saving),
|
|
50
|
+
* with one addition that came directly out of real deployment pain: it can
|
|
51
|
+
* generate a working systemd user-service file, since that — not picking a
|
|
52
|
+
* model — turned out to be the actual hard part in practice.
|
|
53
|
+
*
|
|
54
|
+
* Steps:
|
|
55
|
+
* 1. Bot token (from @BotFather — the one step nothing can automate)
|
|
56
|
+
* 2. Verify the token against Telegram's real API
|
|
57
|
+
* 3. Authorized user IDs (the bot refuses to start with none)
|
|
58
|
+
* 4. Task model — reuse an existing :provider setup, or configure fresh
|
|
59
|
+
* 5. Voice support (optional) — Groq API key for transcription + TTS
|
|
60
|
+
* 6. Optionally generate ~/.config/systemd/user/aura-telegram.service
|
|
61
|
+
*
|
|
62
|
+
* All Telegram API calls here shell out to curl rather than using native
|
|
63
|
+
* fetch — deliberately, not stylistically: native fetch was found to fail
|
|
64
|
+
* with ETIMEDOUT/ENETUNREACH on a real deployment of this exact bot, on a
|
|
65
|
+
* network where IPv6 is advertised but not actually routable. Since this
|
|
66
|
+
* wizard runs in the same kind of environment the bot itself will run in,
|
|
67
|
+
* it uses the same proven-reliable approach rather than risk hitting the
|
|
68
|
+
* same failure during setup.
|
|
69
|
+
*/
|
|
70
|
+
const readline = __importStar(require("readline"));
|
|
71
|
+
const fs = __importStar(require("fs"));
|
|
72
|
+
const path = __importStar(require("path"));
|
|
73
|
+
const os = __importStar(require("os"));
|
|
74
|
+
const child_process_1 = require("child_process");
|
|
75
|
+
const util_1 = require("util");
|
|
76
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
77
|
+
const env_js_1 = require("../util/env.js");
|
|
78
|
+
const provider_wizard_js_1 = require("./provider-wizard.js");
|
|
79
|
+
const factory_js_1 = require("../providers/factory.js");
|
|
80
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
81
|
+
function telegramConfigPath() {
|
|
82
|
+
return path.join(os.homedir(), '.aura', 'telegram.json');
|
|
83
|
+
}
|
|
84
|
+
function loadExistingTelegramConfig() {
|
|
85
|
+
try {
|
|
86
|
+
return JSON.parse(fs.readFileSync(telegramConfigPath(), 'utf8'));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Shell-escapes a string for safe embedding inside single quotes in a curl command. */
|
|
93
|
+
function shellEscape(value) {
|
|
94
|
+
return value.replace(/'/g, "'\\''");
|
|
95
|
+
}
|
|
96
|
+
async function runTelegramWizard(existingRl) {
|
|
97
|
+
const rl = existingRl || readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
98
|
+
try {
|
|
99
|
+
console.log(chalk_1.default.hex('#cc785c')('\n ✦ Telegram Bot Setup Wizard'));
|
|
100
|
+
console.log(chalk_1.default.hex('#8a7768')(' Get Aura running as a Telegram bot in a few steps.\n'));
|
|
101
|
+
// ── Step 1: Bot token ─────────────────────────────────────────────────
|
|
102
|
+
const botToken = await configureBotToken(rl);
|
|
103
|
+
if (!botToken)
|
|
104
|
+
return null;
|
|
105
|
+
// ── Step 2: Verify it for real ────────────────────────────────────────
|
|
106
|
+
console.log(chalk_1.default.hex('#cc785c')('\n Verifying token with Telegram...'));
|
|
107
|
+
const botUsername = await testBotToken(botToken);
|
|
108
|
+
if (!botUsername) {
|
|
109
|
+
console.log(chalk_1.default.hex('#b15439')(' ✗ Could not verify this token. Double-check it and try again.\n'));
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk_1.default.hex('#5a9e6e')(` ✓ Connected as @${botUsername}\n`));
|
|
113
|
+
// ── Step 3: Authorized users ──────────────────────────────────────────
|
|
114
|
+
const allowedUserIds = await configureAuthorizedUsers(rl);
|
|
115
|
+
if (allowedUserIds.length === 0) {
|
|
116
|
+
console.log(chalk_1.default.hex('#b15439')(' ✗ At least one authorized user ID is required — the bot refuses to start without one.\n'));
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
// ── Step 4: Task model ────────────────────────────────────────────────
|
|
120
|
+
const { taskModel, providerApiKey } = await configureTaskModel(rl);
|
|
121
|
+
// ── Step 5: Voice support (optional) ──────────────────────────────────
|
|
122
|
+
const groqKey = await configureVoiceSupport(rl);
|
|
123
|
+
// ── Save telegram.json ─────────────────────────────────────────────────
|
|
124
|
+
saveTelegramConfig(botToken, allowedUserIds);
|
|
125
|
+
console.log(chalk_1.default.hex('#8a7768')(`\n ✓ Saved to ${telegramConfigPath()}`));
|
|
126
|
+
// ── Step 6: systemd service (optional) ────────────────────────────────
|
|
127
|
+
const systemdGenerated = await offerSystemdService(rl, {
|
|
128
|
+
taskModel,
|
|
129
|
+
providerApiKey,
|
|
130
|
+
groqKey,
|
|
131
|
+
allowedUserIds,
|
|
132
|
+
});
|
|
133
|
+
printSummary(botUsername, systemdGenerated);
|
|
134
|
+
return { botToken, botUsername, allowedUserIds, taskModel, groqConfigured: !!groqKey, systemdGenerated };
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
if (!existingRl)
|
|
138
|
+
rl.close();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
142
|
+
// Step 1: Bot token
|
|
143
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
144
|
+
async function configureBotToken(rl) {
|
|
145
|
+
console.log(chalk_1.default.hex('#cc785c')(' Step 1: Bot token\n'));
|
|
146
|
+
const existing = loadExistingTelegramConfig();
|
|
147
|
+
if (existing?.bot_token) {
|
|
148
|
+
console.log(chalk_1.default.hex('#8a7768')(` Existing token found (ends in ...${existing.bot_token.slice(-6)})\n`));
|
|
149
|
+
console.log(chalk_1.default.hex('#8a7768')(' 1. Keep this token'));
|
|
150
|
+
console.log(chalk_1.default.hex('#8a7768')(' 2. Replace with a new token\n'));
|
|
151
|
+
const choice = await askInput(rl, ' ▸ Choose (1 or 2): ');
|
|
152
|
+
if (choice !== '2')
|
|
153
|
+
return existing.bot_token;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(chalk_1.default.hex('#8a7768')(' No bot token configured yet.'));
|
|
157
|
+
}
|
|
158
|
+
console.log(chalk_1.default.hex('#8a7768')(' Need one? Message @BotFather on Telegram:'));
|
|
159
|
+
console.log(chalk_1.default.hex('#8a7768')(' 1. Send /newbot'));
|
|
160
|
+
console.log(chalk_1.default.hex('#8a7768')(' 2. Pick a display name, then a username ending in "bot"'));
|
|
161
|
+
console.log(chalk_1.default.hex('#8a7768')(' 3. BotFather replies with a token like 123456789:ABC-DEF1234...\n'));
|
|
162
|
+
const token = await askInput(rl, ' ▸ Paste your bot token: ');
|
|
163
|
+
if (!token) {
|
|
164
|
+
console.log(chalk_1.default.hex('#b15439')(' ✗ No token provided.'));
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return token;
|
|
168
|
+
}
|
|
169
|
+
/** Calls Telegram's getMe, returns the bot's username on success or null. */
|
|
170
|
+
async function testBotToken(token) {
|
|
171
|
+
try {
|
|
172
|
+
const url = `https://api.telegram.org/bot${token}/getMe`;
|
|
173
|
+
const { stdout } = await execAsync(`curl -s "${url}"`, { timeout: 15_000 });
|
|
174
|
+
const parsed = JSON.parse(stdout);
|
|
175
|
+
if (!parsed.ok || !parsed.result?.username)
|
|
176
|
+
return null;
|
|
177
|
+
return parsed.result.username;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
184
|
+
// Step 3: Authorized users
|
|
185
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
186
|
+
async function configureAuthorizedUsers(rl) {
|
|
187
|
+
console.log(chalk_1.default.hex('#cc785c')(' Step 2: Authorized users\n'));
|
|
188
|
+
console.log(chalk_1.default.hex('#8a7768')(' Only these Telegram user IDs will be able to use the bot.'));
|
|
189
|
+
console.log(chalk_1.default.hex('#8a7768')(" Don't know yours? Message @userinfobot on Telegram — it replies instantly.\n"));
|
|
190
|
+
const existing = loadExistingTelegramConfig();
|
|
191
|
+
const ids = existing?.allowed_user_ids
|
|
192
|
+
? existing.allowed_user_ids.split(',').map(s => s.trim()).filter(Boolean)
|
|
193
|
+
: [];
|
|
194
|
+
if (ids.length > 0) {
|
|
195
|
+
console.log(chalk_1.default.hex('#8a7768')(` Currently authorized: ${ids.join(', ')}\n`));
|
|
196
|
+
}
|
|
197
|
+
for (;;) {
|
|
198
|
+
const prompt = ids.length > 0
|
|
199
|
+
? ' ▸ Add another user ID (or press Enter to finish): '
|
|
200
|
+
: ' ▸ Your Telegram user ID: ';
|
|
201
|
+
const input = await askInput(rl, prompt);
|
|
202
|
+
if (!input)
|
|
203
|
+
break;
|
|
204
|
+
if (!/^\d+$/.test(input)) {
|
|
205
|
+
console.log(chalk_1.default.hex('#b15439')(" ✗ That doesn't look like a numeric Telegram ID — try again."));
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (!ids.includes(input))
|
|
209
|
+
ids.push(input);
|
|
210
|
+
}
|
|
211
|
+
return ids;
|
|
212
|
+
}
|
|
213
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
214
|
+
// Step 4: Task model
|
|
215
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
216
|
+
async function configureTaskModel(rl) {
|
|
217
|
+
console.log(chalk_1.default.hex('#cc785c')('\n Step 3: Which model should the bot use?\n'));
|
|
218
|
+
const saved = (0, provider_wizard_js_1.loadProviderConfig)();
|
|
219
|
+
if (saved?.model) {
|
|
220
|
+
console.log(chalk_1.default.hex('#8a7768')(` Found an existing :provider setup: ${chalk_1.default.hex('#e8d5b7')(saved.model)} (${saved.provider})\n`));
|
|
221
|
+
console.log(chalk_1.default.hex('#8a7768')(' 1. Use this for the bot too'));
|
|
222
|
+
console.log(chalk_1.default.hex('#8a7768')(' 2. Skip — configure this manually later\n'));
|
|
223
|
+
const choice = await askInput(rl, ' ▸ Choose (1 or 2): ');
|
|
224
|
+
if (choice !== '2') {
|
|
225
|
+
return { taskModel: saved.model, providerApiKey: saved.apiKey };
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.log(chalk_1.default.hex('#8a7768')(' No existing provider setup found.'));
|
|
230
|
+
}
|
|
231
|
+
console.log(chalk_1.default.hex('#8a7768')(' Run :provider first if you want this filled in automatically,'));
|
|
232
|
+
console.log(chalk_1.default.hex('#8a7768')(' or set TELEGRAM_BOT_MODEL plus the matching API key manually later.\n'));
|
|
233
|
+
return {};
|
|
234
|
+
}
|
|
235
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
236
|
+
// Step 5: Voice support (optional)
|
|
237
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
238
|
+
async function configureVoiceSupport(rl) {
|
|
239
|
+
console.log(chalk_1.default.hex('#cc785c')('\n Step 4: Voice messages (optional)\n'));
|
|
240
|
+
console.log(chalk_1.default.hex('#8a7768')(' Lets the bot transcribe voice messages and reply with spoken audio.'));
|
|
241
|
+
console.log(chalk_1.default.hex('#8a7768')(' Needs a free Groq API key: https://console.groq.com/keys\n'));
|
|
242
|
+
const existing = (0, env_js_1.getApiKey)('GROQ_API_KEY', 'groq_api_key');
|
|
243
|
+
if (existing) {
|
|
244
|
+
console.log(chalk_1.default.hex('#8a7768')(` Found one already: ${chalk_1.default.hex('#5a9e6e')(maskKey(existing))}\n`));
|
|
245
|
+
const choice = await askInput(rl, ' ▸ Use this key for the bot? (Y/n): ');
|
|
246
|
+
if (choice.toLowerCase() !== 'n')
|
|
247
|
+
return existing;
|
|
248
|
+
}
|
|
249
|
+
const choice = await askInput(rl, ' ▸ Enable voice messages? (y/N): ');
|
|
250
|
+
if (choice.toLowerCase() !== 'y')
|
|
251
|
+
return null;
|
|
252
|
+
const key = await askInput(rl, ' ▸ Enter Groq API key: ');
|
|
253
|
+
return key || null;
|
|
254
|
+
}
|
|
255
|
+
function maskKey(key) {
|
|
256
|
+
if (key.length <= 8)
|
|
257
|
+
return '****';
|
|
258
|
+
return key.slice(0, 4) + '...' + key.slice(-4);
|
|
259
|
+
}
|
|
260
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
261
|
+
// Save telegram.json
|
|
262
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
263
|
+
function saveTelegramConfig(botToken, allowedUserIds) {
|
|
264
|
+
const dir = path.join(os.homedir(), '.aura');
|
|
265
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
266
|
+
const config = {
|
|
267
|
+
bot_token: botToken,
|
|
268
|
+
allowed_user_ids: allowedUserIds.join(','),
|
|
269
|
+
};
|
|
270
|
+
fs.writeFileSync(telegramConfigPath(), JSON.stringify(config, null, 2) + '\n', { mode: 0o600 });
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Builds the actual systemd unit file content. Pure and side-effect-free —
|
|
274
|
+
* split out from offerSystemdService() specifically so it's directly
|
|
275
|
+
* testable without needing to drive the readline prompts around it.
|
|
276
|
+
*/
|
|
277
|
+
function buildSystemdServiceContent(inputs, nodePath, botScriptPath, projectRoot, logPath) {
|
|
278
|
+
const lines = [
|
|
279
|
+
'[Unit]',
|
|
280
|
+
'Description=Aura Telegram Bot',
|
|
281
|
+
'[Service]',
|
|
282
|
+
`WorkingDirectory=${projectRoot}`,
|
|
283
|
+
`ExecStart=${nodePath} ${botScriptPath}`,
|
|
284
|
+
];
|
|
285
|
+
if (inputs.taskModel) {
|
|
286
|
+
lines.push(`Environment="TELEGRAM_BOT_MODEL=${inputs.taskModel}"`);
|
|
287
|
+
if (inputs.providerApiKey) {
|
|
288
|
+
const envVar = (0, factory_js_1.apiKeyEnvVarForModel)(inputs.taskModel);
|
|
289
|
+
if (envVar)
|
|
290
|
+
lines.push(`Environment="${envVar}=${inputs.providerApiKey}"`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (inputs.groqKey) {
|
|
294
|
+
lines.push(`Environment="GROQ_API_KEY=${inputs.groqKey}"`);
|
|
295
|
+
}
|
|
296
|
+
lines.push(`Environment="TELEGRAM_BOT_ALLOWED_USER_IDS=${inputs.allowedUserIds.join(',')}"`);
|
|
297
|
+
lines.push('Restart=always', 'RestartSec=5', `StandardOutput=append:${logPath}`, `StandardError=append:${logPath}`, '[Install]', 'WantedBy=default.target');
|
|
298
|
+
return lines.join('\n') + '\n';
|
|
299
|
+
}
|
|
300
|
+
async function offerSystemdService(rl, inputs) {
|
|
301
|
+
console.log(chalk_1.default.hex('#cc785c')('\n Step 5: Run automatically with systemd? (Linux only)\n'));
|
|
302
|
+
console.log(chalk_1.default.hex('#8a7768')(' Keeps the bot running in the background, restarts it if it crashes,'));
|
|
303
|
+
console.log(chalk_1.default.hex('#8a7768')(' and starts it again automatically next time you log in.\n'));
|
|
304
|
+
const choice = await askInput(rl, ' ▸ Generate a systemd service file now? (y/N): ');
|
|
305
|
+
if (choice.toLowerCase() !== 'y')
|
|
306
|
+
return false;
|
|
307
|
+
const projectRoot = process.cwd();
|
|
308
|
+
const botScript = path.join(projectRoot, 'dist', 'tools', 'telegram-bot.js');
|
|
309
|
+
if (!fs.existsSync(botScript)) {
|
|
310
|
+
console.log(chalk_1.default.hex('#b15439')(` ✗ ${botScript} doesn't exist yet — run "npm run build" first, then re-run this step.`));
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
const logPath = path.join(os.homedir(), '.aura', 'telegram-bot.log');
|
|
314
|
+
const content = buildSystemdServiceContent(inputs, process.execPath, botScript, projectRoot, logPath);
|
|
315
|
+
const serviceDir = path.join(os.homedir(), '.config', 'systemd', 'user');
|
|
316
|
+
fs.mkdirSync(serviceDir, { recursive: true });
|
|
317
|
+
const servicePath = path.join(serviceDir, 'aura-telegram.service');
|
|
318
|
+
fs.writeFileSync(servicePath, content);
|
|
319
|
+
console.log(chalk_1.default.hex('#5a9e6e')(`\n ✓ Wrote ${servicePath}`));
|
|
320
|
+
console.log(chalk_1.default.hex('#8a7768')('\n Run these to start it:\n'));
|
|
321
|
+
console.log(chalk_1.default.hex('#e8d5b7')(' systemctl --user daemon-reload'));
|
|
322
|
+
console.log(chalk_1.default.hex('#e8d5b7')(' systemctl --user enable --now aura-telegram.service'));
|
|
323
|
+
console.log(chalk_1.default.hex('#e8d5b7')(' systemctl --user status aura-telegram.service\n'));
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
327
|
+
// Helpers
|
|
328
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
329
|
+
function askInput(rl, prompt) {
|
|
330
|
+
return new Promise(resolve => {
|
|
331
|
+
rl.question(chalk_1.default.hex('#cc785c')(prompt), answer => resolve((answer ?? '').trim()));
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
function printSummary(botUsername, systemdGenerated) {
|
|
335
|
+
console.log(chalk_1.default.hex('#cc785c')('\n ✦ Setup complete\n'));
|
|
336
|
+
console.log(chalk_1.default.hex('#8a7768')(` Bot: ${chalk_1.default.hex('#e8d5b7')('@' + botUsername)}`));
|
|
337
|
+
if (!systemdGenerated) {
|
|
338
|
+
console.log(chalk_1.default.hex('#8a7768')('\n To run it now:'));
|
|
339
|
+
console.log(chalk_1.default.hex('#e8d5b7')(` node dist/tools/telegram-bot.js\n`));
|
|
340
|
+
}
|
|
341
|
+
console.log(chalk_1.default.hex('#8a7768')(' Message your bot on Telegram to try it.\n'));
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=telegram-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-wizard.js","sourceRoot":"","sources":["../../src/setup/telegram-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,4 +5,24 @@ export interface AudioTranscribeInput {
|
|
|
5
5
|
action?: 'transcribe' | 'info';
|
|
6
6
|
}
|
|
7
7
|
export declare const AUDIO_TRANSCRIBE_DEFINITION: ToolDefinition;
|
|
8
|
+
export interface GroqWhisperResult {
|
|
9
|
+
text: string;
|
|
10
|
+
language?: string;
|
|
11
|
+
duration?: number;
|
|
12
|
+
segments?: Array<{
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
text: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Calls Groq's Whisper transcription API directly and returns the parsed
|
|
20
|
+
* result — no formatting, no file validation beyond what's needed to build
|
|
21
|
+
* the request. Used by audioTranscribe() below (which wraps this with the
|
|
22
|
+
* rich report format / error-string convention tools use), and by the
|
|
23
|
+
* Telegram bot's voice-message handler (which just wants the raw text to
|
|
24
|
+
* use directly as a task description, not a formatted report about it).
|
|
25
|
+
* Throws on any failure — callers decide how to present that.
|
|
26
|
+
*/
|
|
27
|
+
export declare function callGroqWhisper(filePath: string, apiKey: string, language?: string): Promise<GroqWhisperResult>;
|
|
8
28
|
export declare function audioTranscribe(input: AudioTranscribeInput): Promise<string>;
|
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.AUDIO_TRANSCRIBE_DEFINITION = void 0;
|
|
37
|
+
exports.callGroqWhisper = callGroqWhisper;
|
|
37
38
|
exports.audioTranscribe = audioTranscribe;
|
|
38
39
|
const fs = __importStar(require("fs"));
|
|
39
40
|
const path = __importStar(require("path"));
|
|
@@ -72,6 +73,43 @@ function getAudioInfo(filePath) {
|
|
|
72
73
|
`Model: ${WHISPER_MODEL} (via Groq)`,
|
|
73
74
|
].join('\n');
|
|
74
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Calls Groq's Whisper transcription API directly and returns the parsed
|
|
78
|
+
* result — no formatting, no file validation beyond what's needed to build
|
|
79
|
+
* the request. Used by audioTranscribe() below (which wraps this with the
|
|
80
|
+
* rich report format / error-string convention tools use), and by the
|
|
81
|
+
* Telegram bot's voice-message handler (which just wants the raw text to
|
|
82
|
+
* use directly as a task description, not a formatted report about it).
|
|
83
|
+
* Throws on any failure — callers decide how to present that.
|
|
84
|
+
*/
|
|
85
|
+
async function callGroqWhisper(filePath, apiKey, language) {
|
|
86
|
+
const stat = fs.statSync(filePath);
|
|
87
|
+
const sizeMB = stat.size / (1024 * 1024);
|
|
88
|
+
if (sizeMB > 25) {
|
|
89
|
+
throw new Error(`Audio file is ${sizeMB.toFixed(1)} MB, Groq limit is 25 MB. Compress or split the file first.`);
|
|
90
|
+
}
|
|
91
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
92
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
93
|
+
const blob = new Blob([fileBuffer], { type: `audio/${ext.slice(1) || 'ogg'}` });
|
|
94
|
+
const formData = new FormData();
|
|
95
|
+
formData.append('file', blob, path.basename(filePath));
|
|
96
|
+
formData.append('model', WHISPER_MODEL);
|
|
97
|
+
if (language && language !== 'auto') {
|
|
98
|
+
formData.append('language', language);
|
|
99
|
+
}
|
|
100
|
+
formData.append('response_format', 'verbose_json');
|
|
101
|
+
const response = await fetch(GROQ_API_URL, {
|
|
102
|
+
method: 'POST',
|
|
103
|
+
headers: { 'Authorization': `Bearer ${apiKey}` },
|
|
104
|
+
body: formData,
|
|
105
|
+
signal: AbortSignal.timeout(120_000),
|
|
106
|
+
});
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
const errorBody = await response.text();
|
|
109
|
+
throw new Error(`Groq API returned ${response.status}: ${errorBody}`);
|
|
110
|
+
}
|
|
111
|
+
return response.json();
|
|
112
|
+
}
|
|
75
113
|
async function audioTranscribe(input) {
|
|
76
114
|
const filePath = path.resolve(input.path);
|
|
77
115
|
if (!fs.existsSync(filePath)) {
|
|
@@ -93,35 +131,8 @@ async function audioTranscribe(input) {
|
|
|
93
131
|
if (!apiKey) {
|
|
94
132
|
return 'Error: GROQ_API_KEY not set. Get a free key at https://console.groq.com/keys and set it: export GROQ_API_KEY=gsk_...';
|
|
95
133
|
}
|
|
96
|
-
// Check file size (Groq limit is 25 MB)
|
|
97
|
-
const stat = fs.statSync(filePath);
|
|
98
|
-
const sizeMB = stat.size / (1024 * 1024);
|
|
99
|
-
if (sizeMB > 25) {
|
|
100
|
-
return `Error: Audio file is ${sizeMB.toFixed(1)} MB, Groq limit is 25 MB. Compress or split the file first.`;
|
|
101
|
-
}
|
|
102
134
|
try {
|
|
103
|
-
const
|
|
104
|
-
const blob = new Blob([fileBuffer], { type: `audio/${ext.slice(1)}` });
|
|
105
|
-
const formData = new FormData();
|
|
106
|
-
formData.append('file', blob, path.basename(filePath));
|
|
107
|
-
formData.append('model', WHISPER_MODEL);
|
|
108
|
-
if (input.language && input.language !== 'auto') {
|
|
109
|
-
formData.append('language', input.language);
|
|
110
|
-
}
|
|
111
|
-
formData.append('response_format', 'verbose_json');
|
|
112
|
-
const response = await fetch(GROQ_API_URL, {
|
|
113
|
-
method: 'POST',
|
|
114
|
-
headers: {
|
|
115
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
116
|
-
},
|
|
117
|
-
body: formData,
|
|
118
|
-
signal: AbortSignal.timeout(120_000), // 2 min timeout for large files
|
|
119
|
-
});
|
|
120
|
-
if (!response.ok) {
|
|
121
|
-
const errorBody = await response.text();
|
|
122
|
-
return `Error: Groq API returned ${response.status}: ${errorBody}`;
|
|
123
|
-
}
|
|
124
|
-
const result = await response.json();
|
|
135
|
+
const result = await callGroqWhisper(filePath, apiKey, input.language);
|
|
125
136
|
const lines = [];
|
|
126
137
|
lines.push(`Transcription (${WHISPER_MODEL}):`);
|
|
127
138
|
if (result.language)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-transcribe.js","sourceRoot":"","sources":["../../src/tools/audio-transcribe.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"audio-transcribe.js","sourceRoot":"","sources":["../../src/tools/audio-transcribe.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/browser.js
CHANGED
|
@@ -97,22 +97,20 @@ async function ensurePage() {
|
|
|
97
97
|
return page;
|
|
98
98
|
}
|
|
99
99
|
function findChrome() {
|
|
100
|
-
const
|
|
101
|
-
const candidates = [
|
|
102
|
-
'google-chrome',
|
|
103
|
-
'google-chrome-stable',
|
|
104
|
-
'chromium-browser',
|
|
105
|
-
'chromium',
|
|
100
|
+
const knownPaths = [
|
|
106
101
|
'/usr/bin/google-chrome',
|
|
102
|
+
'/usr/bin/google-chrome-stable',
|
|
107
103
|
'/usr/bin/chromium-browser',
|
|
104
|
+
'/snap/bin/chromium',
|
|
105
|
+
'/snap/bin/google-chrome',
|
|
108
106
|
];
|
|
109
|
-
for (const
|
|
107
|
+
for (const p of knownPaths) {
|
|
110
108
|
try {
|
|
111
|
-
|
|
112
|
-
return
|
|
109
|
+
require('fs').accessSync(p, require('fs').constants.X_OK);
|
|
110
|
+
return p;
|
|
113
111
|
}
|
|
114
112
|
catch {
|
|
115
|
-
// not
|
|
113
|
+
// not executable, try next
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
116
|
return null;
|