iosm-cli 0.2.13 → 0.2.15

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 (78) hide show
  1. package/.npmignore +2 -0
  2. package/CHANGELOG.md +49 -0
  3. package/README.md +12 -2
  4. package/dist/cli/args.d.ts +1 -1
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js +9 -2
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/core/auth-storage.d.ts.map +1 -1
  9. package/dist/core/auth-storage.js +17 -2
  10. package/dist/core/auth-storage.js.map +1 -1
  11. package/dist/core/command-dispatcher.d.ts +16 -0
  12. package/dist/core/command-dispatcher.d.ts.map +1 -0
  13. package/dist/core/command-dispatcher.js +678 -0
  14. package/dist/core/command-dispatcher.js.map +1 -0
  15. package/dist/core/model-registry.d.ts.map +1 -1
  16. package/dist/core/model-registry.js +13 -1
  17. package/dist/core/model-registry.js.map +1 -1
  18. package/dist/core/model-resolver.d.ts +2 -2
  19. package/dist/core/model-resolver.d.ts.map +1 -1
  20. package/dist/core/model-resolver.js +1 -2
  21. package/dist/core/model-resolver.js.map +1 -1
  22. package/dist/core/provider-policy.d.ts +7 -0
  23. package/dist/core/provider-policy.d.ts.map +1 -0
  24. package/dist/core/provider-policy.js +19 -0
  25. package/dist/core/provider-policy.js.map +1 -0
  26. package/dist/core/settings-manager.d.ts +25 -0
  27. package/dist/core/settings-manager.d.ts.map +1 -1
  28. package/dist/core/settings-manager.js +32 -0
  29. package/dist/core/settings-manager.js.map +1 -1
  30. package/dist/core/slash-commands.d.ts.map +1 -1
  31. package/dist/core/slash-commands.js +4 -1
  32. package/dist/core/slash-commands.js.map +1 -1
  33. package/dist/core/subagent-background-runs.d.ts +56 -0
  34. package/dist/core/subagent-background-runs.d.ts.map +1 -0
  35. package/dist/core/subagent-background-runs.js +275 -0
  36. package/dist/core/subagent-background-runs.js.map +1 -0
  37. package/dist/core/tools/task.d.ts.map +1 -1
  38. package/dist/core/tools/task.js +39 -35
  39. package/dist/core/tools/task.js.map +1 -1
  40. package/dist/main.d.ts.map +1 -1
  41. package/dist/main.js +16 -2
  42. package/dist/main.js.map +1 -1
  43. package/dist/modes/index.d.ts +1 -0
  44. package/dist/modes/index.d.ts.map +1 -1
  45. package/dist/modes/index.js +1 -0
  46. package/dist/modes/index.js.map +1 -1
  47. package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  48. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  49. package/dist/modes/interactive/components/login-dialog.js +1 -4
  50. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  51. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  52. package/dist/modes/interactive/components/oauth-selector.js +1 -2
  53. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  54. package/dist/modes/interactive/interactive-mode.d.ts +7 -0
  55. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  56. package/dist/modes/interactive/interactive-mode.js +253 -10
  57. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  58. package/dist/modes/rpc/rpc-client.d.ts +11 -1
  59. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  60. package/dist/modes/rpc/rpc-client.js +54 -0
  61. package/dist/modes/rpc/rpc-client.js.map +1 -1
  62. package/dist/modes/rpc/rpc-mode.d.ts +1 -1
  63. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  64. package/dist/modes/rpc/rpc-mode.js +87 -3
  65. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  66. package/dist/modes/rpc/rpc-types.d.ts +69 -0
  67. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  68. package/dist/modes/rpc/rpc-types.js.map +1 -1
  69. package/dist/modes/telegram/telegram-bridge-mode.d.ts +15 -0
  70. package/dist/modes/telegram/telegram-bridge-mode.d.ts.map +1 -0
  71. package/dist/modes/telegram/telegram-bridge-mode.js +2164 -0
  72. package/dist/modes/telegram/telegram-bridge-mode.js.map +1 -0
  73. package/docs/cli-reference.md +10 -1
  74. package/docs/configuration.md +21 -0
  75. package/docs/rpc-json-sdk.md +23 -0
  76. package/examples/extensions/README.md +1 -2
  77. package/package.json +4 -3
  78. package/examples/extensions/antigravity-image-gen.ts +0 -415
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-bridge-mode.js","sourceRoot":"","sources":["../../../src/modes/telegram/telegram-bridge-mode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentEvent } from \"@mariozechner/pi-agent-core\";\nimport { marked, type Token, type Tokens } from \"marked\";\nimport { setTimeout as sleepTimeout } from \"node:timers/promises\";\nimport { APP_NAME, VERSION } from \"../../config.js\";\nimport type { BuiltinCommandResult } from \"../../core/command-dispatcher.js\";\nimport type { SettingsManager } from \"../../core/settings-manager.js\";\nimport { RpcClient } from \"../rpc/rpc-client.js\";\nimport type {\n\tRpcBuiltinSlashCommand,\n\tRpcExtensionUIRequest,\n\tRpcRequiresConfirmationEvent,\n\tRpcSessionState,\n\tRpcSlashCommand,\n} from \"../rpc/rpc-types.js\";\n\ntype TelegramChatId = number;\n\nexport interface TelegramBridgeModeOptions {\n\t/**\n\t * Original CLI argv (without node/script prefixes). Used to forward model/profile/session args to RPC child.\n\t */\n\trawArgs: string[];\n\t/** Loaded settings manager for telegram settings and runtime updates. */\n\tsettingsManager: SettingsManager;\n\t/** Optional explicit cli path for RPC child. Defaults to current process argv[1]. */\n\tcliPath?: string;\n\t/** Optional cwd override for RPC child. */\n\tcwd?: string;\n}\n\ninterface TelegramUser {\n\tid: number;\n\tusername?: string;\n}\n\ninterface TelegramChat {\n\tid: number;\n\ttype: string;\n}\n\ninterface TelegramMessage {\n\tmessage_id: number;\n\tfrom?: TelegramUser;\n\tchat: TelegramChat;\n\tdate: number;\n\ttext?: string;\n}\n\ninterface TelegramCallbackQuery {\n\tid: string;\n\tfrom: TelegramUser;\n\tdata?: string;\n\tmessage?: TelegramMessage;\n}\n\ninterface TelegramUpdate {\n\tupdate_id: number;\n\tmessage?: TelegramMessage;\n\tcallback_query?: TelegramCallbackQuery;\n}\n\ninterface TelegramApiEnvelope<T> {\n\tok: boolean;\n\tresult?: T;\n\tdescription?: string;\n\terror_code?: number;\n}\n\ninterface TelegramInlineKeyboardMarkup {\n\tinline_keyboard: Array<Array<{ text: string; callback_data: string }>>;\n}\n\ninterface TelegramReplyKeyboardMarkup {\n\tkeyboard: Array<Array<{ text: string }>>;\n\tresize_keyboard?: boolean;\n\tis_persistent?: boolean;\n\tone_time_keyboard?: boolean;\n\tinput_field_placeholder?: string;\n}\n\ntype TelegramReplyMarkup = TelegramInlineKeyboardMarkup | TelegramReplyKeyboardMarkup;\n\ninterface ActiveTurnState {\n\tturnId: number;\n\tchatId: TelegramChatId;\n\tprompt: string;\n\tstartedAt: number;\n\tstatusMessageId: number;\n\tphase: string;\n\tlastTool?: string;\n\taborted: boolean;\n\tstatusEditPending: boolean;\n\tstatusEditTimer?: NodeJS.Timeout;\n\tstatusEditInFlight?: Promise<void>;\n\tlastStatusEditAt: number;\n}\n\ninterface PendingConfirmation {\n\tchatId: TelegramChatId;\n\trequestId: string;\n\tlabel: string;\n\tgroupKey: string;\n}\n\ninterface CommandCatalogEntry {\n\tname: string;\n\tdescription?: string;\n\tsource: \"builtin\" | \"extension\" | \"prompt\" | \"skill\";\n\tcommandText: string;\n}\n\ntype CommandMenuView = \"main\" | \"all\";\n\ninterface ModelCatalogEntry {\n\tprovider: string;\n\tid: string;\n\tcontextWindow: number;\n\treasoning: boolean;\n}\n\ntype HubView = \"compact\" | \"details\";\n\nconst COMMANDS_PAGE_SIZE = 8;\nconst COMMAND_MENU_TTL_MS = 5 * 60 * 1000;\nconst MODELS_PAGE_SIZE = 8;\nconst MODEL_MENU_TTL_MS = 2 * 60 * 1000;\nconst LIVE_STATUS_ANIMATION_MAX_THROTTLE_MS = 850;\nconst INPUT_BUTTON_HUB = \"🧭 Hub\";\nconst INPUT_BUTTON_START = \"▶️ Start\";\nconst INPUT_BUTTON_NEW = \"🆕 New\";\nconst INPUT_BUTTON_COMMANDS = \"⚡ Cmd\";\nconst INPUT_BUTTON_HELP = \"❓ Help\";\nconst INPUT_BUTTON_ABORT = \"⛔ Abort\";\nconst INPUT_BUTTON_STOP = \"🛑 Stop\";\nconst MAIN_COMMAND_MENU: CommandCatalogEntry[] = [\n\t{\n\t\tname: \"model\",\n\t\tdescription: \"Choose active model\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/model\",\n\t},\n\t{\n\t\tname: \"status\",\n\t\tdescription: \"Show control hub status\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/status\",\n\t},\n\t{\n\t\tname: \"new\",\n\t\tdescription: \"Start a new session\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/new\",\n\t},\n\t{\n\t\tname: \"abort\",\n\t\tdescription: \"Abort active task\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/abort\",\n\t},\n\t{\n\t\tname: \"permissions\",\n\t\tdescription: \"Show permission mode\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/permissions status\",\n\t},\n\t{\n\t\tname: \"yolo\",\n\t\tdescription: \"Show YOLO mode\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/yolo status\",\n\t},\n\t{\n\t\tname: \"help\",\n\t\tdescription: \"Show command help\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/help\",\n\t},\n\t{\n\t\tname: \"stop\",\n\t\tdescription: \"Stop bridge and cancel active work\",\n\t\tsource: \"builtin\",\n\t\tcommandText: \"/stop\",\n\t},\n];\n\nclass TelegramBotApi {\n\tconstructor(private readonly token: string) {}\n\n\tprivate get endpoint(): string {\n\t\treturn `https://api.telegram.org/bot${this.token}`;\n\t}\n\n\tasync getMe(): Promise<{ id: number; username?: string }> {\n\t\treturn this.call(\"getMe\", {});\n\t}\n\n\tasync getUpdates(offset: number, timeoutSeconds: number): Promise<TelegramUpdate[]> {\n\t\treturn this.call(\"getUpdates\", {\n\t\t\toffset,\n\t\t\ttimeout: timeoutSeconds,\n\t\t\tallowed_updates: [\"message\", \"callback_query\"],\n\t\t});\n\t}\n\n\tasync sendMessage(\n\t\tchatId: TelegramChatId,\n\t\ttext: string,\n\t\toptions?: {\n\t\t\treplyMarkup?: TelegramReplyMarkup;\n\t\t\tdisableNotification?: boolean;\n\t\t\tparseMode?: \"HTML\";\n\t\t},\n\t): Promise<TelegramMessage> {\n\t\treturn this.call(\"sendMessage\", {\n\t\t\tchat_id: chatId,\n\t\t\ttext,\n\t\t\treply_markup: options?.replyMarkup,\n\t\t\tdisable_notification: options?.disableNotification ?? false,\n\t\t\tparse_mode: options?.parseMode,\n\t\t});\n\t}\n\n\tasync editMessageText(\n\t\tchatId: TelegramChatId,\n\t\tmessageId: number,\n\t\ttext: string,\n\t\toptions?: { replyMarkup?: TelegramInlineKeyboardMarkup },\n\t): Promise<TelegramMessage | boolean> {\n\t\treturn this.call(\"editMessageText\", {\n\t\t\tchat_id: chatId,\n\t\t\tmessage_id: messageId,\n\t\t\ttext,\n\t\t\treply_markup: options?.replyMarkup,\n\t\t});\n\t}\n\n\tasync editMessageReplyMarkup(\n\t\tchatId: TelegramChatId,\n\t\tmessageId: number,\n\t\treplyMarkup?: TelegramInlineKeyboardMarkup,\n\t): Promise<TelegramMessage | boolean> {\n\t\treturn this.call(\"editMessageReplyMarkup\", {\n\t\t\tchat_id: chatId,\n\t\t\tmessage_id: messageId,\n\t\t\treply_markup: replyMarkup,\n\t\t});\n\t}\n\n\tasync deleteMessage(chatId: TelegramChatId, messageId: number): Promise<boolean> {\n\t\treturn this.call(\"deleteMessage\", {\n\t\t\tchat_id: chatId,\n\t\t\tmessage_id: messageId,\n\t\t});\n\t}\n\n\tasync answerCallbackQuery(callbackQueryId: string, text?: string): Promise<boolean> {\n\t\treturn this.call(\"answerCallbackQuery\", {\n\t\t\tcallback_query_id: callbackQueryId,\n\t\t\ttext,\n\t\t\tshow_alert: false,\n\t\t});\n\t}\n\n\tasync sendTextDocument(chatId: TelegramChatId, filename: string, content: string, caption?: string): Promise<TelegramMessage> {\n\t\tconst form = new FormData();\n\t\tform.set(\"chat_id\", String(chatId));\n\t\tif (caption) {\n\t\t\tform.set(\"caption\", caption);\n\t\t}\n\t\tform.set(\"document\", new Blob([content], { type: \"text/plain\" }), filename);\n\t\treturn this.callMultipart(\"sendDocument\", form);\n\t}\n\n\tprivate async call<T>(method: string, payload: Record<string, unknown>): Promise<T> {\n\t\tconst response = await fetch(`${this.endpoint}/${method}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(payload),\n\t\t});\n\t\tconst envelope = (await response.json()) as TelegramApiEnvelope<T>;\n\t\tif (!response.ok || !envelope.ok || envelope.result === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Telegram API ${method} failed: ${envelope.description ?? response.statusText} (${envelope.error_code ?? response.status})`,\n\t\t\t);\n\t\t}\n\t\treturn envelope.result;\n\t}\n\n\tprivate async callMultipart<T>(method: string, form: FormData): Promise<T> {\n\t\tconst response = await fetch(`${this.endpoint}/${method}`, {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: form,\n\t\t});\n\t\tconst envelope = (await response.json()) as TelegramApiEnvelope<T>;\n\t\tif (!response.ok || !envelope.ok || envelope.result === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Telegram API ${method} failed: ${envelope.description ?? response.statusText} (${envelope.error_code ?? response.status})`,\n\t\t\t);\n\t\t}\n\t\treturn envelope.result;\n\t}\n}\n\nexport async function runTelegramBridgeMode(options: TelegramBridgeModeOptions): Promise<never> {\n\tconst mode = new TelegramBridgeRuntime(options);\n\tawait mode.run();\n\t// run() loops forever unless it throws; keep Promise<never> contract explicit.\n\treturn new Promise(() => {});\n}\n\nclass TelegramBridgeRuntime {\n\tprivate readonly settingsManager: SettingsManager;\n\tprivate readonly bot: TelegramBotApi;\n\tprivate readonly allowedUserIds: Set<number>;\n\tprivate readonly statusEditThrottleMs: number;\n\tprivate readonly maxSummaryChars: number;\n\tprivate readonly rpcClient: RpcClient;\n\tprivate readonly queue: Array<{ chatId: TelegramChatId; text: string }> = [];\n\tprivate readonly pendingConfirmations = new Map<string, PendingConfirmation>();\n\tprivate readonly pendingConfirmationGroupIdsByKey = new Map<string, Set<string>>();\n\tprivate readonly commandCatalogByChat = new Map<TelegramChatId, { updatedAt: number; entries: CommandCatalogEntry[] }>();\n\tprivate readonly modelCatalogByChat = new Map<TelegramChatId, { updatedAt: number; entries: ModelCatalogEntry[] }>();\n\tprivate readonly hubMessageIdByChat = new Map<TelegramChatId, number>();\n\tprivate readonly hubViewByChat = new Map<TelegramChatId, HubView>();\n\tprivate readonly inputMenuEnabledByChat = new Set<TelegramChatId>();\n\tprivate nextUpdateOffset = 0;\n\tprivate nextTurnId = 1;\n\tprivate activeTurn: ActiveTurnState | undefined;\n\tprivate activeSessionState: RpcSessionState | undefined;\n\tprivate lastAuthorizedChatId: TelegramChatId | undefined;\n\tprivate rpcConnected = false;\n\tprivate bridgeStopped = false;\n\n\tconstructor(private readonly options: TelegramBridgeModeOptions) {\n\t\tthis.settingsManager = options.settingsManager;\n\t\tconst telegramSettings = this.settingsManager.getTelegramSettings();\n\t\tif (!telegramSettings.enabled) {\n\t\t\tthrow new Error(\"Telegram bridge is disabled in settings (telegram.enabled=false).\");\n\t\t}\n\t\tif (!telegramSettings.botToken) {\n\t\t\tthrow new Error(\"Telegram bridge requires settings.telegram.botToken.\");\n\t\t}\n\t\tif (telegramSettings.allowedUserIds.length === 0) {\n\t\t\tthrow new Error(\"Telegram bridge requires at least one allowed user ID in settings.telegram.allowedUserIds.\");\n\t\t}\n\t\tif (telegramSettings.transport !== \"long-polling\") {\n\t\t\tthrow new Error(`Unsupported telegram transport: ${telegramSettings.transport}`);\n\t\t}\n\n\t\tthis.bot = new TelegramBotApi(telegramSettings.botToken);\n\t\tthis.allowedUserIds = new Set(telegramSettings.allowedUserIds);\n\t\tthis.statusEditThrottleMs = telegramSettings.chatDefaults.statusEditThrottleMs;\n\t\tthis.maxSummaryChars = telegramSettings.chatDefaults.maxSummaryChars;\n\t\tthis.rpcClient = new RpcClient({\n\t\t\tcliPath: options.cliPath,\n\t\t\tcwd: options.cwd,\n\t\t\targs: this.buildRpcForwardedArgs(options.rawArgs),\n\t\t});\n\t}\n\n\tasync run(): Promise<void> {\n\t\tconst me = await this.bot.getMe();\n\t\tawait this.startRpc();\n\t\tconsole.log(`[telegram] bridge online as @${me.username ?? \"unknown\"} (${me.id})`);\n\n\t\tconst shutdown = async (signal: string) => {\n\t\t\tconsole.log(`[telegram] received ${signal}, stopping bridge...`);\n\t\t\ttry {\n\t\t\t\tawait this.rpcClient.stop();\n\t\t\t} finally {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t};\n\t\tprocess.once(\"SIGINT\", () => {\n\t\t\tvoid shutdown(\"SIGINT\");\n\t\t});\n\t\tprocess.once(\"SIGTERM\", () => {\n\t\t\tvoid shutdown(\"SIGTERM\");\n\t\t});\n\n\t\tthis.rpcClient.onEvent((event) => {\n\t\t\tvoid this.onRpcEvent(event);\n\t\t});\n\t\tthis.rpcClient.onExtensionUIRequest((request) => {\n\t\t\tvoid this.onRpcExtensionUiRequest(request);\n\t\t});\n\t\tthis.rpcClient.onRequiresConfirmation((event) => {\n\t\t\tvoid this.onRpcConfirmationRequest(event);\n\t\t});\n\n\t\t// Keep polling forever.\n\t\tfor (;;) {\n\t\t\ttry {\n\t\t\t\tconst updates = await this.bot.getUpdates(this.nextUpdateOffset, 25);\n\t\t\t\tfor (const update of updates) {\n\t\t\t\t\tthis.nextUpdateOffset = Math.max(this.nextUpdateOffset, update.update_id + 1);\n\t\t\t\t\tawait this.handleUpdate(update);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`[telegram] polling error: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\tawait sleepTimeout(2_000);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildRpcForwardedArgs(rawArgs: string[]): string[] {\n\t\tconst forwarded: string[] = [];\n\t\tfor (let i = 0; i < rawArgs.length; i++) {\n\t\t\tconst arg = rawArgs[i];\n\t\t\tif (i === 0 && arg === \"telegram\") continue;\n\t\t\tif (arg === \"--mode\") {\n\t\t\t\t// RPC mode is enforced by RpcClient; ignore any caller-provided mode.\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tforwarded.push(arg);\n\t\t}\n\t\treturn forwarded;\n\t}\n\n\tprivate async startRpc(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.rpcClient.start();\n\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\tthis.rpcConnected = true;\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tthrow new Error(`Failed to start RPC child: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async restartRpc(): Promise<void> {\n\t\tawait this.rpcClient.stop();\n\t\tawait this.startRpc();\n\t}\n\n\tprivate async ensureRpcConnected(): Promise<void> {\n\t\tif (this.rpcConnected) return;\n\t\tawait this.restartRpc();\n\t}\n\n\tprivate isAuthorizedUser(userId: number | undefined): userId is number {\n\t\treturn typeof userId === \"number\" && this.allowedUserIds.has(userId);\n\t}\n\n\tprivate buildInputMenuKeyboard(stopped = this.bridgeStopped): TelegramReplyKeyboardMarkup {\n\t\tif (stopped) {\n\t\t\treturn {\n\t\t\t\tkeyboard: [[{ text: INPUT_BUTTON_HUB }, { text: INPUT_BUTTON_START }], [{ text: INPUT_BUTTON_HELP }]],\n\t\t\t\tresize_keyboard: true,\n\t\t\t\tis_persistent: true,\n\t\t\t\tinput_field_placeholder: \"Bridge stopped. Tap Start to resume\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkeyboard: [\n\t\t\t\t[{ text: INPUT_BUTTON_HUB }, { text: INPUT_BUTTON_NEW }, { text: INPUT_BUTTON_COMMANDS }],\n\t\t\t\t[{ text: INPUT_BUTTON_HELP }, { text: INPUT_BUTTON_ABORT }, { text: INPUT_BUTTON_STOP }],\n\t\t\t],\n\t\t\tresize_keyboard: true,\n\t\t\tis_persistent: true,\n\t\t\tinput_field_placeholder: \"Write a task or pick an action\",\n\t\t};\n\t}\n\n\tprivate async ensureInputMenu(chatId: TelegramChatId, force = false): Promise<void> {\n\t\tif (!force && this.inputMenuEnabledByChat.has(chatId)) return;\n\t\tconst notice = force ? \"Quick actions updated ↓\" : \"Quick actions ready ↓\";\n\t\tawait this.bot.sendMessage(chatId, notice, {\n\t\t\treplyMarkup: this.buildInputMenuKeyboard(),\n\t\t\tdisableNotification: true,\n\t\t});\n\t\tthis.inputMenuEnabledByChat.add(chatId);\n\t}\n\n\tprivate normalizeInputActionText(text: string): string {\n\t\treturn text\n\t\t\t.normalize(\"NFKC\")\n\t\t\t.replace(/\\uFE0F/g, \"\")\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^\\p{Letter}\\p{Number} ]+/gu, \" \")\n\t\t\t.replace(/\\s+/g, \" \")\n\t\t\t.trim();\n\t}\n\n\tprivate mapInputMenuAction(text: string): string | undefined {\n\t\tconst normalized = this.normalizeInputActionText(text);\n\t\tswitch (normalized) {\n\t\t\tcase \"start\":\n\t\t\tcase \"resume\":\n\t\t\tcase \"старт\":\n\t\t\tcase \"запуск\":\n\t\t\t\treturn \"/start\";\n\t\t\tcase \"hub\":\n\t\t\tcase \"status\":\n\t\t\tcase \"хаб\":\n\t\t\tcase \"статус\":\n\t\t\t\treturn \"/status\";\n\t\t\tcase \"new\":\n\t\t\tcase \"new session\":\n\t\t\tcase \"новая\":\n\t\t\tcase \"новая сессия\":\n\t\t\tcase \"новый\":\n\t\t\t\treturn \"/new\";\n\t\t\tcase \"cmd\":\n\t\t\tcase \"command\":\n\t\t\tcase \"commands\":\n\t\t\tcase \"команда\":\n\t\t\tcase \"команды\":\n\t\t\t\treturn \"/commands\";\n\t\t\tcase \"help\":\n\t\t\tcase \"помощь\":\n\t\t\tcase \"хелп\":\n\t\t\t\treturn \"/help\";\n\t\t\tcase \"abort\":\n\t\t\tcase \"cancel\":\n\t\t\tcase \"прервать\":\n\t\t\tcase \"отмена\":\n\t\t\t\treturn \"/abort\";\n\t\t\tcase \"stop\":\n\t\t\tcase \"стоп\":\n\t\t\t\treturn \"/stop\";\n\t\t}\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_START)) return \"/start\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_HUB)) return \"/status\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_NEW)) return \"/new\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_COMMANDS)) return \"/commands\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_HELP)) return \"/help\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_ABORT)) return \"/abort\";\n\t\tif (normalized === this.normalizeInputActionText(INPUT_BUTTON_STOP)) return \"/stop\";\n\t\treturn undefined;\n\t}\n\n\tprivate async handleUpdate(update: TelegramUpdate): Promise<void> {\n\t\tif (update.callback_query) {\n\t\t\tawait this.handleCallbackQuery(update.callback_query);\n\t\t\treturn;\n\t\t}\n\t\tif (!update.message?.text) return;\n\n\t\tconst message = update.message;\n\t\tconst userId = message.from?.id;\n\t\tif (!this.isAuthorizedUser(userId)) {\n\t\t\tconsole.warn(\n\t\t\t\t`[telegram] unauthorized message ignored (user=${userId ?? \"unknown\"}, chat=${message.chat.id})`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastAuthorizedChatId = message.chat.id;\n\t\tconst text = (message.text ?? \"\").trim();\n\t\tif (text.length === 0) return;\n\t\tif (!this.inputMenuEnabledByChat.has(message.chat.id)) {\n\t\t\tawait this.ensureInputMenu(message.chat.id);\n\t\t}\n\n\t\tconst quickActionCommand = this.mapInputMenuAction(text);\n\t\tif (quickActionCommand) {\n\t\t\tawait this.handleCommandMessage(message.chat.id, quickActionCommand);\n\t\t\treturn;\n\t\t}\n\n\t\tif (text.startsWith(\"/\")) {\n\t\t\tawait this.handleCommandMessage(message.chat.id, text);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.bridgeStopped) {\n\t\t\tawait this.bot.sendMessage(message.chat.id, \"Bridge is stopped. Use /start to resume.\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.enqueuePrompt(message.chat.id, text);\n\t}\n\n\tprivate async handleCallbackQuery(callback: TelegramCallbackQuery): Promise<void> {\n\t\tconst userId = callback.from?.id;\n\t\tif (!this.isAuthorizedUser(userId)) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Unauthorized\");\n\t\t\tconsole.warn(`[telegram] unauthorized callback ignored (user=${userId ?? \"unknown\"})`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst data = callback.data?.trim();\n\t\tif (!data) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.startsWith(\"confirm:\")) {\n\t\t\tconst [, requestId, decision] = data.split(\":\");\n\t\t\tif (!requestId || (decision !== \"yes\" && decision !== \"no\")) {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Invalid confirmation payload\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst confirmed = decision === \"yes\";\n\t\t\tconst pending = this.pendingConfirmations.get(requestId);\n\t\t\tawait this.respondConfirmation(requestId, confirmed);\n\t\t\tconst confirmChatId = callback.message?.chat.id;\n\t\t\tconst confirmMessageId = callback.message?.message_id;\n\t\t\tif (confirmChatId && typeof confirmMessageId === \"number\") {\n\t\t\t\tawait this.updateConfirmationDecisionMessage(confirmChatId, confirmMessageId, confirmed, pending?.label);\n\t\t\t\tawait this.moveLiveStatusToBottom(confirmChatId);\n\t\t\t}\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, confirmed ? \"Approved\" : \"Denied\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.startsWith(\"hub:\")) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.handleHubAction(callback.message?.chat.id, data.slice(4));\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.startsWith(\"live:\")) {\n\t\t\tawait this.handleLiveAction(callback, data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.startsWith(\"cmd:\")) {\n\t\t\tawait this.handleCommandMenuCallback(callback, data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.startsWith(\"model:\")) {\n\t\t\tawait this.handleModelMenuCallback(callback, data);\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t}\n\n\tprivate async handleHubAction(chatId: TelegramChatId | undefined, action: string): Promise<void> {\n\t\tif (!chatId) return;\n\t\tconst stoppedSafeActions = new Set([\"status\", \"refresh\", \"details\", \"compact\", \"start\", \"help\"]);\n\t\tif (this.bridgeStopped && !stoppedSafeActions.has(action)) {\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\treturn;\n\t\t}\n\t\tswitch (action) {\n\t\t\tcase \"start\":\n\t\t\t\tawait this.handleCommandMessage(chatId, \"/start\");\n\t\t\t\treturn;\n\t\t\tcase \"help\":\n\t\t\t\tawait this.sendHelp(chatId);\n\t\t\t\treturn;\n\t\t\tcase \"prompt\":\n\t\t\t\tawait this.bot.sendMessage(chatId, \"Send any text to start a task.\");\n\t\t\t\treturn;\n\t\t\tcase \"commands\":\n\t\t\t\tawait this.sendCommandMenu(chatId, 0, { view: \"main\", refreshCatalog: false });\n\t\t\t\treturn;\n\t\t\tcase \"new\": {\n\t\t\t\tawait this.runNewSession(chatId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"permissions\":\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true, view: \"details\" });\n\t\t\t\treturn;\n\t\t\tcase \"toggle_mode\":\n\t\t\t\tawait this.togglePermissionMode(chatId);\n\t\t\t\treturn;\n\t\t\tcase \"model\":\n\t\t\t\tawait this.sendModelMenu(chatId, 0, { refreshCatalog: true });\n\t\t\t\treturn;\n\t\t\tcase \"status\":\n\t\t\tcase \"refresh\":\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\t\treturn;\n\t\t\tcase \"details\":\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true, view: \"details\" });\n\t\t\t\treturn;\n\t\t\tcase \"compact\":\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true, view: \"compact\" });\n\t\t\t\treturn;\n\t\t\tcase \"abort\":\n\t\t\t\tawait this.abortActiveTurn(chatId);\n\t\t\t\treturn;\n\t\t\tcase \"stop\":\n\t\t\t\tawait this.stopBridge(chatId);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tawait this.bot.sendMessage(chatId, \"Action is not implemented yet in Telegram bridge.\");\n\t\t}\n\t}\n\n\tprivate async runNewSession(chatId: TelegramChatId): Promise<void> {\n\t\tconst handled = await this.runBuiltinCommand(chatId, \"/new\");\n\t\tif (!handled) {\n\t\t\tawait this.enqueuePrompt(chatId, \"/new\");\n\t\t}\n\t}\n\n\tprivate async switchMenuMessageToHub(chatId: TelegramChatId, messageId?: number): Promise<void> {\n\t\tif (messageId) {\n\t\t\tthis.hubMessageIdByChat.set(chatId, messageId);\n\t\t}\n\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t}\n\n\tprivate async clearInlineKeyboard(chatId: TelegramChatId, messageId: number): Promise<void> {\n\t\ttry {\n\t\t\tawait this.bot.editMessageReplyMarkup(chatId, messageId, { inline_keyboard: [] });\n\t\t} catch {\n\t\t\t// Best-effort cleanup of stale buttons.\n\t\t}\n\t}\n\n\tprivate buildConfirmationResolvedText(confirmed: boolean, label?: string): string {\n\t\tconst status = confirmed ? \"✅ Allowed\" : \"❌ Denied\";\n\t\tif (!label) return status;\n\t\tconst lines = label\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter((line) => line.length > 0);\n\t\tconst detail = lines.find((line) => !/^permission required$/i.test(line)) ?? lines[0];\n\t\tif (!detail) return status;\n\t\tconst clipped = detail.length > 120 ? `${detail.slice(0, 119)}…` : detail;\n\t\treturn `${status}\\n${clipped}`;\n\t}\n\n\tprivate async updateConfirmationDecisionMessage(\n\t\tchatId: TelegramChatId,\n\t\tmessageId: number,\n\t\tconfirmed: boolean,\n\t\tlabel?: string,\n\t): Promise<void> {\n\t\tconst text = this.buildConfirmationResolvedText(confirmed, label);\n\t\ttry {\n\t\t\tawait this.bot.editMessageText(chatId, messageId, text, {\n\t\t\t\treplyMarkup: { inline_keyboard: [] },\n\t\t\t});\n\t\t} catch {\n\t\t\tawait this.clearInlineKeyboard(chatId, messageId);\n\t\t}\n\t}\n\n\tprivate async moveLiveStatusToBottom(chatId: TelegramChatId): Promise<void> {\n\t\tconst turn = this.activeTurn;\n\t\tif (!turn || turn.chatId !== chatId) return;\n\t\tconst previousStatusId = turn.statusMessageId;\n\t\ttry {\n\t\t\tconst fresh = await this.bot.sendMessage(chatId, this.formatLiveStatus());\n\t\t\tturn.statusMessageId = fresh.message_id;\n\t\t\tturn.lastStatusEditAt = Date.now();\n\t\t\tif (previousStatusId !== fresh.message_id) {\n\t\t\t\tawait this.bot.deleteMessage(chatId, previousStatusId).catch(() => {});\n\t\t\t}\n\t\t} catch {\n\t\t\t// Best-effort relocation; keep existing status message on failure.\n\t\t}\n\t}\n\n\tprivate async handleLiveAction(callback: TelegramCallbackQuery, data: string): Promise<void> {\n\t\tconst chatId = callback.message?.chat.id;\n\t\tif (!chatId) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\t\tconst [, action] = data.split(\":\");\n\t\tif (!action) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\t\tif (this.bridgeStopped && action !== \"hub\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Bridge is stopped\");\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\treturn;\n\t\t}\n\n\t\tif (action === \"hub\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"commands\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendCommandMenu(chatId, 0, { view: \"main\", refreshCatalog: false });\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"model\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendModelMenu(chatId, 0, { refreshCatalog: true });\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"new\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"New session\");\n\t\t\tawait this.runNewSession(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"abort\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Aborting...\");\n\t\t\tawait this.abortActiveTurn(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"stop\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Stopping...\");\n\t\t\tawait this.stopBridge(chatId);\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t}\n\n\tprivate async handleCommandMessage(chatId: TelegramChatId, text: string): Promise<void> {\n\t\tconst [commandRaw, ...rest] = text.split(/\\s+/);\n\t\tconst command = (commandRaw.toLowerCase().split(\"@\")[0] ?? commandRaw.toLowerCase()).trim();\n\n\t\tif (command === \"/start\") {\n\t\t\tthis.bridgeStopped = false;\n\t\t\tawait this.sendStart(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/help\") {\n\t\t\tawait this.sendHelp(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/menu\") {\n\t\t\tawait this.ensureInputMenu(chatId, true);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/status\") {\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/stop\") {\n\t\t\tawait this.stopBridge(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (this.bridgeStopped) {\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\tawait this.ensureInputMenu(chatId, true);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/commands\") {\n\t\t\tawait this.sendCommandMenu(chatId, 0, { view: \"main\", refreshCatalog: false });\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/abort\") {\n\t\t\tawait this.abortActiveTurn(chatId);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/yolo\") {\n\t\t\tawait this.handleYoloCommand(chatId, rest);\n\t\t\treturn;\n\t\t}\n\t\tif (command === \"/model\" && rest.join(\" \").trim().length === 0) {\n\t\t\tawait this.sendModelMenu(chatId, 0, { refreshCatalog: true });\n\t\t\treturn;\n\t\t}\n\n\t\tconst handled = await this.runBuiltinCommand(chatId, text);\n\t\tif (handled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to raw slash prompt to support extension/prompt-template/skill slash commands.\n\t\tawait this.enqueuePrompt(chatId, text);\n\t}\n\n\tprivate async runBuiltinCommand(chatId: TelegramChatId, commandText: string): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.ensureRpcConnected();\n\t\t\tconst result = await this.rpcClient.runBuiltinCommand(commandText);\n\t\t\tthis.rpcConnected = true;\n\t\t\tif (!result.handled) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tawait this.sendBuiltinCommandResult(chatId, result);\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Command failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate async sendBuiltinCommandResult(chatId: TelegramChatId, result: BuiltinCommandResult): Promise<void> {\n\t\tif (result.message) {\n\t\t\tconst prefix = result.level === \"error\" ? \"Error: \" : result.level === \"warning\" ? \"Warning: \" : \"\";\n\t\t\tawait this.bot.sendMessage(chatId, `${prefix}${result.message}`);\n\t\t}\n\t\tif (result.text) {\n\t\t\tawait this.sendFinalOutput(chatId, result.text);\n\t\t}\n\t\tif (result.filePath) {\n\t\t\tawait this.bot.sendMessage(chatId, `File: ${result.filePath}`);\n\t\t}\n\t}\n\n\tprivate async sendStart(chatId: TelegramChatId): Promise<void> {\n\t\tawait this.sendStatusCard(chatId, {\n\t\t\theader: `Control Hub · ${APP_NAME} v${VERSION}`,\n\t\t\tincludeKeyboard: true,\n\t\t\tpreferEditHub: false,\n\t\t});\n\t\tawait this.ensureInputMenu(chatId, true);\n\t}\n\n\tprivate async sendHelp(chatId: TelegramChatId): Promise<void> {\n\t\tconst help = [\n\t\t\t\"IOSM Telegram · Quick Guide\",\n\t\t\t\"\",\n\t\t\t\"What the agent can do\",\n\t\t\t\"- Analyze your codebase and explain behavior\",\n\t\t\t\"- Create/edit files and refactor code\",\n\t\t\t\"- Run shell commands, investigate failures, fix tests\",\n\t\t\t\"- Work with git changes and repository context\",\n\t\t\t\"- Prepare concise result summaries\",\n\t\t\t\"\",\n\t\t\t\"Tools the agent uses\",\n\t\t\t\"- Shell tools: bash/zsh commands for diagnostics and automation\",\n\t\t\t\"- Code tools: search (rg), read/edit files, refactor project code\",\n\t\t\t\"- Validation tools: run tests, linters, build checks\",\n\t\t\t\"- Git tools: inspect diffs/status, create safe code changes\",\n\t\t\t\"- In ASK mode, dangerous tool actions require Allow/Deny\",\n\t\t\t\"\",\n\t\t\t\"How to ask\",\n\t\t\t\"- Write a plain task: what to do + where + expected output\",\n\t\t\t\"- Example: \\\"Find why tests fail and fix them\\\"\",\n\t\t\t\"- Example: \\\"Find large files and propose safe cleanup\\\"\",\n\t\t\t\"\",\n\t\t\t\"Quick buttons\",\n\t\t\t\"- 🧭 Hub: current status/model/mode\",\n\t\t\t\"- ⚡ Cmd: command/action center\",\n\t\t\t\"- 🆕 New: start a new session\",\n\t\t\t\"- ⛔ Abort: stop current task\",\n\t\t\t\"- 🛑 Stop: stop bridge\",\n\t\t\t\"\",\n\t\t\t\"Models and permissions\",\n\t\t\t\"- /model: choose model\",\n\t\t\t\"- ASK mode: dangerous actions require Allow/Deny\",\n\t\t\t\"- /yolo on|off|status: confirmation mode control\",\n\t\t\t\"\",\n\t\t\t\"Useful commands\",\n\t\t\t\"/status /commands /model /menu /help\",\n\t\t\t\"\",\n\t\t\t\"Tip: phrase tasks like \\\"do X, verify Y, report result\\\".\",\n\t\t].join(\"\\n\");\n\t\tawait this.bot.sendMessage(chatId, help);\n\t}\n\n\tprivate buildDefaultCommandText(name: string): string {\n\t\tconst lower = name.toLowerCase();\n\t\tswitch (lower) {\n\t\t\tcase \"permissions\":\n\t\t\t\treturn \"/permissions status\";\n\t\t\tcase \"yolo\":\n\t\t\t\treturn \"/yolo status\";\n\t\t\tcase \"checkpoint\":\n\t\t\t\treturn \"/checkpoint list\";\n\t\t\tcase \"rollback\":\n\t\t\t\treturn \"/rollback list\";\n\t\t\tcase \"tree\":\n\t\t\t\treturn \"/tree list\";\n\t\t\tdefault:\n\t\t\t\treturn `/${name}`;\n\t\t}\n\t}\n\n\tprivate mapBuiltinCommands(commands: RpcBuiltinSlashCommand[]): CommandCatalogEntry[] {\n\t\treturn commands.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t\tsource: \"builtin\" as const,\n\t\t\tcommandText: this.buildDefaultCommandText(command.name),\n\t\t}));\n\t}\n\n\tprivate mapExternalCommands(commands: RpcSlashCommand[]): CommandCatalogEntry[] {\n\t\treturn commands.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t\tsource: command.source,\n\t\t\tcommandText: `/${command.name}`,\n\t\t}));\n\t}\n\n\tprivate getLocalBridgeCommands(): CommandCatalogEntry[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: \"commands\",\n\t\t\t\tdescription: \"Open paged command buttons\",\n\t\t\t\tsource: \"builtin\",\n\t\t\t\tcommandText: \"/commands\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"model\",\n\t\t\t\tdescription: \"Open model picker\",\n\t\t\t\tsource: \"builtin\",\n\t\t\t\tcommandText: \"/model\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"status\",\n\t\t\t\tdescription: \"Show runtime status\",\n\t\t\t\tsource: \"builtin\",\n\t\t\t\tcommandText: \"/status\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"abort\",\n\t\t\t\tdescription: \"Abort active task\",\n\t\t\t\tsource: \"builtin\",\n\t\t\t\tcommandText: \"/abort\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"stop\",\n\t\t\t\tdescription: \"Stop bridge and cancel active work\",\n\t\t\t\tsource: \"builtin\",\n\t\t\t\tcommandText: \"/stop\",\n\t\t\t},\n\t\t];\n\t}\n\n\tprivate commandButtonLabel(entry: CommandCatalogEntry, view: CommandMenuView): string {\n\t\tif (view === \"all\") {\n\t\t\tconst raw = entry.commandText.startsWith(\"/\") ? entry.commandText : `/${entry.name}`;\n\t\t\treturn raw.length > 24 ? `${raw.slice(0, 23)}…` : raw;\n\t\t}\n\t\tconst key = entry.commandText.toLowerCase();\n\t\tswitch (key) {\n\t\t\tcase \"/model\":\n\t\t\t\treturn \"🤖 Model\";\n\t\t\tcase \"/status\":\n\t\t\t\treturn \"🔄 Status\";\n\t\t\tcase \"/new\":\n\t\t\t\treturn \"🆕 New\";\n\t\t\tcase \"/abort\":\n\t\t\t\treturn \"⛔ Abort\";\n\t\t\tcase \"/permissions status\":\n\t\t\t\treturn \"🛡 Mode\";\n\t\t\tcase \"/yolo status\":\n\t\t\t\treturn \"⚠️ YOLO\";\n\t\t\tcase \"/help\":\n\t\t\t\treturn \"❓ Help\";\n\t\t\tcase \"/stop\":\n\t\t\t\treturn \"🛑 Stop\";\n\t\t\tdefault:\n\t\t\t\treturn entry.commandText;\n\t\t}\n\t}\n\n\tprivate async getCommandCatalog(chatId: TelegramChatId, refreshCatalog: boolean): Promise<CommandCatalogEntry[]> {\n\t\tconst cached = this.commandCatalogByChat.get(chatId);\n\t\tconst now = Date.now();\n\t\tif (!refreshCatalog && cached && now - cached.updatedAt < COMMAND_MENU_TTL_MS) {\n\t\t\treturn cached.entries;\n\t\t}\n\n\t\tawait this.ensureRpcConnected();\n\t\tconst [builtin, dynamic] = await Promise.all([\n\t\t\tthis.rpcClient.getBuiltinCommands(),\n\t\t\tthis.rpcClient.getCommands(),\n\t\t]);\n\t\tthis.rpcConnected = true;\n\n\t\tconst entries: CommandCatalogEntry[] = [];\n\t\tconst seen = new Set<string>();\n\t\tfor (const entry of this.getLocalBridgeCommands()) {\n\t\t\tconst key = entry.commandText;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tentries.push(entry);\n\t\t}\n\t\tfor (const entry of this.mapBuiltinCommands(builtin)) {\n\t\t\tconst key = entry.commandText;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tentries.push(entry);\n\t\t}\n\n\t\tconst dynamicEntries = this.mapExternalCommands(dynamic).sort((a, b) => a.name.localeCompare(b.name));\n\t\tfor (const entry of dynamicEntries) {\n\t\t\tconst key = entry.commandText;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tentries.push(entry);\n\t\t}\n\n\t\tthis.commandCatalogByChat.set(chatId, { updatedAt: now, entries });\n\t\treturn entries;\n\t}\n\n\tprivate buildCommandMenuKeyboard(\n\t\tentries: CommandCatalogEntry[],\n\t\tpage: number,\n\t\tview: CommandMenuView,\n\t): TelegramInlineKeyboardMarkup {\n\t\tconst pageCount = Math.max(1, Math.ceil(entries.length / COMMANDS_PAGE_SIZE));\n\t\tconst normalizedPage = Math.max(0, Math.min(page, pageCount - 1));\n\t\tconst start = normalizedPage * COMMANDS_PAGE_SIZE;\n\t\tconst pageEntries = entries.slice(start, start + COMMANDS_PAGE_SIZE);\n\n\t\tconst commandRows: Array<Array<{ text: string; callback_data: string }>> = [];\n\t\tfor (let index = 0; index < pageEntries.length; index += 2) {\n\t\t\tconst left = pageEntries[index];\n\t\t\tconst right = pageEntries[index + 1];\n\t\t\tconst row: Array<{ text: string; callback_data: string }> = [];\n\t\t\tif (left) {\n\t\t\t\trow.push({\n\t\t\t\t\ttext: this.commandButtonLabel(left, view),\n\t\t\t\t\tcallback_data: `cmd:run:${view}:${start + index}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (right) {\n\t\t\t\trow.push({\n\t\t\t\t\ttext: this.commandButtonLabel(right, view),\n\t\t\t\t\tcallback_data: `cmd:run:${view}:${start + index + 1}`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (row.length > 0) {\n\t\t\t\tcommandRows.push(row);\n\t\t\t}\n\t\t}\n\n\t\tconst navRow: Array<{ text: string; callback_data: string }> = [];\n\t\tnavRow.push({\n\t\t\ttext: normalizedPage > 0 ? \"◀ Prev\" : \"·\",\n\t\t\tcallback_data: normalizedPage > 0 ? `cmd:page:${view}:${normalizedPage - 1}` : \"cmd:noop\",\n\t\t});\n\t\tnavRow.push({\n\t\t\ttext: `${normalizedPage + 1}/${pageCount}`,\n\t\t\tcallback_data: \"cmd:noop\",\n\t\t});\n\t\tnavRow.push({\n\t\t\ttext: normalizedPage < pageCount - 1 ? \"Next ▶\" : \"·\",\n\t\t\tcallback_data: normalizedPage < pageCount - 1 ? `cmd:page:${view}:${normalizedPage + 1}` : \"cmd:noop\",\n\t\t});\n\n\t\treturn {\n\t\t\tinline_keyboard: [\n\t\t\t\t...commandRows,\n\t\t\t\tnavRow,\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: view === \"main\" ? \"All Commands\" : \"Main Commands\",\n\t\t\t\t\t\tcallback_data: `cmd:view:${view === \"main\" ? \"all\" : \"main\"}:0`,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: \"Refresh\",\n\t\t\t\t\t\tcallback_data: view === \"all\" ? `cmd:refresh:${view}:${normalizedPage}` : `cmd:view:${view}:0`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{ text: \"Hub\", callback_data: \"cmd:hub\" },\n\t\t\t\t\t{ text: \"Close\", callback_data: \"cmd:close\" },\n\t\t\t\t],\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate async sendCommandMenu(\n\t\tchatId: TelegramChatId,\n\t\tpage: number,\n\t\toptions?: { messageId?: number; refreshCatalog?: boolean; view?: CommandMenuView },\n\t): Promise<void> {\n\t\tlet entries: CommandCatalogEntry[] = [];\n\t\tconst view = options?.view ?? \"main\";\n\t\ttry {\n\t\t\tentries = view === \"main\" ? MAIN_COMMAND_MENU : await this.getCommandCatalog(chatId, options?.refreshCatalog === true);\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Failed to load commands: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pageCount = Math.max(1, Math.ceil(entries.length / COMMANDS_PAGE_SIZE));\n\t\tconst normalizedPage = Math.max(0, Math.min(page, pageCount - 1));\n\t\tconst header = [\n\t\t\t`Command Center · ${APP_NAME}`,\n\t\t\t`${view === \"main\" ? \"Main Actions\" : \"All Commands\"} · ${normalizedPage + 1}/${pageCount}`,\n\t\t\t`${entries.length} items`,\n\t\t].join(\"\\n\");\n\t\tconst keyboard = this.buildCommandMenuKeyboard(entries, normalizedPage, view);\n\n\t\tif (options?.messageId) {\n\t\t\ttry {\n\t\t\t\tawait this.bot.editMessageText(chatId, options.messageId, header, { replyMarkup: keyboard });\n\t\t\t\treturn;\n\t\t\t} catch {\n\t\t\t\t// Fallback below: send a new message if editing failed.\n\t\t\t}\n\t\t}\n\t\tawait this.bot.sendMessage(chatId, header, { replyMarkup: keyboard });\n\t}\n\n\tprivate async handleCommandMenuCallback(callback: TelegramCallbackQuery, data: string): Promise<void> {\n\t\tconst chatId = callback.message?.chat.id;\n\t\tconst messageId = callback.message?.message_id;\n\t\tif (!chatId) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\n\t\tconst parts = data.split(\":\");\n\t\tconst action = parts[1] ?? \"\";\n\t\tconst rawView = parts[2];\n\t\tlet view: CommandMenuView = rawView === \"all\" ? \"all\" : \"main\";\n\t\tlet value = parts[3];\n\t\t// Backward compatibility with older callback payloads: cmd:<action>:<value>.\n\t\tif ((action === \"page\" || action === \"refresh\" || action === \"run\") && parts.length === 3) {\n\t\t\tview = \"main\";\n\t\t\tvalue = parts[2];\n\t\t}\n\t\tif (action === \"noop\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"close\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Hub\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"hub\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Hub\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\t\tif (this.bridgeStopped) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Bridge is stopped\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"view\") {\n\t\t\tconst page = Number.parseInt(value ?? \"0\", 10);\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendCommandMenu(chatId, Number.isFinite(page) ? page : 0, {\n\t\t\t\tmessageId,\n\t\t\t\tview,\n\t\t\t\trefreshCatalog: view === \"all\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"page\" || action === \"refresh\") {\n\t\t\tconst page = Number.parseInt(value ?? \"0\", 10);\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendCommandMenu(chatId, Number.isFinite(page) ? page : 0, {\n\t\t\t\tmessageId,\n\t\t\t\tview,\n\t\t\t\trefreshCatalog: action === \"refresh\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"run\") {\n\t\t\tconst index = Number.parseInt(value ?? \"-1\", 10);\n\t\t\tlet entries: CommandCatalogEntry[] = [];\n\t\t\tif (view === \"main\") {\n\t\t\t\tentries = MAIN_COMMAND_MENU;\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tentries = await this.getCommandCatalog(chatId, false);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.rpcConnected = false;\n\t\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Failed to load command catalog\");\n\t\t\t\t\tawait this.bot.sendMessage(\n\t\t\t\t\t\tchatId,\n\t\t\t\t\t\t`Failed to load commands: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst entry = Number.isFinite(index) ? entries[index] : undefined;\n\t\t\tif (!entry) {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Command list expired. Refresh.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/model\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Open model picker\");\n\t\t\t\tawait this.sendModelMenu(chatId, 0, { refreshCatalog: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/status\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/help\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\t\tawait this.sendHelp(chatId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/abort\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Abort signal sent\");\n\t\t\t\tawait this.abortActiveTurn(chatId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText.startsWith(\"/yolo\")) {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\t\tconst parts = entry.commandText.split(/\\s+/).slice(1);\n\t\t\t\tawait this.handleYoloCommand(chatId, parts);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/stop\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Stopping bridge\");\n\t\t\t\tawait this.stopBridge(chatId);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.commandText === \"/commands\") {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\t\tawait this.sendCommandMenu(chatId, 0, { view: \"main\", refreshCatalog: false });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, `Run ${entry.commandText}`);\n\t\t\tconst handled = await this.runBuiltinCommand(chatId, entry.commandText);\n\t\t\tif (!handled) {\n\t\t\t\tawait this.enqueuePrompt(chatId, entry.commandText);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t}\n\n\tprivate modelKey(model: { provider: string; id: string } | undefined): string | undefined {\n\t\tif (!model) return undefined;\n\t\treturn `${model.provider}/${model.id}`;\n\t}\n\n\tprivate async getModelCatalog(chatId: TelegramChatId, refreshCatalog: boolean): Promise<ModelCatalogEntry[]> {\n\t\tconst cached = this.modelCatalogByChat.get(chatId);\n\t\tconst now = Date.now();\n\t\tif (!refreshCatalog && cached && now - cached.updatedAt < MODEL_MENU_TTL_MS) {\n\t\t\treturn cached.entries;\n\t\t}\n\n\t\tawait this.ensureRpcConnected();\n\t\tconst entries = (await this.rpcClient.getAvailableModels())\n\t\t\t.map((model) => ({\n\t\t\t\tprovider: model.provider,\n\t\t\t\tid: model.id,\n\t\t\t\tcontextWindow: model.contextWindow,\n\t\t\t\treasoning: model.reasoning,\n\t\t\t}))\n\t\t\t.sort((a, b) => this.modelKey(a)!.localeCompare(this.modelKey(b)!));\n\t\tthis.rpcConnected = true;\n\t\tthis.modelCatalogByChat.set(chatId, { updatedAt: now, entries });\n\t\treturn entries;\n\t}\n\n\tprivate buildModelMenuKeyboard(\n\t\tentries: ModelCatalogEntry[],\n\t\tpage: number,\n\t\tcurrentModelKey: string | undefined,\n\t): TelegramInlineKeyboardMarkup {\n\t\tconst pageCount = Math.max(1, Math.ceil(entries.length / MODELS_PAGE_SIZE));\n\t\tconst normalizedPage = Math.max(0, Math.min(page, pageCount - 1));\n\t\tconst start = normalizedPage * MODELS_PAGE_SIZE;\n\t\tconst pageEntries = entries.slice(start, start + MODELS_PAGE_SIZE);\n\n\t\tconst modelRows = pageEntries.map((entry, index) => {\n\t\t\tconst key = this.modelKey(entry);\n\t\t\tconst selectedPrefix = key === currentModelKey ? \"✅ \" : \"\";\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttext: `${selectedPrefix}${entry.provider}/${entry.id}`,\n\t\t\t\t\tcallback_data: `model:set:${start + index}`,\n\t\t\t\t},\n\t\t\t];\n\t\t});\n\n\t\tconst navRow: Array<{ text: string; callback_data: string }> = [];\n\t\tnavRow.push({\n\t\t\ttext: normalizedPage > 0 ? \"◀ Prev\" : \"·\",\n\t\t\tcallback_data: normalizedPage > 0 ? `model:page:${normalizedPage - 1}` : \"model:noop\",\n\t\t});\n\t\tnavRow.push({\n\t\t\ttext: `${normalizedPage + 1}/${pageCount}`,\n\t\t\tcallback_data: \"model:noop\",\n\t\t});\n\t\tnavRow.push({\n\t\t\ttext: normalizedPage < pageCount - 1 ? \"Next ▶\" : \"·\",\n\t\t\tcallback_data: normalizedPage < pageCount - 1 ? `model:page:${normalizedPage + 1}` : \"model:noop\",\n\t\t});\n\n\t\treturn {\n\t\t\tinline_keyboard: [\n\t\t\t\t...modelRows,\n\t\t\t\tnavRow,\n\t\t\t\t[\n\t\t\t\t\t{ text: \"Cycle\", callback_data: \"model:cycle\" },\n\t\t\t\t\t{ text: \"Refresh\", callback_data: `model:refresh:${normalizedPage}` },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{ text: \"Hub\", callback_data: \"model:hub\" },\n\t\t\t\t\t{ text: \"Close\", callback_data: \"model:close\" },\n\t\t\t\t],\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate async sendModelMenu(\n\t\tchatId: TelegramChatId,\n\t\tpage: number,\n\t\toptions?: { messageId?: number; refreshCatalog?: boolean },\n\t): Promise<void> {\n\t\tif (this.bridgeStopped) {\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\treturn;\n\t\t}\n\n\t\tlet entries: ModelCatalogEntry[] = [];\n\t\ttry {\n\t\t\tentries = await this.getModelCatalog(chatId, options?.refreshCatalog === true);\n\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\tthis.rpcConnected = true;\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Failed to load models: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (entries.length === 0) {\n\t\t\tawait this.bot.sendMessage(chatId, \"No models available. Configure models in settings and retry.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentModelKey = this.modelKey(this.activeSessionState?.model);\n\t\tconst pageCount = Math.max(1, Math.ceil(entries.length / MODELS_PAGE_SIZE));\n\t\tconst normalizedPage = Math.max(0, Math.min(page, pageCount - 1));\n\t\tconst header = [\n\t\t\t\"Model Picker\",\n\t\t\t`Current: ${currentModelKey ?? \"not selected\"}`,\n\t\t\t`Available: ${entries.length}`,\n\t\t\t`Page: ${normalizedPage + 1}/${pageCount}`,\n\t\t].join(\"\\n\");\n\t\tconst keyboard = this.buildModelMenuKeyboard(entries, normalizedPage, currentModelKey);\n\n\t\tif (options?.messageId) {\n\t\t\ttry {\n\t\t\t\tawait this.bot.editMessageText(chatId, options.messageId, header, { replyMarkup: keyboard });\n\t\t\t\treturn;\n\t\t\t} catch {\n\t\t\t\t// Fallback to sending a fresh message.\n\t\t\t}\n\t\t}\n\t\tawait this.bot.sendMessage(chatId, header, { replyMarkup: keyboard });\n\t}\n\n\tprivate async handleModelMenuCallback(callback: TelegramCallbackQuery, data: string): Promise<void> {\n\t\tconst chatId = callback.message?.chat.id;\n\t\tconst messageId = callback.message?.message_id;\n\t\tif (!chatId) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\n\t\tconst [, action, value] = data.split(\":\");\n\t\tif (action === \"noop\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"close\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Hub\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\t\tif (action === \"hub\") {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Hub\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.bridgeStopped) {\n\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Bridge is stopped\");\n\t\t\tawait this.switchMenuMessageToHub(chatId, messageId);\n\t\t\treturn;\n\t\t}\n\n\t\tif (action === \"page\" || action === \"refresh\") {\n\t\t\tconst page = Number.parseInt(value ?? \"0\", 10);\n\t\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t\t\tawait this.sendModelMenu(chatId, Number.isFinite(page) ? page : 0, {\n\t\t\t\tmessageId,\n\t\t\t\trefreshCatalog: action === \"refresh\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (action === \"cycle\") {\n\t\t\ttry {\n\t\t\t\tawait this.ensureRpcConnected();\n\t\t\t\tconst cycled = await this.rpcClient.cycleModel();\n\t\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\t\tthis.rpcConnected = true;\n\t\t\t\tawait this.bot.answerCallbackQuery(\n\t\t\t\t\tcallback.id,\n\t\t\t\t\tcycled ? `Model: ${cycled.model.provider}/${cycled.model.id}` : \"No model candidates\",\n\t\t\t\t);\n\t\t\t\tawait this.sendModelMenu(chatId, 0, { messageId, refreshCatalog: false });\n\t\t\t} catch (error) {\n\t\t\t\tthis.rpcConnected = false;\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Failed to cycle model\");\n\t\t\t\tawait this.bot.sendMessage(chatId, `Failed to cycle model: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (action === \"set\") {\n\t\t\tconst index = Number.parseInt(value ?? \"-1\", 10);\n\t\t\tlet entries: ModelCatalogEntry[] = [];\n\t\t\ttry {\n\t\t\t\tentries = await this.getModelCatalog(chatId, false);\n\t\t\t} catch (error) {\n\t\t\t\tthis.rpcConnected = false;\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Model list expired. Refresh.\");\n\t\t\t\tawait this.bot.sendMessage(chatId, `Failed to load models: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst entry = Number.isFinite(index) ? entries[index] : undefined;\n\t\t\tif (!entry) {\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Model list expired. Refresh.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.ensureRpcConnected();\n\t\t\t\tawait this.rpcClient.setModel(entry.provider, entry.id);\n\t\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\t\tthis.rpcConnected = true;\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, `Selected ${entry.provider}/${entry.id}`);\n\t\t\t\tawait this.sendModelMenu(chatId, Math.floor(index / MODELS_PAGE_SIZE), { messageId, refreshCatalog: false });\n\t\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\t} catch (error) {\n\t\t\t\tthis.rpcConnected = false;\n\t\t\t\tawait this.bot.answerCallbackQuery(callback.id, \"Failed to set model\");\n\t\t\t\tawait this.bot.sendMessage(chatId, `Failed to set model: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.bot.answerCallbackQuery(callback.id);\n\t}\n\n\tprivate async stopBridge(chatId: TelegramChatId): Promise<void> {\n\t\tif (this.bridgeStopped && !this.activeTurn && this.queue.length === 0 && !this.rpcConnected) {\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t\tawait this.ensureInputMenu(chatId, true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst droppedQueue = this.queue.length;\n\t\tthis.queue.length = 0;\n\t\tthis.bridgeStopped = true;\n\t\tthis.commandCatalogByChat.clear();\n\t\tthis.modelCatalogByChat.clear();\n\n\t\tif (this.rpcConnected) {\n\t\t\tfor (const requestId of this.pendingConfirmations.keys()) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.rpcClient.respondExtensionUi({ type: \"extension_ui_response\", id: requestId, confirmed: false });\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore; bridge is stopping.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.pendingConfirmations.clear();\n\t\tthis.pendingConfirmationGroupIdsByKey.clear();\n\n\t\tconst active = this.activeTurn;\n\t\tif (active?.statusEditTimer) {\n\t\t\tclearTimeout(active.statusEditTimer);\n\t\t}\n\t\tthis.activeTurn = undefined;\n\t\tif (active) {\n\t\t\tif (active.statusEditInFlight) {\n\t\t\t\ttry {\n\t\t\t\t\tawait active.statusEditInFlight;\n\t\t\t\t} catch {\n\t\t\t\t\t// Best-effort; proceed with stop status.\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.bot.editMessageText(active.chatId, active.statusMessageId, \"⛔ done (stopped)\");\n\t\t\t} catch {\n\t\t\t\t// Best-effort status close.\n\t\t\t}\n\t\t\tif (active.chatId !== chatId) {\n\t\t\t\tawait this.bot.sendMessage(active.chatId, \"Bridge stopped. Active task cancelled.\");\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.rpcClient.stop();\n\t\t} catch (error) {\n\t\t\tconsole.warn(`[telegram] rpc stop failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t} finally {\n\t\t\tthis.rpcConnected = false;\n\t\t}\n\n\t\tconst parts = [\"Bridge stopped.\"];\n\t\tif (active) {\n\t\t\tparts.push(\"Active task cancelled.\");\n\t\t}\n\t\tif (droppedQueue > 0) {\n\t\t\tparts.push(`Dropped queued tasks: ${droppedQueue}.`);\n\t\t}\n\t\tparts.push(\"Use /start to resume.\");\n\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\tawait this.ensureInputMenu(chatId, true);\n\t\tawait this.bot.sendMessage(chatId, parts.join(\" \"));\n\t}\n\n\tprivate formatConnectionStatus(): string {\n\t\tif (this.bridgeStopped) return \"⛔ stopped\";\n\t\tif (!this.rpcConnected) return \"🟥 disconnected\";\n\t\tif (this.activeTurn) return \"🟩 connected\";\n\t\treturn \"🟦 idle\";\n\t}\n\n\tprivate formatPermissionShort(mode: \"ask\" | \"auto\" | \"yolo\" | undefined): string {\n\t\tif (mode === \"yolo\") return \"YOLO\";\n\t\tif (mode === \"auto\") return \"AUTO\";\n\t\treturn \"ASK\";\n\t}\n\n\tprivate formatPermissionButton(mode: \"ask\" | \"auto\" | \"yolo\" | undefined): string {\n\t\tif (mode === \"yolo\") return \"⚠️ YOLO\";\n\t\tif (mode === \"auto\") return \"🤖 AUTO\";\n\t\treturn \"🛡 ASK\";\n\t}\n\n\tprivate formatModelShort(model: string, maxLen = 42): string {\n\t\tif (model.length <= maxLen) return model;\n\t\treturn `${model.slice(0, maxLen - 1)}…`;\n\t}\n\n\tprivate formatSessionShort(sessionName: string | undefined, sessionId: string | undefined): string {\n\t\tif (sessionName && sessionName.trim().length > 0) return this.formatModelShort(sessionName.trim(), 24);\n\t\tif (!sessionId || sessionId.trim().length === 0) return \"unknown\";\n\t\tconst value = sessionId.trim();\n\t\tif (value.length <= 14) return value;\n\t\treturn `${value.slice(0, 8)}…${value.slice(-4)}`;\n\t}\n\n\tprivate formatCompactTurn(): string {\n\t\tif (!this.activeTurn) return \"idle\";\n\t\tconst elapsed = Math.max(0, Math.floor((Date.now() - this.activeTurn.startedAt) / 1000));\n\t\tconst phase = this.formatStatusPhase(this.activeTurn.phase);\n\t\treturn `${phase} ${elapsed}s`;\n\t}\n\n\tprivate buildHubKeyboard(mode: \"ask\" | \"auto\" | \"yolo\" | undefined, view: HubView): TelegramInlineKeyboardMarkup {\n\t\tif (this.bridgeStopped) {\n\t\t\treturn {\n\t\t\t\tinline_keyboard: [\n\t\t\t\t\t[\n\t\t\t\t\t\t{ text: \"▶️ Start\", callback_data: \"hub:start\" },\n\t\t\t\t\t\t{ text: \"🔄 Refresh\", callback_data: \"hub:refresh\" },\n\t\t\t\t\t],\n\t\t\t\t\t[{ text: \"❓ Help\", callback_data: \"hub:help\" }],\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t\tconst detailsToggle =\n\t\t\tview === \"details\"\n\t\t\t\t? { text: \"◀ Compact\", callback_data: \"hub:compact\" }\n\t\t\t\t: { text: \"ℹ️ Details\", callback_data: \"hub:details\" };\n\t\treturn {\n\t\t\tinline_keyboard: [\n\t\t\t\t[\n\t\t\t\t\t{ text: \"🆕 New\", callback_data: \"hub:new\" },\n\t\t\t\t\t{ text: \"⚡ Cmd\", callback_data: \"hub:commands\" },\n\t\t\t\t\t{ text: \"🤖 Model\", callback_data: \"hub:model\" },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{ text: this.formatPermissionButton(mode), callback_data: \"hub:toggle_mode\" },\n\t\t\t\t\t{ text: \"🔄 Refresh\", callback_data: \"hub:refresh\" },\n\t\t\t\t\tdetailsToggle,\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t{ text: \"⛔ Abort\", callback_data: \"hub:abort\" },\n\t\t\t\t\t{ text: \"🛑 Stop\", callback_data: \"hub:stop\" },\n\t\t\t\t],\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate async sendStatusCard(\n\t\tchatId: TelegramChatId,\n\t\toptions?: { header?: string; includeKeyboard?: boolean; preferEditHub?: boolean; view?: HubView },\n\t): Promise<void> {\n\t\tif (!this.bridgeStopped) {\n\t\t\ttry {\n\t\t\t\tawait this.ensureRpcConnected();\n\t\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\t\tthis.rpcConnected = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.rpcConnected = false;\n\t\t\t\tawait this.bot.sendMessage(\n\t\t\t\t\tchatId,\n\t\t\t\t\t`Status unavailable: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst state = this.activeSessionState;\n\t\tconst model = state?.model ? `${state.model.provider}/${state.model.id}` : \"not selected\";\n\t\tconst queueSize = this.queue.length;\n\t\tconst mcpState = \"RPC child\";\n\t\tconst permissionMode = state?.permissionMode ?? \"ask\";\n\t\tconst resolvedView = options?.view ?? this.hubViewByChat.get(chatId) ?? \"compact\";\n\t\tthis.hubViewByChat.set(chatId, resolvedView);\n\n\t\tconst header = options?.header ?? \"Control Hub\";\n\t\tconst compactText = [\n\t\t\theader,\n\t\t\t`${this.formatConnectionStatus()} · ${this.formatPermissionShort(permissionMode)} · q${queueSize} · ${this.formatCompactTurn()}`,\n\t\t\t`🤖 ${this.formatModelShort(model)}`,\n\t\t\t`💬 ${this.formatSessionShort(state?.sessionName, state?.sessionId)}`,\n\t\t].join(\"\\n\");\n\t\tconst detailsText = [\n\t\t\t`${header} · Details`,\n\t\t\t`Connection: ${this.formatConnectionStatus()}`,\n\t\t\t`Mode: ${permissionMode}`,\n\t\t\t`Model: ${model}`,\n\t\t\t`Session: ${state?.sessionName ?? state?.sessionId ?? \"unknown\"}`,\n\t\t\t`Turn: ${this.activeTurn ? `${this.activeTurn.phase} (${Math.floor((Date.now() - this.activeTurn.startedAt) / 1000)}s)` : \"idle\"}`,\n\t\t\t`Queue: ${queueSize}`,\n\t\t\t`MCP: ${mcpState}`,\n\t\t\t\"Telegram: active\",\n\t\t].join(\"\\n\");\n\t\tconst text = resolvedView === \"details\" ? detailsText : compactText;\n\t\tconst keyboard = options?.includeKeyboard ? this.buildHubKeyboard(permissionMode, resolvedView) : undefined;\n\n\t\tif (options?.includeKeyboard && options.preferEditHub) {\n\t\t\tconst hubMessageId = this.hubMessageIdByChat.get(chatId);\n\t\t\tif (hubMessageId) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.bot.editMessageText(chatId, hubMessageId, text, { replyMarkup: keyboard });\n\t\t\t\t\treturn;\n\t\t\t\t} catch {\n\t\t\t\t\t// Fallback below: send a fresh hub card if original message is gone.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst message = await this.bot.sendMessage(chatId, text, { replyMarkup: keyboard });\n\t\tif (options?.includeKeyboard) {\n\t\t\tthis.hubMessageIdByChat.set(chatId, message.message_id);\n\t\t}\n\t}\n\n\tprivate async togglePermissionMode(chatId: TelegramChatId): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureRpcConnected();\n\t\t\tconst current = await this.rpcClient.getPermissionMode();\n\t\t\tconst next = current === \"yolo\" ? \"ask\" : \"yolo\";\n\t\t\tawait this.rpcClient.setPermissionMode(next);\n\t\t\tthis.activeSessionState = await this.rpcClient.getState();\n\t\t\tthis.rpcConnected = true;\n\t\t\tawait this.sendStatusCard(chatId, { includeKeyboard: true, preferEditHub: true });\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Failed to switch mode: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleYoloCommand(chatId: TelegramChatId, args: string[]): Promise<void> {\n\t\tconst desired = args[0]?.toLowerCase();\n\t\ttry {\n\t\t\tawait this.ensureRpcConnected();\n\t\t\tif (!desired || desired === \"status\") {\n\t\t\t\tconst mode = await this.rpcClient.getPermissionMode();\n\t\t\t\tawait this.bot.sendMessage(chatId, `YOLO mode: ${mode === \"yolo\" ? \"ON\" : \"OFF\"} (${mode})`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (desired === \"on\") {\n\t\t\t\tawait this.rpcClient.setPermissionMode(\"yolo\");\n\t\t\t\tawait this.bot.sendMessage(chatId, \"YOLO mode: ON (tool confirmations disabled).\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (desired === \"off\") {\n\t\t\t\tawait this.rpcClient.setPermissionMode(\"ask\");\n\t\t\t\tawait this.bot.sendMessage(chatId, \"YOLO mode: OFF (tool confirmations enabled).\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.bot.sendMessage(chatId, \"Usage: /yolo [on|off|status]\");\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Failed to update mode: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async abortActiveTurn(chatId: TelegramChatId): Promise<void> {\n\t\tif (!this.activeTurn) {\n\t\t\tawait this.bot.sendMessage(chatId, \"No active task.\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.ensureRpcConnected();\n\t\t\tthis.activeTurn.aborted = true;\n\t\t\tawait this.rpcClient.abort();\n\t\t\tawait this.bot.sendMessage(chatId, \"Abort signal sent.\");\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.bot.sendMessage(chatId, `Abort failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async enqueuePrompt(chatId: TelegramChatId, text: string): Promise<void> {\n\t\tif (!this.activeTurn) {\n\t\t\tawait this.startTurn(chatId, text);\n\t\t\treturn;\n\t\t}\n\t\tthis.queue.push({ chatId, text });\n\t\tawait this.bot.sendMessage(chatId, `⏸ queued · ${this.queue.length}`);\n\t\tvoid this.editLiveStatus();\n\t}\n\n\tprivate async startTurn(chatId: TelegramChatId, text: string): Promise<void> {\n\t\tconst statusMessage = await this.bot.sendMessage(chatId, this.formatStartingStatus(text));\n\t\tthis.activeTurn = {\n\t\t\tturnId: this.nextTurnId++,\n\t\t\tchatId,\n\t\t\tprompt: text,\n\t\t\tstartedAt: Date.now(),\n\t\t\tstatusMessageId: statusMessage.message_id,\n\t\t\tphase: \"starting\",\n\t\t\taborted: false,\n\t\t\tstatusEditPending: false,\n\t\t\tlastStatusEditAt: 0,\n\t\t};\n\t\ttry {\n\t\t\tawait this.ensureRpcConnected();\n\t\t\tawait this.rpcClient.prompt(text);\n\t\t\tthis.rpcConnected = true;\n\t\t\tawait this.editLiveStatus(true);\n\t\t} catch (error) {\n\t\t\tthis.rpcConnected = false;\n\t\t\tawait this.finishTurn({\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async onRpcEvent(event: AgentEvent): Promise<void> {\n\t\tif (!this.activeTurn) return;\n\n\t\tswitch (event.type) {\n\t\t\tcase \"turn_start\":\n\t\t\t\tthis.activeTurn.phase = \"running\";\n\t\t\t\tbreak;\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tconst toolEvent = event as { toolName?: string };\n\t\t\t\tthis.activeTurn.phase = \"tool\";\n\t\t\t\tthis.activeTurn.lastTool = toolEvent.toolName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst toolEvent = event as { toolName?: string };\n\t\t\t\tthis.activeTurn.phase = \"tool\";\n\t\t\t\tthis.activeTurn.lastTool = toolEvent.toolName ?? this.activeTurn.lastTool;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"turn_end\": {\n\t\t\t\tconst turnEnd = event as AgentEvent;\n\t\t\t\tconst directText = this.extractAssistantTextFromTurnEnd(turnEnd);\n\t\t\t\tif (directText) {\n\t\t\t\t\t// Keep as fallback in case getLastAssistantText fails.\n\t\t\t\t\tthis.activeTurn.phase = \"finalizing\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"agent_end\":\n\t\t\t\tawait this.finishTurn();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tawait this.editLiveStatus();\n\t}\n\n\tprivate async onRpcExtensionUiRequest(request: RpcExtensionUIRequest): Promise<void> {\n\t\tif (request.method === \"confirm_permission\" || request.method === \"confirm\") {\n\t\t\tconst chatId = this.activeTurn?.chatId ?? this.lastAuthorizedChatId;\n\t\t\tif (!chatId) {\n\t\t\t\tthis.rpcClient.respondExtensionUi({ type: \"extension_ui_response\", id: request.id, confirmed: false });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst label = `${request.title}\\n${request.message}`;\n\t\t\tconst groupKey =\n\t\t\t\trequest.method === \"confirm_permission\"\n\t\t\t\t\t? this.buildPermissionGroupKey(chatId, request.request)\n\t\t\t\t\t: this.buildGenericConfirmationGroupKey(chatId, label);\n\t\t\tawait this.queueConfirmationPrompt(chatId, request.id, label, groupKey);\n\t\t\treturn;\n\t\t}\n\n\t\tif (request.method === \"notify\") {\n\t\t\tconst chatId = this.activeTurn?.chatId ?? this.lastAuthorizedChatId;\n\t\t\tif (chatId) {\n\t\t\t\tawait this.bot.sendMessage(chatId, request.message);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Unsupported interactive extension methods in telegram v1: cancel by default.\n\t\tthis.rpcClient.respondExtensionUi({ type: \"extension_ui_response\", id: request.id, cancelled: true });\n\t}\n\n\tprivate async onRpcConfirmationRequest(event: RpcRequiresConfirmationEvent): Promise<void> {\n\t\tconst chatId = this.activeTurn?.chatId ?? this.lastAuthorizedChatId;\n\t\tif (!chatId) {\n\t\t\tthis.rpcClient.respondExtensionUi({ type: \"extension_ui_response\", id: event.id, confirmed: false });\n\t\t\treturn;\n\t\t}\n\t\tconst groupKey = this.buildPermissionGroupKey(chatId, event.request);\n\t\tawait this.queueConfirmationPrompt(chatId, event.id, event.message, groupKey);\n\t}\n\n\tprivate buildPermissionGroupKey(chatId: TelegramChatId, request: RpcRequiresConfirmationEvent[\"request\"]): string {\n\t\tconst requiredPermission = request.requiredPermission ?? \"unknown\";\n\t\tconst toolSource = request.toolSource ?? \"unknown\";\n\t\tconst inputJson = JSON.stringify(request.input ?? {});\n\t\treturn `${chatId}|perm|${request.toolName}|${requiredPermission}|${toolSource}|${request.summary}|${request.cwd}|${inputJson}`;\n\t}\n\n\tprivate buildGenericConfirmationGroupKey(chatId: TelegramChatId, label: string): string {\n\t\tconst normalized = label.replace(/\\s+/g, \" \").trim();\n\t\treturn `${chatId}|confirm|${normalized}`;\n\t}\n\n\tprivate async queueConfirmationPrompt(\n\t\tchatId: TelegramChatId,\n\t\trequestId: string,\n\t\tlabel: string,\n\t\tgroupKey: string,\n\t): Promise<void> {\n\t\tif (this.pendingConfirmations.has(requestId)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existing = this.pendingConfirmationGroupIdsByKey.get(groupKey);\n\t\tif (existing) {\n\t\t\texisting.add(requestId);\n\t\t\tthis.pendingConfirmations.set(requestId, { chatId, requestId, label, groupKey });\n\t\t\tif (this.activeTurn) {\n\t\t\t\tthis.activeTurn.phase = \"awaiting confirmation\";\n\t\t\t\tawait this.editLiveStatus(true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst ids = new Set<string>([requestId]);\n\t\tthis.pendingConfirmationGroupIdsByKey.set(groupKey, ids);\n\t\tthis.pendingConfirmations.set(requestId, { chatId, requestId, label, groupKey });\n\t\tawait this.bot.sendMessage(chatId, label, {\n\t\t\treplyMarkup: {\n\t\t\t\tinline_keyboard: [\n\t\t\t\t\t[\n\t\t\t\t\t\t{ text: \"Allow\", callback_data: `confirm:${requestId}:yes` },\n\t\t\t\t\t\t{ text: \"Deny\", callback_data: `confirm:${requestId}:no` },\n\t\t\t\t\t],\n\t\t\t\t],\n\t\t\t},\n\t\t});\n\t\tif (this.activeTurn) {\n\t\t\tthis.activeTurn.phase = \"awaiting confirmation\";\n\t\t\tawait this.editLiveStatus(true);\n\t\t}\n\t}\n\n\tprivate async respondConfirmation(requestId: string, confirmed: boolean): Promise<void> {\n\t\tconst pending = this.pendingConfirmations.get(requestId);\n\t\tif (!pending) return;\n\n\t\tconst groupedIds = this.pendingConfirmationGroupIdsByKey.get(pending.groupKey);\n\t\tconst ids = groupedIds && groupedIds.size > 0 ? Array.from(groupedIds) : [requestId];\n\t\tfor (const id of ids) {\n\t\t\tthis.pendingConfirmations.delete(id);\n\t\t\ttry {\n\t\t\t\tthis.rpcClient.respondExtensionUi({ type: \"extension_ui_response\", id, confirmed });\n\t\t\t} catch {\n\t\t\t\t// Best-effort for duplicated request IDs from different streams.\n\t\t\t}\n\t\t}\n\t\tthis.pendingConfirmationGroupIdsByKey.delete(pending.groupKey);\n\n\t\tif (this.activeTurn) {\n\t\t\tthis.activeTurn.phase = confirmed ? \"running\" : \"permission denied\";\n\t\t\tawait this.editLiveStatus(true);\n\t\t}\n\t}\n\n\tprivate extractAssistantTextFromTurnEnd(event: AgentEvent): string | undefined {\n\t\tconst messageEvent = event as { message?: { role?: string; content?: Array<{ type: string; text?: string }> } };\n\t\tconst message = messageEvent.message;\n\t\tif (!message || message.role !== \"assistant\") return undefined;\n\t\tconst content = Array.isArray(message.content) ? message.content : [];\n\t\tconst textParts = content\n\t\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && typeof part.text === \"string\")\n\t\t\t.map((part) => part.text.trim())\n\t\t\t.filter((part) => part.length > 0);\n\t\tif (textParts.length === 0) return undefined;\n\t\treturn textParts.join(\"\\n\\n\");\n\t}\n\n\tprivate escapeTelegramHtml(text: string): string {\n\t\treturn text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\t}\n\n\tprivate escapeTelegramHtmlAttribute(text: string): string {\n\t\treturn this.escapeTelegramHtml(text).replace(/\"/g, \"&quot;\");\n\t}\n\n\tprivate stripHtmlTags(text: string): string {\n\t\treturn text.replace(/<[^>]*>/g, \"\");\n\t}\n\n\tprivate normalizeTelegramText(text: string): string {\n\t\treturn text.replace(/\\r\\n/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n\t}\n\n\tprivate renderMarkdownInlineTokens(tokens: Token[] | undefined): string {\n\t\tif (!tokens || tokens.length === 0) return \"\";\n\t\tlet output = \"\";\n\t\tfor (const token of tokens) {\n\t\t\tswitch (token.type) {\n\t\t\t\tcase \"strong\":\n\t\t\t\t\toutput += `<b>${this.renderMarkdownInlineTokens(token.tokens)}</b>`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"em\":\n\t\t\t\t\toutput += `<i>${this.renderMarkdownInlineTokens(token.tokens)}</i>`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"del\":\n\t\t\t\t\toutput += `<s>${this.renderMarkdownInlineTokens(token.tokens)}</s>`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"codespan\":\n\t\t\t\t\toutput += `<code>${this.escapeTelegramHtml(token.text)}</code>`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"br\":\n\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"link\": {\n\t\t\t\t\tconst labelRaw = this.renderMarkdownInlineTokens(token.tokens);\n\t\t\t\t\tconst label = labelRaw.length > 0 ? labelRaw : this.escapeTelegramHtml(token.text ?? token.href);\n\t\t\t\t\tconst href = token.href?.trim();\n\t\t\t\t\tif (href && /^(https?:\\/\\/|mailto:|tg:\\/\\/)/i.test(href)) {\n\t\t\t\t\t\toutput += `<a href=\"${this.escapeTelegramHtmlAttribute(href)}\">${label}</a>`;\n\t\t\t\t\t} else if (href) {\n\t\t\t\t\t\toutput += `${label} (${this.escapeTelegramHtml(href)})`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += label;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"image\": {\n\t\t\t\t\tconst captionRaw = token.text?.trim();\n\t\t\t\t\tconst caption = captionRaw && captionRaw.length > 0 ? captionRaw : \"image\";\n\t\t\t\t\tconst href = token.href?.trim();\n\t\t\t\t\tif (href && /^https?:\\/\\//i.test(href)) {\n\t\t\t\t\t\toutput += `🖼 <a href=\"${this.escapeTelegramHtmlAttribute(href)}\">${this.escapeTelegramHtml(caption)}</a>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += `🖼 ${this.escapeTelegramHtml(caption)}`;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (Array.isArray(token.tokens) && token.tokens.length > 0) {\n\t\t\t\t\t\toutput += this.renderMarkdownInlineTokens(token.tokens);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += this.escapeTelegramHtml(token.text);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"escape\":\n\t\t\t\t\toutput += this.escapeTelegramHtml(token.text);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"html\": {\n\t\t\t\t\tconst htmlText = this.stripHtmlTags(token.text ?? token.raw ?? \"\");\n\t\t\t\t\tif (htmlText.length > 0) {\n\t\t\t\t\t\toutput += this.escapeTelegramHtml(htmlText);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tif (\"tokens\" in token && Array.isArray(token.tokens)) {\n\t\t\t\t\t\toutput += this.renderMarkdownInlineTokens(token.tokens);\n\t\t\t\t\t} else if (\"text\" in token && typeof token.text === \"string\") {\n\t\t\t\t\t\toutput += this.escapeTelegramHtml(token.text);\n\t\t\t\t\t} else if (\"raw\" in token && typeof token.raw === \"string\") {\n\t\t\t\t\t\toutput += this.escapeTelegramHtml(token.raw);\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\tprivate renderMarkdownTableCell(cell: Tokens.TableCell): string {\n\t\tconst rendered = this.renderMarkdownInlineTokens(cell.tokens);\n\t\treturn rendered.replace(/\\s+/g, \" \").trim();\n\t}\n\n\tprivate renderMarkdownBlockTokens(tokens: Token[] | undefined, listDepth = 0): string {\n\t\tif (!tokens || tokens.length === 0) return \"\";\n\t\tlet output = \"\";\n\t\tfor (const token of tokens) {\n\t\t\tswitch (token.type) {\n\t\t\t\tcase \"space\":\n\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"heading\":\n\t\t\t\t\toutput += `<b>${this.renderMarkdownInlineTokens(token.tokens)}</b>\\n`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"paragraph\":\n\t\t\t\t\toutput += `${this.renderMarkdownInlineTokens(token.tokens)}\\n`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (Array.isArray(token.tokens) && token.tokens.length > 0) {\n\t\t\t\t\t\toutput += `${this.renderMarkdownInlineTokens(token.tokens)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += `${this.escapeTelegramHtml(token.text)}\\n`;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"code\":\n\t\t\t\t\toutput += `<pre>${this.escapeTelegramHtml(token.text.replace(/\\r\\n/g, \"\\n\"))}</pre>\\n`;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"blockquote\": {\n\t\t\t\t\tconst rawQuote = this.normalizeTelegramText(this.renderMarkdownBlockTokens(token.tokens, listDepth));\n\t\t\t\t\tif (rawQuote.length > 0) {\n\t\t\t\t\t\tconst quoted = rawQuote\n\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t.map((line) => (line.trim().length > 0 ? `> ${line}` : \">\"))\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\t\toutput += `${quoted}\\n`;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"list\": {\n\t\t\t\t\tconst baseIndent = \" \".repeat(listDepth);\n\t\t\t\t\tconst start = token.ordered && typeof token.start === \"number\" ? token.start : 1;\n\t\t\t\t\ttoken.items.forEach((item: Tokens.ListItem, index: number) => {\n\t\t\t\t\t\tconst marker = token.ordered ? `${start + index}.` : \"•\";\n\t\t\t\t\t\tconst renderedItem = this.normalizeTelegramText(this.renderMarkdownBlockTokens(item.tokens, listDepth + 1));\n\t\t\t\t\t\tconst fallback = this.escapeTelegramHtml(item.text ?? \"\");\n\t\t\t\t\t\tconst body = renderedItem.length > 0 ? renderedItem : fallback;\n\t\t\t\t\t\tconst lines = body.split(\"\\n\");\n\t\t\t\t\t\tconst firstLine = lines.shift() ?? \"\";\n\t\t\t\t\t\toutput += `${baseIndent}${marker} ${firstLine}\\n`;\n\t\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\t\tif (line.trim().length === 0) {\n\t\t\t\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\toutput += `${baseIndent} ${line}\\n`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"hr\":\n\t\t\t\t\toutput += \"────────\\n\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"table\": {\n\t\t\t\t\tconst headerLine = token.header\n\t\t\t\t\t\t.map((cell: Tokens.TableCell) => this.renderMarkdownTableCell(cell))\n\t\t\t\t\t\t.join(\" | \")\n\t\t\t\t\t\t.trim();\n\t\t\t\t\tif (headerLine.length > 0) {\n\t\t\t\t\t\toutput += `${headerLine}\\n`;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const row of token.rows) {\n\t\t\t\t\t\tconst rowLine = row\n\t\t\t\t\t\t\t.map((cell: Tokens.TableCell) => this.renderMarkdownTableCell(cell))\n\t\t\t\t\t\t\t.join(\" | \")\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\t\tif (rowLine.length > 0) {\n\t\t\t\t\t\t\toutput += `${rowLine}\\n`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"html\": {\n\t\t\t\t\tconst htmlText = this.stripHtmlTags(token.text ?? token.raw ?? \"\").trim();\n\t\t\t\t\tif (htmlText.length > 0) {\n\t\t\t\t\t\toutput += `${this.escapeTelegramHtml(htmlText)}\\n`;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tif (\"tokens\" in token && Array.isArray(token.tokens)) {\n\t\t\t\t\t\toutput += `${this.renderMarkdownBlockTokens(token.tokens, listDepth)}\\n`;\n\t\t\t\t\t} else if (\"text\" in token && typeof token.text === \"string\") {\n\t\t\t\t\t\toutput += `${this.escapeTelegramHtml(token.text)}\\n`;\n\t\t\t\t\t} else if (\"raw\" in token && typeof token.raw === \"string\") {\n\t\t\t\t\t\toutput += `${this.escapeTelegramHtml(token.raw)}\\n`;\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\tprivate markdownToTelegramHtml(markdown: string): string {\n\t\tif (!markdown || markdown.trim().length === 0) return \"\";\n\t\tconst tokens = marked.lexer(markdown, { gfm: true, breaks: true }) as Token[];\n\t\tconst rendered = this.renderMarkdownBlockTokens(tokens);\n\t\treturn this.normalizeTelegramText(rendered);\n\t}\n\n\tprivate markdownToTelegramPlainText(markdown: string): string {\n\t\tconst html = this.markdownToTelegramHtml(markdown);\n\t\treturn this.normalizeTelegramText(\n\t\t\thtml\n\t\t\t\t.replace(/<a [^>]*>([\\s\\S]*?)<\\/a>/gi, \"$1\")\n\t\t\t\t.replace(/<\\/?(b|i|s|u|code|pre)>/gi, \"\")\n\t\t\t\t.replace(/&quot;/g, \"\\\"\")\n\t\t\t\t.replace(/&lt;/g, \"<\")\n\t\t\t\t.replace(/&gt;/g, \">\")\n\t\t\t\t.replace(/&amp;/g, \"&\"),\n\t\t);\n\t}\n\n\tprivate async sendRichMessage(chatId: TelegramChatId, text: string): Promise<void> {\n\t\tconst html = this.markdownToTelegramHtml(text);\n\t\tif (!html || html.length === 0) {\n\t\t\tawait this.bot.sendMessage(chatId, text);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait this.bot.sendMessage(chatId, html, { parseMode: \"HTML\" });\n\t\t} catch {\n\t\t\tconst plain = this.markdownToTelegramPlainText(text);\n\t\t\tawait this.bot.sendMessage(chatId, plain.length > 0 ? plain : text);\n\t\t}\n\t}\n\n\tprivate formatStatusPhase(phase: string): string {\n\t\tconst lower = phase.toLowerCase();\n\t\tif (lower.includes(\"awaiting\")) return \"confirm\";\n\t\tif (lower.includes(\"tool\")) return \"tool\";\n\t\tif (lower.includes(\"final\")) return \"final\";\n\t\tif (lower.includes(\"start\")) return \"start\";\n\t\tif (lower.includes(\"permission denied\")) return \"denied\";\n\t\tif (lower.includes(\"running\")) return \"run\";\n\t\treturn lower.replace(/\\s+/g, \"-\");\n\t}\n\n\tprivate formatPromptPreview(prompt: string, limit = 100): string {\n\t\tconst cleaned = prompt.replace(/\\s+/g, \" \").trim();\n\t\tif (cleaned.length <= limit) return cleaned;\n\t\treturn `${cleaned.slice(0, limit - 1)}…`;\n\t}\n\n\tprivate statusSpinnerFrame(elapsedMs: number): string {\n\t\tconst frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\t\treturn frames[Math.floor(elapsedMs / 250) % frames.length] ?? \"⠋\";\n\t}\n\n\tprivate statusPulseFrame(elapsedMs: number): string {\n\t\tconst frames = [\"◼···\", \"◼•··\", \"◼••·\", \"◼•••\", \"◼••·\", \"◼•··\"];\n\t\treturn frames[Math.floor(elapsedMs / 280) % frames.length] ?? \"◼···\";\n\t}\n\n\tprivate statusDotsFrame(elapsedMs: number): string {\n\t\tconst frames = [\".\", \"..\", \"...\"];\n\t\treturn frames[Math.floor(elapsedMs / 420) % frames.length] ?? \".\";\n\t}\n\n\tprivate statusActivityLabel(turn: ActiveTurnState | undefined): string {\n\t\tif (!turn) return \"idle\";\n\t\tconst phase = turn.phase.toLowerCase();\n\t\tif (phase.includes(\"awaiting\")) return \"awaiting confirm\";\n\t\tif (phase.includes(\"tool\")) {\n\t\t\tconst tool = turn.lastTool?.trim();\n\t\t\tif (tool && tool.length > 0) {\n\t\t\t\tconst shortTool = tool.length > 18 ? `${tool.slice(0, 17)}…` : tool;\n\t\t\t\treturn `tool:${shortTool}`;\n\t\t\t}\n\t\t\treturn \"tool:running\";\n\t\t}\n\t\tif (phase.includes(\"final\")) return \"finalizing\";\n\t\tif (phase.includes(\"start\")) return \"starting\";\n\t\tif (phase.includes(\"denied\")) return \"permission denied\";\n\t\treturn \"working\";\n\t}\n\n\tprivate formatToolBadge(toolName: string | undefined): string {\n\t\tif (!toolName) return \"\";\n\t\tconst compact = toolName.trim().replace(/\\s+/g, \" \");\n\t\tconst clipped = compact.length > 18 ? `${compact.slice(0, 17)}…` : compact;\n\t\treturn ` · ${clipped}`;\n\t}\n\n\tprivate formatStartingStatus(prompt: string): string {\n\t\treturn [`⏳ ${APP_NAME} · start · 0s · q${this.queue.length}`, `“${this.formatPromptPreview(prompt, 56)}”`].join(\"\\n\");\n\t}\n\n\tprivate formatLiveStatus(turn: ActiveTurnState | undefined = this.activeTurn): string {\n\t\tif (!turn) return \"No active task.\";\n\t\tconst elapsedMs = Date.now() - turn.startedAt;\n\t\tconst elapsed = `${Math.floor(elapsedMs / 1000)}s`;\n\t\tconst spinner = this.statusSpinnerFrame(elapsedMs);\n\t\tconst pulse = this.statusPulseFrame(elapsedMs);\n\t\tconst phaseLabel = this.formatStatusPhase(turn.phase);\n\t\tconst toolSegment = this.formatToolBadge(turn.lastTool);\n\t\tconst activity = this.statusActivityLabel(turn);\n\t\treturn [\n\t\t\t`${spinner} ${APP_NAME} · ${phaseLabel}${toolSegment} · ${elapsed} · q${this.queue.length}`,\n\t\t\t`${pulse} ${activity}`,\n\t\t\t`“${this.formatPromptPreview(turn.prompt, 56)}”`,\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate async editLiveStatus(force = false): Promise<void> {\n\t\tif (!this.activeTurn) return;\n\t\tif (this.activeTurn.statusEditPending) return;\n\t\tconst turnId = this.activeTurn.turnId;\n\t\tconst now = Date.now();\n\t\tconst effectiveThrottleMs = Math.min(this.statusEditThrottleMs, LIVE_STATUS_ANIMATION_MAX_THROTTLE_MS);\n\t\tconst waitMs = this.activeTurn.lastStatusEditAt + effectiveThrottleMs - now;\n\t\tif (!force && waitMs > 0) {\n\t\t\tthis.activeTurn.statusEditPending = true;\n\t\t\tthis.activeTurn.statusEditTimer = setTimeout(() => {\n\t\t\t\tif (this.activeTurn && this.activeTurn.turnId === turnId) {\n\t\t\t\t\tthis.activeTurn.statusEditPending = false;\n\t\t\t\t\tvoid this.editLiveStatus(true);\n\t\t\t\t}\n\t\t\t}, waitMs);\n\t\t\treturn;\n\t\t}\n\n\t\tconst target = this.activeTurn;\n\t\tconst statusText = this.formatLiveStatus(target);\n\t\tconst editPromise = this.bot\n\t\t\t.editMessageText(target.chatId, target.statusMessageId, statusText, {\n\t\t\t\t\treplyMarkup: { inline_keyboard: [] },\n\t\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\ttarget.lastStatusEditAt = Date.now();\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t// Ignore no-op edit errors and transient \"message is not modified\".\n\t\t\t\tif (!message.toLowerCase().includes(\"message is not modified\")) {\n\t\t\t\t\tconsole.warn(`[telegram] status edit failed: ${message}`);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tif (target.statusEditInFlight === editPromise) {\n\t\t\t\t\ttarget.statusEditInFlight = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\ttarget.statusEditInFlight = editPromise;\n\t\tawait editPromise;\n\t}\n\n\tprivate async finishTurn(options?: { error?: string }): Promise<void> {\n\t\tconst finishedTurn = this.activeTurn;\n\t\tif (!finishedTurn) return;\n\t\tthis.activeTurn = undefined;\n\t\tif (finishedTurn.statusEditTimer) {\n\t\t\tclearTimeout(finishedTurn.statusEditTimer);\n\t\t}\n\t\tfinishedTurn.statusEditPending = false;\n\t\tif (finishedTurn.statusEditInFlight) {\n\t\t\ttry {\n\t\t\t\tawait finishedTurn.statusEditInFlight;\n\t\t\t} catch {\n\t\t\t\t// Best-effort; still continue to final status update.\n\t\t\t}\n\t\t}\n\n\t\tlet finalText: string | null = null;\n\t\tif (!options?.error) {\n\t\t\ttry {\n\t\t\t\tfinalText = await this.rpcClient.getLastAssistantText();\n\t\t\t\tthis.rpcConnected = true;\n\t\t\t} catch (error) {\n\t\t\t\tthis.rpcConnected = false;\n\t\t\t\toptions = {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst statusLabel = options?.error\n\t\t\t? `❌ error · ${Math.floor((Date.now() - finishedTurn.startedAt) / 1000)}s\\n${this.formatPromptPreview(options.error, 96)}`\n\t\t\t: finishedTurn.aborted\n\t\t\t\t? `⛔ aborted · ${Math.floor((Date.now() - finishedTurn.startedAt) / 1000)}s`\n\t\t\t\t: `✅ done · ${Math.floor((Date.now() - finishedTurn.startedAt) / 1000)}s`;\n\t\ttry {\n\t\t\tawait this.bot.editMessageText(finishedTurn.chatId, finishedTurn.statusMessageId, statusLabel, {\n\t\t\t\treplyMarkup: { inline_keyboard: [] },\n\t\t\t});\n\t\t} catch {\n\t\t\t// Best-effort.\n\t\t}\n\n\t\tif (options?.error) {\n\t\t\tawait this.bot.sendMessage(finishedTurn.chatId, `Task failed: ${options.error}`);\n\t\t} else if (finalText && finalText.trim().length > 0) {\n\t\t\tawait this.sendFinalOutput(finishedTurn.chatId, finalText);\n\t\t} else if (!finishedTurn.aborted) {\n\t\t\tawait this.bot.sendMessage(finishedTurn.chatId, \"Task completed with no assistant text output.\");\n\t\t}\n\n\t\tawait this.drainQueue();\n\t}\n\n\tprivate async sendFinalOutput(chatId: TelegramChatId, finalText: string): Promise<void> {\n\t\tif (finalText.length <= this.maxSummaryChars) {\n\t\t\tawait this.sendRichMessage(chatId, finalText);\n\t\t\treturn;\n\t\t}\n\t\tconst summary = `${finalText.slice(0, this.maxSummaryChars).trimEnd()}\\n\\n[output truncated in chat]`;\n\t\tawait this.sendRichMessage(chatId, summary);\n\t\tawait this.bot.sendTextDocument(chatId, \"iosm-output.txt\", finalText, \"Full output\");\n\t}\n\n\tprivate async drainQueue(): Promise<void> {\n\t\tif (this.activeTurn) return;\n\t\tconst next = this.queue.shift();\n\t\tif (!next) return;\n\t\tawait this.startTurn(next.chatId, next.text);\n\t}\n}\n"]}
@@ -177,7 +177,7 @@ Migration notes:
177
177
 
178
178
  | Flag | Description |
179
179
  |------|-------------|
180
- | `--mode <text\|json\|rpc>` | Set output/protocol mode |
180
+ | `--mode <text\|json\|rpc\|telegram>` | Set output/protocol mode |
181
181
  | `--print`, `-p` | Non-interactive: run prompt and exit |
182
182
 
183
183
  **Examples:**
@@ -194,6 +194,15 @@ iosm --mode json "Analyze dependencies"
194
194
 
195
195
  # JSON-RPC server for IDE integration
196
196
  iosm --mode rpc --no-session
197
+
198
+ # Telegram bridge for remote control
199
+ iosm --mode telegram
200
+
201
+ # Telegram bridge with explicit profile
202
+ iosm telegram --profile full
203
+ iosm telegram --profile meta
204
+ iosm telegram --profile iosm
205
+ iosm telegram --profile plan
197
206
  ```
198
207
 
199
208
  ### Session Control
@@ -121,6 +121,27 @@ Settings are merged in this order (later wins):
121
121
  `promptContext` controls system prompt context compaction before model call: dedupe by normalized content hash, per-file char budget, total char budget, optional git snapshot context inclusion, and bounded git snapshot size.
122
122
  `permissions.extensionToolEnforcement` enables strict runtime permission tier checks for extension tools (off by default).
123
123
 
124
+ ### Telegram Bridge Settings
125
+
126
+ Telegram remote control is opt-in and disabled by default.
127
+
128
+ ```json
129
+ {
130
+ "telegram": {
131
+ "enabled": true,
132
+ "botToken": "123456:AA...",
133
+ "allowedUserIds": [123456789],
134
+ "transport": "long-polling",
135
+ "chatDefaults": {
136
+ "statusEditThrottleMs": 1200,
137
+ "maxSummaryChars": 3000
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ Run with `iosm --mode telegram` or `iosm telegram`.
144
+
124
145
  ### `db_run` Setup (Recommended)
125
146
 
126
147
  1. Install required DB client CLI for your adapter:
@@ -147,6 +147,29 @@ console.log(result.details?.backgroundTaskId);
147
147
 
148
148
  Extensions can expose UI elements through RPC mode. See [rpc-extension-ui.ts](../examples/rpc-extension-ui.ts) for a complete example of using `confirm`, `select`, `notify`, and other UI methods over RPC.
149
149
 
150
+ RPC clients can also drive built-in slash commands without TUI by sending:
151
+
152
+ ```json
153
+ { "type": "run_builtin_command", "commandText": "/permissions status" }
154
+ ```
155
+
156
+ Current headless built-ins include:
157
+ - `/status`, `/session`, `/abort`, `/new`, `/clear`
158
+ - `/name`, `/copy`, `/export`
159
+ - `/model`, `/model cycle`
160
+ - `/yolo`, `/permissions ...`
161
+ - `/resume <session-path>`, `/fork <entry-id>`
162
+
163
+ For `ask`-mode dangerous tool calls, RPC now emits:
164
+ - `requires_confirmation` event (high-level signal)
165
+ - `extension_ui_request` with `method: "confirm_permission"` and matching `id`
166
+
167
+ Clients should answer with:
168
+
169
+ ```json
170
+ { "type": "extension_ui_response", "id": "<request-id>", "confirmed": true }
171
+ ```
172
+
150
173
  ---
151
174
 
152
175
  ## Print Mode
@@ -1,6 +1,6 @@
1
1
  # Extension Examples
2
2
 
3
- 66 example extensions for `iosm-cli` demonstrating the full extension API: custom tools, lifecycle hooks, commands, UI components, and provider integrations.
3
+ 65 example extensions for `iosm-cli` demonstrating the full extension API: custom tools, lifecycle hooks, commands, UI components, and provider integrations.
4
4
 
5
5
  ## Quick Start
6
6
 
@@ -56,7 +56,6 @@ export default function (pi: ExtensionAPI) {
56
56
  | [built-in-tool-renderer.ts](built-in-tool-renderer.ts) | Custom compact rendering for built-in tools | `renderCall()`, `renderResult()` |
57
57
  | [minimal-mode.ts](minimal-mode.ts) | Override built-in tool rendering for minimal display | Tool render override |
58
58
  | [truncated-tool.ts](truncated-tool.ts) | Wraps ripgrep with proper output truncation (50KB/2000 lines) | Output truncation, `pi.exec()` |
59
- | [antigravity-image-gen.ts](antigravity-image-gen.ts) | Generate images via Google Antigravity | External API, file save |
60
59
  | [ssh.ts](ssh.ts) | Delegate all tools to a remote machine via SSH | SSH operations, tool delegation |
61
60
  | [subagent/](subagent/) | Delegate tasks to subagents with isolated context | Subagent orchestration |
62
61
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iosm-cli",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "Standalone IOSM CLI with agent tooling, session management, and IOSM artifact orchestration",
5
5
  "type": "module",
6
6
  "iosmConfig": {
@@ -26,7 +26,8 @@
26
26
  "dist",
27
27
  "docs",
28
28
  "examples",
29
- "CHANGELOG.md"
29
+ "CHANGELOG.md",
30
+ ".npmignore"
30
31
  ],
31
32
  "scripts": {
32
33
  "clean": "shx rm -rf dist",
@@ -99,7 +100,7 @@
99
100
  },
100
101
  "repository": {
101
102
  "type": "git",
102
- "url": "https://github.com/rokoss21/iosm-cli.git"
103
+ "url": "git+https://github.com/rokoss21/iosm-cli.git"
103
104
  },
104
105
  "homepage": "https://github.com/rokoss21/iosm-cli#readme",
105
106
  "bugs": {