Skip to content

Commit a25af98

Browse files
committed
feat(agent): rename mode labels to agent in bot UI
1 parent 13a8948 commit a25af98

File tree

16 files changed

+131
-79
lines changed

16 files changed

+131
-79
lines changed

src/agent/types.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,12 @@ export function getAgentEmoji(agentName: string): string {
3636
export function getAgentDisplayName(agentName: string): string {
3737
const emoji = getAgentEmoji(agentName);
3838
const capitalizedName = agentName.charAt(0).toUpperCase() + agentName.slice(1);
39-
return `${emoji} ${capitalizedName} Mode`;
39+
return `${emoji} ${capitalizedName}`;
40+
}
41+
42+
/**
43+
* Get reply keyboard label for agent button.
44+
*/
45+
export function getAgentButtonLabel(agentName: string): string {
46+
return `${getAgentDisplayName(agentName)} Agent`;
4047
}

src/bot/commands/status.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export async function statusCommand(ctx: CommandContext<Context>) {
4141
message += `${t("status.line.managed_no")}\n`;
4242
}
4343

44-
// Add agent mode information
44+
// Add agent information
4545
const currentAgent = await fetchCurrentAgent();
4646
const agentDisplay = currentAgent
4747
? getAgentDisplayName(currentAgent)

src/bot/handlers/agent.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Context, InlineKeyboard } from "grammy";
22
import { selectAgent, getAvailableAgents, fetchCurrentAgent } from "../../agent/manager.js";
3-
import { getAgentDisplayName, getAgentEmoji } from "../../agent/types.js";
3+
import { getAgentDisplayName } from "../../agent/types.js";
44
import { getStoredModel } from "../../model/manager.js";
55
import { formatVariantForButton } from "../../variant/manager.js";
66
import { logger } from "../../utils/logger.js";
@@ -110,11 +110,10 @@ export async function buildAgentSelectionMenu(currentAgent?: string): Promise<In
110110

111111
// Add button for each agent
112112
agents.forEach((agent) => {
113-
const emoji = getAgentEmoji(agent.name);
114113
const isActive = agent.name === currentAgent;
115114
const label = isActive
116-
? `✅ ${emoji} ${agent.name.toUpperCase()}`
117-
: `${emoji} ${agent.name.charAt(0).toUpperCase() + agent.name.slice(1)}`;
115+
? `✅ ${getAgentDisplayName(agent.name)}`
116+
: getAgentDisplayName(agent.name);
118117

119118
keyboard.text(label, `agent:${agent.name}`).row();
120119
});

src/bot/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -974,9 +974,9 @@ export function createBot(): Bot<Context> {
974974
}
975975
});
976976

977-
// Handle Reply Keyboard button press (agent mode indicator)
977+
// Handle Reply Keyboard button press (agent indicator)
978978
bot.hears(AGENT_MODE_BUTTON_TEXT_PATTERN, async (ctx) => {
979-
logger.debug(`[Bot] Agent mode button pressed: ${ctx.message?.text}`);
979+
logger.debug(`[Bot] Agent button pressed: ${ctx.message?.text}`);
980980

981981
try {
982982
if (await blockMenuWhileInteractionActive(ctx)) {

src/bot/message-patterns.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
export const AGENT_MODE_BUTTON_TEXT_PATTERN = /^(📋|🛠|💬|🔍|📝|📄|📦|🤖)\s.+\sMode$/;
1+
export const AGENT_MODE_BUTTON_TEXT_PATTERN = /^(📋|🛠|💬|🔍|📝|📄|📦|🤖)\s.+\s(?:Mode|Agent)$/;
22

3-
export const MODEL_BUTTON_TEXT_PATTERN = /^🤖\s(?!.*\sMode$)[\s\S]+$/;
3+
export const MODEL_BUTTON_TEXT_PATTERN = /^🤖\s(?!.*\s(?:Mode|Agent)$)[\s\S]+$/;
44

55
// Keep support for both legacy "💭" and current "💡" prefix.
66
export const VARIANT_BUTTON_TEXT_PATTERN = /^(💡|💭)\s.+$/;

src/bot/utils/keyboard.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Keyboard } from "grammy";
2-
import { getAgentDisplayName } from "../../agent/types.js";
2+
import { getAgentButtonLabel } from "../../agent/types.js";
33
import { formatModelForButton } from "../../model/types.js";
44
import type { ModelInfo } from "../../model/types.js";
55
import type { ContextInfo } from "../../keyboard/types.js";
@@ -42,7 +42,7 @@ export function createMainKeyboard(
4242
variantName?: string,
4343
): Keyboard {
4444
const keyboard = new Keyboard();
45-
const agentText = getAgentDisplayName(currentAgent);
45+
const agentText = getAgentButtonLabel(currentAgent);
4646

4747
// Format model with compact provider/model text and icon
4848
const modelText = formatModelForButton(currentModel.providerID, currentModel.modelID);
@@ -65,16 +65,16 @@ export function createMainKeyboard(
6565
}
6666

6767
/**
68-
* Create Reply Keyboard with agent mode indicator
68+
* Create Reply Keyboard with agent indicator
6969
* @param currentAgent Current agent name (e.g., "build", "plan")
70-
* @returns Reply Keyboard with single button showing current mode
70+
* @returns Reply Keyboard with single button showing current agent
7171
* @deprecated Use createMainKeyboard instead
7272
*/
7373
export function createAgentKeyboard(currentAgent: string): Keyboard {
7474
const keyboard = new Keyboard();
75-
const displayName = getAgentDisplayName(currentAgent);
75+
const displayName = getAgentButtonLabel(currentAgent);
7676

77-
// Single button with current agent mode
77+
// Single button with current agent
7878
keyboard.text(displayName).row();
7979

8080
return keyboard.resized().persistent();

src/i18n/de.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ export const de: I18nDictionary = {
5151
"common.unknown_error": "unbekannter Fehler",
5252

5353
"start.welcome":
54-
"👋 Willkommen beim OpenCode Telegram Bot!\n\nNutze Befehle:\n/projects — Projekt auswählen\n/sessions — Sitzungsliste\n/new — neue Sitzung\n/task — geplante Aufgabe\n/tasklist — geplante Aufgaben\n/status — Status\n/help — Hilfe\n\nNutze die unteren Buttons, um Modus, Modell und Variante zu wählen.",
54+
"👋 Willkommen beim OpenCode Telegram Bot!\n\nNutze Befehle:\n/projects — Projekt auswählen\n/sessions — Sitzungsliste\n/new — neue Sitzung\n/task — geplante Aufgabe\n/tasklist — geplante Aufgaben\n/status — Status\n/help — Hilfe\n\nNutze die unteren Buttons, um Agent, Modell und Variante zu wählen.",
5555
"help.keyboard_hint":
56-
"💡 Nutze die unteren Buttons für Modus, Modell, Variante und Kontextaktionen.",
56+
"💡 Nutze die unteren Buttons für Agent, Modell, Variante und Kontextaktionen.",
5757
"help.text":
5858
"📖 **Hilfe**\n\n/status - Serverstatus prüfen\n/sessions - Sitzungsliste\n/new - Neue Sitzung erstellen\n/help - Hilfe",
5959

@@ -96,7 +96,7 @@ export const de: I18nDictionary = {
9696
"status.line.managed_no": "Vom Bot gestartet: Nein",
9797
"status.line.pid": "PID: {pid}",
9898
"status.line.uptime_sec": "Betriebszeit: {seconds} s",
99-
"status.line.mode": "Modus: {mode}",
99+
"status.line.mode": "Agent: {mode}",
100100
"status.line.model": "Modell: {model}",
101101
"status.line.tts": "TTS-Antworten: {tts}",
102102
"status.tts.on": "Ein",
@@ -199,11 +199,11 @@ export const de: I18nDictionary = {
199199
"opencode_stop.error":
200200
"🔴 Beim Stoppen des Servers ist ein Fehler aufgetreten.\n\nSiehe Anwendungslogs für Details.",
201201

202-
"agent.changed_callback": "Modus geändert: {name}",
203-
"agent.changed_message": "✅ Modus geändert zu: {name}",
204-
"agent.change_error_callback": "Modus konnte nicht geändert werden",
205-
"agent.menu.current": "Aktueller Modus: {name}\n\nModus auswählen:",
206-
"agent.menu.select": "Arbeitsmodus auswählen:",
202+
"agent.changed_callback": "Agent geändert: {name}",
203+
"agent.changed_message": "✅ Agent geändert zu: {name}",
204+
"agent.change_error_callback": "Agent konnte nicht geändert werden",
205+
"agent.menu.current": "Aktueller Agent: {name}\n\nAgent auswählen:",
206+
"agent.menu.select": "Agent auswählen:",
207207
"agent.menu.empty": "⚠️ Keine verfügbaren Agenten",
208208
"agent.menu.error": "🔴 Agentenliste konnte nicht geladen werden",
209209

@@ -289,7 +289,7 @@ export const de: I18nDictionary = {
289289
"question.summary.question": "Frage {index}:\n{question}\n\n",
290290
"question.summary.answer": "Antwort:\n{answer}\n\n",
291291

292-
"keyboard.agent_mode": "{emoji} {name} Modus",
292+
"keyboard.agent_mode": "{emoji} {name} Agent",
293293
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
294294
"keyboard.context_empty": "📊 0",
295295
"keyboard.variant": "💭 {name}",

src/i18n/en.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ export const en = {
4848
"common.unknown_error": "unknown error",
4949

5050
"start.welcome":
51-
"👋 Welcome to OpenCode Telegram Bot!\n\nUse commands:\n/projects — select project\n/sessions — session list\n/new — new session\n/task — scheduled task\n/tasklist — scheduled tasks\n/status — status\n/help — help\n\nUse the bottom buttons to select agent mode, model, and variant.",
51+
"👋 Welcome to OpenCode Telegram Bot!\n\nUse commands:\n/projects — select project\n/sessions — session list\n/new — new session\n/task — scheduled task\n/tasklist — scheduled tasks\n/status — status\n/help — help\n\nUse the bottom buttons to select the agent, model, and variant.",
5252
"help.keyboard_hint":
53-
"💡 Use the bottom keyboard buttons for agent mode, model, variant, and context actions.",
53+
"💡 Use the bottom keyboard buttons for the agent, model, variant, and context actions.",
5454
"help.text":
5555
"📖 **Help**\n\n/status - Check server status\n/sessions - Session list\n/new - Create new session\n/help - Help",
5656

@@ -90,7 +90,7 @@ export const en = {
9090
"status.line.managed_no": "Started by bot: No",
9191
"status.line.pid": "PID: {pid}",
9292
"status.line.uptime_sec": "Uptime: {seconds} sec",
93-
"status.line.mode": "Mode: {mode}",
93+
"status.line.mode": "Agent: {mode}",
9494
"status.line.model": "Model: {model}",
9595
"status.line.tts": "TTS replies: {tts}",
9696
"status.tts.on": "On",
@@ -188,11 +188,11 @@ export const en = {
188188
"opencode_stop.error":
189189
"🔴 An error occurred while stopping server.\n\nCheck application logs for details.",
190190

191-
"agent.changed_callback": "Mode changed: {name}",
192-
"agent.changed_message": "✅ Mode changed to: {name}",
193-
"agent.change_error_callback": "Failed to change mode",
194-
"agent.menu.current": "Current mode: {name}\n\nSelect mode:",
195-
"agent.menu.select": "Select work mode:",
191+
"agent.changed_callback": "Agent changed: {name}",
192+
"agent.changed_message": "✅ Agent changed to: {name}",
193+
"agent.change_error_callback": "Failed to change agent",
194+
"agent.menu.current": "Current agent: {name}\n\nSelect agent:",
195+
"agent.menu.select": "Select agent:",
196196
"agent.menu.empty": "⚠️ No available agents",
197197
"agent.menu.error": "🔴 Failed to get agents list",
198198

@@ -277,7 +277,7 @@ export const en = {
277277
"question.summary.question": "Question {index}:\n{question}\n\n",
278278
"question.summary.answer": "Answer:\n{answer}\n\n",
279279

280-
"keyboard.agent_mode": "{emoji} {name} Mode",
280+
"keyboard.agent_mode": "{emoji} {name} Agent",
281281
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
282282
"keyboard.context_empty": "📊 0",
283283
"keyboard.variant": "💭 {name}",

src/i18n/es.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ export const es: I18nDictionary = {
5151
"common.unknown_error": "error desconocido",
5252

5353
"start.welcome":
54-
"👋 ¡Bienvenido a OpenCode Telegram Bot!\n\nUsa los comandos:\n/projects — seleccionar proyecto\n/sessions — lista de sesiones\n/new — sesión nueva\n/task — tarea programada\n/tasklist — tareas programadas\n/status — estado\n/help — ayuda\n\nUsa los botones inferiores para elegir modo, modelo y variante.",
54+
"👋 ¡Bienvenido a OpenCode Telegram Bot!\n\nUsa los comandos:\n/projects — seleccionar proyecto\n/sessions — lista de sesiones\n/new — sesión nueva\n/task — tarea programada\n/tasklist — tareas programadas\n/status — estado\n/help — ayuda\n\nUsa los botones inferiores para elegir agente, modelo y variante.",
5555
"help.keyboard_hint":
56-
"💡 Usa los botones inferiores para modo del agente, modelo, variante y acciones de contexto.",
56+
"💡 Usa los botones inferiores para agente, modelo, variante y acciones de contexto.",
5757
"help.text":
5858
"📖 **Ayuda**\n\n/status - Ver estado del servidor\n/sessions - Lista de sesiones\n/new - Crear una sesión nueva\n/help - Ayuda",
5959

@@ -96,7 +96,7 @@ export const es: I18nDictionary = {
9696
"status.line.managed_no": "Iniciado por el bot: No",
9797
"status.line.pid": "PID: {pid}",
9898
"status.line.uptime_sec": "Tiempo activo: {seconds} s",
99-
"status.line.mode": "Modo: {mode}",
99+
"status.line.mode": "Agente: {mode}",
100100
"status.line.model": "Modelo: {model}",
101101
"status.line.tts": "Respuestas TTS: {tts}",
102102
"status.tts.on": "Activadas",
@@ -198,11 +198,11 @@ export const es: I18nDictionary = {
198198
"opencode_stop.error":
199199
"🔴 Ocurrió un error al detener el servidor.\n\nRevisa los logs de la aplicación para más detalles.",
200200

201-
"agent.changed_callback": "Modo cambiado: {name}",
202-
"agent.changed_message": "✅ Modo cambiado a: {name}",
203-
"agent.change_error_callback": "No se pudo cambiar el modo",
204-
"agent.menu.current": "Modo actual: {name}\n\nSelecciona el modo:",
205-
"agent.menu.select": "Selecciona el modo de trabajo:",
201+
"agent.changed_callback": "Agente cambiado: {name}",
202+
"agent.changed_message": "✅ Agente cambiado a: {name}",
203+
"agent.change_error_callback": "No se pudo cambiar el agente",
204+
"agent.menu.current": "Agente actual: {name}\n\nSelecciona el agente:",
205+
"agent.menu.select": "Selecciona el agente:",
206206
"agent.menu.empty": "⚠️ No hay agentes disponibles",
207207
"agent.menu.error": "🔴 No se pudo obtener la lista de agentes",
208208

@@ -287,7 +287,7 @@ export const es: I18nDictionary = {
287287
"question.summary.question": "Pregunta {index}:\n{question}\n\n",
288288
"question.summary.answer": "Respuesta:\n{answer}\n\n",
289289

290-
"keyboard.agent_mode": "{emoji} Modo {name}",
290+
"keyboard.agent_mode": "{emoji} {name} Agent",
291291
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
292292
"keyboard.context_empty": "📊 0",
293293
"keyboard.variant": "💭 {name}",

src/i18n/fr.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ export const fr: I18nDictionary = {
5151
"common.unknown_error": "erreur inconnue",
5252

5353
"start.welcome":
54-
"👋 Bienvenue dans OpenCode Telegram Bot !\n\nUtilisez les commandes :\n/projects — sélectionner un projet\n/sessions — liste des sessions\n/new — nouvelle session\n/task — tâche planifiée\n/tasklist — tâches planifiées\n/status — statut\n/help — aide\n\nUtilisez les boutons du bas pour choisir le mode d'agent, le modèle et la variante.",
54+
"👋 Bienvenue dans OpenCode Telegram Bot !\n\nUtilisez les commandes :\n/projects — sélectionner un projet\n/sessions — liste des sessions\n/new — nouvelle session\n/task — tâche planifiée\n/tasklist — tâches planifiées\n/status — statut\n/help — aide\n\nUtilisez les boutons du bas pour choisir l'agent, le modèle et la variante.",
5555
"help.keyboard_hint":
56-
"💡 Utilisez les boutons du bas pour le mode d'agent, le modèle, la variante et les actions de contexte.",
56+
"💡 Utilisez les boutons du bas pour l'agent, le modèle, la variante et les actions de contexte.",
5757
"help.text":
5858
"📖 **Aide**\n\n/status - Vérifier l'état du serveur\n/sessions - Liste des sessions\n/new - Créer une nouvelle session\n/help - Aide",
5959

@@ -97,7 +97,7 @@ export const fr: I18nDictionary = {
9797
"status.line.managed_no": "Démarré par le bot : Non",
9898
"status.line.pid": "PID : {pid}",
9999
"status.line.uptime_sec": "Temps de fonctionnement : {seconds} sec",
100-
"status.line.mode": "Mode : {mode}",
100+
"status.line.mode": "Agent : {mode}",
101101
"status.line.model": "Modèle : {model}",
102102
"status.line.tts": "Réponses TTS : {tts}",
103103
"status.tts.on": "Activées",
@@ -199,11 +199,11 @@ export const fr: I18nDictionary = {
199199
"opencode_stop.error":
200200
"🔴 Une erreur s'est produite lors de l'arrêt du serveur.\n\nConsultez les logs de l'application pour plus de détails.",
201201

202-
"agent.changed_callback": "Mode modifié : {name}",
203-
"agent.changed_message": "✅ Mode défini sur : {name}",
204-
"agent.change_error_callback": "Impossible de modifier le mode",
205-
"agent.menu.current": "Mode actuel : {name}\n\nSélectionnez un mode :",
206-
"agent.menu.select": "Sélectionnez un mode de travail :",
202+
"agent.changed_callback": "Agent modifié : {name}",
203+
"agent.changed_message": "✅ Agent défini sur : {name}",
204+
"agent.change_error_callback": "Impossible de modifier l'agent",
205+
"agent.menu.current": "Agent actuel : {name}\n\nSélectionnez un agent :",
206+
"agent.menu.select": "Sélectionnez un agent :",
207207
"agent.menu.empty": "⚠️ Aucun mode disponible",
208208
"agent.menu.error": "🔴 Impossible de récupérer la liste des modes",
209209

@@ -289,7 +289,7 @@ export const fr: I18nDictionary = {
289289
"question.summary.question": "Question {index} :\n{question}\n\n",
290290
"question.summary.answer": "Réponse :\n{answer}\n\n",
291291

292-
"keyboard.agent_mode": "{emoji} Mode {name}",
292+
"keyboard.agent_mode": "{emoji} {name} Agent",
293293
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
294294
"keyboard.context_empty": "📊 0",
295295
"keyboard.variant": "💭 {name}",

0 commit comments

Comments
 (0)