camelagi 0.5.0 → 0.5.16

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.
Files changed (113) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +241 -104
  3. package/dist/agent/agent-sdk.js +136 -65
  4. package/dist/agent/agent-sdk.js.map +1 -1
  5. package/dist/agent.js +4 -1
  6. package/dist/agent.js.map +1 -1
  7. package/dist/bootstrap.js +148 -331
  8. package/dist/bootstrap.js.map +1 -1
  9. package/dist/channels/handler.js +109 -1
  10. package/dist/channels/handler.js.map +1 -1
  11. package/dist/cli/cmd-agents.js +11 -14
  12. package/dist/cli/cmd-agents.js.map +1 -1
  13. package/dist/cli/cmd-bootstrap.js +4 -4
  14. package/dist/cli/cmd-bootstrap.js.map +1 -1
  15. package/dist/cli/cmd-install.js +80 -0
  16. package/dist/cli/cmd-install.js.map +1 -0
  17. package/dist/cli/cmd-pairing.js +14 -15
  18. package/dist/cli/cmd-pairing.js.map +1 -1
  19. package/dist/cli/cmd-reset.js +10 -12
  20. package/dist/cli/cmd-reset.js.map +1 -1
  21. package/dist/cli/cmd-sessions.js +10 -13
  22. package/dist/cli/cmd-sessions.js.map +1 -1
  23. package/dist/cli/cmd-status.js +67 -0
  24. package/dist/cli/cmd-status.js.map +1 -0
  25. package/dist/cli/cmd-uninstall.js +79 -0
  26. package/dist/cli/cmd-uninstall.js.map +1 -0
  27. package/dist/cli/cmd-update.js +47 -0
  28. package/dist/cli/cmd-update.js.map +1 -0
  29. package/dist/cli.js +44 -26
  30. package/dist/cli.js.map +1 -1
  31. package/dist/core/config.js +53 -8
  32. package/dist/core/config.js.map +1 -1
  33. package/dist/core/log.js +33 -13
  34. package/dist/core/log.js.map +1 -1
  35. package/dist/core/update-check.js +11 -13
  36. package/dist/core/update-check.js.map +1 -1
  37. package/dist/core/version.js +4 -0
  38. package/dist/core/version.js.map +1 -0
  39. package/dist/runtime/orchestrate.js +25 -15
  40. package/dist/runtime/orchestrate.js.map +1 -1
  41. package/dist/serve.js +22 -7
  42. package/dist/serve.js.map +1 -1
  43. package/dist/setup.js +259 -231
  44. package/dist/setup.js.map +1 -1
  45. package/dist/telegram/admin-bot.js +325 -1
  46. package/dist/telegram/admin-bot.js.map +1 -1
  47. package/dist/telegram/agent-bot.js +143 -2
  48. package/dist/telegram/agent-bot.js.map +1 -1
  49. package/dist/telegram/resolve.js +11 -2
  50. package/dist/telegram/resolve.js.map +1 -1
  51. package/dist/telegram/wizards.js +361 -12
  52. package/dist/telegram/wizards.js.map +1 -1
  53. package/dist/telegram.js +2 -0
  54. package/dist/telegram.js.map +1 -1
  55. package/dist/usage.js +106 -0
  56. package/dist/usage.js.map +1 -1
  57. package/dist/workspace.js +20 -0
  58. package/dist/workspace.js.map +1 -1
  59. package/package.json +7 -4
  60. package/dist/agent/agent-openai.js +0 -206
  61. package/dist/agent/agent-openai.js.map +0 -1
  62. package/dist/approval-forward.js +0 -42
  63. package/dist/approval-forward.js.map +0 -1
  64. package/dist/approvals.js +0 -151
  65. package/dist/approvals.js.map +0 -1
  66. package/dist/camelagi-gateway.mjs +0 -93611
  67. package/dist/camelagi-gateway.mjs.map +0 -7
  68. package/dist/compact.js +0 -92
  69. package/dist/compact.js.map +0 -1
  70. package/dist/config.js +0 -153
  71. package/dist/config.js.map +0 -1
  72. package/dist/constants.js +0 -21
  73. package/dist/constants.js.map +0 -1
  74. package/dist/cron.js +0 -81
  75. package/dist/cron.js.map +0 -1
  76. package/dist/errors.js +0 -5
  77. package/dist/errors.js.map +0 -1
  78. package/dist/hooks.js +0 -72
  79. package/dist/hooks.js.map +0 -1
  80. package/dist/lanes.js +0 -62
  81. package/dist/lanes.js.map +0 -1
  82. package/dist/policy.js +0 -22
  83. package/dist/policy.js.map +0 -1
  84. package/dist/queue.js +0 -45
  85. package/dist/queue.js.map +0 -1
  86. package/dist/retry.js +0 -96
  87. package/dist/retry.js.map +0 -1
  88. package/dist/runs.js +0 -83
  89. package/dist/runs.js.map +0 -1
  90. package/dist/skills.js +0 -89
  91. package/dist/skills.js.map +0 -1
  92. package/dist/subagent.js +0 -71
  93. package/dist/subagent.js.map +0 -1
  94. package/dist/telegram-admin.js +0 -800
  95. package/dist/telegram-admin.js.map +0 -1
  96. package/dist/tools/edit.js +0 -29
  97. package/dist/tools/edit.js.map +0 -1
  98. package/dist/tools/exec.js +0 -38
  99. package/dist/tools/exec.js.map +0 -1
  100. package/dist/tools/fetch.js +0 -28
  101. package/dist/tools/fetch.js.map +0 -1
  102. package/dist/tools/index.js +0 -16
  103. package/dist/tools/index.js.map +0 -1
  104. package/dist/tools/read.js +0 -26
  105. package/dist/tools/read.js.map +0 -1
  106. package/dist/tools/search.js +0 -62
  107. package/dist/tools/search.js.map +0 -1
  108. package/dist/tools/subagent.js +0 -48
  109. package/dist/tools/subagent.js.map +0 -1
  110. package/dist/tools/write.js +0 -22
  111. package/dist/tools/write.js.map +0 -1
  112. package/dist/types.js +0 -3
  113. package/dist/types.js.map +0 -1
package/dist/setup.js CHANGED
@@ -1,254 +1,282 @@
1
- // Interactive setup wizard
2
- import readline from "node:readline";
1
+ // Unified setup wizard — configures API + optional Telegram
2
+ // Replaces both `camel setup` and `camel bootstrap`.
3
+ import * as p from "@clack/prompts";
3
4
  import { loadConfig, saveConfig, ensureDirs, paths } from "./core/config.js";
4
- import { seedWorkspace } from "./workspace.js";
5
- import { PROVIDER_PRESETS } from "./core/models.js";
6
- function ask(rl, question) {
7
- return new Promise((resolve) => rl.question(question, resolve));
8
- }
9
- function pick(rl, label, options, compact = false) {
10
- function showList(items, indices) {
11
- for (let i = 0; i < indices.length; i++) {
12
- console.log(` \x1b[33m${indices[i] + 1}\x1b[0m) ${items[i]}`);
13
- }
14
- }
15
- if (!compact) {
16
- return new Promise((resolve) => {
17
- console.log(`\n\x1b[36m${label}\x1b[0m`);
18
- showList(options, options.map((_, i) => i));
19
- rl.question(`\nPick [1-${options.length}]: `, (answer) => {
20
- const idx = parseInt(answer.trim(), 10) - 1;
21
- resolve(options[idx] ?? options[0]);
22
- });
23
- });
5
+ import { seedWorkspace, seedAgentWorkspace } from "./workspace.js";
6
+ import { PROVIDER_PRESETS, fetchOpenRouterModels } from "./core/models.js";
7
+ import { listPendingRequests, approveRequest } from "./telegram/pairing.js";
8
+ function check(value) {
9
+ if (p.isCancel(value)) {
10
+ p.cancel("Setup cancelled.");
11
+ process.exit(0);
24
12
  }
25
- // Live-filter mode for large lists
26
- return new Promise((resolve) => {
27
- console.log(`\n\x1b[36m${label}\x1b[0m`);
28
- console.log(`\x1b[90m ${options.length} options — start typing to filter, arrows to navigate, enter to select\x1b[0m\n`);
29
- rl.pause();
30
- let query = "";
31
- let cursor = 0;
32
- let matches = options.map((o, i) => ({ option: o, index: i }));
33
- const MAX_VISIBLE = 8;
34
- function getVisible() {
35
- if (matches.length <= MAX_VISIBLE)
36
- return matches;
37
- let start = Math.max(0, cursor - Math.floor(MAX_VISIBLE / 2));
38
- if (start + MAX_VISIBLE > matches.length)
39
- start = Math.max(0, matches.length - MAX_VISIBLE);
40
- return matches.slice(start, start + MAX_VISIBLE);
41
- }
42
- function render() {
43
- process.stdout.write(`\x1b[2K\r`);
44
- const lines = [];
45
- lines.push(`\x1b[36m>\x1b[0m ${query}\x1b[90m_\x1b[0m`);
46
- lines.push("");
47
- if (matches.length === 0) {
48
- lines.push(` \x1b[33mNo matches\x1b[0m`);
49
- }
50
- else {
51
- const visible = getVisible();
52
- const startIdx = matches.indexOf(visible[0]);
53
- if (startIdx > 0)
54
- lines.push(` \x1b[90m ↑ ${startIdx} more\x1b[0m`);
55
- for (let i = 0; i < visible.length; i++) {
56
- const m = visible[i];
57
- const globalIdx = startIdx + i;
58
- const selected = globalIdx === cursor;
59
- if (selected) {
60
- lines.push(` \x1b[36m▸ ${m.index + 1}) ${m.option}\x1b[0m`);
61
- }
62
- else {
63
- lines.push(` \x1b[33m${m.index + 1}\x1b[0m) ${m.option}`);
64
- }
65
- }
66
- const remaining = matches.length - (startIdx + visible.length);
67
- if (remaining > 0)
68
- lines.push(` \x1b[90m ↓ ${remaining} more\x1b[0m`);
69
- }
70
- if (render._prevLines) {
71
- process.stdout.write(`\x1b[${render._prevLines}A`);
72
- }
73
- for (const line of lines) {
74
- process.stdout.write(`\x1b[2K${line}\n`);
75
- }
76
- const prevCount = render._prevLines ?? 0;
77
- for (let i = lines.length; i < prevCount; i++) {
78
- process.stdout.write(`\x1b[2K\n`);
79
- }
80
- if (prevCount > lines.length) {
81
- process.stdout.write(`\x1b[${prevCount - lines.length}A`);
82
- }
83
- render._prevLines = lines.length;
84
- }
85
- function updateMatches() {
86
- const q = query.toLowerCase();
87
- matches = q
88
- ? options.map((o, i) => ({ option: o, index: i })).filter((m) => m.option.toLowerCase().includes(q))
89
- : options.map((o, i) => ({ option: o, index: i }));
90
- cursor = 0;
91
- }
92
- const stdin = process.stdin;
93
- stdin.setRawMode(true);
94
- stdin.resume();
95
- render();
96
- const onData = (buf) => {
97
- const key = buf.toString();
98
- if (key === "\r" || key === "\n") {
99
- stdin.removeListener("data", onData);
100
- stdin.setRawMode(false);
101
- stdin.pause();
102
- rl.resume();
103
- const prevLines = render._prevLines ?? 0;
104
- process.stdout.write(`\x1b[${prevLines}A`);
105
- for (let i = 0; i < prevLines; i++)
106
- process.stdout.write(`\x1b[2K\n`);
107
- process.stdout.write(`\x1b[${prevLines}A`);
108
- if (matches.length > 0) {
109
- const selected = matches[cursor];
110
- console.log(` \x1b[32m→ ${selected.option}\x1b[0m\n`);
111
- resolve(selected.option);
112
- }
113
- else if (query.trim()) {
114
- console.log(` \x1b[32m→ ${query.trim()}\x1b[0m\n`);
115
- resolve(query.trim());
116
- }
117
- else {
118
- console.log(` \x1b[32m→ ${options[0]}\x1b[0m\n`);
119
- resolve(options[0]);
120
- }
121
- return;
122
- }
123
- if (key === "\x03") {
124
- stdin.removeListener("data", onData);
125
- stdin.setRawMode(false);
126
- process.exit(0);
127
- }
128
- if (key === "\x1b[A") {
129
- if (cursor > 0)
130
- cursor--;
131
- render();
132
- return;
133
- }
134
- if (key === "\x1b[B") {
135
- if (cursor < matches.length - 1)
136
- cursor++;
137
- render();
138
- return;
139
- }
140
- if (key === "\x7f" || key === "\b") {
141
- if (query.length > 0) {
142
- query = query.slice(0, -1);
143
- updateMatches();
144
- render();
145
- }
146
- return;
147
- }
148
- if (key.length === 1 && key >= " ") {
149
- query += key;
150
- updateMatches();
151
- render();
152
- }
153
- };
154
- stdin.on("data", onData);
155
- });
13
+ return value;
156
14
  }
157
15
  export async function runSetup() {
158
16
  ensureDirs();
159
- const rl = readline.createInterface({
160
- input: process.stdin,
161
- output: process.stdout,
162
- });
163
- console.log(`\n\x1b[36m CamelAGI Setup\x1b[0m`);
164
- console.log(`\x1b[90m Config: ${paths.configFile}\x1b[0m\n`);
165
- // Show current config if exists
17
+ seedWorkspace();
18
+ p.intro("\x1b[36mCamelAGI\x1b[0m setup");
19
+ // Resume detection
20
+ let existing;
166
21
  try {
167
- const current = loadConfig();
168
- console.log(`\x1b[90m Current: provider=${current.provider}, model=${current.model}${current.baseUrl ? `, baseUrl=${current.baseUrl}` : ""}, key=${current.apiKey ? "***" + current.apiKey.slice(-4) : "not set"}\x1b[0m`);
169
- }
170
- catch { /* no config yet */ }
171
- // 1. Pick service
172
- const service = await pick(rl, "Which service?", [
173
- "anthropic — Claude (direct)",
174
- "openai — GPT (direct)",
175
- "openrouter Any model via OpenRouter",
176
- "ollama — Local models",
177
- "custom — Custom OpenAI-compatible endpoint",
178
- ]);
179
- const serviceKey = service.split(/\s/)[0];
180
- const preset = PROVIDER_PRESETS[serviceKey] ?? PROVIDER_PRESETS.custom;
181
- // 2. API key
182
- let apiKey;
183
- if (serviceKey !== "ollama") {
184
- const keyLabel = serviceKey === "anthropic" ? "Anthropic" : serviceKey === "openai" ? "OpenAI" : serviceKey === "openrouter" ? "OpenRouter" : "API";
185
- apiKey = await ask(rl, `\n\x1b[36m${keyLabel} API key:\x1b[0m `);
186
- if (!apiKey.trim()) {
187
- console.log("\x1b[33m No key entered you can set it later in config.yaml or via env var.\x1b[0m");
188
- apiKey = undefined;
22
+ existing = loadConfig();
23
+ }
24
+ catch {
25
+ existing = null;
26
+ }
27
+ const hasApiKey = !!existing?.apiKey;
28
+ const hasAdmin = !!existing?.agents?.admin?.telegram?.botToken;
29
+ const hasVerifiedUser = (existing?.agents?.admin?.telegram?.allowedUsers?.length ?? 0) > 0;
30
+ // Show current status
31
+ if (hasApiKey)
32
+ p.log.success(`API: ${existing.provider} / ${existing.model}`);
33
+ else
34
+ p.log.step("API: not configured");
35
+ if (hasAdmin && hasVerifiedUser)
36
+ p.log.success("Telegram: connected");
37
+ else if (hasAdmin)
38
+ p.log.warn("Telegram: bot set, user not verified");
39
+ else
40
+ p.log.step("Telegram: not configured");
41
+ if (hasApiKey && hasAdmin && hasVerifiedUser) {
42
+ const redo = check(await p.confirm({ message: "Everything is set up. Reconfigure?" }));
43
+ if (!redo) {
44
+ p.outro("Nothing changed.");
45
+ return;
189
46
  }
190
47
  }
191
- // 3. Base URL (custom only)
48
+ // ── Mode selection ──────────────────────────────────────────────
49
+ const mode = check(await p.select({
50
+ message: "How do you want to use CamelAGI?",
51
+ options: [
52
+ { value: "tui", label: "Terminal (TUI)", hint: "Just need an API key" },
53
+ { value: "telegram", label: "Telegram", hint: "Admin bot + agents from Telegram" },
54
+ { value: "both", label: "Both", hint: "Terminal + Telegram" },
55
+ ],
56
+ }));
57
+ const wantsTelegram = mode === "telegram" || mode === "both";
58
+ // ── 1. API Provider ─────────────────────────────────────────────
59
+ if (!hasApiKey) {
60
+ await runApiSetup();
61
+ }
62
+ else if (check(await p.confirm({ message: "Reconfigure API provider?", initialValue: false }))) {
63
+ await runApiSetup();
64
+ }
65
+ // ── 2. Telegram (optional) ──────────────────────────────────────
66
+ if (wantsTelegram && (!hasAdmin || !hasVerifiedUser)) {
67
+ await runTelegramSetup();
68
+ }
69
+ else if (wantsTelegram && hasAdmin && hasVerifiedUser) {
70
+ p.log.success("Telegram already configured.");
71
+ }
72
+ // ── Done ────────────────────────────────────────────────────────
73
+ const config = loadConfig();
74
+ const lines = [
75
+ `Provider ${config.provider}`,
76
+ `Model ${config.model}`,
77
+ `API Key ${config.apiKey ? "\u2022\u2022\u2022\u2022" + config.apiKey.slice(-4) : "not set"}`,
78
+ ];
79
+ if (config.agents?.admin?.telegram?.botToken) {
80
+ lines.push("Telegram configured");
81
+ }
82
+ lines.push(`Config ${paths.configFile}`);
83
+ p.note(lines.join("\n"), "Setup complete");
84
+ if (wantsTelegram) {
85
+ p.outro("Run \x1b[36mcamel serve\x1b[0m to start the server.");
86
+ }
87
+ else {
88
+ p.outro("Run \x1b[36mcamel chat\x1b[0m to start chatting.");
89
+ }
90
+ }
91
+ // ─── API setup ────────────────────────────────────────────────────────
92
+ async function runApiSetup() {
93
+ const provider = check(await p.select({
94
+ message: "Provider",
95
+ options: [
96
+ { value: "anthropic", label: "Anthropic", hint: "Claude (direct)" },
97
+ { value: "openai", label: "OpenAI", hint: "GPT (direct)" },
98
+ { value: "openrouter", label: "OpenRouter", hint: "Any model via OpenRouter" },
99
+ { value: "ollama", label: "Ollama", hint: "Local models" },
100
+ { value: "custom", label: "Custom", hint: "Custom OpenAI-compatible endpoint" },
101
+ ],
102
+ }));
103
+ const preset = PROVIDER_PRESETS[provider] ?? PROVIDER_PRESETS.custom;
104
+ let apiKey;
105
+ if (provider !== "ollama") {
106
+ const label = provider === "anthropic" ? "Anthropic" : provider === "openai" ? "OpenAI" : provider === "openrouter" ? "OpenRouter" : "API";
107
+ apiKey = check(await p.password({ message: `${label} API key` })) || undefined;
108
+ if (!apiKey)
109
+ p.log.warn("No key \u2014 set it later in config.yaml or via env var.");
110
+ }
192
111
  let baseUrl = preset.baseUrl;
193
- if (serviceKey === "custom") {
194
- baseUrl = await ask(rl, `\n\x1b[36mBase URL:\x1b[0m `) || undefined;
112
+ if (provider === "custom") {
113
+ baseUrl = check(await p.text({ message: "Base URL", placeholder: "http://localhost:8080/v1" })) || undefined;
195
114
  }
196
- // 4. Model
197
- let model;
198
- if (preset.models.length > 0) {
199
- const customOption = "(type a custom model name)";
200
- const choice = await pick(rl, "Which model?", [...preset.models, customOption], true);
201
- if (choice === customOption) {
202
- model = await ask(rl, `\n\x1b[36mModel name:\x1b[0m `);
203
- }
204
- else {
205
- model = choice;
115
+ // Model
116
+ let models = [...preset.models];
117
+ if (provider === "openrouter" && apiKey) {
118
+ const s = p.spinner();
119
+ s.start("Fetching models from OpenRouter...");
120
+ const live = await fetchOpenRouterModels(apiKey);
121
+ if (live.length > 0) {
122
+ models = live.map((m) => m.id);
123
+ s.stop(`${models.length} models available`);
206
124
  }
125
+ else
126
+ s.stop("Could not fetch \u2014 using defaults");
127
+ }
128
+ let model;
129
+ if (models.length > 0) {
130
+ model = check(await p.autocomplete({
131
+ message: "Model",
132
+ options: models.map((m) => ({ value: m, label: m })),
133
+ maxItems: 8,
134
+ }));
207
135
  }
208
136
  else {
209
- model = await ask(rl, `\n\x1b[36mModel name:\x1b[0m `);
210
- }
211
- // 5. Telegram (optional)
212
- const setupTelegram = await ask(rl, `\n\x1b[36mSet up Telegram bot? (y/N)\x1b[0m `);
213
- let telegramConfig;
214
- if (setupTelegram.trim().toLowerCase() === "y") {
215
- const botToken = await ask(rl, `\x1b[36mBot token (from @BotFather):\x1b[0m `);
216
- const userId = await ask(rl, `\x1b[36mYour Telegram user ID (from @userinfobot):\x1b[0m `);
217
- if (botToken.trim()) {
218
- telegramConfig = {
219
- botToken: botToken.trim(),
220
- allowedUsers: userId.trim() ? [parseInt(userId.trim(), 10)] : [],
221
- };
222
- }
137
+ model = check(await p.text({ message: "Model name" }));
223
138
  }
224
- rl.close();
225
- // Save
226
- const values = {
227
- provider: preset.provider,
228
- model: model.trim(),
229
- };
139
+ const values = { provider: preset.provider, model: model.trim() };
230
140
  if (apiKey)
231
141
  values.apiKey = apiKey.trim();
232
142
  if (baseUrl)
233
143
  values.baseUrl = baseUrl.trim();
234
- if (!baseUrl && serviceKey !== "custom") {
235
- // Clear baseUrl if switching away from a custom endpoint
144
+ if (!baseUrl && provider !== "custom")
236
145
  values.baseUrl = undefined;
146
+ saveConfig(values);
147
+ p.log.success(`${preset.provider} / ${model}`);
148
+ }
149
+ // ─── Telegram setup ───────────────────────────────────────────────────
150
+ async function runTelegramSetup() {
151
+ p.log.step("Telegram Admin Bot");
152
+ p.log.info("Create a bot in Telegram via @BotFather \u2192 /newbot, then paste the token.");
153
+ let botToken;
154
+ let result;
155
+ // Retry loop for token validation
156
+ for (;;) {
157
+ const raw = check(await p.password({ message: "Bot token" }));
158
+ botToken = typeof raw === "string" ? raw.trim() : "";
159
+ if (!botToken) {
160
+ p.log.warn("Skipped \u2014 add Telegram later with camel setup.");
161
+ return;
162
+ }
163
+ const s = p.spinner();
164
+ s.start("Validating...");
165
+ result = await validateBotToken(botToken);
166
+ if (result.ok) {
167
+ s.stop(`Bot valid: @${result.username}`);
168
+ break;
169
+ }
170
+ s.stop(`Invalid token: ${result.error}`);
171
+ const retry = check(await p.confirm({ message: "Try again?" }));
172
+ if (!retry) {
173
+ p.log.warn("Skipped \u2014 add Telegram later with camel setup.");
174
+ return;
175
+ }
237
176
  }
238
- if (telegramConfig) {
239
- values.telegram = telegramConfig;
177
+ // Save admin bot config
178
+ saveConfig({
179
+ agents: {
180
+ admin: {
181
+ name: "Admin",
182
+ admin: true,
183
+ telegram: { botToken: botToken.trim(), allowedUsers: [] },
184
+ },
185
+ },
186
+ });
187
+ seedAgentWorkspace("admin", "Admin", "CamelAGI admin bot \u2014 manages your AI agents from Telegram");
188
+ // Start just the admin bot for pairing (no full server needed)
189
+ const s2 = p.spinner();
190
+ s2.start("Starting admin bot...");
191
+ try {
192
+ const { setupAdminBot } = await import("./telegram/admin-bot.js");
193
+ const { startPolling } = await import("./telegram/helpers.js");
194
+ const config = loadConfig();
195
+ const adminBot = await setupAdminBot("admin", botToken, () => config, () => "", new Map());
196
+ startPolling(adminBot, "admin");
197
+ await new Promise((r) => setTimeout(r, 1500));
198
+ s2.stop("Admin bot running");
199
+ }
200
+ catch (err) {
201
+ s2.stop("Could not start admin bot");
202
+ p.log.warn(`Pair later: run camel serve, then send a message to @${result.username} in Telegram.`);
203
+ return;
204
+ }
205
+ // Mute background logs
206
+ const origLog = console.log;
207
+ const origErr = console.error;
208
+ const origWarn = console.warn;
209
+ console.log = (...args) => { const f = typeof args[0] === "string" ? args[0] : ""; if (f.startsWith("\x1b["))
210
+ origLog(...args); };
211
+ console.error = () => { };
212
+ console.warn = () => { };
213
+ // Wait for pairing
214
+ const botName = `@${result.username}`;
215
+ p.log.info(`Send any message to \x1b[36m${botName}\x1b[0m in Telegram.`);
216
+ const s3 = p.spinner();
217
+ s3.start("Waiting for message...");
218
+ let pairingRequest;
219
+ for (let i = 0; i < 120; i++) {
220
+ const pending = listPendingRequests().filter((r) => r.agentId === "admin" && r.status === "pending");
221
+ if (pending.length > 0) {
222
+ pairingRequest = pending[0];
223
+ break;
224
+ }
225
+ await new Promise((r) => setTimeout(r, 1000));
226
+ }
227
+ if (!pairingRequest) {
228
+ s3.stop("Timeout");
229
+ p.log.warn("No message received. Pair later via /pairing in Telegram.");
230
+ console.log = origLog;
231
+ console.error = origErr;
232
+ console.warn = origWarn;
233
+ return;
234
+ }
235
+ const userLabel = pairingRequest.username ? `@${pairingRequest.username}` : pairingRequest.firstName ?? String(pairingRequest.userId);
236
+ s3.stop(`Request from ${userLabel}`);
237
+ const approve = check(await p.confirm({ message: `Approve ${userLabel}?` }));
238
+ if (!approve) {
239
+ p.log.warn("Denied.");
240
+ console.log = origLog;
241
+ console.error = origErr;
242
+ console.warn = origWarn;
243
+ return;
244
+ }
245
+ const approved = approveRequest(pairingRequest.code);
246
+ if (!approved) {
247
+ p.log.error("Approval failed.");
248
+ console.log = origLog;
249
+ console.error = origErr;
250
+ console.warn = origWarn;
251
+ return;
252
+ }
253
+ // Notify user
254
+ try {
255
+ await fetch(`https://api.telegram.org/bot${botToken.trim()}/sendMessage`, {
256
+ method: "POST",
257
+ headers: { "Content-Type": "application/json" },
258
+ body: JSON.stringify({ chat_id: pairingRequest.chatId, text: "Access approved! You are now the admin." }),
259
+ });
260
+ }
261
+ catch { }
262
+ p.log.success(`${userLabel} approved!`);
263
+ // Restore logs
264
+ console.log = origLog;
265
+ console.error = origErr;
266
+ console.warn = origWarn;
267
+ }
268
+ // ─── Helpers ──────────────────────────────────────────────────────────
269
+ async function validateBotToken(token) {
270
+ try {
271
+ const resp = await fetch(`https://api.telegram.org/bot${token}/getMe`);
272
+ const data = await resp.json();
273
+ if (data.ok && data.result) {
274
+ return { ok: true, username: data.result.username, name: data.result.first_name };
275
+ }
276
+ return { ok: false, error: data.description ?? "Invalid token" };
277
+ }
278
+ catch (err) {
279
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
240
280
  }
241
- saveConfig(values);
242
- seedWorkspace();
243
- console.log(`\n\x1b[32m Saved to ${paths.configFile}\x1b[0m`);
244
- console.log(`\x1b[90m provider: ${values.provider}`);
245
- console.log(` model: ${values.model}`);
246
- if (baseUrl)
247
- console.log(` baseUrl: ${baseUrl}`);
248
- console.log(` apiKey: ${apiKey ? "***" + apiKey.slice(-4) : "not set"}`);
249
- if (telegramConfig)
250
- console.log(` telegram: bot token configured`);
251
- console.log(`\x1b[0m`);
252
- console.log(`\n Run \x1b[36mcamelagi chat\x1b[0m to start chatting.\n`);
253
281
  }
254
282
  //# sourceMappingURL=setup.js.map
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}