camelagi 0.5.39 → 0.5.45

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 (182) hide show
  1. package/README.md +159 -27
  2. package/dashboard/404.html +1 -0
  3. package/dashboard/__next.__PAGE__.txt +9 -0
  4. package/dashboard/__next._full.txt +19 -0
  5. package/dashboard/__next._head.txt +6 -0
  6. package/dashboard/__next._index.txt +5 -0
  7. package/dashboard/__next._tree.txt +3 -0
  8. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
  9. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
  10. package/dashboard/_next/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
  11. package/dashboard/_next/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
  12. package/dashboard/_next/_next/static/chunks/00-nlsz4ud071.js +11 -0
  13. package/dashboard/_next/_next/static/chunks/00noe7du3vxk9.js +1 -0
  14. package/dashboard/_next/_next/static/chunks/03~yq9q893hmn.js +1 -0
  15. package/dashboard/_next/_next/static/chunks/04wr2uisy8870.js +5 -0
  16. package/dashboard/_next/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
  17. package/dashboard/_next/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
  18. package/dashboard/_next/_next/static/chunks/0nrlwe_~wde44.js +1 -0
  19. package/dashboard/_next/_next/static/chunks/12l48lp-434~..js +31 -0
  20. package/dashboard/_next/_next/static/chunks/14qcm-bqojrb9.js +1 -0
  21. package/dashboard/_next/_next/static/chunks/15~vsexhgsteo.js +1 -0
  22. package/dashboard/_next/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
  23. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_buildManifest.js +11 -0
  24. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_clientMiddlewareManifest.js +1 -0
  25. package/dashboard/_next/static/8Qf-y5Z4kUHAaWZgy3BFF/_ssgManifest.js +1 -0
  26. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_buildManifest.js +11 -0
  27. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_clientMiddlewareManifest.js +1 -0
  28. package/dashboard/_next/static/IQ8CU45QQ3REnyUqiqjou/_ssgManifest.js +1 -0
  29. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_buildManifest.js +11 -0
  30. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_clientMiddlewareManifest.js +1 -0
  31. package/dashboard/_next/static/PXgzS7j3kuwIb14Ph3vgL/_ssgManifest.js +1 -0
  32. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_buildManifest.js +11 -0
  33. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_clientMiddlewareManifest.js +1 -0
  34. package/dashboard/_next/static/S6BdJ1Ro25a6twuts7gHi/_ssgManifest.js +1 -0
  35. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_buildManifest.js +11 -0
  36. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_clientMiddlewareManifest.js +1 -0
  37. package/dashboard/_next/static/T-oVqD_b6KFHCZwRKsnRE/_ssgManifest.js +1 -0
  38. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_buildManifest.js +11 -0
  39. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_clientMiddlewareManifest.js +1 -0
  40. package/dashboard/_next/static/bvUynE5XeBkbLQynmgHa8/_ssgManifest.js +1 -0
  41. package/dashboard/_next/static/chunks/0.9wqq91a2h.e.js +3 -0
  42. package/dashboard/_next/static/chunks/00-nlsz4ud071.js +11 -0
  43. package/dashboard/_next/static/chunks/00noe7du3vxk9.js +1 -0
  44. package/dashboard/_next/static/chunks/03~yq9q893hmn.js +1 -0
  45. package/dashboard/_next/static/chunks/04wr2uisy8870.js +5 -0
  46. package/dashboard/_next/static/chunks/05f.w0h0j~.3g.js +1 -0
  47. package/dashboard/_next/static/chunks/08ug0khjvhl6m.js +11 -0
  48. package/dashboard/_next/static/chunks/0d1s5w1cd08~7.js +11 -0
  49. package/dashboard/_next/static/chunks/0geaa8~wrpcj6.js +1 -0
  50. package/dashboard/_next/static/chunks/0lyajo4_yki3f.js +11 -0
  51. package/dashboard/_next/static/chunks/0nrlwe_~wde44.js +1 -0
  52. package/dashboard/_next/static/chunks/0pd15v2_1spxb.js +11 -0
  53. package/dashboard/_next/static/chunks/0vnhcfh7g1u6i.js +11 -0
  54. package/dashboard/_next/static/chunks/0ynuwcqa7w3o..css +2 -0
  55. package/dashboard/_next/static/chunks/11dfqgfbc8fk2.js +11 -0
  56. package/dashboard/_next/static/chunks/12l48lp-434~..js +31 -0
  57. package/dashboard/_next/static/chunks/14qcm-bqojrb9.js +1 -0
  58. package/dashboard/_next/static/chunks/15~vsexhgsteo.js +1 -0
  59. package/dashboard/_next/static/chunks/turbopack-173kubfog5kol.js +1 -0
  60. package/dashboard/_next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
  61. package/dashboard/_next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
  62. package/dashboard/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
  63. package/dashboard/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
  64. package/dashboard/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
  65. package/dashboard/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
  66. package/dashboard/_next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
  67. package/dashboard/_next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  68. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_buildManifest.js +11 -0
  69. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_clientMiddlewareManifest.js +1 -0
  70. package/dashboard/_next/static/uQ6ZB7JlP8tE93mlzKtXM/_ssgManifest.js +1 -0
  71. package/dashboard/_not-found/__next._full.txt +16 -0
  72. package/dashboard/_not-found/__next._head.txt +6 -0
  73. package/dashboard/_not-found/__next._index.txt +5 -0
  74. package/dashboard/_not-found/__next._not-found.__PAGE__.txt +5 -0
  75. package/dashboard/_not-found/__next._not-found.txt +5 -0
  76. package/dashboard/_not-found/__next._tree.txt +2 -0
  77. package/dashboard/_not-found.html +1 -0
  78. package/dashboard/_not-found.txt +16 -0
  79. package/dashboard/favicon.ico +0 -0
  80. package/dashboard/file.svg +1 -0
  81. package/dashboard/globe.svg +1 -0
  82. package/dashboard/index.html +1 -0
  83. package/dashboard/index.txt +19 -0
  84. package/dashboard/next.svg +1 -0
  85. package/dashboard/vercel.svg +1 -0
  86. package/dashboard/window.svg +1 -0
  87. package/dist/agent/agent-cursor.js +138 -0
  88. package/dist/agent/agent-cursor.js.map +1 -0
  89. package/dist/agent/agent-sdk.js +71 -57
  90. package/dist/agent/agent-sdk.js.map +1 -1
  91. package/dist/agent/types.js +1 -1
  92. package/dist/agent/types.js.map +1 -1
  93. package/dist/agent.js +11 -7
  94. package/dist/agent.js.map +1 -1
  95. package/dist/bootstrap.js +1 -1
  96. package/dist/bootstrap.js.map +1 -1
  97. package/dist/cli/cmd-config.js +1 -1
  98. package/dist/cli/cmd-config.js.map +1 -1
  99. package/dist/cli/cmd-dashboard.js +63 -0
  100. package/dist/cli/cmd-dashboard.js.map +1 -0
  101. package/dist/cli/cmd-pairing.js +1 -1
  102. package/dist/cli/cmd-pairing.js.map +1 -1
  103. package/dist/cli/cmd-projects.js +128 -0
  104. package/dist/cli/cmd-projects.js.map +1 -0
  105. package/dist/cli/cmd-team.js +587 -0
  106. package/dist/cli/cmd-team.js.map +1 -0
  107. package/dist/cli.js +2 -1
  108. package/dist/cli.js.map +1 -1
  109. package/dist/core/config.js +33 -48
  110. package/dist/core/config.js.map +1 -1
  111. package/dist/core/constants.js +2 -0
  112. package/dist/core/constants.js.map +1 -1
  113. package/dist/core/version.js +1 -1
  114. package/dist/extensions/bot-approval.js.map +1 -0
  115. package/dist/extensions/pairing.js.map +1 -0
  116. package/dist/extensions/team-coordinator.js +63 -0
  117. package/dist/extensions/team-coordinator.js.map +1 -0
  118. package/dist/gateway/csrf.js +1 -1
  119. package/dist/gateway/csrf.js.map +1 -1
  120. package/dist/gateway/routes.js +198 -95
  121. package/dist/gateway/routes.js.map +1 -1
  122. package/dist/gateway/ws-handler.js +200 -168
  123. package/dist/gateway/ws-handler.js.map +1 -1
  124. package/dist/gateway-entry.js +8 -2
  125. package/dist/gateway-entry.js.map +1 -1
  126. package/dist/model.js +5 -4
  127. package/dist/model.js.map +1 -1
  128. package/dist/runtime/orchestrate.js +19 -8
  129. package/dist/runtime/orchestrate.js.map +1 -1
  130. package/dist/serve.js +18 -3
  131. package/dist/serve.js.map +1 -1
  132. package/dist/session.js +14 -2
  133. package/dist/session.js.map +1 -1
  134. package/dist/setup.js +17 -2
  135. package/dist/setup.js.map +1 -1
  136. package/dist/team.js +203 -0
  137. package/dist/team.js.map +1 -0
  138. package/dist/telegram/admin-agents.js +498 -0
  139. package/dist/telegram/admin-agents.js.map +1 -0
  140. package/dist/telegram/admin-bot.js +13 -934
  141. package/dist/telegram/admin-bot.js.map +1 -1
  142. package/dist/telegram/admin-commands.js +403 -0
  143. package/dist/telegram/admin-commands.js.map +1 -0
  144. package/dist/telegram/agent-bot.js +45 -1338
  145. package/dist/telegram/agent-bot.js.map +1 -1
  146. package/dist/telegram/agent-claude-code.js +555 -0
  147. package/dist/telegram/agent-claude-code.js.map +1 -0
  148. package/dist/telegram/agent-commands.js +396 -0
  149. package/dist/telegram/agent-commands.js.map +1 -0
  150. package/dist/telegram/agent-context.js +136 -0
  151. package/dist/telegram/agent-context.js.map +1 -0
  152. package/dist/telegram/agent-messages.js +249 -0
  153. package/dist/telegram/agent-messages.js.map +1 -0
  154. package/dist/telegram/dir-browser.js +9 -0
  155. package/dist/telegram/dir-browser.js.map +1 -1
  156. package/dist/telegram/draft-stream.js +4 -2
  157. package/dist/telegram/draft-stream.js.map +1 -1
  158. package/dist/telegram/resolve.js +15 -28
  159. package/dist/telegram/resolve.js.map +1 -1
  160. package/dist/telegram/terminal.js +139 -32
  161. package/dist/telegram/terminal.js.map +1 -1
  162. package/dist/telegram/wizards.js +1 -1
  163. package/dist/telegram/wizards.js.map +1 -1
  164. package/dist/telegram.js +4 -3
  165. package/dist/telegram.js.map +1 -1
  166. package/dist/tools/admin.js +841 -0
  167. package/dist/tools/admin.js.map +1 -0
  168. package/dist/tools/team.js +182 -0
  169. package/dist/tools/team.js.map +1 -0
  170. package/dist/tui/commands.js +15 -0
  171. package/dist/tui/commands.js.map +1 -1
  172. package/dist/tui/components/welcome.js +2 -1
  173. package/dist/tui/components/welcome.js.map +1 -1
  174. package/dist/tui/tui.js +13 -1
  175. package/dist/tui/tui.js.map +1 -1
  176. package/package.json +4 -1
  177. package/dist/cli/cmd-install.js +0 -80
  178. package/dist/cli/cmd-install.js.map +0 -1
  179. package/dist/telegram/bot-approval.js.map +0 -1
  180. package/dist/telegram/pairing.js.map +0 -1
  181. /package/dist/{telegram → extensions}/bot-approval.js +0 -0
  182. /package/dist/{telegram → extensions}/pairing.js +0 -0
@@ -0,0 +1,498 @@
1
+ // Admin bot: agent management — list, create, delete, edit, clone, soul
2
+ import { InlineKeyboard } from "grammy";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { saveConfig } from "../core/config.js";
6
+ import { agentMemoryDir } from "../workspace.js";
7
+ import { getActiveBotIds, startBot, stopBot } from "../telegram.js";
8
+ import { startWizard } from "./wizard.js";
9
+ import { createNewAgentWizard, createCloneWizard } from "./wizards.js";
10
+ import { resolvePreset } from "../core/models.js";
11
+ import { approveRequest, denyRequest } from "../extensions/pairing.js";
12
+ import { notifyUserApproved, notifyUserOfDenial } from "./pairing-notify.js";
13
+ import { approveBotApproval, denyBotApproval } from "../extensions/bot-approval.js";
14
+ // ─── Helpers ────────────────────────────────────────────────────────
15
+ async function showSoul(chatId, targetId, edit, bot) {
16
+ const soulPath = path.join(agentMemoryDir(targetId), "SOUL.md");
17
+ if (edit) {
18
+ const editWizard = {
19
+ id: "soul-edit",
20
+ steps: [{
21
+ id: "content",
22
+ prompt: `Send the new SOUL.md content for "${targetId}".\nCurrent content will be replaced. /cancel to abort.`,
23
+ }],
24
+ onComplete: async (data) => {
25
+ const dir = agentMemoryDir(targetId);
26
+ fs.mkdirSync(dir, { recursive: true });
27
+ fs.writeFileSync(soulPath, data.content);
28
+ return `SOUL.md updated for "${targetId}".\n\n${data.content.slice(0, 200)}${data.content.length > 200 ? "..." : ""}`;
29
+ },
30
+ };
31
+ await startWizard(chatId, editWizard, bot);
32
+ return;
33
+ }
34
+ if (!fs.existsSync(soulPath)) {
35
+ await bot.api.sendMessage(chatId, `No SOUL.md for "${targetId}" yet.`);
36
+ return;
37
+ }
38
+ const content = fs.readFileSync(soulPath, "utf-8").trim();
39
+ const preview = content.length > 3800 ? content.slice(0, 3800) + "\n\n[truncated]" : content;
40
+ const kb = new InlineKeyboard().text("Edit", `picksoul:edit:${targetId}`);
41
+ await bot.api.sendMessage(chatId, `SOUL.md (${targetId}):\n\n${preview}`, { reply_markup: kb });
42
+ }
43
+ async function showAgentConfig(chatId, agentIdParam, config, bot) {
44
+ const agent = config.agents[agentIdParam];
45
+ if (!agent)
46
+ return;
47
+ const model = agent.model ?? config.model;
48
+ const thinking = agent.thinking ?? config.thinking;
49
+ const effort = agent.effort ?? config.effort;
50
+ const maxTurns = agent.maxTurns ?? config.maxTurns;
51
+ const mcpCount = agent.mcp ? Object.keys(agent.mcp.servers).length : 0;
52
+ const runningBots = getActiveBotIds();
53
+ const running = runningBots.includes(agentIdParam);
54
+ const statusIcon = running ? "🟢" : agent.telegram?.botToken ? "🔴" : "⚪";
55
+ const briefMode = agent.telegram?.briefMode ?? true;
56
+ const lines = [
57
+ `${statusIcon} ${agent.name} (${agentIdParam})\n`,
58
+ `Model: ${model}`, `Thinking: ${thinking}`, `Effort: ${effort}`,
59
+ `Max Turns: ${maxTurns}`, `Brief: ${briefMode ? "on" : "off"}`,
60
+ mcpCount > 0 ? `MCP: ${mcpCount} server${mcpCount > 1 ? "s" : ""}` : `MCP: none`,
61
+ ];
62
+ const kb = new InlineKeyboard()
63
+ .text("Model", `ae:model:${agentIdParam}`)
64
+ .text("Thinking", `ae:think:${agentIdParam}`)
65
+ .text("Effort", `ae:effort:${agentIdParam}`)
66
+ .row()
67
+ .text("Max Turns", `ae:turns:${agentIdParam}`)
68
+ .text(`Brief: ${briefMode ? "on" : "off"}`, `ae:brief:${agentIdParam}`)
69
+ .text("Clone", `ae:clone:${agentIdParam}`);
70
+ await bot.api.sendMessage(chatId, lines.join("\n"), { reply_markup: kb });
71
+ }
72
+ // ─── Registration ───────────────────────────────────────────────────
73
+ export function registerAdminAgents(b, agentId, getConfig, getSystemPrompt, activeBots) {
74
+ // ─── Agent list ─────────────────────────────────────────────────
75
+ b.command("agents", async (ctx) => {
76
+ const config = getConfig();
77
+ const entries = Object.entries(config.agents);
78
+ if (entries.length === 0) {
79
+ await ctx.reply("No agents configured.\n\nUse /newagent to create one.");
80
+ return;
81
+ }
82
+ const runningBots = getActiveBotIds();
83
+ const lines = ["Your agents:\n"];
84
+ const kb = new InlineKeyboard();
85
+ let hasButtons = false;
86
+ for (const [id, a] of entries) {
87
+ const running = runningBots.includes(id);
88
+ const botState = activeBots.get(id);
89
+ const username = botState?.botInfo?.username;
90
+ const statusIcon = running ? "🟢" : a.telegram?.botToken ? "🔴" : "⚪";
91
+ lines.push(`${statusIcon} ${a.name} (${id})`);
92
+ lines.push(` Model: ${a.model ?? config.model}`);
93
+ if (running && username)
94
+ lines.push(` @${username}`);
95
+ else if (a.telegram?.botToken && !running)
96
+ lines.push(` Telegram: stopped`);
97
+ else if (!a.telegram?.botToken && !a.admin)
98
+ lines.push(` No channel configured`);
99
+ lines.push("");
100
+ if (running && username && !a.admin) {
101
+ kb.url(`💬 ${a.name}`, `https://t.me/${username}`);
102
+ hasButtons = true;
103
+ }
104
+ }
105
+ lines.push("Use /agent <id> to view/edit config");
106
+ if (hasButtons)
107
+ kb.row();
108
+ kb.text("➕ New agent", "agents:newagent");
109
+ const stoppedAgents = entries.filter(([id, a]) => !runningBots.includes(id) && a.telegram?.botToken && !a.admin);
110
+ if (stoppedAgents.length > 0)
111
+ kb.text("🔄 Restart stopped", "agents:restart");
112
+ await ctx.reply(lines.join("\n"), { reply_markup: kb });
113
+ });
114
+ b.callbackQuery("agents:newagent", async (ctx) => {
115
+ await ctx.answerCallbackQuery();
116
+ const config = getConfig();
117
+ if (!config.apiKey) {
118
+ await ctx.reply("No API key configured. Run /setup first.");
119
+ return;
120
+ }
121
+ await startWizard(ctx.chat.id, createNewAgentWizard(getConfig, getSystemPrompt), b);
122
+ });
123
+ b.callbackQuery("agents:restart", async (ctx) => {
124
+ await ctx.answerCallbackQuery();
125
+ const config = getConfig();
126
+ const restarted = [];
127
+ for (const [id, a] of Object.entries(config.agents)) {
128
+ if (a.admin || !a.telegram?.botToken)
129
+ continue;
130
+ if (getActiveBotIds().includes(id))
131
+ continue;
132
+ try {
133
+ const sysPrompt = getSystemPrompt();
134
+ await startBot(id, a.telegram.botToken, getConfig, () => sysPrompt);
135
+ restarted.push(id);
136
+ }
137
+ catch { /* skip */ }
138
+ }
139
+ await ctx.reply(restarted.length > 0 ? `Restarted: ${restarted.join(", ")}` : "No stopped bots to restart.");
140
+ });
141
+ // ─── Delete agent ─────────────────────────────────────────────────
142
+ b.command("deleteagent", async (ctx) => {
143
+ const config = getConfig();
144
+ const deletable = Object.entries(config.agents).filter(([, a]) => !a.admin);
145
+ if (deletable.length === 0) {
146
+ await ctx.reply("No agents to delete.");
147
+ return;
148
+ }
149
+ const kb = new InlineKeyboard();
150
+ for (const [id, a] of deletable)
151
+ kb.text(`${a.name}`, `pickdelete:${id}`).row();
152
+ await ctx.reply("Which agent do you want to delete?", { reply_markup: kb });
153
+ });
154
+ b.callbackQuery(/^pickdelete:(.+)$/, async (ctx) => {
155
+ const id = ctx.callbackQuery.data.match(/^pickdelete:(.+)$/)?.[1];
156
+ if (!id)
157
+ return;
158
+ await ctx.answerCallbackQuery();
159
+ const config = getConfig();
160
+ if (!config.agents[id]) {
161
+ try {
162
+ await ctx.editMessageText("Agent not found.");
163
+ }
164
+ catch { }
165
+ return;
166
+ }
167
+ const kb = new InlineKeyboard()
168
+ .text("Yes, delete", `confirm:delete:${id}`)
169
+ .text("Cancel", `confirm:cancel:${id}`);
170
+ try {
171
+ await ctx.editMessageText(`Delete "${config.agents[id].name}" (${id})?\n\nBot will be stopped. Workspace files are preserved.`, { reply_markup: kb });
172
+ }
173
+ catch { }
174
+ });
175
+ b.callbackQuery(/^confirm:(.+):(.+)$/, async (ctx) => {
176
+ const match = ctx.callbackQuery.data.match(/^confirm:(.+):(.+)$/);
177
+ if (!match)
178
+ return;
179
+ const [, action, param] = match;
180
+ try {
181
+ await ctx.editMessageText(`${ctx.callbackQuery.message?.text ?? ""}\n\n-> ${action === "delete" ? "Deleting..." : "Cancelled"}`);
182
+ }
183
+ catch { }
184
+ await ctx.answerCallbackQuery();
185
+ if (action === "delete") {
186
+ const config = getConfig();
187
+ if (config.agents[param]) {
188
+ stopBot(param);
189
+ const agents = { ...config.agents };
190
+ delete agents[param];
191
+ saveConfig({ agents });
192
+ await ctx.reply(`Agent "${param}" deleted.\nWorkspace files preserved at ${agentMemoryDir(param)}`);
193
+ }
194
+ }
195
+ });
196
+ // ─── Soul ─────────────────────────────────────────────────────────
197
+ b.command("soul", async (ctx) => {
198
+ const args = (ctx.match ?? "").trim().split(/\s+/);
199
+ const targetId = args[0];
200
+ const action = args[1];
201
+ if (!targetId) {
202
+ const config = getConfig();
203
+ const entries = Object.entries(config.agents);
204
+ if (entries.length === 0) {
205
+ await ctx.reply("No agents. Use /newagent first.");
206
+ return;
207
+ }
208
+ const kb = new InlineKeyboard();
209
+ for (const [id, a] of entries)
210
+ kb.text(`${a.name}`, `picksoul:view:${id}`).row();
211
+ await ctx.reply("Which agent's SOUL.md?", { reply_markup: kb });
212
+ return;
213
+ }
214
+ const config = getConfig();
215
+ if (!config.agents[targetId]) {
216
+ await ctx.reply(`Agent "${targetId}" not found.`);
217
+ return;
218
+ }
219
+ await showSoul(ctx.chat.id, targetId, action === "edit", b);
220
+ });
221
+ b.callbackQuery(/^picksoul:(.+):(.+)$/, async (ctx) => {
222
+ const match = ctx.callbackQuery.data.match(/^picksoul:(.+):(.+)$/);
223
+ if (!match)
224
+ return;
225
+ const [, action, id] = match;
226
+ await ctx.answerCallbackQuery();
227
+ try {
228
+ await ctx.editMessageText(`-> ${id}`);
229
+ }
230
+ catch { }
231
+ await showSoul(ctx.chat.id, id, action === "edit", b);
232
+ });
233
+ // ─── Agent config editing ─────────────────────────────────────────
234
+ b.command("agent", async (ctx) => {
235
+ const targetId = (ctx.match ?? "").trim();
236
+ const config = getConfig();
237
+ if (!targetId) {
238
+ const entries = Object.entries(config.agents);
239
+ if (entries.length === 0) {
240
+ await ctx.reply("No agents. Use /newagent first.");
241
+ return;
242
+ }
243
+ const kb = new InlineKeyboard();
244
+ for (const [id, a] of entries)
245
+ kb.text(a.name, `ae:show:${id}`).row();
246
+ await ctx.reply("Which agent to view/edit?", { reply_markup: kb });
247
+ return;
248
+ }
249
+ if (!config.agents[targetId]) {
250
+ await ctx.reply(`Agent "${targetId}" not found.`);
251
+ return;
252
+ }
253
+ await showAgentConfig(ctx.chat.id, targetId, config, b);
254
+ });
255
+ b.callbackQuery(/^ae:show:(.+)$/, async (ctx) => {
256
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:show:(.+)$/)?.[1];
257
+ if (!agentIdParam)
258
+ return;
259
+ await ctx.answerCallbackQuery();
260
+ await showAgentConfig(ctx.chat.id, agentIdParam, getConfig(), b);
261
+ });
262
+ b.callbackQuery(/^ae:think:(.+)$/, async (ctx) => {
263
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:think:(.+)$/)?.[1];
264
+ if (!agentIdParam)
265
+ return;
266
+ await ctx.answerCallbackQuery();
267
+ const config = getConfig();
268
+ const current = config.agents[agentIdParam]?.thinking ?? config.thinking;
269
+ const levels = ["off", "low", "medium", "high"];
270
+ const kb = new InlineKeyboard();
271
+ for (const l of levels)
272
+ kb.text(l === current ? `✓ ${l}` : l, `as:${agentIdParam}:think:${l}`);
273
+ await ctx.reply(`Set thinking for ${agentIdParam}:`, { reply_markup: kb });
274
+ });
275
+ b.callbackQuery(/^ae:effort:(.+)$/, async (ctx) => {
276
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:effort:(.+)$/)?.[1];
277
+ if (!agentIdParam)
278
+ return;
279
+ await ctx.answerCallbackQuery();
280
+ const config = getConfig();
281
+ const current = config.agents[agentIdParam]?.effort ?? config.effort;
282
+ const levels = ["low", "medium", "high", "max"];
283
+ const kb = new InlineKeyboard();
284
+ for (const l of levels)
285
+ kb.text(l === current ? `✓ ${l}` : l, `as:${agentIdParam}:effort:${l}`);
286
+ await ctx.reply(`Set effort for ${agentIdParam}:`, { reply_markup: kb });
287
+ });
288
+ b.callbackQuery(/^ae:turns:(.+)$/, async (ctx) => {
289
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:turns:(.+)$/)?.[1];
290
+ if (!agentIdParam)
291
+ return;
292
+ await ctx.answerCallbackQuery();
293
+ const config = getConfig();
294
+ const current = config.agents[agentIdParam]?.maxTurns ?? config.maxTurns;
295
+ const options = [10, 25, 50, 100];
296
+ const kb = new InlineKeyboard();
297
+ for (const n of options)
298
+ kb.text(n === current ? `✓ ${n}` : String(n), `as:${agentIdParam}:turns:${n}`);
299
+ await ctx.reply(`Set max turns for ${agentIdParam}:`, { reply_markup: kb });
300
+ });
301
+ b.callbackQuery(/^ae:model:(.+)$/, async (ctx) => {
302
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:model:(.+)$/)?.[1];
303
+ if (!agentIdParam)
304
+ return;
305
+ await ctx.answerCallbackQuery();
306
+ const config = getConfig();
307
+ const current = config.agents[agentIdParam]?.model ?? config.model;
308
+ const preset = resolvePreset(config.provider, config.baseUrl);
309
+ const models = preset.models.slice(0, 6);
310
+ const kb = new InlineKeyboard();
311
+ for (const m of models) {
312
+ const slash = m.indexOf("/");
313
+ const label = slash > 0 ? m.slice(slash + 1) : m;
314
+ const check = m === current ? "✓ " : "";
315
+ kb.text(`${check}${label}`, `as:${agentIdParam}:model:${m}`).row();
316
+ }
317
+ kb.text("✏️ Type custom", `ae:modelcustom:${agentIdParam}`);
318
+ await ctx.reply(`Set model for ${agentIdParam}:`, { reply_markup: kb });
319
+ });
320
+ b.callbackQuery(/^ae:modelcustom:(.+)$/, async (ctx) => {
321
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:modelcustom:(.+)$/)?.[1];
322
+ if (!agentIdParam)
323
+ return;
324
+ await ctx.answerCallbackQuery();
325
+ await startWizard(ctx.chat.id, {
326
+ id: "agent-model-edit",
327
+ steps: [{ id: "model", prompt: `Type the model name for "${agentIdParam}":` }],
328
+ onComplete: async (data) => {
329
+ const cfg = getConfig();
330
+ const agents = { ...cfg.agents };
331
+ agents[agentIdParam] = { ...agents[agentIdParam], model: data.model };
332
+ saveConfig({ agents });
333
+ return `Model set to: ${data.model}`;
334
+ },
335
+ }, b);
336
+ });
337
+ b.callbackQuery(/^ae:brief:(.+)$/, async (ctx) => {
338
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:brief:(.+)$/)?.[1];
339
+ if (!agentIdParam)
340
+ return;
341
+ await ctx.answerCallbackQuery();
342
+ const config = getConfig();
343
+ const agent = config.agents[agentIdParam];
344
+ if (!agent?.telegram) {
345
+ await ctx.reply("Agent has no Telegram config.");
346
+ return;
347
+ }
348
+ const current = agent.telegram.briefMode ?? true;
349
+ const next = !current;
350
+ const agents = { ...config.agents };
351
+ agents[agentIdParam] = { ...agents[agentIdParam], telegram: { ...agents[agentIdParam].telegram, briefMode: next } };
352
+ saveConfig({ agents });
353
+ try {
354
+ await ctx.editMessageText(`Brief mode: ${next ? "on" : "off"} ✓`);
355
+ }
356
+ catch {
357
+ await ctx.reply(`Brief mode: ${next ? "on" : "off"} ✓`);
358
+ }
359
+ });
360
+ b.callbackQuery(/^ae:mcp:(.+)$/, async (ctx) => {
361
+ await ctx.answerCallbackQuery();
362
+ await ctx.reply("Use /mcp to manage MCP servers.");
363
+ });
364
+ b.callbackQuery(/^ae:clone:(.+)$/, async (ctx) => {
365
+ const agentIdParam = ctx.callbackQuery.data.match(/^ae:clone:(.+)$/)?.[1];
366
+ if (!agentIdParam)
367
+ return;
368
+ await ctx.answerCallbackQuery();
369
+ await startWizard(ctx.chat.id, createCloneWizard(agentIdParam, getConfig, getSystemPrompt), b);
370
+ });
371
+ // Generic agent setting apply (think, effort, turns, model)
372
+ b.callbackQuery(/^as:(.+?):(.+?):(.+)$/, async (ctx) => {
373
+ const match = ctx.callbackQuery.data.match(/^as:(.+?):(.+?):(.+)$/);
374
+ if (!match)
375
+ return;
376
+ const [, agentIdParam, field, value] = match;
377
+ await ctx.answerCallbackQuery();
378
+ const config = getConfig();
379
+ if (!config.agents[agentIdParam]) {
380
+ await ctx.reply("Agent not found.");
381
+ return;
382
+ }
383
+ const agents = { ...config.agents };
384
+ const agent = { ...agents[agentIdParam] };
385
+ const fieldLabels = { think: "Thinking", effort: "Effort", turns: "Max Turns", model: "Model" };
386
+ if (field === "think")
387
+ agent.thinking = value;
388
+ else if (field === "effort")
389
+ agent.effort = value;
390
+ else if (field === "turns")
391
+ agent.maxTurns = parseInt(value, 10);
392
+ else if (field === "model")
393
+ agent.model = value;
394
+ agents[agentIdParam] = agent;
395
+ saveConfig({ agents });
396
+ const label = fieldLabels[field] ?? field;
397
+ try {
398
+ await ctx.editMessageText(`${label} set to: ${value} ✓`);
399
+ }
400
+ catch {
401
+ await ctx.reply(`${label} set to: ${value} ✓`);
402
+ }
403
+ });
404
+ // ─── Pairing & bot approval callbacks ─────────────────────────────
405
+ b.callbackQuery(/^pairing:(approve|deny):(.+)$/, async (ctx) => {
406
+ const match = ctx.callbackQuery.data.match(/^pairing:(approve|deny):(.+)$/);
407
+ if (!match)
408
+ return;
409
+ const [, action, code] = match;
410
+ if (action === "approve") {
411
+ const request = approveRequest(code);
412
+ if (request) {
413
+ try {
414
+ await ctx.editMessageText(`${ctx.callbackQuery.message?.text ?? ""}\n\n-> Approved`);
415
+ }
416
+ catch { }
417
+ await notifyUserApproved(request, activeBots);
418
+ }
419
+ else {
420
+ try {
421
+ await ctx.editMessageText("Request expired or already handled.");
422
+ }
423
+ catch { }
424
+ }
425
+ }
426
+ else {
427
+ const request = denyRequest(code);
428
+ if (request) {
429
+ try {
430
+ await ctx.editMessageText(`${ctx.callbackQuery.message?.text ?? ""}\n\n-> Denied`);
431
+ }
432
+ catch { }
433
+ await notifyUserOfDenial(request, activeBots);
434
+ }
435
+ else {
436
+ try {
437
+ await ctx.editMessageText("Request expired or already handled.");
438
+ }
439
+ catch { }
440
+ }
441
+ }
442
+ await ctx.answerCallbackQuery();
443
+ });
444
+ b.callbackQuery(/^botapproval:(approve|deny):(.+)$/, async (ctx) => {
445
+ const match = ctx.callbackQuery.data.match(/^botapproval:(approve|deny):(.+)$/);
446
+ if (!match)
447
+ return;
448
+ const [, action, agentIdParam] = match;
449
+ if (action === "approve") {
450
+ const approval = approveBotApproval(agentIdParam);
451
+ if (approval) {
452
+ const botLabel = approval.botUsername ? `@${approval.botUsername}` : agentIdParam;
453
+ try {
454
+ const sysPrompt = getSystemPrompt();
455
+ await startBot(agentIdParam, approval.botToken, getConfig, () => sysPrompt);
456
+ }
457
+ catch (err) {
458
+ const errMsg = err instanceof Error ? err.message : String(err);
459
+ if (!errMsg.includes("already running") && !errMsg.includes("already starting")) {
460
+ try {
461
+ await ctx.editMessageText(`Failed to start bot: ${errMsg}`);
462
+ }
463
+ catch { }
464
+ await ctx.answerCallbackQuery();
465
+ return;
466
+ }
467
+ }
468
+ try {
469
+ await ctx.editMessageText(`${ctx.callbackQuery.message?.text ?? ""}\n\n-> Approved. ${botLabel} is now running.`);
470
+ }
471
+ catch { }
472
+ }
473
+ else {
474
+ try {
475
+ await ctx.editMessageText("Approval not found or already handled.");
476
+ }
477
+ catch { }
478
+ }
479
+ }
480
+ else {
481
+ const approval = denyBotApproval(agentIdParam);
482
+ if (approval) {
483
+ try {
484
+ await ctx.editMessageText(`${ctx.callbackQuery.message?.text ?? ""}\n\n-> Denied. Bot will not start.`);
485
+ }
486
+ catch { }
487
+ }
488
+ else {
489
+ try {
490
+ await ctx.editMessageText("Approval not found or already handled.");
491
+ }
492
+ catch { }
493
+ }
494
+ }
495
+ await ctx.answerCallbackQuery();
496
+ });
497
+ }
498
+ //# sourceMappingURL=admin-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-agents.js","sourceRoot":"","sources":["../../src/telegram/admin-agents.ts"],"names":[],"mappings":"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"}